@graview/core 0.1.57 → 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 (71) hide show
  1. package/README.md +12 -4
  2. package/dist/cli/document-schema.js +1 -1
  3. package/dist/cli/document-schema.js.map +1 -1
  4. package/dist/document/compile.d.ts.map +1 -1
  5. package/dist/document/compile.js +4 -0
  6. package/dist/document/compile.js.map +1 -1
  7. package/dist/document/compiled.d.ts +2 -0
  8. package/dist/document/compiled.d.ts.map +1 -1
  9. package/dist/document/compiled.js +2 -0
  10. package/dist/document/compiled.js.map +1 -1
  11. package/dist/document/connection-findings.d.ts.map +1 -1
  12. package/dist/document/connection-findings.js +189 -25
  13. package/dist/document/connection-findings.js.map +1 -1
  14. package/dist/document/connection-spec.d.ts +42 -2
  15. package/dist/document/connection-spec.d.ts.map +1 -1
  16. package/dist/document/connection-spec.js +64 -19
  17. package/dist/document/connection-spec.js.map +1 -1
  18. package/dist/document/kept-in-step.d.ts +7 -0
  19. package/dist/document/kept-in-step.d.ts.map +1 -0
  20. package/dist/document/kept-in-step.js +28 -0
  21. package/dist/document/kept-in-step.js.map +1 -0
  22. package/dist/document/schema.d.ts +5 -5
  23. package/dist/document.schema.json +243 -98
  24. package/dist/mutations/derive-edits.d.ts +4 -2
  25. package/dist/mutations/derive-edits.d.ts.map +1 -1
  26. package/dist/mutations/derive-edits.js +13 -4
  27. package/dist/mutations/derive-edits.js.map +1 -1
  28. package/dist/scaffold/from-template.d.ts.map +1 -1
  29. package/dist/scaffold/from-template.js +2 -1
  30. package/dist/scaffold/from-template.js.map +1 -1
  31. package/dist/schema/types.d.ts +10 -0
  32. package/dist/schema/types.d.ts.map +1 -1
  33. package/dist/sync/connection-filter.d.ts +2 -2
  34. package/dist/sync/connection-filter.d.ts.map +1 -1
  35. package/dist/sync/connection-filter.js.map +1 -1
  36. package/dist/sync/connection.d.ts +72 -28
  37. package/dist/sync/connection.d.ts.map +1 -1
  38. package/dist/sync/connection.js +255 -43
  39. package/dist/sync/connection.js.map +1 -1
  40. package/dist/sync/creating-act.d.ts +20 -0
  41. package/dist/sync/creating-act.d.ts.map +1 -0
  42. package/dist/sync/creating-act.js +29 -0
  43. package/dist/sync/creating-act.js.map +1 -0
  44. package/dist/sync/engine.d.ts +83 -1
  45. package/dist/sync/engine.d.ts.map +1 -1
  46. package/dist/sync/engine.js +269 -32
  47. package/dist/sync/engine.js.map +1 -1
  48. package/dist/sync/google-calendar.d.ts +3 -0
  49. package/dist/sync/google-calendar.d.ts.map +1 -1
  50. package/dist/sync/index.d.ts +10 -4
  51. package/dist/sync/index.d.ts.map +1 -1
  52. package/dist/sync/index.js +6 -2
  53. package/dist/sync/index.js.map +1 -1
  54. package/dist/sync/notion-stub.d.ts +81 -0
  55. package/dist/sync/notion-stub.d.ts.map +1 -0
  56. package/dist/sync/notion-stub.js +467 -0
  57. package/dist/sync/notion-stub.js.map +1 -0
  58. package/dist/sync/notion-types.d.ts +23 -0
  59. package/dist/sync/notion-types.d.ts.map +1 -0
  60. package/dist/sync/notion-types.js +49 -0
  61. package/dist/sync/notion-types.js.map +1 -0
  62. package/dist/sync/notion.d.ts +98 -0
  63. package/dist/sync/notion.d.ts.map +1 -0
  64. package/dist/sync/notion.js +477 -0
  65. package/dist/sync/notion.js.map +1 -0
  66. package/dist/sync/types.d.ts +38 -0
  67. package/dist/sync/types.d.ts.map +1 -1
  68. package/dist/sync/types.js.map +1 -1
  69. package/dist/version.d.ts +1 -1
  70. package/dist/version.js +1 -1
  71. package/package.json +1 -1
@@ -1,13 +1,17 @@
1
1
  import { deriveMutations } from "../mutations/derive-edits.js";
2
+ import { relationActName } from "../mutations/derived-names.js";
2
3
  import { withArticle } from "../schema/define-node.js";
3
4
  import { CONNECTION_TAG, GOOGLE_COLORS } from "../sync/connection-filter.js";
5
+ import { creatingActFor } from "../sync/creating-act.js";
6
+ import { NOTION_FITS, NOTION_INFERABLE, NOTION_READ_ONLY, NOTION_SECRET, notionFits } from "../sync/notion-types.js";
4
7
  import { error, warning } from "./findings.js";
5
8
  import { ConnectionSpec } from "./connection-spec.js";
6
9
  /*
7
10
  * A DECLARED CONNECTION, JUDGED (`connections.<name>`): what its shape
8
11
  * cannot say — that the kind and its fields are this document's and of the
9
- * types a calendar event's parts are, that a filter is one color Google
10
- * names or one tag, and, given the compiled app, that the acts an inbound
12
+ * types a calendar event's parts or a Notion database's properties are,
13
+ * that a filter is one color Google names or one tag, that no secret is
14
+ * written in it, and, given the compiled app, that the acts an inbound
11
15
  * change lands through are there. Each is a sentence `graview check` says
12
16
  * at the place it is wrong.
13
17
  */
@@ -18,31 +22,64 @@ export function connectionFindings(document, app) {
18
22
  const findings = [];
19
23
  for (const [name, raw] of Object.entries(document.connections ?? {})) {
20
24
  const at = `connections.${name}`;
25
+ // A secret written into the declaration is refused before anything else is said of it, and never repeated.
26
+ const secret = secretIn(raw, at);
27
+ if (secret) {
28
+ findings.push(error("connection-secret", secret, "this is an integration's secret, and a secret is never written in the app: it would travel with every copy and export of it", 'keep it in the host\'s environment (NOTION_TOKEN, or the variable "auth": { "env" } names) and take it out of here'));
29
+ continue;
30
+ }
21
31
  // The shape first, said as the compiler says a document's: a connection that is not one is judged no further.
22
32
  const parsed = ConnectionSpec.safeParse(raw);
23
33
  if (!parsed.success) {
24
- findings.push(...parsed.error.issues.map((issue) => shapeFinding(at, issue)));
34
+ findings.push(...parsed.error.issues.map((issue) => shapeFinding(at, raw, issue)));
25
35
  continue;
26
36
  }
27
- findings.push(...oneConnection(at, parsed.data, document, app));
37
+ const connection = parsed.data;
38
+ findings.push(...(connection.system === "notion" ? notionConnection(at, connection, document, app) : googleConnection(at, connection, document, app)));
28
39
  }
29
40
  return findings;
30
41
  }
42
+ /** Where in a connection a string reads as a Notion integration's secret, if anywhere. */
43
+ function secretIn(value, at) {
44
+ if (typeof value === "string")
45
+ return NOTION_SECRET.test(value) ? at : undefined;
46
+ if (!value || typeof value !== "object")
47
+ return undefined;
48
+ for (const [key, inner] of Object.entries(value)) {
49
+ if (NOTION_SECRET.test(key))
50
+ return at;
51
+ const found = secretIn(inner, `${at}.${key}`);
52
+ if (found)
53
+ return found;
54
+ }
55
+ return undefined;
56
+ }
57
+ const KEYS = {
58
+ "google-calendar": "system, calendar, auth, kind, fields, filter, direction, conflicts, every, paused and description",
59
+ notion: "system, database, source, auth, kind, properties, direction, conflicts, every, paused and description",
60
+ };
31
61
  /** A shape the connection does not have, at its place: an unknown key, or a value of the wrong kind. */
32
- function shapeFinding(at, issue) {
62
+ function shapeFinding(at, raw, issue) {
33
63
  const path = [at, ...issue.path.map(String)].join(".");
34
64
  if (issue.code === "unrecognized_keys" && issue.keys) {
35
- return error("unknown-key", path, `${issue.keys.map((key) => `"${key}"`).join(", ")} ${issue.keys.length === 1 ? "is" : "are"} not part of a connection`, "a connection says system, calendar, auth, kind, fields, filter, direction, conflicts, every, paused and description");
65
+ const system = String(raw?.system ?? "");
66
+ return error("unknown-key", path, `${issue.keys.map((key) => `"${key}"`).join(", ")} ${issue.keys.length === 1 ? "is" : "are"} not part of a${system === "notion" ? " Notion" : system === "google-calendar" ? " Google calendar" : ""} connection`, `a connection says ${KEYS[system] ?? KEYS["google-calendar"]}`);
67
+ }
68
+ // A system that is none of them is said at `system`, as every other wrong value is said at its key.
69
+ if (issue.code === "invalid_union" && issue.path.length === 0 && issue.note === "No matching discriminator") {
70
+ return error("shape", `${at}.system`, issue.message);
36
71
  }
37
72
  return error("shape", path, issue.message);
38
73
  }
39
- function oneConnection(at, connection, document, app) {
74
+ /** No such kind, said once for the connection. */
75
+ function noKind(at, document, kind, what) {
76
+ return error("connection-kind", `${at}.kind`, `there is no kind called ${kind} for ${what} to be`, `name one of ${Object.keys(document.kinds).join(", ")}`);
77
+ }
78
+ function googleConnection(at, connection, document, app) {
40
79
  const findings = [];
41
80
  const kind = document.kinds[connection.kind];
42
- if (!kind) {
43
- const kinds = Object.keys(document.kinds);
44
- return [error("connection-kind", `${at}.kind`, `there is no kind called ${connection.kind} for the calendar's events to be`, `name one of ${kinds.join(", ")}`)];
45
- }
81
+ if (!kind)
82
+ return [noKind(at, document, connection.kind, "the calendar's events")];
46
83
  const typeOf = (field) => kind.fields[field]?.type;
47
84
  const mapped = Object.entries(connection.fields).filter((entry) => typeof entry[1] === "string");
48
85
  const seen = new Map();
@@ -87,24 +124,151 @@ function oneConnection(at, connection, document, app) {
87
124
  if (filter.keep !== undefined && !filter.tag)
88
125
  findings.push(error("connection-filter", `${at}.filter.keep`, "keep says whether a title keeps its tag, and the filter has no tag", "drop keep, or add a tag"));
89
126
  }
90
- if (app) {
91
- // The acts the store will hold: the declared ones and those derived from them (`edit-<kind>`, `remove-<kind>`).
92
- const declared = app.mutations ?? [];
93
- const acts = new Map([...declared, ...deriveMutations(app.schema, declared)].map((mutation) => [mutation.name, mutation]));
94
- const creates = (app.mutations ?? []).some((mutation) => (mutation.creates ?? []).includes(connection.kind));
95
- if (!creates) {
96
- findings.push(error("connection-creates", `${at}.kind`, `no act makes ${withArticle(connection.kind)}, so an event made in the calendar has nothing to become here`, `declare an act with "creates": "${connection.kind}"`));
127
+ if (app)
128
+ findings.push(...landing(at, connection.kind, mapped.map(([, ours]) => ours).filter((ours) => kind.fields[ours]), { made: "an event made in the calendar", fields: "the event's fields", change: "a change in the calendar", deleted: "an event deleted in the calendar" }, app));
129
+ return findings;
130
+ }
131
+ function notionConnection(at, connection, document, app) {
132
+ const findings = [];
133
+ const kind = document.kinds[connection.kind];
134
+ if (!kind)
135
+ return [noKind(at, document, connection.kind, "the database's pages")];
136
+ let mapped;
137
+ const relations = [];
138
+ if (connection.properties) {
139
+ mapped = [];
140
+ const seen = new Map();
141
+ const edges = kind.edges ?? {};
142
+ for (const [field, property] of Object.entries(connection.properties)) {
143
+ const path = `${at}.properties.${field}`;
144
+ const name = typeof property === "string" ? property : property.name;
145
+ const declared = typeof property === "string" ? undefined : property.type;
146
+ if (!kind.fields[field] && !edges[field]) {
147
+ const names = [...Object.keys(kind.fields), ...Object.keys(edges)];
148
+ findings.push(error("connection-field", path, `${connection.kind} has no field or relation called ${field} to hold the property ${name}`, `name one of ${names.join(", ")}`));
149
+ continue;
150
+ }
151
+ const twice = seen.get(name);
152
+ if (twice)
153
+ findings.push(error("connection-field", path, `the property ${name} is already held by ${twice}, and one property is held by one field or relation`, "give each property a field or relation of its own"));
154
+ seen.set(name, field);
155
+ if (!kind.fields[field]) {
156
+ // One of the kind's relations, held by a relation property: its pages are records another Notion connection keeps.
157
+ if (declared && declared !== "relation") {
158
+ findings.push(error("connection-relation", path, `${field} is a relation of ${connection.kind}, and the property ${name} is a ${declared}: a relation is held by a relation property, the pages it links`, `name a relation property, or map a field of ${connection.kind} to ${name}`));
159
+ continue;
160
+ }
161
+ const problem = relationTarget(connection.kind, field, edges[field].to, document);
162
+ if (problem) {
163
+ findings.push(error("connection-relation-target", path, problem.message, problem.fix));
164
+ continue;
165
+ }
166
+ relations.push(field);
167
+ continue;
168
+ }
169
+ if (declared === "relation") {
170
+ findings.push(error("connection-relation", path, `the property ${name} is a relation, the pages it links, and ${field} is a field of ${connection.kind}, which holds one value`, `declare a relation of ${connection.kind} to the kind those pages are, and map it to ${name}`));
171
+ continue;
172
+ }
173
+ mapped.push(field);
174
+ const type = kind.fields[field].type;
175
+ if (typeof property === "string") {
176
+ if (!NOTION_INFERABLE.has(type))
177
+ findings.push(error("connection-field-type", path, `${field} is a ${type} field, and no Notion property a connection keeps in step is held in one`, `name a field of another type, or leave ${field} out`));
178
+ continue;
179
+ }
180
+ if (!notionFits(property.type, type)) {
181
+ findings.push(error("connection-field-type", path, `the property ${name} is a ${property.type}, and ${field} is a ${type} field`, `name a ${NOTION_FITS[property.type].join(", ")} field`));
182
+ }
183
+ else if (NOTION_READ_ONLY.has(property.type) && connection.direction === "both") {
184
+ findings.push(warning("connection-read-only", path, `${name} is a people property, which is read from Notion and never written: a change to ${field} here stays here`));
185
+ }
97
186
  }
98
- const edit = acts.get(`edit-${connection.kind}`);
99
- const writes = new Set(edit?.writes ?? []);
100
- const unwritten = mapped.map(([, ours]) => ours).filter((ours) => kind.fields[ours] && !writes.has(ours));
101
- if (unwritten.length > 0) {
102
- findings.push(error("connection-edit", `${at}.fields`, `a change in the calendar lands through edit-${connection.kind}, which does not write ${unwritten.join(", ")}: another act declares ${unwritten.length === 1 ? "it" : "them"}`, `let edit-${connection.kind} write ${unwritten.length === 1 ? "it" : "them"} (drop "writes" of ${unwritten.length === 1 ? "it" : "them"} from the other act), or leave ${unwritten.length === 1 ? "it" : "them"} out of the connection`));
187
+ if (mapped.length === 0 && Object.keys(connection.properties).length === 0) {
188
+ findings.push(error("connection-properties", `${at}.properties`, "the connection maps no property, so nothing would be kept in step", "map a field to a property, or drop properties to match them by name"));
103
189
  }
104
- if (!acts.has(`remove-${connection.kind}`)) {
105
- findings.push(warning("connection-remove", `${at}.kind`, `no act removes ${withArticle(connection.kind)}, so an event deleted in the calendar stays here, no longer kept in step`));
190
+ }
191
+ else {
192
+ mapped = Object.entries(kind.fields).filter(([, spec]) => NOTION_INFERABLE.has(spec.type)).map(([field]) => field);
193
+ if (mapped.length === 0)
194
+ findings.push(error("connection-properties", `${at}.kind`, `${connection.kind} has no field a Notion property could be held in`, "give it a string, number, date, enum, list or boolean field"));
195
+ }
196
+ if (app && mapped.length > 0)
197
+ findings.push(...landing(at, connection.kind, mapped, { made: "a page made in the database", fields: "the page's fields", change: "a change in Notion", deleted: "a page archived in Notion" }, app));
198
+ if (app)
199
+ findings.push(...linking(at, connection.kind, relations, document, app));
200
+ return findings;
201
+ }
202
+ /** Why a relation cannot be kept in step: what it reaches is no kind a Notion connection of this app keeps. */
203
+ function relationTarget(kindName, relation, to, document) {
204
+ const kept = new Set(Object.values(document.connections ?? {})
205
+ .map((raw) => raw)
206
+ .filter((raw) => raw.system === "notion" && typeof raw.kind === "string")
207
+ .map((raw) => String(raw.kind)));
208
+ const keptBy = kept.size > 0 ? `the Notion connections here keep ${[...kept].join(", ")}` : "no other Notion connection is declared";
209
+ if (to === "*")
210
+ return { message: `${kindName}'s ${relation} reaches any kind, and a Notion relation links the pages of one database`, fix: `say the kind it reaches with "to", and keep that kind with a Notion connection of its own` };
211
+ const outside = to.filter((target) => !kept.has(target));
212
+ if (outside.length === 0)
213
+ return undefined;
214
+ return {
215
+ message: `${kindName}'s ${relation} reaches ${outside.join(" and ")}, which no Notion connection of this app keeps, so a page it links would have no record here (${keptBy})`,
216
+ fix: `declare a Notion connection for ${outside.join(" and ")}'s database, or leave ${relation} out of properties`,
217
+ };
218
+ }
219
+ /** That the acts a link made or taken away in Notion lands through are there: `connect-<kind>-<relation>` and `disconnect-<kind>-<relation>`. */
220
+ function linking(at, kindName, relations, document, app) {
221
+ if (relations.length === 0)
222
+ return [];
223
+ const findings = [];
224
+ const declared = app.mutations ?? [];
225
+ const acts = new Set([...declared, ...deriveMutations(app.schema, declared)].map((mutation) => mutation.name));
226
+ for (const relation of relations) {
227
+ const path = `${at}.properties.${relation}`;
228
+ const connect = relationActName("connect", kindName, relation);
229
+ const disconnect = relationActName("disconnect", kindName, relation);
230
+ if (!acts.has(connect)) {
231
+ findings.push(error("connection-connect", path, `a link made in Notion lands through ${connect}, and this app has no such act: the relation declares no acts, or an act of its own replaces it`, `let ${kindName}'s ${relation} be given its derived acts, or leave ${relation} out of properties`));
232
+ }
233
+ else if (!acts.has(disconnect)) {
234
+ const appendOnly = document.kinds[kindName]?.edges?.[relation]?.appendOnly === true;
235
+ findings.push(warning("connection-disconnect", path, `no act takes ${kindName}'s ${relation} away${appendOnly ? " (it is append-only)" : ""}, so a link taken away in Notion stays here`));
106
236
  }
107
237
  }
108
238
  return findings;
109
239
  }
240
+ /** That the acts an inbound change lands through are there: one that makes the kind from the mapped fields alone, `edit-<kind>` writing every mapped field, `remove-<kind>`. */
241
+ function landing(at, kindName, fields, said, app) {
242
+ const findings = [];
243
+ // The acts the store will hold: the declared ones and those derived from them (`edit-<kind>`, `remove-<kind>`).
244
+ const declared = app.mutations ?? [];
245
+ const acts = new Map([...declared, ...deriveMutations(app.schema, declared)].map((mutation) => [mutation.name, mutation]));
246
+ // The act a record is made through takes no subject and asks only for what the connection maps (`creatingActFor`), as the connection chooses it.
247
+ const making = creatingActFor(declared, kindName, fields);
248
+ if (!making.creates) {
249
+ findings.push(error("connection-creates", `${at}.kind`, `no act makes ${withArticle(kindName)}, so ${said.made} has nothing to become here`, `declare an act with "creates": "${kindName}"`));
250
+ }
251
+ else if (!making.act) {
252
+ const why = making.unfit.map((act) => act.on ? `${act.name} acts on ${act.on.length > 0 ? act.on.map(withArticle).join(" or ") : "a record"}` : `${act.name} asks for ${act.asks.join(", ")}, which the connection does not map`);
253
+ findings.push(error("connection-creates", `${at}.kind`, `${said.made} becomes ${withArticle(kindName)} through an act that makes one from ${said.fields} alone, and ${why.join("; ")}`, `declare an act with "creates": "${kindName}" and no "on", whose required arguments are fields the connection maps (add-${kindName} is the one looked for first)`));
254
+ }
255
+ const edit = acts.get(`edit-${kindName}`);
256
+ const writes = new Set(edit?.writes ?? []);
257
+ const unwritten = fields.filter((field) => !writes.has(field));
258
+ if (unwritten.length > 0) {
259
+ const them = unwritten.length === 1 ? "it" : "them";
260
+ // The derived edit writes every field a connection maps (`keptInStep`), so what it leaves out is fixed, or the app declares its own edit.
261
+ const own = edit !== undefined && !edit.derived;
262
+ const fixed = unwritten.filter((field) => field in (app.schema.tryDefinition(kindName)?.fixed ?? {}));
263
+ findings.push(error("connection-edit", `${at}.${said.change.includes("calendar") ? "fields" : "properties"}`, own
264
+ ? `${said.change} lands through edit-${kindName}, which does not write ${unwritten.join(", ")}: the app declares its own edit-${kindName}`
265
+ : `${said.change} lands through edit-${kindName}, which does not write ${unwritten.join(", ")}: ${fixed.length > 0 ? `${fixed.join(", ")} ${fixed.length === 1 ? "is" : "are"} fixed` : `no edit-${kindName} is there`}`, own
266
+ ? `let edit-${kindName} write ${them}, or take it out so the derived edit, which writes every field a connection maps, is given, or leave ${them} out of the connection`
267
+ : `leave ${them} out of the connection, or let ${them} change`));
268
+ }
269
+ if (!acts.has(`remove-${kindName}`)) {
270
+ findings.push(warning("connection-remove", `${at}.kind`, `no act removes ${withArticle(kindName)}, so ${said.deleted} stays here, no longer kept in step`));
271
+ }
272
+ return findings;
273
+ }
110
274
  //# sourceMappingURL=connection-findings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-findings.js","sourceRoot":"","sources":["../../src/document/connection-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;;;;;GAOG;AAEH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACzC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAE3C,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,QAAyB,EAAE,GAAgB;IAC5E,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,GAAG,eAAe,IAAI,EAAE,CAAC;QACjC,8GAA8G;QAC9G,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9E,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,wGAAwG;AACxG,SAAS,YAAY,CAAC,EAAU,EAAE,KAAoI;IACpK,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,2BAA2B,EAAE,qHAAqH,CAAC,CAAC;IACnR,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,EAAU,EAAE,UAA0B,EAAE,QAAyB,EAAE,GAAgB;IACxG,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,UAAU,CAAC,IAAI,kCAAkC,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACnK,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC5H,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,EAAE,WAAW,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,wBAAwB,IAAI,wBAAwB,MAAM,EAAE,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACrL,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,IAAI,8BAA8B,KAAK,4CAA4C,EAAE,mCAAmC,CAAC,CAAC,CAAC;QACvL,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,eAAe,MAAM,kBAAkB,IAAI,SAAS,IAAI,QAAQ,EAAE,6BAA6B,CAAC,CAAC,CAAC;QACvJ,CAAC;QACD,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,iDAAiD,IAAI,SAAS,IAAI,QAAQ,EAAE,oCAAoC,CAAC,CAAC,CAAC;QACxK,CAAC;QACD,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,eAAe,MAAM,8BAA8B,IAAI,SAAS,IAAI,QAAQ,EAAE,6EAA6E,CAAC,CAAC,CAAC;QACnN,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QACtE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,KAAK,QAAQ,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,iDAAiD,EAAE,mEAAmE,CAAC,CAAC,CAAC;IACpQ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,SAAS,EAAE,8EAA8E,EAAE,UAAU,CAAC,CAAC,CAAC;aACjL,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,SAAS,EAAE,4CAA4C,EAAE,iEAAiE,CAAC,CAAC,CAAC;QAClN,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,EAAE,eAAe,EAAE,wCAAwC,MAAM,CAAC,KAAK,GAAG,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClL,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,MAAM,CAAC,GAAG,sDAAsD,EAAE,0BAA0B,CAAC,CAAC,CAAC;QAC/J,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,cAAc,EAAE,oEAAoE,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAChN,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,gHAAgH;QAChH,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3H,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,+DAA+D,EAAE,mCAAmC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/N,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CACX,KAAK,CACH,iBAAiB,EACjB,GAAG,EAAE,SAAS,EACd,+CAA+C,UAAU,CAAC,IAAI,0BAA0B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAC9K,YAAY,UAAU,CAAC,IAAI,UAAU,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,sBAAsB,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,kCAAkC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,wBAAwB,CACxO,CACF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,EAAE,OAAO,EAAE,kBAAkB,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC,CAAC;QACtL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"connection-findings.js","sourceRoot":"","sources":["../../src/document/connection-findings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAgE,MAAM,sBAAsB,CAAC;AAGpH;;;;;;;;GAQG;AAEH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACzC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAE3C,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,QAAyB,EAAE,GAAgB;IAC5E,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,GAAG,eAAe,IAAI,EAAE,CAAC;QACjC,2GAA2G;QAC3G,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,EAAE,6HAA6H,EAAE,oHAAoH,CAAC,CAAC,CAAC;YACvS,SAAS;QACX,CAAC;QACD,8GAA8G;QAC9G,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACnF,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACzJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0FAA0F;AAC1F,SAAS,QAAQ,CAAC,KAAc,EAAE,EAAU;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,IAAI,GAAqC;IAC7C,iBAAiB,EAAE,mGAAmG;IACtH,MAAM,EAAE,uGAAuG;CAChH,CAAC;AAEF,wGAAwG;AACxG,SAAS,YAAY,CAAC,EAAU,EAAE,GAAY,EAAE,KAAoI;IAClL,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAE,GAAwC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,qBAAqB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACvT,CAAC;IACD,oGAAoG;IACpG,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAK,KAA2B,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;QACnI,OAAO,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,kDAAkD;AAClD,SAAS,MAAM,CAAC,EAAU,EAAE,QAAyB,EAAE,IAAY,EAAE,IAAY;IAC/E,OAAO,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,IAAI,QAAQ,IAAI,QAAQ,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9J,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU,EAAE,UAAwC,EAAE,QAAyB,EAAE,GAAgB;IACzH,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC5H,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,EAAE,WAAW,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,wBAAwB,IAAI,wBAAwB,MAAM,EAAE,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACrL,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,IAAI,8BAA8B,KAAK,4CAA4C,EAAE,mCAAmC,CAAC,CAAC,CAAC;QACvL,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,eAAe,MAAM,kBAAkB,IAAI,SAAS,IAAI,QAAQ,EAAE,6BAA6B,CAAC,CAAC,CAAC;QACvJ,CAAC;QACD,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,iDAAiD,IAAI,SAAS,IAAI,QAAQ,EAAE,oCAAoC,CAAC,CAAC,CAAC;QACxK,CAAC;QACD,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,eAAe,MAAM,8BAA8B,IAAI,SAAS,IAAI,QAAQ,EAAE,6EAA6E,CAAC,CAAC,CAAC;QACnN,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QACtE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,KAAK,QAAQ,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,iDAAiD,EAAE,mEAAmE,CAAC,CAAC,CAAC;IACpQ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,SAAS,EAAE,8EAA8E,EAAE,UAAU,CAAC,CAAC,CAAC;aACjL,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,SAAS,EAAE,4CAA4C,EAAE,iEAAiE,CAAC,CAAC,CAAC;QAClN,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,EAAE,eAAe,EAAE,wCAAwC,MAAM,CAAC,KAAK,GAAG,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClL,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,MAAM,CAAC,GAAG,sDAAsD,EAAE,0BAA0B,CAAC,CAAC,CAAC;QAC/J,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,cAAc,EAAE,oEAAoE,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAChN,CAAC;IAED,IAAI,GAAG;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,0BAA0B,EAAE,OAAO,EAAE,kCAAkC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3R,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU,EAAE,UAAgC,EAAE,QAAyB,EAAE,GAAgB;IACjH,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAClF,IAAI,MAAgB,CAAC;IACrB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,GAAG,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,GAAG,EAAE,eAAe,KAAK,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrE,MAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACnE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,oCAAoC,KAAK,yBAAyB,IAAI,EAAE,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9K,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,KAAK;gBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,IAAI,uBAAuB,KAAK,qDAAqD,EAAE,mDAAmD,CAAC,CAAC,CAAC;YACtN,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,mHAAmH;gBACnH,IAAI,QAAQ,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;oBACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,GAAG,KAAK,qBAAqB,UAAU,CAAC,IAAI,sBAAsB,IAAI,SAAS,QAAQ,iEAAiE,EAAE,+CAA+C,UAAU,CAAC,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;oBACzR,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBACnF,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvF,SAAS;gBACX,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,gBAAgB,IAAI,2CAA2C,KAAK,kBAAkB,UAAU,CAAC,IAAI,yBAAyB,EAAE,yBAAyB,UAAU,CAAC,IAAI,+CAA+C,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjR,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC;YACtC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,GAAG,KAAK,SAAS,IAAI,0EAA0E,EAAE,0CAA0C,KAAK,MAAM,CAAC,CAAC,CAAC;gBAC7O,SAAS;YACX,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,gBAAgB,IAAI,SAAS,QAAQ,CAAC,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,EAAE,UAAU,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/L,CAAC;iBAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;gBAClF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,EAAE,GAAG,IAAI,mFAAmF,KAAK,kBAAkB,CAAC,CAAC,CAAC;YAC1K,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,EAAE,aAAa,EAAE,mEAAmE,EAAE,qEAAqE,CAAC,CAAC,CAAC;QAChN,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACnH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,kDAAkD,EAAE,6DAA6D,CAAC,CAAC,CAAC;IAC5N,CAAC;IACD,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,2BAA2B,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACpO,IAAI,GAAG;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+GAA+G;AAC/G,SAAS,cAAc,CAAC,QAAgB,EAAE,QAAgB,EAAE,EAA2B,EAAE,QAAyB;IAChH,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAA2C,CAAC;SACzD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;SACxE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAClC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC,CAAC;IACrI,IAAI,EAAE,KAAK,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,MAAM,QAAQ,0EAA0E,EAAE,GAAG,EAAE,2FAA2F,EAAE,CAAC;IAC1O,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO;QACL,OAAO,EAAE,GAAG,QAAQ,MAAM,QAAQ,YAAY,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,iGAAiG,MAAM,GAAG;QAC7K,GAAG,EAAE,mCAAmC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,QAAQ,oBAAoB;KACnH,CAAC;AACJ,CAAC;AAED,iJAAiJ;AACjJ,SAAS,OAAO,CAAC,EAAU,EAAE,QAAgB,EAAE,SAA4B,EAAE,QAAyB,EAAE,GAAe;IACrH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/G,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,EAAE,eAAe,QAAQ,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,uCAAuC,OAAO,iGAAiG,EAAE,OAAO,QAAQ,MAAM,QAAQ,wCAAwC,QAAQ,oBAAoB,CAAC,CAAC,CAAC;QACvS,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,EAAE,gBAAgB,QAAQ,MAAM,QAAQ,QAAQ,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,6CAA6C,CAAC,CAAC,CAAC;QAC7L,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gLAAgL;AAChL,SAAS,OAAO,CAAC,EAAU,EAAE,QAAgB,EAAE,MAAyB,EAAE,IAA2G,EAAE,GAAe;IACpM,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,gHAAgH;IAChH,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3H,iJAAiJ;IACjJ,MAAM,MAAM,GAAG,cAAc,CAAC,QAA4C,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9F,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,WAAW,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,IAAI,6BAA6B,EAAE,mCAAmC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAChM,CAAC;SAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACnC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,IAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAC5L,CAAC;QACF,QAAQ,CAAC,IAAI,CACX,KAAK,CACH,oBAAoB,EACpB,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,CAAC,IAAI,YAAY,WAAW,CAAC,QAAQ,CAAC,uCAAuC,IAAI,CAAC,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC9H,mCAAmC,QAAQ,+EAA+E,QAAQ,+BAA+B,CAClK,CACF,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACpD,0IAA0I;QAC1I,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACtG,QAAQ,CAAC,IAAI,CACX,KAAK,CACH,iBAAiB,EACjB,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,EACrE,GAAG;YACD,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,uBAAuB,QAAQ,0BAA0B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,QAAQ,EAAE;YAC1I,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,uBAAuB,QAAQ,0BAA0B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,QAAQ,WAAW,EAAE,EAC1N,GAAG;YACD,CAAC,CAAC,YAAY,QAAQ,UAAU,IAAI,wGAAwG,IAAI,wBAAwB;YACxK,CAAC,CAAC,SAAS,IAAI,kCAAkC,IAAI,SAAS,CACjE,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,EAAE,OAAO,EAAE,kBAAkB,WAAW,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,OAAO,qCAAqC,CAAC,CAAC,CAAC;IAC9J,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import * as z from "../schema/zod.js";
2
- export declare const ConnectionSpec: z.ZodMiniLazy<z.ZodMiniObject<{
2
+ /**
3
+ * A CONNECTION: the app kept in step with another system, declared rather
4
+ * than wired in code (`connections.<name>`) — a Google calendar or a Notion
5
+ * database. It never holds a secret.
6
+ */
7
+ export declare const ConnectionSpec: z.ZodMiniLazy<z.ZodMiniDiscriminatedUnion<[z.ZodMiniObject<{
3
8
  system: z.ZodMiniLiteral<"google-calendar">;
4
9
  description: z.ZodMiniOptional<z.ZodMiniString<string>>;
5
10
  calendar: z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniObject<{
@@ -33,6 +38,41 @@ export declare const ConnectionSpec: z.ZodMiniLazy<z.ZodMiniObject<{
33
38
  }>>;
34
39
  every: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
35
40
  paused: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
36
- }, z.core.$strict>>;
41
+ }, z.core.$strict>, z.ZodMiniObject<{
42
+ system: z.ZodMiniLiteral<"notion">;
43
+ description: z.ZodMiniOptional<z.ZodMiniString<string>>;
44
+ database: z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniObject<{
45
+ env: z.ZodMiniString<string>;
46
+ }, z.core.$strict>]>;
47
+ source: z.ZodMiniOptional<z.ZodMiniString<string>>;
48
+ auth: z.ZodMiniOptional<z.ZodMiniObject<{
49
+ env: z.ZodMiniString<string>;
50
+ file: z.ZodMiniOptional<z.ZodMiniString<string>>;
51
+ }, z.core.$strict>>;
52
+ kind: z.ZodMiniString<string>;
53
+ properties: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniUnion<readonly [z.ZodMiniString<string>, z.ZodMiniObject<{
54
+ name: z.ZodMiniString<string>;
55
+ type: z.ZodMiniEnum<{
56
+ [x: string]: string;
57
+ }>;
58
+ }, z.core.$strict>]>>>;
59
+ direction: z.ZodMiniEnum<{
60
+ read: "read";
61
+ both: "both";
62
+ }>;
63
+ conflicts: z.ZodMiniOptional<z.ZodMiniEnum<{
64
+ report: "report";
65
+ theirs: "theirs";
66
+ ours: "ours";
67
+ }>>;
68
+ every: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
69
+ paused: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
70
+ }, z.core.$strict>], "system">>;
37
71
  export type ConnectionSpec = z.infer<typeof ConnectionSpec>;
72
+ export type GoogleCalendarConnectionSpec = Extract<ConnectionSpec, {
73
+ system: "google-calendar";
74
+ }>;
75
+ export type NotionConnectionSpec = Extract<ConnectionSpec, {
76
+ system: "notion";
77
+ }>;
38
78
  //# sourceMappingURL=connection-spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-spec.d.ts","sourceRoot":"","sources":["../../src/document/connection-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAC;AAmDtC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAoC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"connection-spec.d.ts","sourceRoot":"","sources":["../../src/document/connection-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAC;AA6FtC;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAAoC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAAC;AAClG,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import * as z from "../schema/zod.js";
2
- import { FIELD_NAME, NAME } from "./schema.js";
2
+ import { NOTION_FITS, NOTION_ID } from "../sync/notion-types.js";
3
+ import { EDGE_NAME, FIELD_NAME, NAME } from "./schema.js";
3
4
  /*
4
5
  * A CONNECTION'S SHAPE, apart from the document's: a page that draws an app
5
6
  * reads `connections` loosely and never runs one, so this is reached only by
@@ -12,38 +13,82 @@ function build() {
12
13
  const sentence = str(1, 500);
13
14
  const kindName = z.string().check(z.regex(NAME, 'kind names are kebab-case, lower-case words joined by hyphens like "tool-note"'));
14
15
  const fieldName = z.string().check(z.regex(FIELD_NAME, 'field names are one word or camelCase, like "dueDate"'));
16
+ const envName = z.string().check(z.regex(/^[A-Z][A-Z0-9_]*$/, 'an environment variable is upper-case words joined by underscores, like "GOOGLE"'));
17
+ /* Where the credentials are read from: environment variables under `env`, failing that the KEY=value file `file` names. */
18
+ const auth = z.optional(z.strictObject({ env: envName, file: z.optional(str(1, 500)) }));
19
+ /* "read": the other system owns these records and acts here that would change them are refused. "both": changes go both ways. */
20
+ const direction = z.enum(["read", "both"], 'a connection\'s direction is "read" (the other system owns these records) or "both"');
21
+ const conflicts = z.optional(z.enum(["report", "theirs", "ours"], 'a conflict is held for somebody ("report"), or settled for the other system ("theirs") or for this app ("ours")'));
22
+ /* Seconds between passes; a change made here starts one sooner. */
23
+ const every = z.optional(z.number().check(z.int(), z.minimum(2), z.maximum(86_400)));
15
24
  /**
16
- * A CONNECTION: the app kept in step with another system, declared rather
17
- * than wired in code (`connections.<name>`). Today the one system is a
18
- * Google calendar: which calendar, which kind its events are and which
25
+ * A GOOGLE CALENDAR: which calendar, which kind its events are and which
19
26
  * fields say what, which of its events (all of them, one color, or those
20
- * whose title carries a tag), whether this app only reads them or writes
21
- * them back too, and what a conflict becomes. It never holds a secret: the
22
- * calendar may be named by an environment variable, and `auth` says where
23
- * the credentials are read from (`<env>_CLIENT_ID`, `<env>_CLIENT_SECRET`,
24
- * `<env>_REFRESH_TOKEN`), unless the host hands a token itself.
27
+ * whose title carries a tag). The calendar may be named by an environment
28
+ * variable, and `auth` says where the credentials are read from
29
+ * (`<env>_CLIENT_ID`, `<env>_CLIENT_SECRET`, `<env>_REFRESH_TOKEN`; GOOGLE
30
+ * by default), unless the host hands a token itself.
25
31
  */
26
- const envName = z.string().check(z.regex(/^[A-Z][A-Z0-9_]*$/, 'an environment variable is upper-case words joined by underscores, like "GOOGLE"'));
27
- const ConnectionSpec = z.strictObject({
28
- system: z.literal("google-calendar", 'the one system a connection reaches today is "google-calendar"'),
32
+ const GoogleCalendar = z.strictObject({
33
+ system: z.literal("google-calendar"),
29
34
  description: z.optional(sentence),
30
35
  /* The calendar's id ("primary", or "…@group.calendar.google.com"), or the environment variable that holds it. */
31
36
  calendar: z.union([str(1, 300), z.strictObject({ env: envName })]),
32
- auth: z.optional(z.strictObject({ env: envName, file: z.optional(str(1, 500)) })),
37
+ auth,
33
38
  kind: kindName,
34
39
  /* Google's side → this kind's field. A date field is an all-day event's day; a datetime field, a timed event's instant. */
35
40
  fields: z.strictObject({ summary: fieldName, start: fieldName, end: fieldName, location: z.optional(fieldName), description: z.optional(fieldName) }),
36
41
  /* Absent: the whole calendar. `{ color }`: the events of one of Google's colors, by name. `{ tag }`: those whose title carries a word like "#graview", kept in the title here or not (`keep`). */
37
42
  filter: z.optional(z.strictObject({ color: z.optional(str(1, 40)), tag: z.optional(str(1, 40)), keep: z.optional(z.boolean()) })),
38
- /* "read": the calendar owns these records and acts here that would change them are refused. "both": changes go both ways. */
39
- direction: z.enum(["read", "both"], 'a connection\'s direction is "read" (the calendar owns these records) or "both"'),
40
- conflicts: z.optional(z.enum(["report", "theirs", "ours"], 'a conflict is held for somebody ("report"), or settled for the calendar ("theirs") or for this app ("ours")')),
41
- /* Seconds between passes; a change made here starts one sooner. */
42
- every: z.optional(z.number().check(z.int(), z.minimum(2), z.maximum(86_400))),
43
+ direction,
44
+ conflicts,
45
+ every,
43
46
  paused: z.optional(z.boolean()),
44
47
  });
45
- return ConnectionSpec;
48
+ /**
49
+ * A NOTION DATABASE: one database, each of its pages a record of one kind.
50
+ * The database is named by its id or by an environment variable; the
51
+ * internal integration's secret is read from `<env>_TOKEN` (NOTION_TOKEN by
52
+ * default) or handed by the host, never written here. `properties` maps a
53
+ * field to a property by name, with the property's type when the checker
54
+ * should judge it; absent, every field whose name a property has is kept
55
+ * in step, and the kind's name field is the database's title. A database
56
+ * that holds several data sources (Notion's tables under one name) says
57
+ * which with `source`, its name or id; one of a single source needs none.
58
+ *
59
+ * A key of `properties` may name one of the kind's RELATIONS (edges) in
60
+ * place of a field, held by a Notion relation property: its links are the
61
+ * pages the property reaches, each a record another Notion connection of
62
+ * the app keeps (`"reindeer": "Reindeer Fleet"`, or with
63
+ * `"type": "relation"`). Matched by name, a relation whose name a
64
+ * relation property has is kept too.
65
+ */
66
+ const notionTypes = [...Object.keys(NOTION_FITS), "relation"];
67
+ const keptName = z.string().check(z.regex(EDGE_NAME, 'a key of properties is one of the kind\'s fields or relations, like "dueDate" or "reindeer"'));
68
+ const notionType = z.enum(notionTypes, `a property's type is one a connection keeps in step: ${notionTypes.join(", ")}`);
69
+ const Notion = z.strictObject({
70
+ system: z.literal("notion"),
71
+ description: z.optional(sentence),
72
+ /* The database's id (the 32 characters in its link, before ?v=), or the environment variable that holds it. */
73
+ database: z.union([z.string().check(z.regex(NOTION_ID, "a Notion database's id is the 32 characters in its link, before ?v=")), z.strictObject({ env: envName })]),
74
+ /* The data source, by its name in Notion or its id, when the database holds several. */
75
+ source: z.optional(str(1, 200)),
76
+ auth,
77
+ kind: kindName,
78
+ /* This kind's field or relation → the database's property, by its name in Notion, or `{ name, type }` with its type. */
79
+ properties: z.optional(z.record(keptName, z.union([str(1, 100), z.strictObject({ name: str(1, 100), type: notionType })]))),
80
+ direction,
81
+ conflicts,
82
+ every,
83
+ paused: z.optional(z.boolean()),
84
+ });
85
+ return z.discriminatedUnion("system", [GoogleCalendar, Notion], 'a connection\'s system is "google-calendar" or "notion"');
46
86
  }
47
87
  let built;
88
+ /**
89
+ * A CONNECTION: the app kept in step with another system, declared rather
90
+ * than wired in code (`connections.<name>`) — a Google calendar or a Notion
91
+ * database. It never holds a secret.
92
+ */
48
93
  export const ConnectionSpec = z.lazy(() => (built ??= build()));
49
94
  //# sourceMappingURL=connection-spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-spec.js","sourceRoot":"","sources":["../../src/document/connection-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;GAKG;AAEH,kHAAkH;AAClH,SAAS,KAAK;IACZ,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,gFAAgF,CAAC,CAAC,CAAC;IACnI,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,uDAAuD,CAAC,CAAC,CAAC;IAEjH;;;;;;;;;;OAUG;IACH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,kFAAkF,CAAC,CAAC,CAAC;IACnJ,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,gEAAgE,CAAC;QACtG,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjC,iHAAiH;QACjH,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,IAAI,EAAE,QAAQ;QACd,2HAA2H;QAC3H,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrJ,kMAAkM;QAClM,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACjI,6HAA6H;QAC7H,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,iFAAiF,CAAC;QACtH,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,6GAA6G,CAAC,CAAC;QAC1K,mEAAmE;QACnE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAChC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC;AACD,IAAI,KAA2C,CAAC;AAEhD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"connection-spec.js","sourceRoot":"","sources":["../../src/document/connection-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;GAKG;AAEH,kHAAkH;AAClH,SAAS,KAAK;IACZ,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,gFAAgF,CAAC,CAAC,CAAC;IACnI,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,uDAAuD,CAAC,CAAC,CAAC;IACjH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,kFAAkF,CAAC,CAAC,CAAC;IACnJ,2HAA2H;IAC3H,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,iIAAiI;IACjI,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,qFAAqF,CAAC,CAAC;IAClI,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,iHAAiH,CAAC,CAAC,CAAC;IACtL,mEAAmE;IACnE,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAErF;;;;;;;OAOG;IACH,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACpC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjC,iHAAiH;QACjH,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,2HAA2H;QAC3H,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrJ,kMAAkM;QAClM,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACjI,SAAS;QACT,SAAS;QACT,KAAK;QACL,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAChC,CAAC,CAAC;IAEH;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,CAAqC,CAAC;IAClG,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,6FAA6F,CAAC,CAAC,CAAC;IACrJ,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,wDAAwD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC3B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjC,+GAA+G;QAC/G,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,qEAAqE,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAClK,wFAAwF;QACxF,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,wHAAwH;QACxH,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,SAAS;QACT,SAAS;QACT,KAAK;QACL,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAChC,CAAC,CAAC;IAEH,OAAO,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,yDAAyD,CAAC,CAAC;AAC7H,CAAC;AACD,IAAI,KAA2C,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Kind → the fields of it a declared connection maps, in the kind's own order. */
2
+ export declare function fieldsKeptInStep(connections: unknown, kinds: Readonly<Record<string, {
3
+ readonly fields: Readonly<Record<string, {
4
+ readonly type: string;
5
+ }>>;
6
+ }>>): ReadonlyMap<string, readonly string[]>;
7
+ //# sourceMappingURL=kept-in-step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kept-in-step.d.ts","sourceRoot":"","sources":["../../src/document/kept-in-step.ts"],"names":[],"mappings":"AAcA,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAkBxM"}
@@ -0,0 +1,28 @@
1
+ import { NOTION_INFERABLE } from "../sync/notion-types.js";
2
+ /** Kind → the fields of it a declared connection maps, in the kind's own order. */
3
+ export function fieldsKeptInStep(connections, kinds) {
4
+ const kept = new Map();
5
+ if (!connections || typeof connections !== "object")
6
+ return new Map();
7
+ for (const raw of Object.values(connections)) {
8
+ if (!raw || typeof raw !== "object" || typeof raw.kind !== "string")
9
+ continue;
10
+ const fields = kinds[raw.kind]?.fields;
11
+ if (!fields)
12
+ continue;
13
+ let mapped = [];
14
+ if (raw.system === "google-calendar" && raw.fields && typeof raw.fields === "object") {
15
+ mapped = Object.values(raw.fields).filter((field) => typeof field === "string");
16
+ }
17
+ else if (raw.system === "notion") {
18
+ mapped = raw.properties && typeof raw.properties === "object" ? Object.keys(raw.properties) : Object.keys(fields).filter((field) => NOTION_INFERABLE.has(fields[field].type));
19
+ }
20
+ const set = kept.get(raw.kind) ?? new Set();
21
+ for (const field of mapped)
22
+ if (Object.hasOwn(fields, field))
23
+ set.add(field);
24
+ kept.set(raw.kind, set);
25
+ }
26
+ return new Map([...kept].filter(([, set]) => set.size > 0).map(([kind, set]) => [kind, Object.keys(kinds[kind].fields).filter((field) => set.has(field))]));
27
+ }
28
+ //# sourceMappingURL=kept-in-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kept-in-step.js","sourceRoot":"","sources":["../../src/document/kept-in-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAc3D,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,WAAoB,EAAE,KAAyG;IAC9J,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5C,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACtE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,WAAoC,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,MAAM,GAAa,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,iBAAiB,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrF,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAiC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;QAC9H,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACjL,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/J,CAAC"}
@@ -39,10 +39,10 @@ export declare const FieldSpec: z.ZodMiniLazy<z.ZodMiniObject<{
39
39
  duration: "duration";
40
40
  text: "text";
41
41
  list: "list";
42
+ phone: "phone";
42
43
  image: "image";
43
44
  video: "video";
44
45
  "app-link": "app-link";
45
- phone: "phone";
46
46
  place: "place";
47
47
  }>;
48
48
  required: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
@@ -118,10 +118,10 @@ export declare const KindSpec: z.ZodMiniLazy<z.ZodMiniObject<{
118
118
  duration: "duration";
119
119
  text: "text";
120
120
  list: "list";
121
+ phone: "phone";
121
122
  image: "image";
122
123
  video: "video";
123
124
  "app-link": "app-link";
124
- phone: "phone";
125
125
  place: "place";
126
126
  }>;
127
127
  required: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
@@ -258,10 +258,10 @@ export declare const ActSpec: z.ZodMiniLazy<z.ZodMiniObject<{
258
258
  duration: "duration";
259
259
  text: "text";
260
260
  list: "list";
261
+ phone: "phone";
261
262
  image: "image";
262
263
  video: "video";
263
264
  "app-link": "app-link";
264
- phone: "phone";
265
265
  place: "place";
266
266
  }>;
267
267
  required: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
@@ -472,10 +472,10 @@ export declare const DocumentSpec: z.ZodMiniLazy<z.ZodMiniObject<{
472
472
  duration: "duration";
473
473
  text: "text";
474
474
  list: "list";
475
+ phone: "phone";
475
476
  image: "image";
476
477
  video: "video";
477
478
  "app-link": "app-link";
478
- phone: "phone";
479
479
  place: "place";
480
480
  }>;
481
481
  required: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
@@ -599,10 +599,10 @@ export declare const DocumentSpec: z.ZodMiniLazy<z.ZodMiniObject<{
599
599
  duration: "duration";
600
600
  text: "text";
601
601
  list: "list";
602
+ phone: "phone";
602
603
  image: "image";
603
604
  video: "video";
604
605
  "app-link": "app-link";
605
- phone: "phone";
606
606
  place: "place";
607
607
  }>;
608
608
  required: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;