@arrirpc/server 0.69.2 → 0.71.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.
package/README.md CHANGED
@@ -2,28 +2,36 @@
2
2
 
3
3
  Typescript implementation of [Arri RPC](/README.md). It's built on top of [H3](https://github.com/unjs/h3) and uses [esbuild](https://esbuild.github.io/) for bundling.
4
4
 
5
- Parameters and responses are defined using [@arrirpc/schema](/tooling/schema/README.md) for automatic validation and serialization of inputs and outputs and to generate Arri Type Definitions for client generators.
5
+ Parameters and responses are defined using [@arrirpc/schema](/languages/ts/ts-schema/README.md) for automatic validation and serialization of inputs and outputs and to generate Arri Type Definitions for client generators.
6
+
7
+ ## Related Libraries
8
+
9
+ | Name | Description |
10
+ | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
11
+ | [arri](/tooling/cli/README.md) | The Arri CLI |
12
+ | [@arrirpc/schema](/languages/ts/ts-schema/README.md) | High performance validation library used to define the inputs and outputs of procedures. Can also be used standalone as a generic TS validation library. |
13
+ | [@arrirpc/eslint-plugin](/languages/ts/eslint-plugin/README.md) | Eslint rules for Arri RPC |
6
14
 
7
15
  ## Table of Contents
8
16
 
9
- - [Quickstart](#quickstart)
10
- - [Manual Setup](#manual-setup)
11
- - [Install Dependencies](#install-dependencies)
12
- - [Scaffold Your Project](#scaffold-your-project)
13
- - [Usage](#usage)
14
- - [Creating Procedures](#creating-procedures)
15
- - [File-Based Routing](#file-based-routing)
16
- - [Manual Routing](#manual-routing)
17
- - [Creating Event Stream Procedures](#creating-event-stream-procedures)
18
- - [Creating Websocket Procedures](#creating-websocket-procedures-experimental)
19
- - [Adding to the RPC Context](#adding-to-the-rpc-context)
20
- - [Adding Non-RPC Routes](#adding-non-rpc-routes)
21
- - [Adding Middleware](#adding-middleware)
22
- - [Key Concepts](#key-concepts)
23
- - [Arri Definition File](#arri-definition-file)
24
- - [How Procedures Map To Endpoints](#how-procedures-map-to-endpoints)
25
- - [H3 Support](#h3-support)
26
- - [Arri CLI](#arri-cli)
17
+ - [Quickstart](#quickstart)
18
+ - [Manual Setup](#manual-setup)
19
+ - [Install Dependencies](#install-dependencies)
20
+ - [Scaffold Your Project](#scaffold-your-project)
21
+ - [Usage](#usage)
22
+ - [Creating Procedures](#creating-procedures)
23
+ - [File-Based Routing](#file-based-routing)
24
+ - [Manual Routing](#manual-routing)
25
+ - [Creating Event Stream Procedures](#creating-event-stream-procedures)
26
+ - [Creating Websocket Procedures](#creating-websocket-procedures-experimental)
27
+ - [Adding to the RPC Context](#adding-to-the-rpc-context)
28
+ - [Adding Non-RPC Routes](#adding-non-rpc-routes)
29
+ - [Adding Middleware](#adding-middleware)
30
+ - [Key Concepts](#key-concepts)
31
+ - [Arri Definition File](#arri-definition-file)
32
+ - [How Procedures Map To Endpoints](#how-procedures-map-to-endpoints)
33
+ - [H3 Support](#h3-support)
34
+ - [Arri CLI](#arri-cli)
27
35
 
28
36
  ## Quickstart
29
37
 
@@ -47,10 +55,12 @@ pnpm run dev
47
55
 
48
56
  ```bash
49
57
  # npm
50
- npm install arri @arrirpc/server @arrirpc/schema
58
+ npm install -D arri
59
+ npm install @arrirpc/server @arrirpc/schema
51
60
 
52
61
  # pnpm
53
- pnpm install arri @arrirpc/server @arrirpc/schema
62
+ pnpm install -D arri
63
+ pnpm install @arrirpc/server @arrirpc/schema
54
64
  ```
55
65
 
56
66
  ### Scaffold Your Project
@@ -84,7 +94,7 @@ Create an `arri.config.ts` in the project directory
84
94
 
85
95
  ```ts
86
96
  // arri.config.ts
87
- import { defineConfig, servers, generators } from "arri";
97
+ import { defineConfig, servers, generators } from 'arri';
88
98
 
89
99
  export default defineConfig({
90
100
  server: servers.tsServer(),
@@ -105,7 +115,7 @@ Create an app entry file in your src directory. The name of the file must match
105
115
 
106
116
  ```ts
107
117
  // ./src/app.ts
108
- import { ArriApp } from "arri";
118
+ import { ArriApp } from 'arri';
109
119
 
110
120
  const app = new ArriApp();
111
121
 
@@ -154,8 +164,8 @@ Example `.rpc.ts` file
154
164
 
155
165
  ```ts
156
166
  // ./src/users/getUser.rpc.ts
157
- import { defineRpc } from "@arrirpc/server";
158
- import { a } from "@arrirpc/schema";
167
+ import { defineRpc } from '@arrirpc/server';
168
+ import { a } from '@arrirpc/schema';
159
169
 
160
170
  export default defineRpc({
161
171
  params: a.object({
@@ -177,8 +187,8 @@ export default defineRpc({
177
187
  ```ts
178
188
  export default defineConfig({
179
189
  servers: servers.tsServer({
180
- procedureDir: "procedures", // change which directory to look for procedures (This is relative to the srcDir)
181
- procedureGlobPatterns: ["**/*.rpc.ts"], // change the file name glob pattern for finding rpcs
190
+ procedureDir: 'procedures', // change which directory to look for procedures (This is relative to the srcDir)
191
+ procedureGlobPatterns: ['**/*.rpc.ts'], // change the file name glob pattern for finding rpcs
182
192
  }),
183
193
  // rest of config
184
194
  });
@@ -221,23 +231,23 @@ Event stream procedures make use of [Server Sent Events](https://developer.mozil
221
231
 
222
232
  Arri Event streams sent the following event types:
223
233
 
224
- - `message` - A standard message with the response data serialized as JSON
225
- - `done` - A message to tell clients that there will be no more events
226
- - `ping` - A message periodically sent by the server to keep the connection alive.
234
+ - `message` - A standard message with the response data serialized as JSON
235
+ - `done` - A message to tell clients that there will be no more events
236
+ - `ping` - A message periodically sent by the server to keep the connection alive.
227
237
 
228
238
  ```ts
229
239
  /// message event ///
230
240
  id: string | undefined;
231
- event: "message";
241
+ event: 'message';
232
242
  data: Response; // whatever you have specified as the response serialized to json
233
243
 
234
244
  /// done event ///
235
- event: "done";
236
- data: "this stream has ended";
245
+ event: 'done';
246
+ data: 'this stream has ended';
237
247
 
238
248
  /// ping event ///
239
- event: "ping";
240
- data: "";
249
+ event: 'ping';
250
+ data: '';
241
251
  ```
242
252
 
243
253
  ##### Example Usage:
@@ -261,15 +271,15 @@ export default defineEventStreamRpc({
261
271
  // send a message every second
262
272
  const interval = setInterval(async () => {
263
273
  await stream.push({
264
- id: "1",
265
- name: "John Doe",
274
+ id: '1',
275
+ name: 'John Doe',
266
276
  createdAt: new Date(),
267
277
  updatedAt: new Date(),
268
278
  });
269
279
  }, 1000);
270
280
 
271
281
  // cleanup when the client disconnects
272
- stream.on("close", () => {
282
+ stream.on('close', () => {
273
283
  clearInterval(interval);
274
284
  });
275
285
  },
@@ -412,12 +422,12 @@ const authMiddleware = defineMiddleware(async (event) => {
412
422
  // assume you did something to get the user from the request
413
423
  event.context.user = {
414
424
  id: 1,
415
- name: "John Doe",
416
- email: "johndoe@gmail.com",
425
+ name: 'John Doe',
426
+ email: 'johndoe@gmail.com',
417
427
  };
418
428
  });
419
429
 
420
- app.rpc("sayHello", {
430
+ app.rpc('sayHello', {
421
431
  params: undefined,
422
432
  response: a.object({
423
433
  message: a.string(),
@@ -434,9 +444,9 @@ app.rpc("sayHello", {
434
444
  To get type safety for these new properties create a `.d.ts` file and augment the `ArriEventContext` provided by `@arrirpc/server`
435
445
 
436
446
  ```ts
437
- import "@arrirpc/server";
447
+ import '@arrirpc/server';
438
448
 
439
- declare module "@arrirpc/server" {
449
+ declare module '@arrirpc/server' {
440
450
  interface ArriEventContext {
441
451
  user?: {
442
452
  id: number;
@@ -538,18 +548,18 @@ By default all procedures will become post requests, but you can change this whe
538
548
  ```ts
539
549
  // procedures/users/getUser.rpc.ts
540
550
  export default defineRpc({
541
- method: "get",
551
+ method: 'get',
542
552
  // rest of config
543
553
  });
544
554
  ```
545
555
 
546
556
  The supported HTTP methods are as follows:
547
557
 
548
- - post
549
- - get
550
- - delete
551
- - patch
552
- - put
558
+ - post
559
+ - get
560
+ - delete
561
+ - patch
562
+ - put
553
563
 
554
564
  When using a get method the RPC params will be mapped as query parameters which will be coerced into their type using the `a.coerce` method from `arri-validate`. Get methods support all basic scalar types however arrays and nested objects are not supported.
555
565
 
@@ -562,7 +572,7 @@ Arri is built on top of [H3](https://h3.unjs.io/utils/request#getrequestipevent)
562
572
  Arri re-eports all of the H3 utilities.
563
573
 
564
574
  ```ts
565
- import { getRequestIP, setResponseHeader } from "@arrirpc/server";
575
+ import { getRequestIP, setResponseHeader } from '@arrirpc/server';
566
576
  ```
567
577
 
568
578
  #### Accessing H3 Events
@@ -592,8 +602,8 @@ defineEventStreamRpc({
592
602
  Arri server is just an H3 app under the hood so you can start it the same way you would start an H3 app. Although you should note that currently the filed based router only works when using the Arri CLI.
593
603
 
594
604
  ```ts
595
- import { createServer } from "node:http";
596
- import { ArriApp, toNodeListener } from "@arrirpc/server";
605
+ import { createServer } from 'node:http';
606
+ import { ArriApp, toNodeListener } from '@arrirpc/server';
597
607
 
598
608
  const app = new ArriApp();
599
609
 
package/dist/index.cjs CHANGED
@@ -5,17 +5,11 @@ const h3 = require('h3');
5
5
  const schema = require('@arrirpc/schema');
6
6
  const scule = require('scule');
7
7
 
8
- var __defProp$5 = Object.defineProperty;
9
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
- var __publicField$5 = (obj, key, value) => {
11
- __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
12
- return value;
13
- };
14
8
  class arriError extends Error {
9
+ code;
10
+ data;
15
11
  constructor(err) {
16
12
  super(err.message);
17
- __publicField$5(this, "code");
18
- __publicField$5(this, "data");
19
13
  this.code = err.code;
20
14
  this.data = err.data;
21
15
  if (err.stack) {
@@ -279,7 +273,7 @@ function createHttpRpcDefinition(rpcName, httpPath, procedure) {
279
273
  params: getRpcParamName(rpcName, procedure),
280
274
  response: getRpcResponseDefinition(rpcName, procedure),
281
275
  isDeprecated: procedure.isDeprecated,
282
- isEventStream: procedure.isEventStream === true ? true : void 0
276
+ isEventStream: procedure.isEventStream === true ? true : undefined
283
277
  };
284
278
  }
285
279
  function getRpcPath(rpcName, prefix = "") {
@@ -294,7 +288,7 @@ function getRpcPath(rpcName, prefix = "") {
294
288
  }
295
289
  function getRpcParamName(rpcName, procedure) {
296
290
  if (!isRpcParamSchema(procedure.params)) {
297
- return void 0;
291
+ return undefined;
298
292
  }
299
293
  const nameParts = rpcName.split(".").map(
300
294
  (part) => codegenUtils.removeDisallowedChars(part, `!@#$%^&*()+=[]{}|\\;:'"<>,./?`)
@@ -304,7 +298,7 @@ function getRpcParamName(rpcName, procedure) {
304
298
  }
305
299
  function getRpcResponseName(rpcName, procedure) {
306
300
  if (!isRpcParamSchema(procedure.response)) {
307
- return void 0;
301
+ return undefined;
308
302
  }
309
303
  const nameParts = rpcName.split(".").map(
310
304
  (part) => codegenUtils.removeDisallowedChars(part, `!@#$%^&*()+=[]{}|\\;:'"<>,./?`)
@@ -314,17 +308,17 @@ function getRpcResponseName(rpcName, procedure) {
314
308
  }
315
309
  function getRpcResponseDefinition(rpcName, procedure) {
316
310
  if (!isRpcParamSchema(procedure.response)) {
317
- return void 0;
311
+ return undefined;
318
312
  }
319
313
  const name = getRpcResponseName(rpcName, procedure);
320
314
  if (!name) {
321
- return void 0;
315
+ return undefined;
322
316
  }
323
317
  return name;
324
318
  }
325
319
  function registerRpc(router, path, procedure, opts) {
326
- const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : void 0;
327
- const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : void 0;
320
+ const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : undefined;
321
+ const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : undefined;
328
322
  const httpMethod = procedure.method ?? "post";
329
323
  const handler = h3.eventHandler(async (event) => {
330
324
  event.context.rpcName = procedure.name;
@@ -475,16 +469,10 @@ function getSchemaValidator(rpcName, type, schema$1) {
475
469
  return schema.a.compile(schema$1);
476
470
  } catch (_) {
477
471
  console.error(`Error compiling ${type} validator for ${rpcName}`);
478
- return void 0;
472
+ return undefined;
479
473
  }
480
474
  }
481
475
 
482
- var __defProp$4 = Object.defineProperty;
483
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
484
- var __publicField$4 = (obj, key, value) => {
485
- __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
486
- return value;
487
- };
488
476
  function defineEventStreamRpc(config) {
489
477
  return {
490
478
  ...config,
@@ -497,15 +485,15 @@ function isEventStreamRpc(input) {
497
485
  return isRpc(input) && "isEventStream" in input && input.isEventStream === true;
498
486
  }
499
487
  class EventStreamConnection {
488
+ lastEventId;
489
+ validationErrors;
490
+ validator;
491
+ serializer;
492
+ // for some reason Rollup cannot output DTS when this is set to NodeJS.Timeout
493
+ pingInterval = undefined;
494
+ pingIntervalMs;
495
+ eventStream;
500
496
  constructor(event, opts) {
501
- __publicField$4(this, "lastEventId");
502
- __publicField$4(this, "validationErrors");
503
- __publicField$4(this, "validator");
504
- __publicField$4(this, "serializer");
505
- // for some reason Rollup cannot output DTS when this is set to NodeJS.Timeout
506
- __publicField$4(this, "pingInterval");
507
- __publicField$4(this, "pingIntervalMs");
508
- __publicField$4(this, "eventStream");
509
497
  this.eventStream = h3.createEventStream(event);
510
498
  this.lastEventId = h3.getHeader(event, "Last-Event-Id");
511
499
  this.pingIntervalMs = opts.pingInterval ?? 6e4;
@@ -585,8 +573,8 @@ class EventStreamConnection {
585
573
  }
586
574
  }
587
575
  function registerEventStreamRpc(router, path, procedure, opts) {
588
- const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : void 0;
589
- const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : void 0;
576
+ const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : undefined;
577
+ const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : undefined;
590
578
  const httpMethod = procedure.method ?? "get";
591
579
  const handler = h3.eventHandler(async (event) => {
592
580
  event.context.rpcName = procedure.name;
@@ -615,12 +603,9 @@ function registerEventStreamRpc(router, path, procedure, opts) {
615
603
  validator: responseValidator?.validate ?? function() {
616
604
  return true;
617
605
  },
618
- serializer: (
619
- // eslint-disable-next-line @typescript-eslint/unbound-method
620
- responseValidator?.serialize ?? function(_) {
621
- return "";
622
- }
623
- ),
606
+ serializer: responseValidator?.serialize ?? function(_) {
607
+ return "";
608
+ },
624
609
  validationErrors(input) {
625
610
  if (procedure.response) {
626
611
  return schema.a.errors(procedure.response, input);
@@ -782,17 +767,11 @@ function handleRoute(router, method, route, opts) {
782
767
  }
783
768
  }
784
769
 
785
- var __defProp$3 = Object.defineProperty;
786
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
787
- var __publicField$3 = (obj, key, value) => {
788
- __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
789
- return value;
790
- };
791
770
  class ArriRouter {
771
+ routes = [];
772
+ definitions = {};
773
+ prefix;
792
774
  constructor(routePrefix = "") {
793
- __publicField$3(this, "routes", []);
794
- __publicField$3(this, "definitions", {});
795
- __publicField$3(this, "prefix");
796
775
  this.prefix = routePrefix;
797
776
  }
798
777
  route(route) {
@@ -812,19 +791,13 @@ class ArriRouter {
812
791
  }
813
792
  }
814
793
 
815
- var __defProp$2 = Object.defineProperty;
816
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
817
- var __publicField$2 = (obj, key, value) => {
818
- __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
819
- return value;
820
- };
821
794
  class ArriService {
795
+ name;
822
796
  constructor(name) {
823
- __publicField$2(this, "name");
824
- __publicField$2(this, "procedures", []);
825
- __publicField$2(this, "definitions", {});
826
797
  this.name = name;
827
798
  }
799
+ procedures = [];
800
+ definitions = {};
828
801
  rpc(name, procedure) {
829
802
  procedure.name = `${this.name}.${name}`;
830
803
  this.procedures.push(procedure);
@@ -849,18 +822,12 @@ function defineService(name, procedures) {
849
822
  return service;
850
823
  }
851
824
 
852
- var __defProp$1 = Object.defineProperty;
853
- var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
854
- var __publicField$1 = (obj, key, value) => {
855
- __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
856
- return value;
857
- };
858
825
  class WsPeer {
826
+ _peer;
827
+ _validator;
828
+ context;
829
+ url;
859
830
  constructor(peer, opts) {
860
- __publicField$1(this, "_peer");
861
- __publicField$1(this, "_validator");
862
- __publicField$1(this, "context");
863
- __publicField$1(this, "url");
864
831
  this._peer = peer;
865
832
  this._validator = opts.validator;
866
833
  this.url = peer.websocket.url ?? "";
@@ -937,30 +904,24 @@ function createWsRpcDefinition(rpcName, path, rpc) {
937
904
  };
938
905
  }
939
906
 
940
- var __defProp = Object.defineProperty;
941
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
942
- var __publicField = (obj, key, value) => {
943
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
944
- return value;
945
- };
946
907
  const createAppDefinition = (def) => def;
947
908
  class ArriApp {
909
+ __isArri__ = true;
910
+ h3App;
911
+ h3Router = h3.createRouter();
912
+ _rpcDefinitionPath;
913
+ _rpcRoutePrefix;
914
+ appInfo;
915
+ _procedures = {};
916
+ _definitions = {};
917
+ _middlewares = [];
918
+ _onRequest;
919
+ _onAfterResponse;
920
+ _onBeforeResponse;
921
+ _onError;
922
+ _debug;
923
+ definitionPath;
948
924
  constructor(opts = {}) {
949
- __publicField(this, "__isArri__", true);
950
- __publicField(this, "h3App");
951
- __publicField(this, "h3Router", h3.createRouter());
952
- __publicField(this, "_rpcDefinitionPath");
953
- __publicField(this, "_rpcRoutePrefix");
954
- __publicField(this, "appInfo");
955
- __publicField(this, "_procedures", {});
956
- __publicField(this, "_definitions", {});
957
- __publicField(this, "_middlewares", []);
958
- __publicField(this, "_onRequest");
959
- __publicField(this, "_onAfterResponse");
960
- __publicField(this, "_onBeforeResponse");
961
- __publicField(this, "_onError");
962
- __publicField(this, "_debug");
963
- __publicField(this, "definitionPath");
964
925
  this.appInfo = opts?.appInfo;
965
926
  this.h3App = h3.createApp({
966
927
  debug: opts?.debug
@@ -1158,6 +1119,13 @@ exports.registerRoute = registerRoute;
1158
1119
  exports.registerRpc = registerRpc;
1159
1120
  exports.registerWebsocketRpc = registerWebsocketRpc;
1160
1121
  exports.validateRpcRequestInput = validateRpcRequestInput;
1122
+ Object.prototype.hasOwnProperty.call(h3, '__proto__') &&
1123
+ !Object.prototype.hasOwnProperty.call(exports, '__proto__') &&
1124
+ Object.defineProperty(exports, '__proto__', {
1125
+ enumerable: true,
1126
+ value: h3['__proto__']
1127
+ });
1128
+
1161
1129
  Object.keys(h3).forEach(function (k) {
1162
1130
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = h3[k];
1163
1131
  });
package/dist/index.d.cts CHANGED
@@ -55,9 +55,9 @@ declare const arriErrorResponse: AObjectSchema<{
55
55
  data?: any;
56
56
  }>;
57
57
  type arriErrorResponse = a.infer<typeof arriErrorResponse>;
58
- declare function defineError(statusCode: StatusCode, input?: Partial<Omit<arriErrorResponse, "code" | "stack">>): arriError;
59
- declare function errorResponseFromValidationErrors(errors: ValidationError["errors"], prefixText?: string): H3Error;
60
- declare function handleH3Error(err: unknown, event: H3Event, onError: ArriOptions["onError"], debug: boolean): Promise<void>;
58
+ declare function defineError(statusCode: StatusCode, input?: Partial<Omit<arriErrorResponse, 'code' | 'stack'>>): arriError;
59
+ declare function errorResponseFromValidationErrors(errors: ValidationError['errors'], prefixText?: string): H3Error;
60
+ declare function handleH3Error(err: unknown, event: H3Event, onError: ArriOptions['onError'], debug: boolean): Promise<void>;
61
61
 
62
62
  interface RouteEvent<TPath extends string, TQuery extends Record<any, any> = any, TBody = any> extends H3Event {
63
63
  context: RouteEventContext<TPath, TQuery, TBody>;
@@ -74,7 +74,7 @@ interface ArriRoute<TPath extends string, TQuery extends AObjectSchema<any, any>
74
74
  postHandler?: (event: PostRouteEvent<TPath, InferType<TQuery>, InferType<TBody>, Awaited<TResponse>>) => any;
75
75
  }
76
76
  declare function defineRoute<TPath extends string, TQuery extends AObjectSchema<any, any> = any, TBody extends AObjectSchema<any, any> = any, TResponse = any>(route: ArriRoute<TPath, TQuery, TBody, TResponse>): ArriRoute<TPath, TQuery, TBody, TResponse>;
77
- type RouteOptions = Pick<ArriOptions, "onAfterResponse" | "onBeforeResponse" | "onError" | "onRequest" | "debug"> & {
77
+ type RouteOptions = Pick<ArriOptions, 'onAfterResponse' | 'onBeforeResponse' | 'onError' | 'onRequest' | 'debug'> & {
78
78
  middleware: Middleware[];
79
79
  };
80
80
  declare function registerRoute(router: Router, route: ArriRoute<any>, opts: RouteOptions): void;
@@ -91,9 +91,9 @@ declare class ArriRouter {
91
91
  getDefinitions(): DefinitionMap;
92
92
  }
93
93
 
94
- declare function defineEventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<EventStreamRpc<TParams, TResponse>, "isEventStream" | "transport">): EventStreamRpc<TParams, TResponse>;
94
+ declare function defineEventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<EventStreamRpc<TParams, TResponse>, 'isEventStream' | 'transport'>): EventStreamRpc<TParams, TResponse>;
95
95
  declare function isEventStreamRpc(input: unknown): input is EventStreamRpc<any, any>;
96
- interface EventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> extends Omit<HttpRpc<true, TParams, TResponse>, "handler" | "postHandler"> {
96
+ interface EventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> extends Omit<HttpRpc<true, TParams, TResponse>, 'handler' | 'postHandler'> {
97
97
  isEventStream: true;
98
98
  handler: EventStreamRpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined>;
99
99
  }
@@ -146,7 +146,7 @@ interface NamedWebsocketRpc<TParams extends RpcParamSchema | undefined = undefin
146
146
  name: string;
147
147
  }
148
148
  interface WebsocketRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> {
149
- transport: "ws";
149
+ transport: 'ws';
150
150
  description?: string;
151
151
  path?: string;
152
152
  isDeprecated?: boolean;
@@ -189,7 +189,7 @@ interface WebSocketRpcHandler<TParams, TResponse> {
189
189
  /**
190
190
  * @experimental
191
191
  */
192
- declare function defineWebsocketRpc<TParams extends RpcParamSchema | undefined, TResponse extends RpcParamSchema | undefined>(def: Omit<WebsocketRpc<TParams, TResponse>, "transport">): WebsocketRpc<TParams, TResponse>;
192
+ declare function defineWebsocketRpc<TParams extends RpcParamSchema | undefined, TResponse extends RpcParamSchema | undefined>(def: Omit<WebsocketRpc<TParams, TResponse>, 'transport'>): WebsocketRpc<TParams, TResponse>;
193
193
  /**
194
194
  * @experimental
195
195
  */
@@ -206,7 +206,7 @@ interface NamedHttpRpc<TIsEventStream extends boolean = false, TParams extends R
206
206
  }
207
207
  type Rpc<TIsEventStream extends boolean = false, TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> = HttpRpc<TIsEventStream, TParams, TResponse> | WebsocketRpc<TParams, TResponse>;
208
208
  interface HttpRpc<TIsEventStream extends boolean = false, TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> {
209
- transport: "http";
209
+ transport: 'http';
210
210
  method?: RpcHttpMethod;
211
211
  path?: string;
212
212
  description?: string;
@@ -218,23 +218,23 @@ interface HttpRpc<TIsEventStream extends boolean = false, TParams extends RpcPar
218
218
  handler: TIsEventStream extends true ? EventStreamRpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined> : RpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : void>;
219
219
  postHandler?: TIsEventStream extends true ? undefined : RpcPostHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined>;
220
220
  }
221
- interface RpcEvent<TParams = undefined> extends Omit<H3Event, "context"> {
221
+ interface RpcEvent<TParams = undefined> extends Omit<H3Event, 'context'> {
222
222
  context: RpcEventContext<TParams>;
223
223
  }
224
- interface RpcPostEvent<TParams = undefined, TResponse = undefined> extends Omit<H3Event, "context"> {
224
+ interface RpcPostEvent<TParams = undefined, TResponse = undefined> extends Omit<H3Event, 'context'> {
225
225
  context: RpcPostEventContext<TParams, TResponse>;
226
226
  }
227
227
  type RpcHandler<TParams, TResponse> = (context: RpcEventContext<TParams>, event: RpcEvent<TParams>) => TResponse | Promise<TResponse>;
228
228
  type RpcPostHandler<TParams, TResponse> = (context: RpcPostEventContext<TParams, TResponse>, event: RpcPostEvent<TParams, TResponse>) => any;
229
229
  declare function isRpc(input: unknown): input is HttpRpc<any, any>;
230
- declare function defineRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<HttpRpc<false, TParams, TResponse>, "transport" | "isEventStream">): HttpRpc<false, TParams, TResponse>;
230
+ declare function defineRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<HttpRpc<false, TParams, TResponse>, 'transport' | 'isEventStream'>): HttpRpc<false, TParams, TResponse>;
231
231
  declare function createHttpRpcDefinition(rpcName: string, httpPath: string, procedure: HttpRpc<any, any, any>): HttpRpcDefinition;
232
232
  declare function getRpcPath(rpcName: string, prefix?: string): string;
233
233
  declare function getRpcParamName(rpcName: string, procedure: HttpRpc<any, any, any> | WebsocketRpc<any, any>): string | undefined;
234
234
  declare function getRpcResponseName(rpcName: string, procedure: HttpRpc<any, any, any> | WebsocketRpc<any, any>): string | undefined;
235
235
  declare function registerRpc(router: Router, path: string, procedure: NamedHttpRpc<any, any, any>, opts: RouteOptions): void;
236
236
  declare function validateRpcRequestInput(event: H3Event, httpMethod: RpcHttpMethod, schema: ASchema, validator: ReturnType<typeof a.compile>): Promise<void>;
237
- declare function getSchemaValidator(rpcName: string, type: "params" | "response", schema: ASchema<any>): ReturnType<typeof a.compile> | undefined;
237
+ declare function getSchemaValidator(rpcName: string, type: 'params' | 'response', schema: ASchema<any>): ReturnType<typeof a.compile> | undefined;
238
238
 
239
239
  declare class ArriService {
240
240
  name: string;
@@ -256,7 +256,7 @@ declare class ArriApp {
256
256
  readonly h3Router: Router;
257
257
  private readonly _rpcDefinitionPath;
258
258
  private readonly _rpcRoutePrefix;
259
- appInfo: AppDefinition["info"];
259
+ appInfo: AppDefinition['info'];
260
260
  private _procedures;
261
261
  private _definitions;
262
262
  private readonly _middlewares;
@@ -280,7 +280,7 @@ interface ArriOptions {
280
280
  /**
281
281
  * Metadata to display in the __definition.json file
282
282
  */
283
- appInfo?: AppDefinition["info"];
283
+ appInfo?: AppDefinition['info'];
284
284
  rpcRoutePrefix?: string;
285
285
  /**
286
286
  * Defaults to /__definitions
@@ -294,7 +294,7 @@ interface ArriOptions {
294
294
  onBeforeResponse?: (event: RequestHookEvent) => void | Promise<void>;
295
295
  onError?: (error: arriError, event: RequestHookEvent) => void | Promise<void>;
296
296
  }
297
- interface RequestHookEvent extends Omit<H3Event, "context"> {
297
+ interface RequestHookEvent extends Omit<H3Event, 'context'> {
298
298
  context: RequestHookContext;
299
299
  }
300
300
 
package/dist/index.d.mts CHANGED
@@ -55,9 +55,9 @@ declare const arriErrorResponse: AObjectSchema<{
55
55
  data?: any;
56
56
  }>;
57
57
  type arriErrorResponse = a.infer<typeof arriErrorResponse>;
58
- declare function defineError(statusCode: StatusCode, input?: Partial<Omit<arriErrorResponse, "code" | "stack">>): arriError;
59
- declare function errorResponseFromValidationErrors(errors: ValidationError["errors"], prefixText?: string): H3Error;
60
- declare function handleH3Error(err: unknown, event: H3Event, onError: ArriOptions["onError"], debug: boolean): Promise<void>;
58
+ declare function defineError(statusCode: StatusCode, input?: Partial<Omit<arriErrorResponse, 'code' | 'stack'>>): arriError;
59
+ declare function errorResponseFromValidationErrors(errors: ValidationError['errors'], prefixText?: string): H3Error;
60
+ declare function handleH3Error(err: unknown, event: H3Event, onError: ArriOptions['onError'], debug: boolean): Promise<void>;
61
61
 
62
62
  interface RouteEvent<TPath extends string, TQuery extends Record<any, any> = any, TBody = any> extends H3Event {
63
63
  context: RouteEventContext<TPath, TQuery, TBody>;
@@ -74,7 +74,7 @@ interface ArriRoute<TPath extends string, TQuery extends AObjectSchema<any, any>
74
74
  postHandler?: (event: PostRouteEvent<TPath, InferType<TQuery>, InferType<TBody>, Awaited<TResponse>>) => any;
75
75
  }
76
76
  declare function defineRoute<TPath extends string, TQuery extends AObjectSchema<any, any> = any, TBody extends AObjectSchema<any, any> = any, TResponse = any>(route: ArriRoute<TPath, TQuery, TBody, TResponse>): ArriRoute<TPath, TQuery, TBody, TResponse>;
77
- type RouteOptions = Pick<ArriOptions, "onAfterResponse" | "onBeforeResponse" | "onError" | "onRequest" | "debug"> & {
77
+ type RouteOptions = Pick<ArriOptions, 'onAfterResponse' | 'onBeforeResponse' | 'onError' | 'onRequest' | 'debug'> & {
78
78
  middleware: Middleware[];
79
79
  };
80
80
  declare function registerRoute(router: Router, route: ArriRoute<any>, opts: RouteOptions): void;
@@ -91,9 +91,9 @@ declare class ArriRouter {
91
91
  getDefinitions(): DefinitionMap;
92
92
  }
93
93
 
94
- declare function defineEventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<EventStreamRpc<TParams, TResponse>, "isEventStream" | "transport">): EventStreamRpc<TParams, TResponse>;
94
+ declare function defineEventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<EventStreamRpc<TParams, TResponse>, 'isEventStream' | 'transport'>): EventStreamRpc<TParams, TResponse>;
95
95
  declare function isEventStreamRpc(input: unknown): input is EventStreamRpc<any, any>;
96
- interface EventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> extends Omit<HttpRpc<true, TParams, TResponse>, "handler" | "postHandler"> {
96
+ interface EventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> extends Omit<HttpRpc<true, TParams, TResponse>, 'handler' | 'postHandler'> {
97
97
  isEventStream: true;
98
98
  handler: EventStreamRpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined>;
99
99
  }
@@ -146,7 +146,7 @@ interface NamedWebsocketRpc<TParams extends RpcParamSchema | undefined = undefin
146
146
  name: string;
147
147
  }
148
148
  interface WebsocketRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> {
149
- transport: "ws";
149
+ transport: 'ws';
150
150
  description?: string;
151
151
  path?: string;
152
152
  isDeprecated?: boolean;
@@ -189,7 +189,7 @@ interface WebSocketRpcHandler<TParams, TResponse> {
189
189
  /**
190
190
  * @experimental
191
191
  */
192
- declare function defineWebsocketRpc<TParams extends RpcParamSchema | undefined, TResponse extends RpcParamSchema | undefined>(def: Omit<WebsocketRpc<TParams, TResponse>, "transport">): WebsocketRpc<TParams, TResponse>;
192
+ declare function defineWebsocketRpc<TParams extends RpcParamSchema | undefined, TResponse extends RpcParamSchema | undefined>(def: Omit<WebsocketRpc<TParams, TResponse>, 'transport'>): WebsocketRpc<TParams, TResponse>;
193
193
  /**
194
194
  * @experimental
195
195
  */
@@ -206,7 +206,7 @@ interface NamedHttpRpc<TIsEventStream extends boolean = false, TParams extends R
206
206
  }
207
207
  type Rpc<TIsEventStream extends boolean = false, TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> = HttpRpc<TIsEventStream, TParams, TResponse> | WebsocketRpc<TParams, TResponse>;
208
208
  interface HttpRpc<TIsEventStream extends boolean = false, TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> {
209
- transport: "http";
209
+ transport: 'http';
210
210
  method?: RpcHttpMethod;
211
211
  path?: string;
212
212
  description?: string;
@@ -218,23 +218,23 @@ interface HttpRpc<TIsEventStream extends boolean = false, TParams extends RpcPar
218
218
  handler: TIsEventStream extends true ? EventStreamRpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined> : RpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : void>;
219
219
  postHandler?: TIsEventStream extends true ? undefined : RpcPostHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined>;
220
220
  }
221
- interface RpcEvent<TParams = undefined> extends Omit<H3Event, "context"> {
221
+ interface RpcEvent<TParams = undefined> extends Omit<H3Event, 'context'> {
222
222
  context: RpcEventContext<TParams>;
223
223
  }
224
- interface RpcPostEvent<TParams = undefined, TResponse = undefined> extends Omit<H3Event, "context"> {
224
+ interface RpcPostEvent<TParams = undefined, TResponse = undefined> extends Omit<H3Event, 'context'> {
225
225
  context: RpcPostEventContext<TParams, TResponse>;
226
226
  }
227
227
  type RpcHandler<TParams, TResponse> = (context: RpcEventContext<TParams>, event: RpcEvent<TParams>) => TResponse | Promise<TResponse>;
228
228
  type RpcPostHandler<TParams, TResponse> = (context: RpcPostEventContext<TParams, TResponse>, event: RpcPostEvent<TParams, TResponse>) => any;
229
229
  declare function isRpc(input: unknown): input is HttpRpc<any, any>;
230
- declare function defineRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<HttpRpc<false, TParams, TResponse>, "transport" | "isEventStream">): HttpRpc<false, TParams, TResponse>;
230
+ declare function defineRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<HttpRpc<false, TParams, TResponse>, 'transport' | 'isEventStream'>): HttpRpc<false, TParams, TResponse>;
231
231
  declare function createHttpRpcDefinition(rpcName: string, httpPath: string, procedure: HttpRpc<any, any, any>): HttpRpcDefinition;
232
232
  declare function getRpcPath(rpcName: string, prefix?: string): string;
233
233
  declare function getRpcParamName(rpcName: string, procedure: HttpRpc<any, any, any> | WebsocketRpc<any, any>): string | undefined;
234
234
  declare function getRpcResponseName(rpcName: string, procedure: HttpRpc<any, any, any> | WebsocketRpc<any, any>): string | undefined;
235
235
  declare function registerRpc(router: Router, path: string, procedure: NamedHttpRpc<any, any, any>, opts: RouteOptions): void;
236
236
  declare function validateRpcRequestInput(event: H3Event, httpMethod: RpcHttpMethod, schema: ASchema, validator: ReturnType<typeof a.compile>): Promise<void>;
237
- declare function getSchemaValidator(rpcName: string, type: "params" | "response", schema: ASchema<any>): ReturnType<typeof a.compile> | undefined;
237
+ declare function getSchemaValidator(rpcName: string, type: 'params' | 'response', schema: ASchema<any>): ReturnType<typeof a.compile> | undefined;
238
238
 
239
239
  declare class ArriService {
240
240
  name: string;
@@ -256,7 +256,7 @@ declare class ArriApp {
256
256
  readonly h3Router: Router;
257
257
  private readonly _rpcDefinitionPath;
258
258
  private readonly _rpcRoutePrefix;
259
- appInfo: AppDefinition["info"];
259
+ appInfo: AppDefinition['info'];
260
260
  private _procedures;
261
261
  private _definitions;
262
262
  private readonly _middlewares;
@@ -280,7 +280,7 @@ interface ArriOptions {
280
280
  /**
281
281
  * Metadata to display in the __definition.json file
282
282
  */
283
- appInfo?: AppDefinition["info"];
283
+ appInfo?: AppDefinition['info'];
284
284
  rpcRoutePrefix?: string;
285
285
  /**
286
286
  * Defaults to /__definitions
@@ -294,7 +294,7 @@ interface ArriOptions {
294
294
  onBeforeResponse?: (event: RequestHookEvent) => void | Promise<void>;
295
295
  onError?: (error: arriError, event: RequestHookEvent) => void | Promise<void>;
296
296
  }
297
- interface RequestHookEvent extends Omit<H3Event, "context"> {
297
+ interface RequestHookEvent extends Omit<H3Event, 'context'> {
298
298
  context: RequestHookContext;
299
299
  }
300
300
 
package/dist/index.d.ts CHANGED
@@ -55,9 +55,9 @@ declare const arriErrorResponse: AObjectSchema<{
55
55
  data?: any;
56
56
  }>;
57
57
  type arriErrorResponse = a.infer<typeof arriErrorResponse>;
58
- declare function defineError(statusCode: StatusCode, input?: Partial<Omit<arriErrorResponse, "code" | "stack">>): arriError;
59
- declare function errorResponseFromValidationErrors(errors: ValidationError["errors"], prefixText?: string): H3Error;
60
- declare function handleH3Error(err: unknown, event: H3Event, onError: ArriOptions["onError"], debug: boolean): Promise<void>;
58
+ declare function defineError(statusCode: StatusCode, input?: Partial<Omit<arriErrorResponse, 'code' | 'stack'>>): arriError;
59
+ declare function errorResponseFromValidationErrors(errors: ValidationError['errors'], prefixText?: string): H3Error;
60
+ declare function handleH3Error(err: unknown, event: H3Event, onError: ArriOptions['onError'], debug: boolean): Promise<void>;
61
61
 
62
62
  interface RouteEvent<TPath extends string, TQuery extends Record<any, any> = any, TBody = any> extends H3Event {
63
63
  context: RouteEventContext<TPath, TQuery, TBody>;
@@ -74,7 +74,7 @@ interface ArriRoute<TPath extends string, TQuery extends AObjectSchema<any, any>
74
74
  postHandler?: (event: PostRouteEvent<TPath, InferType<TQuery>, InferType<TBody>, Awaited<TResponse>>) => any;
75
75
  }
76
76
  declare function defineRoute<TPath extends string, TQuery extends AObjectSchema<any, any> = any, TBody extends AObjectSchema<any, any> = any, TResponse = any>(route: ArriRoute<TPath, TQuery, TBody, TResponse>): ArriRoute<TPath, TQuery, TBody, TResponse>;
77
- type RouteOptions = Pick<ArriOptions, "onAfterResponse" | "onBeforeResponse" | "onError" | "onRequest" | "debug"> & {
77
+ type RouteOptions = Pick<ArriOptions, 'onAfterResponse' | 'onBeforeResponse' | 'onError' | 'onRequest' | 'debug'> & {
78
78
  middleware: Middleware[];
79
79
  };
80
80
  declare function registerRoute(router: Router, route: ArriRoute<any>, opts: RouteOptions): void;
@@ -91,9 +91,9 @@ declare class ArriRouter {
91
91
  getDefinitions(): DefinitionMap;
92
92
  }
93
93
 
94
- declare function defineEventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<EventStreamRpc<TParams, TResponse>, "isEventStream" | "transport">): EventStreamRpc<TParams, TResponse>;
94
+ declare function defineEventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<EventStreamRpc<TParams, TResponse>, 'isEventStream' | 'transport'>): EventStreamRpc<TParams, TResponse>;
95
95
  declare function isEventStreamRpc(input: unknown): input is EventStreamRpc<any, any>;
96
- interface EventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> extends Omit<HttpRpc<true, TParams, TResponse>, "handler" | "postHandler"> {
96
+ interface EventStreamRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> extends Omit<HttpRpc<true, TParams, TResponse>, 'handler' | 'postHandler'> {
97
97
  isEventStream: true;
98
98
  handler: EventStreamRpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined>;
99
99
  }
@@ -146,7 +146,7 @@ interface NamedWebsocketRpc<TParams extends RpcParamSchema | undefined = undefin
146
146
  name: string;
147
147
  }
148
148
  interface WebsocketRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> {
149
- transport: "ws";
149
+ transport: 'ws';
150
150
  description?: string;
151
151
  path?: string;
152
152
  isDeprecated?: boolean;
@@ -189,7 +189,7 @@ interface WebSocketRpcHandler<TParams, TResponse> {
189
189
  /**
190
190
  * @experimental
191
191
  */
192
- declare function defineWebsocketRpc<TParams extends RpcParamSchema | undefined, TResponse extends RpcParamSchema | undefined>(def: Omit<WebsocketRpc<TParams, TResponse>, "transport">): WebsocketRpc<TParams, TResponse>;
192
+ declare function defineWebsocketRpc<TParams extends RpcParamSchema | undefined, TResponse extends RpcParamSchema | undefined>(def: Omit<WebsocketRpc<TParams, TResponse>, 'transport'>): WebsocketRpc<TParams, TResponse>;
193
193
  /**
194
194
  * @experimental
195
195
  */
@@ -206,7 +206,7 @@ interface NamedHttpRpc<TIsEventStream extends boolean = false, TParams extends R
206
206
  }
207
207
  type Rpc<TIsEventStream extends boolean = false, TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> = HttpRpc<TIsEventStream, TParams, TResponse> | WebsocketRpc<TParams, TResponse>;
208
208
  interface HttpRpc<TIsEventStream extends boolean = false, TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined = undefined> {
209
- transport: "http";
209
+ transport: 'http';
210
210
  method?: RpcHttpMethod;
211
211
  path?: string;
212
212
  description?: string;
@@ -218,23 +218,23 @@ interface HttpRpc<TIsEventStream extends boolean = false, TParams extends RpcPar
218
218
  handler: TIsEventStream extends true ? EventStreamRpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined> : RpcHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : void>;
219
219
  postHandler?: TIsEventStream extends true ? undefined : RpcPostHandler<TParams extends RpcParamSchema ? InferType<TParams> : undefined, TResponse extends RpcParamSchema ? InferType<TResponse> : undefined>;
220
220
  }
221
- interface RpcEvent<TParams = undefined> extends Omit<H3Event, "context"> {
221
+ interface RpcEvent<TParams = undefined> extends Omit<H3Event, 'context'> {
222
222
  context: RpcEventContext<TParams>;
223
223
  }
224
- interface RpcPostEvent<TParams = undefined, TResponse = undefined> extends Omit<H3Event, "context"> {
224
+ interface RpcPostEvent<TParams = undefined, TResponse = undefined> extends Omit<H3Event, 'context'> {
225
225
  context: RpcPostEventContext<TParams, TResponse>;
226
226
  }
227
227
  type RpcHandler<TParams, TResponse> = (context: RpcEventContext<TParams>, event: RpcEvent<TParams>) => TResponse | Promise<TResponse>;
228
228
  type RpcPostHandler<TParams, TResponse> = (context: RpcPostEventContext<TParams, TResponse>, event: RpcPostEvent<TParams, TResponse>) => any;
229
229
  declare function isRpc(input: unknown): input is HttpRpc<any, any>;
230
- declare function defineRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<HttpRpc<false, TParams, TResponse>, "transport" | "isEventStream">): HttpRpc<false, TParams, TResponse>;
230
+ declare function defineRpc<TParams extends RpcParamSchema | undefined = undefined, TResponse extends RpcParamSchema | undefined | never = undefined>(config: Omit<HttpRpc<false, TParams, TResponse>, 'transport' | 'isEventStream'>): HttpRpc<false, TParams, TResponse>;
231
231
  declare function createHttpRpcDefinition(rpcName: string, httpPath: string, procedure: HttpRpc<any, any, any>): HttpRpcDefinition;
232
232
  declare function getRpcPath(rpcName: string, prefix?: string): string;
233
233
  declare function getRpcParamName(rpcName: string, procedure: HttpRpc<any, any, any> | WebsocketRpc<any, any>): string | undefined;
234
234
  declare function getRpcResponseName(rpcName: string, procedure: HttpRpc<any, any, any> | WebsocketRpc<any, any>): string | undefined;
235
235
  declare function registerRpc(router: Router, path: string, procedure: NamedHttpRpc<any, any, any>, opts: RouteOptions): void;
236
236
  declare function validateRpcRequestInput(event: H3Event, httpMethod: RpcHttpMethod, schema: ASchema, validator: ReturnType<typeof a.compile>): Promise<void>;
237
- declare function getSchemaValidator(rpcName: string, type: "params" | "response", schema: ASchema<any>): ReturnType<typeof a.compile> | undefined;
237
+ declare function getSchemaValidator(rpcName: string, type: 'params' | 'response', schema: ASchema<any>): ReturnType<typeof a.compile> | undefined;
238
238
 
239
239
  declare class ArriService {
240
240
  name: string;
@@ -256,7 +256,7 @@ declare class ArriApp {
256
256
  readonly h3Router: Router;
257
257
  private readonly _rpcDefinitionPath;
258
258
  private readonly _rpcRoutePrefix;
259
- appInfo: AppDefinition["info"];
259
+ appInfo: AppDefinition['info'];
260
260
  private _procedures;
261
261
  private _definitions;
262
262
  private readonly _middlewares;
@@ -280,7 +280,7 @@ interface ArriOptions {
280
280
  /**
281
281
  * Metadata to display in the __definition.json file
282
282
  */
283
- appInfo?: AppDefinition["info"];
283
+ appInfo?: AppDefinition['info'];
284
284
  rpcRoutePrefix?: string;
285
285
  /**
286
286
  * Defaults to /__definitions
@@ -294,7 +294,7 @@ interface ArriOptions {
294
294
  onBeforeResponse?: (event: RequestHookEvent) => void | Promise<void>;
295
295
  onError?: (error: arriError, event: RequestHookEvent) => void | Promise<void>;
296
296
  }
297
- interface RequestHookEvent extends Omit<H3Event, "context"> {
297
+ interface RequestHookEvent extends Omit<H3Event, 'context'> {
298
298
  context: RequestHookContext;
299
299
  }
300
300
 
package/dist/index.mjs CHANGED
@@ -4,17 +4,11 @@ export * from 'h3';
4
4
  import { a, isAObjectSchema, isADiscriminatorSchema, isAdaptedSchema, validatorFromAdaptedSchema } from '@arrirpc/schema';
5
5
  import { kebabCase, pascalCase } from 'scule';
6
6
 
7
- var __defProp$5 = Object.defineProperty;
8
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __publicField$5 = (obj, key, value) => {
10
- __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
11
- return value;
12
- };
13
7
  class arriError extends Error {
8
+ code;
9
+ data;
14
10
  constructor(err) {
15
11
  super(err.message);
16
- __publicField$5(this, "code");
17
- __publicField$5(this, "data");
18
12
  this.code = err.code;
19
13
  this.data = err.data;
20
14
  if (err.stack) {
@@ -278,7 +272,7 @@ function createHttpRpcDefinition(rpcName, httpPath, procedure) {
278
272
  params: getRpcParamName(rpcName, procedure),
279
273
  response: getRpcResponseDefinition(rpcName, procedure),
280
274
  isDeprecated: procedure.isDeprecated,
281
- isEventStream: procedure.isEventStream === true ? true : void 0
275
+ isEventStream: procedure.isEventStream === true ? true : undefined
282
276
  };
283
277
  }
284
278
  function getRpcPath(rpcName, prefix = "") {
@@ -293,7 +287,7 @@ function getRpcPath(rpcName, prefix = "") {
293
287
  }
294
288
  function getRpcParamName(rpcName, procedure) {
295
289
  if (!isRpcParamSchema(procedure.params)) {
296
- return void 0;
290
+ return undefined;
297
291
  }
298
292
  const nameParts = rpcName.split(".").map(
299
293
  (part) => removeDisallowedChars(part, `!@#$%^&*()+=[]{}|\\;:'"<>,./?`)
@@ -303,7 +297,7 @@ function getRpcParamName(rpcName, procedure) {
303
297
  }
304
298
  function getRpcResponseName(rpcName, procedure) {
305
299
  if (!isRpcParamSchema(procedure.response)) {
306
- return void 0;
300
+ return undefined;
307
301
  }
308
302
  const nameParts = rpcName.split(".").map(
309
303
  (part) => removeDisallowedChars(part, `!@#$%^&*()+=[]{}|\\;:'"<>,./?`)
@@ -313,17 +307,17 @@ function getRpcResponseName(rpcName, procedure) {
313
307
  }
314
308
  function getRpcResponseDefinition(rpcName, procedure) {
315
309
  if (!isRpcParamSchema(procedure.response)) {
316
- return void 0;
310
+ return undefined;
317
311
  }
318
312
  const name = getRpcResponseName(rpcName, procedure);
319
313
  if (!name) {
320
- return void 0;
314
+ return undefined;
321
315
  }
322
316
  return name;
323
317
  }
324
318
  function registerRpc(router, path, procedure, opts) {
325
- const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : void 0;
326
- const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : void 0;
319
+ const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : undefined;
320
+ const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : undefined;
327
321
  const httpMethod = procedure.method ?? "post";
328
322
  const handler = eventHandler(async (event) => {
329
323
  event.context.rpcName = procedure.name;
@@ -474,16 +468,10 @@ function getSchemaValidator(rpcName, type, schema) {
474
468
  return a.compile(schema);
475
469
  } catch (_) {
476
470
  console.error(`Error compiling ${type} validator for ${rpcName}`);
477
- return void 0;
471
+ return undefined;
478
472
  }
479
473
  }
480
474
 
481
- var __defProp$4 = Object.defineProperty;
482
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
483
- var __publicField$4 = (obj, key, value) => {
484
- __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
485
- return value;
486
- };
487
475
  function defineEventStreamRpc(config) {
488
476
  return {
489
477
  ...config,
@@ -496,15 +484,15 @@ function isEventStreamRpc(input) {
496
484
  return isRpc(input) && "isEventStream" in input && input.isEventStream === true;
497
485
  }
498
486
  class EventStreamConnection {
487
+ lastEventId;
488
+ validationErrors;
489
+ validator;
490
+ serializer;
491
+ // for some reason Rollup cannot output DTS when this is set to NodeJS.Timeout
492
+ pingInterval = undefined;
493
+ pingIntervalMs;
494
+ eventStream;
499
495
  constructor(event, opts) {
500
- __publicField$4(this, "lastEventId");
501
- __publicField$4(this, "validationErrors");
502
- __publicField$4(this, "validator");
503
- __publicField$4(this, "serializer");
504
- // for some reason Rollup cannot output DTS when this is set to NodeJS.Timeout
505
- __publicField$4(this, "pingInterval");
506
- __publicField$4(this, "pingIntervalMs");
507
- __publicField$4(this, "eventStream");
508
496
  this.eventStream = createEventStream(event);
509
497
  this.lastEventId = getHeader(event, "Last-Event-Id");
510
498
  this.pingIntervalMs = opts.pingInterval ?? 6e4;
@@ -584,8 +572,8 @@ class EventStreamConnection {
584
572
  }
585
573
  }
586
574
  function registerEventStreamRpc(router, path, procedure, opts) {
587
- const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : void 0;
588
- const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : void 0;
575
+ const paramValidator = procedure.params ? getSchemaValidator(procedure.name, "params", procedure.params) : undefined;
576
+ const responseValidator = procedure.response ? getSchemaValidator(procedure.name, "response", procedure.response) : undefined;
589
577
  const httpMethod = procedure.method ?? "get";
590
578
  const handler = eventHandler(async (event) => {
591
579
  event.context.rpcName = procedure.name;
@@ -614,12 +602,9 @@ function registerEventStreamRpc(router, path, procedure, opts) {
614
602
  validator: responseValidator?.validate ?? function() {
615
603
  return true;
616
604
  },
617
- serializer: (
618
- // eslint-disable-next-line @typescript-eslint/unbound-method
619
- responseValidator?.serialize ?? function(_) {
620
- return "";
621
- }
622
- ),
605
+ serializer: responseValidator?.serialize ?? function(_) {
606
+ return "";
607
+ },
623
608
  validationErrors(input) {
624
609
  if (procedure.response) {
625
610
  return a.errors(procedure.response, input);
@@ -781,17 +766,11 @@ function handleRoute(router, method, route, opts) {
781
766
  }
782
767
  }
783
768
 
784
- var __defProp$3 = Object.defineProperty;
785
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
786
- var __publicField$3 = (obj, key, value) => {
787
- __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
788
- return value;
789
- };
790
769
  class ArriRouter {
770
+ routes = [];
771
+ definitions = {};
772
+ prefix;
791
773
  constructor(routePrefix = "") {
792
- __publicField$3(this, "routes", []);
793
- __publicField$3(this, "definitions", {});
794
- __publicField$3(this, "prefix");
795
774
  this.prefix = routePrefix;
796
775
  }
797
776
  route(route) {
@@ -811,19 +790,13 @@ class ArriRouter {
811
790
  }
812
791
  }
813
792
 
814
- var __defProp$2 = Object.defineProperty;
815
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
816
- var __publicField$2 = (obj, key, value) => {
817
- __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
818
- return value;
819
- };
820
793
  class ArriService {
794
+ name;
821
795
  constructor(name) {
822
- __publicField$2(this, "name");
823
- __publicField$2(this, "procedures", []);
824
- __publicField$2(this, "definitions", {});
825
796
  this.name = name;
826
797
  }
798
+ procedures = [];
799
+ definitions = {};
827
800
  rpc(name, procedure) {
828
801
  procedure.name = `${this.name}.${name}`;
829
802
  this.procedures.push(procedure);
@@ -848,18 +821,12 @@ function defineService(name, procedures) {
848
821
  return service;
849
822
  }
850
823
 
851
- var __defProp$1 = Object.defineProperty;
852
- var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
853
- var __publicField$1 = (obj, key, value) => {
854
- __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
855
- return value;
856
- };
857
824
  class WsPeer {
825
+ _peer;
826
+ _validator;
827
+ context;
828
+ url;
858
829
  constructor(peer, opts) {
859
- __publicField$1(this, "_peer");
860
- __publicField$1(this, "_validator");
861
- __publicField$1(this, "context");
862
- __publicField$1(this, "url");
863
830
  this._peer = peer;
864
831
  this._validator = opts.validator;
865
832
  this.url = peer.websocket.url ?? "";
@@ -936,30 +903,24 @@ function createWsRpcDefinition(rpcName, path, rpc) {
936
903
  };
937
904
  }
938
905
 
939
- var __defProp = Object.defineProperty;
940
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
941
- var __publicField = (obj, key, value) => {
942
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
943
- return value;
944
- };
945
906
  const createAppDefinition = (def) => def;
946
907
  class ArriApp {
908
+ __isArri__ = true;
909
+ h3App;
910
+ h3Router = createRouter();
911
+ _rpcDefinitionPath;
912
+ _rpcRoutePrefix;
913
+ appInfo;
914
+ _procedures = {};
915
+ _definitions = {};
916
+ _middlewares = [];
917
+ _onRequest;
918
+ _onAfterResponse;
919
+ _onBeforeResponse;
920
+ _onError;
921
+ _debug;
922
+ definitionPath;
947
923
  constructor(opts = {}) {
948
- __publicField(this, "__isArri__", true);
949
- __publicField(this, "h3App");
950
- __publicField(this, "h3Router", createRouter());
951
- __publicField(this, "_rpcDefinitionPath");
952
- __publicField(this, "_rpcRoutePrefix");
953
- __publicField(this, "appInfo");
954
- __publicField(this, "_procedures", {});
955
- __publicField(this, "_definitions", {});
956
- __publicField(this, "_middlewares", []);
957
- __publicField(this, "_onRequest");
958
- __publicField(this, "_onAfterResponse");
959
- __publicField(this, "_onBeforeResponse");
960
- __publicField(this, "_onError");
961
- __publicField(this, "_debug");
962
- __publicField(this, "definitionPath");
963
924
  this.appInfo = opts?.appInfo;
964
925
  this.h3App = createApp({
965
926
  debug: opts?.debug
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arrirpc/server",
3
- "version": "0.69.2",
3
+ "version": "0.71.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -24,18 +24,15 @@
24
24
  "dependencies": {
25
25
  "@types/source-map-support": "^0.5.10",
26
26
  "crossws": "^0.3.1",
27
- "h3": "^1.13.0",
27
+ "h3": "^1.13.1",
28
28
  "scule": "^1.3.0",
29
29
  "source-map-support": "^0.5.21",
30
30
  "uncrypto": "^0.1.3",
31
- "@arrirpc/codegen-dart": "0.69.2",
32
- "@arrirpc/codegen-kotlin": "0.69.2",
33
- "@arrirpc/codegen-ts": "0.69.2",
34
- "@arrirpc/codegen-utils": "0.69.2",
35
- "arri": "0.69.2",
36
- "@arrirpc/schema": "0.69.2"
31
+ "@arrirpc/codegen-utils": "0.71.0",
32
+ "@arrirpc/schema": "0.71.0",
33
+ "arri": "0.71.0"
37
34
  },
38
35
  "devDependencies": {
39
- "bun-types": "^1.1.37"
36
+ "bun-types": "^1.1.43"
40
37
  }
41
38
  }