Skip to content

Commit d22c17f

Browse files
committed
Release 0.0.37
1 parent 576fdc0 commit d22c17f

File tree

88 files changed

+1635
-612
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+1635
-612
lines changed

package.json

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ravenapp/raven",
3-
"version": "0.0.36",
3+
"version": "0.0.37",
44
"repository": "https://github.com/ravenappdev/raven-node",
55
"files": [
66
"core",
@@ -11,16 +11,9 @@
1111
],
1212
"main": "./index.js",
1313
"types": "./index.d.ts",
14-
"exports": {
15-
".": {
16-
"require": "./index.js",
17-
"import": "./index.js",
18-
"types": "./index.d.ts"
19-
}
20-
},
2114
"scripts": {
2215
"format": "prettier --write --print-width 120 'src/**/*.ts'",
23-
"build": "esbuild $(find src -name '*.ts') --format=cjs --sourcemap --outdir=. && tsc"
16+
"build": "tsc && tsc-alias"
2417
},
2518
"dependencies": {
2619
"@types/url-join": "4.0.1",
@@ -29,8 +22,8 @@
2922
},
3023
"devDependencies": {
3124
"@types/node": "17.0.33",
32-
"esbuild": "0.14.47",
3325
"prettier": "2.7.1",
26+
"tsc-alias": "^1.7.1",
3427
"typescript": "4.6.4"
3528
},
3629
"packageManager": "[email protected]"

src/core/schemas/Schema.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ export type inferRaw<S extends Schema> = S extends Schema<infer Raw, any> ? Raw
66
export type inferParsed<S extends Schema> = S extends Schema<any, infer Parsed> ? Parsed : never;
77

88
export interface BaseSchema<Raw, Parsed> {
9-
parse: (raw: Raw, opts?: SchemaOptions) => Parsed;
10-
json: (parsed: Parsed, opts?: SchemaOptions) => Raw;
9+
parse: (raw: Raw, opts?: SchemaOptions) => Parsed | Promise<Parsed>;
10+
json: (parsed: Parsed, opts?: SchemaOptions) => Raw | Promise<Raw>;
1111
}
1212

1313
export interface SchemaOptions {
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { BaseSchema, Schema } from "../../Schema";
22
import { getSchemaUtils } from "../schema-utils";
33

4-
type Getter<Raw, Parsed> = () => Schema<Raw, Parsed>;
4+
type Getter<Raw, Parsed> = () => Schema<Raw, Parsed> | Promise<Schema<Raw, Parsed>>;
55
type MemoizedGetter<Raw, Parsed> = Getter<Raw, Parsed> & { __zurg_memoized?: Schema<Raw, Parsed> };
66

77
export function lazy<Raw, Parsed>(getter: Getter<Raw, Parsed>): Schema<Raw, Parsed> {
@@ -13,16 +13,16 @@ export function lazy<Raw, Parsed>(getter: Getter<Raw, Parsed>): Schema<Raw, Pars
1313
}
1414

1515
export function constructLazyBaseSchema<Raw, Parsed>(getter: Getter<Raw, Parsed>): BaseSchema<Raw, Parsed> {
16-
const getSchema = () => {
16+
const getSchema = async () => {
1717
const castedGetter = getter as MemoizedGetter<Raw, Parsed>;
1818
if (castedGetter.__zurg_memoized == null) {
19-
castedGetter.__zurg_memoized = getter();
19+
castedGetter.__zurg_memoized = await getter();
2020
}
2121
return castedGetter.__zurg_memoized;
2222
};
2323

2424
return {
25-
parse: (raw) => getSchema().parse(raw),
26-
json: (parsed) => getSchema().json(parsed),
25+
parse: async (raw) => (await getSchema()).parse(raw),
26+
json: async (parsed) => (await getSchema()).json(parsed),
2727
};
2828
}

src/core/schemas/builders/lazy/lazyObject.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import { ObjectSchema } from "../object/types";
44
import { getSchemaUtils } from "../schema-utils";
55
import { constructLazyBaseSchema } from "./lazy";
66

7-
export function lazyObject<Raw, Parsed>(getter: () => ObjectSchema<Raw, Parsed>): ObjectSchema<Raw, Parsed> {
7+
type Getter<Raw, Parsed> = () => ObjectSchema<Raw, Parsed> | Promise<ObjectSchema<Raw, Parsed>>;
8+
9+
export function lazyObject<Raw, Parsed>(getter: Getter<Raw, Parsed>): ObjectSchema<Raw, Parsed> {
810
const baseSchema = {
911
...OBJECT_LIKE_BRAND,
1012
...constructLazyBaseSchema(getter),

src/core/schemas/builders/list/list.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { getSchemaUtils } from "../schema-utils";
33

44
export function list<Raw, Parsed>(schema: Schema<Raw, Parsed>): Schema<Raw[], Parsed[]> {
55
const baseSchema: BaseSchema<Raw[], Parsed[]> = {
6-
parse: (raw, opts) => raw.map((item) => schema.parse(item, opts)),
7-
json: (parsed, opts) => parsed.map((item) => schema.json(item, opts)),
6+
parse: (raw, opts) => Promise.all(raw.map((item) => schema.parse(item, opts))),
7+
json: (parsed, opts) => Promise.all(parsed.map((item) => schema.json(item, opts))),
88
};
99

1010
return {

src/core/schemas/builders/object-like/withProperties.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ export function withProperties<RawObjectShape, ParsedObjectShape, Properties>(
88
): ObjectLikeSchema<RawObjectShape, ParsedObjectShape & Properties> {
99
const objectSchema: BaseObjectLikeSchema<RawObjectShape, ParsedObjectShape & Properties> = {
1010
...OBJECT_LIKE_BRAND,
11-
parse: (raw, opts) => {
12-
const parsedObject = objectLike.parse(raw, opts);
11+
parse: async (raw, opts) => {
12+
const parsedObject = await objectLike.parse(raw, opts);
1313
const additionalProperties = Object.entries(properties).reduce<Record<string, any>>((processed, [key, value]) => {
1414
return {
1515
...processed,

src/core/schemas/builders/object/object.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function object<ParsedKeys extends string, T extends PropertySchemas<Pars
2525
const baseSchema: BaseObjectSchema<inferRawObjectFromPropertySchemas<T>, inferParsedObjectFromPropertySchemas<T>> = {
2626
...OBJECT_LIKE_BRAND,
2727

28-
parse: (raw, { skipUnknownKeysOnParse = false } = {}) => {
28+
parse: async (raw, { skipUnknownKeysOnParse = false } = {}) => {
2929
const rawKeyToProperty: Record<string, ObjectPropertyWithRawKey> = {};
3030

3131
for (const [parsedKey, schemaOrObjectProperty] of entries(schemas)) {
@@ -46,7 +46,7 @@ export function object<ParsedKeys extends string, T extends PropertySchemas<Pars
4646
const property = rawKeyToProperty[rawKey];
4747

4848
if (property != null) {
49-
const value = property.valueSchema.parse(rawPropertyValue);
49+
const value = await property.valueSchema.parse(rawPropertyValue);
5050
parsed[property.parsedKey] = value;
5151
} else if (!skipUnknownKeysOnParse && rawPropertyValue != null) {
5252
parsed[rawKey] = rawPropertyValue;
@@ -56,18 +56,18 @@ export function object<ParsedKeys extends string, T extends PropertySchemas<Pars
5656
return parsed as inferParsedObjectFromPropertySchemas<T>;
5757
},
5858

59-
json: (parsed, { includeUnknownKeysOnJson = false } = {}) => {
59+
json: async (parsed, { includeUnknownKeysOnJson = false } = {}) => {
6060
const raw: Record<string | number | symbol, any> = {};
6161

6262
for (const [parsedKey, parsedPropertyValue] of entries(parsed)) {
6363
const schemaOrObjectProperty = schemas[parsedKey as keyof T];
6464
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
6565
if (schemaOrObjectProperty != null) {
6666
if (isProperty(schemaOrObjectProperty)) {
67-
const value = schemaOrObjectProperty.valueSchema.json(parsedPropertyValue);
67+
const value = await schemaOrObjectProperty.valueSchema.json(parsedPropertyValue);
6868
raw[schemaOrObjectProperty.rawKey] = value;
6969
} else {
70-
const value = schemaOrObjectProperty.json(parsedPropertyValue);
70+
const value = await schemaOrObjectProperty.json(parsedPropertyValue);
7171
raw[parsedKey] = value;
7272
}
7373
} else if (includeUnknownKeysOnJson && parsedPropertyValue != null) {
@@ -92,13 +92,13 @@ export function getObjectUtils<Raw, Parsed>(schema: BaseObjectSchema<Raw, Parsed
9292
extend: <RawExtension, ParsedExtension>(extension: ObjectSchema<RawExtension, ParsedExtension>) => {
9393
const baseSchema: BaseObjectSchema<Raw & RawExtension, Parsed & ParsedExtension> = {
9494
...OBJECT_LIKE_BRAND,
95-
parse: (raw, opts) => ({
96-
...schema.parse(raw, opts),
97-
...extension.parse(raw, opts),
95+
parse: async (raw, opts) => ({
96+
...(await schema.parse(raw, opts)),
97+
...(await extension.parse(raw, opts)),
9898
}),
99-
json: (parsed, opts) => ({
100-
...schema.json(parsed, opts),
101-
...extension.json(parsed, opts),
99+
json: async (parsed, opts) => ({
100+
...(await schema.json(parsed, opts)),
101+
...(await extension.json(parsed, opts)),
102102
}),
103103
};
104104

src/core/schemas/builders/record/record.ts

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,20 @@ export function record<RawKey extends string | number, ParsedKey extends string
88
): Schema<Record<RawKey, RawValue>, Record<ParsedKey, ParsedValue>> {
99
const baseSchema: BaseSchema<Record<RawKey, RawValue>, Record<ParsedKey, ParsedValue>> = {
1010
parse: (raw, opts) => {
11-
return entries(raw).reduce(
12-
(parsed, [key, value]) => {
13-
parsed[keySchema.parse(key, opts)] = valueSchema.parse(value, opts);
14-
return parsed;
15-
},
16-
// eslint-disable-next-line @typescript-eslint/prefer-reduce-type-parameter
17-
{} as Record<ParsedKey, ParsedValue>
18-
);
11+
return entries(raw).reduce(async (parsedPromise, [key, value]) => {
12+
const parsed: Record<ParsedKey, ParsedValue> = await parsedPromise;
13+
const parsedKey = await keySchema.parse(key, opts);
14+
parsed[parsedKey] = await valueSchema.parse(value, opts);
15+
return parsedPromise;
16+
}, Promise.resolve({} as Record<ParsedKey, ParsedValue>));
1917
},
2018
json: (parsed, opts) => {
21-
return entries(parsed).reduce(
22-
(raw, [key, value]) => {
23-
raw[keySchema.json(key, opts)] = valueSchema.json(value, opts);
24-
return raw;
25-
},
26-
// eslint-disable-next-line @typescript-eslint/prefer-reduce-type-parameter
27-
{} as Record<RawKey, RawValue>
28-
);
19+
return entries(parsed).reduce(async (rawPromise, [key, value]) => {
20+
const raw: Record<RawKey, RawValue> = await rawPromise;
21+
const rawKey = await keySchema.json(key, opts);
22+
raw[rawKey] = await valueSchema.json(value, opts);
23+
return rawPromise;
24+
}, Promise.resolve({} as Record<RawKey, RawValue>));
2925
},
3026
};
3127

src/core/schemas/builders/schema-utils/getSchemaUtils.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ export function transform<PreTransformRaw, PreTransformParsed, PostTransform>(
3535
transformer: BaseSchema<PreTransformParsed, PostTransform>
3636
): Schema<PreTransformRaw, PostTransform> {
3737
const baseSchema: BaseSchema<PreTransformRaw, PostTransform> = {
38-
parse: (raw, opts) => {
39-
const postTransformParsed = schema.parse(raw, opts);
38+
parse: async (raw, opts) => {
39+
const postTransformParsed = await schema.parse(raw, opts);
4040
return transformer.parse(postTransformParsed, opts);
4141
},
42-
json: (parsed, opts) => {
43-
const preTransformParsed = transformer.json(parsed, opts);
42+
json: async (parsed, opts) => {
43+
const preTransformParsed = await transformer.json(parsed, opts);
4444
return schema.json(preTransformParsed, opts);
4545
},
4646
};

src/core/schemas/builders/set/set.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { getSchemaUtils } from "../schema-utils";
33

44
export function set<Raw, Parsed>(schema: Schema<Raw, Parsed>): Schema<Raw[], Set<Parsed>> {
55
const baseSchema: BaseSchema<Raw[], Set<Parsed>> = {
6-
parse: (raw, opts) => new Set(raw.map((item) => schema.parse(item, opts))),
7-
json: (parsed, opts) => [...parsed].map((item) => schema.json(item, opts)),
6+
parse: async (raw, opts) => new Set(await Promise.all(raw.map((item) => schema.parse(item, opts)))),
7+
json: (parsed, opts) => Promise.all([...parsed].map((item) => schema.json(item, opts))),
88
};
99

1010
return {

0 commit comments

Comments
 (0)