@genesislcap/foundation-comms 15.18.0 → 15.18.1-alpha-5b3362a.0

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.
@@ -224,6 +224,14 @@ export declare class DefaultDatasource implements Datasource {
224
224
  constructor(connect: Connect, auth: Auth, resources: GenesisResources, config: DatasourceConfig, connectEvents: ConnectEvents);
225
225
  private pollTrigger$;
226
226
  private commitResponseUnsubscribe?;
227
+ /**
228
+ * Bumped by every `init()` call and by `destroy()`, so an `init()` suspended on an `await` can
229
+ * tell a concurrent `destroy()`/`init()` cycle has superseded it before it commits `this.stream`
230
+ * — without this, a `destroy()` that runs while an earlier `init()` is still awaiting resets
231
+ * `this.options` out from under that suspended call, which then resumes and opens a stream
232
+ * with a stale/undefined resource name.
233
+ */
234
+ private generation;
227
235
  private triggerPoll;
228
236
  /**
229
237
  * @deprecated - Please use {@link (GenesisResources:interface).isValidResource} instead.
@@ -257,6 +265,12 @@ export declare class DefaultDatasource implements Datasource {
257
265
  updateLoadMoreCount(count: number): void;
258
266
  snapshot(overrideParams?: any): Promise<Message>;
259
267
  snapshotFiltered(rowId?: string): Promise<any[]>;
268
+ /**
269
+ * `resourceName` is passed in explicitly (the snapshot `init()` captured at its own call time)
270
+ * rather than read back off `this.options` here — `this.options` is shared mutable state that
271
+ * a concurrent `destroy()` can reset to `{}` while this call is in flight, which previously let
272
+ * a superseded call open a stream with an `undefined` resource name.
273
+ */
260
274
  private createStream;
261
275
  private createDataserverStream;
262
276
  private createReqRepStream;
@@ -1 +1 @@
1
- {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../src/datasource/datasource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../src/datasource/datasource.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,14 @@ let DefaultDatasource = class DefaultDatasource {
51
51
  this.readOnly = true;
52
52
  this._allParams = null;
53
53
  this.pollTrigger$ = new Subject();
54
+ /**
55
+ * Bumped by every `init()` call and by `destroy()`, so an `init()` suspended on an `await` can
56
+ * tell a concurrent `destroy()`/`init()` cycle has superseded it before it commits `this.stream`
57
+ * — without this, a `destroy()` that runs while an earlier `init()` is still awaiting resets
58
+ * `this.options` out from under that suspended call, which then resumes and opens a stream
59
+ * with a stale/undefined resource name.
60
+ */
61
+ this.generation = 0;
54
62
  }
55
63
  triggerPoll() {
56
64
  this.pollTrigger$.next();
@@ -69,6 +77,8 @@ let DefaultDatasource = class DefaultDatasource {
69
77
  }
70
78
  init(options_1) {
71
79
  return __awaiter(this, arguments, void 0, function* (options, fetchMeta = this.fetchMetadataRequired, startStream = this.startStreamRequired) {
80
+ this.generation += 1;
81
+ const myGeneration = this.generation;
72
82
  this.fetchMetadataRequired = fetchMeta;
73
83
  this.options = Object.assign(Object.assign({}, this.config.options), options);
74
84
  // Invalidate parameter cache when options change
@@ -93,16 +103,29 @@ let DefaultDatasource = class DefaultDatasource {
93
103
  return false;
94
104
  }
95
105
  if (this.fetchMetadataRequired) {
96
- yield this.fetchAndApplyMetadata(this.options.resourceName);
106
+ yield this.fetchAndApplyMetadata(resourceName);
97
107
  // Invalidate cache again after metadata fetch as availableIndexes may have changed
98
108
  this._allParams = null;
99
109
  }
110
+ if (myGeneration !== this.generation) {
111
+ // A concurrent destroy()/init() superseded this call while we were awaiting the
112
+ // connection/resource/metadata checks above — this.options (including resourceName) may
113
+ // already have been reset, so bail out unconditionally here (not just on the startStream
114
+ // path below) rather than letting reportStatus() below overwrite whatever status the
115
+ // newer call — or destroy() itself — has already set.
116
+ return false;
117
+ }
100
118
  logger.debug(`Initializing ${resourceName} datasource from ${this.connect.host}`);
101
119
  if (!this.options.isSnapshot && startStream) {
102
120
  // Recreate pollTrigger$ so pollTriggerEvents work after destroy/reinit.
103
121
  // A completed Subject ignores next(), so we need a fresh one each init.
104
122
  this.pollTrigger$ = new Subject();
105
- this.stream = yield this.createStream();
123
+ const stream = yield this.createStream(resourceName);
124
+ if (myGeneration !== this.generation) {
125
+ // Superseded while createStream() itself was in flight — discard rather than commit.
126
+ return false;
127
+ }
128
+ this.stream = stream;
106
129
  }
107
130
  logger.debug(`${resourceName} datasource initialization ${this.initialized ? `was successful.` : 'has failed.'}`);
108
131
  this.reportStatus();
@@ -112,7 +135,7 @@ let DefaultDatasource = class DefaultDatasource {
112
135
  startStream() {
113
136
  return __awaiter(this, void 0, void 0, function* () {
114
137
  if (!this.options.isSnapshot && this.stream === undefined) {
115
- this.stream = yield this.createStream();
138
+ this.stream = yield this.createStream(this.options.resourceName);
116
139
  }
117
140
  });
118
141
  }
@@ -120,6 +143,10 @@ let DefaultDatasource = class DefaultDatasource {
120
143
  destroy() {
121
144
  var _a, _b;
122
145
  logger.debug('Datasource.destroy', (_a = this.options) === null || _a === void 0 ? void 0 : _a.resourceName);
146
+ // Invalidate any in-flight init() first, so its next generation check (however soon it
147
+ // resumes) sees this destroy() and bails out instead of committing state we're about to
148
+ // reset below.
149
+ this.generation += 1;
123
150
  if (this.commitResponseUnsubscribe) {
124
151
  this.commitResponseUnsubscribe();
125
152
  this.commitResponseUnsubscribe = undefined;
@@ -261,23 +288,29 @@ let DefaultDatasource = class DefaultDatasource {
261
288
  }
262
289
  });
263
290
  }
264
- createStream() {
291
+ /**
292
+ * `resourceName` is passed in explicitly (the snapshot `init()` captured at its own call time)
293
+ * rather than read back off `this.options` here — `this.options` is shared mutable state that
294
+ * a concurrent `destroy()` can reset to `{}` while this call is in flight, which previously let
295
+ * a superseded call open a stream with an `undefined` resource name.
296
+ */
297
+ createStream(resourceName) {
265
298
  return __awaiter(this, void 0, void 0, function* () {
266
299
  if (![ResourceType.DATASERVER, ResourceType.REQUEST_SERVER].includes(this.resourceType)) {
267
300
  throw new Error(`Streaming not supported for selected resource type: ${this.resourceType}`);
268
301
  }
269
302
  if (this.resourceType === ResourceType.DATASERVER) {
270
- return this.createDataserverStream();
303
+ return this.createDataserverStream(resourceName);
271
304
  }
272
- logger.debug(`Creating fake stream by polling ${this.options.resourceName} REQUEST_SERVER`);
305
+ logger.debug(`Creating fake stream by polling ${resourceName} REQUEST_SERVER`);
273
306
  return this.createReqRepStream();
274
307
  });
275
308
  }
276
- createDataserverStream() {
309
+ createDataserverStream(resourceName) {
277
310
  return __awaiter(this, void 0, void 0, function* () {
278
311
  const onMessage = (message) => { };
279
312
  const onError = (error) => logger.error(error);
280
- return this.connect.stream(this.options.resourceName, onMessage, onError, this.dataserverOnlyParams);
313
+ return this.connect.stream(resourceName, onMessage, onError, this.dataserverOnlyParams);
281
314
  });
282
315
  }
283
316
  createReqRepStream() {
@@ -315,9 +348,18 @@ let DefaultDatasource = class DefaultDatasource {
315
348
  fetchAndApplyMetadata(resourceName) {
316
349
  return __awaiter(this, void 0, void 0, function* () {
317
350
  var _a, _b, _c, _d;
351
+ // Snapshot the generation this call belongs to — `this.options`/`this.resourceType` etc. can
352
+ // be reset by a concurrent destroy() while `getMetadata` is in flight below, so this method
353
+ // must not apply metadata (or a failure status) for a resource this call no longer owns once
354
+ // it resumes. Reads (not bumps) the counter: init()/destroy() own advancing it, this just
355
+ // checks whether it's still current.
356
+ const myGeneration = this.generation;
318
357
  try {
319
- logger.debug(`Requesting metadata for ${this.options.resourceName} Datasource`);
320
- const meta = yield this.connect.getMetadata(this.options.resourceName);
358
+ logger.debug(`Requesting metadata for ${resourceName} Datasource`);
359
+ const meta = yield this.connect.getMetadata(resourceName);
360
+ if (myGeneration !== this.generation) {
361
+ return;
362
+ }
321
363
  if (meta) {
322
364
  this.availableIndexes = (_a = meta.INDEXES) !== null && _a !== void 0 ? _a : [];
323
365
  this.availableSortableFields = (_b = meta.SORTABLE_FIELDS) !== null && _b !== void 0 ? _b : [];
@@ -337,6 +379,9 @@ let DefaultDatasource = class DefaultDatasource {
337
379
  }
338
380
  catch (e) {
339
381
  logger.error(`Metadata Fetch failed for ${resourceName}:`, e);
382
+ if (myGeneration !== this.generation) {
383
+ return;
384
+ }
340
385
  this.status = this.normaliseStatus({
341
386
  isInitialized: false,
342
387
  metadataRequired: true,
@@ -2047,6 +2047,14 @@ export declare class DefaultDatasource implements Datasource {
2047
2047
  constructor(connect: Connect, auth: Auth, resources: GenesisResources, config: DatasourceConfig, connectEvents: ConnectEvents);
2048
2048
  private pollTrigger$;
2049
2049
  private commitResponseUnsubscribe?;
2050
+ /**
2051
+ * Bumped by every `init()` call and by `destroy()`, so an `init()` suspended on an `await` can
2052
+ * tell a concurrent `destroy()`/`init()` cycle has superseded it before it commits `this.stream`
2053
+ * — without this, a `destroy()` that runs while an earlier `init()` is still awaiting resets
2054
+ * `this.options` out from under that suspended call, which then resumes and opens a stream
2055
+ * with a stale/undefined resource name.
2056
+ */
2057
+ private generation;
2050
2058
  private triggerPoll;
2051
2059
  /**
2052
2060
  * @deprecated - Please use {@link (GenesisResources:interface).isValidResource} instead.
@@ -2080,6 +2088,12 @@ export declare class DefaultDatasource implements Datasource {
2080
2088
  updateLoadMoreCount(count: number): void;
2081
2089
  snapshot(overrideParams?: any): Promise<Message>;
2082
2090
  snapshotFiltered(rowId?: string): Promise<any[]>;
2091
+ /**
2092
+ * `resourceName` is passed in explicitly (the snapshot `init()` captured at its own call time)
2093
+ * rather than read back off `this.options` here — `this.options` is shared mutable state that
2094
+ * a concurrent `destroy()` can reset to `{}` while this call is in flight, which previously let
2095
+ * a superseded call open a stream with an `undefined` resource name.
2096
+ */
2083
2097
  private createStream;
2084
2098
  private createDataserverStream;
2085
2099
  private createReqRepStream;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-comms",
3
3
  "description": "Genesis Foundation UI Comms",
4
- "version": "15.18.0",
4
+ "version": "15.18.1-alpha-5b3362a.0",
5
5
  "sideEffects": false,
6
6
  "license": "SEE LICENSE IN license.txt",
7
7
  "main": "dist/esm/index.js",
@@ -77,24 +77,24 @@
77
77
  }
78
78
  },
79
79
  "devDependencies": {
80
- "@genesislcap/foundation-testing": "15.18.0",
81
- "@genesislcap/genx": "15.18.0",
82
- "@genesislcap/rollup-builder": "15.18.0",
83
- "@genesislcap/ts-builder": "15.18.0",
84
- "@genesislcap/uvu-playwright-builder": "15.18.0",
85
- "@genesislcap/vite-builder": "15.18.0",
86
- "@genesislcap/webpack-builder": "15.18.0",
80
+ "@genesislcap/foundation-testing": "15.18.1-alpha-5b3362a.0",
81
+ "@genesislcap/genx": "15.18.1-alpha-5b3362a.0",
82
+ "@genesislcap/rollup-builder": "15.18.1-alpha-5b3362a.0",
83
+ "@genesislcap/ts-builder": "15.18.1-alpha-5b3362a.0",
84
+ "@genesislcap/uvu-playwright-builder": "15.18.1-alpha-5b3362a.0",
85
+ "@genesislcap/vite-builder": "15.18.1-alpha-5b3362a.0",
86
+ "@genesislcap/webpack-builder": "15.18.1-alpha-5b3362a.0",
87
87
  "@types/js-cookie": "^3.0.2",
88
88
  "@types/json-schema": "^7.0.11",
89
89
  "@types/webappsec-credential-management": "^0.6.2",
90
90
  "sinon": "^17.0.1"
91
91
  },
92
92
  "dependencies": {
93
- "@genesislcap/foundation-broadcast-channel": "15.18.0",
94
- "@genesislcap/foundation-logger": "15.18.0",
95
- "@genesislcap/foundation-user": "15.18.0",
96
- "@genesislcap/foundation-utils": "15.18.0",
97
- "@genesislcap/web-core": "15.18.0",
93
+ "@genesislcap/foundation-broadcast-channel": "15.18.1-alpha-5b3362a.0",
94
+ "@genesislcap/foundation-logger": "15.18.1-alpha-5b3362a.0",
95
+ "@genesislcap/foundation-user": "15.18.1-alpha-5b3362a.0",
96
+ "@genesislcap/foundation-utils": "15.18.1-alpha-5b3362a.0",
97
+ "@genesislcap/web-core": "15.18.1-alpha-5b3362a.0",
98
98
  "@microsoft/fast-element": "1.14.0",
99
99
  "@microsoft/fast-foundation": "2.50.0",
100
100
  "bowser": "^2.11.0",
@@ -112,5 +112,5 @@
112
112
  "publishConfig": {
113
113
  "access": "public"
114
114
  },
115
- "gitHead": "a92013873774dbc7f67a32d37994f10777f86383"
115
+ "gitHead": "6ef3934b3116f1a2c6bf1a045b5887a7744002e9"
116
116
  }