bloko 0.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/dist/cascade/manager.d.ts +21 -0
- package/dist/cascade/manager.d.ts.map +1 -0
- package/dist/cascade/manager.js +282 -0
- package/dist/cascade/manager.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +145 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client.d.ts +55 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +146 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/db/mongo.d.ts +15 -0
- package/dist/db/mongo.d.ts.map +1 -0
- package/dist/db/mongo.js +99 -0
- package/dist/db/mongo.js.map +1 -0
- package/dist/entities/base.d.ts +25 -0
- package/dist/entities/base.d.ts.map +1 -0
- package/dist/entities/base.js +71 -0
- package/dist/entities/base.js.map +1 -0
- package/dist/entities/blocks.d.ts +80 -0
- package/dist/entities/blocks.d.ts.map +1 -0
- package/dist/entities/blocks.js +152 -0
- package/dist/entities/blocks.js.map +1 -0
- package/dist/entities/collections.d.ts +40 -0
- package/dist/entities/collections.d.ts.map +1 -0
- package/dist/entities/collections.js +55 -0
- package/dist/entities/collections.js.map +1 -0
- package/dist/entities/contents.d.ts +60 -0
- package/dist/entities/contents.d.ts.map +1 -0
- package/dist/entities/contents.js +169 -0
- package/dist/entities/contents.js.map +1 -0
- package/dist/entities/image-variants.d.ts +95 -0
- package/dist/entities/image-variants.d.ts.map +1 -0
- package/dist/entities/image-variants.js +146 -0
- package/dist/entities/image-variants.js.map +1 -0
- package/dist/entities/images.d.ts +99 -0
- package/dist/entities/images.d.ts.map +1 -0
- package/dist/entities/images.js +128 -0
- package/dist/entities/images.js.map +1 -0
- package/dist/entities/languages.d.ts +25 -0
- package/dist/entities/languages.d.ts.map +1 -0
- package/dist/entities/languages.js +123 -0
- package/dist/entities/languages.js.map +1 -0
- package/dist/entities/node-relation-types.d.ts +60 -0
- package/dist/entities/node-relation-types.d.ts.map +1 -0
- package/dist/entities/node-relation-types.js +85 -0
- package/dist/entities/node-relation-types.js.map +1 -0
- package/dist/entities/node-relations.d.ts +61 -0
- package/dist/entities/node-relations.d.ts.map +1 -0
- package/dist/entities/node-relations.js +95 -0
- package/dist/entities/node-relations.js.map +1 -0
- package/dist/entities/node-types.d.ts +52 -0
- package/dist/entities/node-types.d.ts.map +1 -0
- package/dist/entities/node-types.js +67 -0
- package/dist/entities/node-types.js.map +1 -0
- package/dist/entities/nodes.d.ts +159 -0
- package/dist/entities/nodes.d.ts.map +1 -0
- package/dist/entities/nodes.js +265 -0
- package/dist/entities/nodes.js.map +1 -0
- package/dist/entities/templates.d.ts +60 -0
- package/dist/entities/templates.d.ts.map +1 -0
- package/dist/entities/templates.js +84 -0
- package/dist/entities/templates.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/storage/s3.d.ts +23 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +98 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/types.d.ts +113 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +51 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/image.d.ts +46 -0
- package/dist/utils/image.d.ts.map +1 -0
- package/dist/utils/image.js +117 -0
- package/dist/utils/image.js.map +1 -0
- package/dist/utils/multilang.d.ts +50 -0
- package/dist/utils/multilang.d.ts.map +1 -0
- package/dist/utils/multilang.js +124 -0
- package/dist/utils/multilang.js.map +1 -0
- package/dist/utils/slug.d.ts +25 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +80 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/validation/schemas.d.ts +728 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +164 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Db, ObjectId } from 'mongodb';
|
|
2
|
+
import type { S3Storage } from '../storage/s3.js';
|
|
3
|
+
export declare class CascadeManager {
|
|
4
|
+
private db;
|
|
5
|
+
private s3;
|
|
6
|
+
constructor(db: Db, s3: S3Storage);
|
|
7
|
+
cascadeCollectionDelete(collectionId: ObjectId): Promise<void>;
|
|
8
|
+
cascadeLanguageDelete(langId: string): Promise<void>;
|
|
9
|
+
cascadeLanguageRename(oldLangId: string, newLangId: string): Promise<void>;
|
|
10
|
+
private updateMultiLangFieldsOnLanguageChange;
|
|
11
|
+
private updateCollectionMultiLangFields;
|
|
12
|
+
private updateContentsMultiLangFields;
|
|
13
|
+
cascadeNodeTypeDelete(nodeTypeId: ObjectId): Promise<void>;
|
|
14
|
+
cascadeTemplateDelete(templateId: ObjectId): Promise<void>;
|
|
15
|
+
cascadeBlockDelete(blockId: ObjectId): Promise<void>;
|
|
16
|
+
cascadeBlockContentTypeChange(blockId: ObjectId): Promise<void>;
|
|
17
|
+
cascadeNodeDelete(nodeId: ObjectId): Promise<void>;
|
|
18
|
+
cascadeImageDelete(imageId: ObjectId): Promise<void>;
|
|
19
|
+
cascadeNodeRelationTypeDelete(nodeRelationTypeId: ObjectId): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cascade/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAoB5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,qBAAa,cAAc;IAEvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;gBADF,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,SAAS;IAOjB,uBAAuB,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0D9D,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKlE,qCAAqC;YA+DrC,+BAA+B;YAiC/B,6BAA6B;IA+DrC,qBAAqB,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1D,qBAAqB,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1D,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD,6BAA6B,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/D,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlD,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DpD,6BAA6B,CAAC,kBAAkB,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAMjF"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CascadeManager = void 0;
|
|
4
|
+
const config_js_1 = require("../config.js");
|
|
5
|
+
const multilang_js_1 = require("../utils/multilang.js");
|
|
6
|
+
class CascadeManager {
|
|
7
|
+
db;
|
|
8
|
+
s3;
|
|
9
|
+
constructor(db, s3) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.s3 = s3;
|
|
12
|
+
}
|
|
13
|
+
// ============================================
|
|
14
|
+
// Collection Cascade
|
|
15
|
+
// ============================================
|
|
16
|
+
async cascadeCollectionDelete(collectionId) {
|
|
17
|
+
// Delete all nodes in collection (which cascades to contents)
|
|
18
|
+
const nodes = await this.db
|
|
19
|
+
.collection(config_js_1.COLLECTION_NAMES.nodes)
|
|
20
|
+
.find({ _collection: collectionId })
|
|
21
|
+
.toArray();
|
|
22
|
+
for (const node of nodes) {
|
|
23
|
+
await this.cascadeNodeDelete(node._id);
|
|
24
|
+
}
|
|
25
|
+
// Delete the nodes themselves
|
|
26
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.nodes).deleteMany({ _collection: collectionId });
|
|
27
|
+
// Delete all templates (which cascades to blocks)
|
|
28
|
+
const templates = await this.db
|
|
29
|
+
.collection(config_js_1.COLLECTION_NAMES.templates)
|
|
30
|
+
.find({ _collection: collectionId })
|
|
31
|
+
.toArray();
|
|
32
|
+
for (const template of templates) {
|
|
33
|
+
await this.cascadeTemplateDelete(template._id);
|
|
34
|
+
}
|
|
35
|
+
// Delete the templates themselves
|
|
36
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.templates).deleteMany({ _collection: collectionId });
|
|
37
|
+
// Delete all images (which cascades to variants)
|
|
38
|
+
const images = await this.db
|
|
39
|
+
.collection(config_js_1.COLLECTION_NAMES.images)
|
|
40
|
+
.find({ _collection: collectionId })
|
|
41
|
+
.toArray();
|
|
42
|
+
for (const image of images) {
|
|
43
|
+
await this.cascadeImageDelete(image._id);
|
|
44
|
+
}
|
|
45
|
+
// Delete the images themselves
|
|
46
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.images).deleteMany({ _collection: collectionId });
|
|
47
|
+
// Delete all node relation types (which cascades to relations)
|
|
48
|
+
const relationTypes = await this.db
|
|
49
|
+
.collection(config_js_1.COLLECTION_NAMES.nodeRelationTypes)
|
|
50
|
+
.find({ _collection: collectionId })
|
|
51
|
+
.toArray();
|
|
52
|
+
for (const relationType of relationTypes) {
|
|
53
|
+
await this.cascadeNodeRelationTypeDelete(relationType._id);
|
|
54
|
+
}
|
|
55
|
+
// Delete the node relation types themselves
|
|
56
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.nodeRelationTypes).deleteMany({ _collection: collectionId });
|
|
57
|
+
}
|
|
58
|
+
// ============================================
|
|
59
|
+
// Language Cascade
|
|
60
|
+
// ============================================
|
|
61
|
+
async cascadeLanguageDelete(langId) {
|
|
62
|
+
// Update all multi-language fields across all entities
|
|
63
|
+
await this.updateMultiLangFieldsOnLanguageChange(langId, 'delete');
|
|
64
|
+
}
|
|
65
|
+
async cascadeLanguageRename(oldLangId, newLangId) {
|
|
66
|
+
// Rename language key in all multi-language fields
|
|
67
|
+
await this.updateMultiLangFieldsOnLanguageChange(oldLangId, 'rename', newLangId);
|
|
68
|
+
}
|
|
69
|
+
async updateMultiLangFieldsOnLanguageChange(langId, operation, newLangId) {
|
|
70
|
+
// Nodes: title, subtitle, slug
|
|
71
|
+
await this.updateCollectionMultiLangFields(config_js_1.COLLECTION_NAMES.nodes, ['title', 'subtitle', 'slug'], langId, operation, newLangId);
|
|
72
|
+
// Node Types: title
|
|
73
|
+
await this.updateCollectionMultiLangFields(config_js_1.COLLECTION_NAMES.nodeTypes, ['title'], langId, operation, newLangId);
|
|
74
|
+
// Templates: title
|
|
75
|
+
await this.updateCollectionMultiLangFields(config_js_1.COLLECTION_NAMES.templates, ['title'], langId, operation, newLangId);
|
|
76
|
+
// Blocks: title
|
|
77
|
+
await this.updateCollectionMultiLangFields(config_js_1.COLLECTION_NAMES.blocks, ['title'], langId, operation, newLangId);
|
|
78
|
+
// Node Relation Types: title, reverse_title
|
|
79
|
+
await this.updateCollectionMultiLangFields(config_js_1.COLLECTION_NAMES.nodeRelationTypes, ['title', 'reverse_title'], langId, operation, newLangId);
|
|
80
|
+
// Images: caption, credit
|
|
81
|
+
await this.updateCollectionMultiLangFields(config_js_1.COLLECTION_NAMES.images, ['caption', 'credit'], langId, operation, newLangId);
|
|
82
|
+
// Contents: value (for text, text_list, titled_text_list types)
|
|
83
|
+
await this.updateContentsMultiLangFields(langId, operation, newLangId);
|
|
84
|
+
}
|
|
85
|
+
async updateCollectionMultiLangFields(collectionName, fields, langId, operation, newLangId) {
|
|
86
|
+
const collection = this.db.collection(collectionName);
|
|
87
|
+
// Find documents that contain the language key
|
|
88
|
+
const orConditions = fields.map((field) => ({ [`${field}.${langId}`]: { $exists: true } }));
|
|
89
|
+
const docs = await collection.find({ $or: orConditions }).toArray();
|
|
90
|
+
for (const doc of docs) {
|
|
91
|
+
const updates = {};
|
|
92
|
+
for (const field of fields) {
|
|
93
|
+
const value = doc[field];
|
|
94
|
+
if (value && langId in value) {
|
|
95
|
+
if (operation === 'delete') {
|
|
96
|
+
updates[field] = (0, multilang_js_1.removeLanguageKey)(value, langId);
|
|
97
|
+
}
|
|
98
|
+
else if (operation === 'rename' && newLangId) {
|
|
99
|
+
updates[field] = (0, multilang_js_1.renameLanguageKey)(value, langId, newLangId);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (Object.keys(updates).length > 0) {
|
|
104
|
+
await collection.updateOne({ _id: doc._id }, { $set: updates });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async updateContentsMultiLangFields(langId, operation, newLangId) {
|
|
109
|
+
const contents = this.db.collection(config_js_1.COLLECTION_NAMES.contents);
|
|
110
|
+
const blocks = this.db.collection(config_js_1.COLLECTION_NAMES.blocks);
|
|
111
|
+
// Get all blocks with text-based content types
|
|
112
|
+
const textBlocks = await blocks
|
|
113
|
+
.find({ content_type: { $in: ['text', 'text_list', 'titled_text_list'] } })
|
|
114
|
+
.toArray();
|
|
115
|
+
const blockIds = textBlocks.map((b) => b._id);
|
|
116
|
+
// Find contents for these blocks
|
|
117
|
+
const contentDocs = await contents.find({ _block: { $in: blockIds } }).toArray();
|
|
118
|
+
for (const content of contentDocs) {
|
|
119
|
+
const block = textBlocks.find((b) => b._id.toString() === content._block.toString());
|
|
120
|
+
if (!block)
|
|
121
|
+
continue;
|
|
122
|
+
let newValue = content.value;
|
|
123
|
+
if (block.content_type === 'text') {
|
|
124
|
+
const value = content.value;
|
|
125
|
+
if (value && langId in value) {
|
|
126
|
+
if (operation === 'delete') {
|
|
127
|
+
newValue = (0, multilang_js_1.removeLanguageKey)(value, langId);
|
|
128
|
+
}
|
|
129
|
+
else if (newLangId) {
|
|
130
|
+
newValue = (0, multilang_js_1.renameLanguageKey)(value, langId, newLangId);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (block.content_type === 'text_list') {
|
|
135
|
+
const value = content.value;
|
|
136
|
+
if (value) {
|
|
137
|
+
if (operation === 'delete') {
|
|
138
|
+
newValue = (0, multilang_js_1.removeLanguageFromTextList)(value, langId);
|
|
139
|
+
}
|
|
140
|
+
else if (newLangId) {
|
|
141
|
+
newValue = (0, multilang_js_1.renameLanguageInTextList)(value, langId, newLangId);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else if (block.content_type === 'titled_text_list') {
|
|
146
|
+
const value = content.value;
|
|
147
|
+
if (value) {
|
|
148
|
+
if (operation === 'delete') {
|
|
149
|
+
newValue = (0, multilang_js_1.removeLanguageFromTitledTextList)(value, langId);
|
|
150
|
+
}
|
|
151
|
+
else if (newLangId) {
|
|
152
|
+
newValue = (0, multilang_js_1.renameLanguageInTitledTextList)(value, langId, newLangId);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (newValue !== content.value) {
|
|
157
|
+
await contents.updateOne({ _id: content._id }, { $set: { value: newValue } });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// ============================================
|
|
162
|
+
// Node Type Cascade
|
|
163
|
+
// ============================================
|
|
164
|
+
async cascadeNodeTypeDelete(nodeTypeId) {
|
|
165
|
+
// Delete all nodes using this node type
|
|
166
|
+
const nodes = await this.db
|
|
167
|
+
.collection(config_js_1.COLLECTION_NAMES.nodes)
|
|
168
|
+
.find({ _node_type: nodeTypeId })
|
|
169
|
+
.toArray();
|
|
170
|
+
for (const node of nodes) {
|
|
171
|
+
await this.cascadeNodeDelete(node._id);
|
|
172
|
+
}
|
|
173
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.nodes).deleteMany({ _node_type: nodeTypeId });
|
|
174
|
+
}
|
|
175
|
+
// ============================================
|
|
176
|
+
// Template Cascade
|
|
177
|
+
// ============================================
|
|
178
|
+
async cascadeTemplateDelete(templateId) {
|
|
179
|
+
// Delete all blocks in template
|
|
180
|
+
const blocks = await this.db
|
|
181
|
+
.collection(config_js_1.COLLECTION_NAMES.blocks)
|
|
182
|
+
.find({ _template: templateId })
|
|
183
|
+
.toArray();
|
|
184
|
+
for (const block of blocks) {
|
|
185
|
+
await this.cascadeBlockDelete(block._id);
|
|
186
|
+
}
|
|
187
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.blocks).deleteMany({ _template: templateId });
|
|
188
|
+
// Set _template to null for all nodes using this template
|
|
189
|
+
await this.db
|
|
190
|
+
.collection(config_js_1.COLLECTION_NAMES.nodes)
|
|
191
|
+
.updateMany({ _template: templateId }, { $set: { _template: null } });
|
|
192
|
+
}
|
|
193
|
+
// ============================================
|
|
194
|
+
// Block Cascade
|
|
195
|
+
// ============================================
|
|
196
|
+
async cascadeBlockDelete(blockId) {
|
|
197
|
+
// Delete all child blocks recursively
|
|
198
|
+
const children = await this.db
|
|
199
|
+
.collection(config_js_1.COLLECTION_NAMES.blocks)
|
|
200
|
+
.find({ _parent: blockId })
|
|
201
|
+
.toArray();
|
|
202
|
+
for (const child of children) {
|
|
203
|
+
await this.cascadeBlockDelete(child._id);
|
|
204
|
+
}
|
|
205
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.blocks).deleteMany({ _parent: blockId });
|
|
206
|
+
// Delete all contents for this block
|
|
207
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.contents).deleteMany({ _block: blockId });
|
|
208
|
+
}
|
|
209
|
+
async cascadeBlockContentTypeChange(blockId) {
|
|
210
|
+
// Delete all contents for this block
|
|
211
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.contents).deleteMany({ _block: blockId });
|
|
212
|
+
}
|
|
213
|
+
// ============================================
|
|
214
|
+
// Node Cascade
|
|
215
|
+
// ============================================
|
|
216
|
+
async cascadeNodeDelete(nodeId) {
|
|
217
|
+
// Delete all child nodes recursively
|
|
218
|
+
const children = await this.db
|
|
219
|
+
.collection(config_js_1.COLLECTION_NAMES.nodes)
|
|
220
|
+
.find({ _parent: nodeId })
|
|
221
|
+
.toArray();
|
|
222
|
+
for (const child of children) {
|
|
223
|
+
await this.cascadeNodeDelete(child._id);
|
|
224
|
+
}
|
|
225
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.nodes).deleteMany({ _parent: nodeId });
|
|
226
|
+
// Delete all contents for this node
|
|
227
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.contents).deleteMany({ _node: nodeId });
|
|
228
|
+
// Delete all node relations involving this node
|
|
229
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.nodeRelations).deleteMany({
|
|
230
|
+
$or: [{ _from: nodeId }, { _to: nodeId }],
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
// ============================================
|
|
234
|
+
// Image Cascade
|
|
235
|
+
// ============================================
|
|
236
|
+
async cascadeImageDelete(imageId) {
|
|
237
|
+
// Delete all variants
|
|
238
|
+
const variants = await this.db
|
|
239
|
+
.collection(config_js_1.COLLECTION_NAMES.imageVariants)
|
|
240
|
+
.find({ _image: imageId })
|
|
241
|
+
.toArray();
|
|
242
|
+
// Delete variant files from S3
|
|
243
|
+
if (variants.length > 0) {
|
|
244
|
+
await this.s3.deleteMany(variants.map((v) => v.s3_key));
|
|
245
|
+
}
|
|
246
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.imageVariants).deleteMany({ _image: imageId });
|
|
247
|
+
// Set _cover_image to null for nodes using this image
|
|
248
|
+
await this.db
|
|
249
|
+
.collection(config_js_1.COLLECTION_NAMES.nodes)
|
|
250
|
+
.updateMany({ _cover_image: imageId }, { $set: { _cover_image: null } });
|
|
251
|
+
// Remove from _images arrays in nodes
|
|
252
|
+
await this.db
|
|
253
|
+
.collection(config_js_1.COLLECTION_NAMES.nodes)
|
|
254
|
+
.updateMany({ '_images._image': imageId }, { $pull: { _images: { _image: imageId } } });
|
|
255
|
+
// Handle content with image type - set to null
|
|
256
|
+
// First get blocks with image content type
|
|
257
|
+
const imageBlocks = await this.db
|
|
258
|
+
.collection(config_js_1.COLLECTION_NAMES.blocks)
|
|
259
|
+
.find({ content_type: 'image' })
|
|
260
|
+
.toArray();
|
|
261
|
+
const imageBlockIds = imageBlocks.map((b) => b._id);
|
|
262
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.contents).updateMany({ _block: { $in: imageBlockIds }, value: imageId }, { $set: { value: null } });
|
|
263
|
+
// Handle content with images type - remove from array
|
|
264
|
+
const imagesBlocks = await this.db
|
|
265
|
+
.collection(config_js_1.COLLECTION_NAMES.blocks)
|
|
266
|
+
.find({ content_type: 'images' })
|
|
267
|
+
.toArray();
|
|
268
|
+
const imagesBlockIds = imagesBlocks.map((b) => b._id);
|
|
269
|
+
await this.db.collection(config_js_1.COLLECTION_NAMES.contents).updateMany({ _block: { $in: imagesBlockIds }, 'value._image': imageId }, { $pull: { value: { _image: imageId } } });
|
|
270
|
+
}
|
|
271
|
+
// ============================================
|
|
272
|
+
// Node Relation Type Cascade
|
|
273
|
+
// ============================================
|
|
274
|
+
async cascadeNodeRelationTypeDelete(nodeRelationTypeId) {
|
|
275
|
+
// Delete all node relations using this type
|
|
276
|
+
await this.db
|
|
277
|
+
.collection(config_js_1.COLLECTION_NAMES.nodeRelations)
|
|
278
|
+
.deleteMany({ _node_relation_type: nodeRelationTypeId });
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
exports.CascadeManager = CascadeManager;
|
|
282
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/cascade/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const index_js_1 = require("../index.js");
|
|
5
|
+
const args = process.argv.slice(2);
|
|
6
|
+
const command = args[0];
|
|
7
|
+
function printHelp() {
|
|
8
|
+
console.log(`
|
|
9
|
+
bloko - Multi-language CMS with MongoDB and S3
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
bloko <command> [options]
|
|
13
|
+
|
|
14
|
+
Commands:
|
|
15
|
+
init Initialize database (create indexes and S3 bucket)
|
|
16
|
+
validate Validate database integrity
|
|
17
|
+
export Export data to JSON
|
|
18
|
+
import Import data from JSON
|
|
19
|
+
admin Start the admin interface
|
|
20
|
+
version Show version
|
|
21
|
+
|
|
22
|
+
Options:
|
|
23
|
+
--mongo-uri MongoDB connection string (or BLOKO_MONGO_URI env)
|
|
24
|
+
--db-name Database name (or BLOKO_DB_NAME env)
|
|
25
|
+
--s3-bucket S3 bucket name (or BLOKO_S3_BUCKET env)
|
|
26
|
+
--s3-region S3 region (or BLOKO_S3_REGION env)
|
|
27
|
+
--s3-endpoint S3 endpoint (or BLOKO_S3_ENDPOINT env)
|
|
28
|
+
|
|
29
|
+
Examples:
|
|
30
|
+
bloko init --mongo-uri mongodb://localhost:27017 --db-name my_cms
|
|
31
|
+
bloko export --collection blog > backup.json
|
|
32
|
+
bloko import < backup.json
|
|
33
|
+
`);
|
|
34
|
+
}
|
|
35
|
+
function getConfig() {
|
|
36
|
+
const mongoUri = getArg('--mongo-uri') || process.env.BLOKO_MONGO_URI;
|
|
37
|
+
const dbName = getArg('--db-name') || process.env.BLOKO_DB_NAME;
|
|
38
|
+
const s3Bucket = getArg('--s3-bucket') || process.env.BLOKO_S3_BUCKET;
|
|
39
|
+
const s3Region = getArg('--s3-region') || process.env.BLOKO_S3_REGION || 'us-east-1';
|
|
40
|
+
const s3Endpoint = getArg('--s3-endpoint') || process.env.BLOKO_S3_ENDPOINT;
|
|
41
|
+
const s3AccessKey = process.env.BLOKO_S3_ACCESS_KEY || process.env.AWS_ACCESS_KEY_ID;
|
|
42
|
+
const s3SecretKey = process.env.BLOKO_S3_SECRET_KEY || process.env.AWS_SECRET_ACCESS_KEY;
|
|
43
|
+
if (!mongoUri || !dbName || !s3Bucket) {
|
|
44
|
+
console.error('Error: Missing required configuration.');
|
|
45
|
+
console.error('Provide --mongo-uri, --db-name, --s3-bucket or set environment variables.');
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
if (!s3AccessKey || !s3SecretKey) {
|
|
49
|
+
console.error('Error: Missing S3 credentials.');
|
|
50
|
+
console.error('Set BLOKO_S3_ACCESS_KEY/BLOKO_S3_SECRET_KEY or AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY.');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
mongoUri,
|
|
55
|
+
dbName,
|
|
56
|
+
s3: {
|
|
57
|
+
bucket: s3Bucket,
|
|
58
|
+
region: s3Region,
|
|
59
|
+
endpoint: s3Endpoint,
|
|
60
|
+
accessKeyId: s3AccessKey,
|
|
61
|
+
secretAccessKey: s3SecretKey,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function getArg(name) {
|
|
66
|
+
const index = args.indexOf(name);
|
|
67
|
+
if (index !== -1 && args[index + 1]) {
|
|
68
|
+
return args[index + 1];
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
async function init() {
|
|
73
|
+
const config = getConfig();
|
|
74
|
+
const bloko = new index_js_1.Bloko(config);
|
|
75
|
+
console.log('Connecting to MongoDB...');
|
|
76
|
+
await bloko.connect();
|
|
77
|
+
console.log('Database initialized successfully.');
|
|
78
|
+
console.log('- Indexes created');
|
|
79
|
+
console.log('- S3 bucket ensured');
|
|
80
|
+
await bloko.disconnect();
|
|
81
|
+
}
|
|
82
|
+
async function validate() {
|
|
83
|
+
const config = getConfig();
|
|
84
|
+
const bloko = new index_js_1.Bloko(config);
|
|
85
|
+
console.log('Connecting...');
|
|
86
|
+
await bloko.connect();
|
|
87
|
+
console.log('Validating database integrity...');
|
|
88
|
+
// TODO: Add validation logic
|
|
89
|
+
console.log('Validation complete.');
|
|
90
|
+
await bloko.disconnect();
|
|
91
|
+
}
|
|
92
|
+
async function admin() {
|
|
93
|
+
const port = getArg('--port') || process.env.BLOKO_ADMIN_PORT || '3000';
|
|
94
|
+
console.log(`Starting admin interface on http://localhost:${port}`);
|
|
95
|
+
console.log('Admin interface not yet implemented');
|
|
96
|
+
// TODO: Start built SvelteKit admin server
|
|
97
|
+
// The admin will be built and bundled with the package
|
|
98
|
+
// It will use the same config (mongo, s3) to connect to the database
|
|
99
|
+
}
|
|
100
|
+
function version() {
|
|
101
|
+
// Read from package.json at runtime
|
|
102
|
+
console.log('bloko v0.0.1');
|
|
103
|
+
}
|
|
104
|
+
async function main() {
|
|
105
|
+
try {
|
|
106
|
+
switch (command) {
|
|
107
|
+
case 'init':
|
|
108
|
+
await init();
|
|
109
|
+
break;
|
|
110
|
+
case 'validate':
|
|
111
|
+
await validate();
|
|
112
|
+
break;
|
|
113
|
+
case 'export':
|
|
114
|
+
console.log('Export not yet implemented');
|
|
115
|
+
break;
|
|
116
|
+
case 'import':
|
|
117
|
+
console.log('Import not yet implemented');
|
|
118
|
+
break;
|
|
119
|
+
case 'admin':
|
|
120
|
+
await admin();
|
|
121
|
+
break;
|
|
122
|
+
case 'version':
|
|
123
|
+
case '-v':
|
|
124
|
+
case '--version':
|
|
125
|
+
version();
|
|
126
|
+
break;
|
|
127
|
+
case 'help':
|
|
128
|
+
case '-h':
|
|
129
|
+
case '--help':
|
|
130
|
+
case undefined:
|
|
131
|
+
printHelp();
|
|
132
|
+
break;
|
|
133
|
+
default:
|
|
134
|
+
console.error(`Unknown command: ${command}`);
|
|
135
|
+
printHelp();
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
main();
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,0CAAoC;AAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW,CAAC;IACrF,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC5E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACrF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAEzF,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;QACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO;QACL,QAAQ;QACR,MAAM;QACN,EAAE,EAAE;YACF,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,WAAW;YACxB,eAAe,EAAE,WAAW;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,gBAAK,CAAC,MAAM,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,gBAAK,CAAC,MAAM,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,6BAA6B;IAC7B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,KAAK;IAClB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,gDAAgD,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,2CAA2C;IAC3C,uDAAuD;IACvD,qEAAqE;AACvE,CAAC;AAED,SAAS,OAAO;IACd,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM;gBACT,MAAM,IAAI,EAAE,CAAC;gBACb,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,QAAQ,EAAE,CAAC;gBACjB,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,KAAK,EAAE,CAAC;gBACd,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI,CAAC;YACV,KAAK,WAAW;gBACd,OAAO,EAAE,CAAC;gBACV,MAAM;YACR,KAAK,MAAM,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,SAAS,EAAE,CAAC;gBACZ,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBAC7C,SAAS,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ObjectId, type Db } from 'mongodb';
|
|
2
|
+
import type { BlokoConfig } from './config.js';
|
|
3
|
+
import { S3Storage } from './storage/s3.js';
|
|
4
|
+
import { Collections } from './entities/collections.js';
|
|
5
|
+
import { Languages } from './entities/languages.js';
|
|
6
|
+
import { NodeTypes } from './entities/node-types.js';
|
|
7
|
+
import { Templates } from './entities/templates.js';
|
|
8
|
+
import { Blocks } from './entities/blocks.js';
|
|
9
|
+
import { Nodes } from './entities/nodes.js';
|
|
10
|
+
import { Contents } from './entities/contents.js';
|
|
11
|
+
import { Images } from './entities/images.js';
|
|
12
|
+
import { ImageVariants } from './entities/image-variants.js';
|
|
13
|
+
import { NodeRelationTypes } from './entities/node-relation-types.js';
|
|
14
|
+
import { NodeRelations } from './entities/node-relations.js';
|
|
15
|
+
export declare class Bloko {
|
|
16
|
+
private mongo;
|
|
17
|
+
private s3;
|
|
18
|
+
private cascade;
|
|
19
|
+
private db;
|
|
20
|
+
private _connected;
|
|
21
|
+
collections: Collections;
|
|
22
|
+
languages: Languages;
|
|
23
|
+
nodeTypes: NodeTypes;
|
|
24
|
+
templates: Templates;
|
|
25
|
+
blocks: Blocks;
|
|
26
|
+
nodes: Nodes;
|
|
27
|
+
contents: Contents;
|
|
28
|
+
images: Images;
|
|
29
|
+
imageVariants: ImageVariants;
|
|
30
|
+
nodeRelationTypes: NodeRelationTypes;
|
|
31
|
+
nodeRelations: NodeRelations;
|
|
32
|
+
constructor(config: BlokoConfig);
|
|
33
|
+
connect(): Promise<void>;
|
|
34
|
+
disconnect(): Promise<void>;
|
|
35
|
+
get connected(): boolean;
|
|
36
|
+
private getEntityContext;
|
|
37
|
+
private initializeEntities;
|
|
38
|
+
/**
|
|
39
|
+
* Get the raw MongoDB database instance
|
|
40
|
+
*/
|
|
41
|
+
getDb(): Db;
|
|
42
|
+
/**
|
|
43
|
+
* Get the S3 storage instance
|
|
44
|
+
*/
|
|
45
|
+
getS3(): S3Storage;
|
|
46
|
+
/**
|
|
47
|
+
* Helper to convert string to ObjectId
|
|
48
|
+
*/
|
|
49
|
+
static toObjectId(id: string): ObjectId;
|
|
50
|
+
/**
|
|
51
|
+
* Check if a string is a valid ObjectId
|
|
52
|
+
*/
|
|
53
|
+
static isValidObjectId(id: string): boolean;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAkC,MAAM,SAAS,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,UAAU,CAAS;IAGpB,WAAW,EAAG,WAAW,CAAC;IAC1B,SAAS,EAAG,SAAS,CAAC;IACtB,SAAS,EAAG,SAAS,CAAC;IACtB,SAAS,EAAG,SAAS,CAAC;IACtB,MAAM,EAAG,MAAM,CAAC;IAChB,KAAK,EAAG,KAAK,CAAC;IACd,QAAQ,EAAG,QAAQ,CAAC;IACpB,MAAM,EAAG,MAAM,CAAC;IAChB,aAAa,EAAG,aAAa,CAAC;IAC9B,iBAAiB,EAAG,iBAAiB,CAAC;IACtC,aAAa,EAAG,aAAa,CAAC;gBAEzB,MAAM,EAAE,WAAW;IAKzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAiG1B;;OAEG;IACH,KAAK,IAAI,EAAE;IAOX;;OAEG;IACH,KAAK,IAAI,SAAS;IAIlB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAIvC;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAG5C"}
|