@hydranium/protocol 1.0.0-next.361 → 1.0.0-next.363
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/lib/errors.d.ts +41 -0
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +77 -3
- package/lib/errors.js.map +1 -1
- package/lib/messages/index.d.ts +1 -1
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +2 -1
- package/lib/messages/index.js.map +1 -1
- package/package.json +1 -1
- package/src/errors.ts +96 -2
- package/src/messages/index.ts +8 -1
package/lib/errors.d.ts
CHANGED
|
@@ -46,6 +46,7 @@ export declare const HYDRANIUM_ERROR_CODES: {
|
|
|
46
46
|
readonly documentNotOpen: 42005;
|
|
47
47
|
readonly duplicateClientId: 42006;
|
|
48
48
|
readonly reservedClientId: 42007;
|
|
49
|
+
readonly saveFailed: 42008;
|
|
49
50
|
};
|
|
50
51
|
/**
|
|
51
52
|
* JSON-RPC error code for {@link ConflictError}.
|
|
@@ -121,6 +122,8 @@ export declare const DOCUMENT_NOT_OPEN_ERROR_CODE: 42005;
|
|
|
121
122
|
export declare const DUPLICATE_CLIENT_ID_ERROR_CODE: 42006;
|
|
122
123
|
/** JSON-RPC code for {@link ReservedClientIdError}. */
|
|
123
124
|
export declare const RESERVED_CLIENT_ID_ERROR_CODE: 42007;
|
|
125
|
+
/** JSON-RPC code for {@link SaveFailedError}. */
|
|
126
|
+
export declare const SAVE_FAILED_ERROR_CODE: 42008;
|
|
124
127
|
/**
|
|
125
128
|
* The catalogue declaration behind {@link SessionClosedError}'s default
|
|
126
129
|
* sentence. It names no client id: the sentence can reach an end user, and the
|
|
@@ -205,6 +208,30 @@ export declare class ReservedClientIdError extends ResponseError<{
|
|
|
205
208
|
constructor(clientId: string);
|
|
206
209
|
get clientId(): string;
|
|
207
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* The catalogue declaration behind {@link SaveFailedError}'s message. Its
|
|
213
|
+
* `failures` names each document with the writer's own reason, which stays as
|
|
214
|
+
* written.
|
|
215
|
+
*/
|
|
216
|
+
export declare const SAVE_FAILED: import("./messages/primitives").MessageDefinition<"Could not save {failures}.">;
|
|
217
|
+
/** One document a save could not write, and why. */
|
|
218
|
+
export interface SaveFailure {
|
|
219
|
+
readonly uri: string;
|
|
220
|
+
readonly reason: string;
|
|
221
|
+
}
|
|
222
|
+
/** Structured payload carried in {@link SaveFailedError.data}. */
|
|
223
|
+
export interface SaveFailedErrorData extends HydraniumMessageData {
|
|
224
|
+
readonly failures: readonly SaveFailure[];
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Thrown by a save that could not write one or more of its documents. A save
|
|
228
|
+
* of several documents writes the others, so the files on disk can be a mix
|
|
229
|
+
* until a later save succeeds.
|
|
230
|
+
*/
|
|
231
|
+
export declare class SaveFailedError extends ResponseError<SaveFailedErrorData> {
|
|
232
|
+
constructor(failures: readonly SaveFailure[]);
|
|
233
|
+
get failures(): readonly SaveFailure[];
|
|
234
|
+
}
|
|
208
235
|
/**
|
|
209
236
|
* Whether `error` is a `ResponseError` from any copy of `vscode-jsonrpc`. An
|
|
210
237
|
* install holds several copies, and `instanceof` recognises only its own. An
|
|
@@ -219,6 +246,13 @@ export declare function isResponseError(error: unknown): error is ResponseError<
|
|
|
219
246
|
* none of the class getters.
|
|
220
247
|
*/
|
|
221
248
|
export declare function reviveProtocolError(error: unknown): unknown;
|
|
249
|
+
/**
|
|
250
|
+
* The error the JSON text `json` describes, as `JSON.stringify(error.toJson())`
|
|
251
|
+
* writes it, revived to its typed class as {@link reviveProtocolError} does, or
|
|
252
|
+
* `undefined` when `json` is not a JSON-RPC error envelope. For a transport
|
|
253
|
+
* that carries the error as text, such as a GLSP `RejectAction`'s `detail`.
|
|
254
|
+
*/
|
|
255
|
+
export declare function reviveProtocolErrorJson(json: string): ResponseError<unknown> | undefined;
|
|
222
256
|
/**
|
|
223
257
|
* Whether `error` is a {@link SessionClosedError}: by name in-process, by code
|
|
224
258
|
* when it arrives as a plain `ResponseError`, through a path that does not
|
|
@@ -231,6 +265,13 @@ export declare function isDocumentNotOpenError(error: unknown): error is Documen
|
|
|
231
265
|
export declare function isDuplicateClientIdError(error: unknown): error is DuplicateClientIdError;
|
|
232
266
|
/** Whether `error` is a {@link ReservedClientIdError}; see {@link isSessionClosedError}. */
|
|
233
267
|
export declare function isReservedClientIdError(error: unknown): error is ReservedClientIdError;
|
|
268
|
+
/**
|
|
269
|
+
* Whether `error` is a {@link SaveFailedError} that holds its `failures`: one
|
|
270
|
+
* thrown, or one {@link reviveProtocolError revived}. Unlike the other guards,
|
|
271
|
+
* a bare `ResponseError` with its code is not one, since it has no `failures`
|
|
272
|
+
* to read. Revive it first.
|
|
273
|
+
*/
|
|
274
|
+
export declare function isSaveFailedError(error: unknown): error is SaveFailedError;
|
|
234
275
|
/**
|
|
235
276
|
* Type guard for {@link ConflictError}. Detection ladder:
|
|
236
277
|
*
|
package/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAiB,KAAK,oBAAoB,EAAe,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAcnG;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,0IAGrC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,0IAGnC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB;aAC/B,QAAQ,EAAE,KAAK;aACf,eAAe,EAAE,KAAK;aACtB,sBAAsB,EAAE,KAAK;aAC7B,aAAa,EAAE,KAAK;aACpB,eAAe,EAAE,KAAK;aACtB,iBAAiB,EAAE,KAAK;aACxB,gBAAgB,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/lib/errors.js
CHANGED
|
@@ -8,13 +8,15 @@
|
|
|
8
8
|
* SPDX-License-Identifier: MIT
|
|
9
9
|
********************************************************************************/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.ReservedClientIdError = exports.DuplicateClientIdError = exports.DUPLICATE_CLIENT_ID = exports.DocumentNotOpenError = exports.DOCUMENT_NOT_OPEN = exports.SessionClosedError = exports.SESSION_CLOSED = exports.RESERVED_CLIENT_ID_ERROR_CODE = exports.DUPLICATE_CLIENT_ID_ERROR_CODE = exports.DOCUMENT_NOT_OPEN_ERROR_CODE = exports.SESSION_CLOSED_ERROR_CODE = exports.ConflictError = exports.CONFLICT_ERROR_CODE = exports.HYDRANIUM_ERROR_CODES = exports.STALE_BASE_VERSION_SAVE = exports.STALE_BASE_VERSION_UPDATE = void 0;
|
|
11
|
+
exports.SaveFailedError = exports.SAVE_FAILED = exports.ReservedClientIdError = exports.DuplicateClientIdError = exports.DUPLICATE_CLIENT_ID = exports.DocumentNotOpenError = exports.DOCUMENT_NOT_OPEN = exports.SessionClosedError = exports.SESSION_CLOSED = exports.SAVE_FAILED_ERROR_CODE = exports.RESERVED_CLIENT_ID_ERROR_CODE = exports.DUPLICATE_CLIENT_ID_ERROR_CODE = exports.DOCUMENT_NOT_OPEN_ERROR_CODE = exports.SESSION_CLOSED_ERROR_CODE = exports.ConflictError = exports.CONFLICT_ERROR_CODE = exports.HYDRANIUM_ERROR_CODES = exports.STALE_BASE_VERSION_SAVE = exports.STALE_BASE_VERSION_UPDATE = void 0;
|
|
12
12
|
exports.isResponseError = isResponseError;
|
|
13
13
|
exports.reviveProtocolError = reviveProtocolError;
|
|
14
|
+
exports.reviveProtocolErrorJson = reviveProtocolErrorJson;
|
|
14
15
|
exports.isSessionClosedError = isSessionClosedError;
|
|
15
16
|
exports.isDocumentNotOpenError = isDocumentNotOpenError;
|
|
16
17
|
exports.isDuplicateClientIdError = isDuplicateClientIdError;
|
|
17
18
|
exports.isReservedClientIdError = isReservedClientIdError;
|
|
19
|
+
exports.isSaveFailedError = isSaveFailedError;
|
|
18
20
|
exports.isConflictError = isConflictError;
|
|
19
21
|
const vscode_jsonrpc_1 = require("vscode-jsonrpc");
|
|
20
22
|
const primitives_1 = require("./messages/primitives");
|
|
@@ -66,7 +68,8 @@ exports.HYDRANIUM_ERROR_CODES = {
|
|
|
66
68
|
sessionClosed: 42004,
|
|
67
69
|
documentNotOpen: 42005,
|
|
68
70
|
duplicateClientId: 42006,
|
|
69
|
-
reservedClientId: 42007
|
|
71
|
+
reservedClientId: 42007,
|
|
72
|
+
saveFailed: 42008
|
|
70
73
|
};
|
|
71
74
|
/**
|
|
72
75
|
* JSON-RPC error code for {@link ConflictError}.
|
|
@@ -155,6 +158,8 @@ exports.DOCUMENT_NOT_OPEN_ERROR_CODE = exports.HYDRANIUM_ERROR_CODES.documentNot
|
|
|
155
158
|
exports.DUPLICATE_CLIENT_ID_ERROR_CODE = exports.HYDRANIUM_ERROR_CODES.duplicateClientId;
|
|
156
159
|
/** JSON-RPC code for {@link ReservedClientIdError}. */
|
|
157
160
|
exports.RESERVED_CLIENT_ID_ERROR_CODE = exports.HYDRANIUM_ERROR_CODES.reservedClientId;
|
|
161
|
+
/** JSON-RPC code for {@link SaveFailedError}. */
|
|
162
|
+
exports.SAVE_FAILED_ERROR_CODE = exports.HYDRANIUM_ERROR_CODES.saveFailed;
|
|
158
163
|
/**
|
|
159
164
|
* The catalogue declaration behind {@link SessionClosedError}'s default
|
|
160
165
|
* sentence. It names no client id: the sentence can reach an end user, and the
|
|
@@ -259,6 +264,32 @@ class ReservedClientIdError extends vscode_jsonrpc_1.ResponseError {
|
|
|
259
264
|
}
|
|
260
265
|
}
|
|
261
266
|
exports.ReservedClientIdError = ReservedClientIdError;
|
|
267
|
+
/**
|
|
268
|
+
* The catalogue declaration behind {@link SaveFailedError}'s message. Its
|
|
269
|
+
* `failures` names each document with the writer's own reason, which stays as
|
|
270
|
+
* written.
|
|
271
|
+
*/
|
|
272
|
+
exports.SAVE_FAILED = (0, primitives_1.defineMessage)('hydranium/protocol/save-failed', 'Could not save {failures}.');
|
|
273
|
+
/**
|
|
274
|
+
* Thrown by a save that could not write one or more of its documents. A save
|
|
275
|
+
* of several documents writes the others, so the files on disk can be a mix
|
|
276
|
+
* until a later save succeeds.
|
|
277
|
+
*/
|
|
278
|
+
class SaveFailedError extends vscode_jsonrpc_1.ResponseError {
|
|
279
|
+
constructor(failures) {
|
|
280
|
+
const named = failures.map(failure => `${failure.uri} (${failure.reason})`).join(', ');
|
|
281
|
+
super(exports.SAVE_FAILED_ERROR_CODE, exports.SAVE_FAILED.format({ failures: named }), {
|
|
282
|
+
failures,
|
|
283
|
+
...(0, primitives_1.messageData)(exports.SAVE_FAILED, { failures: named })
|
|
284
|
+
});
|
|
285
|
+
this.name = 'SaveFailedError';
|
|
286
|
+
Object.setPrototypeOf(this, SaveFailedError.prototype);
|
|
287
|
+
}
|
|
288
|
+
get failures() {
|
|
289
|
+
return this.data.failures;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
exports.SaveFailedError = SaveFailedError;
|
|
262
293
|
/** One entry per typed error class, keyed by its code; a class without one reaches a caller as a plain `ResponseError`. */
|
|
263
294
|
const PROTOCOL_ERROR_REVIVERS = new Map([
|
|
264
295
|
[
|
|
@@ -273,8 +304,18 @@ const PROTOCOL_ERROR_REVIVERS = new Map([
|
|
|
273
304
|
({ uri, clientId }) => (typeof uri === 'string' && typeof clientId === 'string' ? new DocumentNotOpenError(uri, clientId) : undefined)
|
|
274
305
|
],
|
|
275
306
|
[exports.DUPLICATE_CLIENT_ID_ERROR_CODE, ({ clientId }) => (typeof clientId === 'string' ? new DuplicateClientIdError(clientId) : undefined)],
|
|
276
|
-
[exports.RESERVED_CLIENT_ID_ERROR_CODE, ({ clientId }) => (typeof clientId === 'string' ? new ReservedClientIdError(clientId) : undefined)]
|
|
307
|
+
[exports.RESERVED_CLIENT_ID_ERROR_CODE, ({ clientId }) => (typeof clientId === 'string' ? new ReservedClientIdError(clientId) : undefined)],
|
|
308
|
+
[exports.SAVE_FAILED_ERROR_CODE, ({ failures }) => (isSaveFailureList(failures) ? new SaveFailedError(failures) : undefined)]
|
|
277
309
|
]);
|
|
310
|
+
function isSaveFailureList(value) {
|
|
311
|
+
return (Array.isArray(value) &&
|
|
312
|
+
value.every((failure) => typeof failure === 'object' &&
|
|
313
|
+
failure !== null &&
|
|
314
|
+
'uri' in failure &&
|
|
315
|
+
typeof failure.uri === 'string' &&
|
|
316
|
+
'reason' in failure &&
|
|
317
|
+
typeof failure.reason === 'string'));
|
|
318
|
+
}
|
|
278
319
|
/**
|
|
279
320
|
* Whether `error` is a `ResponseError` from any copy of `vscode-jsonrpc`. An
|
|
280
321
|
* install holds several copies, and `instanceof` recognises only its own. An
|
|
@@ -300,6 +341,30 @@ function reviveProtocolError(error) {
|
|
|
300
341
|
}
|
|
301
342
|
return Object.assign(revived, { message: error.message, data: error.data, stack: error.stack });
|
|
302
343
|
}
|
|
344
|
+
/**
|
|
345
|
+
* The error the JSON text `json` describes, as `JSON.stringify(error.toJson())`
|
|
346
|
+
* writes it, revived to its typed class as {@link reviveProtocolError} does, or
|
|
347
|
+
* `undefined` when `json` is not a JSON-RPC error envelope. For a transport
|
|
348
|
+
* that carries the error as text, such as a GLSP `RejectAction`'s `detail`.
|
|
349
|
+
*/
|
|
350
|
+
function reviveProtocolErrorJson(json) {
|
|
351
|
+
let envelope;
|
|
352
|
+
try {
|
|
353
|
+
envelope = JSON.parse(json);
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
return undefined;
|
|
357
|
+
}
|
|
358
|
+
if (typeof envelope !== 'object' || envelope === null || !('code' in envelope) || !('message' in envelope)) {
|
|
359
|
+
return undefined;
|
|
360
|
+
}
|
|
361
|
+
const { code, message } = envelope;
|
|
362
|
+
if (typeof code !== 'number' || !Number.isInteger(code) || typeof message !== 'string') {
|
|
363
|
+
return undefined;
|
|
364
|
+
}
|
|
365
|
+
const revived = reviveProtocolError(new vscode_jsonrpc_1.ResponseError(code, message, 'data' in envelope ? envelope.data : undefined));
|
|
366
|
+
return isResponseError(revived) ? revived : undefined;
|
|
367
|
+
}
|
|
303
368
|
/**
|
|
304
369
|
* Whether `error` is a {@link SessionClosedError}: by name in-process, by code
|
|
305
370
|
* when it arrives as a plain `ResponseError`, through a path that does not
|
|
@@ -320,6 +385,15 @@ function isDuplicateClientIdError(error) {
|
|
|
320
385
|
function isReservedClientIdError(error) {
|
|
321
386
|
return hasErrorIdentity(error, 'ReservedClientIdError', exports.RESERVED_CLIENT_ID_ERROR_CODE);
|
|
322
387
|
}
|
|
388
|
+
/**
|
|
389
|
+
* Whether `error` is a {@link SaveFailedError} that holds its `failures`: one
|
|
390
|
+
* thrown, or one {@link reviveProtocolError revived}. Unlike the other guards,
|
|
391
|
+
* a bare `ResponseError` with its code is not one, since it has no `failures`
|
|
392
|
+
* to read. Revive it first.
|
|
393
|
+
*/
|
|
394
|
+
function isSaveFailedError(error) {
|
|
395
|
+
return (hasErrorIdentity(error, 'SaveFailedError', exports.SAVE_FAILED_ERROR_CODE) && isSaveFailureList(error.failures));
|
|
396
|
+
}
|
|
323
397
|
function hasErrorIdentity(error, name, code) {
|
|
324
398
|
return error instanceof Error && (error.name === name || error.code === code);
|
|
325
399
|
}
|
package/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/lib/messages/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* The English is a fallback, not a contract; the code is the contract.
|
|
23
23
|
*/
|
|
24
24
|
export * from './primitives';
|
|
25
|
-
export { DOCUMENT_NOT_OPEN, DUPLICATE_CLIENT_ID, SESSION_CLOSED, STALE_BASE_VERSION_SAVE, STALE_BASE_VERSION_UPDATE } from '../errors';
|
|
25
|
+
export { DOCUMENT_NOT_OPEN, DUPLICATE_CLIENT_ID, SAVE_FAILED, SESSION_CLOSED, STALE_BASE_VERSION_SAVE, STALE_BASE_VERSION_UPDATE } from '../errors';
|
|
26
26
|
export { DATA_CONNECTION_SESSION_RESTORE_FAILED, DATA_CONNECTION_WATCH_RESTORE_FAILED } from '../client/data-connection';
|
|
27
27
|
export { DATA_SERVER_CONNECT_FAILED, DATA_SERVER_NOT_READY } from '../client/rpc-connection';
|
|
28
28
|
export { DATA_SESSION_ANSWER_WITHOUT_MODEL, DATA_SESSION_RESTORE_FAILED, DATA_SESSION_UNSAVED_LOST } from '../client/data-session';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;GAcG;AAEH,cAAc,cAAc,CAAC;AAE7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;GAcG;AAEH,cAAc,cAAc,CAAC;AAE7B,OAAO,EACJ,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sCAAsC,EAAE,oCAAoC,EAAE,MAAM,2BAA2B,CAAC;AACzH,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnI,OAAO,EACJ,mBAAmB,EACnB,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC9B,MAAM,yBAAyB,CAAC"}
|
package/lib/messages/index.js
CHANGED
|
@@ -22,7 +22,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
22
22
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.RELAY_TRANSPORT_WRITE_FAILED = exports.RELAY_TRANSPORT_READ_FAILED = exports.RELAY_TRANSPORT_OPEN_FAILED = exports.RELAY_REPLAY_FAILED = exports.DATA_SESSION_UNSAVED_LOST = exports.DATA_SESSION_RESTORE_FAILED = exports.DATA_SESSION_ANSWER_WITHOUT_MODEL = exports.DATA_SERVER_NOT_READY = exports.DATA_SERVER_CONNECT_FAILED = exports.DATA_CONNECTION_WATCH_RESTORE_FAILED = exports.DATA_CONNECTION_SESSION_RESTORE_FAILED = exports.STALE_BASE_VERSION_UPDATE = exports.STALE_BASE_VERSION_SAVE = exports.SESSION_CLOSED = exports.DUPLICATE_CLIENT_ID = exports.DOCUMENT_NOT_OPEN = void 0;
|
|
25
|
+
exports.RELAY_TRANSPORT_WRITE_FAILED = exports.RELAY_TRANSPORT_READ_FAILED = exports.RELAY_TRANSPORT_OPEN_FAILED = exports.RELAY_REPLAY_FAILED = exports.DATA_SESSION_UNSAVED_LOST = exports.DATA_SESSION_RESTORE_FAILED = exports.DATA_SESSION_ANSWER_WITHOUT_MODEL = exports.DATA_SERVER_NOT_READY = exports.DATA_SERVER_CONNECT_FAILED = exports.DATA_CONNECTION_WATCH_RESTORE_FAILED = exports.DATA_CONNECTION_SESSION_RESTORE_FAILED = exports.STALE_BASE_VERSION_UPDATE = exports.STALE_BASE_VERSION_SAVE = exports.SESSION_CLOSED = exports.SAVE_FAILED = exports.DUPLICATE_CLIENT_ID = exports.DOCUMENT_NOT_OPEN = void 0;
|
|
26
26
|
/**
|
|
27
27
|
* The message-externalization mechanism, plus every user-facing message
|
|
28
28
|
* `@hydranium/protocol` itself raises.
|
|
@@ -42,6 +42,7 @@ __exportStar(require("./primitives"), exports);
|
|
|
42
42
|
var errors_1 = require("../errors");
|
|
43
43
|
Object.defineProperty(exports, "DOCUMENT_NOT_OPEN", { enumerable: true, get: function () { return errors_1.DOCUMENT_NOT_OPEN; } });
|
|
44
44
|
Object.defineProperty(exports, "DUPLICATE_CLIENT_ID", { enumerable: true, get: function () { return errors_1.DUPLICATE_CLIENT_ID; } });
|
|
45
|
+
Object.defineProperty(exports, "SAVE_FAILED", { enumerable: true, get: function () { return errors_1.SAVE_FAILED; } });
|
|
45
46
|
Object.defineProperty(exports, "SESSION_CLOSED", { enumerable: true, get: function () { return errors_1.SESSION_CLOSED; } });
|
|
46
47
|
Object.defineProperty(exports, "STALE_BASE_VERSION_SAVE", { enumerable: true, get: function () { return errors_1.STALE_BASE_VERSION_SAVE; } });
|
|
47
48
|
Object.defineProperty(exports, "STALE_BASE_VERSION_UPDATE", { enumerable: true, get: function () { return errors_1.STALE_BASE_VERSION_UPDATE; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;;;AAElF;;;;;;;;;;;;;;GAcG;AAEH,+CAA6B;AAE7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":";AAAA;;;;;;;kFAOkF;;;;;;;;;;;;;;;;;AAElF;;;;;;;;;;;;;;GAcG;AAEH,+CAA6B;AAE7B,oCAOmB;AANhB,2GAAA,iBAAiB,OAAA;AACjB,6GAAA,mBAAmB,OAAA;AACnB,qGAAA,WAAW,OAAA;AACX,wGAAA,cAAc,OAAA;AACd,iHAAA,uBAAuB,OAAA;AACvB,mHAAA,yBAAyB,OAAA;AAE5B,6DAAyH;AAAhH,yIAAA,sCAAsC,OAAA;AAAE,uIAAA,oCAAoC,OAAA;AACrF,2DAA6F;AAApF,4HAAA,0BAA0B,OAAA;AAAE,uHAAA,qBAAqB,OAAA;AAC1D,uDAAmI;AAA1H,iIAAA,iCAAiC,OAAA;AAAE,2HAAA,2BAA2B,OAAA;AAAE,yHAAA,yBAAyB,OAAA;AAClG,yDAKiC;AAJ9B,oHAAA,mBAAmB,OAAA;AACnB,4HAAA,2BAA2B,OAAA;AAC3B,4HAAA,2BAA2B,OAAA;AAC3B,6HAAA,4BAA4B,OAAA"}
|
package/package.json
CHANGED
package/src/errors.ts
CHANGED
|
@@ -67,7 +67,8 @@ export const HYDRANIUM_ERROR_CODES = {
|
|
|
67
67
|
sessionClosed: 42004,
|
|
68
68
|
documentNotOpen: 42005,
|
|
69
69
|
duplicateClientId: 42006,
|
|
70
|
-
reservedClientId: 42007
|
|
70
|
+
reservedClientId: 42007,
|
|
71
|
+
saveFailed: 42008
|
|
71
72
|
} as const;
|
|
72
73
|
|
|
73
74
|
/**
|
|
@@ -179,6 +180,8 @@ export const DOCUMENT_NOT_OPEN_ERROR_CODE = HYDRANIUM_ERROR_CODES.documentNotOpe
|
|
|
179
180
|
export const DUPLICATE_CLIENT_ID_ERROR_CODE = HYDRANIUM_ERROR_CODES.duplicateClientId;
|
|
180
181
|
/** JSON-RPC code for {@link ReservedClientIdError}. */
|
|
181
182
|
export const RESERVED_CLIENT_ID_ERROR_CODE = HYDRANIUM_ERROR_CODES.reservedClientId;
|
|
183
|
+
/** JSON-RPC code for {@link SaveFailedError}. */
|
|
184
|
+
export const SAVE_FAILED_ERROR_CODE = HYDRANIUM_ERROR_CODES.saveFailed;
|
|
182
185
|
|
|
183
186
|
/**
|
|
184
187
|
* The catalogue declaration behind {@link SessionClosedError}'s default
|
|
@@ -314,6 +317,45 @@ export class ReservedClientIdError extends ResponseError<{ readonly clientId: st
|
|
|
314
317
|
}
|
|
315
318
|
}
|
|
316
319
|
|
|
320
|
+
/**
|
|
321
|
+
* The catalogue declaration behind {@link SaveFailedError}'s message. Its
|
|
322
|
+
* `failures` names each document with the writer's own reason, which stays as
|
|
323
|
+
* written.
|
|
324
|
+
*/
|
|
325
|
+
export const SAVE_FAILED = defineMessage('hydranium/protocol/save-failed', 'Could not save {failures}.');
|
|
326
|
+
|
|
327
|
+
/** One document a save could not write, and why. */
|
|
328
|
+
export interface SaveFailure {
|
|
329
|
+
readonly uri: string;
|
|
330
|
+
readonly reason: string;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/** Structured payload carried in {@link SaveFailedError.data}. */
|
|
334
|
+
export interface SaveFailedErrorData extends HydraniumMessageData {
|
|
335
|
+
readonly failures: readonly SaveFailure[];
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Thrown by a save that could not write one or more of its documents. A save
|
|
340
|
+
* of several documents writes the others, so the files on disk can be a mix
|
|
341
|
+
* until a later save succeeds.
|
|
342
|
+
*/
|
|
343
|
+
export class SaveFailedError extends ResponseError<SaveFailedErrorData> {
|
|
344
|
+
constructor(failures: readonly SaveFailure[]) {
|
|
345
|
+
const named = failures.map(failure => `${failure.uri} (${failure.reason})`).join(', ');
|
|
346
|
+
super(SAVE_FAILED_ERROR_CODE, SAVE_FAILED.format({ failures: named }), {
|
|
347
|
+
failures,
|
|
348
|
+
...messageData(SAVE_FAILED, { failures: named })
|
|
349
|
+
});
|
|
350
|
+
this.name = 'SaveFailedError';
|
|
351
|
+
Object.setPrototypeOf(this, SaveFailedError.prototype);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
get failures(): readonly SaveFailure[] {
|
|
355
|
+
return this.data!.failures;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
317
359
|
/**
|
|
318
360
|
* Rebuilds one typed error from the `data` that crossed the wire, or
|
|
319
361
|
* `undefined` when `data` lacks the fields the class reads.
|
|
@@ -335,9 +377,25 @@ const PROTOCOL_ERROR_REVIVERS: ReadonlyMap<number, ProtocolErrorReviver> = new M
|
|
|
335
377
|
({ uri, clientId }) => (typeof uri === 'string' && typeof clientId === 'string' ? new DocumentNotOpenError(uri, clientId) : undefined)
|
|
336
378
|
],
|
|
337
379
|
[DUPLICATE_CLIENT_ID_ERROR_CODE, ({ clientId }) => (typeof clientId === 'string' ? new DuplicateClientIdError(clientId) : undefined)],
|
|
338
|
-
[RESERVED_CLIENT_ID_ERROR_CODE, ({ clientId }) => (typeof clientId === 'string' ? new ReservedClientIdError(clientId) : undefined)]
|
|
380
|
+
[RESERVED_CLIENT_ID_ERROR_CODE, ({ clientId }) => (typeof clientId === 'string' ? new ReservedClientIdError(clientId) : undefined)],
|
|
381
|
+
[SAVE_FAILED_ERROR_CODE, ({ failures }) => (isSaveFailureList(failures) ? new SaveFailedError(failures) : undefined)]
|
|
339
382
|
]);
|
|
340
383
|
|
|
384
|
+
function isSaveFailureList(value: unknown): value is SaveFailure[] {
|
|
385
|
+
return (
|
|
386
|
+
Array.isArray(value) &&
|
|
387
|
+
value.every(
|
|
388
|
+
(failure: unknown) =>
|
|
389
|
+
typeof failure === 'object' &&
|
|
390
|
+
failure !== null &&
|
|
391
|
+
'uri' in failure &&
|
|
392
|
+
typeof failure.uri === 'string' &&
|
|
393
|
+
'reason' in failure &&
|
|
394
|
+
typeof failure.reason === 'string'
|
|
395
|
+
)
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
|
|
341
399
|
/**
|
|
342
400
|
* Whether `error` is a `ResponseError` from any copy of `vscode-jsonrpc`. An
|
|
343
401
|
* install holds several copies, and `instanceof` recognises only its own. An
|
|
@@ -367,6 +425,30 @@ export function reviveProtocolError(error: unknown): unknown {
|
|
|
367
425
|
return Object.assign(revived, { message: error.message, data: error.data, stack: error.stack });
|
|
368
426
|
}
|
|
369
427
|
|
|
428
|
+
/**
|
|
429
|
+
* The error the JSON text `json` describes, as `JSON.stringify(error.toJson())`
|
|
430
|
+
* writes it, revived to its typed class as {@link reviveProtocolError} does, or
|
|
431
|
+
* `undefined` when `json` is not a JSON-RPC error envelope. For a transport
|
|
432
|
+
* that carries the error as text, such as a GLSP `RejectAction`'s `detail`.
|
|
433
|
+
*/
|
|
434
|
+
export function reviveProtocolErrorJson(json: string): ResponseError<unknown> | undefined {
|
|
435
|
+
let envelope: unknown;
|
|
436
|
+
try {
|
|
437
|
+
envelope = JSON.parse(json);
|
|
438
|
+
} catch {
|
|
439
|
+
return undefined;
|
|
440
|
+
}
|
|
441
|
+
if (typeof envelope !== 'object' || envelope === null || !('code' in envelope) || !('message' in envelope)) {
|
|
442
|
+
return undefined;
|
|
443
|
+
}
|
|
444
|
+
const { code, message } = envelope;
|
|
445
|
+
if (typeof code !== 'number' || !Number.isInteger(code) || typeof message !== 'string') {
|
|
446
|
+
return undefined;
|
|
447
|
+
}
|
|
448
|
+
const revived = reviveProtocolError(new ResponseError(code, message, 'data' in envelope ? envelope.data : undefined));
|
|
449
|
+
return isResponseError(revived) ? revived : undefined;
|
|
450
|
+
}
|
|
451
|
+
|
|
370
452
|
/**
|
|
371
453
|
* Whether `error` is a {@link SessionClosedError}: by name in-process, by code
|
|
372
454
|
* when it arrives as a plain `ResponseError`, through a path that does not
|
|
@@ -391,6 +473,18 @@ export function isReservedClientIdError(error: unknown): error is ReservedClient
|
|
|
391
473
|
return hasErrorIdentity(error, 'ReservedClientIdError', RESERVED_CLIENT_ID_ERROR_CODE);
|
|
392
474
|
}
|
|
393
475
|
|
|
476
|
+
/**
|
|
477
|
+
* Whether `error` is a {@link SaveFailedError} that holds its `failures`: one
|
|
478
|
+
* thrown, or one {@link reviveProtocolError revived}. Unlike the other guards,
|
|
479
|
+
* a bare `ResponseError` with its code is not one, since it has no `failures`
|
|
480
|
+
* to read. Revive it first.
|
|
481
|
+
*/
|
|
482
|
+
export function isSaveFailedError(error: unknown): error is SaveFailedError {
|
|
483
|
+
return (
|
|
484
|
+
hasErrorIdentity(error, 'SaveFailedError', SAVE_FAILED_ERROR_CODE) && isSaveFailureList((error as Partial<SaveFailedError>).failures)
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
|
|
394
488
|
function hasErrorIdentity(error: unknown, name: string, code: number): boolean {
|
|
395
489
|
return error instanceof Error && (error.name === name || (error as Partial<ResponseError<unknown>>).code === code);
|
|
396
490
|
}
|
package/src/messages/index.ts
CHANGED
|
@@ -25,7 +25,14 @@
|
|
|
25
25
|
|
|
26
26
|
export * from './primitives';
|
|
27
27
|
|
|
28
|
-
export {
|
|
28
|
+
export {
|
|
29
|
+
DOCUMENT_NOT_OPEN,
|
|
30
|
+
DUPLICATE_CLIENT_ID,
|
|
31
|
+
SAVE_FAILED,
|
|
32
|
+
SESSION_CLOSED,
|
|
33
|
+
STALE_BASE_VERSION_SAVE,
|
|
34
|
+
STALE_BASE_VERSION_UPDATE
|
|
35
|
+
} from '../errors';
|
|
29
36
|
export { DATA_CONNECTION_SESSION_RESTORE_FAILED, DATA_CONNECTION_WATCH_RESTORE_FAILED } from '../client/data-connection';
|
|
30
37
|
export { DATA_SERVER_CONNECT_FAILED, DATA_SERVER_NOT_READY } from '../client/rpc-connection';
|
|
31
38
|
export { DATA_SESSION_ANSWER_WITHOUT_MODEL, DATA_SESSION_RESTORE_FAILED, DATA_SESSION_UNSAVED_LOST } from '../client/data-session';
|