@mondomob/gae-node-nestjs 11.0.2-alpha2 → 12.0.0-alpha-1

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm ls:*)"
5
+ ]
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondomob/gae-node-nestjs",
3
- "version": "11.0.2-alpha2",
3
+ "version": "12.0.0-alpha-1",
4
4
  "description": "Google App Engine datastore repositories and graphql setup with nestjs",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -23,10 +23,10 @@
23
23
  "license": "MIT",
24
24
  "homepage": "https://github.com/mondo-mob/gae-node-nestjs",
25
25
  "dependencies": {
26
- "@apollo/server": "4.9.3",
27
- "@google-cloud/datastore": "9.1.0",
26
+ "@apollo/server": "4.13.0",
27
+ "@google-cloud/datastore": "9.2.1",
28
28
  "@google-cloud/logging-bunyan": "5.1.0",
29
- "@google-cloud/storage": "7.12.1",
29
+ "@google-cloud/storage": "7.19.0",
30
30
  "@google-cloud/tasks": "4.1.0",
31
31
  "@google-cloud/trace-agent": "7.1.2",
32
32
  "@node-saml/passport-saml": "5.1.0",
@@ -62,18 +62,18 @@
62
62
  "webpack": "5.94.0"
63
63
  },
64
64
  "peerDependencies": {
65
- "@nestjs/common": "^10.4.20",
66
- "@nestjs/core": "^10.4.20",
65
+ "@nestjs/common": "^10.4.18",
66
+ "@nestjs/core": "^10.4.18",
67
67
  "@nestjs/graphql": "^12.2.2",
68
- "@nestjs/platform-express": "^10.4.20",
69
- "express": ">= 4.21.0",
68
+ "@nestjs/platform-express": "^10.4.18",
69
+ "express": ">= 4.22.0",
70
70
  "rxjs": "7.8.1"
71
71
  },
72
72
  "devDependencies": {
73
- "@nestjs/common": "10.4.20",
74
- "@nestjs/core": "10.4.20",
73
+ "@nestjs/common": "10.4.22",
74
+ "@nestjs/core": "10.4.22",
75
75
  "@nestjs/graphql": "12.2.2",
76
- "@nestjs/platform-express": "10.4.20",
76
+ "@nestjs/platform-express": "10.4.22",
77
77
  "@types/bcryptjs": "2.4.6",
78
78
  "@types/bunyan": "1.8.11",
79
79
  "@types/cls-hooked": "4.3.8",
@@ -90,7 +90,7 @@
90
90
  "@types/passport-local": "1.0.38",
91
91
  "@types/uuid": "8.3.4",
92
92
  "chokidar": "3.6.0",
93
- "express": "4.21.2",
93
+ "express": "4.22.1",
94
94
  "jest": "29.7.0",
95
95
  "prettier": "2.8.8",
96
96
  "rxjs": "7.8.1",
package/server-start.js CHANGED
@@ -21,6 +21,7 @@ const componentColors = {
21
21
  server: colors.blue,
22
22
  webpack: colors.magenta,
23
23
  datastore: colors.cyan,
24
+ dsui: colors.green,
24
25
  };
25
26
 
26
27
  class BunyanStream {
@@ -45,15 +46,17 @@ const { buildEvents, stopWebpack } = setupWebpack(logger);
45
46
  const { stopServer, startServer } = setupServer(logger, loggingStream, buildEvents);
46
47
 
47
48
  const { stopDatastore, startDatastore } = setupDatastore(logger, buildEvents);
49
+ const { startDsui, stopDsui } = setupDsui(logger);
48
50
 
49
51
  buildEvents.once('reload', startServer);
50
52
  startDatastore();
53
+ startDsui();
51
54
 
52
55
  // Handle process stop
53
56
  process.on('SIGINT', async function () {
54
57
  logger.info('Caught interrupt signal');
55
58
 
56
- await Promise.all([stopWebpack(), stopDatastore(), stopServer()]);
59
+ await Promise.all([stopWebpack(), stopDatastore(), stopDsui(), stopServer()]);
57
60
 
58
61
  logger.info('Shutting down');
59
62
  process.exit();
@@ -229,6 +232,74 @@ function setupServer(logger, loggingStream, buildEvents) {
229
232
  };
230
233
  }
231
234
 
235
+ function setupDsui(logger) {
236
+ const dsuiLogger = logger.child({ component: 'dsui' });
237
+ let dsui;
238
+ const startDsui = () => {
239
+ // poll the status URL until the datastore emulator is ready
240
+ dsuiLogger.info('Waiting for Datastore emulator to start');
241
+ const timeout = setInterval(() => {
242
+ let body = '';
243
+ http.get(
244
+ {
245
+ hostname: '127.0.0.1',
246
+ port: DATASTORE_PORT,
247
+ path: '/',
248
+ agent: false,
249
+ },
250
+ res => {
251
+ res.on('data', data => {
252
+ body += data;
253
+ });
254
+ res.on('end', () => {
255
+ if (res.statusCode == 200) {
256
+ dsuiLogger.info('Datastore emulator is ready, starting DSUI');
257
+ clearInterval(timeout);
258
+ const gcloud = spawn('gcloud', ['beta', 'emulators', 'datastore', 'env-init', '--format=json']);
259
+ gcloud.stdout.on('data', data => {
260
+ const datastoreConfig = JSON.parse(data);
261
+ _.forEach(datastoreConfig, (value, key) => {
262
+ process.env[key] = value;
263
+ });
264
+ });
265
+
266
+ gcloud.once('close', () => {
267
+ dsui = spawn('npm', ['run', 'dsui']);
268
+ dsui.stdout.on('data', dsuiData => {
269
+ const string = dsuiData.toString('utf8');
270
+ dsuiLogger.info(string);
271
+ });
272
+
273
+ dsui.stderr.on('data', dsuiData => {
274
+ const string = dsuiData.toString('utf8');
275
+ dsuiLogger.error(string);
276
+ });
277
+ });
278
+ }
279
+ });
280
+ },
281
+ );
282
+ }, 2000);
283
+ };
284
+
285
+ const stopDsui = () => {
286
+ return new Promise(resolve => {
287
+ if (dsui) {
288
+ dsuiLogger.info('Killing DSUI');
289
+ dsui.kill('SIGINT');
290
+ dsui.once('close', () => {
291
+ logger.info('DSUI successfully shutdown');
292
+ resolve();
293
+ });
294
+ } else {
295
+ resolve();
296
+ }
297
+ });
298
+ };
299
+
300
+ return { startDsui, stopDsui };
301
+ }
302
+
232
303
  function setupDatastore(logger, buildEvents) {
233
304
  const datastoreLogger = logger.child({
234
305
  component: 'datastore',