@graview/core 0.1.59 → 0.1.61

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 (182) hide show
  1. package/README.md +10 -0
  2. package/dist/arrangement.d.ts +2 -0
  3. package/dist/arrangement.d.ts.map +1 -1
  4. package/dist/arrangement.js +14 -0
  5. package/dist/arrangement.js.map +1 -1
  6. package/dist/capabilities.js +1 -1
  7. package/dist/capabilities.js.map +1 -1
  8. package/dist/catalog.d.ts.map +1 -1
  9. package/dist/catalog.js +2 -1
  10. package/dist/catalog.js.map +1 -1
  11. package/dist/cli/check/context.d.ts +5 -0
  12. package/dist/cli/check/context.d.ts.map +1 -1
  13. package/dist/cli/check/context.js.map +1 -1
  14. package/dist/cli/check/face.d.ts +14 -0
  15. package/dist/cli/check/face.d.ts.map +1 -0
  16. package/dist/cli/check/face.js +161 -0
  17. package/dist/cli/check/face.js.map +1 -0
  18. package/dist/cli/check/index.d.ts +1 -0
  19. package/dist/cli/check/index.d.ts.map +1 -1
  20. package/dist/cli/check/index.js +1 -0
  21. package/dist/cli/check/index.js.map +1 -1
  22. package/dist/cli/check/typing.d.ts +4 -0
  23. package/dist/cli/check/typing.d.ts.map +1 -0
  24. package/dist/cli/check/typing.js +56 -0
  25. package/dist/cli/check/typing.js.map +1 -0
  26. package/dist/cli/check.d.ts.map +1 -1
  27. package/dist/cli/check.js +4 -4
  28. package/dist/cli/check.js.map +1 -1
  29. package/dist/cli/docs.d.ts.map +1 -1
  30. package/dist/cli/docs.js +5 -3
  31. package/dist/cli/docs.js.map +1 -1
  32. package/dist/cli/document-schema.d.ts.map +1 -1
  33. package/dist/cli/document-schema.js +2 -0
  34. package/dist/cli/document-schema.js.map +1 -1
  35. package/dist/cli/index.d.ts +2 -1
  36. package/dist/cli/index.d.ts.map +1 -1
  37. package/dist/cli/index.js +14 -3
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/cli/types.d.ts.map +1 -1
  40. package/dist/cli/types.js +2 -1
  41. package/dist/cli/types.js.map +1 -1
  42. package/dist/compose.d.ts +6 -0
  43. package/dist/compose.d.ts.map +1 -1
  44. package/dist/compose.js +6 -1
  45. package/dist/compose.js.map +1 -1
  46. package/dist/document/blocks.d.ts.map +1 -1
  47. package/dist/document/blocks.js +2 -1
  48. package/dist/document/blocks.js.map +1 -1
  49. package/dist/document/compile-checked.js +1 -1
  50. package/dist/document/compile-checked.js.map +1 -1
  51. package/dist/document/compile.d.ts.map +1 -1
  52. package/dist/document/compile.js +6 -2
  53. package/dist/document/compile.js.map +1 -1
  54. package/dist/document/compiled.d.ts.map +1 -1
  55. package/dist/document/compiled.js +12 -5
  56. package/dist/document/compiled.js.map +1 -1
  57. package/dist/document/connection-findings.d.ts.map +1 -1
  58. package/dist/document/connection-findings.js +134 -12
  59. package/dist/document/connection-findings.js.map +1 -1
  60. package/dist/document/connection-spec.d.ts +1 -0
  61. package/dist/document/connection-spec.d.ts.map +1 -1
  62. package/dist/document/connection-spec.js +8 -2
  63. package/dist/document/connection-spec.js.map +1 -1
  64. package/dist/document/edit.d.ts +1 -1
  65. package/dist/document/edit.d.ts.map +1 -1
  66. package/dist/document/edit.js +83 -11
  67. package/dist/document/edit.js.map +1 -1
  68. package/dist/document/field-spec.d.ts.map +1 -1
  69. package/dist/document/field-spec.js +5 -0
  70. package/dist/document/field-spec.js.map +1 -1
  71. package/dist/document/findings.d.ts +33 -2
  72. package/dist/document/findings.d.ts.map +1 -1
  73. package/dist/document/findings.js +14 -17
  74. package/dist/document/findings.js.map +1 -1
  75. package/dist/document/migrate.d.ts.map +1 -1
  76. package/dist/document/migrate.js +10 -4
  77. package/dist/document/migrate.js.map +1 -1
  78. package/dist/document/schema.d.ts +5 -0
  79. package/dist/document/schema.d.ts.map +1 -1
  80. package/dist/document/schema.js +10 -1
  81. package/dist/document/schema.js.map +1 -1
  82. package/dist/document.schema.json +84 -4
  83. package/dist/format-error.d.ts +1 -1
  84. package/dist/format-error.js +1 -1
  85. package/dist/formats.d.ts +30 -4
  86. package/dist/formats.d.ts.map +1 -1
  87. package/dist/formats.js +36 -9
  88. package/dist/formats.js.map +1 -1
  89. package/dist/import/coerce.d.ts.map +1 -1
  90. package/dist/import/coerce.js +16 -4
  91. package/dist/import/coerce.js.map +1 -1
  92. package/dist/import/rows.js +2 -2
  93. package/dist/import/rows.js.map +1 -1
  94. package/dist/index.d.ts +1 -0
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +1 -0
  97. package/dist/index.js.map +1 -1
  98. package/dist/kind-list.d.ts +1 -0
  99. package/dist/kind-list.d.ts.map +1 -1
  100. package/dist/kind-list.js +2 -1
  101. package/dist/kind-list.js.map +1 -1
  102. package/dist/mutations/define-mutation.d.ts.map +1 -1
  103. package/dist/mutations/define-mutation.js +4 -3
  104. package/dist/mutations/define-mutation.js.map +1 -1
  105. package/dist/mutations/derive-repeats.d.ts.map +1 -1
  106. package/dist/mutations/derive-repeats.js +2 -1
  107. package/dist/mutations/derive-repeats.js.map +1 -1
  108. package/dist/mutations/form.d.ts +2 -0
  109. package/dist/mutations/form.d.ts.map +1 -1
  110. package/dist/mutations/form.js +6 -3
  111. package/dist/mutations/form.js.map +1 -1
  112. package/dist/mutations/type-text.d.ts +1 -1
  113. package/dist/mutations/type-text.js +1 -1
  114. package/dist/mutations/types.d.ts +13 -4
  115. package/dist/mutations/types.d.ts.map +1 -1
  116. package/dist/mutations/would-run.d.ts +26 -0
  117. package/dist/mutations/would-run.d.ts.map +1 -0
  118. package/dist/mutations/would-run.js +58 -0
  119. package/dist/mutations/would-run.js.map +1 -0
  120. package/dist/ops/log.d.ts +15 -0
  121. package/dist/ops/log.d.ts.map +1 -1
  122. package/dist/ops/log.js.map +1 -1
  123. package/dist/past.d.ts +3 -1
  124. package/dist/past.d.ts.map +1 -1
  125. package/dist/past.js +9 -1
  126. package/dist/past.js.map +1 -1
  127. package/dist/permissions/sight.d.ts +8 -0
  128. package/dist/permissions/sight.d.ts.map +1 -1
  129. package/dist/permissions/sight.js +8 -0
  130. package/dist/permissions/sight.js.map +1 -1
  131. package/dist/publish.d.ts +2 -2
  132. package/dist/publish.d.ts.map +1 -1
  133. package/dist/publishing.js +20 -5
  134. package/dist/publishing.js.map +1 -1
  135. package/dist/scaffold/agents.d.ts +9 -1
  136. package/dist/scaffold/agents.d.ts.map +1 -1
  137. package/dist/scaffold/agents.js +34 -3
  138. package/dist/scaffold/agents.js.map +1 -1
  139. package/dist/scaffold/project.js +1 -1
  140. package/dist/schema/choice-words.d.ts.map +1 -1
  141. package/dist/schema/choice-words.js +3 -0
  142. package/dist/schema/choice-words.js.map +1 -1
  143. package/dist/seen.d.ts.map +1 -1
  144. package/dist/seen.js +4 -1
  145. package/dist/seen.js.map +1 -1
  146. package/dist/starting-document.d.ts +41 -0
  147. package/dist/starting-document.d.ts.map +1 -0
  148. package/dist/starting-document.js +614 -0
  149. package/dist/starting-document.js.map +1 -0
  150. package/dist/store.d.ts +23 -0
  151. package/dist/store.d.ts.map +1 -1
  152. package/dist/store.js +49 -11
  153. package/dist/store.js.map +1 -1
  154. package/dist/sync/connection.d.ts +10 -1
  155. package/dist/sync/connection.d.ts.map +1 -1
  156. package/dist/sync/connection.js +109 -17
  157. package/dist/sync/connection.js.map +1 -1
  158. package/dist/sync/engine.d.ts +13 -4
  159. package/dist/sync/engine.d.ts.map +1 -1
  160. package/dist/sync/engine.js +5 -3
  161. package/dist/sync/engine.js.map +1 -1
  162. package/dist/sync/google-calendar.d.ts.map +1 -1
  163. package/dist/sync/google-calendar.js +4 -2
  164. package/dist/sync/google-calendar.js.map +1 -1
  165. package/dist/sync/notion-types.d.ts +7 -0
  166. package/dist/sync/notion-types.d.ts.map +1 -1
  167. package/dist/sync/notion-types.js +6 -1
  168. package/dist/sync/notion-types.js.map +1 -1
  169. package/dist/sync/recurrence.d.ts +41 -0
  170. package/dist/sync/recurrence.d.ts.map +1 -0
  171. package/dist/sync/recurrence.js +192 -0
  172. package/dist/sync/recurrence.js.map +1 -0
  173. package/dist/traits.d.ts +72 -0
  174. package/dist/traits.d.ts.map +1 -0
  175. package/dist/traits.js +447 -0
  176. package/dist/traits.js.map +1 -0
  177. package/dist/typed.d.ts +4 -0
  178. package/dist/typed.d.ts.map +1 -1
  179. package/dist/typed.js.map +1 -1
  180. package/dist/version.d.ts +1 -1
  181. package/dist/version.js +1 -1
  182. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ import { instantIn, wallIn } from "../days.js";
2
+ import { WEEKDAYS, isRepeat } from "../repeat.js";
3
+ import { addDays, pad, weekdayOf as weekdayIndexOf } from "../wall-time.js";
4
+ /*
5
+ * A RECORD THAT RECURS, AS ONE GOOGLE EVENT (Roadmap
6
+ * f-connection-weekly-records-recur, FR-230). Two shapes of record say a
7
+ * week: a weekday set and two times of day ("mon, wed", "09:00"–"10:30"),
8
+ * and a date that repeats (`repeat.ts`: the first occurrence and the rule
9
+ * beside it). Either is one event with a rule — `RRULE:FREQ=WEEKLY;BYDAY=MO,WE`
10
+ * — in the app's time zone, and a day set apart is an `EXDATE` on it. This
11
+ * is the arithmetic between the two, apart from the mapping that uses it:
12
+ * the rule written and read, a time of day and a wall time turned into the
13
+ * instant Google wants and back, the first day a weekly series falls on.
14
+ */
15
+ const BYDAY = { sun: "SU", mon: "MO", tue: "TU", wed: "WE", thu: "TH", fri: "FR", sat: "SA" };
16
+ const WEEKDAY_OF = Object.fromEntries(Object.entries(BYDAY).map(([day, code]) => [code, day]));
17
+ const FREQ = { day: "DAILY", week: "WEEKLY", month: "MONTHLY", year: "YEARLY" };
18
+ const EVERY_OF = { DAILY: "day", WEEKLY: "week", MONTHLY: "month", YEARLY: "year" };
19
+ const DAY = /^\d{4}-\d{2}-\d{2}$/;
20
+ /** The weekday a value names, read loosely: "mon", "Monday", "MO", "tues". */
21
+ export function weekdayOf(value) {
22
+ if (typeof value !== "string")
23
+ return undefined;
24
+ const word = value.trim().toLowerCase();
25
+ if (word.length === 2)
26
+ return WEEKDAY_OF[word.toUpperCase()];
27
+ return WEEKDAYS.find((day) => word.startsWith(day));
28
+ }
29
+ /** The weekdays a record's value names — one, or a list of them — in the week's order, each once. */
30
+ export function weekdaysOf(value) {
31
+ const named = (Array.isArray(value) ? value : [value]).map(weekdayOf).filter((day) => day !== undefined);
32
+ return WEEKDAYS.filter((day) => named.includes(day));
33
+ }
34
+ /** The first day on or after `from` that is one of the weekdays; `from` itself when it is. */
35
+ export function firstWeekday(from, days) {
36
+ if (days.length === 0)
37
+ return undefined;
38
+ for (let n = 0; n < 7; n += 1) {
39
+ const day = addDays(from, n);
40
+ if (days.includes(WEEKDAYS[weekdayIndexOf(day)]))
41
+ return day;
42
+ }
43
+ return undefined;
44
+ }
45
+ /** "09:00" (or "9:00", "09:00:00") as minutes after midnight; undefined for anything else. */
46
+ export function minutesOf(value) {
47
+ const match = typeof value === "string" ? /^\s*(\d{1,2}):(\d{2})(?::\d{2})?\s*$/.exec(value) : null;
48
+ if (!match)
49
+ return undefined;
50
+ const hours = Number(match[1]);
51
+ const minutes = Number(match[2]);
52
+ return hours < 24 && minutes < 60 ? hours * 60 + minutes : undefined;
53
+ }
54
+ /** Minutes after midnight as "HH:MM". */
55
+ export const hhmm = (minutes) => `${pad(Math.floor(minutes / 60))}:${pad(minutes % 60)}`;
56
+ /** An instant as Google writes one, to the second. */
57
+ export const isoInstant = (stamp) => new Date(stamp).toISOString().replace(/\.\d{3}Z$/, "Z");
58
+ /** A day and, where it has one, the minutes after midnight a record's date or moment says, on the app's wall. */
59
+ export function wallOfMoment(value, zone) {
60
+ if (typeof value !== "string")
61
+ return undefined;
62
+ if (DAY.test(value))
63
+ return { day: value };
64
+ const written = /^(\d{4}-\d{2}-\d{2})[T ](\d{2}):(\d{2})(?::\d{2}(?:\.\d+)?)?$/.exec(value);
65
+ if (written)
66
+ return { day: written[1], minutes: Number(written[2]) * 60 + Number(written[3]) };
67
+ const stamp = Date.parse(value);
68
+ return Number.isNaN(stamp) ? undefined : wallIn(stamp, zone);
69
+ }
70
+ /** The instant a record's moment names: a wall time in the zone, or the instant it carries. Not a date. */
71
+ export function instantOfMoment(value, zone) {
72
+ const wall = wallOfMoment(value, zone);
73
+ if (!wall || wall.minutes === undefined)
74
+ return undefined;
75
+ return isoInstant(instantIn(wall.day, wall.minutes, zone));
76
+ }
77
+ /** An instant as a record keeps a wall time in the zone: "2026-10-20T18:00". */
78
+ export function momentOfInstant(value, zone) {
79
+ if (typeof value !== "string")
80
+ return value;
81
+ const stamp = Date.parse(value);
82
+ if (Number.isNaN(stamp))
83
+ return value;
84
+ const wall = wallIn(stamp, zone);
85
+ return `${wall.day}T${hhmm(wall.minutes)}`;
86
+ }
87
+ /** A weekly rule for a weekday set. */
88
+ export const weeklyRule = (days) => `RRULE:FREQ=WEEKLY;BYDAY=${days.map((day) => BYDAY[day]).join(",")}`;
89
+ const compact = (day) => day.replace(/-/g, "");
90
+ const stampOf = (day, minutes) => `${compact(day)}T${pad(Math.floor(minutes / 60))}${pad(minutes % 60)}00`;
91
+ /**
92
+ * The lines a repeat is as Google keeps a recurrence: its RRULE, and an
93
+ * EXDATE for each day set apart — at the series' time of day in the app's
94
+ * zone for a timed series, as a day for an all-day one. An until day ends
95
+ * at midnight there, said as the instant it is.
96
+ */
97
+ export function recurrenceOf(repeat, start, zone) {
98
+ const timed = start.minutes !== undefined;
99
+ const parts = [`FREQ=${FREQ[repeat.every]}`];
100
+ if (repeat.interval && repeat.interval > 1)
101
+ parts.push(`INTERVAL=${repeat.interval}`);
102
+ if (repeat.on && repeat.on.length > 0) {
103
+ if (repeat.every === "week")
104
+ parts.push(`BYDAY=${repeat.on.map((day) => BYDAY[day]).join(",")}`);
105
+ else if (repeat.every === "month")
106
+ parts.push(`BYMONTHDAY=${repeat.on.join(",")}`);
107
+ }
108
+ if (repeat.until)
109
+ parts.push(`UNTIL=${timed ? isoInstant(instantIn(addDays(repeat.until, 1), 0, zone) - 1000).replace(/[-:]/g, "") : compact(repeat.until)}`);
110
+ if (repeat.count)
111
+ parts.push(`COUNT=${repeat.count}`);
112
+ return [`RRULE:${parts.join(";")}`, ...(repeat.except ?? []).map((day) => (timed ? `EXDATE;TZID=${zone}:${stampOf(day, start.minutes)}` : `EXDATE;VALUE=DATE:${compact(day)}`))];
113
+ }
114
+ /** A day from the forms a recurrence writes one in: `20261121`, `20261121T100000`, `20261231T045959Z` (read in the zone). */
115
+ function dayOfStamp(value, zone) {
116
+ const match = /^(\d{4})(\d{2})(\d{2})(?:T(\d{2})(\d{2})(\d{2})(Z)?)?$/.exec(value);
117
+ if (!match)
118
+ return undefined;
119
+ const day = `${match[1]}-${match[2]}-${match[3]}`;
120
+ if (match[7] !== "Z")
121
+ return day;
122
+ return wallIn(Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3]), Number(match[4]), Number(match[5]), Number(match[6])), zone).day;
123
+ }
124
+ /**
125
+ * The repeat a recurrence says, read in the zone, or undefined where it says
126
+ * what a repeat cannot hold (a monthly rule by weekday, a set position, an
127
+ * RDATE): such an event is left as it is rather than kept wrongly.
128
+ */
129
+ export function repeatOf(recurrence, zone) {
130
+ if (!Array.isArray(recurrence) || recurrence.length === 0)
131
+ return undefined;
132
+ let rule;
133
+ const except = [];
134
+ for (const line of recurrence) {
135
+ if (typeof line !== "string")
136
+ return undefined;
137
+ const [head, body = ""] = line.split(/:(.*)/s);
138
+ const [name, ...params] = head.split(";");
139
+ if (name === "RRULE") {
140
+ if (rule)
141
+ return undefined;
142
+ const said = Object.fromEntries(body.split(";").map((part) => part.split("=")));
143
+ const every = EVERY_OF[said["FREQ"] ?? ""];
144
+ if (!every)
145
+ return undefined;
146
+ const keys = Object.keys(said).filter((key) => !["FREQ", "INTERVAL", "BYDAY", "BYMONTHDAY", "UNTIL", "COUNT", "WKST"].includes(key));
147
+ if (keys.length > 0)
148
+ return undefined;
149
+ const read = { every };
150
+ if (said["INTERVAL"] && Number(said["INTERVAL"]) > 1)
151
+ read.interval = Number(said["INTERVAL"]);
152
+ if (said["BYDAY"]) {
153
+ if (every !== "week")
154
+ return undefined;
155
+ const days = said["BYDAY"].split(",").map((code) => WEEKDAY_OF[code]);
156
+ if (days.some((day) => day === undefined))
157
+ return undefined;
158
+ read.on = WEEKDAYS.filter((day) => days.includes(day));
159
+ }
160
+ if (said["BYMONTHDAY"]) {
161
+ if (every !== "month")
162
+ return undefined;
163
+ read.on = said["BYMONTHDAY"].split(",").map(Number);
164
+ }
165
+ if (said["UNTIL"]) {
166
+ const until = dayOfStamp(said["UNTIL"], zone);
167
+ if (!until)
168
+ return undefined;
169
+ read.until = until;
170
+ }
171
+ if (said["COUNT"])
172
+ read.count = Number(said["COUNT"]);
173
+ rule = read;
174
+ }
175
+ else if (name === "EXDATE") {
176
+ for (const stamp of body.split(",")) {
177
+ const day = dayOfStamp(stamp, zone);
178
+ if (!day)
179
+ return undefined;
180
+ except.push(day);
181
+ }
182
+ void params;
183
+ }
184
+ else
185
+ return undefined;
186
+ }
187
+ if (!rule)
188
+ return undefined;
189
+ const whole = except.length > 0 ? { ...rule, except: [...new Set(except)].sort() } : rule;
190
+ return isRepeat(whole) ? whole : undefined;
191
+ }
192
+ //# sourceMappingURL=recurrence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence.js","sourceRoot":"","sources":["../../src/sync/recurrence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * WHAT A DECLARATION IS MADE OF, in a closed vocabulary (Roadmap
3
+ * f-document-traits; the starter's deconstruction of templates).
4
+ *
5
+ * A template's pitch says what it is for; its declaration says what it is
6
+ * made of — a status that moves, people who own things, money against a
7
+ * budget — and two templates that share no word of prose can share most of
8
+ * their structure. `traitsOf` reads that structure off the declaration,
9
+ * never off hand-written tags, and says each trait it finds with the kinds,
10
+ * fields, relations, rules, lenses and acts that carry it and one sentence
11
+ * a person reads ("Vendors' quote against each category's budget").
12
+ *
13
+ * Conservative, as `inferJobs` is: a trait is read only where the
14
+ * declaration leaves no doubt — a status needs its step acts, ownership a
15
+ * relation of one to a kind that is people, a budget a field called one
16
+ * beside a money field — so a host asking "does this app have X?" is told
17
+ * yes only when it would draw X. The vocabulary is a stability surface
18
+ * (`docs/stability.md`): a name is never renamed or taken away within the
19
+ * major, and one added is said in the changelog.
20
+ *
21
+ * Exported on `@graview/core/compose`, on no page.
22
+ */
23
+ import type { GraviewApp } from "./app.js";
24
+ import type { GraviewDocument } from "./document/schema.js";
25
+ import type { AnySchema } from "./schema/schema.js";
26
+ /** The closed vocabulary, in the order traits are said. */
27
+ export declare const TRAITS: readonly ["owners", "status", "schedule", "budget", "places", "sources", "stock", "votes", "private", "history", "publishing", "roster", "routines", "comparison"];
28
+ export type TraitName = (typeof TRAITS)[number];
29
+ /** Each trait in a person's words, as a chip or a question says it ("Does what they described need people who own things?"). */
30
+ export declare const TRAIT_WORDS: Readonly<Record<TraitName, string>>;
31
+ /** One trait a declaration carries: what carries it, named, and one sentence. Fields and relations are said as `<kind>.<name>`; lenses by title. */
32
+ export interface Trait {
33
+ readonly trait: TraitName;
34
+ readonly words: string;
35
+ readonly said: string;
36
+ readonly kinds: readonly string[];
37
+ readonly fields: readonly string[];
38
+ readonly relations: readonly string[];
39
+ readonly rules: readonly string[];
40
+ readonly lenses: readonly string[];
41
+ readonly acts: readonly string[];
42
+ }
43
+ export declare const DUE_FIELD: RegExp;
44
+ declare const nounOf: (document: GraviewDocument, kind: string) => string;
45
+ declare const pluralOf: (document: GraviewDocument, kind: string) => string;
46
+ declare const an: (noun: string) => "a" | "an";
47
+ declare const listed: (words: readonly string[], join?: string) => string;
48
+ /** Whether the kind stands for people: declared so, or named so. */
49
+ export declare function isPeopleKind(document: GraviewDocument, kind: string): boolean;
50
+ /** The kind people see most: the one with the most fields, declared earliest among equals — what `startingDocument` joins a module to. */
51
+ export declare function mainKindOf(document: GraviewDocument): string | undefined;
52
+ /** A choice field that moves: an enum whose values named step acts set — a status, a stage — with the acts that move it. */
53
+ export declare function movingChoices(document: GraviewDocument, kind: string): {
54
+ field: string;
55
+ options: readonly string[];
56
+ steps: string[];
57
+ }[];
58
+ /**
59
+ * THE TRAITS A DECLARATION CARRIES, in `TRAITS` order, each with what
60
+ * carries it and one sentence. A TypeScript app is read as the document it
61
+ * would be (`toDocument`). Nothing is read off prose: a template that says
62
+ * "budget" in its pitch and declares no budget field has no budget trait,
63
+ * and one that declares a budget beside its quotes has it whatever its
64
+ * pitch says.
65
+ */
66
+ export declare function traitsOf(source: GraviewDocument | GraviewApp<AnySchema>): Trait[];
67
+ /** Whether a declaration carries one trait — what a module asks before it adds anything. */
68
+ export declare function hasTrait(document: GraviewDocument, trait: TraitName): boolean;
69
+ /** The words of a trait, for a chip ("people who own things") — a name off the vocabulary is said back as given. */
70
+ export declare function traitWords(trait: string): string;
71
+ export { an, listed as listedWords, nounOf as traitNounOf, pluralOf as traitPluralOf };
72
+ //# sourceMappingURL=traits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,sBAAsB,CAAC;AAGtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,2DAA2D;AAC3D,eAAO,MAAM,MAAM,oKAAqK,CAAC;AACzL,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,gIAAgI;AAChI,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAe3D,CAAC;AAEF,oJAAoJ;AACpJ,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAcD,eAAO,MAAM,SAAS,QAA0E,CAAC;AAgBjG,QAAA,MAAM,MAAM,GAAI,UAAU,eAAe,EAAE,MAAM,MAAM,WAA6D,CAAC;AACrH,QAAA,MAAM,QAAQ,GAAI,UAAU,eAAe,EAAE,MAAM,MAAM,WAAwE,CAAC;AAGlI,QAAA,MAAM,EAAE,GAAI,MAAM,MAAM,eAA0C,CAAC;AACnE,QAAA,MAAM,MAAM,GAAI,OAAO,SAAS,MAAM,EAAE,EAAE,aAAY,WAAgH,CAAC;AAavK,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM7E;AAgDD,0IAA0I;AAC1I,wBAAgB,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAOxE;AAOD,4HAA4H;AAC5H,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAavI;AA+OD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,EAAE,CASjF;AAED,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAI7E;AAED,oHAAoH;AACpH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,IAAI,WAAW,EAAE,QAAQ,IAAI,aAAa,EAAE,CAAC"}