@kidus.dev/flowdb 1.0.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.
Files changed (74) hide show
  1. package/README.md +15 -0
  2. package/dist/core/blob/blob.d.ts +25 -0
  3. package/dist/core/blob/blob.d.ts.map +1 -0
  4. package/dist/core/blob/blob.js +57 -0
  5. package/dist/core/blob/blob_disk_driver.d.ts +27 -0
  6. package/dist/core/blob/blob_disk_driver.d.ts.map +1 -0
  7. package/dist/core/blob/blob_disk_driver.js +179 -0
  8. package/dist/core/blob/blob_storage.d.ts +90 -0
  9. package/dist/core/blob/blob_storage.d.ts.map +1 -0
  10. package/dist/core/blob/blob_storage.js +248 -0
  11. package/dist/core/collection/collection.d.ts +99 -0
  12. package/dist/core/collection/collection.d.ts.map +1 -0
  13. package/dist/core/collection/collection.js +226 -0
  14. package/dist/core/collection/document.d.ts +24 -0
  15. package/dist/core/collection/document.d.ts.map +1 -0
  16. package/dist/core/collection/document.js +86 -0
  17. package/dist/core/collection/driver/collection_file_driver.d.ts +20 -0
  18. package/dist/core/collection/driver/collection_file_driver.d.ts.map +1 -0
  19. package/dist/core/collection/driver/collection_file_driver.js +90 -0
  20. package/dist/core/collection/driver/collection_operations.d.ts +43 -0
  21. package/dist/core/collection/driver/collection_operations.d.ts.map +1 -0
  22. package/dist/core/collection/driver/collection_operations.js +278 -0
  23. package/dist/core/collection/query/compares.d.ts +90 -0
  24. package/dist/core/collection/query/compares.d.ts.map +1 -0
  25. package/dist/core/collection/query/compares.js +362 -0
  26. package/dist/core/collection/query/filtering.d.ts +14 -0
  27. package/dist/core/collection/query/filtering.d.ts.map +1 -0
  28. package/dist/core/collection/query/filtering.js +176 -0
  29. package/dist/core/collection/query/query_builder.d.ts +145 -0
  30. package/dist/core/collection/query/query_builder.d.ts.map +1 -0
  31. package/dist/core/collection/query/query_builder.js +196 -0
  32. package/dist/core/collection/query/query_executor.d.ts +87 -0
  33. package/dist/core/collection/query/query_executor.d.ts.map +1 -0
  34. package/dist/core/collection/query/query_executor.js +348 -0
  35. package/dist/core/collection/query/relation.d.ts +29 -0
  36. package/dist/core/collection/query/relation.d.ts.map +1 -0
  37. package/dist/core/collection/query/relation.js +40 -0
  38. package/dist/core/database/backup.d.ts +26 -0
  39. package/dist/core/database/backup.d.ts.map +1 -0
  40. package/dist/core/database/backup.js +114 -0
  41. package/dist/core/database/database.d.ts +57 -0
  42. package/dist/core/database/database.d.ts.map +1 -0
  43. package/dist/core/database/database.js +179 -0
  44. package/dist/core/database/database_file_driver.d.ts +27 -0
  45. package/dist/core/database/database_file_driver.d.ts.map +1 -0
  46. package/dist/core/database/database_file_driver.js +135 -0
  47. package/dist/core/store/store.d.ts +24 -0
  48. package/dist/core/store/store.d.ts.map +1 -0
  49. package/dist/core/store/store.js +54 -0
  50. package/dist/core/store/store_file_driver.d.ts +26 -0
  51. package/dist/core/store/store_file_driver.d.ts.map +1 -0
  52. package/dist/core/store/store_file_driver.js +87 -0
  53. package/dist/tools/encryptor.d.ts +17 -0
  54. package/dist/tools/encryptor.d.ts.map +1 -0
  55. package/dist/tools/encryptor.js +80 -0
  56. package/dist/tools/format.d.ts +10 -0
  57. package/dist/tools/format.d.ts.map +1 -0
  58. package/dist/tools/format.js +40 -0
  59. package/dist/tools/index.d.ts +7 -0
  60. package/dist/tools/index.d.ts.map +1 -0
  61. package/dist/tools/index.js +6 -0
  62. package/dist/tools/json.d.ts +19 -0
  63. package/dist/tools/json.d.ts.map +1 -0
  64. package/dist/tools/json.js +232 -0
  65. package/dist/tools/performance.d.ts +20 -0
  66. package/dist/tools/performance.d.ts.map +1 -0
  67. package/dist/tools/performance.js +53 -0
  68. package/dist/tools/print_colored.d.ts +47 -0
  69. package/dist/tools/print_colored.d.ts.map +1 -0
  70. package/dist/tools/print_colored.js +119 -0
  71. package/dist/tools/random.d.ts +46 -0
  72. package/dist/tools/random.d.ts.map +1 -0
  73. package/dist/tools/random.js +214 -0
  74. package/package.json +40 -0
@@ -0,0 +1,99 @@
1
+ import Document from "./document";
2
+ import QueryBuilder from "./query/query_builder";
3
+ import Relation from "./query/relation";
4
+ type BetweenArg = [any, any];
5
+ interface WhereOptions {
6
+ eq?: any;
7
+ neq?: any;
8
+ gt?: any;
9
+ gte?: any;
10
+ lt?: any;
11
+ lte?: any;
12
+ contains?: any;
13
+ doesNotContain?: any;
14
+ startsWith?: string;
15
+ endsWith?: string;
16
+ regexMatch?: string;
17
+ between?: BetweenArg;
18
+ betweenStartInclusive?: BetweenArg;
19
+ betweenEndInclusive?: BetweenArg;
20
+ betweenBothInclusive?: BetweenArg;
21
+ isNull?: boolean;
22
+ isNotNull?: boolean;
23
+ isEmpty?: boolean;
24
+ isNotEmpty?: boolean;
25
+ filter?: (value: any) => boolean;
26
+ }
27
+ interface RelationOptions {
28
+ localKey?: string;
29
+ name?: string;
30
+ }
31
+ export default class Collection {
32
+ private readonly _name;
33
+ private readonly _collectionOperations;
34
+ private readonly _database?;
35
+ private readonly _relations;
36
+ constructor({ name, path: collectionPath, encrypted, database, }: {
37
+ name: string;
38
+ path: string;
39
+ encrypted: boolean;
40
+ database?: any;
41
+ });
42
+ get name(): string;
43
+ get database(): any;
44
+ static fromName(name: string, database: any): Collection;
45
+ private get _builder();
46
+ get builder(): QueryBuilder;
47
+ hasMany(foreignCollection: Collection, foreignKey: string, { localKey, name }?: RelationOptions): void;
48
+ manyToMany(foreignCollection: Collection, foreignKey: string, { localKey, name }?: RelationOptions): void;
49
+ hasOne(foreignCollection: Collection, foreignKey: string, { localKey, name }?: RelationOptions): void;
50
+ get relations(): Record<string, Relation>;
51
+ add(data: Record<string, any>): Promise<Document>;
52
+ addSync(data: Record<string, any>): Document;
53
+ addMany(data: Array<Record<string, any>>): Promise<Document[]>;
54
+ addManySync(data: Array<Record<string, any>>): Document[];
55
+ insert(data: Record<string, any>): Promise<Document>;
56
+ insertSync(data: Record<string, any>): Document;
57
+ insertMany(data: Array<Record<string, any>>): Promise<Document[]>;
58
+ insertManySync(data: Array<Record<string, any>>): Document[];
59
+ where(field: string, options?: WhereOptions): QueryBuilder;
60
+ getById(id: string): Promise<Document | null>;
61
+ getByIdSync(id: string): Document | null;
62
+ getAt(index: number): Promise<Document | undefined>;
63
+ getAtSync(index: number): Document | undefined;
64
+ getRandom(): Promise<Document | null>;
65
+ getRandomSync(): Document | null;
66
+ getRandomMany(count?: number): Promise<Document[]>;
67
+ getRandomManySync(count?: number): Document[];
68
+ getAll(): Promise<Document[]>;
69
+ getAllSync(): Document[];
70
+ getFirst(): Promise<Document | undefined>;
71
+ getFirstSync(): Document | undefined;
72
+ getLast(): Promise<Document | undefined>;
73
+ getLastSync(): Document | undefined;
74
+ count(): Promise<number>;
75
+ countSync(): number;
76
+ isEmpty(): Promise<boolean>;
77
+ isEmptySync(): boolean;
78
+ isNotEmpty(): Promise<boolean>;
79
+ isNotEmptySync(): boolean;
80
+ updateById(id: string, data: Record<string, any>): Promise<Document | null>;
81
+ updateByIdSync(id: string, data: Record<string, any>): Document | null;
82
+ deleteById(id: string): Promise<Document | null>;
83
+ deleteByIdSync(id: string): Document | null;
84
+ clear(): Promise<void>;
85
+ clearSync(): void;
86
+ reset(): Promise<void>;
87
+ resetSync(): void;
88
+ drop(): Promise<void>;
89
+ dropSync(): void;
90
+ size(): Promise<number>;
91
+ sizeSync(): number;
92
+ sizeAsHumanReadable(): Promise<string>;
93
+ sizeAsHumanReadableSync(): string;
94
+ exportAsCSV(): Promise<string>;
95
+ exportAsCSVSync(): string;
96
+ toString(): string;
97
+ }
98
+ export {};
99
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../../src/core/collection/collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import * as path from "path";
2
+ import { Json, Format } from "../../tools";
3
+ import Document from "./document";
4
+ import CollectionOperations from "./driver/collection_operations";
5
+ import QueryBuilder from "./query/query_builder";
6
+ import Relation from "./query/relation";
7
+ export default class Collection {
8
+ _name;
9
+ _collectionOperations;
10
+ _database;
11
+ _relations = {};
12
+ constructor({ name, path: collectionPath, encrypted, database, }) {
13
+ this._name = name;
14
+ this._collectionOperations = new CollectionOperations({
15
+ path: collectionPath,
16
+ encrypted,
17
+ });
18
+ this._collectionOperations.createSync();
19
+ this._database = database;
20
+ }
21
+ get name() {
22
+ return this._name;
23
+ }
24
+ get database() {
25
+ return this._database;
26
+ }
27
+ static fromName(name, database) {
28
+ return new Collection({
29
+ name,
30
+ path: path.join(database.path, "collections", name),
31
+ encrypted: database.encrypted,
32
+ database,
33
+ });
34
+ }
35
+ get _builder() {
36
+ return new QueryBuilder({
37
+ collection: this,
38
+ collectionOperations: this._collectionOperations,
39
+ });
40
+ }
41
+ get builder() {
42
+ return this._builder;
43
+ }
44
+ // Relations
45
+ hasMany(foreignCollection, foreignKey, { localKey = "id", name } = {}) {
46
+ const relation = new Relation({
47
+ name: name ?? foreignCollection.name,
48
+ localCollection: this,
49
+ localKey,
50
+ foreignCollection,
51
+ foreignKey,
52
+ type: "oneToMany",
53
+ });
54
+ this._relations[relation.name] = relation;
55
+ }
56
+ manyToMany(foreignCollection, foreignKey, { localKey = "id", name } = {}) {
57
+ const relation = new Relation({
58
+ name: name ?? foreignCollection.name,
59
+ localCollection: this,
60
+ localKey,
61
+ foreignCollection,
62
+ foreignKey,
63
+ type: "manyToMany",
64
+ });
65
+ this._relations[relation.name] = relation;
66
+ }
67
+ hasOne(foreignCollection, foreignKey, { localKey = "id", name } = {}) {
68
+ const relation = new Relation({
69
+ name: name ?? foreignCollection.name,
70
+ localCollection: this,
71
+ localKey,
72
+ foreignCollection,
73
+ foreignKey,
74
+ type: "oneToOne",
75
+ });
76
+ this._relations[relation.name] = relation;
77
+ }
78
+ get relations() {
79
+ return this._relations;
80
+ }
81
+ // CREATE
82
+ async add(data) {
83
+ return await this._builder.executor.add(data);
84
+ }
85
+ addSync(data) {
86
+ return this._builder.executor.addSync(data);
87
+ }
88
+ async addMany(data) {
89
+ return await this._builder.executor.addMany(data);
90
+ }
91
+ addManySync(data) {
92
+ return this._builder.executor.addManySync(data);
93
+ }
94
+ async insert(data) {
95
+ return await this.add(data);
96
+ }
97
+ insertSync(data) {
98
+ return this.addSync(data);
99
+ }
100
+ async insertMany(data) {
101
+ return await this.addMany(data);
102
+ }
103
+ insertManySync(data) {
104
+ return this.addManySync(data);
105
+ }
106
+ // READ
107
+ where(field, options = {}) {
108
+ return this._builder.where(field, options);
109
+ }
110
+ async getById(id) {
111
+ return await this._collectionOperations.getById(id);
112
+ }
113
+ getByIdSync(id) {
114
+ return this._collectionOperations.getByIdSync(id);
115
+ }
116
+ async getAt(index) {
117
+ return await this._builder.getAt(index);
118
+ }
119
+ getAtSync(index) {
120
+ return this._builder.getAtSync(index);
121
+ }
122
+ async getRandom() {
123
+ return await this._collectionOperations.getRandom();
124
+ }
125
+ getRandomSync() {
126
+ return this._collectionOperations.getRandomSync();
127
+ }
128
+ async getRandomMany(count = 1) {
129
+ return await this._collectionOperations.getRandomMany(count);
130
+ }
131
+ getRandomManySync(count = 1) {
132
+ return this._collectionOperations.getRandomManySync(count);
133
+ }
134
+ async getAll() {
135
+ return await this._builder.get();
136
+ }
137
+ getAllSync() {
138
+ return this._builder.getSync();
139
+ }
140
+ async getFirst() {
141
+ return await this._builder.getFirst();
142
+ }
143
+ getFirstSync() {
144
+ return this._builder.getFirstSync();
145
+ }
146
+ async getLast() {
147
+ return await this._builder.getLast();
148
+ }
149
+ getLastSync() {
150
+ return this._builder.getLastSync();
151
+ }
152
+ async count() {
153
+ return await this._builder.count();
154
+ }
155
+ countSync() {
156
+ return this._builder.countSync();
157
+ }
158
+ async isEmpty() {
159
+ return (await this.getAll()).length === 0;
160
+ }
161
+ isEmptySync() {
162
+ return this.getAllSync().length === 0;
163
+ }
164
+ async isNotEmpty() {
165
+ return (await this.getAll()).length !== 0;
166
+ }
167
+ isNotEmptySync() {
168
+ return this.getAllSync().length !== 0;
169
+ }
170
+ // UPDATE
171
+ async updateById(id, data) {
172
+ return await this._collectionOperations.updateOneRecordById(id, data);
173
+ }
174
+ updateByIdSync(id, data) {
175
+ return this._collectionOperations.updateOneRecordByIdSync(id, data);
176
+ }
177
+ // DELETE
178
+ async deleteById(id) {
179
+ return await this._collectionOperations.deleteById(id);
180
+ }
181
+ deleteByIdSync(id) {
182
+ return this._collectionOperations.deleteByIdSync(id);
183
+ }
184
+ async clear() {
185
+ await this._collectionOperations.clear();
186
+ }
187
+ clearSync() {
188
+ this._collectionOperations.clearSync();
189
+ }
190
+ async reset() {
191
+ await this.clear();
192
+ }
193
+ resetSync() {
194
+ this.clearSync();
195
+ }
196
+ async drop() {
197
+ await this._collectionOperations.delete();
198
+ }
199
+ dropSync() {
200
+ this._collectionOperations.deleteSync();
201
+ }
202
+ // INFO
203
+ async size() {
204
+ return await this._collectionOperations.size();
205
+ }
206
+ sizeSync() {
207
+ return this._collectionOperations.sizeSync();
208
+ }
209
+ async sizeAsHumanReadable() {
210
+ return Format.sizeToHumanReadable(await this.size());
211
+ }
212
+ sizeAsHumanReadableSync() {
213
+ return Format.sizeToHumanReadable(this.sizeSync());
214
+ }
215
+ // EXPORT
216
+ async exportAsCSV() {
217
+ const records = await this.getAll();
218
+ return Json.mapToCSV(records.map((e) => e.data));
219
+ }
220
+ exportAsCSVSync() {
221
+ return Json.mapToCSV(this.getAllSync().map((e) => e.data));
222
+ }
223
+ toString() {
224
+ return `Collection [ ${this._name} • ${this.sizeAsHumanReadableSync()} • ${this._builder.countSync()} records ]`;
225
+ }
226
+ }
@@ -0,0 +1,24 @@
1
+ export default class Document {
2
+ private _id;
3
+ private _data;
4
+ constructor({ id, data }: {
5
+ id: string;
6
+ data: Record<string, any>;
7
+ });
8
+ get id(): string;
9
+ get data(): Record<string, any>;
10
+ get(key: string): any;
11
+ set(key: string, value: any): void;
12
+ containsKey(key: string): boolean;
13
+ containsValue(value: any): boolean;
14
+ get keys(): string[];
15
+ get values(): any[];
16
+ static fromJson({ id, data, }: {
17
+ id?: string;
18
+ data: Record<string, any>;
19
+ }): Document;
20
+ format(indent?: number): string;
21
+ private _getNested;
22
+ private _update;
23
+ }
24
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/core/collection/document.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAsB;gBAEvB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE;IAKnE,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAE9B;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAIrB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAIlC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIjC,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAIlC,IAAI,IAAI,IAAI,MAAM,EAAE,CAEnB;IAED,IAAI,MAAM,IAAI,GAAG,EAAE,CAElB;IAED,MAAM,CAAC,QAAQ,CAAC,EACd,EAAE,EACF,IAAI,GACL,EAAE;QACD,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC3B,GAAG,QAAQ;IAMZ,MAAM,CAAC,MAAM,GAAE,MAAU,GAAG,MAAM;IAoClC,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,OAAO;CAkBhB"}
@@ -0,0 +1,86 @@
1
+ import { Json, Random } from "../../tools";
2
+ export default class Document {
3
+ _id;
4
+ _data;
5
+ constructor({ id, data }) {
6
+ this._id = id;
7
+ this._data = data;
8
+ }
9
+ get id() {
10
+ return this._id;
11
+ }
12
+ get data() {
13
+ return this._data;
14
+ }
15
+ get(key) {
16
+ return this._getNested(this._data, key);
17
+ }
18
+ set(key, value) {
19
+ this._update(this._data, key, value);
20
+ }
21
+ containsKey(key) {
22
+ return Object.prototype.hasOwnProperty.call(this._data, key);
23
+ }
24
+ containsValue(value) {
25
+ return Object.values(this._data).includes(value);
26
+ }
27
+ get keys() {
28
+ return Object.keys(this._data);
29
+ }
30
+ get values() {
31
+ return Object.values(this._data);
32
+ }
33
+ static fromJson({ id, data, }) {
34
+ const document_id = id ?? data["__id"] ?? Random.uuid();
35
+ return new Document({ id: document_id, data });
36
+ }
37
+ // FORMAT
38
+ format(indent = 0) {
39
+ const formatValue = (value, indent) => {
40
+ if (value instanceof Document) {
41
+ const docStr = value
42
+ .format(indent + 1)
43
+ .split("\n")
44
+ .map((line) => " " + line)
45
+ .join("\n");
46
+ return docStr;
47
+ }
48
+ if (Array.isArray(value) && value.every((v) => v instanceof Document)) {
49
+ const listStr = value
50
+ .map((item) => item
51
+ .format(indent + 1)
52
+ .split("\n")
53
+ .map((line) => " " + line)
54
+ .join("\n"))
55
+ .join(",\n ");
56
+ return `(${value.length}) [\n${listStr}\n ]`;
57
+ }
58
+ return JSON.stringify(value);
59
+ };
60
+ const entries = Object.entries(this._data)
61
+ .map(([k, v]) => {
62
+ return `${" ".repeat(indent)}${k} => ${formatValue(v, indent)}`;
63
+ })
64
+ .join(",\n ");
65
+ return `{\n ${entries}\n${" ".repeat(indent)}}`;
66
+ }
67
+ // Utility for get/set with dot-notation
68
+ _getNested(obj, key) {
69
+ if (!key)
70
+ return obj;
71
+ return key
72
+ .split(".")
73
+ .reduce((o, x) => (o == undefined ? undefined : o[x]), obj);
74
+ }
75
+ _update(obj, key, value) {
76
+ const parts = key.split(".");
77
+ let curr = obj;
78
+ for (let i = 0; i < parts.length - 1; i++) {
79
+ if (!(parts[i] in curr))
80
+ curr[parts[i]] = {};
81
+ curr = curr[parts[i]];
82
+ }
83
+ curr[parts[parts.length - 1]] = value;
84
+ return curr;
85
+ }
86
+ }
@@ -0,0 +1,20 @@
1
+ import { Encryptor } from "../../../tools";
2
+ export default class CollectionFileDriver {
3
+ private filePath;
4
+ private encryptor;
5
+ private encrypted;
6
+ constructor(filePath: string, encryptor: Encryptor, encrypted: boolean);
7
+ create(): Promise<void>;
8
+ createSync(): void;
9
+ delete(): Promise<void>;
10
+ deleteSync(): void;
11
+ size(): Promise<number>;
12
+ sizeSync(): number;
13
+ appendRecords(lines: Array<Record<string, any>>): Promise<void>;
14
+ appendRecordsSync(lines: Array<Record<string, any>>): void;
15
+ readRecords(): Promise<Array<Record<string, any>>>;
16
+ readRecordsSync(): Array<Record<string, any>>;
17
+ writeRecords(lines: Array<Record<string, any>>): Promise<void>;
18
+ writeRecordsSync(lines: Array<Record<string, any>>): void;
19
+ }
20
+ //# sourceMappingURL=collection_file_driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection_file_driver.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/driver/collection_file_driver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAQ,MAAM,gBAAgB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAU;gBAEf,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO;IAMhE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,UAAU,IAAI,IAAI;IAKZ,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,UAAU,IAAI,IAAI;IAIZ,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAK7B,QAAQ,IAAI,MAAM;IAKZ,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAarE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;IAapD,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAcxD,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAYvC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;CAU1D"}
@@ -0,0 +1,90 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { Encryptor, Json } from "../../../tools";
4
+ export default class CollectionFileDriver {
5
+ filePath;
6
+ encryptor;
7
+ encrypted;
8
+ constructor(filePath, encryptor, encrypted) {
9
+ this.filePath = filePath;
10
+ this.encryptor = encryptor;
11
+ this.encrypted = encrypted;
12
+ }
13
+ async create() {
14
+ await fs.promises.mkdir(path.dirname(this.filePath), { recursive: true });
15
+ await fs.promises.writeFile(this.filePath, "", { flag: "a" });
16
+ }
17
+ createSync() {
18
+ fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
19
+ fs.writeFileSync(this.filePath, "", { flag: "a" });
20
+ }
21
+ async delete() {
22
+ await fs.promises.unlink(this.filePath);
23
+ }
24
+ deleteSync() {
25
+ fs.unlinkSync(this.filePath);
26
+ }
27
+ async size() {
28
+ const stats = await fs.promises.stat(this.filePath);
29
+ return stats.size;
30
+ }
31
+ sizeSync() {
32
+ const stats = fs.statSync(this.filePath);
33
+ return stats.size;
34
+ }
35
+ async appendRecords(lines) {
36
+ const content = lines
37
+ .map((line) => this.encrypted
38
+ ? this.encryptor.enc(JSON.stringify(line))
39
+ : JSON.stringify(line))
40
+ .join("\n");
41
+ if (content.length > 0) {
42
+ await fs.promises.appendFile(this.filePath, "\n" + content);
43
+ }
44
+ }
45
+ appendRecordsSync(lines) {
46
+ const content = lines
47
+ .map((line) => this.encrypted
48
+ ? this.encryptor.enc(JSON.stringify(line))
49
+ : JSON.stringify(line))
50
+ .join("\n");
51
+ if (content.length > 0) {
52
+ fs.appendFileSync(this.filePath, "\n" + content);
53
+ }
54
+ }
55
+ async readRecords() {
56
+ if (!fs.existsSync(this.filePath))
57
+ return [];
58
+ const lines = (await fs.promises.readFile(this.filePath, "utf8"))
59
+ .split("\n")
60
+ .filter((l) => l.trim() !== "");
61
+ const jsonLines = lines.map((l) => Json.parse(this.encrypted ? this.encryptor.dec(l) : l));
62
+ return jsonLines;
63
+ }
64
+ readRecordsSync() {
65
+ if (!fs.existsSync(this.filePath))
66
+ return [];
67
+ const lines = fs
68
+ .readFileSync(this.filePath, "utf8")
69
+ .split("\n")
70
+ .filter((l) => l.trim() !== "");
71
+ const jsonLines = lines.map((l) => Json.parse(this.encrypted ? this.encryptor.dec(l) : l));
72
+ return jsonLines;
73
+ }
74
+ async writeRecords(lines) {
75
+ const content = lines
76
+ .map((line) => this.encrypted
77
+ ? this.encryptor.enc(JSON.stringify(line))
78
+ : JSON.stringify(line))
79
+ .join("\n");
80
+ await fs.promises.writeFile(this.filePath, content);
81
+ }
82
+ writeRecordsSync(lines) {
83
+ const content = lines
84
+ .map((line) => this.encrypted
85
+ ? this.encryptor.enc(JSON.stringify(line))
86
+ : JSON.stringify(line))
87
+ .join("\n");
88
+ fs.writeFileSync(this.filePath, content);
89
+ }
90
+ }
@@ -0,0 +1,43 @@
1
+ import Document from "../document";
2
+ import CollectionFileDriver from "./collection_file_driver";
3
+ export default class CollectionOperations {
4
+ path: string;
5
+ encrypted: boolean;
6
+ fileDriver: CollectionFileDriver;
7
+ constructor(params: {
8
+ path: string;
9
+ encrypted: boolean;
10
+ key?: string;
11
+ });
12
+ create(): Promise<void>;
13
+ createSync(): void;
14
+ delete(): Promise<void>;
15
+ deleteSync(): void;
16
+ size(): Promise<number>;
17
+ sizeSync(): number;
18
+ add(data: Record<string, any>): Promise<Document>;
19
+ addSync(data: Record<string, any>): Document;
20
+ addMany(data: Record<string, any>[]): Promise<Document[]>;
21
+ addManySync(data: Record<string, any>[]): Document[];
22
+ getAll(): Promise<Document[]>;
23
+ getAllSync(): Document[];
24
+ getById(id: string): Promise<Document | null>;
25
+ getByIdSync(id: string): Document | null;
26
+ getRandom(): Promise<Document | null>;
27
+ getRandomSync(): Document | null;
28
+ getRandomMany(count: number): Promise<Document[]>;
29
+ getRandomManySync(count: number): Document[];
30
+ updateOneRecordById(id: string, data: Record<string, any>): Promise<Document | null>;
31
+ updateOneRecordByIdSync(id: string, data: Record<string, any>): Document | null;
32
+ updateManyRecordsByIdsWithSameValue(ids: string[], data: Record<string, any>): Promise<Document[]>;
33
+ updateManyRecordsByIdsWithSameValueSync(ids: string[], data: Record<string, any>): Document[];
34
+ updateManyRecordsByIdsWithDifferentValues(ids: string[], datas: Record<string, any>[]): Promise<Document[]>;
35
+ updateManyRecordsByIdsWithDifferentValuesSync(ids: string[], datas: Record<string, any>[]): Document[];
36
+ deleteById(id: string): Promise<Document | null>;
37
+ deleteByIdSync(id: string): Document | null;
38
+ deleteManyByIds(ids: string[]): Promise<Document[]>;
39
+ deleteManyByIdsSync(ids: string[]): Document[];
40
+ clear(): Promise<void>;
41
+ clearSync(): void;
42
+ }
43
+ //# sourceMappingURL=collection_operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection_operations.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/driver/collection_operations.ts"],"names":[],"mappings":"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"}