noblog 0.0.10 → 0.0.12

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.
@@ -0,0 +1,473 @@
1
+ import * as path from "path";
2
+ import * as fs from "fs/promises";
3
+ import * as fmt from "./format.js";
4
+ import { GetPageMeta, GetBlockChildren, client as notion_client, } from "../notion/client.js";
5
+ export class Noblog {
6
+ Posts = [];
7
+ CurrPage = "";
8
+ SavePath = "./src/pages/posts/";
9
+ ChildPath = "nob_children/";
10
+ MdCollection = {};
11
+ CustomTransformers = {};
12
+ constructor(posts, save_path, child_path) {
13
+ this.Posts = posts;
14
+ if (child_path != undefined) {
15
+ this.ChildPath = child_path;
16
+ }
17
+ if (save_path != undefined) {
18
+ this.SavePath = save_path;
19
+ }
20
+ this.CustomTransformers["child_page"] = async (block) => {
21
+ const page = block;
22
+ if (!page?.id) {
23
+ return false;
24
+ }
25
+ let sub_path;
26
+ // if (curr_page.id in this.Post) and (page.id in this.Post) ||
27
+ // (curr_page.id not in this.Post) and (page.id not in this.Post)
28
+ // * path should be "../pageid"
29
+ // if (curr_page.id in this.Post) and (page.id not in this.Post)
30
+ // * path should be "../save_path/pageid"
31
+ // if (curr_page.id not in this.Post) and (page.id in this.Post)
32
+ // * path should be "../../pageid"
33
+ const parent_surface = this.Posts.filter((post) => post.id === this.CurrPage).length > 0;
34
+ const child_surface = this.Posts.filter((post) => post.id === page.id).length > 0;
35
+ if (parent_surface === child_surface) {
36
+ sub_path = "";
37
+ }
38
+ else if (parent_surface) {
39
+ sub_path = this.ChildPath;
40
+ }
41
+ else {
42
+ sub_path = "..";
43
+ }
44
+ const full_path = path.join("../", sub_path, page.id);
45
+ return `&[${page.child_page.title}](${full_path})`;
46
+ };
47
+ }
48
+ async Collect(recur = true) {
49
+ const save_dir = this.SavePath;
50
+ const sub_dir = path.join(save_dir, this.ChildPath);
51
+ for (const page of this.Posts) {
52
+ await this.FromPageid(page.id, recur);
53
+ }
54
+ try {
55
+ for (const pageid of Object.keys(this.MdCollection)) {
56
+ let fpath = sub_dir;
57
+ if (this.Posts.find((page) => page.id === pageid))
58
+ fpath = save_dir;
59
+ await this.SaveJelly(pageid + ".md", fpath, this.MdCollection[pageid]);
60
+ }
61
+ console.log(`success: finish dump all files to "${save_dir}"`);
62
+ }
63
+ catch (error) {
64
+ if (error instanceof Error) {
65
+ console.log(`failed: consider run verbose with v=true - ${error.message}`);
66
+ }
67
+ else {
68
+ console.log("failed: an unknown error occurred");
69
+ }
70
+ }
71
+ }
72
+ async FromBlocks(blocks, recursive) {
73
+ const jelly = { content: "", children: [] };
74
+ for (const block of blocks) {
75
+ const subjelly = await this.FromBlocks(block.children, recursive);
76
+ if (block.type === "toggle") {
77
+ jelly.content += fmt.toggle(block.parent, subjelly.content);
78
+ jelly.children = [...jelly.children, ...subjelly.children];
79
+ continue;
80
+ }
81
+ let line_wrap = "";
82
+ if (block.type !== "to_do" &&
83
+ block.type !== "bulleted_list_item" &&
84
+ block.type !== "numbered_list_item") {
85
+ line_wrap = "\n";
86
+ }
87
+ jelly.content +=
88
+ line_wrap + `${fmt.addTabSpace(block.parent, 0)}\n` + line_wrap;
89
+ if (block.type === "child_page") {
90
+ jelly.children = [...jelly.children, block.blockId];
91
+ if (recursive)
92
+ await this.FromPageid(block.blockId, recursive);
93
+ }
94
+ else {
95
+ jelly.content += subjelly.content;
96
+ jelly.children = [...jelly.children, ...subjelly.children];
97
+ }
98
+ }
99
+ return jelly;
100
+ }
101
+ async FromPageid(page_id, recursive = true) {
102
+ // preserve the curr page info
103
+ const prev_page = this.CurrPage;
104
+ this.CurrPage = page_id;
105
+ if (this.MdCollection.hasOwnProperty(page_id)) {
106
+ return this.MdCollection[page_id];
107
+ }
108
+ const blocks = await this.PageToMarkdown(page_id);
109
+ const jelly = await this.FromBlocks(blocks, recursive);
110
+ const meta = await GetPageMeta(page_id);
111
+ const astro_meta = await this.AssembleAstroFrontmatter(meta);
112
+ jelly.content = astro_meta + jelly.content;
113
+ this.MdCollection[page_id] = jelly;
114
+ // restore the prev page info
115
+ this.CurrPage = prev_page;
116
+ return jelly;
117
+ }
118
+ async PageToMarkdown(id, totalPage) {
119
+ if (!notion_client) {
120
+ throw new Error("notion client is not provided, for more details check out https://github.com/souvikinator/notion-to-md");
121
+ }
122
+ const blocks = await GetBlockChildren(id, totalPage);
123
+ const parsedData = await this.BlocksToMarkdown(blocks);
124
+ return parsedData;
125
+ }
126
+ async BlocksToMarkdown(blocks, totalPage = null, mdBlocks = []) {
127
+ if (!notion_client) {
128
+ throw new Error("notion client is not provided, for more details check out https://github.com/souvikinator/notion-to-md");
129
+ }
130
+ if (!mdBlocks)
131
+ mdBlocks = [];
132
+ if (!blocks)
133
+ return mdBlocks;
134
+ for (let i = 0; i < blocks.length; i++) {
135
+ const block = blocks[i];
136
+ if (
137
+ // @ts-ignore
138
+ block.type === "unsupported") {
139
+ continue;
140
+ }
141
+ if ("has_children" in block && block.has_children) {
142
+ const block_id = block.type == "synced_block" &&
143
+ block.synced_block?.synced_from?.block_id
144
+ ? block.synced_block.synced_from.block_id
145
+ : block.id;
146
+ // Get children of this block.
147
+ const child_blocks = await GetBlockChildren(block_id, totalPage);
148
+ // Recursively call BlocksToMarkdown to get children of this block.
149
+ // check for custom transformer before parsing child
150
+ if (!(block.type in this.CustomTransformers) &&
151
+ !this.CustomTransformers[block.type]) {
152
+ const l = mdBlocks.length;
153
+ if (mdBlocks !== undefined) {
154
+ await this.BlocksToMarkdown(child_blocks, totalPage, mdBlocks[l - 1]?.children);
155
+ }
156
+ }
157
+ // Push this block to mdBlocks.
158
+ mdBlocks.push({
159
+ type: block.type,
160
+ blockId: block.id,
161
+ parent: await this.BlockToMarkdown(block),
162
+ children: [],
163
+ });
164
+ continue;
165
+ }
166
+ const tmp = await this.BlockToMarkdown(block);
167
+ mdBlocks.push({
168
+ // @ts-ignore
169
+ type: block.type,
170
+ blockId: block.id,
171
+ parent: tmp,
172
+ children: [],
173
+ });
174
+ }
175
+ return mdBlocks;
176
+ }
177
+ async BlockToMarkdown(block) {
178
+ if (typeof block !== "object" || !("type" in block))
179
+ return "";
180
+ let parsedData = "";
181
+ const { type } = block;
182
+ if (type in this.CustomTransformers && !!this.CustomTransformers[type]) {
183
+ const transformer = this.CustomTransformers[type];
184
+ const customTransformerValue = transformer(block);
185
+ if (typeof customTransformerValue === "string")
186
+ return customTransformerValue;
187
+ }
188
+ switch (type) {
189
+ case "image":
190
+ const blockContent = block.image;
191
+ let image_title = "image";
192
+ const image_caption_plain = blockContent.caption
193
+ .map((item) => item.plain_text)
194
+ .join("");
195
+ let link = "";
196
+ const image_type = blockContent.type;
197
+ if (image_type === "external") {
198
+ link = blockContent.external.url;
199
+ }
200
+ if (image_type === "file") {
201
+ link = blockContent.file.url;
202
+ }
203
+ // image caption with high priority
204
+ if (image_caption_plain.trim().length > 0) {
205
+ image_title = image_caption_plain;
206
+ }
207
+ else if (image_type === "file" || image_type === "external") {
208
+ const matches = link.match(/[^\/\\&\?]+\.\w{3,4}(?=([\?&].*$|$))/);
209
+ image_title = matches ? matches[0] : image_title;
210
+ }
211
+ return await fmt.image(image_title, link, false);
212
+ case "divider":
213
+ return fmt.divider();
214
+ case "equation":
215
+ return fmt.equation(block.equation.expression);
216
+ case "pdf":
217
+ case "file":
218
+ case "video":
219
+ {
220
+ let blockContent;
221
+ let title = type;
222
+ if (type === "pdf")
223
+ blockContent = block.pdf;
224
+ if (type === "file")
225
+ blockContent = block.file;
226
+ if (type === "video")
227
+ blockContent = block.video;
228
+ const caption = blockContent?.caption
229
+ .map((item) => item.plain_text)
230
+ .join("");
231
+ if (blockContent) {
232
+ const file_type = blockContent.type;
233
+ let link = "";
234
+ if (file_type === "file")
235
+ link = blockContent.file.url;
236
+ if (file_type === "external")
237
+ link = blockContent.external.url;
238
+ if (caption && caption.trim().length > 0) {
239
+ title = caption;
240
+ }
241
+ else if (link) {
242
+ const matches = link.match(/[^\/\\&\?]+\.\w{3,4}(?=([\?&].*$|$))/);
243
+ title = matches ? matches[0] : type;
244
+ }
245
+ return fmt.link(title, link);
246
+ }
247
+ }
248
+ break;
249
+ case "embed":
250
+ case "bookmark":
251
+ case "link_preview":
252
+ case "link_to_page":
253
+ {
254
+ let blockContent;
255
+ const title = type;
256
+ if (type === "embed")
257
+ blockContent = block.embed;
258
+ if (type === "bookmark")
259
+ blockContent = block.bookmark;
260
+ if (type === "link_preview")
261
+ blockContent = block.link_preview;
262
+ if (type === "link_to_page" &&
263
+ block.link_to_page.type === "page_id") {
264
+ blockContent = {
265
+ url: `https://www.notion.so/${block.link_to_page.page_id}`,
266
+ };
267
+ }
268
+ if (blockContent)
269
+ return fmt.link(title, blockContent.url);
270
+ }
271
+ break;
272
+ case "child_page": {
273
+ const pageTitle = block.child_page.title;
274
+ return fmt.heading2(pageTitle);
275
+ }
276
+ case "child_database": {
277
+ const pageTitle = block.child_database.title || `child_database`;
278
+ return fmt.heading2(pageTitle);
279
+ }
280
+ case "table": {
281
+ const { id, has_children } = block;
282
+ const tableArr = [];
283
+ if (has_children) {
284
+ const tableRows = await GetBlockChildren(id, 100);
285
+ const rowsPromise = tableRows?.map(async (row) => {
286
+ const { type } = row;
287
+ const cells = row[type]["cells"];
288
+ /**
289
+ * this is more like a hack since matching the type text was
290
+ * difficult. So converting each cell to paragraph type to
291
+ * reuse the BlockToMarkdown function
292
+ */
293
+ const cellStringPromise = cells.map(async (cell) => await this.BlockToMarkdown({
294
+ type: "paragraph",
295
+ paragraph: { rich_text: cell },
296
+ }));
297
+ const cellStringArr = await Promise.all(cellStringPromise);
298
+ tableArr.push(cellStringArr);
299
+ });
300
+ await Promise.all(rowsPromise || []);
301
+ }
302
+ return fmt.table(tableArr);
303
+ }
304
+ // Rest of the types:
305
+ // "paragraph" "heading_1" "heading_2" "heading_3"
306
+ // "bulleted_list_item" "numbered_list_item"
307
+ // "quote" "to_do" "template" "synced_block"
308
+ // "child_page" "child_database" "code" "callout" "breadcrumb"
309
+ // "table_of_contents" "link_to_page" "audio" "unsupported"
310
+ default: {
311
+ // @ts-ignore
312
+ const blockContent = block[type].text || block[type].rich_text || [];
313
+ const bucket = [];
314
+ const code_range = [];
315
+ const bold_range = [];
316
+ const italic_range = [];
317
+ const underline_range = [];
318
+ const strikethrough_range = [];
319
+ const push_or_merge = (arr, idx) => {
320
+ if (arr.length == 0) {
321
+ return;
322
+ }
323
+ // @ts-ignore
324
+ if (arr[arr.length - 1][1] === idx) {
325
+ // @ts-ignore
326
+ arr[arr.length - 1][1] += 1;
327
+ }
328
+ else {
329
+ arr.push([idx, idx + 1]);
330
+ }
331
+ };
332
+ for (let i = 0; i < blockContent.length; i++) {
333
+ const content = blockContent[i];
334
+ if (content.type === "equation") {
335
+ bucket.push(fmt.inlineEquation(content.equation.expression));
336
+ continue;
337
+ }
338
+ let plain_text = content.plain_text;
339
+ if (content["href"])
340
+ plain_text = fmt.link(plain_text, content["href"]);
341
+ bucket.push(plain_text);
342
+ const annotations = content.annotations;
343
+ if (annotations.code)
344
+ push_or_merge(code_range, i);
345
+ if (annotations.bold)
346
+ push_or_merge(bold_range, i);
347
+ if (annotations.italic)
348
+ push_or_merge(italic_range, i);
349
+ if (annotations.underline)
350
+ push_or_merge(underline_range, i);
351
+ if (annotations.strikethrough)
352
+ push_or_merge(strikethrough_range, i);
353
+ }
354
+ const annoed_bucket = [];
355
+ for (const range of code_range)
356
+ annoed_bucket.push({ range: range, type: "code" });
357
+ for (const range of bold_range)
358
+ annoed_bucket.push({ range: range, type: "bold" });
359
+ for (const range of italic_range)
360
+ annoed_bucket.push({ range: range, type: "italic" });
361
+ for (const range of underline_range)
362
+ annoed_bucket.push({ range: range, type: "underline" });
363
+ for (const range of strikethrough_range)
364
+ annoed_bucket.push({ range: range, type: "strikethrough" });
365
+ annoed_bucket.sort(
366
+ // @ts-ignore
367
+ (a, b) => a.range[1] - a.range[0] - (b.range[1] - b.range[0]));
368
+ for (const annoed of annoed_bucket) {
369
+ const type = annoed.type;
370
+ const [from, to] = annoed.range;
371
+ let panno, sanno = fmt.GetPrefixSuffix(type);
372
+ // @ts-ignore
373
+ bucket[from] = panno + bucket[from];
374
+ // @ts-ignore
375
+ bucket[to - 1] = bucket[to - 1] + sanno;
376
+ }
377
+ bucket.forEach((x) => (parsedData += x));
378
+ }
379
+ }
380
+ switch (type) {
381
+ case "code":
382
+ parsedData = fmt.codeBlock(parsedData, block[type].language);
383
+ break;
384
+ case "heading_1":
385
+ parsedData = fmt.heading1(parsedData);
386
+ break;
387
+ case "heading_2":
388
+ parsedData = fmt.heading2(parsedData);
389
+ break;
390
+ case "heading_3":
391
+ parsedData = fmt.heading3(parsedData);
392
+ break;
393
+ case "quote":
394
+ parsedData = fmt.quote(parsedData);
395
+ break;
396
+ case "callout":
397
+ const { id, has_children } = block;
398
+ let callout_string = "";
399
+ if (!has_children) {
400
+ return fmt.callout(parsedData, block[type].icon);
401
+ }
402
+ const callout_children_object = await GetBlockChildren(id, 100);
403
+ const callout_children = await this.BlocksToMarkdown(callout_children_object);
404
+ callout_string += `${parsedData}\n`;
405
+ callout_children.map((child) => {
406
+ callout_string += `${child.parent}\n\n`;
407
+ });
408
+ parsedData = fmt.callout(callout_string.trim(), block[type].icon);
409
+ break;
410
+ case "bulleted_list_item":
411
+ parsedData = fmt.bullet(parsedData);
412
+ break;
413
+ case "numbered_list_item":
414
+ parsedData = fmt.bullet(parsedData, block.numbered_list_item.number);
415
+ break;
416
+ case "to_do":
417
+ parsedData = fmt.todo(parsedData, block.to_do.checked);
418
+ break;
419
+ }
420
+ return parsedData;
421
+ }
422
+ async SaveJelly(fname, dir, jelly) {
423
+ if (jelly === undefined)
424
+ return `failed: ${fname} has empty jelly: `;
425
+ try {
426
+ await fs.mkdir(dir, { recursive: true });
427
+ const filePath = path.join(dir, fname);
428
+ await fs.writeFile(filePath, jelly.content, "utf-8");
429
+ return `success: ${fname} saved to ${filePath}`;
430
+ }
431
+ catch (error) {
432
+ if (error instanceof Error) {
433
+ return `failed: ${fname} - ${error.message}`;
434
+ }
435
+ else {
436
+ return "failed: an unknown error occurred";
437
+ }
438
+ }
439
+ }
440
+ async AssembleAstroFrontmatter(page) {
441
+ let frontmatter = "";
442
+ // default layout
443
+ const ischild = this.Posts.filter((post) => post.id === page.id).length > 0 ? "" : "../";
444
+ frontmatter +=
445
+ "layout: " + ischild + "../../layouts/MarkdownPostLayout.astro" + "\n";
446
+ // get title
447
+ frontmatter +=
448
+ "title: " +
449
+ JSON.stringify(page.properties.title?.title?.[0]?.plain_text ?? "") +
450
+ "\n";
451
+ // get tags
452
+ frontmatter +=
453
+ "tags: " +
454
+ JSON.stringify((page.properties.tags?.multi_select ?? []).map((tag) => tag.name)) +
455
+ "\n";
456
+ // get date
457
+ frontmatter +=
458
+ "pubDate: " +
459
+ (page.properties.date?.date?.start ??
460
+ new Date().toISOString().split("T")[0]) +
461
+ "\n";
462
+ // get archived
463
+ frontmatter +=
464
+ "archived: " + (page.properties.archived ? "true" : "false") + "\n";
465
+ // get description
466
+ frontmatter +=
467
+ "description: " +
468
+ JSON.stringify(page.properties.description?.rich_text?.[0]?.plain_text ?? "") +
469
+ "\n";
470
+ return "---\n" + frontmatter + "---\n";
471
+ }
472
+ }
473
+ //# sourceMappingURL=nomd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nomd.js","sourceRoot":"","sources":["../../../src/lib/nomd/nomd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAEnC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,MAAM,IAAI,aAAa,GAGxB,MAAM,qBAAqB,CAAC;AAqB7B,MAAM,OAAO,MAAM;IACjB,KAAK,GAAW,EAAE,CAAC;IACnB,QAAQ,GAAW,EAAE,CAAC;IACtB,QAAQ,GAAW,oBAAoB,CAAC;IACxC,SAAS,GAAW,eAAe,CAAC;IACpC,YAAY,GAA4B,EAAE,CAAC;IAC3C,kBAAkB,GAAsC,EAAE,CAAC;IAE3D,YAAY,KAAa,EAAE,SAAkB,EAAE,UAAmB;QAChE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;QAC9B,CAAC;QACD,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,KAAY,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,QAAQ,CAAC;YAEb,+DAA+D;YAC/D,oEAAoE;YACpE,kCAAkC;YAClC,gEAAgE;YAChE,4CAA4C;YAC5C,gEAAgE;YAChE,qCAAqC;YACrC,MAAM,cAAc,GAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACpE,MAAM,aAAa,GACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAE9D,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;gBACrC,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;iBAAM,IAAI,cAAc,EAAE,CAAC;gBAC1B,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtD,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAiB,IAAI;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC;YACH,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpD,IAAI,KAAK,GAAG,OAAO,CAAC;gBACpB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;oBAAE,KAAK,GAAG,QAAQ,CAAC;gBACpE,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,sCAAsC,QAAQ,GAAG,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CACT,8CAA8C,KAAK,CAAC,OAAO,EAAE,CAC9D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAiB,EAAE,SAAkB;QACpD,MAAM,KAAK,GAAY,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACrD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAElE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC5D,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IACE,KAAK,CAAC,IAAI,KAAK,OAAO;gBACtB,KAAK,CAAC,IAAI,KAAK,oBAAoB;gBACnC,KAAK,CAAC,IAAI,KAAK,oBAAoB,EACnC,CAAC;gBACD,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YACD,KAAK,CAAC,OAAO;gBACX,SAAS,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;YAClE,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,SAAS;oBAAE,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC;gBAClC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,YAAqB,IAAI;QACzD,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,CAAC,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAEnC,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,SAAqC;QAErC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,MAAyC,EACzC,YAA2B,IAAI,EAC/B,WAAsB,EAAE;QAExB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ;YAAE,QAAQ,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAoC,MAAM,CAAC,CAAC,CAAE,CAAC;YAE1D;YACE,aAAa;YACb,KAAK,CAAC,IAAI,KAAK,aAAa,EAC5B,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,cAAc,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBAClD,MAAM,QAAQ,GACZ,KAAK,CAAC,IAAI,IAAI,cAAc;oBAC5B,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ;oBACvC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ;oBACzC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACf,8BAA8B;gBAC9B,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAEjE,mEAAmE;gBACnE,oDAAoD;gBACpD,IACE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC;oBACxC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EACpC,CAAC;oBACD,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC1B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;wBAC3B,MAAM,IAAI,CAAC,gBAAgB,CACzB,YAAY,EACZ,SAAS,EACT,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAC1B,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,+BAA+B;gBAC/B,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,MAAM,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;oBACzC,QAAQ,EAAE,EAAE;iBACb,CAAC,CAAC;gBAEH,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC;gBACZ,aAAa;gBACb,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,MAAM,EAAE,GAAG;gBACX,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAsC;QAEtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAE,CAAC;YACnD,MAAM,sBAAsB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,OAAO,sBAAsB,KAAK,QAAQ;gBAC5C,OAAO,sBAAsB,CAAC;QAClC,CAAC;QAED,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;gBACjC,IAAI,WAAW,GAAG,OAAO,CAAC;gBAE1B,MAAM,mBAAmB,GAAG,YAAY,CAAC,OAAO;qBAC7C,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;qBACnC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEZ,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC;gBACrC,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC9B,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACnC,CAAC;gBAED,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;oBAC1B,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC/B,CAAC;gBAED,mCAAmC;gBACnC,IAAI,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,WAAW,GAAG,mBAAmB,CAAC;gBACpC,CAAC;qBAAM,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;oBACnE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBACnD,CAAC;gBAED,OAAO,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAEnD,KAAK,SAAS;gBACZ,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;YAEvB,KAAK,UAAU;gBACb,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEjD,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO;gBACV,CAAC;oBACC,IAAI,YAAY,CAAC;oBACjB,IAAI,KAAK,GAAW,IAAI,CAAC;oBACzB,IAAI,IAAI,KAAK,KAAK;wBAAE,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC;oBAC7C,IAAI,IAAI,KAAK,MAAM;wBAAE,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;oBAC/C,IAAI,IAAI,KAAK,OAAO;wBAAE,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;oBAEjD,MAAM,OAAO,GAAG,YAAY,EAAE,OAAO;yBAClC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;yBACnC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEZ,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC;wBACpC,IAAI,IAAI,GAAG,EAAE,CAAC;wBACd,IAAI,SAAS,KAAK,MAAM;4BAAE,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;wBACvD,IAAI,SAAS,KAAK,UAAU;4BAAE,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAE/D,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACzC,KAAK,GAAG,OAAO,CAAC;wBAClB,CAAC;6BAAM,IAAI,IAAI,EAAE,CAAC;4BAChB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,sCAAsC,CACvC,CAAC;4BACF,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACtC,CAAC;wBAED,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,OAAO,CAAC;YACb,KAAK,UAAU,CAAC;YAChB,KAAK,cAAc,CAAC;YACpB,KAAK,cAAc;gBACjB,CAAC;oBACC,IAAI,YAAY,CAAC;oBACjB,MAAM,KAAK,GAAW,IAAI,CAAC;oBAC3B,IAAI,IAAI,KAAK,OAAO;wBAAE,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;oBACjD,IAAI,IAAI,KAAK,UAAU;wBAAE,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACvD,IAAI,IAAI,KAAK,cAAc;wBAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;oBAC/D,IACE,IAAI,KAAK,cAAc;wBACvB,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,SAAS,EACrC,CAAC;wBACD,YAAY,GAAG;4BACb,GAAG,EAAE,yBAAyB,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE;yBAC3D,CAAC;oBACJ,CAAC;oBAED,IAAI,YAAY;wBAAE,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM;YAER,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;gBACjD,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,IAAI,gBAAgB,CAAC;gBACjE,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;gBACnC,MAAM,QAAQ,GAAe,EAAE,CAAC;gBAChC,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAClD,MAAM,WAAW,GAAG,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;wBAC/C,MAAM,EAAE,IAAI,EAAE,GAAG,GAAU,CAAC;wBAC5B,MAAM,KAAK,GAAI,GAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;wBAE1C;;;;2BAIG;wBACH,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CACjC,KAAK,EAAE,IAAS,EAAE,EAAE,CAClB,MAAM,IAAI,CAAC,eAAe,CAAC;4BACzB,IAAI,EAAE,WAAW;4BACjB,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;yBACI,CAAC,CACxC,CAAC;wBAEF,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;wBAC3D,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;oBACH,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAED,qBAAqB;YACrB,oDAAoD;YACpD,8CAA8C;YAC9C,8CAA8C;YAC9C,gEAAgE;YAChE,6DAA6D;YAC7D,OAAO,CAAC,CAAC,CAAC;gBACR,aAAa;gBACb,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;gBAErE,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAY,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAY,EAAE,CAAC;gBAC/B,MAAM,YAAY,GAAY,EAAE,CAAC;gBACjC,MAAM,eAAe,GAAY,EAAE,CAAC;gBACpC,MAAM,mBAAmB,GAAY,EAAE,CAAC;gBAExC,MAAM,aAAa,GAAG,CAAC,GAAY,EAAE,GAAW,EAAE,EAAE;oBAClD,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;wBACpB,OAAO;oBACT,CAAC;oBACD,aAAa;oBACb,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACnC,aAAa;wBACb,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC,CAAC;gBAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAoB,YAAY,CAAC,CAAC,CAAQ,CAAC;oBACxD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAChC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;wBAC7D,SAAS;oBACX,CAAC;oBACD,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;oBACpC,IAAI,OAAO,CAAC,MAAM,CAAC;wBACjB,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAExB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;oBACxC,IAAI,WAAW,CAAC,IAAI;wBAAE,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;oBACnD,IAAI,WAAW,CAAC,IAAI;wBAAE,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;oBACnD,IAAI,WAAW,CAAC,MAAM;wBAAE,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBACvD,IAAI,WAAW,CAAC,SAAS;wBAAE,aAAa,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;oBAC7D,IAAI,WAAW,CAAC,aAAa;wBAAE,aAAa,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;gBACvE,CAAC;gBAED,MAAM,aAAa,GAAG,EAAE,CAAC;gBACzB,KAAK,MAAM,KAAK,IAAI,UAAU;oBAC5B,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrD,KAAK,MAAM,KAAK,IAAI,UAAU;oBAC5B,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrD,KAAK,MAAM,KAAK,IAAI,YAAY;oBAC9B,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvD,KAAK,MAAM,KAAK,IAAI,eAAe;oBACjC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC1D,KAAK,MAAM,KAAK,IAAI,mBAAmB;oBACrC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;gBAC9D,aAAa,CAAC,IAAI;gBAChB,aAAa;gBACb,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC9D,CAAC;gBAEF,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;oBACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBACzB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;oBAChC,IAAI,KAAK,EACP,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;oBACpC,aAAa;oBACb,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpC,aAAa;oBACb,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAC1C,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM;gBACT,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,WAAW;gBACd,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,WAAW;gBACd,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,WAAW;gBACd,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,OAAO;gBACV,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;gBACnC,IAAI,cAAc,GAAG,EAAE,CAAC;gBAExB,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;gBAED,MAAM,uBAAuB,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBAChE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAClD,uBAAuB,CACxB,CAAC;gBAEF,cAAc,IAAI,GAAG,UAAU,IAAI,CAAC;gBACpC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC7B,cAAc,IAAI,GAAG,KAAK,CAAC,MAAM,MAAM,CAAC;gBAC1C,CAAC,CAAC,CAAC;gBAEH,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClE,MAAM;YACR,KAAK,oBAAoB;gBACvB,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,oBAAoB;gBACvB,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACrE,MAAM;YACR,KAAK,OAAO;gBACV,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM;QACV,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CACb,KAAa,EACb,GAAW,EACX,KAA0B;QAE1B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,WAAW,KAAK,oBAAoB,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,YAAY,KAAK,aAAa,QAAQ,EAAE,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,WAAW,KAAK,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,mCAAmC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,IAAU;QACvC,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,iBAAiB;QACjB,MAAM,OAAO,GACX,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3E,WAAW;YACT,UAAU,GAAG,OAAO,GAAG,wCAAwC,GAAG,IAAI,CAAC;QACzE,YAAY;QACZ,WAAW;YACT,SAAS;gBACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC;gBACnE,IAAI,CAAC;QACP,WAAW;QACX,WAAW;YACT,QAAQ;gBACR,IAAI,CAAC,SAAS,CACZ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAClE;gBACD,IAAI,CAAC;QACP,WAAW;QACX,WAAW;YACT,WAAW;gBACX,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK;oBAChC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC;QACP,eAAe;QACf,WAAW;YACT,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACtE,kBAAkB;QAClB,WAAW;YACT,eAAe;gBACf,IAAI,CAAC,SAAS,CACZ,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,CAC9D;gBACD,IAAI,CAAC;QACP,OAAO,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export type Range = [number | never, number | never];
2
+ export type AnnotatedRange = {
3
+ range: Range;
4
+ Annotation: string;
5
+ };
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/nomd/utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/nomd/utils.ts"],"names":[],"mappings":""}
@@ -1,7 +1,16 @@
1
- import 'dotenv/config';
2
- import { Client } from '@notionhq/client';
3
- import type { Page } from './object.js';
1
+ import "dotenv/config";
2
+ import { Client } from "@notionhq/client";
3
+ import type { Page } from "./object.js";
4
+ import type { ListBlockChildrenResponse } from "@notionhq/client/build/src/api-endpoints.js";
4
5
  export declare const client: Client;
5
6
  export declare function GetAllPosts(): Promise<Page[]>;
6
7
  export declare function GetPageMeta(page_id: string): Promise<Page>;
8
+ export declare function GetBlockChildren(block_id: string, totalPage: number | null | undefined): Promise<ListBlockChildrenResponseResults>;
9
+ export type BlockAttributes = {
10
+ numbered_list_item?: {
11
+ number?: number;
12
+ };
13
+ };
14
+ export type ListBlockChildrenResponseResult = ListBlockChildrenResponseResults[0] & BlockAttributes;
15
+ export type ListBlockChildrenResponseResults = ListBlockChildrenResponse["results"] & BlockAttributes;
7
16
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/notion/client.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAGtB,OAAO,EAAE,MAAM,EAAoB,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAyB,MAAM,aAAa,CAAA;AAM9D,eAAO,MAAM,MAAM,QAEjB,CAAA;AAIF,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAyCnD;AAGD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/notion/client.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,MAAM,EAAoB,MAAM,kBAAkB,CAAC;AAG5D,OAAO,KAAK,EAAE,IAAI,EAAyB,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAK7F,eAAO,MAAM,MAAM,QAEjB,CAAC;AAIH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAgDnD;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhE;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,6CAsBrC;AAGD,MAAM,MAAM,eAAe,GAAG;IAC5B,kBAAkB,CAAC,EAAE;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,+BAA+B,GACzC,gCAAgC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC;AAExD,MAAM,MAAM,gCAAgC,GAC1C,yBAAyB,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC"}
@@ -0,0 +1,98 @@
1
+ import "dotenv/config";
2
+ import retry from "async-retry";
3
+ import { Client, APIResponseError } from "@notionhq/client";
4
+ const NOTION_API_SECRET = process.env.NOTION_API_SECRET ?? "";
5
+ const NOBLOG_DATABASE_ID = process.env.NOBLOG_DATABASE_ID ?? "";
6
+ export const client = new Client({
7
+ auth: NOTION_API_SECRET,
8
+ });
9
+ const numberOfRetry = 2;
10
+ export async function GetAllPosts() {
11
+ const params = {
12
+ database_id: NOBLOG_DATABASE_ID,
13
+ filter: {
14
+ and: [
15
+ {
16
+ property: "publish",
17
+ checkbox: { equals: true },
18
+ },
19
+ ],
20
+ },
21
+ sorts: [
22
+ {
23
+ property: "date",
24
+ direction: "descending",
25
+ },
26
+ ],
27
+ page_size: 100,
28
+ };
29
+ let results = [];
30
+ while (true) {
31
+ const res = await retry(async (bail) => {
32
+ try {
33
+ return (await client.databases.query(params));
34
+ }
35
+ catch (error) {
36
+ if (error instanceof APIResponseError) {
37
+ if (error.status && error.status >= 400 && error.status < 500) {
38
+ bail(error);
39
+ }
40
+ }
41
+ throw error;
42
+ }
43
+ }, { retries: numberOfRetry });
44
+ results = results.concat(res.results);
45
+ if (!res.has_more) {
46
+ break;
47
+ }
48
+ params["start_cursor"] = res.next_cursor;
49
+ }
50
+ return results;
51
+ }
52
+ export async function GetPageMeta(page_id) {
53
+ const result = await retry(async (bail) => {
54
+ try {
55
+ return (await client.pages.retrieve({ page_id: page_id }));
56
+ }
57
+ catch (error) {
58
+ if (error instanceof APIResponseError) {
59
+ if (error.status && error.status >= 400 && error.status < 500) {
60
+ bail(error);
61
+ }
62
+ }
63
+ throw error;
64
+ }
65
+ }, { retries: numberOfRetry });
66
+ return result;
67
+ }
68
+ export async function GetBlockChildren(block_id, totalPage) {
69
+ const result = [];
70
+ let pageCount = 0;
71
+ let start_cursor = undefined;
72
+ do {
73
+ const response = (await client.blocks.children.list({
74
+ start_cursor: start_cursor,
75
+ block_id: block_id,
76
+ }));
77
+ result.push(...response.results);
78
+ start_cursor = response?.next_cursor;
79
+ pageCount += 1;
80
+ } while (start_cursor != null &&
81
+ (totalPage == null || pageCount < totalPage));
82
+ ModifyNumberedListObject(result);
83
+ return result;
84
+ }
85
+ function ModifyNumberedListObject(blocks) {
86
+ let numberedListIndex = 0;
87
+ for (const block of blocks) {
88
+ if ("type" in block && block.type === "numbered_list_item") {
89
+ // add numbers
90
+ // @ts-ignore
91
+ block.numbered_list_item.number = ++numberedListIndex;
92
+ }
93
+ else {
94
+ numberedListIndex = 0;
95
+ }
96
+ }
97
+ }
98
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/notion/client.ts"],"names":[],"mappings":"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"}