@idb-orm/core 1.0.3 → 1.0.5
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/LICENSE +7 -0
- package/README.md +4 -0
- package/dist/client/compiled-query.d.ts +4 -14
- package/dist/client/delete.d.ts +14 -0
- package/dist/client/helpers.d.ts +1 -2
- package/dist/client/index.d.ts +4 -32
- package/dist/client/types/find.d.ts +15 -99
- package/dist/client/types/index.d.ts +41 -77
- package/dist/client/types/mutation.d.ts +41 -220
- package/dist/field/field.d.ts +1 -1
- package/dist/field/property.d.ts +70 -0
- package/dist/index.js +1 -2
- package/dist/model/model-types.d.ts +24 -111
- package/dist/model/model.d.ts +5 -23
- package/dist/object-store.d.ts +1 -2
- package/dist/transaction.d.ts +11 -22
- package/dist/types/common.d.ts +4 -1
- package/dist/utils.d.ts +1 -2
- package/package.json +4 -4
- package/test-results/.last-run.json +8 -0
- package/test-results/test-1-page-multi-test-Sample-DB-chromium/error-context.md +8 -0
- package/test-results/test-1-page-multi-test-Sample-DB-firefox/error-context.md +8 -0
- package/test-results/test-1-page-multi-test-Sample-DB-webkit/error-context.md +8 -0
- package/dist/index.js.map +0 -1
- package/eslint.config.js +0 -55
- package/playwright.config.ts +0 -79
- package/tests/helpers.ts +0 -72
- package/tests/test.spec.ts +0 -101
|
@@ -1,125 +1,38 @@
|
|
|
1
1
|
import { CompiledDb } from "../builder.js";
|
|
2
|
-
import {
|
|
3
|
-
BaseRelation,
|
|
4
|
-
Field,
|
|
5
|
-
OptionalRelation,
|
|
6
|
-
PrimaryKey,
|
|
7
|
-
Relation,
|
|
8
|
-
RelationArray,
|
|
9
|
-
RelationOutput,
|
|
10
|
-
ValidValue,
|
|
11
|
-
} from "../field/index.js";
|
|
2
|
+
import { BaseRelation, Field, OptionalRelation, PrimaryKey, Relation, RelationArray, RelationOutput, ValidValue } from "../field";
|
|
12
3
|
import { Dict, Keyof, ZodWrap } from "../types/common.js";
|
|
13
4
|
import Model from "./model.js";
|
|
14
|
-
export type FindPrimaryKey<F extends Record<string, ValidValue>> = Extract<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export type PrimaryKeyType<M extends Model<any, any, any>> = M extends Model<
|
|
21
|
-
any,
|
|
22
|
-
infer F,
|
|
23
|
-
any
|
|
24
|
-
>
|
|
25
|
-
? {
|
|
26
|
-
[K in keyof F]: F[K] extends PrimaryKey<any, infer Type>
|
|
27
|
-
? Type
|
|
28
|
-
: never;
|
|
29
|
-
}[keyof F]
|
|
30
|
-
: never;
|
|
5
|
+
export type FindPrimaryKey<F extends Record<string, ValidValue>> = Extract<{
|
|
6
|
+
[K in keyof F]: F[K] extends PrimaryKey<any, any> ? K : never;
|
|
7
|
+
}[keyof F], string>;
|
|
8
|
+
export type PrimaryKeyType<M extends Model<any, any, any>> = M extends Model<any, infer F, any> ? {
|
|
9
|
+
[K in keyof F]: F[K] extends PrimaryKey<any, infer Type> ? Type : never;
|
|
10
|
+
}[keyof F] : never;
|
|
31
11
|
export interface ModelCache {
|
|
32
12
|
delete?: Set<string>;
|
|
33
13
|
}
|
|
34
14
|
/**
|
|
35
15
|
* Gets the type of a relation given its name
|
|
36
16
|
*/
|
|
37
|
-
export type RelationValue<Name extends string, C> = Name extends keyof C
|
|
38
|
-
? C[Name] extends Model<any, infer Fields, infer PrimaryKey>
|
|
39
|
-
? RelationOutput<Fields[PrimaryKey]>
|
|
40
|
-
: never
|
|
41
|
-
: never;
|
|
17
|
+
export type RelationValue<Name extends string, C> = Name extends keyof C ? C[Name] extends Model<any, infer Fields, infer PrimaryKey> ? RelationOutput<Fields[PrimaryKey]> : never : never;
|
|
42
18
|
/**
|
|
43
19
|
* Gets the primitive type of the relation field
|
|
44
20
|
*/
|
|
45
|
-
export type GetRelationField<F, C> = F extends Relation<infer To, any>
|
|
46
|
-
? RelationValue<To, C>
|
|
47
|
-
: F extends OptionalRelation<infer To, any>
|
|
48
|
-
? RelationValue<To, C> | undefined
|
|
49
|
-
: F extends RelationArray<infer To, any>
|
|
50
|
-
? RelationValue<To, C>[]
|
|
51
|
-
: never;
|
|
21
|
+
export type GetRelationField<F, C> = F extends Relation<infer To, any> ? RelationValue<To, C> : F extends OptionalRelation<infer To, any> ? RelationValue<To, C> | undefined : F extends RelationArray<infer To, any> ? RelationValue<To, C>[] : never;
|
|
52
22
|
export type ModelStructure<F extends Dict<ValidValue>, C> = {
|
|
53
|
-
[K in keyof F]: F[K] extends Field<infer Output, any>
|
|
54
|
-
? Output
|
|
55
|
-
: F[K] extends PrimaryKey<any, infer Type>
|
|
56
|
-
? Type
|
|
57
|
-
: GetRelationField<F[K], C>;
|
|
23
|
+
[K in keyof F]: F[K] extends Field<infer Output, any> ? Output : F[K] extends PrimaryKey<any, infer Type> ? Type : GetRelationField<F[K], C>;
|
|
58
24
|
};
|
|
59
|
-
export type ModelType<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
>
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
export type
|
|
68
|
-
any,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
>
|
|
72
|
-
|
|
73
|
-
: never;
|
|
74
|
-
export type AllRelationKeys<M extends Model<any, any, any>> = M extends Model<
|
|
75
|
-
any,
|
|
76
|
-
infer Fields,
|
|
77
|
-
any
|
|
78
|
-
>
|
|
79
|
-
? {
|
|
80
|
-
[K in Keyof<Fields>]: Fields[K] extends BaseRelation<any, any>
|
|
81
|
-
? K
|
|
82
|
-
: never;
|
|
83
|
-
}[Keyof<Fields>]
|
|
84
|
-
: never;
|
|
85
|
-
export type RelationlessModelStructure<M extends Model<any, any, any>> =
|
|
86
|
-
M extends Model<any, infer Fields, any>
|
|
87
|
-
? Omit<
|
|
88
|
-
{
|
|
89
|
-
[K in Keyof<Fields>]: Fields[K] extends BaseRelation<any, any>
|
|
90
|
-
? unknown
|
|
91
|
-
: Fields[K] extends Field<infer Type, any>
|
|
92
|
-
? Type
|
|
93
|
-
: Fields[K] extends PrimaryKey<any, infer Type>
|
|
94
|
-
? Type
|
|
95
|
-
: never;
|
|
96
|
-
},
|
|
97
|
-
AllRelationKeys<M>
|
|
98
|
-
>
|
|
99
|
-
: never;
|
|
100
|
-
export type CollectionZodSchema<C> = C extends Record<
|
|
101
|
-
infer Keys,
|
|
102
|
-
Model<any, any, any>
|
|
103
|
-
>
|
|
104
|
-
? {
|
|
105
|
-
[K in Keys]: C[K] extends Model<any, infer Fields, any>
|
|
106
|
-
? ZodWrap<ModelStructure<Fields, C>>
|
|
107
|
-
: never;
|
|
108
|
-
}
|
|
109
|
-
: never;
|
|
110
|
-
export type FindRelationKey<
|
|
111
|
-
From extends string,
|
|
112
|
-
RelationName extends string,
|
|
113
|
-
M extends Model<any, any, any>
|
|
114
|
-
> = M extends Model<any, infer Fields, any>
|
|
115
|
-
? {
|
|
116
|
-
[K in Keyof<Fields>]: Fields[K] extends BaseRelation<
|
|
117
|
-
From,
|
|
118
|
-
infer CurName
|
|
119
|
-
>
|
|
120
|
-
? CurName extends RelationName
|
|
121
|
-
? K
|
|
122
|
-
: never
|
|
123
|
-
: never;
|
|
124
|
-
}[Keyof<Fields>]
|
|
125
|
-
: never;
|
|
25
|
+
export type ModelType<M extends Model<any, any, any>, C extends CompiledDb<any, any, any>> = M extends Model<any, infer Fields, any> ? C extends CompiledDb<any, any, infer Collection> ? ModelStructure<Fields, Collection> : never : never;
|
|
26
|
+
export type ExtractFields<M extends Model<any, any, any>> = M extends Model<any, infer Fields, any> ? Fields : never;
|
|
27
|
+
export type AllRelationKeys<M extends Model<any, any, any>> = M extends Model<any, infer Fields, any> ? {
|
|
28
|
+
[K in Keyof<Fields>]: Fields[K] extends BaseRelation<any, any> ? K : never;
|
|
29
|
+
}[Keyof<Fields>] : never;
|
|
30
|
+
export type RelationlessModelStructure<M extends Model<any, any, any>> = M extends Model<any, infer Fields, any> ? Omit<{
|
|
31
|
+
[K in Keyof<Fields>]: Fields[K] extends BaseRelation<any, any> ? unknown : Fields[K] extends Field<infer Type, any> ? Type : Fields[K] extends PrimaryKey<any, infer Type> ? Type : never;
|
|
32
|
+
}, AllRelationKeys<M>> : never;
|
|
33
|
+
export type CollectionZodSchema<C> = C extends Record<infer Keys, Model<any, any, any>> ? {
|
|
34
|
+
[K in Keys]: C[K] extends Model<any, infer Fields, any> ? ZodWrap<ModelStructure<Fields, C>> : never;
|
|
35
|
+
} : never;
|
|
36
|
+
export type FindRelationKey<From extends string, RelationName extends string, M extends Model<any, any, any>> = M extends Model<any, infer Fields, any> ? {
|
|
37
|
+
[K in Keyof<Fields>]: Fields[K] extends BaseRelation<From, infer CurName> ? CurName extends RelationName ? K : never : never;
|
|
38
|
+
}[Keyof<Fields>] : never;
|
package/dist/model/model.d.ts
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
import z from "zod";
|
|
2
2
|
import { CollectionObject } from "../builder.js";
|
|
3
3
|
import { DbClient } from "../client/index.js";
|
|
4
|
-
import {
|
|
5
|
-
BaseRelation,
|
|
6
|
-
Field,
|
|
7
|
-
FieldTypes,
|
|
8
|
-
PrimaryKey,
|
|
9
|
-
ValidValue,
|
|
10
|
-
} from "../field/index.js";
|
|
4
|
+
import { BaseRelation, Field, FieldTypes, PrimaryKey, ValidValue } from "../field";
|
|
11
5
|
import { Keyof, ValidKey } from "../types/common.js";
|
|
12
6
|
import { FindPrimaryKey } from "./model-types.js";
|
|
13
|
-
export default class Model<
|
|
14
|
-
Name extends string,
|
|
15
|
-
F extends Record<string, ValidValue>,
|
|
16
|
-
Primary extends FindPrimaryKey<F> = FindPrimaryKey<F>
|
|
17
|
-
> {
|
|
7
|
+
export default class Model<Name extends string, F extends Record<string, ValidValue>, Primary extends FindPrimaryKey<F> = FindPrimaryKey<F>> {
|
|
18
8
|
readonly name: Name;
|
|
19
9
|
private readonly fields;
|
|
20
10
|
private readonly fieldKeys;
|
|
@@ -25,18 +15,10 @@ export default class Model<
|
|
|
25
15
|
get<K extends Keyof<F>>(key: K): F[K];
|
|
26
16
|
getModelField(key: string): Field<any, any> | undefined;
|
|
27
17
|
getPrimaryKey(): PrimaryKey<boolean, ValidKey>;
|
|
28
|
-
getRelation<Models extends string>(
|
|
29
|
-
key: string
|
|
30
|
-
): BaseRelation<Models, string> | undefined;
|
|
18
|
+
getRelation<Models extends string>(key: string): BaseRelation<Models, string> | undefined;
|
|
31
19
|
keyType(key: Keyof<F>): FieldTypes;
|
|
32
20
|
links<Names extends string = string>(): SetIterator<Names>;
|
|
33
21
|
keys(): Keyof<F>[];
|
|
34
|
-
parseField<K extends Keyof<F>>(
|
|
35
|
-
|
|
36
|
-
value: unknown
|
|
37
|
-
): z.ZodSafeParseResult<any>;
|
|
38
|
-
getDeletedStores<
|
|
39
|
-
ModelNames extends string,
|
|
40
|
-
Models extends CollectionObject<ModelNames>
|
|
41
|
-
>(client: DbClient<string, ModelNames, Models>): Set<ModelNames>;
|
|
22
|
+
parseField<K extends Keyof<F>>(field: K, value: unknown): z.ZodSafeParseResult<any>;
|
|
23
|
+
getDeletedStores<ModelNames extends string, Models extends CollectionObject<ModelNames>>(client: DbClient<string, ModelNames, Models>): Set<ModelNames>;
|
|
42
24
|
}
|
package/dist/object-store.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A paper thin wrapper around IDBObjectStore
|
|
3
3
|
*/
|
|
4
|
-
import { Promisable } from "type-fest";
|
|
5
4
|
import { StoreError } from "./error.js";
|
|
6
5
|
import { Transaction } from "./transaction.js";
|
|
7
|
-
import { Dict, ValidKey } from "./types/common.js";
|
|
6
|
+
import { Dict, Promisable, ValidKey } from "./types/common.js";
|
|
8
7
|
export declare class ObjectStore {
|
|
9
8
|
private readonly tx;
|
|
10
9
|
readonly store: IDBObjectStore;
|
package/dist/transaction.d.ts
CHANGED
|
@@ -1,21 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { StoreError } from "./error.js";
|
|
1
|
+
import { StoreError } from "./error";
|
|
3
2
|
import { ObjectStore } from "./object-store.js";
|
|
3
|
+
import { Arrayable } from "./types/common.js";
|
|
4
4
|
export type TransactionStatus = "running" | "aborted" | "complete" | "error";
|
|
5
|
-
export type TransactionEventHandler = (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
onComplete: TransactionEventHandler;
|
|
14
|
-
}> {}
|
|
15
|
-
export declare class Transaction<
|
|
16
|
-
Mode extends IDBTransactionMode,
|
|
17
|
-
Stores extends string = string
|
|
18
|
-
> {
|
|
5
|
+
export type TransactionEventHandler = (tx: Transaction<IDBTransactionMode>, ev: Event) => void;
|
|
6
|
+
export interface TransactionOptions extends Partial<{
|
|
7
|
+
onAbort: TransactionEventHandler;
|
|
8
|
+
onError: TransactionEventHandler;
|
|
9
|
+
onComplete: TransactionEventHandler;
|
|
10
|
+
}> {
|
|
11
|
+
}
|
|
12
|
+
export declare class Transaction<Mode extends IDBTransactionMode, Stores extends string = string> {
|
|
19
13
|
private internal;
|
|
20
14
|
status: TransactionStatus;
|
|
21
15
|
error: StoreError | null;
|
|
@@ -24,12 +18,7 @@ export declare class Transaction<
|
|
|
24
18
|
* A record of store names to `IDBObjectStore` objects
|
|
25
19
|
*/
|
|
26
20
|
private readonly objectStores;
|
|
27
|
-
constructor(
|
|
28
|
-
db: IDBDatabase,
|
|
29
|
-
stores: Arrayable<Stores>,
|
|
30
|
-
mode: Mode,
|
|
31
|
-
options?: TransactionOptions
|
|
32
|
-
);
|
|
21
|
+
constructor(db: IDBDatabase, stores: Arrayable<Stores>, mode: Mode, options?: TransactionOptions);
|
|
33
22
|
abort(error: StoreError): StoreError;
|
|
34
23
|
commit(): void;
|
|
35
24
|
/**
|
package/dist/types/common.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { Arrayable, IsNever } from "type-fest";
|
|
2
1
|
import type z from "zod";
|
|
3
2
|
/**
|
|
4
3
|
* Extracts the string keys of an object
|
|
5
4
|
*/
|
|
6
5
|
export type Keyof<T extends Record<any, any>> = Extract<keyof T, string>;
|
|
6
|
+
export type Arrayable<T> = T | T[];
|
|
7
|
+
export type IsNever<T> = [T] extends [never] ? true : false;
|
|
8
|
+
export type Promisable<T> = T | Promise<T>;
|
|
7
9
|
export type MakeOptional<B extends boolean, T> = B extends true ? T | undefined : T;
|
|
8
10
|
export type MakeArray<B extends boolean, T> = B extends true ? T[] : T;
|
|
9
11
|
export type MakeArrayable<B extends boolean, T> = B extends true ? Arrayable<T> : T;
|
|
@@ -34,4 +36,5 @@ export type PartialOnUndefined<T extends Dict> = Required<T> & Optional<T>;
|
|
|
34
36
|
* Types that can be resolved to specific boolean values
|
|
35
37
|
*/
|
|
36
38
|
export type BooleanLike = boolean | undefined | null | 0;
|
|
39
|
+
export type Literable = string | number | bigint | boolean | null | undefined;
|
|
37
40
|
export {};
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { Keyof } from "./types/common";
|
|
2
|
-
import type { Arrayable } from "type-fest";
|
|
1
|
+
import type { Arrayable, Keyof } from "./types/common";
|
|
3
2
|
import type { Transaction } from "./transaction.js";
|
|
4
3
|
export declare function handleRequest<T>(req: IDBRequest<T>, tx?: Transaction<any, any>): Promise<T>;
|
|
5
4
|
export declare function getKeys<T extends object>(obj: T): Keyof<T>[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@idb-orm/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
"check": "eslint . && tsc -b --noEmit",
|
|
11
11
|
"test": "playwright test"
|
|
12
12
|
},
|
|
13
|
-
"keywords": [
|
|
14
|
-
|
|
15
|
-
"
|
|
13
|
+
"keywords": [
|
|
14
|
+
"typescript",
|
|
15
|
+
"indexeddb"
|
|
16
16
|
],
|
|
17
17
|
"author": "jtb",
|
|
18
18
|
"exports": {
|