@objectstack/objectql 0.6.1 → 0.7.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 +20 -0
- package/dist/engine.d.ts +137 -47
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +238 -155
- package/dist/plugin.js +5 -10
- package/dist/protocol.d.ts +103 -33
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +224 -46
- package/package.json +5 -5
- package/src/engine.ts +256 -176
- package/src/plugin.ts +5 -5
- package/src/protocol.ts +255 -49
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @objectstack/objectql
|
|
2
2
|
|
|
3
|
+
## 0.7.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- fb41cc0: Patch release: Updated documentation and JSON schemas
|
|
8
|
+
- Updated dependencies [fb41cc0]
|
|
9
|
+
- @objectstack/spec@0.7.2
|
|
10
|
+
- @objectstack/core@0.7.2
|
|
11
|
+
- @objectstack/types@0.7.2
|
|
12
|
+
|
|
13
|
+
## 0.7.1
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Patch release for maintenance and stability improvements
|
|
18
|
+
- Updated dependencies
|
|
19
|
+
- @objectstack/spec@0.7.1
|
|
20
|
+
- @objectstack/types@0.7.1
|
|
21
|
+
- @objectstack/core@0.7.1
|
|
22
|
+
|
|
3
23
|
## 0.6.1
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/engine.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { HookContext } from '@objectstack/spec/data';
|
|
2
|
-
import {
|
|
3
|
-
import { DriverInterface, IDataEngine,
|
|
2
|
+
import { DataEngineQueryOptions, DataEngineInsertOptions, DataEngineUpdateOptions, DataEngineDeleteOptions, DataEngineAggregateOptions, DataEngineCountOptions } from '@objectstack/spec/data';
|
|
3
|
+
import { DriverInterface, IDataEngine, Logger } from '@objectstack/core';
|
|
4
4
|
export type HookHandler = (context: HookContext) => Promise<void> | void;
|
|
5
5
|
/**
|
|
6
6
|
* Host Context provided to plugins (Internal ObjectQL Plugin System)
|
|
7
7
|
*/
|
|
8
8
|
export interface ObjectQLHostContext {
|
|
9
9
|
ql: ObjectQL;
|
|
10
|
-
logger:
|
|
10
|
+
logger: Logger;
|
|
11
11
|
[key: string]: any;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
@@ -18,6 +18,7 @@ export interface ObjectQLHostContext {
|
|
|
18
18
|
export declare class ObjectQL implements IDataEngine {
|
|
19
19
|
private drivers;
|
|
20
20
|
private defaultDriver;
|
|
21
|
+
private logger;
|
|
21
22
|
private hooks;
|
|
22
23
|
private hostContext;
|
|
23
24
|
constructor(hostContext?: Record<string, any>);
|
|
@@ -32,7 +33,10 @@ export declare class ObjectQL implements IDataEngine {
|
|
|
32
33
|
*/
|
|
33
34
|
registerHook(event: string, handler: HookHandler): void;
|
|
34
35
|
triggerHooks(event: string, context: HookContext): Promise<void>;
|
|
35
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Register contribution (Manifest)
|
|
38
|
+
*/
|
|
39
|
+
registerApp(manifest: any): void;
|
|
36
40
|
/**
|
|
37
41
|
* Register a new storage driver
|
|
38
42
|
*/
|
|
@@ -42,12 +46,13 @@ export declare class ObjectQL implements IDataEngine {
|
|
|
42
46
|
*/
|
|
43
47
|
getSchema(objectName: string): {
|
|
44
48
|
fields: Record<string, {
|
|
45
|
-
type: "number" | "boolean" | "code" | "date" | "text" | "textarea" | "email" | "url" | "phone" | "password" | "markdown" | "html" | "richtext" | "currency" | "percent" | "datetime" | "time" | "toggle" | "select" | "multiselect" | "radio" | "checkboxes" | "
|
|
49
|
+
type: "number" | "boolean" | "code" | "date" | "lookup" | "text" | "textarea" | "email" | "url" | "phone" | "password" | "markdown" | "html" | "richtext" | "currency" | "percent" | "datetime" | "time" | "toggle" | "select" | "multiselect" | "radio" | "checkboxes" | "master_detail" | "tree" | "image" | "file" | "avatar" | "video" | "audio" | "formula" | "summary" | "autonumber" | "location" | "address" | "json" | "color" | "rating" | "slider" | "signature" | "qrcode" | "progress" | "tags" | "vector";
|
|
46
50
|
required: boolean;
|
|
47
51
|
searchable: boolean;
|
|
48
52
|
multiple: boolean;
|
|
49
53
|
unique: boolean;
|
|
50
54
|
deleteBehavior: "set_null" | "cascade" | "restrict";
|
|
55
|
+
auditTrail: boolean;
|
|
51
56
|
hidden: boolean;
|
|
52
57
|
readonly: boolean;
|
|
53
58
|
encryption: boolean;
|
|
@@ -59,28 +64,45 @@ export declare class ObjectQL implements IDataEngine {
|
|
|
59
64
|
color?: string | undefined;
|
|
60
65
|
default?: boolean | undefined;
|
|
61
66
|
}[] | undefined;
|
|
67
|
+
expression?: string | undefined;
|
|
68
|
+
defaultValue?: any;
|
|
62
69
|
min?: number | undefined;
|
|
63
70
|
max?: number | undefined;
|
|
71
|
+
language?: string | undefined;
|
|
72
|
+
encryptionConfig?: {
|
|
73
|
+
enabled: boolean;
|
|
74
|
+
algorithm: "aes-256-gcm" | "aes-256-cbc" | "chacha20-poly1305";
|
|
75
|
+
keyManagement: {
|
|
76
|
+
provider: "local" | "aws-kms" | "azure-key-vault" | "gcp-kms" | "hashicorp-vault";
|
|
77
|
+
keyId?: string | undefined;
|
|
78
|
+
rotationPolicy?: {
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
frequencyDays: number;
|
|
81
|
+
retainOldVersions: number;
|
|
82
|
+
autoRotate: boolean;
|
|
83
|
+
} | undefined;
|
|
84
|
+
};
|
|
85
|
+
scope: "table" | "field" | "database" | "record";
|
|
86
|
+
deterministicEncryption: boolean;
|
|
87
|
+
searchableEncryption: boolean;
|
|
88
|
+
} | undefined;
|
|
64
89
|
formula?: string | undefined;
|
|
65
90
|
label?: string | undefined;
|
|
66
91
|
precision?: number | undefined;
|
|
67
92
|
name?: string | undefined;
|
|
68
93
|
description?: string | undefined;
|
|
69
94
|
format?: string | undefined;
|
|
70
|
-
defaultValue?: any;
|
|
71
95
|
maxLength?: number | undefined;
|
|
72
96
|
minLength?: number | undefined;
|
|
73
97
|
scale?: number | undefined;
|
|
74
98
|
reference?: string | undefined;
|
|
75
99
|
referenceFilters?: string[] | undefined;
|
|
76
100
|
writeRequiresMasterRead?: boolean | undefined;
|
|
77
|
-
expression?: string | undefined;
|
|
78
101
|
summaryOperations?: {
|
|
79
102
|
object: string;
|
|
80
103
|
function: "count" | "sum" | "avg" | "min" | "max";
|
|
81
104
|
field: string;
|
|
82
105
|
} | undefined;
|
|
83
|
-
language?: string | undefined;
|
|
84
106
|
theme?: string | undefined;
|
|
85
107
|
lineNumbers?: boolean | undefined;
|
|
86
108
|
maxRating?: number | undefined;
|
|
@@ -110,29 +132,122 @@ export declare class ObjectQL implements IDataEngine {
|
|
|
110
132
|
indexed: boolean;
|
|
111
133
|
indexType?: "flat" | "hnsw" | "ivfflat" | undefined;
|
|
112
134
|
} | undefined;
|
|
135
|
+
fileAttachmentConfig?: {
|
|
136
|
+
virusScan: boolean;
|
|
137
|
+
virusScanOnUpload: boolean;
|
|
138
|
+
quarantineOnThreat: boolean;
|
|
139
|
+
allowMultiple: boolean;
|
|
140
|
+
allowReplace: boolean;
|
|
141
|
+
allowDelete: boolean;
|
|
142
|
+
requireUpload: boolean;
|
|
143
|
+
extractMetadata: boolean;
|
|
144
|
+
extractText: boolean;
|
|
145
|
+
versioningEnabled: boolean;
|
|
146
|
+
publicRead: boolean;
|
|
147
|
+
presignedUrlExpiry: number;
|
|
148
|
+
minSize?: number | undefined;
|
|
149
|
+
maxSize?: number | undefined;
|
|
150
|
+
allowedTypes?: string[] | undefined;
|
|
151
|
+
blockedTypes?: string[] | undefined;
|
|
152
|
+
allowedMimeTypes?: string[] | undefined;
|
|
153
|
+
blockedMimeTypes?: string[] | undefined;
|
|
154
|
+
virusScanProvider?: "custom" | "clamav" | "virustotal" | "metadefender" | undefined;
|
|
155
|
+
storageProvider?: string | undefined;
|
|
156
|
+
storageBucket?: string | undefined;
|
|
157
|
+
storagePrefix?: string | undefined;
|
|
158
|
+
imageValidation?: {
|
|
159
|
+
autoRotate: boolean;
|
|
160
|
+
generateThumbnails: boolean;
|
|
161
|
+
preserveMetadata: boolean;
|
|
162
|
+
minWidth?: number | undefined;
|
|
163
|
+
maxWidth?: number | undefined;
|
|
164
|
+
minHeight?: number | undefined;
|
|
165
|
+
maxHeight?: number | undefined;
|
|
166
|
+
aspectRatio?: string | undefined;
|
|
167
|
+
thumbnailSizes?: {
|
|
168
|
+
name: string;
|
|
169
|
+
width: number;
|
|
170
|
+
height: number;
|
|
171
|
+
crop: boolean;
|
|
172
|
+
}[] | undefined;
|
|
173
|
+
} | undefined;
|
|
174
|
+
maxVersions?: number | undefined;
|
|
175
|
+
} | undefined;
|
|
176
|
+
maskingRule?: {
|
|
177
|
+
field: string;
|
|
178
|
+
strategy: "partial" | "hash" | "redact" | "tokenize" | "randomize" | "nullify" | "substitute";
|
|
179
|
+
preserveFormat: boolean;
|
|
180
|
+
preserveLength: boolean;
|
|
181
|
+
pattern?: string | undefined;
|
|
182
|
+
roles?: string[] | undefined;
|
|
183
|
+
exemptRoles?: string[] | undefined;
|
|
184
|
+
} | undefined;
|
|
185
|
+
dependencies?: string[] | undefined;
|
|
186
|
+
cached?: {
|
|
187
|
+
enabled: boolean;
|
|
188
|
+
ttl: number;
|
|
189
|
+
invalidateOn: string[];
|
|
190
|
+
} | undefined;
|
|
191
|
+
dataQuality?: {
|
|
192
|
+
uniqueness: boolean;
|
|
193
|
+
completeness: number;
|
|
194
|
+
accuracy?: {
|
|
195
|
+
source: string;
|
|
196
|
+
threshold: number;
|
|
197
|
+
} | undefined;
|
|
198
|
+
} | undefined;
|
|
113
199
|
}>;
|
|
114
200
|
name: string;
|
|
115
201
|
active: boolean;
|
|
116
202
|
isSystem: boolean;
|
|
117
203
|
abstract: boolean;
|
|
118
204
|
datasource: string;
|
|
119
|
-
tags?: string[] | undefined;
|
|
120
|
-
label?: string | undefined;
|
|
121
|
-
description?: string | undefined;
|
|
122
205
|
search?: {
|
|
123
206
|
fields: string[];
|
|
124
207
|
displayFields?: string[] | undefined;
|
|
125
208
|
filters?: string[] | undefined;
|
|
126
209
|
} | undefined;
|
|
210
|
+
tags?: string[] | undefined;
|
|
211
|
+
label?: string | undefined;
|
|
212
|
+
description?: string | undefined;
|
|
127
213
|
pluralLabel?: string | undefined;
|
|
128
214
|
icon?: string | undefined;
|
|
129
215
|
tableName?: string | undefined;
|
|
130
216
|
indexes?: {
|
|
217
|
+
type: "hash" | "btree" | "gin" | "gist" | "fulltext";
|
|
131
218
|
fields: string[];
|
|
132
|
-
|
|
219
|
+
unique: boolean;
|
|
220
|
+
partial?: string | undefined;
|
|
133
221
|
name?: string | undefined;
|
|
134
|
-
unique?: boolean | undefined;
|
|
135
222
|
}[] | undefined;
|
|
223
|
+
tenancy?: {
|
|
224
|
+
enabled: boolean;
|
|
225
|
+
strategy: "shared" | "isolated" | "hybrid";
|
|
226
|
+
tenantField: string;
|
|
227
|
+
crossTenantAccess: boolean;
|
|
228
|
+
} | undefined;
|
|
229
|
+
softDelete?: {
|
|
230
|
+
enabled: boolean;
|
|
231
|
+
field: string;
|
|
232
|
+
cascadeDelete: boolean;
|
|
233
|
+
} | undefined;
|
|
234
|
+
versioning?: {
|
|
235
|
+
enabled: boolean;
|
|
236
|
+
strategy: "snapshot" | "delta" | "event-sourcing";
|
|
237
|
+
versionField: string;
|
|
238
|
+
retentionDays?: number | undefined;
|
|
239
|
+
} | undefined;
|
|
240
|
+
partitioning?: {
|
|
241
|
+
enabled: boolean;
|
|
242
|
+
strategy: "hash" | "range" | "list";
|
|
243
|
+
key: string;
|
|
244
|
+
interval?: string | undefined;
|
|
245
|
+
} | undefined;
|
|
246
|
+
cdc?: {
|
|
247
|
+
enabled: boolean;
|
|
248
|
+
events: ("insert" | "update" | "delete")[];
|
|
249
|
+
destination: string;
|
|
250
|
+
} | undefined;
|
|
136
251
|
validations?: any[] | undefined;
|
|
137
252
|
titleFormat?: string | undefined;
|
|
138
253
|
compactLayout?: string[] | undefined;
|
|
@@ -146,7 +261,7 @@ export declare class ObjectQL implements IDataEngine {
|
|
|
146
261
|
trash: boolean;
|
|
147
262
|
mru: boolean;
|
|
148
263
|
clone: boolean;
|
|
149
|
-
apiMethods?: ("update" | "delete" | "get" | "list" | "create" | "upsert" | "bulk" | "aggregate" | "history" | "
|
|
264
|
+
apiMethods?: ("search" | "update" | "delete" | "get" | "list" | "create" | "upsert" | "bulk" | "aggregate" | "history" | "restore" | "purge" | "import" | "export")[] | undefined;
|
|
150
265
|
} | undefined;
|
|
151
266
|
} | undefined;
|
|
152
267
|
/**
|
|
@@ -158,39 +273,14 @@ export declare class ObjectQL implements IDataEngine {
|
|
|
158
273
|
*/
|
|
159
274
|
init(): Promise<void>;
|
|
160
275
|
destroy(): Promise<void>;
|
|
161
|
-
|
|
162
|
-
* Find records matching a query (IDataEngine interface)
|
|
163
|
-
*
|
|
164
|
-
* @param object - Object name
|
|
165
|
-
* @param query - Query options (IDataEngine format)
|
|
166
|
-
* @returns Promise resolving to array of records
|
|
167
|
-
*/
|
|
276
|
+
private toQueryAST;
|
|
168
277
|
find(object: string, query?: DataEngineQueryOptions): Promise<any[]>;
|
|
169
|
-
findOne(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
*/
|
|
177
|
-
insert(object: string, data: any): Promise<any>;
|
|
178
|
-
/**
|
|
179
|
-
* Update a record by ID (IDataEngine interface)
|
|
180
|
-
*
|
|
181
|
-
* @param object - Object name
|
|
182
|
-
* @param id - Record ID
|
|
183
|
-
* @param data - Updated data
|
|
184
|
-
* @returns Promise resolving to the updated record
|
|
185
|
-
*/
|
|
186
|
-
update(object: string, id: any, data: any): Promise<any>;
|
|
187
|
-
/**
|
|
188
|
-
* Delete a record by ID (IDataEngine interface)
|
|
189
|
-
*
|
|
190
|
-
* @param object - Object name
|
|
191
|
-
* @param id - Record ID
|
|
192
|
-
* @returns Promise resolving to true if deleted, false otherwise
|
|
193
|
-
*/
|
|
194
|
-
delete(object: string, id: any): Promise<boolean>;
|
|
278
|
+
findOne(objectName: string, query?: DataEngineQueryOptions): Promise<any>;
|
|
279
|
+
insert(object: string, data: any | any[], options?: DataEngineInsertOptions): Promise<any>;
|
|
280
|
+
update(object: string, data: any, options?: DataEngineUpdateOptions): Promise<any>;
|
|
281
|
+
delete(object: string, options?: DataEngineDeleteOptions): Promise<any>;
|
|
282
|
+
count(object: string, query?: DataEngineCountOptions): Promise<number>;
|
|
283
|
+
aggregate(object: string, query: DataEngineAggregateOptions): Promise<any[]>;
|
|
284
|
+
execute(command: any, options?: Record<string, any>): Promise<any>;
|
|
195
285
|
}
|
|
196
286
|
//# sourceMappingURL=engine.d.ts.map
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|