@rest-vir/define-service 0.0.2

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 (50) hide show
  1. package/LICENSE-CC0 +121 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +88 -0
  4. package/dist/augments/json.d.ts +8 -0
  5. package/dist/augments/json.js +13 -0
  6. package/dist/dev-port/find-dev-port.d.ts +132 -0
  7. package/dist/dev-port/find-dev-port.js +156 -0
  8. package/dist/endpoint/endpoint-path.d.ts +27 -0
  9. package/dist/endpoint/endpoint-path.js +14 -0
  10. package/dist/endpoint/endpoint.d.ts +198 -0
  11. package/dist/endpoint/endpoint.js +80 -0
  12. package/dist/frontend-connect/connect-web-socket.d.ts +95 -0
  13. package/dist/frontend-connect/connect-web-socket.js +64 -0
  14. package/dist/frontend-connect/fetch-endpoint.d.ts +199 -0
  15. package/dist/frontend-connect/fetch-endpoint.js +135 -0
  16. package/dist/frontend-connect/generate-api.d.ts +102 -0
  17. package/dist/frontend-connect/generate-api.js +83 -0
  18. package/dist/frontend-connect/mock-client-web-socket.d.ts +187 -0
  19. package/dist/frontend-connect/mock-client-web-socket.js +198 -0
  20. package/dist/frontend-connect/web-socket-protocol-parse.d.ts +10 -0
  21. package/dist/frontend-connect/web-socket-protocol-parse.js +111 -0
  22. package/dist/index.d.ts +23 -0
  23. package/dist/index.js +23 -0
  24. package/dist/service/define-service.d.ts +19 -0
  25. package/dist/service/define-service.js +133 -0
  26. package/dist/service/match-url.d.ts +30 -0
  27. package/dist/service/match-url.js +31 -0
  28. package/dist/service/minimal-service.d.ts +44 -0
  29. package/dist/service/minimal-service.js +1 -0
  30. package/dist/service/service-definition.d.ts +80 -0
  31. package/dist/service/service-definition.error.d.ts +35 -0
  32. package/dist/service/service-definition.error.js +34 -0
  33. package/dist/service/service-definition.js +1 -0
  34. package/dist/util/mock-fetch.d.ts +107 -0
  35. package/dist/util/mock-fetch.js +199 -0
  36. package/dist/util/no-param.d.ts +16 -0
  37. package/dist/util/no-param.js +8 -0
  38. package/dist/util/origin.d.ts +43 -0
  39. package/dist/util/origin.js +19 -0
  40. package/dist/util/path-to-regexp.d.ts +54 -0
  41. package/dist/util/path-to-regexp.js +307 -0
  42. package/dist/util/search-params.d.ts +9 -0
  43. package/dist/util/search-params.js +1 -0
  44. package/dist/web-socket/common-web-socket.d.ts +103 -0
  45. package/dist/web-socket/common-web-socket.js +28 -0
  46. package/dist/web-socket/overwrite-web-socket-methods.d.ts +276 -0
  47. package/dist/web-socket/overwrite-web-socket-methods.js +210 -0
  48. package/dist/web-socket/web-socket-definition.d.ts +170 -0
  49. package/dist/web-socket/web-socket-definition.js +78 -0
  50. package/package.json +68 -0
@@ -0,0 +1,78 @@
1
+ import { defineShape, indexedKeys, optional, or, unknownShape, } from 'object-shape-tester';
2
+ import { assertValidEndpointPath } from '../endpoint/endpoint-path.js';
3
+ import { ensureServiceDefinitionError } from '../service/service-definition.error.js';
4
+ import { originRequirementShape } from '../util/origin.js';
5
+ /**
6
+ * Shape definition for {@link WebSocketInit}.
7
+ *
8
+ * @category Internal
9
+ * @category Package : @rest-vir/define-service
10
+ * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
11
+ */
12
+ export const webSocketInitShape = defineShape({
13
+ messageFromClientShape: unknownShape(),
14
+ messageFromHostShape: unknownShape(),
15
+ searchParamsShape: unknownShape(),
16
+ /**
17
+ * Set a required client origin for this WebSocket.
18
+ *
19
+ * - If this is omitted, the service's origin requirement is used instead.
20
+ * - If this is explicitly set to `undefined`, this endpoint allows any origins (regardless of the
21
+ * service's origin requirement).
22
+ * - Any other set value overrides the service's origin requirement (if it has any).
23
+ */
24
+ requiredClientOrigin: originRequirementShape,
25
+ customProps: optional(or(undefined, indexedKeys({
26
+ keys: unknownShape(),
27
+ values: unknownShape(),
28
+ required: false,
29
+ }))),
30
+ protocolsShape: unknownShape(),
31
+ });
32
+ /**
33
+ * Attaches message type-only getters to a WebSocket definition.
34
+ *
35
+ * @category Internal
36
+ * @category Package : @rest-vir/define-service
37
+ * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
38
+ */
39
+ export function attachWebSocketShapeTypeGetters(webSocketDefinition) {
40
+ Object.defineProperties(webSocketDefinition, {
41
+ MessageFromClientType: {
42
+ enumerable: false,
43
+ get() {
44
+ throw new Error('.MessageFromClientType should not be used as a value.');
45
+ },
46
+ },
47
+ MessageFromHostType: {
48
+ enumerable: false,
49
+ get() {
50
+ throw new Error('.MessageFromHostType should not be used as a value.');
51
+ },
52
+ },
53
+ ProtocolsType: {
54
+ enumerable: false,
55
+ get() {
56
+ throw new Error('.ProtocolsType should not be used as a value.');
57
+ },
58
+ },
59
+ });
60
+ }
61
+ /**
62
+ * Asserts the the WebSocket definition is valid.
63
+ *
64
+ * @category Internal
65
+ * @category Package : @rest-vir/define-service
66
+ * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
67
+ */
68
+ export function assertValidWebSocketDefinition(webSocketDefinition) {
69
+ try {
70
+ assertValidEndpointPath(webSocketDefinition.path);
71
+ }
72
+ catch (error) {
73
+ throw ensureServiceDefinitionError(error, {
74
+ serviceName: webSocketDefinition.service.serviceName,
75
+ ...webSocketDefinition,
76
+ });
77
+ }
78
+ }
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@rest-vir/define-service",
3
+ "version": "0.0.2",
4
+ "description": "Define an connect to a declarative and type safe REST and WebSocket service.",
5
+ "keywords": [
6
+ "rest",
7
+ "api",
8
+ "express",
9
+ "service",
10
+ "backend",
11
+ "server",
12
+ "websocket",
13
+ "vir"
14
+ ],
15
+ "homepage": "https://github.com/electrovir/rest-vir",
16
+ "bugs": {
17
+ "url": "https://github.com/electrovir/rest-vir/issues"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/electrovir/rest-vir.git"
22
+ },
23
+ "license": "(MIT or CC0 1.0)",
24
+ "author": {
25
+ "name": "electrovir",
26
+ "url": "https://github.com/electrovir"
27
+ },
28
+ "type": "module",
29
+ "main": "dist/index.js",
30
+ "module": "dist/index.js",
31
+ "types": "dist/index.d.ts",
32
+ "scripts": {
33
+ "build": "virmator frontend build",
34
+ "compile": "virmator compile",
35
+ "docs": "md-code README.md",
36
+ "start": "virmator frontend",
37
+ "test": "virmator test web",
38
+ "test:coverage": "npm run test coverage",
39
+ "test:docs": "npm run docs check",
40
+ "test:update": "npm test update"
41
+ },
42
+ "dependencies": {
43
+ "@augment-vir/assert": "^31.9.1",
44
+ "@augment-vir/common": "^31.9.1",
45
+ "date-vir": "^7.2.0",
46
+ "object-shape-tester": "^5.1.1",
47
+ "type-fest": "^4.35.0",
48
+ "url-vir": "^2.1.1"
49
+ },
50
+ "devDependencies": {
51
+ "@augment-vir/test": "^31.9.1",
52
+ "@web/dev-server-esbuild": "^1.0.4",
53
+ "@web/test-runner": "^0.20.0",
54
+ "@web/test-runner-commands": "^0.9.0",
55
+ "@web/test-runner-playwright": "^0.11.0",
56
+ "@web/test-runner-visual-regression": "^0.10.0",
57
+ "istanbul-smart-text-reporter": "^1.1.5",
58
+ "markdown-code-example-inserter": "^3.0.3",
59
+ "typedoc": "^0.27.7",
60
+ "ws": "^8.18.0"
61
+ },
62
+ "engines": {
63
+ "node": ">=22"
64
+ },
65
+ "publishConfig": {
66
+ "access": "public"
67
+ }
68
+ }