@graview/core 0.1.56 → 0.1.58

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 (111) hide show
  1. package/README.md +12 -4
  2. package/dist/capabilities.js +1 -1
  3. package/dist/capabilities.js.map +1 -1
  4. package/dist/cli/document-schema.js +3 -3
  5. package/dist/cli/document-schema.js.map +1 -1
  6. package/dist/document/blocks.d.ts +4 -2
  7. package/dist/document/blocks.d.ts.map +1 -1
  8. package/dist/document/blocks.js +7 -4
  9. package/dist/document/blocks.js.map +1 -1
  10. package/dist/document/compile.d.ts.map +1 -1
  11. package/dist/document/compile.js +4 -0
  12. package/dist/document/compile.js.map +1 -1
  13. package/dist/document/compiled.d.ts +2 -0
  14. package/dist/document/compiled.d.ts.map +1 -1
  15. package/dist/document/compiled.js +21 -1
  16. package/dist/document/compiled.js.map +1 -1
  17. package/dist/document/connection-findings.d.ts.map +1 -1
  18. package/dist/document/connection-findings.js +189 -25
  19. package/dist/document/connection-findings.js.map +1 -1
  20. package/dist/document/connection-spec.d.ts +42 -2
  21. package/dist/document/connection-spec.d.ts.map +1 -1
  22. package/dist/document/connection-spec.js +64 -19
  23. package/dist/document/connection-spec.js.map +1 -1
  24. package/dist/document/describe-place.d.ts +2 -0
  25. package/dist/document/describe-place.d.ts.map +1 -1
  26. package/dist/document/describe-place.js +8 -1
  27. package/dist/document/describe-place.js.map +1 -1
  28. package/dist/document/described.d.ts +2 -1
  29. package/dist/document/described.d.ts.map +1 -1
  30. package/dist/document/edit.d.ts +1 -1
  31. package/dist/document/edit.d.ts.map +1 -1
  32. package/dist/document/edit.js +101 -4
  33. package/dist/document/edit.js.map +1 -1
  34. package/dist/document/expr/evaluate.d.ts +1 -1
  35. package/dist/document/expr/evaluate.d.ts.map +1 -1
  36. package/dist/document/expr/evaluate.js +20 -1
  37. package/dist/document/expr/evaluate.js.map +1 -1
  38. package/dist/document/kept-in-step.d.ts +7 -0
  39. package/dist/document/kept-in-step.d.ts.map +1 -0
  40. package/dist/document/kept-in-step.js +28 -0
  41. package/dist/document/kept-in-step.js.map +1 -0
  42. package/dist/document/rule-line.d.ts.map +1 -1
  43. package/dist/document/rule-line.js +2 -0
  44. package/dist/document/rule-line.js.map +1 -1
  45. package/dist/document/schema.d.ts +33 -5
  46. package/dist/document/schema.d.ts.map +1 -1
  47. package/dist/document/schema.js +13 -1
  48. package/dist/document/schema.js.map +1 -1
  49. package/dist/document/to-document.d.ts.map +1 -1
  50. package/dist/document/to-document.js +4 -2
  51. package/dist/document/to-document.js.map +1 -1
  52. package/dist/document/views.d.ts +6 -1
  53. package/dist/document/views.d.ts.map +1 -1
  54. package/dist/document/views.js +16 -5
  55. package/dist/document/views.js.map +1 -1
  56. package/dist/document.schema.json +281 -98
  57. package/dist/mutations/derive-edits.d.ts +4 -2
  58. package/dist/mutations/derive-edits.d.ts.map +1 -1
  59. package/dist/mutations/derive-edits.js +13 -4
  60. package/dist/mutations/derive-edits.js.map +1 -1
  61. package/dist/scaffold/from-template.d.ts.map +1 -1
  62. package/dist/scaffold/from-template.js +2 -1
  63. package/dist/scaffold/from-template.js.map +1 -1
  64. package/dist/schema/field-words.d.ts +10 -0
  65. package/dist/schema/field-words.d.ts.map +1 -1
  66. package/dist/schema/field-words.js +26 -10
  67. package/dist/schema/field-words.js.map +1 -1
  68. package/dist/schema/reading.d.ts.map +1 -1
  69. package/dist/schema/reading.js +5 -2
  70. package/dist/schema/reading.js.map +1 -1
  71. package/dist/schema/types.d.ts +32 -0
  72. package/dist/schema/types.d.ts.map +1 -1
  73. package/dist/sync/connection-filter.d.ts +2 -2
  74. package/dist/sync/connection-filter.d.ts.map +1 -1
  75. package/dist/sync/connection-filter.js.map +1 -1
  76. package/dist/sync/connection.d.ts +72 -28
  77. package/dist/sync/connection.d.ts.map +1 -1
  78. package/dist/sync/connection.js +255 -43
  79. package/dist/sync/connection.js.map +1 -1
  80. package/dist/sync/creating-act.d.ts +20 -0
  81. package/dist/sync/creating-act.d.ts.map +1 -0
  82. package/dist/sync/creating-act.js +29 -0
  83. package/dist/sync/creating-act.js.map +1 -0
  84. package/dist/sync/engine.d.ts +83 -1
  85. package/dist/sync/engine.d.ts.map +1 -1
  86. package/dist/sync/engine.js +269 -32
  87. package/dist/sync/engine.js.map +1 -1
  88. package/dist/sync/google-calendar.d.ts +3 -0
  89. package/dist/sync/google-calendar.d.ts.map +1 -1
  90. package/dist/sync/index.d.ts +10 -4
  91. package/dist/sync/index.d.ts.map +1 -1
  92. package/dist/sync/index.js +6 -2
  93. package/dist/sync/index.js.map +1 -1
  94. package/dist/sync/notion-stub.d.ts +81 -0
  95. package/dist/sync/notion-stub.d.ts.map +1 -0
  96. package/dist/sync/notion-stub.js +467 -0
  97. package/dist/sync/notion-stub.js.map +1 -0
  98. package/dist/sync/notion-types.d.ts +23 -0
  99. package/dist/sync/notion-types.d.ts.map +1 -0
  100. package/dist/sync/notion-types.js +49 -0
  101. package/dist/sync/notion-types.js.map +1 -0
  102. package/dist/sync/notion.d.ts +98 -0
  103. package/dist/sync/notion.d.ts.map +1 -0
  104. package/dist/sync/notion.js +477 -0
  105. package/dist/sync/notion.js.map +1 -0
  106. package/dist/sync/types.d.ts +38 -0
  107. package/dist/sync/types.d.ts.map +1 -1
  108. package/dist/sync/types.js.map +1 -1
  109. package/dist/version.d.ts +1 -1
  110. package/dist/version.js +1 -1
  111. package/package.json +1 -1
@@ -0,0 +1,467 @@
1
+ import { notionKey, notionProperty } from "./notion.js";
2
+ const uuid = (n, salt) => {
3
+ const hex = `${salt}${n.toString(16)}`.padStart(32, "0").slice(-32);
4
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
5
+ };
6
+ /** What an empty property of each type holds, where it is not `null`. */
7
+ const EMPTY = { title: [], rich_text: [], multi_select: [], people: [], relation: [], checkbox: false };
8
+ /** How many of a relation's pages a page lists before `has_more`. */
9
+ const RELATION_SHOWN = 25;
10
+ class Refusal extends Error {
11
+ status;
12
+ code;
13
+ constructor(status, code, message) {
14
+ super(message);
15
+ this.status = status;
16
+ this.code = code;
17
+ }
18
+ }
19
+ export function scriptedNotion(options = {}) {
20
+ const secret = options.secret ?? "secret_scriptedNotionIntegrationSecret0001";
21
+ let clock = Date.parse(options.start ?? "2026-10-25T10:00:00.000Z");
22
+ let made = 0;
23
+ const databases = new Map();
24
+ const sources = new Map();
25
+ const pages = new Map();
26
+ const requests = [];
27
+ let limited = 0;
28
+ let retryAfter = 1;
29
+ const minute = () => new Date(Math.floor(clock / 60_000) * 60_000).toISOString();
30
+ const findDatabase = (id) => databases.get(notionKey(id));
31
+ const findSource = (id) => sources.get(notionKey(id));
32
+ /** A source by its id, or a database's first. */
33
+ const sourceOrFirst = (id) => findSource(id) ?? findDatabase(id)?.sources[0];
34
+ const sourceOfPage = (page) => findSource(String(page["parent"]["data_source_id"]));
35
+ const inTrash = (page) => page["in_trash"] === true;
36
+ const findPage = (id) => pages.get(notionKey(id));
37
+ /** A page as Notion answers it: a relation lists its first 25 pages, and says there are more. */
38
+ const shown = (page) => {
39
+ const copy = structuredClone(page);
40
+ for (const property of Object.values(copy["properties"] ?? {})) {
41
+ if (property["type"] !== "relation")
42
+ continue;
43
+ const all = property["relation"];
44
+ property["has_more"] = all.length > RELATION_SHOWN;
45
+ property["relation"] = all.slice(0, RELATION_SHOWN);
46
+ }
47
+ return copy;
48
+ };
49
+ /** A property object as the API was handed it, kept as Notion answers it. */
50
+ const kept = (database, name, input) => {
51
+ const property = database.properties.get(name);
52
+ if (!property)
53
+ throw new Refusal(400, "validation_error", `${name} is not a property that exists.`);
54
+ const type = property.type;
55
+ if (!(type in input))
56
+ throw new Refusal(400, "validation_error", `${name} is expected to be ${type}.`);
57
+ const value = input[type];
58
+ const option = (name2) => {
59
+ if (!property.options.includes(name2)) {
60
+ if (type === "status")
61
+ throw new Refusal(400, "validation_error", `Invalid status option. Status option "${name2}" does not exist".`);
62
+ property.options.push(name2);
63
+ }
64
+ return { id: `opt-${property.options.indexOf(name2)}`, name: name2, color: "default" };
65
+ };
66
+ switch (type) {
67
+ case "title":
68
+ case "rich_text": {
69
+ const parts = value ?? [];
70
+ for (const part of parts) {
71
+ const content = String(part["text"]?.["content"] ?? "");
72
+ if (content.length > 2000)
73
+ throw new Refusal(400, "validation_error", `body.properties.${name}.${type}[0].text.content.length should be ≤ \`2000\`, instead was \`${content.length}\`.`);
74
+ }
75
+ if (parts.length > 100)
76
+ throw new Refusal(400, "validation_error", `body.properties.${name}.${type}.length should be ≤ \`100\`.`);
77
+ return { id: property.id, type, [type]: parts.map((part) => { const content = String(part["text"]["content"] ?? ""); return { type: "text", text: { content, link: null }, plain_text: content, href: null }; }) };
78
+ }
79
+ case "select":
80
+ case "status":
81
+ return { id: property.id, type, [type]: value === null ? null : option(String(value["name"])) };
82
+ case "multi_select":
83
+ return { id: property.id, type, multi_select: (value ?? []).map((one) => option(String(one["name"]))) };
84
+ case "date":
85
+ return { id: property.id, type, date: value === null ? null : { start: String(value["start"]), end: null, time_zone: null } };
86
+ case "people":
87
+ return { id: property.id, type, people: (value ?? []).map((person) => ({ object: "user", id: String(person["id"] ?? person["name"]), ...(person["name"] ? { name: person["name"] } : {}) })) };
88
+ case "relation": {
89
+ const ids = [];
90
+ for (const one of value ?? []) {
91
+ const target = findPage(String(one["id"]));
92
+ if (!target || (property.relation && notionKey(String(target["parent"]["data_source_id"])) !== notionKey(property.relation.source))) {
93
+ throw new Refusal(400, "validation_error", `Relation page ${String(one["id"])} is not in the data source ${name} links.`);
94
+ }
95
+ if (!ids.includes(String(target["id"])))
96
+ ids.push(String(target["id"]));
97
+ }
98
+ if (ids.length > 100)
99
+ throw new Refusal(400, "validation_error", `body.properties.${name}.relation.length should be ≤ \`100\`.`);
100
+ return { id: property.id, type, relation: ids.map((id) => ({ id })), has_more: false };
101
+ }
102
+ default:
103
+ return { id: property.id, type, [type]: value ?? (type === "checkbox" ? false : null) };
104
+ }
105
+ };
106
+ /** A new page's properties: every one of the database's, empty unless given. */
107
+ const blank = (database) => {
108
+ const out = {};
109
+ for (const property of database.properties.values()) {
110
+ out[property.name] = kept(database, property.name, { [property.type]: property.type in EMPTY ? EMPTY[property.type] : null });
111
+ }
112
+ return out;
113
+ };
114
+ const writeProperties = (database, page, input) => {
115
+ const properties = page["properties"];
116
+ for (const [name, value] of Object.entries(input)) {
117
+ const was = properties[name];
118
+ const now = kept(database, name, value);
119
+ properties[name] = now;
120
+ const relation = database.properties.get(name)?.relation;
121
+ if (relation?.dual)
122
+ twin(page, relation.dual, was?.["relation"] ?? [], now["relation"]);
123
+ }
124
+ };
125
+ /** A dual relation's twin kept in step: each page linked now lists this one, each unlinked lists it no more, and both are edited. */
126
+ const twin = (page, dual, before, after) => {
127
+ const id = String(page["id"]);
128
+ const was = new Set(before.map((one) => String(one["id"])));
129
+ const now = new Set(after.map((one) => String(one["id"])));
130
+ for (const other of new Set([...was, ...now])) {
131
+ if (was.has(other) === now.has(other))
132
+ continue;
133
+ const target = findPage(other);
134
+ const property = target ? target["properties"][dual] : undefined;
135
+ if (!target || !property)
136
+ continue;
137
+ const listed = property["relation"].filter((one) => String(one["id"]) !== id);
138
+ property["relation"] = now.has(other) ? [...listed, { id }] : listed;
139
+ touch(target);
140
+ }
141
+ };
142
+ const plain = (database, values) => {
143
+ const out = {};
144
+ for (const [name, value] of Object.entries(values)) {
145
+ const type = database.properties.get(name)?.type;
146
+ if (!type)
147
+ throw new Error(`scripted notion: ${database.title} has no property ${name}`);
148
+ out[name] = type === "people" ? { people: (value ?? []).map((who) => ({ id: `user-${who}`, name: who })) } : notionProperty(type, value);
149
+ }
150
+ return out;
151
+ };
152
+ const touch = (page) => {
153
+ page["last_edited_time"] = minute();
154
+ };
155
+ const makePage = (database, input) => {
156
+ made += 1;
157
+ const page = {
158
+ object: "page",
159
+ id: uuid(made, "b0"),
160
+ created_time: minute(),
161
+ last_edited_time: minute(),
162
+ archived: false,
163
+ in_trash: false,
164
+ parent: { type: "data_source_id", data_source_id: database.id, database_id: database.database.id },
165
+ properties: blank(database),
166
+ };
167
+ writeProperties(database, page, input);
168
+ pages.set(notionKey(String(page["id"])), page);
169
+ return page;
170
+ };
171
+ const titled = (title) => [{ type: "text", text: { content: title }, plain_text: title }];
172
+ const databaseShown = (database) => ({
173
+ object: "database",
174
+ id: database.id,
175
+ title: titled(database.title),
176
+ in_trash: database.archived,
177
+ data_sources: database.sources.map((source) => ({ id: source.id, name: source.title })),
178
+ });
179
+ /** A relation property's settings as Notion says them: the source it links, and its twin's name and id when it is dual. */
180
+ const relationShown = (relation) => {
181
+ const other = findSource(relation.source);
182
+ const twinProperty = relation.dual ? other?.properties.get(relation.dual) : undefined;
183
+ return {
184
+ data_source_id: relation.source,
185
+ database_id: other?.database.id ?? null,
186
+ ...(twinProperty ? { type: "dual_property", dual_property: { synced_property_name: twinProperty.name, synced_property_id: twinProperty.id } } : { type: "single_property", single_property: {} }),
187
+ };
188
+ };
189
+ const sourceShown = (database) => ({
190
+ object: "data_source",
191
+ id: database.id,
192
+ title: titled(database.title),
193
+ parent: { type: "database_id", database_id: database.database.id },
194
+ properties: Object.fromEntries([...database.properties.values()].map((property) => [
195
+ property.name,
196
+ {
197
+ id: property.id,
198
+ name: property.name,
199
+ type: property.type,
200
+ [property.type]: property.relation ? relationShown(property.relation) : ["select", "multi_select", "status"].includes(property.type) ? { options: property.options.map((name, at) => ({ id: `opt-${at}`, name, color: "default" })) } : {},
201
+ },
202
+ ])),
203
+ });
204
+ const visible = (id) => {
205
+ const database = findDatabase(id);
206
+ if (!database || !database.shared || database.archived) {
207
+ if (findSource(id))
208
+ throw new Refusal(400, "validation_error", `Provided database_id ${id} is a data source, not a database. Use the data sources API instead, or pass the ID of the database itself.`);
209
+ throw new Refusal(404, "object_not_found", `Could not find database with ID: ${id}. Make sure the relevant pages and databases are shared with your integration.`);
210
+ }
211
+ return database;
212
+ };
213
+ const visibleSource = (id) => {
214
+ const source = findSource(id);
215
+ if (!source || !source.database.shared || source.database.archived)
216
+ throw new Refusal(404, "object_not_found", `Could not find data_source with ID: ${id}. Make sure the relevant pages and databases are shared with your integration.`);
217
+ return source;
218
+ };
219
+ const createSource = (database, spec) => {
220
+ made += 1;
221
+ const source = { id: uuid(made, "c0"), title: spec.title ?? database.title, properties: new Map(), database };
222
+ let at = 0;
223
+ for (const [name, type] of Object.entries(spec.properties)) {
224
+ at += 1;
225
+ source.properties.set(name, { id: type === "title" ? "title" : `p${at}`, name, type, options: [...(spec.options?.[name] ?? [])] });
226
+ }
227
+ database.sources.push(source);
228
+ sources.set(notionKey(source.id), source);
229
+ for (const [name, relation] of Object.entries(spec.relations ?? {})) {
230
+ const property = source.properties.get(name);
231
+ const other = sourceOrFirst(relation.to) ?? (notionKey(relation.to) === notionKey(source.id) ? source : undefined);
232
+ if (!property || property.type !== "relation" || !other)
233
+ throw new Refusal(400, "validation_error", `${name} is not a relation to a data source that exists.`);
234
+ property.relation = { source: other.id };
235
+ if (!relation.dual)
236
+ continue;
237
+ // Notion names the twin after this source and the property, and puts it on every page already there.
238
+ const dual = typeof relation.dual === "string" ? relation.dual : `Related to ${source.title} (${name})`;
239
+ const twinId = `p${other.properties.size + 1}r`;
240
+ other.properties.set(dual, { id: twinId, name: dual, type: "relation", options: [], relation: { source: source.id, dual: name } });
241
+ property.relation.dual = dual;
242
+ for (const page of pages.values())
243
+ if (sourceOfPage(page) === other)
244
+ page["properties"][dual] = { id: twinId, type: "relation", relation: [], has_more: false };
245
+ }
246
+ return source;
247
+ };
248
+ const createDatabase = (spec) => {
249
+ made += 1;
250
+ const database = { id: uuid(made, "d0"), title: spec.title ?? "Untitled", sources: [], shared: true, archived: false };
251
+ databases.set(notionKey(database.id), database);
252
+ createSource(database, spec);
253
+ return database;
254
+ };
255
+ /** A data source's properties as the API is handed them: names to `{ <type>: { options? } }`. */
256
+ const specOf = (body, title) => {
257
+ const properties = {};
258
+ const options = {};
259
+ const relations = {};
260
+ for (const [name, spec] of Object.entries(body?.["properties"] ?? {})) {
261
+ const type = Object.keys(spec).find((key) => key !== "name" && key !== "description");
262
+ properties[name] = type;
263
+ const listed = spec[type]?.["options"];
264
+ if (listed)
265
+ options[name] = listed.map((option) => String(option["name"]));
266
+ if (type === "relation") {
267
+ const relation = spec[type];
268
+ if (typeof relation["data_source_id"] !== "string")
269
+ throw new Refusal(400, "validation_error", `body.properties.${name}.relation.data_source_id should be defined, instead was \`undefined\`.`);
270
+ relations[name] = { to: relation["data_source_id"], dual: relation["type"] === "dual_property" || "dual_property" in relation };
271
+ }
272
+ }
273
+ return { title, properties, options, relations };
274
+ };
275
+ const words = (parts) => (parts ?? []).map((part) => String(part["text"]?.["content"] ?? "")).join("");
276
+ const answer = (method, path, body, query) => {
277
+ let match;
278
+ if (method === "POST" && path === "/databases") {
279
+ if (body["properties"])
280
+ throw new Refusal(400, "validation_error", "body.properties should be not present, instead was `{…}`. A database's properties are its data source's: send initial_data_source.properties.");
281
+ return databaseShown(createDatabase(specOf(body["initial_data_source"], words(body["title"]))));
282
+ }
283
+ if (method === "POST" && path === "/data_sources") {
284
+ const database = visible(String(body["parent"]?.["database_id"] ?? ""));
285
+ return sourceShown(createSource(database, specOf(body, words(body["title"]))));
286
+ }
287
+ if ((match = /^\/databases\/([^/]+)$/.exec(path)) && method === "GET")
288
+ return databaseShown(visible(decodeURIComponent(match[1])));
289
+ if ((match = /^\/databases\/([^/]+)\/query$/.exec(path)))
290
+ throw new Refusal(400, "invalid_request_url", "Invalid request URL: a database is queried through its data source, POST /v1/data_sources/{id}/query.");
291
+ if ((match = /^\/data_sources\/([^/]+)$/.exec(path)) && method === "GET")
292
+ return sourceShown(visibleSource(decodeURIComponent(match[1])));
293
+ if ((match = /^\/data_sources\/([^/]+)\/query$/.exec(path)) && method === "POST") {
294
+ const database = visibleSource(decodeURIComponent(match[1]));
295
+ const since = body["filter"]?.["last_edited_time"]?.["on_or_after"];
296
+ const all = [...pages.values()]
297
+ .filter((page) => sourceOfPage(page) === database && !inTrash(page))
298
+ .filter((page) => !since || String(page["last_edited_time"]) >= since)
299
+ .sort((a, b) => String(a["last_edited_time"]).localeCompare(String(b["last_edited_time"])));
300
+ const size = Math.min(Number(body["page_size"] ?? 100), 100);
301
+ const start = Number(body["start_cursor"] ?? 0);
302
+ const results = all.slice(start, start + size).map(shown);
303
+ const more = start + size < all.length;
304
+ return { object: "list", results, has_more: more, next_cursor: more ? String(start + size) : null };
305
+ }
306
+ if (method === "POST" && path === "/pages") {
307
+ const parent = body["parent"] ?? {};
308
+ if (parent["database_id"] && !parent["data_source_id"]) {
309
+ const database = visible(String(parent["database_id"]));
310
+ if (database.sources.length > 1)
311
+ throw new Refusal(400, "validation_error", "Databases with multiple data sources are not supported as a page's parent: use parent.data_source_id.");
312
+ return shown(makePage(database.sources[0], body["properties"] ?? {}));
313
+ }
314
+ return shown(makePage(visibleSource(String(parent["data_source_id"] ?? "")), body["properties"] ?? {}));
315
+ }
316
+ if ((match = /^\/pages\/([^/]+)\/properties\/([^/?]+)$/.exec(path)) && method === "GET") {
317
+ const page = findPage(decodeURIComponent(match[1]));
318
+ if (!page || !sourceOfPage(page)?.database.shared)
319
+ throw new Refusal(404, "object_not_found", `Could not find page with ID: ${match[1]}.`);
320
+ const propertyId = decodeURIComponent(match[2]);
321
+ const property = Object.values(page["properties"]).find((one) => one["id"] === propertyId);
322
+ if (!property)
323
+ throw new Refusal(404, "object_not_found", `Could not find property with ID: ${propertyId}.`);
324
+ if (property["type"] !== "relation")
325
+ return { object: "property_item", ...structuredClone(property) };
326
+ const all = property["relation"];
327
+ const size = Math.min(Number(query.get("page_size") ?? 100), 100);
328
+ const start = Number(query.get("start_cursor") ?? 0);
329
+ const more = start + size < all.length;
330
+ return {
331
+ object: "list",
332
+ results: all.slice(start, start + size).map((one) => ({ object: "property_item", id: propertyId, type: "relation", relation: { id: one["id"] } })),
333
+ next_cursor: more ? String(start + size) : null,
334
+ has_more: more,
335
+ type: "property_item",
336
+ property_item: { id: propertyId, next_url: null, type: "relation", relation: {} },
337
+ };
338
+ }
339
+ if ((match = /^\/pages\/([^/]+)$/.exec(path))) {
340
+ const page = findPage(decodeURIComponent(match[1]));
341
+ const database = page ? sourceOfPage(page) : undefined;
342
+ if (!page || !database?.database.shared)
343
+ throw new Refusal(404, "object_not_found", `Could not find page with ID: ${match[1]}. Make sure the relevant pages and databases are shared with your integration.`);
344
+ if (method === "GET")
345
+ return shown(page);
346
+ if (method === "PATCH") {
347
+ const trashing = body["in_trash"] ?? body["archived"];
348
+ if (inTrash(page) && trashing !== false) {
349
+ if (trashing === true)
350
+ return shown(page);
351
+ throw new Refusal(400, "validation_error", "Can't edit block that is archived. You must unarchive the block before editing.");
352
+ }
353
+ if (typeof trashing === "boolean") {
354
+ page["in_trash"] = trashing;
355
+ page["archived"] = trashing;
356
+ }
357
+ if (body["properties"])
358
+ writeProperties(database, page, body["properties"]);
359
+ touch(page);
360
+ return shown(page);
361
+ }
362
+ }
363
+ if ((match = /^\/blocks\/([^/]+)$/.exec(path)) && method === "DELETE") {
364
+ const database = findDatabase(decodeURIComponent(match[1]));
365
+ if (database) {
366
+ database.archived = true;
367
+ return { object: "block", id: database.id, archived: true };
368
+ }
369
+ const page = findPage(decodeURIComponent(match[1]));
370
+ if (!page)
371
+ throw new Refusal(404, "object_not_found", "Could not find block.");
372
+ page["archived"] = true;
373
+ page["in_trash"] = true;
374
+ touch(page);
375
+ return { object: "block", id: page["id"], archived: true };
376
+ }
377
+ throw new Refusal(400, "invalid_request_url", `Invalid request URL: ${method} ${path}`);
378
+ };
379
+ const respond = (status, body, headers = {}) => ({
380
+ ok: status >= 200 && status < 300,
381
+ status,
382
+ json: async () => body,
383
+ headers: { get: (name) => headers[name.toLowerCase()] ?? null },
384
+ });
385
+ const fetch = async (url, init) => {
386
+ const at = new URL(url);
387
+ const path = at.pathname.replace(/^\/v1/, "");
388
+ const method = init?.method ?? "GET";
389
+ const body = init?.body ? JSON.parse(init.body) : {};
390
+ requests.push({ method, path, ...(init?.body ? { body } : {}) });
391
+ if (limited > 0) {
392
+ limited -= 1;
393
+ return respond(429, { object: "error", status: 429, code: "rate_limited", message: "You have been rate limited. Please try again in a few minutes." }, { "retry-after": String(retryAfter) });
394
+ }
395
+ const headers = init?.headers ?? {};
396
+ const authorization = headers["authorization"] ?? headers["Authorization"];
397
+ if (authorization !== `Bearer ${secret}`)
398
+ return respond(401, { object: "error", status: 401, code: "unauthorized", message: "API token is invalid." });
399
+ if (!headers["notion-version"] && !headers["Notion-Version"])
400
+ return respond(400, { object: "error", status: 400, code: "missing_version", message: "Notion-Version header failed validation." });
401
+ try {
402
+ return respond(200, answer(method, path, body, at.searchParams));
403
+ }
404
+ catch (error) {
405
+ if (error instanceof Refusal)
406
+ return respond(error.status, { object: "error", status: error.status, code: error.code, message: error.message });
407
+ throw error;
408
+ }
409
+ };
410
+ return {
411
+ fetch,
412
+ secret,
413
+ requests,
414
+ database: (spec) => createDatabase(spec).id,
415
+ source(databaseId, spec) {
416
+ const database = findDatabase(databaseId);
417
+ if (!database)
418
+ throw new Error(`scripted notion: no database ${databaseId}`);
419
+ return createSource(database, spec).id;
420
+ },
421
+ sources: (databaseId) => findDatabase(databaseId)?.sources.map((source) => source.id) ?? [],
422
+ share(databaseId, shared) {
423
+ const database = findDatabase(databaseId);
424
+ if (database)
425
+ database.shared = shared;
426
+ },
427
+ page: (id) => {
428
+ const page = findPage(id);
429
+ return page ? shown(page) : undefined;
430
+ },
431
+ pages: (databaseId, archived = false) => {
432
+ const source = sourceOrFirst(databaseId);
433
+ return [...pages.values()].filter((page) => source !== undefined && sourceOfPage(page) === source && (archived || !inTrash(page))).map(shown);
434
+ },
435
+ add(databaseId, values) {
436
+ const database = sourceOrFirst(databaseId);
437
+ if (!database)
438
+ throw new Error(`scripted notion: no database ${databaseId}`);
439
+ return shown(makePage(database, plain(database, values)));
440
+ },
441
+ edit(pageId, values) {
442
+ const page = findPage(pageId);
443
+ if (!page)
444
+ throw new Error(`scripted notion: no page ${pageId}`);
445
+ const database = sourceOfPage(page);
446
+ writeProperties(database, page, plain(database, values));
447
+ touch(page);
448
+ return shown(page);
449
+ },
450
+ archive(pageId) {
451
+ const page = findPage(pageId);
452
+ if (!page)
453
+ throw new Error(`scripted notion: no page ${pageId}`);
454
+ page["archived"] = true;
455
+ page["in_trash"] = true;
456
+ touch(page);
457
+ },
458
+ limit(count, after = 1) {
459
+ limited = count;
460
+ retryAfter = after;
461
+ },
462
+ tick(ms) {
463
+ clock += ms;
464
+ },
465
+ };
466
+ }
467
+ //# sourceMappingURL=notion-stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-stub.js","sourceRoot":"","sources":["../../src/sync/notion-stub.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAiHxD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,IAAY,EAAE,EAAE;IACvC,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7G,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,KAAK,GAAsC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAE3I,qEAAqE;AACrE,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,MAAM,OAAQ,SAAQ,KAAK;IAEd;IACA;IAFX,YACW,MAAc,EACd,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAQ;IAIvB,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,4CAA4C,CAAC;IAC9E,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAC;IACpE,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACtC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACjF,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,iDAAiD;IACjD,MAAM,aAAa,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAE,IAAI,CAAC,QAAQ,CAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC1D,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,iGAAiG;IACjG,MAAM,KAAK,GAAG,CAAC,IAAU,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAE,IAAI,CAAC,YAAY,CAAsC,IAAI,EAAE,CAAC,EAAE,CAAC;YACrG,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,UAAU;gBAAE,SAAS;YAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAW,CAAC;YAC3C,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC;YACnD,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,6EAA6E;IAC7E,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAE,KAAW,EAAQ,EAAE;QACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,IAAI,iCAAiC,CAAC,CAAC;QACpG,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,IAAI,sBAAsB,IAAI,GAAG,CAAC,CAAC;QACvG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,yCAAyC,KAAK,oBAAoB,CAAC,CAAC;gBACtI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzF,CAAC,CAAC;QACF,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO,CAAC;YACb,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAI,KAAgB,IAAI,EAAE,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,MAAM,CAAE,IAAI,CAAC,MAAM,CAAsB,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;wBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,mBAAmB,IAAI,IAAI,IAAI,+DAA+D,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;gBAC3L,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;oBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,mBAAmB,IAAI,IAAI,IAAI,8BAA8B,CAAC,CAAC;gBAClI,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,OAAO,GAAG,MAAM,CAAE,IAAI,CAAC,MAAM,CAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/N,CAAC;YACD,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAE,KAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5G,KAAK,cAAc;gBACjB,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAE,KAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtH,KAAK,MAAM;gBACT,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAE,KAAc,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1I,KAAK,QAAQ;gBACX,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAE,KAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC7M,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,GAAG,GAAa,EAAE,CAAC;gBACzB,KAAK,MAAM,GAAG,IAAK,KAAgB,IAAI,EAAE,EAAE,CAAC;oBAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAE,MAAM,CAAC,QAAQ,CAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;wBAC9I,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,iBAAiB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,8BAA8B,IAAI,SAAS,CAAC,CAAC;oBAC5H,CAAC;oBACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1E,CAAC;gBACD,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;oBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,mBAAmB,IAAI,uCAAuC,CAAC,CAAC;gBACjI,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACzF,CAAC;YACD;gBACE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC;IAEF,gFAAgF;IAChF,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAQ,EAAE;QACvC,MAAM,GAAG,GAAS,EAAE,CAAC;QACrB,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChI,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,IAAU,EAAE,KAAW,EAAE,EAAE;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAS,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAqB,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAa,CAAC,CAAC;YAChD,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;YACzD,IAAI,QAAQ,EAAE,IAAI;gBAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAG,GAAG,EAAE,CAAC,UAAU,CAAwB,IAAI,EAAE,EAAE,GAAG,CAAC,UAAU,CAAW,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC,CAAC;IAEF,qIAAqI;IACrI,MAAM,IAAI,GAAG,CAAC,IAAU,EAAE,IAAY,EAAE,MAAuB,EAAE,KAAsB,EAAE,EAAE;QACzF,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAG,MAAM,CAAC,YAAY,CAA0B,CAAC,IAAI,CAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;YACjH,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACnC,MAAM,MAAM,GAAI,QAAQ,CAAC,UAAU,CAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1F,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACrE,KAAK,CAAC,MAAM,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,MAAyC,EAAQ,EAAE;QAClF,MAAM,GAAG,GAAS,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;YACjD,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,KAAK,oBAAoB,IAAI,EAAE,CAAC,CAAC;YACzF,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAE,KAAyB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEhK,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,IAAU,EAAE,EAAE;QAC3B,IAAI,CAAC,kBAAkB,CAAC,GAAG,MAAM,EAAE,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,KAAW,EAAQ,EAAE;QACvD,IAAI,IAAI,CAAC,CAAC;QACV,MAAM,IAAI,GAAS;YACjB,MAAM,EAAE,MAAM;YACd,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;YACpB,YAAY,EAAE,MAAM,EAAE;YACtB,gBAAgB,EAAE,MAAM,EAAE;YAC1B,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE;YAClG,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;SAC5B,CAAC;QACF,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAClG,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAQ,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,UAAU;QAClB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;KACxF,CAAC,CAAC;IAEH,2HAA2H;IAC3H,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAQ,EAAE;QACjD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,OAAO;YACL,cAAc,EAAE,QAAQ,CAAC,MAAM;YAC/B,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,IAAI;YACvC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,EAAE,oBAAoB,EAAE,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;SAClM,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAQ,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,aAAa;QACrB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE;QAClE,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClD,QAAQ,CAAC,IAAI;YACb;gBACE,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;aAC3O;SACF,CAAC,CACH;KACF,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,EAAU,EAAa,EAAE;QACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvD,IAAI,UAAU,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,6GAA6G,CAAC,CAAC;YACxM,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,oCAAoC,EAAE,gFAAgF,CAAC,CAAC;QACrK,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,EAAU,EAAU,EAAE;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ;YAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,uCAAuC,EAAE,gFAAgF,CAAC,CAAC;QAC1O,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,QAAmB,EAAE,IAAgB,EAAU,EAAE;QACrE,IAAI,IAAI,CAAC,CAAC;QACV,MAAM,MAAM,GAAW,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC;QACtH,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,EAAE,IAAI,CAAC,CAAC;YACR,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACrI,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,IAAI,kDAAkD,CAAC,CAAC;YAC/J,QAAQ,CAAC,QAAQ,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE,SAAS;YAC7B,qGAAqG;YACrG,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC;YACxG,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;YAChD,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACnI,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,KAAK;oBAAG,IAAI,CAAC,YAAY,CAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5K,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAa,EAAE;QACrD,IAAI,IAAI,CAAC,CAAC;QACV,MAAM,QAAQ,GAAc,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAClI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChD,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,iGAAiG;IACjG,MAAM,MAAM,GAAG,CAAC,IAAsB,EAAE,KAAa,EAAc,EAAE;QACnE,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAmD,EAAE,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAE,IAAI,EAAE,CAAC,YAAY,CAA0B,IAAI,EAAE,CAAC,EAAE,CAAC;YAChG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,aAAa,CAAE,CAAC;YACvF,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACxB,MAAM,MAAM,GAAI,IAAI,CAAC,IAAI,CAAsB,EAAE,CAAC,SAAS,CAAuB,CAAC;YACnF,IAAI,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAS,CAAC;gBACpC,IAAI,OAAO,QAAQ,CAAC,gBAAgB,CAAC,KAAK,QAAQ;oBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,mBAAmB,IAAI,wEAAwE,CAAC,CAAC;gBAChM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,eAAe,IAAI,eAAe,IAAI,QAAQ,EAAE,CAAC;YAClI,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACnD,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAE,KAA4B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAE,IAAI,CAAC,MAAM,CAAU,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElJ,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,IAAU,EAAE,KAAsB,EAAQ,EAAE;QACxF,IAAI,KAA6B,CAAC;QAClC,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,YAAY,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,+IAA+I,CAAC,CAAC;YACpN,OAAO,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtH,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAE,IAAI,CAAC,QAAQ,CAAsB,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9F,OAAO,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;QACpI,IAAI,CAAC,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,qBAAqB,EAAE,uGAAuG,CAAC,CAAC;QACjN,IAAI,CAAC,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;QAC3I,IAAI,CAAC,KAAK,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACjF,MAAM,QAAQ,GAAG,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAK,IAAI,CAAC,QAAQ,CAAsB,EAAE,CAAC,kBAAkB,CAAsB,EAAE,CAAC,aAAa,CAAuB,CAAC;YACtI,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;iBAC5B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACnE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,KAAK,CAAC;iBACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;YACvC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtG,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAI,IAAI,CAAC,QAAQ,CAAsB,IAAI,EAAE,CAAC;YAC1D,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACxD,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,uGAAuG,CAAC,CAAC;gBACrL,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,EAAG,IAAI,CAAC,YAAY,CAAU,IAAI,EAAE,CAAC,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAG,IAAI,CAAC,YAAY,CAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QACpH,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,gCAAgC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3I,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;YACnH,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,oCAAoC,UAAU,GAAG,CAAC,CAAC;YAC7G,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,UAAU;gBAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtG,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAW,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;YACvC,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClJ,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC/C,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,eAAe;gBACrB,aAAa,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;aAClF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvD,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,gCAAgC,KAAK,CAAC,CAAC,CAAC,gFAAgF,CAAC,CAAC;YAC9M,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;gBACtD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;oBACxC,IAAI,QAAQ,KAAK,IAAI;wBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC1C,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,iFAAiF,CAAC,CAAC;gBAChI,CAAC;gBACD,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAClC,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;oBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;gBAC9B,CAAC;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC;oBAAE,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAS,CAAC,CAAC;gBACpF,KAAK,CAAC,IAAI,CAAC,CAAC;gBACZ,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtE,MAAM,QAAQ,GAAG,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9D,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;YAC/E,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,qBAAqB,EAAE,wBAAwB,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,IAAU,EAAE,UAAkC,EAAE,EAAE,EAAE,CAAC,CAAC;QACrF,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QACjC,MAAM;QACN,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QACtB,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,EAAE;KACxE,CAAC,CAAC;IAEH,MAAM,KAAK,GAAY,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,CAAC;YACb,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,gEAAgE,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAChM,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;QAC3E,IAAI,aAAa,KAAK,UAAU,MAAM,EAAE;YAAE,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACxJ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAAE,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC,CAAC;QAClM,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,OAAO;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,KAAK;QACL,MAAM;QACN,QAAQ;QACR,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE;QAC3C,MAAM,CAAC,UAAU,EAAE,IAAI;YACrB,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC7E,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAC3F,KAAK,CAAC,UAAU,EAAE,MAAM;YACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,QAAQ;gBAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QACzC,CAAC;QACD,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;YACX,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxC,CAAC;QACD,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChJ,CAAC;QACD,GAAG,CAAC,UAAU,EAAE,MAAM;YACpB,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC7E,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,MAAM;YACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAE,CAAC;YACrC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,MAAM;YACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC;YACpB,OAAO,GAAG,KAAK,CAAC;YAChB,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,EAAE;YACL,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** The property types a Notion connection keeps in step, and the field types each one may be held in. */
2
+ export declare const NOTION_FITS: Readonly<Record<string, readonly string[]>>;
3
+ /** The property types a connection reads and never writes. */
4
+ export declare const NOTION_READ_ONLY: ReadonlySet<string>;
5
+ /** The field types a property may be inferred for, when the declaration names no properties. */
6
+ export declare const NOTION_INFERABLE: ReadonlySet<string>;
7
+ /** Why a property type Notion has is left alone, where it is not the plain "not kept in step". */
8
+ export declare const NOTION_LEFT_ALONE: Readonly<Record<string, string>>;
9
+ /**
10
+ * What a mapping names a relation property for, in place of a field type:
11
+ * one of the kind's relations (edges), kept as the pages it reaches. Never a
12
+ * field type, so no field can be taken for one.
13
+ */
14
+ export declare const NOTION_EDGE = "@relation";
15
+ /** Whether a field of `fieldType` can hold a Notion property of `propertyType`. */
16
+ export declare function notionFits(propertyType: string, fieldType: string | undefined): boolean;
17
+ /** A Notion id: 32 hexadecimal characters, with or without the hyphens. */
18
+ export declare const NOTION_ID: RegExp;
19
+ /** An internal integration's secret, as Notion writes one: never in a document. */
20
+ export declare const NOTION_SECRET: RegExp;
21
+ /** The environment prefix a Notion connection's secret is read under: `<prefix>_TOKEN`. */
22
+ export declare const NOTION_AUTH_ENV = "NOTION";
23
+ //# sourceMappingURL=notion-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-types.d.ts","sourceRoot":"","sources":["../../src/sync/notion-types.ts"],"names":[],"mappings":"AAMA,yGAAyG;AACzG,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAcnE,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAuB,CAAC;AAEzE,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAA8C,CAAC;AAEhG,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK9D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvF;AAED,2EAA2E;AAC3E,eAAO,MAAM,SAAS,QAAwE,CAAC;AAE/F,mFAAmF;AACnF,eAAO,MAAM,aAAa,QAAwD,CAAC;AAEnF,2FAA2F;AAC3F,eAAO,MAAM,eAAe,WAAW,CAAC"}
@@ -0,0 +1,49 @@
1
+ /*
2
+ * What a Notion database's properties are to a Graview kind, apart from the
3
+ * transport — so the checker (`graview check`) can judge a declared property
4
+ * map, and the transport can judge the database it finds, by one table.
5
+ */
6
+ /** The property types a Notion connection keeps in step, and the field types each one may be held in. */
7
+ export const NOTION_FITS = {
8
+ title: ["string", "text"],
9
+ rich_text: ["string", "text"],
10
+ number: ["number", "integer"],
11
+ select: ["enum", "string"],
12
+ status: ["enum", "string"],
13
+ multi_select: ["list"],
14
+ date: ["date", "datetime"],
15
+ checkbox: ["boolean"],
16
+ url: ["url", "string"],
17
+ email: ["email", "string"],
18
+ phone_number: ["phone", "string"],
19
+ // Read from Notion as the people's names, and never written from here.
20
+ people: ["string", "text", "list"],
21
+ };
22
+ /** The property types a connection reads and never writes. */
23
+ export const NOTION_READ_ONLY = new Set(["people"]);
24
+ /** The field types a property may be inferred for, when the declaration names no properties. */
25
+ export const NOTION_INFERABLE = new Set(Object.values(NOTION_FITS).flat());
26
+ /** Why a property type Notion has is left alone, where it is not the plain "not kept in step". */
27
+ export const NOTION_LEFT_ALONE = {
28
+ relation: "a relation is kept as a relation of the kind, to a kind another Notion connection keeps, and the kind declares none for it",
29
+ formula: "Notion works a formula out, so there is nothing to write",
30
+ rollup: "Notion works a rollup out, so there is nothing to write",
31
+ files: "files are not kept in step yet",
32
+ };
33
+ /**
34
+ * What a mapping names a relation property for, in place of a field type:
35
+ * one of the kind's relations (edges), kept as the pages it reaches. Never a
36
+ * field type, so no field can be taken for one.
37
+ */
38
+ export const NOTION_EDGE = "@relation";
39
+ /** Whether a field of `fieldType` can hold a Notion property of `propertyType`. */
40
+ export function notionFits(propertyType, fieldType) {
41
+ return fieldType !== undefined && (NOTION_FITS[propertyType]?.includes(fieldType) ?? false);
42
+ }
43
+ /** A Notion id: 32 hexadecimal characters, with or without the hyphens. */
44
+ export const NOTION_ID = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;
45
+ /** An internal integration's secret, as Notion writes one: never in a document. */
46
+ export const NOTION_SECRET = /(?:^|[^A-Za-z0-9_])(?:secret_|ntn_)[A-Za-z0-9]{20,}/;
47
+ /** The environment prefix a Notion connection's secret is read under: `<prefix>_TOKEN`. */
48
+ export const NOTION_AUTH_ENV = "NOTION";
49
+ //# sourceMappingURL=notion-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-types.js","sourceRoot":"","sources":["../../src/sync/notion-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yGAAyG;AACzG,MAAM,CAAC,MAAM,WAAW,GAAgD;IACtE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IAC1B,QAAQ,EAAE,CAAC,SAAS,CAAC;IACrB,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;IACtB,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjC,uEAAuE;IACvE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEzE,gGAAgG;AAChG,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAEhG,kGAAkG;AAClG,MAAM,CAAC,MAAM,iBAAiB,GAAqC;IACjE,QAAQ,EAAE,4HAA4H;IACtI,OAAO,EAAE,0DAA0D;IACnE,MAAM,EAAE,yDAAyD;IACjE,KAAK,EAAE,gCAAgC;CACxC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AAEvC,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,YAAoB,EAAE,SAA6B;IAC5E,OAAO,SAAS,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,qEAAqE,CAAC;AAE/F,mFAAmF;AACnF,MAAM,CAAC,MAAM,aAAa,GAAG,qDAAqD,CAAC;AAEnF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC"}