protoobject 1.1.30 → 2.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 (133) hide show
  1. package/README.md +142 -2
  2. package/lib/cjs/browser.js +28 -0
  3. package/lib/cjs/browser.js.map +1 -0
  4. package/lib/cjs/classes/proto-object-crypto.js +133 -0
  5. package/lib/cjs/classes/proto-object-crypto.js.map +1 -0
  6. package/lib/cjs/classes/proto-object-fs.js +395 -0
  7. package/lib/cjs/classes/proto-object-fs.js.map +1 -0
  8. package/lib/cjs/classes/proto-object-sqlite.js +331 -0
  9. package/lib/cjs/classes/proto-object-sqlite.js.map +1 -0
  10. package/lib/cjs/classes/proto-object-stream.js +148 -0
  11. package/lib/cjs/classes/proto-object-stream.js.map +1 -0
  12. package/lib/cjs/classes/proto-object-tcp.js +322 -0
  13. package/lib/cjs/classes/proto-object-tcp.js.map +1 -0
  14. package/lib/cjs/classes/proto-object.js.map +1 -0
  15. package/lib/cjs/decorators/static-implements.js.map +1 -0
  16. package/lib/cjs/index.js +41 -0
  17. package/lib/cjs/index.js.map +1 -0
  18. package/lib/cjs/package.json +1 -0
  19. package/lib/{types → cjs/types}/any-object.js.map +1 -1
  20. package/lib/cjs/types/collection-transformer.js.map +1 -0
  21. package/lib/cjs/types/dynamic-methods.js.map +1 -0
  22. package/lib/cjs/types/record-transformer.js.map +1 -0
  23. package/lib/cjs/types/static-methods.js.map +1 -0
  24. package/lib/cjs/types/unknown-object.js.map +1 -0
  25. package/lib/cjs/types/validator-function.js.map +1 -0
  26. package/lib/cjs/utils/protoobject-browser-storage.js +672 -0
  27. package/lib/cjs/utils/protoobject-browser-storage.js.map +1 -0
  28. package/lib/cjs/utils/protoobject-factory.js.map +1 -0
  29. package/lib/cjs/utils/protoobject-localstorage.js +188 -0
  30. package/lib/cjs/utils/protoobject-localstorage.js.map +1 -0
  31. package/lib/esm/browser.js +20 -0
  32. package/lib/esm/browser.js.map +1 -0
  33. package/lib/esm/classes/proto-object-crypto.js +129 -0
  34. package/lib/esm/classes/proto-object-crypto.js.map +1 -0
  35. package/lib/esm/classes/proto-object-fs.js +391 -0
  36. package/lib/esm/classes/proto-object-fs.js.map +1 -0
  37. package/lib/esm/classes/proto-object-sqlite.js +328 -0
  38. package/lib/esm/classes/proto-object-sqlite.js.map +1 -0
  39. package/lib/esm/classes/proto-object-stream.js +144 -0
  40. package/lib/esm/classes/proto-object-stream.js.map +1 -0
  41. package/lib/esm/classes/proto-object-tcp.js +317 -0
  42. package/lib/esm/classes/proto-object-tcp.js.map +1 -0
  43. package/lib/esm/classes/proto-object.js +264 -0
  44. package/lib/esm/classes/proto-object.js.map +1 -0
  45. package/lib/esm/decorators/static-implements.js +12 -0
  46. package/lib/esm/decorators/static-implements.js.map +1 -0
  47. package/lib/esm/index.js +22 -0
  48. package/lib/esm/index.js.map +1 -0
  49. package/lib/esm/package.json +1 -0
  50. package/lib/esm/types/any-object.js +2 -0
  51. package/lib/esm/types/any-object.js.map +1 -0
  52. package/lib/esm/types/collection-transformer.js +3 -0
  53. package/lib/esm/types/collection-transformer.js.map +1 -0
  54. package/lib/esm/types/dynamic-methods.js +3 -0
  55. package/lib/esm/types/dynamic-methods.js.map +1 -0
  56. package/lib/esm/types/record-transformer.js +3 -0
  57. package/lib/esm/types/record-transformer.js.map +1 -0
  58. package/lib/esm/types/static-methods.js +4 -0
  59. package/lib/esm/types/static-methods.js.map +1 -0
  60. package/lib/esm/types/unknown-object.js +2 -0
  61. package/lib/esm/types/unknown-object.js.map +1 -0
  62. package/lib/esm/types/validator-function.js +3 -0
  63. package/lib/esm/types/validator-function.js.map +1 -0
  64. package/lib/esm/utils/protoobject-browser-storage.js +668 -0
  65. package/lib/esm/utils/protoobject-browser-storage.js.map +1 -0
  66. package/lib/esm/utils/protoobject-factory.js +32 -0
  67. package/lib/esm/utils/protoobject-factory.js.map +1 -0
  68. package/lib/esm/utils/protoobject-localstorage.js +184 -0
  69. package/lib/esm/utils/protoobject-localstorage.js.map +1 -0
  70. package/lib/types/browser.d.ts +18 -0
  71. package/lib/types/browser.d.ts.map +1 -0
  72. package/lib/types/classes/proto-object-crypto.d.ts +99 -0
  73. package/lib/types/classes/proto-object-crypto.d.ts.map +1 -0
  74. package/lib/types/classes/proto-object-fs.d.ts +107 -0
  75. package/lib/types/classes/proto-object-fs.d.ts.map +1 -0
  76. package/lib/types/classes/proto-object-sqlite.d.ts +98 -0
  77. package/lib/types/classes/proto-object-sqlite.d.ts.map +1 -0
  78. package/lib/types/classes/proto-object-stream.d.ts +38 -0
  79. package/lib/types/classes/proto-object-stream.d.ts.map +1 -0
  80. package/lib/types/classes/proto-object-tcp.d.ts +86 -0
  81. package/lib/types/classes/proto-object-tcp.d.ts.map +1 -0
  82. package/lib/{classes → types/classes}/proto-object.d.ts +1 -0
  83. package/lib/types/classes/proto-object.d.ts.map +1 -0
  84. package/lib/{decorators → types/decorators}/static-implements.d.ts +1 -0
  85. package/lib/types/decorators/static-implements.d.ts.map +1 -0
  86. package/lib/types/index.d.ts +24 -0
  87. package/lib/types/index.d.ts.map +1 -0
  88. package/lib/types/{any-object.d.ts → types/any-object.d.ts} +1 -0
  89. package/lib/types/types/any-object.d.ts.map +1 -0
  90. package/lib/types/{collection-transformer.d.ts → types/collection-transformer.d.ts} +1 -0
  91. package/lib/types/types/collection-transformer.d.ts.map +1 -0
  92. package/lib/types/{dynamic-methods.d.ts → types/dynamic-methods.d.ts} +1 -0
  93. package/lib/types/types/dynamic-methods.d.ts.map +1 -0
  94. package/lib/types/{record-transformer.d.ts → types/record-transformer.d.ts} +1 -0
  95. package/lib/types/types/record-transformer.d.ts.map +1 -0
  96. package/lib/types/{static-methods.d.ts → types/static-methods.d.ts} +1 -0
  97. package/lib/types/types/static-methods.d.ts.map +1 -0
  98. package/lib/types/{unknown-object.d.ts → types/unknown-object.d.ts} +1 -0
  99. package/lib/types/types/unknown-object.d.ts.map +1 -0
  100. package/lib/types/{validator-function.d.ts → types/validator-function.d.ts} +1 -0
  101. package/lib/types/types/validator-function.d.ts.map +1 -0
  102. package/lib/types/utils/protoobject-browser-storage.d.ts +118 -0
  103. package/lib/types/utils/protoobject-browser-storage.d.ts.map +1 -0
  104. package/lib/{utils → types/utils}/protoobject-factory.d.ts +1 -0
  105. package/lib/types/utils/protoobject-factory.d.ts.map +1 -0
  106. package/lib/types/utils/protoobject-localstorage.d.ts +69 -0
  107. package/lib/types/utils/protoobject-localstorage.d.ts.map +1 -0
  108. package/package.json +56 -5
  109. package/CHANGELOG.md +0 -191
  110. package/FUNDING.yml +0 -2
  111. package/ignoreUpdatesModules.json +0 -4
  112. package/lib/classes/proto-object.js.map +0 -1
  113. package/lib/decorators/static-implements.js.map +0 -1
  114. package/lib/index.d.ts +0 -14
  115. package/lib/index.js +0 -18
  116. package/lib/index.js.map +0 -1
  117. package/lib/types/collection-transformer.js.map +0 -1
  118. package/lib/types/dynamic-methods.js.map +0 -1
  119. package/lib/types/record-transformer.js.map +0 -1
  120. package/lib/types/static-methods.js.map +0 -1
  121. package/lib/types/unknown-object.js.map +0 -1
  122. package/lib/types/validator-function.js.map +0 -1
  123. package/lib/utils/protoobject-factory.js.map +0 -1
  124. /package/lib/{classes → cjs/classes}/proto-object.js +0 -0
  125. /package/lib/{decorators → cjs/decorators}/static-implements.js +0 -0
  126. /package/lib/{types → cjs/types}/any-object.js +0 -0
  127. /package/lib/{types → cjs/types}/collection-transformer.js +0 -0
  128. /package/lib/{types → cjs/types}/dynamic-methods.js +0 -0
  129. /package/lib/{types → cjs/types}/record-transformer.js +0 -0
  130. /package/lib/{types → cjs/types}/static-methods.js +0 -0
  131. /package/lib/{types → cjs/types}/unknown-object.js +0 -0
  132. /package/lib/{types → cjs/types}/validator-function.js +0 -0
  133. /package/lib/{utils → cjs/utils}/protoobject-factory.js +0 -0
@@ -0,0 +1,328 @@
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 { randomUUID } from "node:crypto";
40
+ import { ProtoObject } from "./proto-object";
41
+ import { StaticImplements } from "../decorators/static-implements";
42
+ /* eslint-disable no-unused-vars, @typescript-eslint/no-shadow */
43
+ export var RecordState;
44
+ (function (RecordState) {
45
+ RecordState[RecordState["ACTIVE"] = 0] = "ACTIVE";
46
+ RecordState[RecordState["DELETED"] = 1] = "DELETED";
47
+ })(RecordState || (RecordState = {}));
48
+ /* eslint-enable no-unused-vars, @typescript-eslint/no-shadow */
49
+ /**
50
+ * A universal class for creating ProtoObject entities with SQLite integration
51
+ * Extends ProtoObject with database operations using node:sqlite
52
+ */
53
+ let ProtoObjectSQLite = (() => {
54
+ let _classDecorators = [StaticImplements()];
55
+ let _classDescriptor;
56
+ let _classExtraInitializers = [];
57
+ let _classThis;
58
+ let _classSuper = ProtoObject;
59
+ var ProtoObjectSQLite = _classThis = class extends _classSuper {
60
+ constructor(data) {
61
+ super(data);
62
+ // Auto-initialize common fields if not provided
63
+ if (typeof this.record_state === "undefined") {
64
+ this.record_state = RecordState.ACTIVE;
65
+ }
66
+ if (!this.id) {
67
+ this.id = randomUUID();
68
+ }
69
+ const now = new Date();
70
+ if (!this.created_at) {
71
+ this.created_at = now;
72
+ }
73
+ if (!this.updated_at) {
74
+ this.updated_at = now;
75
+ }
76
+ return this;
77
+ }
78
+ /**
79
+ * Find record by ID
80
+ */
81
+ static async getById(db, id) {
82
+ try {
83
+ const record = db
84
+ .prepare(`SELECT * FROM ${this.table} WHERE ${this.primaryKey} = ?`)
85
+ .get(id);
86
+ return record ? this.fromJSON(record) : undefined;
87
+ }
88
+ catch (error) {
89
+ console.error(`Error getting record by ID: ${error}`);
90
+ return undefined;
91
+ }
92
+ }
93
+ /**
94
+ * Find records by criteria
95
+ */
96
+ static async findBy(db, criteria) {
97
+ try {
98
+ const whereClause = Object.keys(criteria)
99
+ .map((key) => `${key} = ?`)
100
+ .join(" AND ");
101
+ const sql = whereClause
102
+ ? `SELECT * FROM ${this.table} WHERE ${whereClause}`
103
+ : `SELECT * FROM ${this.table}`;
104
+ const records = db
105
+ .prepare(sql)
106
+ .all(...Object.values(criteria));
107
+ return records.map((record) => this.fromJSON(record));
108
+ }
109
+ catch (error) {
110
+ console.error(`Error finding records: ${error}`);
111
+ return [];
112
+ }
113
+ }
114
+ /**
115
+ * Find one record by criteria
116
+ */
117
+ static async findOneBy(db, criteria) {
118
+ const results = await this.findBy(db, criteria);
119
+ return results[0];
120
+ }
121
+ /**
122
+ * Count records matching criteria
123
+ */
124
+ static async count(db, criteria) {
125
+ try {
126
+ if (!criteria || Object.keys(criteria).length === 0) {
127
+ const result = db
128
+ .prepare(`SELECT COUNT(*) as count FROM ${this.table}`)
129
+ .get();
130
+ return result.count;
131
+ }
132
+ const whereClause = Object.keys(criteria)
133
+ .map((key) => `${key} = ?`)
134
+ .join(" AND ");
135
+ const result = db
136
+ .prepare(`SELECT COUNT(*) as count FROM ${this.table} WHERE ${whereClause}`)
137
+ .get(...Object.values(criteria));
138
+ return result.count;
139
+ }
140
+ catch (error) {
141
+ console.error(`Error counting records: ${error}`);
142
+ return 0;
143
+ }
144
+ }
145
+ /**
146
+ * Create table for this entity
147
+ * Override in subclasses to define custom schema
148
+ */
149
+ static async createTable(db) {
150
+ const sql = `
151
+ CREATE TABLE IF NOT EXISTS ${this.table} (
152
+ id TEXT PRIMARY KEY,
153
+ created_at TEXT NOT NULL,
154
+ updated_at TEXT NOT NULL,
155
+ record_state INTEGER NOT NULL DEFAULT 0
156
+ )
157
+ `;
158
+ db.prepare(sql).run();
159
+ }
160
+ /**
161
+ * Drop table for this entity
162
+ */
163
+ static async dropTable(db) {
164
+ db.prepare(`DROP TABLE IF EXISTS ${this.table}`).run();
165
+ }
166
+ /**
167
+ * Reload current instance from database
168
+ */
169
+ async reload(db) {
170
+ if (!this.id) {
171
+ throw new Error("Cannot reload record without ID");
172
+ }
173
+ const classNode = this.constructor;
174
+ const dbRecord = await classNode.getById(db, this.id);
175
+ if (!dbRecord) {
176
+ throw new Error(`Record with ID ${this.id} not found`);
177
+ }
178
+ return this.assign(dbRecord);
179
+ }
180
+ /**
181
+ * Save (insert or update) record to database
182
+ */
183
+ async save(db) {
184
+ if (!this.id) {
185
+ throw new Error("Cannot save record without ID");
186
+ }
187
+ const classNode = this.constructor;
188
+ const existing = await classNode.getById(db, this.id);
189
+ if (existing) {
190
+ return this.update(db);
191
+ }
192
+ else {
193
+ return this.insert(db);
194
+ }
195
+ }
196
+ /**
197
+ * Insert new record
198
+ */
199
+ async insert(db) {
200
+ const classNode = this.constructor;
201
+ this.created_at = new Date();
202
+ this.updated_at = new Date();
203
+ const jsonData = this.toJSON();
204
+ // Filter out undefined and null values
205
+ const validData = {};
206
+ Object.entries(jsonData).forEach(([key, value]) => {
207
+ if (value !== undefined && value !== null) {
208
+ validData[key] = value;
209
+ }
210
+ });
211
+ if (Object.keys(validData).length === 0) {
212
+ throw new Error("No valid data to insert");
213
+ }
214
+ const columns = Object.keys(validData);
215
+ const placeholders = columns.map(() => "?").join(", ");
216
+ const sql = `INSERT INTO ${classNode.table} (${columns.join(", ")}) VALUES (${placeholders})`;
217
+ try {
218
+ db.prepare(sql).run(...Object.values(validData));
219
+ return this;
220
+ }
221
+ catch (error) {
222
+ console.error(`Error inserting record: ${error}`);
223
+ throw error;
224
+ }
225
+ }
226
+ /**
227
+ * Update existing record
228
+ */
229
+ async update(db) {
230
+ if (!this.id) {
231
+ throw new Error("Cannot update record without ID");
232
+ }
233
+ const classNode = this.constructor;
234
+ this.updated_at = new Date();
235
+ const jsonData = this.toJSON();
236
+ delete jsonData[classNode.primaryKey];
237
+ const setClause = Object.keys(jsonData)
238
+ .map((key) => `${key} = ?`)
239
+ .join(", ");
240
+ const sql = `UPDATE ${classNode.table} SET ${setClause} WHERE ${classNode.primaryKey} = ?`;
241
+ try {
242
+ db.prepare(sql).run(...Object.values(jsonData), this.id);
243
+ return this;
244
+ }
245
+ catch (error) {
246
+ console.error(`Error updating record: ${error}`);
247
+ throw error;
248
+ }
249
+ }
250
+ /**
251
+ * Soft delete (mark as deleted)
252
+ */
253
+ async softDelete(db) {
254
+ this.record_state = RecordState.DELETED;
255
+ return this.update(db);
256
+ }
257
+ /**
258
+ * Hard delete (remove from database)
259
+ */
260
+ async delete(db) {
261
+ if (!this.id) {
262
+ throw new Error("Cannot delete record without ID");
263
+ }
264
+ const classNode = this.constructor;
265
+ try {
266
+ db.prepare(`DELETE FROM ${classNode.table} WHERE ${classNode.primaryKey} = ?`).run(this.id);
267
+ }
268
+ catch (error) {
269
+ console.error(`Error deleting record: ${error}`);
270
+ throw error;
271
+ }
272
+ }
273
+ /**
274
+ * Check if record exists in database
275
+ */
276
+ async exists(db) {
277
+ if (!this.id) {
278
+ return false;
279
+ }
280
+ const classNode = this.constructor;
281
+ const existing = await classNode.getById(db, this.id);
282
+ return !!existing;
283
+ }
284
+ /**
285
+ * Enhanced fromJSON with Date parsing
286
+ */
287
+ static fromJSON(data) {
288
+ const instance = new this();
289
+ Object.assign(instance, super.fromJSON(data));
290
+ if (typeof data.created_at === "string") {
291
+ instance.created_at = new Date(data.created_at);
292
+ }
293
+ if (typeof data.updated_at === "string") {
294
+ instance.updated_at = new Date(data.updated_at);
295
+ }
296
+ return instance;
297
+ }
298
+ /**
299
+ * Enhanced toJSON with Date serialization
300
+ */
301
+ toJSON() {
302
+ const baseData = super.toJSON();
303
+ const result = { ...baseData };
304
+ if (this.created_at !== undefined)
305
+ result.created_at = this.created_at.toJSON();
306
+ if (this.updated_at !== undefined)
307
+ result.updated_at = this.updated_at.toJSON();
308
+ return result;
309
+ }
310
+ };
311
+ __setFunctionName(_classThis, "ProtoObjectSQLite");
312
+ (() => {
313
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
314
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
315
+ ProtoObjectSQLite = _classThis = _classDescriptor.value;
316
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
317
+ })();
318
+ // Default table name - should be overridden in subclasses
319
+ _classThis.table = "proto_objects";
320
+ // Default primary key - can be overridden if needed
321
+ _classThis.primaryKey = "id";
322
+ (() => {
323
+ __runInitializers(_classThis, _classExtraInitializers);
324
+ })();
325
+ return ProtoObjectSQLite = _classThis;
326
+ })();
327
+ export { ProtoObjectSQLite };
328
+ //# sourceMappingURL=proto-object-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proto-object-sqlite.js","sourceRoot":"","sources":["../../../src/classes/proto-object-sqlite.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,iEAAiE;AACjE,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,iDAAM,CAAA;IACN,mDAAO,CAAA;AACT,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB;AAgCD,gEAAgE;AAEhE;;;GAGG;IAEU,iBAAiB;4BAD7B,gBAAgB,EAA0D;;;;sBAGjE,WAAW;8CAAnB,SAAQ,WAAc;QACtB,YAAY,IAAiB;YAC3B,KAAK,CAAC,IAAI,CAAC,CAAC;YAEZ,gDAAgD;YAChD,IAAI,OAAQ,IAAY,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;gBACrD,IAAY,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;YAClD,CAAC;YACD,IAAI,CAAE,IAAY,CAAC,EAAE,EAAE,CAAC;gBACrB,IAAY,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;YAClC,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAE,IAAY,CAAC,UAAU,EAAE,CAAC;gBAC7B,IAAY,CAAC,UAAU,GAAG,GAAG,CAAC;YACjC,CAAC;YACD,IAAI,CAAE,IAAY,CAAC,UAAU,EAAE,CAAC;gBAC7B,IAAY,CAAC,UAAU,GAAG,GAAG,CAAC;YACjC,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAQD;;WAEG;QACI,MAAM,CAAC,KAAK,CAAC,OAAO,CACzB,EAAgB,EAChB,EAAU;YAEV,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,EAAE;qBACd,OAAO,CAAC,iBAAiB,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,UAAU,MAAM,CAAC;qBACnE,GAAG,CAAC,EAAE,CAAe,CAAC;gBACzB,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;gBACtD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED;;WAEG;QACI,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,EAAgB,EAChB,QAAoB;YAEpB,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;qBACtC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC;qBAC1B,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEjB,MAAM,GAAG,GAAG,WAAW;oBACrB,CAAC,CAAC,iBAAiB,IAAI,CAAC,KAAK,UAAU,WAAW,EAAE;oBACpD,CAAC,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC;gBAElC,MAAM,OAAO,GAAG,EAAE;qBACf,OAAO,CAAC,GAAG,CAAC;qBACZ,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAiB,CAAC;gBAEnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAI,MAAM,CAAC,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACjD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED;;WAEG;QACI,MAAM,CAAC,KAAK,CAAC,SAAS,CAC3B,EAAgB,EAChB,QAAoB;YAEpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;YACnD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED;;WAEG;QACI,MAAM,CAAC,KAAK,CAAC,KAAK,CACvB,EAAgB,EAChB,QAAqB;YAErB,IAAI,CAAC;gBACH,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,MAAM,GAAG,EAAE;yBACd,OAAO,CAAC,iCAAiC,IAAI,CAAC,KAAK,EAAE,CAAC;yBACtD,GAAG,EAAuB,CAAC;oBAC9B,OAAO,MAAM,CAAC,KAAK,CAAC;gBACtB,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;qBACtC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC;qBAC1B,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEjB,MAAM,MAAM,GAAG,EAAE;qBACd,OAAO,CACN,iCAAiC,IAAI,CAAC,KAAK,UAAU,WAAW,EAAE,CACnE;qBACA,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAsB,CAAC;gBAExD,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;gBAClD,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QAED;;;WAGG;QACI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAgB;YAC9C,MAAM,GAAG,GAAG;mCACmB,IAAI,CAAC,KAAK;;;;;;KAMxC,CAAC;YACF,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;QAED;;WAEG;QACI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAgB;YAC5C,EAAE,CAAC,OAAO,CAAC,wBAAwB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QACzD,CAAC;QAED;;WAEG;QACI,KAAK,CAAC,MAAM,CAAC,EAAgB;YAClC,IAAI,CAAE,IAAY,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAgD,CAAC;YACxE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAI,EAAE,EAAG,IAAY,CAAC,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,kBAAmB,IAAY,CAAC,EAAE,YAAY,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAED;;WAEG;QACI,KAAK,CAAC,IAAI,CAAC,EAAgB;YAChC,IAAI,CAAE,IAAY,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAgD,CAAC;YACxE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAI,EAAE,EAAG,IAAY,CAAC,EAAE,CAAC,CAAC;YAElE,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED;;WAEG;QACI,KAAK,CAAC,MAAM,CAAC,EAAgB;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAgD,CAAC;YACvE,IAAY,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YACrC,IAAY,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAE/B,uCAAuC;YACvC,MAAM,SAAS,GAA2B,EAAE,CAAC;YAC7C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvD,MAAM,GAAG,GAAG,eAAe,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,YAAY,GAAG,CAAC;YAE9F,IAAI,CAAC;gBACH,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACjD,OAAO,IAAoB,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED;;WAEG;QACI,KAAK,CAAC,MAAM,CAAC,EAAgB;YAClC,IAAI,CAAE,IAAY,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAgD,CAAC;YACvE,IAAY,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEtC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACpC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC;iBAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,GAAG,GAAG,UAAU,SAAS,CAAC,KAAK,QAAQ,SAAS,UAAU,SAAS,CAAC,UAAU,MAAM,CAAC;YAE3F,IAAI,CAAC;gBACH,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAG,IAAY,CAAC,EAAE,CAAC,CAAC;gBAClE,OAAO,IAAoB,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACjD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED;;WAEG;QACI,KAAK,CAAC,UAAU,CAAC,EAAgB;YACrC,IAAY,CAAC,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC;YACjD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QAED;;WAEG;QACI,KAAK,CAAC,MAAM,CAAC,EAAgB;YAClC,IAAI,CAAE,IAAY,CAAC,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAgD,CAAC;YAExE,IAAI,CAAC;gBACH,EAAE,CAAC,OAAO,CACR,eAAe,SAAS,CAAC,KAAK,UAAU,SAAS,CAAC,UAAU,MAAM,CACnE,CAAC,GAAG,CAAE,IAAY,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACjD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED;;WAEG;QACI,KAAK,CAAC,MAAM,CAAC,EAAgB;YAClC,IAAI,CAAE,IAAY,CAAC,EAAE,EAAE,CAAC;gBACtB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAgD,CAAC;YACxE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAI,EAAE,EAAG,IAAY,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,CAAC,QAAQ,CAAC;QACpB,CAAC;QAED;;WAEG;QACI,MAAM,CAAC,QAAQ,CAAI,IAAgC;YACxD,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAS,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAE9C,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACxC,QAAQ,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACxC,QAAQ,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,QAAa,CAAC;QACvB,CAAC;QAED;;WAEG;QACI,MAAM;YACX,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,MAAM,GAA2B,EAAE,GAAG,QAAQ,EAAE,CAAC;YAEvD,IAAK,IAAY,CAAC,UAAU,KAAK,SAAS;gBACxC,MAAM,CAAC,UAAU,GAAI,IAAY,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACxD,IAAK,IAAY,CAAC,UAAU,KAAK,SAAS;gBACxC,MAAM,CAAC,UAAU,GAAI,IAAY,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAExD,OAAO,MAAM,CAAC;QAChB,CAAC;;;;;QAlTH,6KAmTC;;;;IA3RC,0DAA0D;IAC5C,gBAAK,GAAG,eAAe,AAAlB,CAAmB;IAEtC,oDAAoD;IACtC,qBAAU,GAAG,IAAI,AAAP,CAAQ;;QA5BrB,uDAAiB;;;;SAAjB,iBAAiB"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * ProtoObjectStream - Streaming utilities for ProtoObject using @sergdudko/objectstream
3
+ * @description Provides methods for efficient streaming serialization and deserialization
4
+ * @author Siarhei Dudko <siarhei@dudko.dev>
5
+ */
6
+ /* eslint-disable no-unused-vars */
7
+ import { Transform } from "node:stream";
8
+ import { Stringifer, Parser } from "@sergdudko/objectstream";
9
+ /**
10
+ * Utility class for streaming ProtoObject serialization using @sergdudko/objectstream
11
+ */
12
+ export class ProtoObjectStream {
13
+ /**
14
+ * Create a transform stream that converts ProtoObject instances to Buffer
15
+ * @returns Transform stream for object-to-buffer conversion
16
+ */
17
+ static createObjectToBufferStream() {
18
+ return new Transform({
19
+ objectMode: true,
20
+ transform(chunk, _encoding, callback) {
21
+ try {
22
+ // Convert ProtoObject to plain object if it has toJSON method
23
+ const plainObject = chunk && typeof chunk.toJSON === "function"
24
+ ? chunk.toJSON()
25
+ : chunk;
26
+ const stringifer = new Stringifer();
27
+ let result = "";
28
+ stringifer.on("data", (data) => {
29
+ result += data.toString();
30
+ });
31
+ stringifer.on("end", () => {
32
+ callback(null, Buffer.from(result));
33
+ });
34
+ stringifer.on("error", (error) => {
35
+ callback(error);
36
+ });
37
+ stringifer.write(plainObject);
38
+ stringifer.end();
39
+ }
40
+ catch (error) {
41
+ callback(error instanceof Error ? error : new Error(String(error)));
42
+ }
43
+ },
44
+ });
45
+ }
46
+ /**
47
+ * Create a transform stream that converts Buffer to ProtoObject instances
48
+ * @param objectClass - The ProtoObject class constructor
49
+ * @returns Transform stream for buffer-to-object conversion
50
+ */
51
+ static createBufferToObjectStream(objectClass) {
52
+ return new Transform({
53
+ objectMode: true,
54
+ transform(chunk, encoding, callback) {
55
+ try {
56
+ const parser = new Parser();
57
+ parser.on("data", (obj) => {
58
+ // Convert plain object back to ProtoObject instance if fromJSON exists
59
+ const result = objectClass && typeof objectClass.fromJSON === "function"
60
+ ? objectClass.fromJSON(obj)
61
+ : new objectClass(obj);
62
+ callback(null, result);
63
+ });
64
+ parser.on("error", (error) => {
65
+ callback(error);
66
+ });
67
+ parser.write(chunk);
68
+ parser.end();
69
+ }
70
+ catch (error) {
71
+ callback(error instanceof Error ? error : new Error(String(error)));
72
+ }
73
+ },
74
+ });
75
+ }
76
+ /**
77
+ * Create a complete serialization pipeline
78
+ * @param objectClass - The ProtoObject class constructor
79
+ * @returns Object with serialize and deserialize transforms
80
+ */
81
+ static createSerializationPipeline(objectClass) {
82
+ return {
83
+ serialize: this.createObjectToBufferStream(),
84
+ deserialize: this.createBufferToObjectStream(objectClass),
85
+ };
86
+ }
87
+ /**
88
+ * Create a bidirectional stream for two-way communication
89
+ * @param objectClass - The ProtoObject class constructor
90
+ * @returns Transform stream for bidirectional communication
91
+ */
92
+ static createBidirectionalStream(objectClass) {
93
+ return new Transform({
94
+ objectMode: true,
95
+ transform(chunk, encoding, callback) {
96
+ try {
97
+ if (Buffer.isBuffer(chunk)) {
98
+ // Buffer to object - deserialize
99
+ const parser = new Parser();
100
+ parser.on("data", (obj) => {
101
+ const result = objectClass &&
102
+ typeof objectClass.fromJSON === "function"
103
+ ? objectClass.fromJSON(obj)
104
+ : new objectClass(obj);
105
+ callback(null, result);
106
+ });
107
+ parser.on("error", (error) => {
108
+ callback(error);
109
+ });
110
+ parser.write(chunk);
111
+ parser.end();
112
+ }
113
+ else if (chunk &&
114
+ typeof chunk.toJSON === "function" &&
115
+ !Buffer.isBuffer(chunk)) {
116
+ // Object to buffer - serialize (but not if it's already a Buffer)
117
+ const plainObject = chunk.toJSON();
118
+ const stringifer = new Stringifer();
119
+ let result = "";
120
+ stringifer.on("data", (data) => {
121
+ result += data.toString();
122
+ });
123
+ stringifer.on("end", () => {
124
+ callback(null, Buffer.from(result));
125
+ });
126
+ stringifer.on("error", (error) => {
127
+ callback(error);
128
+ });
129
+ stringifer.write(plainObject);
130
+ stringifer.end();
131
+ }
132
+ else {
133
+ // Pass through
134
+ callback(null, chunk);
135
+ }
136
+ }
137
+ catch (error) {
138
+ callback(error instanceof Error ? error : new Error(String(error)));
139
+ }
140
+ },
141
+ });
142
+ }
143
+ }
144
+ //# sourceMappingURL=proto-object-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proto-object-stream.js","sourceRoot":"","sources":["../../../src/classes/proto-object-stream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;OAGG;IACI,MAAM,CAAC,0BAA0B;QACtC,OAAO,IAAI,SAAS,CAAC;YACnB,UAAU,EAAE,IAAI;YAChB,SAAS,CACP,KAAU,EACV,SAAiB,EACjB,QAAsD;gBAEtD,IAAI,CAAC;oBACH,8DAA8D;oBAC9D,MAAM,WAAW,GACf,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU;wBACzC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;wBAChB,CAAC,CAAC,KAAK,CAAC;oBAEZ,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;oBACpC,IAAI,MAAM,GAAG,EAAE,CAAC;oBAEhB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;wBACrC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5B,CAAC,CAAC,CAAC;oBAEH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;wBACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;oBAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;wBACtC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAClB,CAAC,CAAC,CAAC;oBAEH,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC9B,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,0BAA0B,CAC/B,WAAkC;QAElC,OAAO,IAAI,SAAS,CAAC;YACnB,UAAU,EAAE,IAAI;YAChB,SAAS,CACP,KAAa,EACb,QAAgB,EAChB,QAAoD;gBAEpD,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBAE5B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE;wBAC7B,uEAAuE;wBACvE,MAAM,MAAM,GACV,WAAW,IAAI,OAAQ,WAAmB,CAAC,QAAQ,KAAK,UAAU;4BAChE,CAAC,CAAE,WAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC;4BACpC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;wBAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACzB,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;wBAClC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAClB,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM,CAAC,GAAG,EAAE,CAAC;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,CAAI,WAAkC;QACtE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,0BAA0B,EAAE;YAC5C,WAAW,EAAE,IAAI,CAAC,0BAA0B,CAAI,WAAW,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,yBAAyB,CAC9B,WAAkC;QAElC,OAAO,IAAI,SAAS,CAAC;YACnB,UAAU,EAAE,IAAI;YAChB,SAAS,CACP,KAAU,EACV,QAAgB,EAChB,QAAoD;gBAEpD,IAAI,CAAC;oBACH,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3B,iCAAiC;wBACjC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;wBAE5B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE;4BAC7B,MAAM,MAAM,GACV,WAAW;gCACX,OAAQ,WAAmB,CAAC,QAAQ,KAAK,UAAU;gCACjD,CAAC,CAAE,WAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC;gCACpC,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;4BAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;wBACzB,CAAC,CAAC,CAAC;wBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;4BAClC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAClB,CAAC,CAAC,CAAC;wBAEH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACpB,MAAM,CAAC,GAAG,EAAE,CAAC;oBACf,CAAC;yBAAM,IACL,KAAK;wBACL,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU;wBAClC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvB,CAAC;wBACD,kEAAkE;wBAClE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;wBACnC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;wBACpC,IAAI,MAAM,GAAG,EAAE,CAAC;wBAEhB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;4BACrC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC5B,CAAC,CAAC,CAAC;wBAEH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;4BACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBACtC,CAAC,CAAC,CAAC;wBAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;4BACtC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAClB,CAAC,CAAC,CAAC;wBAEH,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;wBAC9B,UAAU,CAAC,GAAG,EAAE,CAAC;oBACnB,CAAC;yBAAM,CAAC;wBACN,eAAe;wBACf,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}