@ez4/gateway 0.22.0 → 0.24.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/dist/errors/preferences.d.ts +8 -0
- package/dist/library.cjs +221 -207
- package/dist/library.d.ts +1 -0
- package/dist/library.mjs +195 -182
- package/dist/main.cjs +16 -16
- package/dist/main.mjs +13 -13
- package/dist/metadata/preferences.d.ts +3 -0
- package/dist/metadata/utils.d.ts +1 -0
- package/dist/services/common.d.ts +23 -1
- package/dist/services/contract.d.ts +13 -8
- package/dist/services/types.d.ts +9 -0
- package/dist/types/common.d.ts +12 -5
- package/dist/utils/body.d.ts +2 -2
- package/dist/utils/query.d.ts +1 -1
- package/dist/utils.cjs +21 -19
- package/dist/utils.mjs +24 -18
- package/package.json +9 -6
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import type { Service } from '@ez4/common';
|
|
2
|
+
import type { NamingStyle } from '@ez4/schema';
|
|
2
3
|
import type { Http } from './contract.js';
|
|
4
|
+
/**
|
|
5
|
+
* Contract for HTTP preferences.
|
|
6
|
+
*/
|
|
7
|
+
export interface HttpPreferences {
|
|
8
|
+
/**
|
|
9
|
+
* Determines the naming style for the query strings and body payloads.
|
|
10
|
+
*/
|
|
11
|
+
namingStyle?: NamingStyle;
|
|
12
|
+
}
|
|
3
13
|
/**
|
|
4
14
|
* HTTP CORS configuration.
|
|
5
15
|
*/
|
|
@@ -71,6 +81,10 @@ export type HttpRawBody = string;
|
|
|
71
81
|
* Authorizer request.
|
|
72
82
|
*/
|
|
73
83
|
export interface HttpAuthRequest {
|
|
84
|
+
/**
|
|
85
|
+
* Auth request preferences.
|
|
86
|
+
*/
|
|
87
|
+
preferences?: HttpPreferences;
|
|
74
88
|
/**
|
|
75
89
|
* Expected HTTP headers.
|
|
76
90
|
*/
|
|
@@ -97,6 +111,10 @@ export interface HttpAuthResponse {
|
|
|
97
111
|
* HTTP request.
|
|
98
112
|
*/
|
|
99
113
|
export interface HttpRequest {
|
|
114
|
+
/**
|
|
115
|
+
* Request preferences.
|
|
116
|
+
*/
|
|
117
|
+
preferences?: HttpPreferences;
|
|
100
118
|
/**
|
|
101
119
|
* Expected identity.
|
|
102
120
|
*/
|
|
@@ -122,6 +140,10 @@ export interface HttpRequest {
|
|
|
122
140
|
* HTTP response.
|
|
123
141
|
*/
|
|
124
142
|
export interface HttpResponse {
|
|
143
|
+
/**
|
|
144
|
+
* Response preferences.
|
|
145
|
+
*/
|
|
146
|
+
preferences?: HttpPreferences;
|
|
125
147
|
/**
|
|
126
148
|
* HTTP status code.
|
|
127
149
|
*/
|
|
@@ -169,7 +191,7 @@ export type HttpIncoming<T extends HttpRequest | HttpAuthRequest> = T & {
|
|
|
169
191
|
/**
|
|
170
192
|
* Request listener.
|
|
171
193
|
*/
|
|
172
|
-
export type HttpListener<T extends HttpRequest | HttpAuthRequest> = (event: Service.
|
|
194
|
+
export type HttpListener<T extends HttpRequest | HttpAuthRequest> = (event: Service.AnyEvent<HttpIncoming<T>>, context: Service.Context<Http.Service | HttpProvider>) => Promise<void> | void;
|
|
173
195
|
/**
|
|
174
196
|
* Request authorizer.
|
|
175
197
|
*/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { Service } from '@ez4/common';
|
|
1
|
+
import type { Service as CommonService } from '@ez4/common';
|
|
2
2
|
import type { LinkedVariables } from '@ez4/project/library';
|
|
3
3
|
import type { HttpPath } from '../types/common.js';
|
|
4
4
|
import type { HttpSuccessStatuses, HttpEmptySuccessResponse, HttpSuccessResponse } from './utils.js';
|
|
5
|
-
import type { HttpHeaders, HttpIdentity, HttpPathParameters, HttpQueryStrings, HttpJsonBody, HttpRawBody, HttpAuthRequest, HttpAuthResponse, HttpRequest, HttpResponse, HttpErrors, HttpProvider, HttpIncoming, HttpListener, HttpAuthorizer, HttpHandler, HttpCache, HttpCors } from './common.js';
|
|
5
|
+
import type { HttpHeaders, HttpIdentity, HttpPathParameters, HttpQueryStrings, HttpJsonBody, HttpRawBody, HttpPreferences, HttpAuthRequest, HttpAuthResponse, HttpRequest, HttpResponse, HttpErrors, HttpProvider, HttpIncoming, HttpListener, HttpAuthorizer, HttpHandler, HttpCache, HttpCors } from './common.js';
|
|
6
6
|
/**
|
|
7
7
|
* Provide all contracts for a self-managed HTTP service.
|
|
8
8
|
*/
|
|
@@ -13,6 +13,7 @@ export declare namespace Http {
|
|
|
13
13
|
type QueryStrings = HttpQueryStrings;
|
|
14
14
|
type JsonBody = HttpJsonBody;
|
|
15
15
|
type RawBody = HttpRawBody;
|
|
16
|
+
type Preferences = HttpPreferences;
|
|
16
17
|
type AuthRequest = HttpAuthRequest;
|
|
17
18
|
type Request = HttpRequest;
|
|
18
19
|
type AuthResponse = HttpAuthResponse;
|
|
@@ -25,7 +26,7 @@ export declare namespace Http {
|
|
|
25
26
|
type Listener<T extends Request | AuthRequest> = HttpListener<T>;
|
|
26
27
|
type Authorizer<T extends AuthRequest> = HttpAuthorizer<T>;
|
|
27
28
|
type Handler<T extends Request> = HttpHandler<T>;
|
|
28
|
-
type ServiceEvent<T extends Request | AuthRequest = Request> =
|
|
29
|
+
type ServiceEvent<T extends Request | AuthRequest = Request> = CommonService.AnyEvent<Incoming<T>>;
|
|
29
30
|
type EmptySuccessResponse<S extends HttpSuccessStatuses = 204> = HttpEmptySuccessResponse<S>;
|
|
30
31
|
type SuccessResponse<S extends HttpSuccessStatuses, T extends HttpRawBody | HttpJsonBody> = HttpSuccessResponse<S, T>;
|
|
31
32
|
/**
|
|
@@ -48,14 +49,14 @@ export declare namespace Http {
|
|
|
48
49
|
* Route handler.
|
|
49
50
|
*/
|
|
50
51
|
handler: Handler<T>;
|
|
51
|
-
/**
|
|
52
|
-
* Default log retention (in days) for the handlers.
|
|
53
|
-
*/
|
|
54
|
-
logRetention?: number;
|
|
55
52
|
/**
|
|
56
53
|
* Map status codes and errors for all known exceptions.
|
|
57
54
|
*/
|
|
58
55
|
httpErrors?: Errors;
|
|
56
|
+
/**
|
|
57
|
+
* Default log retention (in days) for the handlers.
|
|
58
|
+
*/
|
|
59
|
+
logRetention?: number;
|
|
59
60
|
/**
|
|
60
61
|
* Variables associated to the route.
|
|
61
62
|
*/
|
|
@@ -85,6 +86,10 @@ export declare namespace Http {
|
|
|
85
86
|
* Status codes for all known exceptions.
|
|
86
87
|
*/
|
|
87
88
|
httpErrors?: Errors;
|
|
89
|
+
/**
|
|
90
|
+
* Default preferences for all handlers and routes.
|
|
91
|
+
*/
|
|
92
|
+
preferences?: Preferences;
|
|
88
93
|
/**
|
|
89
94
|
* Default log retention (in days) for the handlers.
|
|
90
95
|
*/
|
|
@@ -101,7 +106,7 @@ export declare namespace Http {
|
|
|
101
106
|
/**
|
|
102
107
|
* HTTP service.
|
|
103
108
|
*/
|
|
104
|
-
abstract class Service implements
|
|
109
|
+
abstract class Service implements CommonService.Provider {
|
|
105
110
|
/**
|
|
106
111
|
* All expected routes.
|
|
107
112
|
*/
|
package/dist/types/common.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import type { ArraySchema, ObjectSchema, ScalarSchema, UnionSchema } from '@ez4/schema';
|
|
1
|
+
import type { ArraySchema, NamingStyle, ObjectSchema, ScalarSchema, UnionSchema } from '@ez4/schema';
|
|
2
2
|
import type { LinkedVariables } from '@ez4/project/library';
|
|
3
3
|
import type { ServiceListener } from '@ez4/common/library';
|
|
4
4
|
export type HttpVerb = 'ANY' | 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';
|
|
5
5
|
export type HttpPath = `${HttpVerb} /${string}`;
|
|
6
|
+
export type HttpPreferences = {
|
|
7
|
+
namingStyle?: NamingStyle;
|
|
8
|
+
};
|
|
6
9
|
export type HttpAuthRequest = {
|
|
7
10
|
headers?: ObjectSchema | null;
|
|
8
11
|
parameters?: ObjectSchema | null;
|
|
@@ -12,8 +15,8 @@ export type HttpAuthResponse = {
|
|
|
12
15
|
identity?: ObjectSchema | UnionSchema | null;
|
|
13
16
|
};
|
|
14
17
|
export type HttpRequest = {
|
|
15
|
-
headers?: ObjectSchema | null;
|
|
16
18
|
identity?: ObjectSchema | UnionSchema | null;
|
|
19
|
+
headers?: ObjectSchema | null;
|
|
17
20
|
parameters?: ObjectSchema | null;
|
|
18
21
|
query?: ObjectSchema | null;
|
|
19
22
|
body?: ObjectSchema | UnionSchema | ArraySchema | ScalarSchema | null;
|
|
@@ -29,9 +32,11 @@ export type HttpHandler = {
|
|
|
29
32
|
response: HttpResponse;
|
|
30
33
|
request?: HttpRequest;
|
|
31
34
|
file: string;
|
|
35
|
+
module?: string;
|
|
32
36
|
};
|
|
33
37
|
export type HttpAuthorizer = {
|
|
34
38
|
name: string;
|
|
39
|
+
module?: string;
|
|
35
40
|
file: string;
|
|
36
41
|
description?: string;
|
|
37
42
|
response?: HttpAuthResponse;
|
|
@@ -46,16 +51,18 @@ export type HttpRoute = {
|
|
|
46
51
|
listener?: ServiceListener | null;
|
|
47
52
|
authorizer?: HttpAuthorizer | null;
|
|
48
53
|
variables?: LinkedVariables | null;
|
|
49
|
-
logRetention?: number | null;
|
|
50
54
|
httpErrors?: HttpErrors | null;
|
|
55
|
+
preferences?: HttpPreferences;
|
|
56
|
+
logRetention?: number | null;
|
|
51
57
|
timeout?: number | null;
|
|
52
58
|
memory?: number | null;
|
|
53
59
|
cors?: boolean | null;
|
|
54
60
|
};
|
|
55
61
|
export type HttpDefaults = {
|
|
56
|
-
logRetention?: number | null;
|
|
57
|
-
httpErrors?: HttpErrors | null;
|
|
58
62
|
listener?: ServiceListener | null;
|
|
63
|
+
httpErrors?: HttpErrors | null;
|
|
64
|
+
preferences?: HttpPreferences;
|
|
65
|
+
logRetention?: number | null;
|
|
59
66
|
timeout?: number | null;
|
|
60
67
|
memory?: number | null;
|
|
61
68
|
};
|
package/dist/utils/body.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AnySchema } from '@ez4/schema';
|
|
2
2
|
import type { Http } from '../services/contract.js';
|
|
3
|
-
export declare const getRequestBody: <T extends Http.JsonBody | Http.RawBody>(input: T, schema: AnySchema) => Promise<T>;
|
|
4
|
-
export declare const getResponseBody: (body: unknown, schema: AnySchema) => unknown;
|
|
3
|
+
export declare const getRequestBody: <T extends Http.JsonBody | Http.RawBody>(input: T, schema: AnySchema, preferences?: Http.Preferences | null) => Promise<T>;
|
|
4
|
+
export declare const getResponseBody: (body: unknown, schema: AnySchema, preferences?: Http.Preferences) => unknown;
|
package/dist/utils/query.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ObjectSchema } from '@ez4/schema';
|
|
2
2
|
import type { Http } from '@ez4/gateway';
|
|
3
|
-
export declare const getQueryStrings: <T extends Http.QueryStrings>(input: T, schema: ObjectSchema) => Promise<T>;
|
|
3
|
+
export declare const getQueryStrings: <T extends Http.QueryStrings>(input: T, schema: ObjectSchema, preferences?: Http.Preferences | null) => Promise<T>;
|
package/dist/utils.cjs
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
typeof t=="object"||typeof t=="function")for(let a of
|
|
3
|
-
|
|
4
|
-
getQueryStrings:()=>
|
|
5
|
-
|
|
6
|
-
o=await(0,
|
|
7
|
-
length){let a=(0,
|
|
8
|
-
alformed path parameters.",a)}return r},"getPathParameters");var
|
|
9
|
-
o=
|
|
10
|
-
length){let
|
|
11
|
-
|
|
1
|
+
"use strict";var d=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var s=(e,t)=>d(e,"name",{value:t,configurable:!0});var b=(e,t)=>{for(var r in t)d(e,r,{get:t[r],enumerable:!0})},z=(e,t,r,o)=>{if(t&&
|
|
2
|
+
typeof t=="object"||typeof t=="function")for(let a of C(t))!P.call(e,a)&&a!==r&&
|
|
3
|
+
d(e,a,{get:()=>t[a],enumerable:!(o=q(t,a))||o.enumerable});return e};var M=e=>z(d({},"__esModule",{value:!0}),e);var A={};b(A,{getHeaders:()=>O,getIdentity:()=>R,getJsonError:()=>$,getPathParameters:()=>j,
|
|
4
|
+
getQueryStrings:()=>B,getRequestBody:()=>U,getResponseBody:()=>V});module.exports=
|
|
5
|
+
M(A);var l=require("@ez4/transform"),n=require("@ez4/validator"),H=require("@ez4/gateway");var j=s(async(e,t)=>{let r=(0,l.transform)(e,t,(0,l.createTransformContext)({convert:!1})),
|
|
6
|
+
o=await(0,n.validate)(r,t,(0,n.createValidatorContext)({property:"$path"}));if(o.
|
|
7
|
+
length){let a=(0,n.getUniqueErrorMessages)(o);throw new H.HttpBadRequestError("M\
|
|
8
|
+
alformed path parameters.",a)}return r},"getPathParameters");var g=require("@ez4/transform"),m=require("@ez4/validator"),w=require("@ez4/gateway");var B=s(async(e,t,r)=>{let o=r?.namingStyle,a=(0,g.createTransformContext)({convert:!0,
|
|
9
|
+
inputStyle:o}),y=(0,g.transform)(e,t,a),x=(0,m.createValidatorContext)({property:"\
|
|
10
|
+
$query"}),u=await(0,m.validate)(y,t,x);if(u.length){let T=(0,m.getUniqueErrorMessages)(
|
|
11
|
+
u);throw new w.HttpBadRequestError("Malformed query strings.",T)}return y},"getQ\
|
|
12
|
+
ueryStrings");var h=require("@ez4/transform"),p=require("@ez4/validator"),S=require("@ez4/gateway");var O=s(async(e,t)=>{let r=(0,h.transform)(e,t,(0,h.createTransformContext)({convert:!1})),
|
|
12
13
|
o=await(0,p.validate)(r,t,(0,p.createValidatorContext)({property:"$header"}));if(o.
|
|
13
|
-
length){let a=(0,p.getUniqueErrorMessages)(o);throw new
|
|
14
|
-
alformed request headers.",a)}return r},"getHeaders");var i=require("@ez4/validator"),
|
|
15
|
-
{property:"$identity"}));if(r.length){let o=(0,i.getUniqueErrorMessages)(r);throw new
|
|
16
|
-
"Malformed authorizer identity.",o)}return e},"getIdentity");var c=require("@ez4/
|
|
17
|
-
|
|
18
|
-
"Malformed body payload.",
|
|
19
|
-
{convert:!1}))},"getRequestBody"),
|
|
20
|
-
|
|
14
|
+
length){let a=(0,p.getUniqueErrorMessages)(o);throw new S.HttpBadRequestError("M\
|
|
15
|
+
alformed request headers.",a)}return r},"getHeaders");var i=require("@ez4/validator"),v=require("@ez4/gateway");var R=s(async(e,t)=>{let r=await(0,i.validate)(e,t,(0,i.createValidatorContext)(
|
|
16
|
+
{property:"$identity"}));if(r.length){let o=(0,i.getUniqueErrorMessages)(r);throw new v.HttpBadRequestError(
|
|
17
|
+
"Malformed authorizer identity.",o)}return e},"getIdentity");var c=require("@ez4/transform"),f=require("@ez4/validator"),E=require("@ez4/gateway");var U=s(async(e,t,r)=>{let o=r?.namingStyle,a=(0,f.createValidatorContext)({property:"\
|
|
18
|
+
$body",inputStyle:o}),y=await(0,f.validate)(e,t,a);if(y.length){let T=(0,f.getUniqueErrorMessages)(
|
|
19
|
+
y);throw new E.HttpBadRequestError("Malformed body payload.",T)}let x=(0,c.createTransformContext)(
|
|
20
|
+
{convert:!1,inputStyle:o});return(0,c.transform)(e,t,x)},"getRequestBody"),V=s((e,t,r)=>{
|
|
21
|
+
let o=r?.namingStyle,a=(0,c.createTransformContext)({convert:!1,outputStyle:o});
|
|
22
|
+
return(0,c.transform)(e,t,a)},"getResponseBody");var $=s(({status:e,message:t,details:r})=>({status:e,body:{message:t,details:r}}),
|
|
21
23
|
"getJsonError");0&&(module.exports={getHeaders,getIdentity,getJsonError,getPathParameters,getQueryStrings,
|
|
22
24
|
getRequestBody,getResponseBody});
|
|
23
25
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/utils.mjs
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
"
|
|
5
|
-
import{createTransformContext as
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
let
|
|
13
|
-
|
|
14
|
-
import{
|
|
15
|
-
r);throw new R("Malformed
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
var y=Object.defineProperty;var a=(e,t)=>y(e,"name",{value:t,configurable:!0});import{createTransformContext as d,transform as l}from"@ez4/transform";import{validate as g,
|
|
2
|
+
getUniqueErrorMessages as h,createValidatorContext as x}from"@ez4/validator";import{
|
|
3
|
+
HttpBadRequestError as u}from"@ez4/gateway";var D=a(async(e,t)=>{let r=l(e,t,d({convert:!1})),o=await g(r,t,x({property:"$pa\
|
|
4
|
+
th"}));if(o.length){let s=h(o);throw new u("Malformed path parameters.",s)}return r},
|
|
5
|
+
"getPathParameters");import{createTransformContext as T,transform as H}from"@ez4/transform";import{validate as w,
|
|
6
|
+
createValidatorContext as S,getUniqueErrorMessages as v}from"@ez4/validator";import{
|
|
7
|
+
HttpBadRequestError as E}from"@ez4/gateway";var W=a(async(e,t,r)=>{let o=r?.namingStyle,s=T({convert:!0,inputStyle:o}),n=H(e,
|
|
8
|
+
t,s),m=S({property:"$query"}),p=await w(n,t,m);if(p.length){let i=v(p);throw new E(
|
|
9
|
+
"Malformed query strings.",i)}return n},"getQueryStrings");import{createTransformContext as q,transform as C}from"@ez4/transform";import{validate as P,
|
|
10
|
+
createValidatorContext as b,getUniqueErrorMessages as z}from"@ez4/validator";import{
|
|
11
|
+
HttpBadRequestError as M}from"@ez4/gateway";var et=a(async(e,t)=>{let r=C(e,t,q({convert:!1})),o=await P(r,t,b({property:"$h\
|
|
12
|
+
eader"}));if(o.length){let s=z(o);throw new M("Malformed request headers.",s)}return r},
|
|
13
|
+
"getHeaders");import{validate as j,createValidatorContext as B,getUniqueErrorMessages as O}from"@ez4/validator";
|
|
14
|
+
import{HttpBadRequestError as R}from"@ez4/gateway";var nt=a(async(e,t)=>{let r=await j(e,t,B({property:"$identity"}));if(r.length){
|
|
15
|
+
let o=O(r);throw new R("Malformed authorizer identity.",o)}return e},"getIdentit\
|
|
16
|
+
y");import{createTransformContext as c,transform as f}from"@ez4/transform";import{validate as U,
|
|
17
|
+
createValidatorContext as V,getUniqueErrorMessages as $}from"@ez4/validator";import{
|
|
18
|
+
HttpBadRequestError as A}from"@ez4/gateway";var yt=a(async(e,t,r)=>{let o=r?.namingStyle,s=V({property:"$body",inputStyle:o}),
|
|
19
|
+
n=await U(e,t,s);if(n.length){let i=$(n);throw new A("Malformed body payload.",i)}
|
|
20
|
+
let m=c({convert:!1,inputStyle:o});return f(e,t,m)},"getRequestBody"),dt=a((e,t,r)=>{
|
|
21
|
+
let o=r?.namingStyle,s=c({convert:!1,outputStyle:o});return f(e,t,s)},"getRespon\
|
|
22
|
+
seBody");var ht=a(({status:e,message:t,details:r})=>({status:e,body:{message:t,details:r}}),
|
|
23
|
+
"getJsonError");export{et as getHeaders,nt as getIdentity,ht as getJsonError,D as getPathParameters,
|
|
24
|
+
W as getQueryStrings,yt as getRequestBody,dt as getResponseBody};
|
|
19
25
|
//# sourceMappingURL=utils.mjs.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ez4/gateway",
|
|
3
3
|
"description": "EZ4: Components to build gateway services",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.24.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"packages/*"
|
|
38
38
|
],
|
|
39
39
|
"scripts": {
|
|
40
|
+
"lint": "eslint --cache",
|
|
40
41
|
"clean": "rm -f *.tsbuildinfo && rm -rf dist/*",
|
|
41
42
|
"build": "tsc -p tsconfig.json && node tools/bundler.mjs",
|
|
42
43
|
"test": "npm run test:types && node --test --import ../../tools/tsnode.mjs test/*.spec.ts",
|
|
@@ -47,10 +48,12 @@
|
|
|
47
48
|
"live:publish": "npm run test && npm publish --access public"
|
|
48
49
|
},
|
|
49
50
|
"dependencies": {
|
|
50
|
-
"@ez4/common": "^0.
|
|
51
|
-
"@ez4/project": "^0.
|
|
52
|
-
"@ez4/reflection": "^0.
|
|
53
|
-
"@ez4/schema": "^0.
|
|
54
|
-
"@ez4/
|
|
51
|
+
"@ez4/common": "^0.24.0",
|
|
52
|
+
"@ez4/project": "^0.24.0",
|
|
53
|
+
"@ez4/reflection": "^0.24.0",
|
|
54
|
+
"@ez4/schema": "^0.24.0",
|
|
55
|
+
"@ez4/transform": "^0.24.0",
|
|
56
|
+
"@ez4/utils": "^0.24.0",
|
|
57
|
+
"@ez4/validator": "^0.24.0"
|
|
55
58
|
}
|
|
56
59
|
}
|