things-api 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -12
- package/dist/audit/log.js +56 -2
- package/dist/audit/log.js.map +1 -1
- package/dist/audit/schema.d.ts +26 -8
- package/dist/audit/schema.js +42 -1
- package/dist/audit/schema.js.map +1 -1
- package/dist/cli/clock.d.ts +8 -0
- package/dist/cli/clock.js +24 -0
- package/dist/cli/clock.js.map +1 -0
- package/dist/cli/commands/area.d.ts +26 -3
- package/dist/cli/commands/area.js +129 -75
- package/dist/cli/commands/area.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -1
- package/dist/cli/commands/doctor.js +44 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/install-skill.d.ts +45 -0
- package/dist/cli/commands/install-skill.js +207 -0
- package/dist/cli/commands/install-skill.js.map +1 -0
- package/dist/cli/commands/mcp.js +23 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/project.d.ts +18 -1
- package/dist/cli/commands/project.js +74 -35
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/reads.d.ts +15 -2
- package/dist/cli/commands/reads.js +459 -165
- package/dist/cli/commands/reads.js.map +1 -1
- package/dist/cli/commands/repeat-flags.d.ts +20 -0
- package/dist/cli/commands/repeat-flags.js +76 -0
- package/dist/cli/commands/repeat-flags.js.map +1 -0
- package/dist/cli/commands/setup.js +8 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/show.js +53 -30
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/todo.d.ts +1 -1
- package/dist/cli/commands/todo.js +20 -13
- package/dist/cli/commands/todo.js.map +1 -1
- package/dist/cli/commands/writes.js +388 -161
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/did-you-mean.d.ts +1 -1
- package/dist/cli/excess-args.d.ts +15 -0
- package/dist/cli/excess-args.js +51 -0
- package/dist/cli/excess-args.js.map +1 -0
- package/dist/cli/glyphs.d.ts +55 -2
- package/dist/cli/glyphs.js +114 -21
- package/dist/cli/glyphs.js.map +1 -1
- package/dist/cli/help.d.ts +54 -0
- package/dist/cli/help.js +405 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/main.js +64 -26
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/move-hint.d.ts +45 -0
- package/dist/cli/move-hint.js +196 -0
- package/dist/cli/move-hint.js.map +1 -0
- package/dist/cli/period.d.ts +9 -8
- package/dist/cli/period.js +56 -30
- package/dist/cli/period.js.map +1 -1
- package/dist/cli/read-driver.d.ts +26 -19
- package/dist/cli/read-driver.js +77 -33
- package/dist/cli/read-driver.js.map +1 -1
- package/dist/cli/render.d.ts +92 -28
- package/dist/cli/render.js +333 -103
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/resolve-invocation.d.ts +42 -4
- package/dist/cli/resolve-invocation.js +97 -14
- package/dist/cli/resolve-invocation.js.map +1 -1
- package/dist/cli/skill-check.d.ts +21 -0
- package/dist/cli/skill-check.js +82 -0
- package/dist/cli/skill-check.js.map +1 -0
- package/dist/cli/skill.d.ts +62 -0
- package/dist/cli/skill.js +142 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tag-filters.d.ts +63 -0
- package/dist/cli/tag-filters.js +59 -0
- package/dist/cli/tag-filters.js.map +1 -0
- package/dist/cli/verb-hint.d.ts +25 -0
- package/dist/cli/verb-hint.js +163 -0
- package/dist/cli/verb-hint.js.map +1 -0
- package/dist/cli/version.d.ts +4 -0
- package/dist/cli/version.js +18 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli/width.d.ts +135 -0
- package/dist/cli/width.js +313 -0
- package/dist/cli/width.js.map +1 -0
- package/dist/client.d.ts +160 -24
- package/dist/client.js +132 -19
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/contracts.d.ts +97 -17
- package/dist/contracts.js +44 -1
- package/dist/contracts.js.map +1 -1
- package/dist/db/fingerprint.d.ts +12 -0
- package/dist/db/fingerprint.js +15 -1
- package/dist/db/fingerprint.js.map +1 -1
- package/dist/db/locate.js +1 -1
- package/dist/db/locate.js.map +1 -1
- package/dist/diagnose.d.ts +63 -0
- package/dist/diagnose.js +38 -1
- package/dist/diagnose.js.map +1 -1
- package/dist/index.d.ts +36 -5
- package/dist/index.js +38 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -1
- package/dist/mcp/server.js +1038 -436
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/clock.d.ts +61 -0
- package/dist/model/clock.js +71 -0
- package/dist/model/clock.js.map +1 -0
- package/dist/model/dates.d.ts +26 -3
- package/dist/model/dates.js +84 -3
- package/dist/model/dates.js.map +1 -1
- package/dist/model/entities.d.ts +48 -10
- package/dist/model/entities.js.map +1 -1
- package/dist/model/mappers.d.ts +9 -2
- package/dist/model/mappers.js +32 -9
- package/dist/model/mappers.js.map +1 -1
- package/dist/model/serialize.d.ts +28 -0
- package/dist/model/serialize.js +80 -0
- package/dist/model/serialize.js.map +1 -0
- package/dist/model/when-sugar.d.ts +47 -0
- package/dist/model/when-sugar.js +45 -0
- package/dist/model/when-sugar.js.map +1 -0
- package/dist/read/area-view.d.ts +8 -1
- package/dist/read/area-view.js +55 -17
- package/dist/read/area-view.js.map +1 -1
- package/dist/read/detail.d.ts +1 -1
- package/dist/read/detail.js +11 -4
- package/dist/read/detail.js.map +1 -1
- package/dist/read/filter-contract.d.ts +117 -0
- package/dist/read/filter-contract.js +78 -0
- package/dist/read/filter-contract.js.map +1 -0
- package/dist/read/log-boundary.d.ts +1 -1
- package/dist/read/log-boundary.js +13 -3
- package/dist/read/log-boundary.js.map +1 -1
- package/dist/read/predicates.d.ts +30 -0
- package/dist/read/predicates.js +30 -0
- package/dist/read/predicates.js.map +1 -1
- package/dist/read/project-view.d.ts +12 -1
- package/dist/read/project-view.js +45 -12
- package/dist/read/project-view.js.map +1 -1
- package/dist/read/queries.d.ts +152 -7
- package/dist/read/queries.js +277 -36
- package/dist/read/queries.js.map +1 -1
- package/dist/read/sections.d.ts +51 -0
- package/dist/read/sections.js +37 -0
- package/dist/read/sections.js.map +1 -0
- package/dist/read/sidebar-order.js +2 -1
- package/dist/read/sidebar-order.js.map +1 -1
- package/dist/read/snapshot.d.ts +1 -1
- package/dist/read/snapshot.js +9 -2
- package/dist/read/snapshot.js.map +1 -1
- package/dist/read/tags.d.ts +27 -3
- package/dist/read/tags.js +83 -12
- package/dist/read/tags.js.map +1 -1
- package/dist/read/truncation.d.ts +71 -0
- package/dist/read/{pagination.js → truncation.js} +103 -94
- package/dist/read/truncation.js.map +1 -0
- package/dist/read/views.d.ts +147 -22
- package/dist/read/views.js +282 -80
- package/dist/read/views.js.map +1 -1
- package/dist/surface-copy.d.ts +19 -0
- package/dist/surface-copy.js +32 -0
- package/dist/surface-copy.js.map +1 -1
- package/dist/sync-health.d.ts +78 -0
- package/dist/sync-health.js +312 -0
- package/dist/sync-health.js.map +1 -0
- package/dist/write/accessibility-probe.d.ts +12 -0
- package/dist/write/accessibility-probe.js +71 -0
- package/dist/write/accessibility-probe.js.map +1 -0
- package/dist/write/automation-probe.d.ts +8 -1
- package/dist/write/automation-probe.js +16 -1
- package/dist/write/automation-probe.js.map +1 -1
- package/dist/write/batch.js +5 -2
- package/dist/write/batch.js.map +1 -1
- package/dist/write/capabilities.d.ts +8 -0
- package/dist/write/capabilities.js +13 -6
- package/dist/write/capabilities.js.map +1 -1
- package/dist/write/commands.d.ts +3 -1
- package/dist/write/commands.js +602 -49
- package/dist/write/commands.js.map +1 -1
- package/dist/write/edit-checklist.js +3 -2
- package/dist/write/edit-checklist.js.map +1 -1
- package/dist/write/guards.d.ts +2 -7
- package/dist/write/guards.js +87 -6
- package/dist/write/guards.js.map +1 -1
- package/dist/write/heading.js +2 -0
- package/dist/write/heading.js.map +1 -1
- package/dist/write/lock.d.ts +40 -2
- package/dist/write/lock.js +91 -14
- package/dist/write/lock.js.map +1 -1
- package/dist/write/make-repeating-project.d.ts +4 -0
- package/dist/write/make-repeating-project.js +253 -0
- package/dist/write/make-repeating-project.js.map +1 -0
- package/dist/write/operations.d.ts +145 -1
- package/dist/write/operations.js +48 -0
- package/dist/write/operations.js.map +1 -1
- package/dist/write/pipeline.d.ts +73 -2
- package/dist/write/pipeline.js +218 -43
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/planner.js +8 -1
- package/dist/write/planner.js.map +1 -1
- package/dist/write/pre-state.d.ts +105 -3
- package/dist/write/pre-state.js +144 -3
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/recurrence-rule-blob.d.ts +65 -0
- package/dist/write/recurrence-rule-blob.js +150 -0
- package/dist/write/recurrence-rule-blob.js.map +1 -0
- package/dist/write/reopen.js +3 -2
- package/dist/write/reopen.js.map +1 -1
- package/dist/write/reorder.js +27 -17
- package/dist/write/reorder.js.map +1 -1
- package/dist/write/repeat-rule.d.ts +22 -0
- package/dist/write/repeat-rule.js +258 -0
- package/dist/write/repeat-rule.js.map +1 -0
- package/dist/write/reversibility.js +49 -0
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/tag-refs.d.ts +47 -0
- package/dist/write/tag-refs.js +126 -0
- package/dist/write/tag-refs.js.map +1 -0
- package/dist/write/undo.d.ts +74 -5
- package/dist/write/undo.js +493 -80
- package/dist/write/undo.js.map +1 -1
- package/dist/write/vectors/registry.d.ts +15 -1
- package/dist/write/vectors/registry.js +65 -2
- package/dist/write/vectors/registry.js.map +1 -1
- package/dist/write/vectors/simulator.d.ts +44 -0
- package/dist/write/vectors/simulator.js +1136 -0
- package/dist/write/vectors/simulator.js.map +1 -0
- package/dist/write/vectors/types.d.ts +154 -3
- package/dist/write/vectors/ui-certification.d.ts +54 -0
- package/dist/write/vectors/ui-certification.js +43 -0
- package/dist/write/vectors/ui-certification.js.map +1 -0
- package/dist/write/vectors/ui-drag.d.ts +188 -0
- package/dist/write/vectors/ui-drag.js +1095 -0
- package/dist/write/vectors/ui-drag.js.map +1 -0
- package/dist/write/vectors/ui-recipes.d.ts +83 -0
- package/dist/write/vectors/ui-recipes.js +610 -0
- package/dist/write/vectors/ui-recipes.js.map +1 -0
- package/dist/write/vectors/ui.d.ts +152 -0
- package/dist/write/vectors/ui.js +704 -0
- package/dist/write/vectors/ui.js.map +1 -0
- package/dist/write/verify/delta.d.ts +141 -4
- package/dist/write/verify/delta.js +199 -21
- package/dist/write/verify/delta.js.map +1 -1
- package/dist/write/verify/poller.d.ts +7 -1
- package/dist/write/verify/poller.js +21 -1
- package/dist/write/verify/poller.js.map +1 -1
- package/package.json +18 -3
- package/skills/things-cli/SKILL.md +53 -0
- package/skills/things-cli/references/contracts.md +41 -0
- package/skills/things-cli/references/gui.md +11 -0
- package/skills/things-cli/references/model.md +51 -0
- package/dist/cli/exit-codes.d.ts +0 -26
- package/dist/cli/exit-codes.js +0 -26
- package/dist/cli/exit-codes.js.map +0 -1
- package/dist/cli/output.d.ts +0 -42
- package/dist/cli/output.js +0 -16
- package/dist/cli/output.js.map +0 -1
- package/dist/read/pagination.d.ts +0 -104
- package/dist/read/pagination.js.map +0 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* world BEFORE a mutation. One read pass, snapshot semantics per statement.
|
|
4
4
|
*/
|
|
5
5
|
import type { DatabaseSync } from "node:sqlite";
|
|
6
|
-
import type { AnyTask, Project, TaskStatus, Todo } from "../model/entities.ts";
|
|
6
|
+
import type { AnyTask, Project, TaskStatus, TaskType, Todo } from "../model/entities.ts";
|
|
7
7
|
import type { ContainerRef, ReorderParams } from "./operations.ts";
|
|
8
8
|
export interface ResolvedContainer {
|
|
9
9
|
uuid: string;
|
|
@@ -56,8 +56,14 @@ export interface PreState {
|
|
|
56
56
|
destArea: ContainerResolution | null;
|
|
57
57
|
/** Heading resolution inside the destination (or target's) project. */
|
|
58
58
|
destHeading: ContainerResolution | null;
|
|
59
|
-
/** Requested tag
|
|
59
|
+
/** Requested tag refs that resolve to no tag (unknown tags). */
|
|
60
60
|
missingTags: string[];
|
|
61
|
+
/**
|
|
62
|
+
* Resolved leaf titles for the tag SET ops (todo.add/set-tags,
|
|
63
|
+
* project.set-tags, area.add/update) — name/path refs de-duplicated. What
|
|
64
|
+
* actually gets applied (by name, app-resolved) + asserted.
|
|
65
|
+
*/
|
|
66
|
+
resolvedTagTitles: string[];
|
|
61
67
|
/** tag.add parent resolution. */
|
|
62
68
|
parentTag: ContainerResolution | null;
|
|
63
69
|
/** area.delete / tag.delete target resolution (TMArea/TMTag). */
|
|
@@ -76,15 +82,111 @@ export interface PreState {
|
|
|
76
82
|
sameTitleUuids: string[];
|
|
77
83
|
/** Scope membership + wire list for the reorder operation. */
|
|
78
84
|
reorder: ReorderPre | null;
|
|
85
|
+
/**
|
|
86
|
+
* area.reorder: the FULL area uuid list ordered by TMArea."index"
|
|
87
|
+
* (the canonical area order once materialized) — feeds the ordering delta's
|
|
88
|
+
* capture list so undo can restore the exact previous position.
|
|
89
|
+
*/
|
|
90
|
+
areaOrder: string[] | null;
|
|
91
|
+
/** project.make-repeating: the row-selection taxonomy (UIC4-f). */
|
|
92
|
+
projectRepeat: ProjectRepeatTaxonomy | null;
|
|
93
|
+
/**
|
|
94
|
+
* project.make-repeating: the uuids of the source subtree rows (non-trashed
|
|
95
|
+
* to-dos + headings) captured pre-write — the result's `childrenReplaced`
|
|
96
|
+
* counts how many of these are dead post-op. Null for non-project ops.
|
|
97
|
+
*/
|
|
98
|
+
repeatSubtreeUuids: string[] | null;
|
|
99
|
+
/** heading.convert-to-project: the project-reveal + heading-row ordinal (HEADCERT1). */
|
|
100
|
+
headingConvert: HeadingConvertTaxonomy | null;
|
|
79
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Row-selection taxonomy for `project.make-repeating` (UIC4-f). A project is
|
|
104
|
+
* made repeating by selecting it as a content-table ROW (settable
|
|
105
|
+
* AXSelectedRows), reachable in its AREA view or the SOMEDAY view but NOT the
|
|
106
|
+
* Anytime view (an area-less anytime project renders as a header there). The
|
|
107
|
+
* classifier resolves which view reveals a selectable row, or refuses.
|
|
108
|
+
*/
|
|
109
|
+
export type ProjectRepeatRefusal = "not-a-project" | "trashed" | "logged" | "already-repeating" | "ambiguous-row" | "unexpected-start";
|
|
110
|
+
export type ProjectRepeatTaxonomy = {
|
|
111
|
+
/** Selectable row in the project's AREA view — reveal the area, then select the row. */
|
|
112
|
+
kind: "area";
|
|
113
|
+
/** The area uuid revealed via things:///show?id= to render the row. */
|
|
114
|
+
containerReveal: string;
|
|
115
|
+
title: string;
|
|
116
|
+
} | {
|
|
117
|
+
/** Area-less someday project — a selectable row in the SOMEDAY view. */
|
|
118
|
+
kind: "someday";
|
|
119
|
+
/** Literal "someday" (things:///show?id=someday). */
|
|
120
|
+
containerReveal: "someday";
|
|
121
|
+
title: string;
|
|
122
|
+
} | {
|
|
123
|
+
/**
|
|
124
|
+
* Area-less ANYTIME project — no selectable row in the Anytime view
|
|
125
|
+
* (renders as a header, UIC4-d). Reachable only after a cleanup-free
|
|
126
|
+
* coercion to Someday; the orchestrator does that leg, never the drive.
|
|
127
|
+
*/
|
|
128
|
+
kind: "anytime";
|
|
129
|
+
title: string;
|
|
130
|
+
} | {
|
|
131
|
+
kind: "refuse";
|
|
132
|
+
refusal: ProjectRepeatRefusal;
|
|
133
|
+
detail: string;
|
|
134
|
+
};
|
|
80
135
|
export declare function emptyPreState(): PreState;
|
|
136
|
+
/**
|
|
137
|
+
* The uuids of a project's source subtree rows (non-trashed to-dos AND
|
|
138
|
+
* headings, direct or heading-nested). `childrenReplaced` counts how many of
|
|
139
|
+
* these are dead post-op — the whole subtree in the delete-remint fate, just
|
|
140
|
+
* the flattened nested-template row in the nested-repeater preserve fate.
|
|
141
|
+
*/
|
|
142
|
+
export declare function projectSubtreeUuids(db: DatabaseSync, projectUuid: string): string[];
|
|
143
|
+
/**
|
|
144
|
+
* Taxonomy for `heading.convert-to-project`'s pure-AX drive (HEADCERT1). A
|
|
145
|
+
* heading is not selectable via `things:///show` (the reveal URL selects to-dos
|
|
146
|
+
* only — the UIC1 blocker), but revealing the heading's PARENT PROJECT shows its
|
|
147
|
+
* content table, in which the heading renders as a selectable ROW. The row
|
|
148
|
+
* exposes no stable AX title handle (its title lives only in a hover-dependent
|
|
149
|
+
* "More" affordance), so identity is POSITIONAL: `ordinal` is the heading's
|
|
150
|
+
* 0-based position among the project's non-trashed headings in display (`index`)
|
|
151
|
+
* order, and the select-heading-row primitive walks the content table selecting
|
|
152
|
+
* the Nth row that is selectable AND has an empty `selected to dos` readback (a
|
|
153
|
+
* heading, not a to-do). Two same-titled headings are therefore unambiguous.
|
|
154
|
+
*/
|
|
155
|
+
export type HeadingConvertTaxonomy = {
|
|
156
|
+
kind: "ok";
|
|
157
|
+
projectReveal: string;
|
|
158
|
+
ordinal: number;
|
|
159
|
+
} | {
|
|
160
|
+
kind: "refuse";
|
|
161
|
+
refusal: "not-a-heading" | "no-project" | "not-found";
|
|
162
|
+
detail: string;
|
|
163
|
+
};
|
|
164
|
+
export declare function classifyHeadingConvert(db: DatabaseSync, target: AnyTask | null): HeadingConvertTaxonomy;
|
|
165
|
+
/**
|
|
166
|
+
* Classify a project for `project.make-repeating`'s pure-AX row-selection
|
|
167
|
+
* recipe (UIC4-f), or refuse. Reads DB truth (area / start / template / status)
|
|
168
|
+
* — the orchestrator uses it to decide the Someday coercion; the command spec
|
|
169
|
+
* uses it (post-coercion) to build the reveal + row-select recipe.
|
|
170
|
+
*/
|
|
171
|
+
export declare function classifyProjectRepeat(db: DatabaseSync, target: AnyTask | null): ProjectRepeatTaxonomy;
|
|
81
172
|
export declare function resolveArea(db: DatabaseSync, ref: ContainerRef): ContainerResolution;
|
|
82
173
|
export declare function resolveProject(db: DatabaseSync, ref: ContainerRef): ContainerResolution;
|
|
83
174
|
export declare function resolveHeading(db: DatabaseSync, projectUuid: string, headingTitle: string): ContainerResolution;
|
|
84
175
|
export declare function projectStatus(db: DatabaseSync, uuid: string): TaskStatus | null;
|
|
85
|
-
export declare function missingTagTitles(db: DatabaseSync, titles: string[]): string[];
|
|
86
176
|
export declare function resolveTag(db: DatabaseSync, ref: string): ContainerResolution;
|
|
87
177
|
export declare function loadTarget(db: DatabaseSync, uuid: string): AnyTask | null;
|
|
178
|
+
/**
|
|
179
|
+
* Uuids of pre-existing TMTask rows matching a create-probe's (title, type),
|
|
180
|
+
* captured in the pre-read and threaded into the probe as `excludeUuids`.
|
|
181
|
+
* Create-mode verification discovers the row the app just made by (title,
|
|
182
|
+
* type); without this exclusion the probe could bind to a DIFFERENT same-title
|
|
183
|
+
* row that merely appeared in the trailing sinceEpoch window (a concurrent add,
|
|
184
|
+
* a repeat-template spawn, a sync insert), recording the wrong discoveredUuid —
|
|
185
|
+
* and a later undo would then trash the wrong item. Matches `findCreated`'s
|
|
186
|
+
* exact `title = ? AND type = ?` filter (case-sensitive) so the captured set is
|
|
187
|
+
* precisely the pre-existing rows that discovery would otherwise consider.
|
|
188
|
+
*/
|
|
189
|
+
export declare function sameTitleTaskUuids(db: DatabaseSync, title: string, type: TaskType): string[];
|
|
88
190
|
export declare function projectChildren(db: DatabaseSync, projectUuid: string): Todo[];
|
|
89
191
|
/**
|
|
90
192
|
* Titles of every DESCENDANT tag under the given tag (excluding itself).
|
package/dist/write/pre-state.js
CHANGED
|
@@ -10,6 +10,7 @@ export function emptyPreState() {
|
|
|
10
10
|
destArea: null,
|
|
11
11
|
destHeading: null,
|
|
12
12
|
missingTags: [],
|
|
13
|
+
resolvedTagTitles: [],
|
|
13
14
|
parentTag: null,
|
|
14
15
|
entityTarget: null,
|
|
15
16
|
childTags: [],
|
|
@@ -21,6 +22,134 @@ export function emptyPreState() {
|
|
|
21
22
|
existingEntityUuids: [],
|
|
22
23
|
sameTitleUuids: [],
|
|
23
24
|
reorder: null,
|
|
25
|
+
areaOrder: null,
|
|
26
|
+
projectRepeat: null,
|
|
27
|
+
repeatSubtreeUuids: null,
|
|
28
|
+
headingConvert: null,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The uuids of a project's source subtree rows (non-trashed to-dos AND
|
|
33
|
+
* headings, direct or heading-nested). `childrenReplaced` counts how many of
|
|
34
|
+
* these are dead post-op — the whole subtree in the delete-remint fate, just
|
|
35
|
+
* the flattened nested-template row in the nested-repeater preserve fate.
|
|
36
|
+
*/
|
|
37
|
+
export function projectSubtreeUuids(db, projectUuid) {
|
|
38
|
+
return db
|
|
39
|
+
.prepare(`SELECT uuid FROM TMTask
|
|
40
|
+
WHERE trashed = 0 AND (
|
|
41
|
+
(type = 0 AND (project = ? OR heading IN
|
|
42
|
+
(SELECT uuid FROM TMTask WHERE type = 2 AND project = ?)))
|
|
43
|
+
OR (type = 2 AND project = ?))`)
|
|
44
|
+
.all(projectUuid, projectUuid, projectUuid).map((r) => r.uuid);
|
|
45
|
+
}
|
|
46
|
+
export function classifyHeadingConvert(db, target) {
|
|
47
|
+
if (target === null || target.type !== "heading") {
|
|
48
|
+
return { kind: "refuse", refusal: "not-a-heading", detail: "target is not a heading" };
|
|
49
|
+
}
|
|
50
|
+
const project = target.project;
|
|
51
|
+
if (project === null) {
|
|
52
|
+
return {
|
|
53
|
+
kind: "refuse",
|
|
54
|
+
refusal: "no-project",
|
|
55
|
+
detail: "the heading has no owning project — cannot reveal a project view to select its row",
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const rows = db
|
|
59
|
+
.prepare(`SELECT uuid FROM TMTask WHERE type = 2 AND project = ? AND trashed = 0 ORDER BY "index"`)
|
|
60
|
+
.all(project.uuid);
|
|
61
|
+
const ordinal = rows.findIndex((r) => r.uuid === target.uuid);
|
|
62
|
+
if (ordinal < 0) {
|
|
63
|
+
return {
|
|
64
|
+
kind: "refuse",
|
|
65
|
+
refusal: "not-found",
|
|
66
|
+
detail: "the heading was not found among its project's non-trashed headings",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return { kind: "ok", projectReveal: project.uuid, ordinal };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Count non-trashed projects with the given title that share the target's
|
|
73
|
+
* row-selection container, EXCLUDING the target itself. A non-zero count is a
|
|
74
|
+
* row-selection ambiguity: the AREA/SOMEDAY row exposes no title text or uuid
|
|
75
|
+
* to disambiguate (UIC4-b), so two same-titled projects cannot be told apart —
|
|
76
|
+
* the drive refuses fail-closed rather than guess which row to select.
|
|
77
|
+
*/
|
|
78
|
+
function sameTitleRowCount(db, title, excludeUuid, container) {
|
|
79
|
+
const containerWhere = "areaUuid" in container ? "area = ?" : "area IS NULL AND start = 2 AND startDate IS NULL";
|
|
80
|
+
const binds = "areaUuid" in container ? [title, excludeUuid, container.areaUuid] : [title, excludeUuid];
|
|
81
|
+
const row = db
|
|
82
|
+
.prepare(`SELECT COUNT(*) AS n FROM TMTask
|
|
83
|
+
WHERE type = 1 AND trashed = 0 AND title = ? COLLATE NOCASE AND uuid != ? AND ${containerWhere}`)
|
|
84
|
+
.get(...binds);
|
|
85
|
+
return row.n;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Classify a project for `project.make-repeating`'s pure-AX row-selection
|
|
89
|
+
* recipe (UIC4-f), or refuse. Reads DB truth (area / start / template / status)
|
|
90
|
+
* — the orchestrator uses it to decide the Someday coercion; the command spec
|
|
91
|
+
* uses it (post-coercion) to build the reveal + row-select recipe.
|
|
92
|
+
*/
|
|
93
|
+
export function classifyProjectRepeat(db, target) {
|
|
94
|
+
if (target === null || target.type !== "project") {
|
|
95
|
+
return { kind: "refuse", refusal: "not-a-project", detail: "target is not a project" };
|
|
96
|
+
}
|
|
97
|
+
if (target.trashed) {
|
|
98
|
+
return { kind: "refuse", refusal: "trashed", detail: "the project is in the Trash" };
|
|
99
|
+
}
|
|
100
|
+
if (target.status !== "open" || target.logged) {
|
|
101
|
+
return {
|
|
102
|
+
kind: "refuse",
|
|
103
|
+
refusal: "logged",
|
|
104
|
+
detail: `the project is ${target.logged ? "logged" : target.status} — only an open project can be made repeating`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (target.repeating.isTemplate) {
|
|
108
|
+
return {
|
|
109
|
+
kind: "refuse",
|
|
110
|
+
refusal: "already-repeating",
|
|
111
|
+
detail: "the project is already a repeating template",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const title = target.title;
|
|
115
|
+
if (target.area !== null) {
|
|
116
|
+
const areaUuid = target.area.uuid;
|
|
117
|
+
if (sameTitleRowCount(db, title, target.uuid, { areaUuid }) > 0) {
|
|
118
|
+
return {
|
|
119
|
+
kind: "refuse",
|
|
120
|
+
refusal: "ambiguous-row",
|
|
121
|
+
detail: `another project titled "${title}" shares this area — its selectable row cannot be disambiguated`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return { kind: "area", containerReveal: areaUuid, title };
|
|
125
|
+
}
|
|
126
|
+
// Area-less: someday renders a selectable row; anytime needs coercion first.
|
|
127
|
+
if (target.start === "someday") {
|
|
128
|
+
if (sameTitleRowCount(db, title, target.uuid, { somedayAreaLess: true }) > 0) {
|
|
129
|
+
return {
|
|
130
|
+
kind: "refuse",
|
|
131
|
+
refusal: "ambiguous-row",
|
|
132
|
+
detail: `another area-less Someday project titled "${title}" exists — its row cannot be disambiguated`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return { kind: "someday", containerReveal: "someday", title };
|
|
136
|
+
}
|
|
137
|
+
if (target.start === "active") {
|
|
138
|
+
// Post-coercion the project joins the Someday cohort; refuse if that would
|
|
139
|
+
// collide with an existing same-titled area-less Someday project.
|
|
140
|
+
if (sameTitleRowCount(db, title, target.uuid, { somedayAreaLess: true }) > 0) {
|
|
141
|
+
return {
|
|
142
|
+
kind: "refuse",
|
|
143
|
+
refusal: "ambiguous-row",
|
|
144
|
+
detail: `an area-less Someday project titled "${title}" already exists — coercing this one there would make its row ambiguous`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return { kind: "anytime", title };
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
kind: "refuse",
|
|
151
|
+
refusal: "unexpected-start",
|
|
152
|
+
detail: `the project has an unexpected schedule state (${target.start}) with no area — cannot resolve a selectable row`,
|
|
24
153
|
};
|
|
25
154
|
}
|
|
26
155
|
export function resolveArea(db, ref) {
|
|
@@ -45,15 +174,27 @@ export function projectStatus(db, uuid) {
|
|
|
45
174
|
return null;
|
|
46
175
|
return TASK_STATUS_FROM_DB[row.status] ?? null;
|
|
47
176
|
}
|
|
48
|
-
export function missingTagTitles(db, titles) {
|
|
49
|
-
return titles.filter((t) => db.prepare("SELECT 1 FROM TMTag WHERE title = ? COLLATE NOCASE").get(t) === undefined);
|
|
50
|
-
}
|
|
51
177
|
export function resolveTag(db, ref) {
|
|
52
178
|
return resolveNamedRef(db, "TMTag", "1=1", [], ref);
|
|
53
179
|
}
|
|
54
180
|
export function loadTarget(db, uuid) {
|
|
55
181
|
return byUuid(db, uuid);
|
|
56
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Uuids of pre-existing TMTask rows matching a create-probe's (title, type),
|
|
185
|
+
* captured in the pre-read and threaded into the probe as `excludeUuids`.
|
|
186
|
+
* Create-mode verification discovers the row the app just made by (title,
|
|
187
|
+
* type); without this exclusion the probe could bind to a DIFFERENT same-title
|
|
188
|
+
* row that merely appeared in the trailing sinceEpoch window (a concurrent add,
|
|
189
|
+
* a repeat-template spawn, a sync insert), recording the wrong discoveredUuid —
|
|
190
|
+
* and a later undo would then trash the wrong item. Matches `findCreated`'s
|
|
191
|
+
* exact `title = ? AND type = ?` filter (case-sensitive) so the captured set is
|
|
192
|
+
* precisely the pre-existing rows that discovery would otherwise consider.
|
|
193
|
+
*/
|
|
194
|
+
export function sameTitleTaskUuids(db, title, type) {
|
|
195
|
+
const dbType = type === "project" ? 1 : type === "heading" ? 2 : 0;
|
|
196
|
+
return db.prepare("SELECT uuid FROM TMTask WHERE title = ? AND type = ?").all(title, dbType).map((r) => r.uuid);
|
|
197
|
+
}
|
|
57
198
|
export function projectChildren(db, projectUuid) {
|
|
58
199
|
const rows = db
|
|
59
200
|
.prepare("SELECT uuid FROM TMTask WHERE type = 0 AND trashed = 0 AND (project = ? OR heading IN " +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-state.js","sourceRoot":"","sources":["../../src/write/pre-state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pre-state.js","sourceRoot":"","sources":["../../src/write/pre-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The recurrence-rule SERIALIZER — the write-side inverse of the read-only
|
|
3
|
+
* decoder in {@link ../model/recurrence.ts}. It composes the `rt1_recurrenceRule`
|
|
4
|
+
* XML plist the Things app writes for a repeating template, in the exact shape
|
|
5
|
+
* the decoder round-trips (rrv=4, the `of` offset grammar, the year-4001 "forever"
|
|
6
|
+
* `ed` sentinel).
|
|
7
|
+
*
|
|
8
|
+
* Two consumers share it, and NEITHER writes to a real Things database:
|
|
9
|
+
* - the SIMULATOR write vector (src/write/vectors/simulator.ts), which applies
|
|
10
|
+
* the RSIM-characterized recurrence mutations as SQL against a synthetic
|
|
11
|
+
* fixture DB (docs/lab/rsim-results.md); and
|
|
12
|
+
* - the bench WORLD profile (bench/world.ts), which seeds synthetic templates.
|
|
13
|
+
*
|
|
14
|
+
* Repeat rules remain UI-only on any real surface (writes go through the app's
|
|
15
|
+
* Repeat dialog, never SQLite) — this serializer exists solely so bench/simulated
|
|
16
|
+
* writes can reproduce the app's row shape without a Things install. The
|
|
17
|
+
* low-level {@link ruleXml} takes a numeric {@link RuleSpec}; {@link composeRepeatRuleSpec}
|
|
18
|
+
* maps the consumer-facing {@link RepeatRuleParams} vocabulary onto that spec.
|
|
19
|
+
*/
|
|
20
|
+
import { type IsoDate } from "../model/dates.ts";
|
|
21
|
+
import type { RepeatRuleParams } from "./operations.ts";
|
|
22
|
+
/** One entry in a rule's `of` offset array (numeric, decoder-facing encoding). */
|
|
23
|
+
export interface RuleOffsets {
|
|
24
|
+
/** 0-based day of month; -1 = last day. */
|
|
25
|
+
dy?: number;
|
|
26
|
+
/** 0-based month. */
|
|
27
|
+
mo?: number;
|
|
28
|
+
/** Weekday, 0 = Sunday … 6 = Saturday. */
|
|
29
|
+
wd?: number;
|
|
30
|
+
/** Nth weekday within the month (1..5); -1 = last. */
|
|
31
|
+
wdo?: number;
|
|
32
|
+
}
|
|
33
|
+
/** The numeric fields {@link ruleXml} renders into the plist. */
|
|
34
|
+
export interface RuleSpec {
|
|
35
|
+
/** 0 fixed · 1 after-completion. */
|
|
36
|
+
tp: 0 | 1;
|
|
37
|
+
/** 16 daily · 256 weekly · 8 monthly · 4 yearly. */
|
|
38
|
+
fu: 16 | 256 | 8 | 4;
|
|
39
|
+
/** Interval multiplier ("every fa units"). */
|
|
40
|
+
fa: number;
|
|
41
|
+
/** Start offset in days (≤ 0); default 0. */
|
|
42
|
+
ts?: number;
|
|
43
|
+
of?: RuleOffsets[];
|
|
44
|
+
/** Anchor epoch written to both `sr` and `ia` (the decoder ignores these). */
|
|
45
|
+
anchor: number;
|
|
46
|
+
/** End date, unix seconds; default the year-4001 "forever" sentinel. */
|
|
47
|
+
ed?: number;
|
|
48
|
+
/** Remaining repeat count; default 0 (= unlimited). */
|
|
49
|
+
rc?: number;
|
|
50
|
+
}
|
|
51
|
+
/** Distant-future `ed` sentinel (year 4001 — the same class the app writes). */
|
|
52
|
+
export declare const RULE_FOREVER = 64092211200;
|
|
53
|
+
/** Recurrence-unit code for each frequency (mirrors the decoder's UNITS map). */
|
|
54
|
+
export declare const FREQUENCY_TO_FU: Record<RepeatRuleParams["frequency"], 16 | 256 | 8 | 4>;
|
|
55
|
+
/** Compose an `rt1_recurrenceRule` XML plist the read-path decoder accepts. */
|
|
56
|
+
export declare function ruleXml(spec: RuleSpec): string;
|
|
57
|
+
/**
|
|
58
|
+
* Map the extended {@link RepeatRuleParams} vocabulary onto a numeric
|
|
59
|
+
* {@link RuleSpec}. `refIso` is the occurrence date the calendar anchor derives
|
|
60
|
+
* from when no explicit anchor is given; `anchor` seeds the (decoder-ignored)
|
|
61
|
+
* sr/ia epochs. A deadlined rule carries the start-offset in `ts` (ts = −N days
|
|
62
|
+
* earlier); the template's own `deadline` sentinel column — set by the applier,
|
|
63
|
+
* not here — is what actually flags deadline-ness (oddities §8a).
|
|
64
|
+
*/
|
|
65
|
+
export declare function composeRepeatRuleSpec(params: RepeatRuleParams, refIso: IsoDate, anchor: number): RuleSpec;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The recurrence-rule SERIALIZER — the write-side inverse of the read-only
|
|
3
|
+
* decoder in {@link ../model/recurrence.ts}. It composes the `rt1_recurrenceRule`
|
|
4
|
+
* XML plist the Things app writes for a repeating template, in the exact shape
|
|
5
|
+
* the decoder round-trips (rrv=4, the `of` offset grammar, the year-4001 "forever"
|
|
6
|
+
* `ed` sentinel).
|
|
7
|
+
*
|
|
8
|
+
* Two consumers share it, and NEITHER writes to a real Things database:
|
|
9
|
+
* - the SIMULATOR write vector (src/write/vectors/simulator.ts), which applies
|
|
10
|
+
* the RSIM-characterized recurrence mutations as SQL against a synthetic
|
|
11
|
+
* fixture DB (docs/lab/rsim-results.md); and
|
|
12
|
+
* - the bench WORLD profile (bench/world.ts), which seeds synthetic templates.
|
|
13
|
+
*
|
|
14
|
+
* Repeat rules remain UI-only on any real surface (writes go through the app's
|
|
15
|
+
* Repeat dialog, never SQLite) — this serializer exists solely so bench/simulated
|
|
16
|
+
* writes can reproduce the app's row shape without a Things install. The
|
|
17
|
+
* low-level {@link ruleXml} takes a numeric {@link RuleSpec}; {@link composeRepeatRuleSpec}
|
|
18
|
+
* maps the consumer-facing {@link RepeatRuleParams} vocabulary onto that spec.
|
|
19
|
+
*/
|
|
20
|
+
import {} from "../model/dates.js";
|
|
21
|
+
import { WEEKDAY_TO_WD } from "./repeat-rule.js";
|
|
22
|
+
/** Distant-future `ed` sentinel (year 4001 — the same class the app writes). */
|
|
23
|
+
export const RULE_FOREVER = 64_092_211_200;
|
|
24
|
+
/** Recurrence-unit code for each frequency (mirrors the decoder's UNITS map). */
|
|
25
|
+
export const FREQUENCY_TO_FU = {
|
|
26
|
+
daily: 16,
|
|
27
|
+
weekly: 256,
|
|
28
|
+
monthly: 8,
|
|
29
|
+
yearly: 4,
|
|
30
|
+
};
|
|
31
|
+
/** Compose an `rt1_recurrenceRule` XML plist the read-path decoder accepts. */
|
|
32
|
+
export function ruleXml(spec) {
|
|
33
|
+
const offsets = (spec.of ?? [{ dy: 0 }])
|
|
34
|
+
.map((o) => {
|
|
35
|
+
const entries = Object.entries(o)
|
|
36
|
+
.map(([k, v]) => `<key>${k}</key><integer>${v}</integer>`)
|
|
37
|
+
.join("");
|
|
38
|
+
return `<dict>${entries}</dict>`;
|
|
39
|
+
})
|
|
40
|
+
.join("");
|
|
41
|
+
return (`<?xml version="1.0" encoding="UTF-8"?>\n` +
|
|
42
|
+
`<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n` +
|
|
43
|
+
`<plist version="1.0"><dict>` +
|
|
44
|
+
`<key>ed</key><integer>${spec.ed ?? RULE_FOREVER}</integer>` +
|
|
45
|
+
`<key>fa</key><integer>${spec.fa}</integer>` +
|
|
46
|
+
`<key>fu</key><integer>${spec.fu}</integer>` +
|
|
47
|
+
`<key>ia</key><integer>${spec.anchor}</integer>` +
|
|
48
|
+
`<key>of</key><array>${offsets}</array>` +
|
|
49
|
+
`<key>rc</key><integer>${spec.rc ?? 0}</integer>` +
|
|
50
|
+
`<key>rrv</key><integer>4</integer>` +
|
|
51
|
+
`<key>sr</key><integer>${spec.anchor}</integer>` +
|
|
52
|
+
`<key>tp</key><integer>${spec.tp}</integer>` +
|
|
53
|
+
`<key>ts</key><integer>${spec.ts ?? 0}</integer>` +
|
|
54
|
+
`</dict></plist>\n`);
|
|
55
|
+
}
|
|
56
|
+
// -------------------------------------------------- vocabulary → spec
|
|
57
|
+
const ymd = (iso) => iso.split("-").map(Number);
|
|
58
|
+
/** Weekday (0 = Sunday) of an ISO date, evaluated at UTC noon (tz-invariant). */
|
|
59
|
+
function weekdayOf(iso) {
|
|
60
|
+
const [y, m, d] = ymd(iso);
|
|
61
|
+
return new Date(Date.UTC(y, m - 1, d, 12)).getUTCDay();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The `of` offsets for a rule. A FIXED rule anchors on its calendar placement —
|
|
65
|
+
* the explicit weekdays/monthly/yearly anchor when given, else derived from the
|
|
66
|
+
* occurrence date (`refIso`): a weekly rule fires on the occurrence's weekday, a
|
|
67
|
+
* monthly one on its day-of-month, a yearly one on its month + day. An
|
|
68
|
+
* AFTER-COMPLETION rule has NO calendar day, so Things writes only the unit's
|
|
69
|
+
* nominal zero-index offset (UIC6-e: weekly of=[{wd:0}], monthly of=[{dy:0}]);
|
|
70
|
+
* the decoder ignores it. Only the weekly after-completion shape is RSIM-proven
|
|
71
|
+
* (RSIM2); the daily/monthly/yearly nominals follow the UIC6-e convention.
|
|
72
|
+
*/
|
|
73
|
+
function composeOffsets(params, refIso) {
|
|
74
|
+
if (params.afterCompletion === true) {
|
|
75
|
+
switch (params.frequency) {
|
|
76
|
+
case "daily":
|
|
77
|
+
return [{ dy: 0 }];
|
|
78
|
+
case "weekly":
|
|
79
|
+
return [{ wd: 0 }];
|
|
80
|
+
case "monthly":
|
|
81
|
+
return [{ dy: 0 }];
|
|
82
|
+
case "yearly":
|
|
83
|
+
return [{ mo: 0, dy: 0 }];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
switch (params.frequency) {
|
|
87
|
+
case "daily":
|
|
88
|
+
return [{ dy: 0 }];
|
|
89
|
+
case "weekly": {
|
|
90
|
+
if (params.weekdays !== undefined) {
|
|
91
|
+
return params.weekdays.map((w) => ({ wd: WEEKDAY_TO_WD[w] }));
|
|
92
|
+
}
|
|
93
|
+
return [{ wd: weekdayOf(refIso) }];
|
|
94
|
+
}
|
|
95
|
+
case "monthly": {
|
|
96
|
+
const anchor = params.monthly;
|
|
97
|
+
if (anchor === undefined)
|
|
98
|
+
return [{ dy: ymd(refIso)[2] - 1 }];
|
|
99
|
+
return [monthlyOffset(anchor)];
|
|
100
|
+
}
|
|
101
|
+
case "yearly": {
|
|
102
|
+
const anchor = params.yearly;
|
|
103
|
+
if (anchor === undefined) {
|
|
104
|
+
const [, m, d] = ymd(refIso);
|
|
105
|
+
return [{ mo: m - 1, dy: d - 1 }];
|
|
106
|
+
}
|
|
107
|
+
return [{ mo: anchor.month - 1, ...monthlyOffset(anchor) }];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** One month/year day anchor → its offset entry (day-of-month OR nth-weekday). */
|
|
112
|
+
function monthlyOffset(anchor) {
|
|
113
|
+
if ("day" in anchor) {
|
|
114
|
+
return { dy: anchor.day === "last" ? -1 : anchor.day - 1 };
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
wd: WEEKDAY_TO_WD[anchor.weekday],
|
|
118
|
+
wdo: anchor.ordinal === "last" ? -1 : anchor.ordinal,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Map the extended {@link RepeatRuleParams} vocabulary onto a numeric
|
|
123
|
+
* {@link RuleSpec}. `refIso` is the occurrence date the calendar anchor derives
|
|
124
|
+
* from when no explicit anchor is given; `anchor` seeds the (decoder-ignored)
|
|
125
|
+
* sr/ia epochs. A deadlined rule carries the start-offset in `ts` (ts = −N days
|
|
126
|
+
* earlier); the template's own `deadline` sentinel column — set by the applier,
|
|
127
|
+
* not here — is what actually flags deadline-ness (oddities §8a).
|
|
128
|
+
*/
|
|
129
|
+
export function composeRepeatRuleSpec(params, refIso, anchor) {
|
|
130
|
+
const deadlined = params.deadline === true || (params.startDaysEarlier ?? 0) > 0;
|
|
131
|
+
const spec = {
|
|
132
|
+
tp: params.afterCompletion === true ? 1 : 0,
|
|
133
|
+
fu: FREQUENCY_TO_FU[params.frequency],
|
|
134
|
+
fa: params.interval,
|
|
135
|
+
ts: deadlined ? -(params.startDaysEarlier ?? 0) : 0,
|
|
136
|
+
of: composeOffsets(params, refIso),
|
|
137
|
+
anchor,
|
|
138
|
+
};
|
|
139
|
+
const ends = params.ends;
|
|
140
|
+
if (ends !== undefined && ends.kind !== "never") {
|
|
141
|
+
if (ends.kind === "on-date") {
|
|
142
|
+
spec.ed = Math.floor(Date.parse(`${ends.date}T00:00:00Z`) / 1000);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
spec.rc = ends.count;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return spec;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=recurrence-rule-blob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recurrence-rule-blob.js","sourceRoot":"","sources":["../../src/write/recurrence-rule-blob.ts"],"names":[],"mappings":"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"}
|
package/dist/write/reopen.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* as the project and a stopDate within CASCADE_WINDOW_SECONDS of the
|
|
7
7
|
* project's. Each child reopen is a full verified mutation.
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { resolveProjectWriteTarget } from "../read/queries.js";
|
|
10
10
|
import { runMutation } from "./pipeline.js";
|
|
11
11
|
/** P03: cascade writes stamp children within <2s of the project row. */
|
|
12
12
|
export const CASCADE_WINDOW_SECONDS = 2;
|
|
@@ -22,7 +22,7 @@ function cascadeCandidates(deps, projectUuid) {
|
|
|
22
22
|
.all(projectUuid, CASCADE_WINDOW_SECONDS);
|
|
23
23
|
}
|
|
24
24
|
export async function runProjectReopen(deps, uuid, options = {}) {
|
|
25
|
-
uuid =
|
|
25
|
+
uuid = resolveProjectWriteTarget(deps.db, uuid);
|
|
26
26
|
const { restoreChildren, ...writeOptions } = options;
|
|
27
27
|
// Candidates must be computed BEFORE the reopen clears the project's
|
|
28
28
|
// stopDate (the window is relative to it).
|
|
@@ -54,6 +54,7 @@ export async function runProjectReopen(deps, uuid, options = {}) {
|
|
|
54
54
|
});
|
|
55
55
|
continue;
|
|
56
56
|
}
|
|
57
|
+
// child reopens must land one at a time (mutation lock + create-probe verification must never race); an early failure also needs to stop the remaining legs
|
|
57
58
|
const result = await runMutation(deps, "todo.reopen", { uuid: child.uuid }, writeOptions);
|
|
58
59
|
children.push({ uuid: child.uuid, title: child.title, result });
|
|
59
60
|
if (result.kind !== "ok")
|
package/dist/write/reopen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reopen.js","sourceRoot":"","sources":["../../src/write/reopen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"reopen.js","sourceRoot":"","sources":["../../src/write/reopen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAA0D,MAAM,eAAe,CAAC;AAEpG,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAsBxC,SAAS,iBAAiB,CAAC,IAAe,EAAE,WAAmB;IAC7D,OAAO,IAAI,CAAC,EAAE;SACX,OAAO,CACN;;;;;;6EAMuE,CACxE;SACA,GAAG,CAAC,WAAW,EAAE,sBAAsB,CAAkC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAe,EACf,IAAY,EACZ,UAAgC,EAAE;IAElC,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;IACrD,qEAAqE;IACrE,2CAA2C;IAC3C,MAAM,UAAU,GAAG,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAoC,EAAE,CAAC;IACrD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE;wBACN,IAAI,EAAE,SAAS;wBACf,EAAE,EAAE,aAAa;wBACjB,IAAI,EAAE;4BACJ,EAAE,EAAE,aAAa;4BACjB,MAAM,EAAE,aAAa;4BACrB,IAAI,EAAE,CAAC;4BACP,UAAU,EAAE,4BAA4B,KAAK,CAAC,KAAK,EAAE;4BACrD,aAAa,EAAE;gCACb,IAAI,EAAE,OAAO;gCACb,IAAI,EAAE,KAAK,CAAC,IAAI;gCAChB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;6BAC9C;4BACD,cAAc,EAAE,EAAE;yBACnB;qBACF;iBACF,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,4JAA4J;YAC5J,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;YAC1F,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;gBAAE,MAAM,CAAC,mCAAmC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
|