@mondomob/gae-node-nestjs 11.0.2 → 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/CHANGELOG.md CHANGED
@@ -1,16 +1,3 @@
1
- ## 11.0.2 (2025-08-06)
2
-
3
- Updating @node-saml/passport-saml from v4 to v5
4
- - not a breaking change.
5
-
6
- Updating various libs with minor version bumps only.
7
-
8
- Removal of `dsui`
9
- - dsui is an outdated Datastore UI for local development only
10
- - removed code that attempts to start and stop dsui
11
- - developers who still want to use this should handle the start/stop in their own projects
12
-
13
-
14
1
  ## 11.0.1 (2025-02-02)
15
2
 
16
3
  Updating minor versions for nestjs, express, express-session.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondomob/gae-node-nestjs",
3
- "version": "11.0.2",
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',