schematox 1.3.0-alpha → 1.3.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,7 +2,7 @@
2
2
 
3
3
  Schematox is a lightweight typesafe schema defined parser. All schemas are JSON compatible.
4
4
 
5
- The library is focusing on fixed set of schema types: boolean, literal, number, bigint, string, array, object, record, tuple, union. Each schema can have parameters: optional, nullable, description. Each primitive schema has "brand" parameter as mean of making its subject type [nominal](https://github.com/Microsoft/TypeScript/wiki/FAQ#can-i-make-a-type-alias-nominal). The rest parameters is schema specific range limiters.
5
+ The library is focusing on fixed set of schema types: bigint, boolean, literal, number, string, array, object, record, tuple, union. Each schema can have parameters: optional, nullable, description. Each primitive schema has "brand" parameter as mean of making its subject type [nominal](https://github.com/Microsoft/TypeScript/wiki/FAQ#can-i-make-a-type-alias-nominal). The rest parameters is schema specific range limiters.
6
6
 
7
7
  Library supports static schema definition which means your schemas could be completely independent from schematox. One could use such schemas as source for generation other structures like DB models.
8
8
 
@@ -16,10 +16,10 @@ The library is small so exploring README.md is enough for understanding its API,
16
16
  - [Struct](#struct)
17
17
  - [Construct](#construct)
18
18
  - [Primitive Schema](#primitive-schema)
19
+ - [BigInt](#bigint)
19
20
  - [Boolean](#boolean)
20
21
  - [Literal](#literal)
21
22
  - [Number](#number)
22
- - [BigInt](#bigint)
23
23
  - [String](#string)
24
24
  - [Compound Schema](#compound-schema)
25
25
  - [Array](#array)
@@ -154,6 +154,32 @@ const string = makeStruct(schema)
154
154
 
155
155
  Any schema share optional/nullable/description/brand parameters.
156
156
 
157
+ ### BigInt
158
+
159
+ ```typescript
160
+ const schema = {
161
+ type: 'bigint',
162
+ optional: true,
163
+ nullable: true,
164
+ brand: ['x', 'y'],
165
+ min: '1',
166
+ max: '4',
167
+ description: 'x',
168
+ } as const satisfies Schema
169
+
170
+ const struct = bigint()
171
+ .optional()
172
+ .nullable()
173
+ .brand('x', 'y')
174
+ .min('1')
175
+ .max('4')
176
+ .description('x')
177
+
178
+ // (bigint & { __x: 'y' }) | undefined | null
179
+ type FromSchema = Infer<typeof schema>
180
+ type FromStruct = Infer<typeof struct>
181
+ ```
182
+
157
183
  ### Boolean
158
184
 
159
185
  ```typescript
@@ -255,34 +281,6 @@ type FromSchema = Infer<typeof schema>
255
281
  type FromStruct = Infer<typeof struct>
256
282
  ```
257
283
 
258
- ### BigInt
259
-
260
- Native support for JavaScript's `bigint` primitive type.
261
-
262
- ```typescript
263
- const schema = {
264
- type: 'bigint',
265
- optional: true,
266
- nullable: true,
267
- brand: ['x', 'y'],
268
- min: '1',
269
- max: '4',
270
- description: 'x',
271
- } as const satisfies Schema
272
-
273
- const struct = bigint()
274
- .optional()
275
- .nullable()
276
- .brand('x', 'y')
277
- .min('1')
278
- .max('4')
279
- .description('x')
280
-
281
- // (bigint & { __x: 'y' }) | undefined | null
282
- type FromSchema = Infer<typeof schema>
283
- type FromStruct = Infer<typeof struct>
284
- ```
285
-
286
284
  ## Compound Schema
287
285
 
288
286
  Any compound schema could have any other schema type as its member including itself.
package/dist/struct.d.ts CHANGED
@@ -31,14 +31,14 @@ export declare function object<T extends Record<string, StructShape<Schema>>>(of
31
31
  type: "object";
32
32
  of: { [K in keyof T]: T[K]["__schema"]; };
33
33
  }>;
34
- export declare function record<T extends StructShape<Schema>, U extends StructShape<StringSchema> | undefined>(of: T, key?: U): Struct<{
35
- type: "record";
36
- of: T["__schema"];
37
- key: NonNullable<U>["__schema"];
38
- } | {
39
- type: "record";
40
- of: T["__schema"];
41
- key?: undefined;
34
+ export declare function record<T extends StructShape<Schema>>(of: T, key?: undefined): Struct<{
35
+ type: 'record';
36
+ of: T['__schema'];
37
+ }>;
38
+ export declare function record<T extends StructShape<Schema>, U extends StructShape<StringSchema>>(of: T, key: U): Struct<{
39
+ type: 'record';
40
+ of: T['__schema'];
41
+ key: U['__schema'];
42
42
  }>;
43
43
  export declare function tuple<T extends [StructShape<Schema>, ...Array<StructShape<Schema>>]>(of: T): Struct<{
44
44
  readonly type: "tuple";
@@ -1 +1 @@
1
- {"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EAGN,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEvE,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AA0ElE;;IAEI;AAEJ,wBAAgB,OAAO;;GAEtB;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC;;;GAEjE;AAED,wBAAgB,MAAM;;GAErB;AAED,wBAAgB,MAAM;;GAErB;AAED,wBAAgB,MAAM;;GAErB;AAED;;IAEI;AAEJ,wBAAgB,KAAK,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;;;GAKzD;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;;GAW1E;AAED,wBAAgB,MAAM,CACpB,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAC7B,CAAC,SAAS,WAAW,CAAC,YAAY,CAAC,GAAG,SAAS,EAC/C,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;;;;;;;;GAUf;AAED,wBAAgB,KAAK,CACnB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAC9D,EAAE,EAAE,CAAC;;;GAON;AAED,wBAAgB,KAAK,CACnB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAC9D,EAAE,EAAE,CAAC;UAEG,OAAO;;GAahB"}
1
+ {"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EAGN,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEvE,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AA0ElE;;IAEI;AAEJ,wBAAgB,OAAO;;GAEtB;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC;;;GAEjE;AAED,wBAAgB,MAAM;;GAErB;AAED,wBAAgB,MAAM;;GAErB;AAED,wBAAgB,MAAM;;GAErB;AAED;;IAEI;AAEJ,wBAAgB,KAAK,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;;;GAKzD;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;;GAW1E;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAClD,EAAE,EAAE,CAAC,EACL,GAAG,CAAC,EAAE,SAAS,GACd,MAAM,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAA;CAAE,CAAC,CAAA;AAEhD,wBAAgB,MAAM,CACpB,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAC7B,CAAC,SAAS,WAAW,CAAC,YAAY,CAAC,EAEnC,EAAE,EAAE,CAAC,EACL,GAAG,EAAE,CAAC,GACL,MAAM,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAA;CAAE,CAAC,CAAA;AAcpE,wBAAgB,KAAK,CACnB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAC9D,EAAE,EAAE,CAAC;;;GAON;AAED,wBAAgB,KAAK,CACnB,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAC9D,EAAE,EAAE,CAAC;UAEG,OAAO;;GAahB"}
package/dist/struct.js CHANGED
@@ -99,13 +99,14 @@ export function object(of) {
99
99
  return makeStruct(schema);
100
100
  }
101
101
  export function record(of, key) {
102
- return makeStruct(key
103
- ? {
102
+ if (key !== undefined) {
103
+ return makeStruct({
104
104
  type: 'record',
105
105
  of: of.__schema,
106
106
  key: key.__schema,
107
- }
108
- : { type: 'record', of: of.__schema });
107
+ });
108
+ }
109
+ return makeStruct({ type: 'record', of: of.__schema });
109
110
  }
110
111
  export function tuple(of) {
111
112
  const schema = {
@@ -1 +1 @@
1
- {"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"struct.js","sourceRoot":"","sources":["../src/struct.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "name": "schematox",
3
- "version": "1.3.0-alpha",
3
+ "version": "1.3.0",
4
4
  "scripts": {
5
5
  "build": "tsc",
6
6
  "test": "jest",
7
7
  "test:watch": "jest --watch",
8
8
  "test:coverage": "jest --coverage",
9
9
  "formatter:fix": "prettier --write .",
10
- "formatter:check": "prettier --check . || (echo \"ERROR: use `npm run formatter:fix`\" && exit 1)",
10
+ "formatter:check": "prettier --check . || (echo \"FORMATTING ERROR: use 'npm run formatter:fix'\" && exit 1)",
11
11
  "ts": "tsc --noEmit",
12
12
  "check": "npm run formatter:check && npm run ts && npm run test:coverage",
13
13
  "morph": "jiti tests/fold-morph.ts && npm run formatter:fix",
14
- "version:patch": "npm run check && npm version patch",
15
- "version:minor": "npm run check && npm version minor",
16
- "version:major": "npm run check && npm version major"
14
+ "release": "npm run check && bash scripts/prepare-release.sh",
15
+ "publish:alpha": "bash scripts/publish-alpha.sh"
17
16
  },
18
17
  "peerDependencies": {
19
18
  "typescript": ">=5.3.2"
@@ -42,7 +41,7 @@
42
41
  ],
43
42
  "repository": {
44
43
  "type": "git",
45
- "url": "git://github.com/incerta/schematox.git"
44
+ "url": "https://github.com/incerta/schematox.git"
46
45
  },
47
46
  "main": "./dist/index.js",
48
47
  "types": "./dist/index.d.ts",
package/src/struct.ts CHANGED
@@ -132,19 +132,29 @@ export function object<T extends Record<string, StructShape<Schema>>>(of: T) {
132
132
  return makeStruct(schema)
133
133
  }
134
134
 
135
+ export function record<T extends StructShape<Schema>>(
136
+ of: T,
137
+ key?: undefined
138
+ ): Struct<{ type: 'record'; of: T['__schema'] }>
139
+
135
140
  export function record<
136
141
  T extends StructShape<Schema>,
137
- U extends StructShape<StringSchema> | undefined,
138
- >(of: T, key?: U) {
139
- return makeStruct(
140
- key
141
- ? {
142
- type: 'record',
143
- of: of.__schema as T['__schema'],
144
- key: key.__schema as (typeof key)['__schema'],
145
- }
146
- : { type: 'record', of: of.__schema as T['__schema'] }
147
- )
142
+ U extends StructShape<StringSchema>,
143
+ >(
144
+ of: T,
145
+ key: U
146
+ ): Struct<{ type: 'record'; of: T['__schema']; key: U['__schema'] }>
147
+
148
+ export function record(of: StructShape<any>, key?: StructShape<any>) {
149
+ if (key !== undefined) {
150
+ return makeStruct({
151
+ type: 'record',
152
+ of: of.__schema,
153
+ key: key.__schema,
154
+ })
155
+ }
156
+
157
+ return makeStruct({ type: 'record', of: of.__schema })
148
158
  }
149
159
 
150
160
  export function tuple<