@goldstack/template-dynamodb 0.3.30 → 0.3.31
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/localDynamoDB.d.ts +9 -2
- package/dist/src/localDynamoDB.d.ts.map +1 -1
- package/dist/src/localDynamoDB.js +149 -102
- package/dist/src/localDynamoDB.js.map +1 -1
- package/dist/src/localInstances.d.ts +47 -0
- package/dist/src/localInstances.d.ts.map +1 -0
- package/dist/src/localInstances.js +135 -0
- package/dist/src/localInstances.js.map +1 -0
- package/dist/src/templateDynamoDBTable.d.ts +3 -2
- package/dist/src/templateDynamoDBTable.d.ts.map +1 -1
- package/dist/src/templateDynamoDBTable.js +32 -4
- package/dist/src/templateDynamoDBTable.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,16 +3,23 @@ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
|
3
3
|
import { DynamoDBDeployment, DynamoDBPackage } from './templateDynamoDB';
|
|
4
4
|
export interface DynamoDBInstance {
|
|
5
5
|
port: number;
|
|
6
|
-
|
|
6
|
+
processId?: number;
|
|
7
|
+
dockerContainerId?: string;
|
|
7
8
|
}
|
|
9
|
+
export declare function stopInstance(instance: DynamoDBInstance): Promise<void>;
|
|
8
10
|
export type LocalConnectType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, deploymentName?: string) => Promise<DynamoDBClient>;
|
|
9
11
|
export type StartLocalDynamoDBType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, options: {
|
|
10
12
|
port: number;
|
|
11
13
|
}, deploymentName?: string) => Promise<DynamoDBInstance>;
|
|
12
|
-
export
|
|
14
|
+
export interface StopLocalDynamoDBOptions {
|
|
15
|
+
port?: number;
|
|
16
|
+
}
|
|
17
|
+
export type StopLocalDynamoDBType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, options?: StopLocalDynamoDBOptions, deploymentName?: string) => Promise<void>;
|
|
18
|
+
export type StopAllLocalDynamoDBType = (packageConfig: EmbeddedPackageConfig<DynamoDBPackage, DynamoDBDeployment>, deploymentName?: string) => Promise<void>;
|
|
13
19
|
export declare const localConnect: LocalConnectType;
|
|
14
20
|
export declare const endpointUrl: (startedContainer: DynamoDBInstance) => string;
|
|
15
21
|
export declare const createClient: (startedContainer: DynamoDBInstance) => DynamoDBClient;
|
|
16
22
|
export declare const startLocalDynamoDB: StartLocalDynamoDBType;
|
|
23
|
+
export declare const stopAllLocalDynamoDB: StopAllLocalDynamoDBType;
|
|
17
24
|
export declare const stopLocalDynamoDB: StopLocalDynamoDBType;
|
|
18
25
|
//# sourceMappingURL=localDynamoDB.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localDynamoDB.d.ts","sourceRoot":"","sources":["../../src/localDynamoDB.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"localDynamoDB.d.ts","sourceRoot":"","sources":["../../src/localDynamoDB.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6E5E;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;AAMnB,eAAO,MAAM,YAAY,EAAE,gBA2B1B,CAAC;AAEF,eAAO,MAAM,WAAW,qBAAsB,gBAAgB,KAAG,MAIhE,CAAC;AAEF,eAAO,MAAM,YAAY,qBACL,gBAAgB,KACjC,cAWF,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,sBA8BhC,CAAC;AAyFF,eAAO,MAAM,oBAAoB,EAAE,wBAkBlC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,qBAuB/B,CAAC"}
|
|
@@ -36,31 +36,109 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.stopLocalDynamoDB = exports.startLocalDynamoDB = exports.createClient = exports.endpointUrl = exports.localConnect = void 0;
|
|
39
|
+
exports.stopLocalDynamoDB = exports.stopAllLocalDynamoDB = exports.startLocalDynamoDB = exports.createClient = exports.endpointUrl = exports.localConnect = void 0;
|
|
40
|
+
exports.stopInstance = stopInstance;
|
|
40
41
|
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
41
42
|
const dynamoDBLocal = __importStar(require("dynamo-db-local"));
|
|
42
43
|
const utils_sh_1 = require("@goldstack/utils-sh");
|
|
43
|
-
const dynamoDBPackageUtils_1 = require("./dynamoDBPackageUtils");
|
|
44
44
|
const wait_port_1 = __importDefault(require("wait-port"));
|
|
45
45
|
const tcp_port_used_1 = require("tcp-port-used");
|
|
46
46
|
const child_process_1 = require("child_process");
|
|
47
47
|
const utils_log_1 = require("@goldstack/utils-log");
|
|
48
|
+
const localInstances_1 = require("./localInstances");
|
|
49
|
+
async function stopInstance(instance) {
|
|
50
|
+
if (instance.processId) {
|
|
51
|
+
if (process.platform === 'win32') {
|
|
52
|
+
// Try graceful termination first
|
|
53
|
+
const result = (0, child_process_1.spawnSync)('taskkill', [
|
|
54
|
+
'/pid',
|
|
55
|
+
instance.processId.toString(),
|
|
56
|
+
'/t',
|
|
57
|
+
]);
|
|
58
|
+
if (result.status !== 0) {
|
|
59
|
+
(0, utils_log_1.warn)(`Failed to terminate process ${instance.processId} gracefully: ${result.stderr}`);
|
|
60
|
+
}
|
|
61
|
+
// Give it some time before force kill
|
|
62
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
63
|
+
// Force kill
|
|
64
|
+
const forceResult = (0, child_process_1.spawnSync)('taskkill', [
|
|
65
|
+
'/pid',
|
|
66
|
+
instance.processId.toString(),
|
|
67
|
+
'/f',
|
|
68
|
+
'/t',
|
|
69
|
+
]);
|
|
70
|
+
if (forceResult.status !== 0) {
|
|
71
|
+
(0, utils_log_1.error)(`Failed to force kill process ${instance.processId}: ${forceResult.stderr}`);
|
|
72
|
+
throw new Error(`Failed to terminate process ${instance.processId}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
try {
|
|
77
|
+
// Try graceful termination first
|
|
78
|
+
process.kill(instance.processId, 'SIGTERM');
|
|
79
|
+
// Give it some time before force kill
|
|
80
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
81
|
+
// Check if process still exists
|
|
82
|
+
try {
|
|
83
|
+
process.kill(instance.processId, 0); // Signal 0 is used to check existence
|
|
84
|
+
// Process still exists, try force kill
|
|
85
|
+
process.kill(instance.processId, 'SIGKILL');
|
|
86
|
+
// Wait a moment and verify process is gone
|
|
87
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
88
|
+
try {
|
|
89
|
+
process.kill(instance.processId, 0);
|
|
90
|
+
// If we get here, process still exists
|
|
91
|
+
(0, utils_log_1.error)(`Failed to terminate process ${instance.processId} after SIGKILL`);
|
|
92
|
+
throw new Error(`Process ${instance.processId} could not be terminated`);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
if (e.code === 'ESRCH') {
|
|
96
|
+
// Process successfully terminated
|
|
97
|
+
(0, utils_log_1.debug)(`Process ${instance.processId} successfully terminated`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
throw e;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
if (e.code === 'ESRCH') {
|
|
106
|
+
// Process already terminated after SIGTERM
|
|
107
|
+
(0, utils_log_1.debug)(`Process ${instance.processId} terminated gracefully`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
throw e;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
(0, utils_log_1.error)(`Failed to terminate process ${instance.processId}: ${e}`);
|
|
116
|
+
throw e;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (instance.dockerContainerId) {
|
|
121
|
+
await (0, utils_sh_1.execAsync)(`docker stop ${instance.dockerContainerId}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
48
124
|
function areWeTestingWithJest() {
|
|
49
125
|
return process.env.JEST_WORKER_ID !== undefined;
|
|
50
126
|
}
|
|
51
|
-
const startedContainers = new Map();
|
|
52
127
|
const localConnect = async (packageConfig, deploymentName) => {
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
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.');
|
|
128
|
+
const existingInstance = localInstances_1.localInstancesManager.getFirstRunningInstance();
|
|
129
|
+
if (existingInstance) {
|
|
130
|
+
return (0, exports.createClient)(existingInstance);
|
|
57
131
|
}
|
|
58
|
-
if (
|
|
59
|
-
(
|
|
60
|
-
return (0, exports.createClient)(startedContainer);
|
|
132
|
+
if (areWeTestingWithJest()) {
|
|
133
|
+
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.');
|
|
61
134
|
}
|
|
62
|
-
const
|
|
63
|
-
|
|
135
|
+
const portToUse = (process.env.DYNAMODB_LOCAL_PORT &&
|
|
136
|
+
parseInt(process.env.DYNAMODB_LOCAL_PORT)) ||
|
|
137
|
+
8000;
|
|
138
|
+
(0, utils_log_1.debug)(`Starting new local DynamoDB instance on port ${portToUse}.`);
|
|
139
|
+
// No running instance found, start a new one
|
|
140
|
+
const newInstance = await (0, exports.startLocalDynamoDB)(packageConfig, { port: portToUse }, deploymentName);
|
|
141
|
+
return (0, exports.createClient)(newInstance);
|
|
64
142
|
};
|
|
65
143
|
exports.localConnect = localConnect;
|
|
66
144
|
const endpointUrl = (startedContainer) => {
|
|
@@ -82,65 +160,34 @@ const createClient = (startedContainer) => {
|
|
|
82
160
|
};
|
|
83
161
|
exports.createClient = createClient;
|
|
84
162
|
const startLocalDynamoDB = async (packageConfig, { port }, deploymentName) => {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (
|
|
88
|
-
|
|
163
|
+
// Check if instance already exists on requested port
|
|
164
|
+
const existingInstance = localInstances_1.localInstancesManager.getInstance(port);
|
|
165
|
+
if (existingInstance && existingInstance !== 'stopped') {
|
|
166
|
+
(0, utils_log_1.debug)(`Starting DynamoDB local not required since instance already running on port ${port}`);
|
|
167
|
+
localInstances_1.localInstancesManager.incrementUsageCounter(port);
|
|
168
|
+
return existingInstance;
|
|
89
169
|
}
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
170
|
+
// Check if any instance is already running on a different port
|
|
171
|
+
const allInstances = localInstances_1.localInstancesManager.getAllInstances();
|
|
172
|
+
for (const [existingPort, instance] of allInstances.entries()) {
|
|
173
|
+
if (instance !== 'stopped') {
|
|
174
|
+
(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}.
|
|
175
|
+
It is recommended to have only one instance of local DynamoDB running at a time (since one instance can support multiple tables).`);
|
|
176
|
+
}
|
|
95
177
|
}
|
|
96
|
-
|
|
97
|
-
|
|
178
|
+
(0, utils_log_1.debug)(`Starting new DynamoDB local instance on port ${port}`);
|
|
179
|
+
// No running instance found, start a new one
|
|
180
|
+
const newInstance = await spawnLocalDynamoDB(port);
|
|
181
|
+
localInstances_1.localInstancesManager.setInstance(port, newInstance);
|
|
182
|
+
localInstances_1.localInstancesManager.incrementUsageCounter(port);
|
|
183
|
+
return newInstance;
|
|
98
184
|
};
|
|
99
185
|
exports.startLocalDynamoDB = startLocalDynamoDB;
|
|
100
|
-
function killProcess(childProcess) {
|
|
101
|
-
return new Promise((resolve, reject) => {
|
|
102
|
-
var _a;
|
|
103
|
-
if (process.platform === 'win32') {
|
|
104
|
-
if (!childProcess.pid) {
|
|
105
|
-
throw new Error('Process id cannot be identified.');
|
|
106
|
-
}
|
|
107
|
-
(0, child_process_1.spawn)('taskkill', ['/pid', (_a = childProcess.pid) === null || _a === void 0 ? void 0 : _a.toString(), '/t']);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
childProcess.kill('SIGTERM');
|
|
111
|
-
}
|
|
112
|
-
const timeout = setTimeout(() => {
|
|
113
|
-
var _a;
|
|
114
|
-
if (process.platform === 'win32') {
|
|
115
|
-
if (!childProcess.pid) {
|
|
116
|
-
throw new Error('Process id cannot be identified.');
|
|
117
|
-
}
|
|
118
|
-
(0, child_process_1.spawn)('taskkill', ['/pid', (_a = childProcess.pid) === null || _a === void 0 ? void 0 : _a.toString(), '/f', '/t']);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
childProcess.kill('SIGKILL');
|
|
122
|
-
}
|
|
123
|
-
}, 5000);
|
|
124
|
-
const errorTimeout = setTimeout(() => {
|
|
125
|
-
clearTimeout(timeout);
|
|
126
|
-
reject(new Error('Process could not be terminated after 30 s'));
|
|
127
|
-
}, 30000);
|
|
128
|
-
childProcess.on('exit', (code, signal) => {
|
|
129
|
-
clearTimeout(timeout);
|
|
130
|
-
clearTimeout(errorTimeout);
|
|
131
|
-
(0, utils_log_1.debug)(`DynamoDB child process exited with code ${code} and signal ${signal}`);
|
|
132
|
-
resolve();
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
186
|
const spawnLocalDynamoDB = async (port) => {
|
|
137
187
|
if (await (0, tcp_port_used_1.check)(port)) {
|
|
138
188
|
(0, utils_log_1.warn)(`Port ${port} is already in use. Assuming another instance of DynamoDB is already running.`);
|
|
139
189
|
return {
|
|
140
190
|
port,
|
|
141
|
-
stop: async () => {
|
|
142
|
-
// no op, someone else controls this instance
|
|
143
|
-
},
|
|
144
191
|
};
|
|
145
192
|
}
|
|
146
193
|
let javaViable = (0, utils_sh_1.commandExists)('java');
|
|
@@ -155,39 +202,33 @@ const spawnLocalDynamoDB = async (port) => {
|
|
|
155
202
|
}
|
|
156
203
|
}
|
|
157
204
|
if (javaViable) {
|
|
158
|
-
(0, utils_log_1.info)(
|
|
205
|
+
(0, utils_log_1.info)(`Starting local DynamoDB with Java on port ${port}`);
|
|
159
206
|
const pr = dynamoDBLocal.spawn({
|
|
160
207
|
port,
|
|
161
208
|
path: null,
|
|
162
209
|
detached: false,
|
|
163
210
|
});
|
|
211
|
+
if (!pr.pid) {
|
|
212
|
+
throw new Error('Process id cannot be identified.');
|
|
213
|
+
}
|
|
164
214
|
await Promise.all([
|
|
165
215
|
await (0, wait_port_1.default)({
|
|
166
216
|
host: 'localhost',
|
|
167
217
|
port,
|
|
218
|
+
output: 'silent',
|
|
168
219
|
}),
|
|
169
220
|
await new Promise((resolve) => {
|
|
170
221
|
pr.stdout.once('data', () => resolve());
|
|
171
222
|
}),
|
|
172
223
|
]);
|
|
173
|
-
(0, utils_log_1.info)(
|
|
224
|
+
(0, utils_log_1.info)(`Started local DynamoDB with Java on port ${port}`);
|
|
174
225
|
return {
|
|
175
226
|
port,
|
|
176
|
-
|
|
177
|
-
(0, utils_log_1.info)('Stopping local Java DynamoDB');
|
|
178
|
-
try {
|
|
179
|
-
await killProcess(pr);
|
|
180
|
-
}
|
|
181
|
-
catch (e) {
|
|
182
|
-
(0, utils_log_1.error)('Stopping local Java DynamoDB process not successful');
|
|
183
|
-
throw e;
|
|
184
|
-
}
|
|
185
|
-
(0, utils_log_1.info)('Local Java DynamoDB stopped');
|
|
186
|
-
},
|
|
227
|
+
processId: pr.pid,
|
|
187
228
|
};
|
|
188
229
|
}
|
|
189
230
|
if ((0, utils_sh_1.commandExists)('docker')) {
|
|
190
|
-
|
|
231
|
+
(0, utils_log_1.info)('Starting local DynamoDB with Docker');
|
|
191
232
|
const detached = global['CI'] ? true : false;
|
|
192
233
|
const hash = new Date().getTime();
|
|
193
234
|
const containerName = 'goldstack-local-dynamodb-' + hash;
|
|
@@ -204,44 +245,50 @@ const spawnLocalDynamoDB = async (port) => {
|
|
|
204
245
|
await (0, wait_port_1.default)({
|
|
205
246
|
host: 'localhost',
|
|
206
247
|
port,
|
|
248
|
+
output: 'silent',
|
|
207
249
|
});
|
|
208
250
|
await new Promise((resolve) => {
|
|
209
251
|
setTimeout(resolve, 5000);
|
|
210
252
|
});
|
|
211
253
|
return {
|
|
212
254
|
port,
|
|
213
|
-
|
|
214
|
-
console.debug('Stopping local Docker DynamoDB');
|
|
215
|
-
try {
|
|
216
|
-
await killProcess(pr);
|
|
217
|
-
const containersAfterKillProcess = await (0, utils_sh_1.execAsync)('docker container ls', {
|
|
218
|
-
silent: true,
|
|
219
|
-
});
|
|
220
|
-
if (containersAfterKillProcess.indexOf(containerName) !== -1) {
|
|
221
|
-
await (0, utils_sh_1.execAsync)(`docker stop ${containerName}`);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
catch (e) {
|
|
225
|
-
(0, utils_log_1.error)('Stopping local Docker DynamoDB process not successful');
|
|
226
|
-
throw e;
|
|
227
|
-
}
|
|
228
|
-
(0, utils_log_1.info)('Local Docker DynamoDB stopped');
|
|
229
|
-
},
|
|
255
|
+
dockerContainerId: containerName,
|
|
230
256
|
};
|
|
231
257
|
}
|
|
232
258
|
throw new Error('Either Docker or Java needs to be installed to run local DynamoDB');
|
|
233
259
|
};
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
260
|
+
const stopAllLocalDynamoDB = async (packageConfig, deploymentName) => {
|
|
261
|
+
(0, utils_log_1.debug)('Stopping all local DynamoDB instances. Currently defined: ' +
|
|
262
|
+
localInstances_1.localInstancesManager.getInstanceCount());
|
|
263
|
+
// Stop all running instances regardless of reference count
|
|
264
|
+
const allInstances = localInstances_1.localInstancesManager.getAllInstances();
|
|
265
|
+
for (const [port, instance] of allInstances.entries()) {
|
|
266
|
+
if (instance && instance !== 'stopped') {
|
|
267
|
+
(0, utils_log_1.debug)(`Stopping instance on port ${port}`);
|
|
268
|
+
localInstances_1.localInstancesManager.setInstance(port, 'stopped');
|
|
269
|
+
localInstances_1.localInstancesManager.removeUsageCounter(port);
|
|
270
|
+
await stopInstance(instance);
|
|
271
|
+
}
|
|
239
272
|
}
|
|
240
|
-
|
|
241
|
-
|
|
273
|
+
};
|
|
274
|
+
exports.stopAllLocalDynamoDB = stopAllLocalDynamoDB;
|
|
275
|
+
const stopLocalDynamoDB = async (packageConfig, options, deploymentName) => {
|
|
276
|
+
var _a;
|
|
277
|
+
// If no port specified, use default port
|
|
278
|
+
const defaultPort = (process.env.DYNAMODB_LOCAL_PORT &&
|
|
279
|
+
parseInt(process.env.DYNAMODB_LOCAL_PORT)) ||
|
|
280
|
+
8000;
|
|
281
|
+
const portToStop = (_a = options === null || options === void 0 ? void 0 : options.port) !== null && _a !== void 0 ? _a : defaultPort;
|
|
282
|
+
// Stop specific instance
|
|
283
|
+
const instance = localInstances_1.localInstancesManager.getInstance(portToStop);
|
|
284
|
+
if (instance && instance !== 'stopped') {
|
|
285
|
+
const remainingUsers = localInstances_1.localInstancesManager.decrementUsageCounter(portToStop);
|
|
286
|
+
if (remainingUsers === 0) {
|
|
287
|
+
// Last user, stop the instance
|
|
288
|
+
localInstances_1.localInstancesManager.setInstance(portToStop, 'stopped');
|
|
289
|
+
await stopInstance(instance);
|
|
290
|
+
}
|
|
242
291
|
}
|
|
243
|
-
startedContainers.set(tableName, 'stopped');
|
|
244
|
-
await startedContainer.stop();
|
|
245
292
|
};
|
|
246
293
|
exports.stopLocalDynamoDB = stopLocalDynamoDB;
|
|
247
294
|
//# sourceMappingURL=localDynamoDB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localDynamoDB.js","sourceRoot":"","sources":["../../src/localDynamoDB.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"localDynamoDB.js","sourceRoot":"","sources":["../../src/localDynamoDB.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DynamoDBInstance } from './localDynamoDB';
|
|
2
|
+
/**
|
|
3
|
+
* Interface for managing local DynamoDB instances and their usage
|
|
4
|
+
*/
|
|
5
|
+
export interface LocalInstancesManager {
|
|
6
|
+
/** Get an instance for a specific port if it exists and is running */
|
|
7
|
+
getInstance(port: number): DynamoDBInstance | 'stopped' | undefined;
|
|
8
|
+
/** Get the first running instance if any exists */
|
|
9
|
+
getFirstRunningInstance(): DynamoDBInstance | undefined;
|
|
10
|
+
/** Set an instance for a specific port */
|
|
11
|
+
setInstance(port: number, instance: DynamoDBInstance | 'stopped'): void;
|
|
12
|
+
/** Get all running instances */
|
|
13
|
+
getAllInstances(): Map<number, DynamoDBInstance | 'stopped'>;
|
|
14
|
+
/** Get number of defined instances */
|
|
15
|
+
getInstanceCount(): number;
|
|
16
|
+
/** Increment usage counter for a port */
|
|
17
|
+
incrementUsageCounter(port: number): void;
|
|
18
|
+
/** Decrement usage counter for a port */
|
|
19
|
+
decrementUsageCounter(port: number): number;
|
|
20
|
+
/** Get current usage count for a port */
|
|
21
|
+
getUsageCount(port: number): number;
|
|
22
|
+
/** Remove usage counter for a port */
|
|
23
|
+
removeUsageCounter(port: number): void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Implementation of LocalInstancesManager for managing DynamoDB local instances
|
|
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 {};
|
|
47
|
+
//# sourceMappingURL=localInstances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localInstances.d.ts","sourceRoot":"","sources":["../../src/localInstances.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAmBnD;;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;AAED;;GAEG;AACH,cAAM,yBAA0B,YAAW,qBAAqB;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IAEpD,OAAO,CAAC,gBAAgB,CACZ;IAEZ,OAAO,CAAC,gBAAgB,CAAkC;;IAM1D,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,SAAS;IA8BjB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS;IAInE,uBAAuB,IAAI,gBAAgB,GAAG,SAAS;IAUvD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI;IAmBvE,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAI5D,gBAAgB,IAAI,MAAM;IAI1B,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAY3C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAInC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAIvC;AAGD,eAAO,MAAM,qBAAqB,2BAAkC,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
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.localInstancesManager = void 0;
|
|
7
|
+
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
|
8
|
+
const utils_log_1 = require("@goldstack/utils-log");
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
/**
|
|
11
|
+
* Implementation of LocalInstancesManager for managing DynamoDB local instances
|
|
12
|
+
*/
|
|
13
|
+
class LocalInstancesManagerImpl {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.stateFile = '.localInstances.json';
|
|
16
|
+
// Track instances by port instead of table name
|
|
17
|
+
this.startedInstances = new Map();
|
|
18
|
+
// Track number of active users per port
|
|
19
|
+
this.portUsageCounter = new Map();
|
|
20
|
+
this.loadState();
|
|
21
|
+
}
|
|
22
|
+
loadState() {
|
|
23
|
+
try {
|
|
24
|
+
const data = fs_1.default.readFileSync(this.stateFile, 'utf8');
|
|
25
|
+
const state = JSON.parse(data);
|
|
26
|
+
// Clear existing maps
|
|
27
|
+
this.startedInstances.clear();
|
|
28
|
+
this.portUsageCounter.clear();
|
|
29
|
+
// Restore instances
|
|
30
|
+
Object.entries(state.instances).forEach(([port, instance]) => {
|
|
31
|
+
const portNum = parseInt(port);
|
|
32
|
+
if (instance === 'stopped') {
|
|
33
|
+
this.startedInstances.set(portNum, 'stopped');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Restore instance with its process/container info
|
|
37
|
+
this.startedInstances.set(portNum, {
|
|
38
|
+
port: portNum,
|
|
39
|
+
processId: instance.processId,
|
|
40
|
+
dockerContainerId: instance.dockerContainerId,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
// Restore usage counts
|
|
45
|
+
Object.entries(state.usageCounts).forEach(([port, count]) => {
|
|
46
|
+
this.portUsageCounter.set(parseInt(port), count);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (err.code !== 'ENOENT') {
|
|
51
|
+
(0, utils_log_1.error)('Failed to load local instances state:', err);
|
|
52
|
+
}
|
|
53
|
+
// File doesn't exist yet, that's fine
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
saveState() {
|
|
57
|
+
try {
|
|
58
|
+
const state = {
|
|
59
|
+
instances: {},
|
|
60
|
+
usageCounts: {},
|
|
61
|
+
};
|
|
62
|
+
// Save instances
|
|
63
|
+
this.startedInstances.forEach((instance, port) => {
|
|
64
|
+
state.instances[port] =
|
|
65
|
+
instance === 'stopped'
|
|
66
|
+
? 'stopped'
|
|
67
|
+
: {
|
|
68
|
+
port: instance.port,
|
|
69
|
+
processId: instance.processId,
|
|
70
|
+
dockerContainerId: instance.dockerContainerId,
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
// Save usage counts
|
|
74
|
+
this.portUsageCounter.forEach((count, port) => {
|
|
75
|
+
state.usageCounts[port] = count;
|
|
76
|
+
});
|
|
77
|
+
fs_1.default.writeFileSync(this.stateFile, JSON.stringify(state, null, 2));
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
(0, utils_log_1.error)('Failed to save local instances state:', err);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
getInstance(port) {
|
|
84
|
+
return this.startedInstances.get(port);
|
|
85
|
+
}
|
|
86
|
+
getFirstRunningInstance() {
|
|
87
|
+
for (const [port, instance] of this.startedInstances.entries()) {
|
|
88
|
+
if (instance !== 'stopped') {
|
|
89
|
+
(0, utils_log_1.debug)(`Found existing local DynamoDB instance on port ${port}`);
|
|
90
|
+
return instance;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
setInstance(port, instance) {
|
|
96
|
+
this.startedInstances.set(port, instance);
|
|
97
|
+
(0, utils_log_1.debug)(`DynamoDB local instance ${instance === 'stopped' ? 'stopped' : 'started'} on port ${port}. Currently defined instances: ${this.startedInstances.size}`, {
|
|
98
|
+
definedInstances: this.startedInstances.size,
|
|
99
|
+
stoppedInstances: [...this.startedInstances.entries()].filter((e) => e[1] === 'stopped').length,
|
|
100
|
+
allInstances: [...this.startedInstances.entries()],
|
|
101
|
+
});
|
|
102
|
+
this.saveState();
|
|
103
|
+
}
|
|
104
|
+
getAllInstances() {
|
|
105
|
+
return this.startedInstances;
|
|
106
|
+
}
|
|
107
|
+
getInstanceCount() {
|
|
108
|
+
return this.startedInstances.size;
|
|
109
|
+
}
|
|
110
|
+
incrementUsageCounter(port) {
|
|
111
|
+
this.portUsageCounter.set(port, (this.portUsageCounter.get(port) || 0) + 1);
|
|
112
|
+
this.saveState();
|
|
113
|
+
}
|
|
114
|
+
decrementUsageCounter(port) {
|
|
115
|
+
const currentCount = this.portUsageCounter.get(port) || 0;
|
|
116
|
+
if (currentCount <= 1) {
|
|
117
|
+
this.portUsageCounter.delete(port);
|
|
118
|
+
this.saveState();
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
121
|
+
this.portUsageCounter.set(port, currentCount - 1);
|
|
122
|
+
this.saveState();
|
|
123
|
+
return currentCount - 1;
|
|
124
|
+
}
|
|
125
|
+
getUsageCount(port) {
|
|
126
|
+
return this.portUsageCounter.get(port) || 0;
|
|
127
|
+
}
|
|
128
|
+
removeUsageCounter(port) {
|
|
129
|
+
this.portUsageCounter.delete(port);
|
|
130
|
+
this.saveState();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Export singleton instance
|
|
134
|
+
exports.localInstancesManager = new LocalInstancesManagerImpl();
|
|
135
|
+
//# sourceMappingURL=localInstances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localInstances.js","sourceRoot":"","sources":["../../src/localInstances.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,9 @@ import { DynamoDBPackage } from './types/DynamoDBPackage';
|
|
|
3
3
|
import { InputMigrations } from 'umzug/lib/types';
|
|
4
4
|
import { DynamoDBContext } from './dynamoDBMigrations';
|
|
5
5
|
export declare const getTableName: (goldstackConfig: DynamoDBPackage | any, packageSchema: any, deploymentName?: string) => Promise<string>;
|
|
6
|
-
export declare const startLocalDynamoDB: (goldstackConfig: DynamoDBPackage | any, packageSchema: any, port
|
|
7
|
-
export declare const
|
|
6
|
+
export declare const startLocalDynamoDB: (goldstackConfig: DynamoDBPackage | any, packageSchema: any, port?: number, deploymentName?: string) => Promise<void>;
|
|
7
|
+
export declare const stopAllLocalDynamoDB: (goldstackConfig: DynamoDBPackage | any, packageSchema: any, deploymentName?: string) => Promise<void>;
|
|
8
|
+
export declare const stopLocalDynamoDB: (goldstackConfig: DynamoDBPackage | any, packageSchema: any, portOrDeploymentName?: number | string, deploymentName?: string) => Promise<void>;
|
|
8
9
|
export declare const connect: ({ goldstackConfig, packageSchema, migrations, deploymentName, }: {
|
|
9
10
|
goldstackConfig: DynamoDBPackage | any;
|
|
10
11
|
packageSchema: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateDynamoDBTable.d.ts","sourceRoot":"","sources":["../../src/templateDynamoDBTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAY9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,eAAe,EAGhB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"templateDynamoDBTable.d.ts","sourceRoot":"","sources":["../../src/templateDynamoDBTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAY9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAoB9B,eAAO,MAAM,YAAY,oBACN,eAAe,GAAG,GAAG,iBACvB,GAAG,mBACD,MAAM,KACtB,OAAO,CAAC,MAAM,CAWhB,CAAC;AAEF,eAAO,MAAM,kBAAkB,oBACZ,eAAe,GAAG,GAAG,iBACvB,GAAG,SACX,MAAM,mBACI,MAAM,KACtB,OAAO,CAAC,IAAI,CAyBd,CAAC;AAEF,eAAO,MAAM,oBAAoB,oBACd,eAAe,GAAG,GAAG,iBACvB,GAAG,mBACD,MAAM,KACtB,OAAO,CAAC,IAAI,CAmBd,CAAC;AAEF,eAAO,MAAM,iBAAiB,oBACX,eAAe,GAAG,GAAG,iBACvB,GAAG,yBACK,MAAM,GAAG,MAAM,mBACrB,MAAM,KACtB,OAAO,CAAC,IAAI,CAqCd,CAAC;AAkCF,eAAO,MAAM,OAAO,oEAKjB;IACD,eAAe,EAAE,eAAe,GAAG,GAAG,CAAC;IACvC,aAAa,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,KAAG,OAAO,CAAC,cAAc,CAsBzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,wDAIrB;IACD,eAAe,EAAE,eAAe,GAAG,GAAG,CAAC;IACvC,aAAa,EAAE,GAAG,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,KAAG,OAAO,CAAC,cAAc,CAczB,CAAC;AAEF,eAAO,MAAM,aAAa,mFAMvB;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,eAAe,GAAG,GAAG,CAAC;IACvC,aAAa,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,KAAG,OAAO,CAAC,cAAc,CAuBzB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.migrateDownTo = exports.deleteTable = exports.connect = exports.stopLocalDynamoDB = exports.startLocalDynamoDB = exports.getTableName = void 0;
|
|
3
|
+
exports.migrateDownTo = exports.deleteTable = exports.connect = exports.stopLocalDynamoDB = exports.stopAllLocalDynamoDB = exports.startLocalDynamoDB = exports.getTableName = void 0;
|
|
4
4
|
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
5
5
|
const dynamoDBPackageUtils_1 = require("./dynamoDBPackageUtils");
|
|
6
6
|
const utils_package_config_embedded_1 = require("@goldstack/utils-package-config-embedded");
|
|
@@ -31,10 +31,14 @@ const startLocalDynamoDB = async (goldstackConfig, packageSchema, port, deployme
|
|
|
31
31
|
// Suppress ESLint error for dynamic require
|
|
32
32
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
33
33
|
const lib = require((0, utils_esbuild_1.excludeInBundle)('./localDynamoDB'));
|
|
34
|
-
|
|
34
|
+
const portToUse = port ||
|
|
35
|
+
(process.env.DYNAMODB_LOCAL_PORT &&
|
|
36
|
+
parseInt(process.env.DYNAMODB_LOCAL_PORT)) ||
|
|
37
|
+
8000;
|
|
38
|
+
await lib.startLocalDynamoDB(packageConfig, { port: portToUse }, deploymentName);
|
|
35
39
|
};
|
|
36
40
|
exports.startLocalDynamoDB = startLocalDynamoDB;
|
|
37
|
-
const
|
|
41
|
+
const stopAllLocalDynamoDB = async (goldstackConfig, packageSchema, deploymentName) => {
|
|
38
42
|
deploymentName = (0, dynamoDBPackageUtils_1.getDeploymentName)(deploymentName);
|
|
39
43
|
const packageConfig = new utils_package_config_embedded_1.EmbeddedPackageConfig({
|
|
40
44
|
goldstackJson: goldstackConfig,
|
|
@@ -43,10 +47,34 @@ const stopLocalDynamoDB = async (goldstackConfig, packageSchema, deploymentName)
|
|
|
43
47
|
// Suppress ESLint error for dynamic require
|
|
44
48
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
45
49
|
const lib = require((0, utils_esbuild_1.excludeInBundle)('./localDynamoDB'));
|
|
46
|
-
await lib.
|
|
50
|
+
await lib.stopAllLocalDynamoDB(packageConfig, deploymentName);
|
|
47
51
|
const coldStartKey = await getColdStartKey(packageConfig, deploymentName);
|
|
48
52
|
coldStart.delete(coldStartKey);
|
|
49
53
|
};
|
|
54
|
+
exports.stopAllLocalDynamoDB = stopAllLocalDynamoDB;
|
|
55
|
+
const stopLocalDynamoDB = async (goldstackConfig, packageSchema, portOrDeploymentName, deploymentName) => {
|
|
56
|
+
// Handle optional port parameter
|
|
57
|
+
let port;
|
|
58
|
+
let resolvedDeploymentName;
|
|
59
|
+
if (typeof portOrDeploymentName === 'number') {
|
|
60
|
+
port = portOrDeploymentName;
|
|
61
|
+
resolvedDeploymentName = deploymentName;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
resolvedDeploymentName = portOrDeploymentName;
|
|
65
|
+
}
|
|
66
|
+
resolvedDeploymentName = (0, dynamoDBPackageUtils_1.getDeploymentName)(resolvedDeploymentName);
|
|
67
|
+
const packageConfig = new utils_package_config_embedded_1.EmbeddedPackageConfig({
|
|
68
|
+
goldstackJson: goldstackConfig,
|
|
69
|
+
packageSchema,
|
|
70
|
+
});
|
|
71
|
+
// Suppress ESLint error for dynamic require
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
73
|
+
const lib = require((0, utils_esbuild_1.excludeInBundle)('./localDynamoDB'));
|
|
74
|
+
await lib.stopLocalDynamoDB(packageConfig, port ? { port } : {}, resolvedDeploymentName);
|
|
75
|
+
const coldStartKey = await getColdStartKey(packageConfig, resolvedDeploymentName);
|
|
76
|
+
coldStart.delete(coldStartKey);
|
|
77
|
+
};
|
|
50
78
|
exports.stopLocalDynamoDB = stopLocalDynamoDB;
|
|
51
79
|
const createClient = async (packageConfig, deploymentName) => {
|
|
52
80
|
if (deploymentName === 'local') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateDynamoDBTable.js","sourceRoot":"","sources":["../../src/templateDynamoDBTable.ts"],"names":[],"mappings":";;;AAAA,8DAA0D;AAG1D,iEAGgC;AAEhC,4FAAiF;AACjF,iDAIwB;AAExB,6DAI8B;AAE9B,4DAA2D;AAC3D,wEAAwD;
|
|
1
|
+
{"version":3,"file":"templateDynamoDBTable.js","sourceRoot":"","sources":["../../src/templateDynamoDBTable.ts"],"names":[],"mappings":"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"}
|