@xxxaz/json-rpc-schema-typing 0.8.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.
Files changed (75) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +5 -0
  3. package/cjs/JsonRpcClient.js +7 -0
  4. package/cjs/JsonRpcClient.js.map +1 -0
  5. package/cjs/JsonRpcException.js +93 -0
  6. package/cjs/JsonRpcException.js.map +1 -0
  7. package/cjs/JsonRpcMethod.js +78 -0
  8. package/cjs/JsonRpcMethod.js.map +1 -0
  9. package/cjs/JsonRpcRouter.js +3 -0
  10. package/cjs/JsonRpcRouter.js.map +1 -0
  11. package/cjs/JsonRpcServer.js +97 -0
  12. package/cjs/JsonRpcServer.js.map +1 -0
  13. package/cjs/helpers/dynamicRouting.js +67 -0
  14. package/cjs/helpers/dynamicRouting.js.map +1 -0
  15. package/cjs/helpers/index.js +19 -0
  16. package/cjs/helpers/index.js.map +1 -0
  17. package/cjs/helpers/serveHttp.js +45 -0
  18. package/cjs/helpers/serveHttp.js.map +1 -0
  19. package/cjs/index.js +24 -0
  20. package/cjs/index.js.map +1 -0
  21. package/cjs/package.json +1 -0
  22. package/cjs/schemas/Complex.js +34 -0
  23. package/cjs/schemas/Complex.js.map +1 -0
  24. package/cjs/schemas/Primitive.js +20 -0
  25. package/cjs/schemas/Primitive.js.map +1 -0
  26. package/cjs/schemas/Structure.js +28 -0
  27. package/cjs/schemas/Structure.js.map +1 -0
  28. package/cjs/schemas/index.js +20 -0
  29. package/cjs/schemas/index.js.map +1 -0
  30. package/cjs/types.js +3 -0
  31. package/cjs/types.js.map +1 -0
  32. package/esm/JsonRpcClient.js +3 -0
  33. package/esm/JsonRpcClient.js.map +1 -0
  34. package/esm/JsonRpcException.js +82 -0
  35. package/esm/JsonRpcException.js.map +1 -0
  36. package/esm/JsonRpcMethod.js +74 -0
  37. package/esm/JsonRpcMethod.js.map +1 -0
  38. package/esm/JsonRpcRouter.js +2 -0
  39. package/esm/JsonRpcRouter.js.map +1 -0
  40. package/esm/JsonRpcServer.js +93 -0
  41. package/esm/JsonRpcServer.js.map +1 -0
  42. package/esm/helpers/dynamicRouting.js +39 -0
  43. package/esm/helpers/dynamicRouting.js.map +1 -0
  44. package/esm/helpers/index.js +3 -0
  45. package/esm/helpers/index.js.map +1 -0
  46. package/esm/helpers/serveHttp.js +42 -0
  47. package/esm/helpers/serveHttp.js.map +1 -0
  48. package/esm/index.js +8 -0
  49. package/esm/index.js.map +1 -0
  50. package/esm/package.json +1 -0
  51. package/esm/schemas/Complex.js +27 -0
  52. package/esm/schemas/Complex.js.map +1 -0
  53. package/esm/schemas/Primitive.js +17 -0
  54. package/esm/schemas/Primitive.js.map +1 -0
  55. package/esm/schemas/Structure.js +23 -0
  56. package/esm/schemas/Structure.js.map +1 -0
  57. package/esm/schemas/index.js +4 -0
  58. package/esm/schemas/index.js.map +1 -0
  59. package/esm/types.js +2 -0
  60. package/esm/types.js.map +1 -0
  61. package/package.json +65 -0
  62. package/types/JsonRpcClient.d.ts +2 -0
  63. package/types/JsonRpcException.d.ts +52 -0
  64. package/types/JsonRpcMethod.d.ts +32 -0
  65. package/types/JsonRpcRouter.d.ts +19 -0
  66. package/types/JsonRpcServer.d.ts +11 -0
  67. package/types/helpers/dynamicRouting.d.ts +14 -0
  68. package/types/helpers/index.d.ts +2 -0
  69. package/types/helpers/serveHttp.d.ts +7 -0
  70. package/types/index.d.ts +7 -0
  71. package/types/schemas/Complex.d.ts +14 -0
  72. package/types/schemas/Primitive.d.ts +16 -0
  73. package/types/schemas/Structure.d.ts +21 -0
  74. package/types/schemas/index.d.ts +3 -0
  75. package/types/types.d.ts +24 -0
@@ -0,0 +1,3 @@
1
+ export class JsonRpcClient {
2
+ }
3
+ //# sourceMappingURL=JsonRpcClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcClient.js","sourceRoot":"","sources":["../src/JsonRpcClient.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,aAAa;CAAG"}
@@ -0,0 +1,82 @@
1
+ const defined = new Map();
2
+ function defineExceptions(classes) {
3
+ Object.entries(classes).forEach(([name, cls]) => {
4
+ if (!defined.has(cls))
5
+ defined.set(cls, name);
6
+ });
7
+ }
8
+ export class JsonRpcException extends Error {
9
+ static deserialize({ code, message, data }) {
10
+ for (const cls of defined.keys()) {
11
+ if (cls.code !== code)
12
+ continue;
13
+ return new cls(message, data);
14
+ }
15
+ return null;
16
+ }
17
+ constructor(message, data) {
18
+ if (!message)
19
+ message = new.target.defaultMessage;
20
+ super(message);
21
+ this.data = data;
22
+ }
23
+ data;
24
+ get name() {
25
+ return defined.get(this.constructor)
26
+ ?? this.constructor.name;
27
+ }
28
+ get code() {
29
+ return this.constructor.code;
30
+ }
31
+ serialize() {
32
+ return {
33
+ code: this.code,
34
+ message: this.message,
35
+ data: this.data,
36
+ };
37
+ }
38
+ toJSON() {
39
+ return this.serialize();
40
+ }
41
+ }
42
+ export class ParseError extends JsonRpcException {
43
+ static code = -32700;
44
+ static defaultMessage = 'Invalid JSON was received by the server.';
45
+ }
46
+ export class InvalidRequest extends JsonRpcException {
47
+ static code = -32600;
48
+ static defaultMessage = 'The JSON sent is not a valid Request object.';
49
+ }
50
+ export class MethodNotFound extends JsonRpcException {
51
+ static code = -32601;
52
+ static defaultMessage = 'The method does not exist / is not available.';
53
+ }
54
+ export class InvalidParams extends JsonRpcException {
55
+ static code = -32602;
56
+ static defaultMessage = 'Invalid method parameter(s)';
57
+ }
58
+ export class InternalError extends JsonRpcException {
59
+ static code = -32603;
60
+ static defaultMessage = 'Internal JSON-RPC error.';
61
+ }
62
+ export class InvalidReturn extends InternalError {
63
+ }
64
+ defineExceptions({ ParseError, InvalidRequest, MethodNotFound, InvalidParams, InvalidReturn, InternalError });
65
+ /**
66
+ *
67
+ * @property {number} code define to between -32000 to -32099
68
+ */
69
+ export class ServerError extends JsonRpcException {
70
+ static define(classes) {
71
+ Object.entries(classes).forEach(([name, cls]) => {
72
+ if (!ServerError.prototype.isPrototypeOf(cls)) {
73
+ throw new Error(`${name} is not extends by ServerError`);
74
+ }
75
+ if (cls.code < -32099 || -32000 < cls.code) {
76
+ throw new Error(`Defined ServerError code must be between -32000 to -32099 (${name} ${cls.code})`);
77
+ }
78
+ });
79
+ defineExceptions(classes);
80
+ }
81
+ }
82
+ //# sourceMappingURL=JsonRpcException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcException.js","sourceRoot":"","sources":["../src/JsonRpcException.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { Ajv } from 'ajv';
2
+ import { InvalidParams, InvalidReturn } from './JsonRpcException.js';
3
+ function validate(data, schema) {
4
+ const ajv = new Ajv();
5
+ const validate = ajv.compile(schema);
6
+ const valid = validate(data);
7
+ return {
8
+ valid,
9
+ errors: validate.errors ?? []
10
+ };
11
+ }
12
+ const methodKey = Symbol('JsonRpcMethodDefinition.method');
13
+ export class JsonRpcMethodDefinition {
14
+ $params;
15
+ $return;
16
+ static method = methodKey;
17
+ [methodKey];
18
+ constructor(method, $params, $return) {
19
+ this.$params = $params;
20
+ this.$return = $return;
21
+ this[methodKey] = method;
22
+ }
23
+ apply(ctx, params) {
24
+ return this[methodKey].apply(ctx, params);
25
+ }
26
+ validateParams(params) {
27
+ const errors = this.$params
28
+ .map((schema, index) => validate(params[index], schema))
29
+ .map(({ errors }, argument) => errors.map(({ propertyName, message }) => ({ argument, property: propertyName ?? '', message: message ?? '' })))
30
+ .flat();
31
+ if (errors.length > 0) {
32
+ const message = errors.map(({ argument, property, message }) => `args[${argument}].${property}: ${message}`).join('\n');
33
+ throw new InvalidParams(message, errors);
34
+ }
35
+ return true;
36
+ }
37
+ validateReturn(result) {
38
+ if (!this.$return)
39
+ return result === undefined;
40
+ const errors = validate(result, this.$return).errors.map(({ propertyName, message }) => ({ property: propertyName ?? '', message: message ?? '' }));
41
+ if (errors.length > 0) {
42
+ const message = errors.map(({ property, message }) => `return.${property}: ${message}`).join('\n');
43
+ throw new InvalidReturn(message, errors);
44
+ }
45
+ return true;
46
+ }
47
+ static define(method) {
48
+ return new this(method, [], undefined);
49
+ }
50
+ static paramsSchema(...params) {
51
+ return new DefinitionBuilder(params, undefined);
52
+ }
53
+ static returnSchema(rtn) {
54
+ return new DefinitionBuilder([], rtn);
55
+ }
56
+ }
57
+ class DefinitionBuilder {
58
+ $params;
59
+ $return;
60
+ constructor($params, $return) {
61
+ this.$params = $params;
62
+ this.$return = $return;
63
+ }
64
+ define(method) {
65
+ return new JsonRpcMethodDefinition(method, this.$params, this.$return);
66
+ }
67
+ paramsSchema(...params) {
68
+ return new DefinitionBuilder(params, this.$return);
69
+ }
70
+ returnSchema(rtn) {
71
+ return new DefinitionBuilder(this.$params, rtn);
72
+ }
73
+ }
74
+ //# sourceMappingURL=JsonRpcMethod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcMethod.js","sourceRoot":"","sources":["../src/JsonRpcMethod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=JsonRpcRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcRouter.js","sourceRoot":"","sources":["../src/JsonRpcRouter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ import { LazyResolvers } from "@xxxaz/stream-api-json/utility";
2
+ import { JsonRpcException, MethodNotFound, InternalError, InvalidRequest } from "./JsonRpcException.js";
3
+ import { JsonRpcMethodDefinition } from "./JsonRpcMethod.js";
4
+ export class JsonRpcServer {
5
+ router;
6
+ constructor(router) {
7
+ this.router = router;
8
+ }
9
+ validateRequest(request) {
10
+ const { jsonrpc, method, params } = request;
11
+ if (jsonrpc !== '2.0')
12
+ throw new InvalidRequest('jsonrpc must be "2.0"');
13
+ if (!method)
14
+ throw new InvalidRequest('method is required.');
15
+ }
16
+ pickMethodDefine(methodPath) {
17
+ const picked = methodPath.split('.').reduce((route, path) => route?.[path], this.router);
18
+ if (picked?.[JsonRpcMethodDefinition.method] instanceof Function) {
19
+ return picked;
20
+ }
21
+ throw new MethodNotFound(`method ${methodPath} is not Found.`);
22
+ }
23
+ async execute(ctx, request) {
24
+ try {
25
+ this.validateRequest(request);
26
+ const { method, params } = request;
27
+ const picked = this.pickMethodDefine(method);
28
+ picked.validateParams(params);
29
+ const result = await picked.apply(ctx, params);
30
+ try {
31
+ picked.validateReturn(result);
32
+ }
33
+ catch (e) {
34
+ console.warn(`Invalid Result: ${method}`, e);
35
+ }
36
+ return result;
37
+ }
38
+ catch (err) {
39
+ console.error(err);
40
+ if (err instanceof JsonRpcException)
41
+ throw err;
42
+ throw new InternalError(String(err));
43
+ }
44
+ }
45
+ async call(ctx, request) {
46
+ const jsonrpc = '2.0';
47
+ const id = request.id ?? null;
48
+ try {
49
+ const result = await this.execute(ctx, request);
50
+ return { jsonrpc, id, result };
51
+ }
52
+ catch (err) {
53
+ const error = err instanceof JsonRpcException
54
+ ? err.serialize()
55
+ : new InternalError(String(err)).serialize();
56
+ return { jsonrpc, id, error };
57
+ }
58
+ }
59
+ ;
60
+ async *batch(ctx, requests) {
61
+ const promises = {};
62
+ let loading = new LazyResolvers();
63
+ let loadedAll = false;
64
+ (async () => {
65
+ for await (const request of requests) {
66
+ const id = request.id;
67
+ if (id == null) {
68
+ this.execute(ctx, request);
69
+ continue;
70
+ }
71
+ promises[id] = this.call(ctx, request);
72
+ loading.resolve();
73
+ loading = new LazyResolvers();
74
+ }
75
+ loadedAll = true;
76
+ loading.resolve();
77
+ })();
78
+ while (true) {
79
+ const list = Object.values(promises);
80
+ if (!list.length) {
81
+ if (loadedAll)
82
+ break;
83
+ await loading.promise;
84
+ continue;
85
+ }
86
+ const response = await Promise.race(list);
87
+ yield response;
88
+ delete promises[response.id];
89
+ }
90
+ }
91
+ ;
92
+ }
93
+ //# sourceMappingURL=JsonRpcServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonRpcServer.js","sourceRoot":"","sources":["../src/JsonRpcServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { lstatSync, readdirSync } from 'fs';
2
+ import { JsonRpcMethodDefinition } from '../JsonRpcMethod.js';
3
+ export async function dynamicRouting(rootPath, enumerator) {
4
+ const router = {};
5
+ for await (const { name, path, directory } of enumerator(rootPath)) {
6
+ if (directory) {
7
+ const subRouter = await dynamicRouting(path, enumerator);
8
+ if (Object.keys(subRouter).length > 0) {
9
+ router[name] = subRouter;
10
+ }
11
+ continue;
12
+ }
13
+ try {
14
+ const module = await import(path);
15
+ if (module.default instanceof JsonRpcMethodDefinition) {
16
+ const methodName = name.replace(/\.[jt]s$/, '');
17
+ router[methodName] = module.default;
18
+ }
19
+ }
20
+ catch (e) { }
21
+ }
22
+ return router;
23
+ }
24
+ export function fileSystemRouting(rootPath) {
25
+ return dynamicRouting(rootPath, fsEnumerate);
26
+ }
27
+ ;
28
+ export async function* fsEnumerate(rootPath) {
29
+ for (const name of readdirSync(rootPath)) {
30
+ const path = `${rootPath}/${name}`;
31
+ const stat = lstatSync(path);
32
+ yield {
33
+ name,
34
+ path,
35
+ directory: stat.isDirectory()
36
+ };
37
+ }
38
+ }
39
+ //# sourceMappingURL=dynamicRouting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicRouting.js","sourceRoot":"","sources":["../../src/helpers/dynamicRouting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAQ9D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAa,QAAgB,EAAE,UAAiD;IAChH,MAAM,MAAM,GAAG,EAAoF,CAAC;IACpG,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjE,IAAG,SAAS,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,MAAM,cAAc,CAAM,IAAI,EAAE,UAAU,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YAC7B,CAAC;YACD,SAAS;QACb,CAAC;QACD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,IAAG,MAAM,CAAC,OAAO,YAAY,uBAAuB,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAChD,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YACxC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAa,QAAgB;IAC1D,OAAO,cAAc,CAAM,QAAQ,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAAA,CAAC;AAEF,MAAM,CAAC,KAAK,SAAU,CAAC,CAAC,WAAW,CAAE,QAAgB;IACjD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM;YACF,IAAI;YACJ,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;SAChC,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './dynamicRouting.js';
2
+ export * from './serveHttp.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { JsonStreamingParser, ParsingJsonArray, StringifyingJsonArray, toNodeReadable } from '@xxxaz/stream-api-json';
2
+ import { InternalError, JsonRpcException } from '../JsonRpcException.js';
3
+ async function* extract(iterable) {
4
+ for await (const req of iterable) {
5
+ yield await req.all();
6
+ }
7
+ }
8
+ export async function serveHttp(server, request, response, context) {
9
+ context ??= { request, response };
10
+ try {
11
+ const root = await JsonStreamingParser
12
+ .readFrom(request)
13
+ .root();
14
+ if (root instanceof ParsingJsonArray) {
15
+ const result = server.batch(context, extract(root));
16
+ const source = new StringifyingJsonArray(result);
17
+ const stream = await toNodeReadable(source);
18
+ response.writeHead(200, {
19
+ 'Content-Type': 'application/json',
20
+ 'Transfer-Encoding': 'chunked'
21
+ });
22
+ stream.pipe(response);
23
+ return;
24
+ }
25
+ const result = await server.call(context, await root.all());
26
+ response.writeHead(200, {
27
+ 'Content-Type': 'application/json'
28
+ });
29
+ response.end(JSON.stringify(result));
30
+ }
31
+ catch (err) {
32
+ if (err instanceof JsonRpcException) {
33
+ const status = err instanceof InternalError ? 500 : 400;
34
+ response.writeHead(status);
35
+ response.end(JSON.stringify({ jsonrpc: "2.0", error: err.serialize() }));
36
+ return;
37
+ }
38
+ response.writeHead(500);
39
+ response.end(JSON.stringify({ jsonrpc: "2.0", error: new InternalError(String(err)).serialize() }));
40
+ }
41
+ }
42
+ //# sourceMappingURL=serveHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serveHttp.js","sourceRoot":"","sources":["../../src/helpers/serveHttp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAG,MAAM,wBAAwB,CAAC;AAGvH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAQzE,KAAK,SAAU,CAAC,CAAC,OAAO,CAAC,QAA4C;IACjE,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAoB,MAA0B,EAAE,OAAwB,EAAE,QAAwB,EAAE,OAAa;IAC5I,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAS,CAAC;IACzC,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,mBAAmB;aACjC,QAAQ,CAAC,OAAO,CAAC;aACjB,IAAI,EAAE,CAAC;QAEZ,IAAG,IAAI,YAAY,gBAAgB,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5C,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;gBACpB,cAAc,EAAE,kBAAkB;gBAClC,mBAAmB,EAAE,SAAS;aACjC,CAAC,CAAA;YACF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5D,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;YACpB,cAAc,EAAE,kBAAkB;SACrC,CAAC,CAAA;QACF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzC,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,IAAG,GAAG,YAAY,gBAAgB,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACxD,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO;QACX,CAAC;QAED,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC;AACL,CAAC"}
package/esm/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from './JsonRpcException.js';
2
+ export * from './JsonRpcMethod.js';
3
+ export * from './JsonRpcRouter.js';
4
+ export * from './JsonRpcServer.js';
5
+ export * from './types.js';
6
+ export * from './schemas/index.js';
7
+ export * from './helpers/index.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,YAAY,CAAC;AAE3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,27 @@
1
+ export function $Enum(...elements) {
2
+ return {
3
+ enum: elements
4
+ };
5
+ }
6
+ export function $Expand(source, expand) {
7
+ return {
8
+ ...source,
9
+ ...expand,
10
+ };
11
+ }
12
+ export function $And(...allOf) {
13
+ return {
14
+ allOf
15
+ };
16
+ }
17
+ export function $Or(...anyOf) {
18
+ return {
19
+ anyOf
20
+ };
21
+ }
22
+ export function $Xor(...oneOf) {
23
+ return {
24
+ oneOf
25
+ };
26
+ }
27
+ //# sourceMappingURL=Complex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Complex.js","sourceRoot":"","sources":["../../src/schemas/Complex.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,KAAK,CAA2C,GAAG,QAAW;IAC1E,OAAO;QACH,IAAI,EAAE,QAAQ;KACR,CAAC;AACf,CAAC;AAED,MAAM,UAAU,OAAO,CAAyD,MAAW,EAAE,MAAU;IACnG,OAAO;QACH,GAAG,MAAM;QACT,GAAG,MAAM;KACH,CAAC;AACf,CAAC;AAED,MAAM,UAAU,IAAI,CAA+B,GAAG,KAAc;IAChE,OAAO;QACH,KAAK;KACC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,GAAG,CAA+B,GAAG,KAAc;IAC/D,OAAO;QACH,KAAK;KACC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,IAAI,CAA+B,GAAG,KAAc;IAChE,OAAO;QACH,KAAK;KACC,CAAC;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ export const $Null = {
2
+ type: 'null',
3
+ nullable: true,
4
+ };
5
+ export const $Boolean = {
6
+ type: 'boolean',
7
+ };
8
+ export const $Number = {
9
+ type: 'number',
10
+ };
11
+ export const $Integer = {
12
+ type: 'integer',
13
+ };
14
+ export const $String = {
15
+ type: 'string',
16
+ };
17
+ //# sourceMappingURL=Primitive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Primitive.js","sourceRoot":"","sources":["../../src/schemas/Primitive.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,IAAI;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,IAAI,EAAE,SAAS;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAG;IACnB,IAAI,EAAE,QAAQ;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,IAAI,EAAE,SAAS;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAG;IACnB,IAAI,EAAE,QAAQ;CACR,CAAC"}
@@ -0,0 +1,23 @@
1
+ export function $Array(items) {
2
+ return {
3
+ type: 'array',
4
+ items
5
+ };
6
+ }
7
+ export function $Tuple(...items) {
8
+ return {
9
+ type: 'array',
10
+ items,
11
+ minItems: items.length,
12
+ maxItems: items.length,
13
+ };
14
+ }
15
+ export function $Object(properties) {
16
+ return {
17
+ type: 'object',
18
+ additionalProperties: false,
19
+ required: Object.keys(properties),
20
+ properties
21
+ };
22
+ }
23
+ //# sourceMappingURL=Structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Structure.js","sourceRoot":"","sources":["../../src/schemas/Structure.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAuB,KAAQ;IACjD,OAAO;QACH,IAAI,EAAE,OAAO;QACb,KAAK;KACC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,MAAM,CAAyB,GAAG,KAAQ;IACtD,OAAO;QACH,IAAI,EAAE,OAAO;QACb,KAAK;QACL,QAAQ,EAAE,KAAK,CAAC,MAAqB;QACrC,QAAQ,EAAE,KAAK,CAAC,MAAqB;KAC/B,CAAC;AACf,CAAC;AAKD,MAAM,UAAU,OAAO,CAAyB,UAAa;IACzD,OAAO;QACH,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,KAAK;QAC3B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAc;QAC9C,UAAU;KACJ,CAAC;AACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './Primitive.js';
2
+ export * from './Complex.js';
3
+ export * from './Structure.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
package/esm/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@xxxaz/json-rpc-schema-typing",
3
+ "version": "0.8.0",
4
+ "description": "",
5
+ "author": "xxx Inc.",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/xxxaz/json-rpc-schema-typing.git"
10
+ },
11
+ "homepage": "https://github.com/xxxaz/json-rpc-schema-typing#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/xxxaz/json-rpc-schema-typing/issues"
14
+ },
15
+ "engines": {
16
+ "node": ">=18"
17
+ },
18
+ "type": "module",
19
+ "types": "./types/index.d.js",
20
+ "main": "./cjs/index.js",
21
+ "module": "./esm/index.js",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./types/index.d.ts",
25
+ "require": "./cjs/index.js",
26
+ "import": "./esm/index.js",
27
+ "default": "./esm/index.js"
28
+ },
29
+ "./*": {
30
+ "types": "./types/*.d.ts",
31
+ "require": "./cjs/*.js",
32
+ "import": "./esm/*.js",
33
+ "default": "./esm/*.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "types",
38
+ "cjs",
39
+ "esm"
40
+ ],
41
+ "sideEffects": false,
42
+ "scripts": {
43
+ "clean": "rm -rf ./*.tsbuildinfo ./*.tgz ./types ./esm ./cjs",
44
+ "transpile": "tsc -b tsconfig-types.json tsconfig-esm.json tsconfig-cjs.json",
45
+ "post-build": "node --no-warnings=ExperimentalWarning --loader=ts-node/esm ./post-build.js",
46
+ "build": "npm run clean && npm run transpile && npm run post-build",
47
+ "prepublish": "npm run build",
48
+ "demo": "node --no-warnings=ExperimentalWarning --loader=ts-node/esm ./demo/demo.js",
49
+ "test": "jest"
50
+ },
51
+ "dependencies": {
52
+ "@types/json-schema": "^7.0.15",
53
+ "@xxxaz/stream-api-json": "^1.0.1",
54
+ "ajv": "^8.17.1",
55
+ "json-schema-to-ts": "^3.1.0",
56
+ "yaml": "^2.4.5"
57
+ },
58
+ "devDependencies": {
59
+ "@types/jest": "^29.5.12",
60
+ "jest": "^29.7.0",
61
+ "ts-jest": "^29.1.5",
62
+ "ts-node": "^10.9.2",
63
+ "typescript": "^5.5.2"
64
+ }
65
+ }
@@ -0,0 +1,2 @@
1
+ export declare class JsonRpcClient {
2
+ }
@@ -0,0 +1,52 @@
1
+ import { type JsonSerializable } from "@xxxaz/stream-api-json";
2
+ import { JsonRpcError } from "./types.js";
3
+ type JsonRpcExceptionClass = {
4
+ readonly defaultMessage?: string;
5
+ readonly code: number;
6
+ new (message?: string, data?: JsonSerializable): JsonRpcException;
7
+ };
8
+ export declare abstract class JsonRpcException extends Error {
9
+ static deserialize({ code, message, data }: JsonRpcError): JsonRpcException | null;
10
+ constructor(message?: string, data?: JsonSerializable);
11
+ readonly data?: JsonSerializable;
12
+ get name(): string;
13
+ get code(): number;
14
+ serialize(): JsonRpcError;
15
+ toJSON(): Readonly<{
16
+ code: number;
17
+ message?: string;
18
+ data?: JsonSerializable;
19
+ }>;
20
+ }
21
+ export declare class ParseError extends JsonRpcException {
22
+ static readonly code = -32700;
23
+ static readonly defaultMessage = "Invalid JSON was received by the server.";
24
+ }
25
+ export declare class InvalidRequest extends JsonRpcException {
26
+ static readonly code = -32600;
27
+ static readonly defaultMessage = "The JSON sent is not a valid Request object.";
28
+ }
29
+ export declare class MethodNotFound extends JsonRpcException {
30
+ static readonly code = -32601;
31
+ static readonly defaultMessage = "The method does not exist / is not available.";
32
+ }
33
+ export declare class InvalidParams extends JsonRpcException {
34
+ static readonly code = -32602;
35
+ static readonly defaultMessage = "Invalid method parameter(s)";
36
+ }
37
+ export declare class InternalError extends JsonRpcException {
38
+ static readonly code = -32603;
39
+ static readonly defaultMessage = "Internal JSON-RPC error.";
40
+ }
41
+ export declare class InvalidReturn extends InternalError {
42
+ }
43
+ /**
44
+ *
45
+ * @property {number} code define to between -32000 to -32099
46
+ */
47
+ export declare abstract class ServerError extends JsonRpcException {
48
+ static define(classes: {
49
+ [name: string]: JsonRpcExceptionClass;
50
+ }): void;
51
+ }
52
+ export {};