protoobject 1.1.30 → 2.0.1
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/README.md +142 -2
- package/lib/browser.d.ts +17 -0
- package/lib/cjs/browser.js +26 -0
- package/lib/cjs/browser.js.map +1 -0
- package/lib/cjs/classes/proto-object-crypto.js +133 -0
- package/lib/cjs/classes/proto-object-crypto.js.map +1 -0
- package/lib/cjs/classes/proto-object-fs.js +395 -0
- package/lib/cjs/classes/proto-object-fs.js.map +1 -0
- package/lib/cjs/classes/proto-object-sqlite.js +331 -0
- package/lib/cjs/classes/proto-object-sqlite.js.map +1 -0
- package/lib/cjs/classes/proto-object-stream.js +148 -0
- package/lib/cjs/classes/proto-object-stream.js.map +1 -0
- package/lib/cjs/classes/proto-object-tcp.js +322 -0
- package/lib/cjs/classes/proto-object-tcp.js.map +1 -0
- package/lib/cjs/classes/proto-object.js.map +1 -0
- package/lib/cjs/decorators/static-implements.js.map +1 -0
- package/lib/cjs/index.js +41 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/package.json +1 -0
- package/lib/{types → cjs/types}/any-object.js.map +1 -1
- package/lib/cjs/types/browser-storage.js +3 -0
- package/lib/cjs/types/browser-storage.js.map +1 -0
- package/lib/cjs/types/collection-transformer.js.map +1 -0
- package/lib/cjs/types/dynamic-methods.js.map +1 -0
- package/lib/cjs/types/record-transformer.js.map +1 -0
- package/lib/cjs/types/static-methods.js.map +1 -0
- package/lib/cjs/types/unknown-object.js.map +1 -0
- package/lib/cjs/types/validator-function.js.map +1 -0
- package/lib/cjs/utils/protoobject-browser-storage.js +642 -0
- package/lib/cjs/utils/protoobject-browser-storage.js.map +1 -0
- package/lib/cjs/utils/protoobject-factory.js.map +1 -0
- package/lib/classes/proto-object-crypto.d.ts +98 -0
- package/lib/classes/proto-object-fs.d.ts +106 -0
- package/lib/classes/proto-object-sqlite.d.ts +97 -0
- package/lib/classes/proto-object-stream.d.ts +37 -0
- package/lib/classes/proto-object-tcp.d.ts +85 -0
- package/lib/esm/browser.js +19 -0
- package/lib/esm/browser.js.map +1 -0
- package/lib/esm/classes/proto-object-crypto.js +129 -0
- package/lib/esm/classes/proto-object-crypto.js.map +1 -0
- package/lib/esm/classes/proto-object-fs.js +391 -0
- package/lib/esm/classes/proto-object-fs.js.map +1 -0
- package/lib/esm/classes/proto-object-sqlite.js +328 -0
- package/lib/esm/classes/proto-object-sqlite.js.map +1 -0
- package/lib/esm/classes/proto-object-stream.js +144 -0
- package/lib/esm/classes/proto-object-stream.js.map +1 -0
- package/lib/esm/classes/proto-object-tcp.js +317 -0
- package/lib/esm/classes/proto-object-tcp.js.map +1 -0
- package/lib/esm/classes/proto-object.js +264 -0
- package/lib/esm/classes/proto-object.js.map +1 -0
- package/lib/esm/decorators/static-implements.js +12 -0
- package/lib/esm/decorators/static-implements.js.map +1 -0
- package/lib/esm/index.js +22 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/package.json +1 -0
- package/lib/esm/types/any-object.js +2 -0
- package/lib/esm/types/any-object.js.map +1 -0
- package/lib/esm/types/browser-storage.js +2 -0
- package/lib/esm/types/browser-storage.js.map +1 -0
- package/lib/esm/types/collection-transformer.js +3 -0
- package/lib/esm/types/collection-transformer.js.map +1 -0
- package/lib/esm/types/dynamic-methods.js +3 -0
- package/lib/esm/types/dynamic-methods.js.map +1 -0
- package/lib/esm/types/record-transformer.js +3 -0
- package/lib/esm/types/record-transformer.js.map +1 -0
- package/lib/esm/types/static-methods.js +4 -0
- package/lib/esm/types/static-methods.js.map +1 -0
- package/lib/esm/types/unknown-object.js +2 -0
- package/lib/esm/types/unknown-object.js.map +1 -0
- package/lib/esm/types/validator-function.js +3 -0
- package/lib/esm/types/validator-function.js.map +1 -0
- package/lib/esm/utils/protoobject-browser-storage.js +638 -0
- package/lib/esm/utils/protoobject-browser-storage.js.map +1 -0
- package/lib/esm/utils/protoobject-factory.js +32 -0
- package/lib/esm/utils/protoobject-factory.js.map +1 -0
- package/lib/index.d.ts +18 -9
- package/lib/types/browser-storage.d.ts +41 -0
- package/lib/utils/protoobject-browser-storage.d.ts +83 -0
- package/package.json +56 -4
- package/CHANGELOG.md +0 -191
- package/FUNDING.yml +0 -2
- package/ignoreUpdatesModules.json +0 -4
- package/lib/classes/proto-object.js.map +0 -1
- package/lib/decorators/static-implements.js.map +0 -1
- package/lib/index.js +0 -18
- package/lib/index.js.map +0 -1
- package/lib/types/collection-transformer.js.map +0 -1
- package/lib/types/dynamic-methods.js.map +0 -1
- package/lib/types/record-transformer.js.map +0 -1
- package/lib/types/static-methods.js.map +0 -1
- package/lib/types/unknown-object.js.map +0 -1
- package/lib/types/validator-function.js.map +0 -1
- package/lib/utils/protoobject-factory.js.map +0 -1
- /package/lib/{classes → cjs/classes}/proto-object.js +0 -0
- /package/lib/{decorators → cjs/decorators}/static-implements.js +0 -0
- /package/lib/{types → cjs/types}/any-object.js +0 -0
- /package/lib/{types → cjs/types}/collection-transformer.js +0 -0
- /package/lib/{types → cjs/types}/dynamic-methods.js +0 -0
- /package/lib/{types → cjs/types}/record-transformer.js +0 -0
- /package/lib/{types → cjs/types}/static-methods.js +0 -0
- /package/lib/{types → cjs/types}/unknown-object.js +0 -0
- /package/lib/{types → cjs/types}/validator-function.js +0 -0
- /package/lib/{utils → cjs/utils}/protoobject-factory.js +0 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
36
|
+
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
37
|
+
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
38
|
+
};
|
|
39
|
+
import { promises as fs, createReadStream, createWriteStream, watch, } from "node:fs";
|
|
40
|
+
import { join, dirname, extname } from "node:path";
|
|
41
|
+
import { EventEmitter } from "node:events";
|
|
42
|
+
import { ProtoObject } from "./proto-object.js";
|
|
43
|
+
import { StaticImplements } from "../decorators/static-implements.js";
|
|
44
|
+
/* eslint-disable no-unused-vars */
|
|
45
|
+
/**
|
|
46
|
+
* File operation types
|
|
47
|
+
*/
|
|
48
|
+
export var FileOperationType;
|
|
49
|
+
(function (FileOperationType) {
|
|
50
|
+
FileOperationType["SAVE"] = "SAVE";
|
|
51
|
+
FileOperationType["LOAD"] = "LOAD";
|
|
52
|
+
FileOperationType["DELETE"] = "DELETE";
|
|
53
|
+
FileOperationType["WATCH"] = "WATCH";
|
|
54
|
+
})(FileOperationType || (FileOperationType = {}));
|
|
55
|
+
/**
|
|
56
|
+
* File formats supported
|
|
57
|
+
*/
|
|
58
|
+
export var FileFormat;
|
|
59
|
+
(function (FileFormat) {
|
|
60
|
+
FileFormat["JSON"] = ".json";
|
|
61
|
+
FileFormat["CSV"] = ".csv";
|
|
62
|
+
FileFormat["TEXT"] = ".txt";
|
|
63
|
+
})(FileFormat || (FileFormat = {}));
|
|
64
|
+
/* eslint-enable no-unused-vars */
|
|
65
|
+
/**
|
|
66
|
+
* File system watcher for ProtoObject files
|
|
67
|
+
*/
|
|
68
|
+
export class ProtoObjectFileWatcher extends EventEmitter {
|
|
69
|
+
constructor() {
|
|
70
|
+
super(...arguments);
|
|
71
|
+
this.watchers = new Map();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Watch a file for changes
|
|
75
|
+
*/
|
|
76
|
+
watchFile(filePath) {
|
|
77
|
+
if (this.watchers.has(filePath)) {
|
|
78
|
+
return; // Already watching
|
|
79
|
+
}
|
|
80
|
+
const watcher = watch(filePath, (eventType, filename) => {
|
|
81
|
+
this.emit("fileChanged", {
|
|
82
|
+
filePath,
|
|
83
|
+
eventType,
|
|
84
|
+
filename,
|
|
85
|
+
timestamp: new Date(),
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
this.watchers.set(filePath, watcher);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Stop watching a file
|
|
92
|
+
*/
|
|
93
|
+
unwatchFile(filePath) {
|
|
94
|
+
const watcher = this.watchers.get(filePath);
|
|
95
|
+
if (watcher) {
|
|
96
|
+
watcher.close();
|
|
97
|
+
this.watchers.delete(filePath);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Stop watching all files
|
|
102
|
+
*/
|
|
103
|
+
unwatchAll() {
|
|
104
|
+
this.watchers.forEach((watcher) => watcher.close());
|
|
105
|
+
this.watchers.clear();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Base class for File System enabled ProtoObjects
|
|
110
|
+
*/
|
|
111
|
+
let ProtoObjectFS = (() => {
|
|
112
|
+
let _classDecorators = [StaticImplements()];
|
|
113
|
+
let _classDescriptor;
|
|
114
|
+
let _classExtraInitializers = [];
|
|
115
|
+
let _classThis;
|
|
116
|
+
let _classSuper = ProtoObject;
|
|
117
|
+
var ProtoObjectFS = _classThis = class extends _classSuper {
|
|
118
|
+
constructor(data) {
|
|
119
|
+
super(data);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Save object to file
|
|
123
|
+
*/
|
|
124
|
+
async saveToFile(filePath, format = FileFormat.JSON) {
|
|
125
|
+
try {
|
|
126
|
+
// Ensure directory exists
|
|
127
|
+
await fs.mkdir(dirname(filePath), { recursive: true });
|
|
128
|
+
let content;
|
|
129
|
+
switch (format) {
|
|
130
|
+
case FileFormat.JSON:
|
|
131
|
+
content = JSON.stringify(this.toJSON(), null, 2);
|
|
132
|
+
break;
|
|
133
|
+
case FileFormat.CSV:
|
|
134
|
+
content = this.toCSV();
|
|
135
|
+
break;
|
|
136
|
+
case FileFormat.TEXT:
|
|
137
|
+
content = this.toString();
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
141
|
+
}
|
|
142
|
+
await fs.writeFile(filePath, content, "utf8");
|
|
143
|
+
return {
|
|
144
|
+
success: true,
|
|
145
|
+
operation: FileOperationType.SAVE,
|
|
146
|
+
filePath,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
operation: FileOperationType.SAVE,
|
|
153
|
+
filePath,
|
|
154
|
+
error: error,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Load object from file
|
|
160
|
+
*/
|
|
161
|
+
static async loadFromFile(filePath) {
|
|
162
|
+
try {
|
|
163
|
+
const content = await fs.readFile(filePath, "utf8");
|
|
164
|
+
const format = extname(filePath);
|
|
165
|
+
switch (format) {
|
|
166
|
+
case FileFormat.JSON: {
|
|
167
|
+
const data = JSON.parse(content);
|
|
168
|
+
return this.fromJSON(data);
|
|
169
|
+
}
|
|
170
|
+
case FileFormat.CSV:
|
|
171
|
+
throw new Error("CSV loading not implemented yet");
|
|
172
|
+
case FileFormat.TEXT:
|
|
173
|
+
throw new Error("Text loading not implemented yet");
|
|
174
|
+
default:
|
|
175
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
throw new Error(`Failed to load from file ${filePath}: ${error}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Load multiple objects from directory
|
|
184
|
+
*/
|
|
185
|
+
static async loadManyFromDirectory(directoryPath, pattern = "*.json") {
|
|
186
|
+
try {
|
|
187
|
+
const files = await fs.readdir(directoryPath);
|
|
188
|
+
const jsonFiles = files.filter((file) => {
|
|
189
|
+
if (pattern === "*.json")
|
|
190
|
+
return file.endsWith(".json");
|
|
191
|
+
if (pattern === "*.csv")
|
|
192
|
+
return file.endsWith(".csv");
|
|
193
|
+
return true;
|
|
194
|
+
});
|
|
195
|
+
const objects = [];
|
|
196
|
+
for (const file of jsonFiles) {
|
|
197
|
+
try {
|
|
198
|
+
const object = await this.loadFromFile(join(directoryPath, file));
|
|
199
|
+
objects.push(object);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error(`Error loading ${file}:`, error);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return objects;
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
throw new Error(`Failed to load from directory ${directoryPath}: ${error}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Delete file
|
|
213
|
+
*/
|
|
214
|
+
async deleteFile(filePath) {
|
|
215
|
+
try {
|
|
216
|
+
await fs.unlink(filePath);
|
|
217
|
+
return {
|
|
218
|
+
success: true,
|
|
219
|
+
operation: FileOperationType.DELETE,
|
|
220
|
+
filePath,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
return {
|
|
225
|
+
success: false,
|
|
226
|
+
operation: FileOperationType.DELETE,
|
|
227
|
+
filePath,
|
|
228
|
+
error: error,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Save multiple objects to directory
|
|
234
|
+
*/
|
|
235
|
+
/* eslint-disable no-unused-vars */
|
|
236
|
+
static async saveManyToDirectory(objects, directoryPath, fileNameGenerator = (obj, i) => `object_${i}.json`) {
|
|
237
|
+
/* eslint-enable no-unused-vars */
|
|
238
|
+
const results = [];
|
|
239
|
+
// Ensure directory exists
|
|
240
|
+
await fs.mkdir(directoryPath, { recursive: true });
|
|
241
|
+
for (let i = 0; i < objects.length; i++) {
|
|
242
|
+
const obj = objects[i];
|
|
243
|
+
const fileName = fileNameGenerator(obj, i);
|
|
244
|
+
const filePath = join(directoryPath, fileName);
|
|
245
|
+
const result = await obj.saveToFile(filePath);
|
|
246
|
+
results.push(result);
|
|
247
|
+
}
|
|
248
|
+
return results;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Convert to CSV format
|
|
252
|
+
*/
|
|
253
|
+
toCSV(fieldMapping) {
|
|
254
|
+
const data = this.toJSON();
|
|
255
|
+
const fields = fieldMapping ? Object.keys(fieldMapping) : Object.keys(data);
|
|
256
|
+
// Header
|
|
257
|
+
const headers = fields.map((field) => fieldMapping ? fieldMapping[field] : field);
|
|
258
|
+
// Values
|
|
259
|
+
const values = fields.map((field) => {
|
|
260
|
+
const value = data[field];
|
|
261
|
+
if (value === null || value === undefined)
|
|
262
|
+
return "";
|
|
263
|
+
if (typeof value === "string" && value.includes(",")) {
|
|
264
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
265
|
+
}
|
|
266
|
+
return String(value);
|
|
267
|
+
});
|
|
268
|
+
return `${headers.join(",")}\n${values.join(",")}`;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Batch save with streaming for large datasets
|
|
272
|
+
*/
|
|
273
|
+
static async saveManyToFileStream(objects, filePath, format = FileFormat.JSON) {
|
|
274
|
+
try {
|
|
275
|
+
// Ensure directory exists
|
|
276
|
+
await fs.mkdir(dirname(filePath), { recursive: true });
|
|
277
|
+
const writeStream = createWriteStream(filePath);
|
|
278
|
+
if (format === FileFormat.JSON) {
|
|
279
|
+
writeStream.write("[\n");
|
|
280
|
+
for (let i = 0; i < objects.length; i++) {
|
|
281
|
+
const obj = objects[i];
|
|
282
|
+
const json = JSON.stringify(obj.toJSON(), null, 2);
|
|
283
|
+
if (i > 0)
|
|
284
|
+
writeStream.write(",\n");
|
|
285
|
+
writeStream.write(json);
|
|
286
|
+
}
|
|
287
|
+
writeStream.write("\n]");
|
|
288
|
+
}
|
|
289
|
+
else if (format === FileFormat.CSV) {
|
|
290
|
+
// Write CSV header
|
|
291
|
+
if (objects.length > 0) {
|
|
292
|
+
const headers = Object.keys(objects[0].toJSON()).join(",");
|
|
293
|
+
writeStream.write(headers + "\n");
|
|
294
|
+
for (const obj of objects) {
|
|
295
|
+
const csvLine = obj.toCSV();
|
|
296
|
+
const values = csvLine.split("\n")[1]; // Get only values, skip header
|
|
297
|
+
writeStream.write(values + "\n");
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
writeStream.end();
|
|
302
|
+
return new Promise((resolve, reject) => {
|
|
303
|
+
writeStream.on("finish", () => {
|
|
304
|
+
resolve({
|
|
305
|
+
success: true,
|
|
306
|
+
operation: FileOperationType.SAVE,
|
|
307
|
+
filePath,
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
writeStream.on("error", (error) => {
|
|
311
|
+
reject({
|
|
312
|
+
success: false,
|
|
313
|
+
operation: FileOperationType.SAVE,
|
|
314
|
+
filePath,
|
|
315
|
+
error,
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
return {
|
|
322
|
+
success: false,
|
|
323
|
+
operation: FileOperationType.SAVE,
|
|
324
|
+
filePath,
|
|
325
|
+
error: error,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Load large datasets with streaming
|
|
331
|
+
*/
|
|
332
|
+
/* eslint-disable no-unused-vars */
|
|
333
|
+
static async loadManyFromFileStream(filePath, callback) {
|
|
334
|
+
/* eslint-enable no-unused-vars */
|
|
335
|
+
const readStream = createReadStream(filePath);
|
|
336
|
+
let buffer = "";
|
|
337
|
+
return new Promise((resolve, reject) => {
|
|
338
|
+
readStream.on("data", async (chunk) => {
|
|
339
|
+
buffer += chunk.toString();
|
|
340
|
+
// Simple JSON array parsing (for demo purposes)
|
|
341
|
+
if (buffer.includes("},{")) {
|
|
342
|
+
const objects = buffer.split("},{");
|
|
343
|
+
buffer = objects.pop() || ""; // Keep the last incomplete object
|
|
344
|
+
for (let objStr of objects) {
|
|
345
|
+
try {
|
|
346
|
+
// Fix JSON formatting
|
|
347
|
+
if (!objStr.startsWith("{"))
|
|
348
|
+
objStr = "{" + objStr;
|
|
349
|
+
if (!objStr.endsWith("}"))
|
|
350
|
+
objStr = objStr + "}";
|
|
351
|
+
const data = JSON.parse(objStr);
|
|
352
|
+
const object = this.fromJSON(data);
|
|
353
|
+
await callback(object);
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
console.error("Error parsing object:", error);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
readStream.on("end", () => {
|
|
362
|
+
resolve();
|
|
363
|
+
});
|
|
364
|
+
readStream.on("error", (error) => {
|
|
365
|
+
reject(error);
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Create backup of object with timestamp
|
|
371
|
+
*/
|
|
372
|
+
async createBackup(backupDirectory) {
|
|
373
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
374
|
+
const className = this.constructor.name;
|
|
375
|
+
const backupFileName = `${className}_backup_${timestamp}.json`;
|
|
376
|
+
const backupPath = join(backupDirectory, backupFileName);
|
|
377
|
+
return this.saveToFile(backupPath, FileFormat.JSON);
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
__setFunctionName(_classThis, "ProtoObjectFS");
|
|
381
|
+
(() => {
|
|
382
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
383
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
384
|
+
ProtoObjectFS = _classThis = _classDescriptor.value;
|
|
385
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
386
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
387
|
+
})();
|
|
388
|
+
return ProtoObjectFS = _classThis;
|
|
389
|
+
})();
|
|
390
|
+
export { ProtoObjectFS };
|
|
391
|
+
//# sourceMappingURL=proto-object-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proto-object-fs.js","sourceRoot":"","sources":["../../../src/classes/proto-object-fs.ts"],"names":[],"mappings":"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"}
|