@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 CHANGED
@@ -1,15 +1,22 @@
1
1
  # 1.3.4
2
2
 
3
- ## 0.7.0-beta.0
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 schema
13
+ - storage adapater update
8
14
 
9
- ### Patch Changes
15
+ ## 0.7.0-beta.0
10
16
 
11
- - Updated dependencies
12
- - @basictech/schema@0.7.0-beta.0
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
- export { BasicProvider, useBasic };
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
- export { BasicProvider, useBasic };
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 };