@basictech/react 0.7.0-beta.0 → 0.7.0-beta.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.
- package/changelog.md +12 -5
- package/dist/index.d.mts +121 -5
- package/dist/index.d.ts +121 -5
- package/dist/index.js +978 -244
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +977 -244
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/readme.md +127 -1
- package/src/AuthContext.tsx +427 -347
- package/src/index.ts +6 -31
- package/src/updater/updateMigrations.ts +22 -0
- package/src/updater/versionUpdater.ts +160 -0
- package/src/utils/network.ts +82 -0
- package/src/utils/schema.ts +120 -0
- package/src/utils/storage.ts +62 -0
package/changelog.md
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
# 1.3.4
|
|
2
2
|
|
|
3
|
-
## 0.7.0-beta.
|
|
3
|
+
## 0.7.0-beta.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- update token endpoint
|
|
8
|
+
|
|
9
|
+
## 0.7.0-beta.1
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
6
12
|
|
|
7
|
-
- update
|
|
13
|
+
- storage adapater update
|
|
8
14
|
|
|
9
|
-
|
|
15
|
+
## 0.7.0-beta.0
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- localstorage update
|
|
13
20
|
|
|
14
21
|
## 0.6.0
|
|
15
22
|
|
package/dist/index.d.mts
CHANGED
|
@@ -2,6 +2,12 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
export { useLiveQuery as useQuery } from 'dexie-react-hooks';
|
|
4
4
|
|
|
5
|
+
interface BasicStorage {
|
|
6
|
+
get(key: string): Promise<string | null>;
|
|
7
|
+
set(key: string, value: string): Promise<void>;
|
|
8
|
+
remove(key: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
|
|
5
11
|
declare enum DBStatus {
|
|
6
12
|
LOADING = "LOADING",
|
|
7
13
|
OFFLINE = "OFFLINE",
|
|
@@ -19,23 +25,133 @@ type User = {
|
|
|
19
25
|
};
|
|
20
26
|
fullName?: string;
|
|
21
27
|
};
|
|
22
|
-
declare function BasicProvider({ children, project_id, schema, debug }: {
|
|
28
|
+
declare function BasicProvider({ children, project_id, schema, debug, storage }: {
|
|
23
29
|
children: React.ReactNode;
|
|
24
30
|
project_id?: string;
|
|
25
31
|
schema?: any;
|
|
26
32
|
debug?: boolean;
|
|
33
|
+
storage?: BasicStorage;
|
|
27
34
|
}): react_jsx_runtime.JSX.Element;
|
|
28
35
|
declare function useBasic(): {
|
|
29
36
|
unicorn: string;
|
|
30
37
|
isAuthReady: boolean;
|
|
31
38
|
isSignedIn: boolean;
|
|
32
39
|
user: User | null;
|
|
33
|
-
signout: () => void
|
|
34
|
-
signin: () => void
|
|
40
|
+
signout: () => Promise<void>;
|
|
41
|
+
signin: () => Promise<void>;
|
|
42
|
+
signinWithCode: (code: string, state?: string) => Promise<{
|
|
43
|
+
success: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
}>;
|
|
35
46
|
getToken: () => Promise<string>;
|
|
36
|
-
getSignInLink: () => string
|
|
47
|
+
getSignInLink: (redirectUri?: string) => Promise<string>;
|
|
37
48
|
db: any;
|
|
49
|
+
remoteDb: any;
|
|
38
50
|
dbStatus: DBStatus;
|
|
39
51
|
};
|
|
40
52
|
|
|
41
|
-
|
|
53
|
+
type FieldType = "string" | "boolean" | "number" | "json";
|
|
54
|
+
interface SchemaField {
|
|
55
|
+
type: FieldType;
|
|
56
|
+
indexed?: boolean;
|
|
57
|
+
}
|
|
58
|
+
interface TableSchema {
|
|
59
|
+
fields: Record<string, SchemaField>;
|
|
60
|
+
[key: string]: any;
|
|
61
|
+
}
|
|
62
|
+
interface DBSchema {
|
|
63
|
+
project_id: string;
|
|
64
|
+
version: number;
|
|
65
|
+
tables: Record<string, TableSchema>;
|
|
66
|
+
}
|
|
67
|
+
type OrderDirection = "asc" | "desc";
|
|
68
|
+
type FilterValue = string | number | boolean | null | string[];
|
|
69
|
+
interface OperatorFilter {
|
|
70
|
+
eq?: FilterValue;
|
|
71
|
+
neq?: FilterValue;
|
|
72
|
+
gt?: number | string;
|
|
73
|
+
gte?: number | string;
|
|
74
|
+
lt?: number | string;
|
|
75
|
+
lte?: number | string;
|
|
76
|
+
like?: string;
|
|
77
|
+
ilike?: string;
|
|
78
|
+
in?: string[] | number[];
|
|
79
|
+
is?: boolean | null;
|
|
80
|
+
not?: OperatorFilter;
|
|
81
|
+
}
|
|
82
|
+
type FilterCondition = FilterValue | OperatorFilter;
|
|
83
|
+
interface QueryOptions {
|
|
84
|
+
id?: string;
|
|
85
|
+
order?: string;
|
|
86
|
+
limit?: number;
|
|
87
|
+
offset?: number;
|
|
88
|
+
filters?: Record<string, FilterCondition>;
|
|
89
|
+
}
|
|
90
|
+
type FieldTypeToTS<T extends FieldType> = T extends "string" ? string : T extends "boolean" ? boolean : T extends "number" ? number : T extends "json" ? Record<string, any> : never;
|
|
91
|
+
type TableData<T extends TableSchema> = {
|
|
92
|
+
id: string;
|
|
93
|
+
created_at: string;
|
|
94
|
+
} & {
|
|
95
|
+
[K in keyof T["fields"]]: T["fields"][K] extends {
|
|
96
|
+
type: FieldType;
|
|
97
|
+
} ? FieldTypeToTS<T["fields"][K]["type"]> : never;
|
|
98
|
+
};
|
|
99
|
+
interface SDKConfig<S extends DBSchema> {
|
|
100
|
+
project_id: string;
|
|
101
|
+
token?: string;
|
|
102
|
+
getToken?: () => Promise<string>;
|
|
103
|
+
baseUrl?: string;
|
|
104
|
+
schema: S;
|
|
105
|
+
}
|
|
106
|
+
declare class QueryBuilder<T> {
|
|
107
|
+
private tableClient;
|
|
108
|
+
private tableSchema?;
|
|
109
|
+
private params;
|
|
110
|
+
constructor(tableClient: TableClient<T>, tableSchema?: TableSchema | undefined);
|
|
111
|
+
private reservedFields;
|
|
112
|
+
private validateField;
|
|
113
|
+
private validateOperator;
|
|
114
|
+
order(field: string, direction?: OrderDirection): QueryBuilder<T>;
|
|
115
|
+
filter(conditions: Record<string, FilterCondition>): QueryBuilder<T>;
|
|
116
|
+
limit(count: number): QueryBuilder<T>;
|
|
117
|
+
offset(count: number): QueryBuilder<T>;
|
|
118
|
+
then<TResult1 = T[], TResult2 = never>(onfulfilled?: ((value: T[]) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
|
|
119
|
+
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<T[] | TResult>;
|
|
120
|
+
finally(onfinally?: (() => void) | null): Promise<T[]>;
|
|
121
|
+
}
|
|
122
|
+
declare class TableClient<T> {
|
|
123
|
+
private baseUrl;
|
|
124
|
+
private projectId;
|
|
125
|
+
private token;
|
|
126
|
+
private table;
|
|
127
|
+
private getToken;
|
|
128
|
+
private schema?;
|
|
129
|
+
private tableSchema?;
|
|
130
|
+
constructor(baseUrl: string, projectId: string, token: string, table: string, getToken: () => Promise<string>, schema?: DBSchema | undefined);
|
|
131
|
+
private headers;
|
|
132
|
+
private handleRequest;
|
|
133
|
+
private buildQueryParams;
|
|
134
|
+
private addFilterParam;
|
|
135
|
+
executeQuery(options?: QueryOptions): Promise<T[]>;
|
|
136
|
+
getAll(): QueryBuilder<T>;
|
|
137
|
+
get(id: string): Promise<T>;
|
|
138
|
+
create(value: Partial<T>): Promise<T>;
|
|
139
|
+
update(id: string, value: Partial<T>): Promise<T>;
|
|
140
|
+
replace(id: string, value: Partial<T>): Promise<T>;
|
|
141
|
+
delete(id: string): Promise<T>;
|
|
142
|
+
}
|
|
143
|
+
declare class BasicDBSDK<S extends DBSchema> {
|
|
144
|
+
private projectId;
|
|
145
|
+
private getToken;
|
|
146
|
+
private baseUrl;
|
|
147
|
+
private schema;
|
|
148
|
+
private tableNames;
|
|
149
|
+
constructor(config: SDKConfig<S>);
|
|
150
|
+
table<K extends keyof S["tables"] & string>(name: K): TableClient<TableData<S["tables"][K]>>;
|
|
151
|
+
get tables(): {
|
|
152
|
+
[K in keyof S["tables"]]: TableData<S["tables"][K]>;
|
|
153
|
+
};
|
|
154
|
+
fields<K extends keyof S["tables"] & string>(table: K): (keyof S["tables"][K]["fields"] & string)[];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export { BasicDBSDK, BasicProvider, useBasic };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,12 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
export { useLiveQuery as useQuery } from 'dexie-react-hooks';
|
|
4
4
|
|
|
5
|
+
interface BasicStorage {
|
|
6
|
+
get(key: string): Promise<string | null>;
|
|
7
|
+
set(key: string, value: string): Promise<void>;
|
|
8
|
+
remove(key: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
|
|
5
11
|
declare enum DBStatus {
|
|
6
12
|
LOADING = "LOADING",
|
|
7
13
|
OFFLINE = "OFFLINE",
|
|
@@ -19,23 +25,133 @@ type User = {
|
|
|
19
25
|
};
|
|
20
26
|
fullName?: string;
|
|
21
27
|
};
|
|
22
|
-
declare function BasicProvider({ children, project_id, schema, debug }: {
|
|
28
|
+
declare function BasicProvider({ children, project_id, schema, debug, storage }: {
|
|
23
29
|
children: React.ReactNode;
|
|
24
30
|
project_id?: string;
|
|
25
31
|
schema?: any;
|
|
26
32
|
debug?: boolean;
|
|
33
|
+
storage?: BasicStorage;
|
|
27
34
|
}): react_jsx_runtime.JSX.Element;
|
|
28
35
|
declare function useBasic(): {
|
|
29
36
|
unicorn: string;
|
|
30
37
|
isAuthReady: boolean;
|
|
31
38
|
isSignedIn: boolean;
|
|
32
39
|
user: User | null;
|
|
33
|
-
signout: () => void
|
|
34
|
-
signin: () => void
|
|
40
|
+
signout: () => Promise<void>;
|
|
41
|
+
signin: () => Promise<void>;
|
|
42
|
+
signinWithCode: (code: string, state?: string) => Promise<{
|
|
43
|
+
success: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
}>;
|
|
35
46
|
getToken: () => Promise<string>;
|
|
36
|
-
getSignInLink: () => string
|
|
47
|
+
getSignInLink: (redirectUri?: string) => Promise<string>;
|
|
37
48
|
db: any;
|
|
49
|
+
remoteDb: any;
|
|
38
50
|
dbStatus: DBStatus;
|
|
39
51
|
};
|
|
40
52
|
|
|
41
|
-
|
|
53
|
+
type FieldType = "string" | "boolean" | "number" | "json";
|
|
54
|
+
interface SchemaField {
|
|
55
|
+
type: FieldType;
|
|
56
|
+
indexed?: boolean;
|
|
57
|
+
}
|
|
58
|
+
interface TableSchema {
|
|
59
|
+
fields: Record<string, SchemaField>;
|
|
60
|
+
[key: string]: any;
|
|
61
|
+
}
|
|
62
|
+
interface DBSchema {
|
|
63
|
+
project_id: string;
|
|
64
|
+
version: number;
|
|
65
|
+
tables: Record<string, TableSchema>;
|
|
66
|
+
}
|
|
67
|
+
type OrderDirection = "asc" | "desc";
|
|
68
|
+
type FilterValue = string | number | boolean | null | string[];
|
|
69
|
+
interface OperatorFilter {
|
|
70
|
+
eq?: FilterValue;
|
|
71
|
+
neq?: FilterValue;
|
|
72
|
+
gt?: number | string;
|
|
73
|
+
gte?: number | string;
|
|
74
|
+
lt?: number | string;
|
|
75
|
+
lte?: number | string;
|
|
76
|
+
like?: string;
|
|
77
|
+
ilike?: string;
|
|
78
|
+
in?: string[] | number[];
|
|
79
|
+
is?: boolean | null;
|
|
80
|
+
not?: OperatorFilter;
|
|
81
|
+
}
|
|
82
|
+
type FilterCondition = FilterValue | OperatorFilter;
|
|
83
|
+
interface QueryOptions {
|
|
84
|
+
id?: string;
|
|
85
|
+
order?: string;
|
|
86
|
+
limit?: number;
|
|
87
|
+
offset?: number;
|
|
88
|
+
filters?: Record<string, FilterCondition>;
|
|
89
|
+
}
|
|
90
|
+
type FieldTypeToTS<T extends FieldType> = T extends "string" ? string : T extends "boolean" ? boolean : T extends "number" ? number : T extends "json" ? Record<string, any> : never;
|
|
91
|
+
type TableData<T extends TableSchema> = {
|
|
92
|
+
id: string;
|
|
93
|
+
created_at: string;
|
|
94
|
+
} & {
|
|
95
|
+
[K in keyof T["fields"]]: T["fields"][K] extends {
|
|
96
|
+
type: FieldType;
|
|
97
|
+
} ? FieldTypeToTS<T["fields"][K]["type"]> : never;
|
|
98
|
+
};
|
|
99
|
+
interface SDKConfig<S extends DBSchema> {
|
|
100
|
+
project_id: string;
|
|
101
|
+
token?: string;
|
|
102
|
+
getToken?: () => Promise<string>;
|
|
103
|
+
baseUrl?: string;
|
|
104
|
+
schema: S;
|
|
105
|
+
}
|
|
106
|
+
declare class QueryBuilder<T> {
|
|
107
|
+
private tableClient;
|
|
108
|
+
private tableSchema?;
|
|
109
|
+
private params;
|
|
110
|
+
constructor(tableClient: TableClient<T>, tableSchema?: TableSchema | undefined);
|
|
111
|
+
private reservedFields;
|
|
112
|
+
private validateField;
|
|
113
|
+
private validateOperator;
|
|
114
|
+
order(field: string, direction?: OrderDirection): QueryBuilder<T>;
|
|
115
|
+
filter(conditions: Record<string, FilterCondition>): QueryBuilder<T>;
|
|
116
|
+
limit(count: number): QueryBuilder<T>;
|
|
117
|
+
offset(count: number): QueryBuilder<T>;
|
|
118
|
+
then<TResult1 = T[], TResult2 = never>(onfulfilled?: ((value: T[]) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
|
|
119
|
+
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<T[] | TResult>;
|
|
120
|
+
finally(onfinally?: (() => void) | null): Promise<T[]>;
|
|
121
|
+
}
|
|
122
|
+
declare class TableClient<T> {
|
|
123
|
+
private baseUrl;
|
|
124
|
+
private projectId;
|
|
125
|
+
private token;
|
|
126
|
+
private table;
|
|
127
|
+
private getToken;
|
|
128
|
+
private schema?;
|
|
129
|
+
private tableSchema?;
|
|
130
|
+
constructor(baseUrl: string, projectId: string, token: string, table: string, getToken: () => Promise<string>, schema?: DBSchema | undefined);
|
|
131
|
+
private headers;
|
|
132
|
+
private handleRequest;
|
|
133
|
+
private buildQueryParams;
|
|
134
|
+
private addFilterParam;
|
|
135
|
+
executeQuery(options?: QueryOptions): Promise<T[]>;
|
|
136
|
+
getAll(): QueryBuilder<T>;
|
|
137
|
+
get(id: string): Promise<T>;
|
|
138
|
+
create(value: Partial<T>): Promise<T>;
|
|
139
|
+
update(id: string, value: Partial<T>): Promise<T>;
|
|
140
|
+
replace(id: string, value: Partial<T>): Promise<T>;
|
|
141
|
+
delete(id: string): Promise<T>;
|
|
142
|
+
}
|
|
143
|
+
declare class BasicDBSDK<S extends DBSchema> {
|
|
144
|
+
private projectId;
|
|
145
|
+
private getToken;
|
|
146
|
+
private baseUrl;
|
|
147
|
+
private schema;
|
|
148
|
+
private tableNames;
|
|
149
|
+
constructor(config: SDKConfig<S>);
|
|
150
|
+
table<K extends keyof S["tables"] & string>(name: K): TableClient<TableData<S["tables"][K]>>;
|
|
151
|
+
get tables(): {
|
|
152
|
+
[K in keyof S["tables"]]: TableData<S["tables"][K]>;
|
|
153
|
+
};
|
|
154
|
+
fields<K extends keyof S["tables"] & string>(table: K): (keyof S["tables"][K]["fields"] & string)[];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export { BasicDBSDK, BasicProvider, useBasic };
|