@todu/engine 0.1.1 → 0.2.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/dist/habits.d.ts +1 -1
- package/dist/habits.d.ts.map +1 -1
- package/dist/habits.js +1 -1
- package/dist/habits.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +155 -20
- package/dist/index.js.map +1 -1
- package/dist/notes.d.ts.map +1 -1
- package/dist/notes.js +248 -49
- package/dist/notes.js.map +1 -1
- package/dist/scheduling.d.ts +6 -10
- package/dist/scheduling.d.ts.map +1 -1
- package/dist/scheduling.js +8 -10
- package/dist/scheduling.js.map +1 -1
- package/dist/storage.d.ts +42 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +169 -26
- package/dist/storage.js.map +1 -1
- package/dist/sync-client.d.ts +14 -0
- package/dist/sync-client.d.ts.map +1 -1
- package/dist/sync-client.js +74 -0
- package/dist/sync-client.js.map +1 -1
- package/dist/todu.d.ts +33 -1
- package/dist/todu.d.ts.map +1 -1
- package/dist/todu.js +2 -0
- package/dist/todu.js.map +1 -1
- package/package.json +1 -1
package/dist/storage.js
CHANGED
|
@@ -10,6 +10,8 @@ import { CATALOG_DOC_KEY, createEmptyCatalog, SCHEMA_VERSION, } from "@todu/core
|
|
|
10
10
|
const SYNC_THROTTLE_MS = 100;
|
|
11
11
|
/** Extra time after sync message generation for WebSocket delivery */
|
|
12
12
|
const SYNC_DELIVERY_MS = 20;
|
|
13
|
+
/** Catalog load timeout for startup and join checks */
|
|
14
|
+
const CATALOG_LOAD_TIMEOUT_MS = 10_000;
|
|
13
15
|
/**
|
|
14
16
|
* Wait for pending sync messages to be generated and delivered.
|
|
15
17
|
*
|
|
@@ -36,29 +38,99 @@ async function waitForSyncFlush(repo, documentId) {
|
|
|
36
38
|
repo.on("doc-metrics", onMetrics);
|
|
37
39
|
});
|
|
38
40
|
}
|
|
41
|
+
function getCatalogMarkerPath(storagePath) {
|
|
42
|
+
return path.join(storagePath, `${CATALOG_DOC_KEY}.id`);
|
|
43
|
+
}
|
|
39
44
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
45
|
+
* Begin a catalog marker switch for join flows.
|
|
46
|
+
*
|
|
47
|
+
* This is the storage-layer entrypoint that explicit join workflows use.
|
|
48
|
+
* The caller should:
|
|
49
|
+
* 1) validate target catalog reachability,
|
|
50
|
+
* 2) perform switch-dependent work,
|
|
51
|
+
* 3) call commit() on success or rollback() on failure.
|
|
42
52
|
*/
|
|
43
|
-
export
|
|
44
|
-
|
|
45
|
-
fs.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
});
|
|
50
|
-
// Load or create catalog document
|
|
51
|
-
const catalog = await loadOrCreateCatalog(repo, storagePath);
|
|
53
|
+
export function beginCatalogJoinSwitch(storagePath, targetCatalogId) {
|
|
54
|
+
const markerPath = getCatalogMarkerPath(storagePath);
|
|
55
|
+
const previousCatalogId = fs.existsSync(markerPath)
|
|
56
|
+
? fs.readFileSync(markerPath, "utf-8").trim()
|
|
57
|
+
: null;
|
|
58
|
+
fs.writeFileSync(markerPath, targetCatalogId, "utf-8");
|
|
52
59
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
previousCatalogId,
|
|
61
|
+
targetCatalogId,
|
|
62
|
+
commit() {
|
|
63
|
+
// Marker already points at target; nothing else needed yet.
|
|
64
|
+
},
|
|
65
|
+
rollback() {
|
|
66
|
+
if (previousCatalogId) {
|
|
67
|
+
fs.writeFileSync(markerPath, previousCatalogId, "utf-8");
|
|
68
|
+
}
|
|
69
|
+
else if (fs.existsSync(markerPath)) {
|
|
70
|
+
fs.unlinkSync(markerPath);
|
|
71
|
+
}
|
|
59
72
|
},
|
|
60
73
|
};
|
|
61
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Initialize persistent storage for bootstrap flows.
|
|
77
|
+
*
|
|
78
|
+
* Bootstrap behavior:
|
|
79
|
+
* - No marker: create initial catalog
|
|
80
|
+
* - Existing marker: load that catalog
|
|
81
|
+
* - Existing but unreachable marker: fail (do not implicitly create a new catalog)
|
|
82
|
+
*/
|
|
83
|
+
export async function initBootstrapStorage(storagePath, repo) {
|
|
84
|
+
fs.mkdirSync(storagePath, { recursive: true });
|
|
85
|
+
const ownsRepo = repo === undefined;
|
|
86
|
+
const actualRepo = repo ??
|
|
87
|
+
new Repo({
|
|
88
|
+
storage: new NodeFSStorageAdapter(storagePath),
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
const catalog = await loadOrBootstrapCatalog(actualRepo, storagePath);
|
|
92
|
+
return createPersistentStorage(actualRepo, catalog);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (ownsRepo) {
|
|
96
|
+
await shutdownRepoQuietly(actualRepo);
|
|
97
|
+
}
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Initialize persistent storage for explicit join flows.
|
|
103
|
+
*
|
|
104
|
+
* Join behavior:
|
|
105
|
+
* - Requires the target catalog to be reachable
|
|
106
|
+
* - Never creates a fresh catalog implicitly
|
|
107
|
+
*/
|
|
108
|
+
export async function initJoinStorage(storagePath, targetCatalogId, repo) {
|
|
109
|
+
fs.mkdirSync(storagePath, { recursive: true });
|
|
110
|
+
const ownsRepo = repo === undefined;
|
|
111
|
+
const actualRepo = repo ??
|
|
112
|
+
new Repo({
|
|
113
|
+
storage: new NodeFSStorageAdapter(storagePath),
|
|
114
|
+
});
|
|
115
|
+
try {
|
|
116
|
+
const catalog = await loadCatalogById(actualRepo, targetCatalogId, "join");
|
|
117
|
+
return createPersistentStorage(actualRepo, catalog);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (ownsRepo) {
|
|
121
|
+
await shutdownRepoQuietly(actualRepo);
|
|
122
|
+
}
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Backward-compatible storage initialization entrypoint.
|
|
128
|
+
*
|
|
129
|
+
* Defaults to bootstrap semantics.
|
|
130
|
+
*/
|
|
131
|
+
export async function initStorage(storagePath, repo) {
|
|
132
|
+
return initBootstrapStorage(storagePath, repo);
|
|
133
|
+
}
|
|
62
134
|
/**
|
|
63
135
|
* Initialize ephemeral storage with no filesystem persistence.
|
|
64
136
|
* Used by CLI when syncing with a running Electron instance.
|
|
@@ -72,7 +144,7 @@ export async function initStorage(storagePath) {
|
|
|
72
144
|
*/
|
|
73
145
|
export async function initEphemeralStorage(storagePath) {
|
|
74
146
|
// Read the catalog document ID from the marker file
|
|
75
|
-
const markerPath =
|
|
147
|
+
const markerPath = getCatalogMarkerPath(storagePath);
|
|
76
148
|
if (!fs.existsSync(markerPath)) {
|
|
77
149
|
throw new Error("No catalog marker found. Run the Electron app or CLI standalone first to create data.");
|
|
78
150
|
}
|
|
@@ -122,20 +194,82 @@ export async function initEphemeralStorage(storagePath) {
|
|
|
122
194
|
},
|
|
123
195
|
};
|
|
124
196
|
}
|
|
197
|
+
async function shutdownRepoQuietly(repo) {
|
|
198
|
+
try {
|
|
199
|
+
await repo.flush();
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// Safe to ignore — requesting docs have no content to save
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
await repo.shutdown();
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Safe to ignore — shutdown may race with pending requesting docs
|
|
209
|
+
}
|
|
210
|
+
// Allow queued storage adapter writes to settle before callers clean up
|
|
211
|
+
// temporary directories. A full sync-throttle window avoids ENOENT races
|
|
212
|
+
// observed in repeated failure-path teardown tests.
|
|
213
|
+
await new Promise((resolve) => setTimeout(resolve, SYNC_THROTTLE_MS + SYNC_DELIVERY_MS));
|
|
214
|
+
}
|
|
215
|
+
function createPersistentStorage(repo, catalog) {
|
|
216
|
+
return {
|
|
217
|
+
repo,
|
|
218
|
+
catalog,
|
|
219
|
+
ephemeral: false,
|
|
220
|
+
async close() {
|
|
221
|
+
// Both flush() and shutdown() (which calls flush internally) can throw
|
|
222
|
+
// "DocHandle is not ready" when a document is in "requesting" state —
|
|
223
|
+
// this happens when a connected remote peer is mid-sync during close.
|
|
224
|
+
// Requesting documents have no local content to persist, so ignoring
|
|
225
|
+
// the error is safe and correct.
|
|
226
|
+
try {
|
|
227
|
+
await repo.flush();
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Safe to ignore — requesting docs have no content to save
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
await repo.shutdown();
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
// shutdown() calls flush() internally — same safe-to-ignore error
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
125
241
|
/**
|
|
126
|
-
* Load existing catalog document
|
|
127
|
-
*
|
|
242
|
+
* Load existing catalog document from marker if present.
|
|
243
|
+
* If no marker exists, bootstrap a new catalog.
|
|
128
244
|
*/
|
|
129
|
-
async function
|
|
130
|
-
const markerPath =
|
|
131
|
-
// Try to load existing catalog
|
|
245
|
+
async function loadOrBootstrapCatalog(repo, storagePath) {
|
|
246
|
+
const markerPath = getCatalogMarkerPath(storagePath);
|
|
132
247
|
if (fs.existsSync(markerPath)) {
|
|
133
248
|
const docId = fs.readFileSync(markerPath, "utf-8").trim();
|
|
134
|
-
|
|
249
|
+
return loadCatalogById(repo, docId, "bootstrap");
|
|
250
|
+
}
|
|
251
|
+
return createBootstrapCatalog(repo, markerPath);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Load an existing catalog by ID and run schema migration if needed.
|
|
255
|
+
* Does not create a replacement catalog on failure.
|
|
256
|
+
*/
|
|
257
|
+
async function loadCatalogById(repo, docId, mode) {
|
|
258
|
+
try {
|
|
259
|
+
const handle = await repo.find(docId, {
|
|
260
|
+
signal: AbortSignal.timeout(CATALOG_LOAD_TIMEOUT_MS),
|
|
261
|
+
});
|
|
135
262
|
migrateCatalog(handle);
|
|
136
263
|
return handle;
|
|
137
264
|
}
|
|
138
|
-
|
|
265
|
+
catch {
|
|
266
|
+
throw new Error(`[storage] ${mode} catalog ${docId} not reachable within ${CATALOG_LOAD_TIMEOUT_MS}ms`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Create a new catalog and persist its marker.
|
|
271
|
+
*/
|
|
272
|
+
function createBootstrapCatalog(repo, markerPath) {
|
|
139
273
|
const handle = repo.create();
|
|
140
274
|
handle.change((doc) => {
|
|
141
275
|
const empty = createEmptyCatalog();
|
|
@@ -146,9 +280,10 @@ async function loadOrCreateCatalog(repo, storagePath) {
|
|
|
146
280
|
doc.habits = empty.habits;
|
|
147
281
|
doc.habitLogDocIds = empty.habitLogDocIds;
|
|
148
282
|
doc.taskListDocIds = empty.taskListDocIds;
|
|
283
|
+
doc.notesBucketDocIds = empty.notesBucketDocIds;
|
|
284
|
+
doc.noteBucketByNoteId = empty.noteBucketByNoteId;
|
|
149
285
|
doc.settings = empty.settings;
|
|
150
286
|
});
|
|
151
|
-
// Save document ID for next session
|
|
152
287
|
fs.writeFileSync(markerPath, handle.documentId, "utf-8");
|
|
153
288
|
return handle;
|
|
154
289
|
}
|
|
@@ -176,6 +311,10 @@ function migrateCatalog(handle) {
|
|
|
176
311
|
needsMigration = true;
|
|
177
312
|
if (doc.habitLogDocIds === undefined || doc.habitLogDocIds === null)
|
|
178
313
|
needsMigration = true;
|
|
314
|
+
if (doc.notesBucketDocIds === undefined || doc.notesBucketDocIds === null)
|
|
315
|
+
needsMigration = true;
|
|
316
|
+
if (doc.noteBucketByNoteId === undefined || doc.noteBucketByNoteId === null)
|
|
317
|
+
needsMigration = true;
|
|
179
318
|
if (doc.settings === undefined || doc.settings === null)
|
|
180
319
|
needsMigration = true;
|
|
181
320
|
if (doc.version === undefined || doc.version === null)
|
|
@@ -195,6 +334,10 @@ function migrateCatalog(handle) {
|
|
|
195
334
|
d.taskListDocIds = defaults.taskListDocIds;
|
|
196
335
|
if (d.habitLogDocIds === undefined || d.habitLogDocIds === null)
|
|
197
336
|
d.habitLogDocIds = defaults.habitLogDocIds;
|
|
337
|
+
if (d.notesBucketDocIds === undefined || d.notesBucketDocIds === null)
|
|
338
|
+
d.notesBucketDocIds = defaults.notesBucketDocIds;
|
|
339
|
+
if (d.noteBucketByNoteId === undefined || d.noteBucketByNoteId === null)
|
|
340
|
+
d.noteBucketByNoteId = defaults.noteBucketByNoteId;
|
|
198
341
|
if (d.settings === undefined || d.settings === null)
|
|
199
342
|
d.settings = defaults.settings;
|
|
200
343
|
if (d.version === undefined || d.version === null)
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EACL,eAAe,EAEf,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,yDAAuD;AACvD,+EAA+E;AAE/E,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,sEAAsE;AACtE,MAAM,gBAAgB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/sync-client.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Repo } from "@automerge/automerge-repo";
|
|
2
|
+
import { WebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket";
|
|
2
3
|
export declare const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
3
4
|
/**
|
|
4
5
|
* Add a sync client adapter to a Repo, connecting to a remote sync server.
|
|
@@ -8,6 +9,19 @@ export declare const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
|
8
9
|
* @param retryInterval - Retry interval in ms if connection fails (default: 500ms for local)
|
|
9
10
|
*/
|
|
10
11
|
export declare function connectSyncClient(repo: Repo, url?: string, retryInterval?: number): Promise<() => void>;
|
|
12
|
+
/**
|
|
13
|
+
* Add a remote sync adapter to a Repo without blocking.
|
|
14
|
+
*
|
|
15
|
+
* Unlike connectSyncClient(), this does NOT await the connection — the remote
|
|
16
|
+
* server may be temporarily unreachable. The adapter reconnects automatically
|
|
17
|
+
* at the given retryInterval.
|
|
18
|
+
*
|
|
19
|
+
* Returns the adapter so callers can listen for connection events and remove it.
|
|
20
|
+
*
|
|
21
|
+
* @param retryInterval - Retry interval in ms on disconnect (default: 30s for remote)
|
|
22
|
+
*/
|
|
23
|
+
export declare function addRemoteSyncAdapter(repo: Repo, url: string, retryInterval?: number): WebSocketClientAdapter;
|
|
24
|
+
export declare function hardenWebSocketClientAdapterErrors(adapter: WebSocketClientAdapter): void;
|
|
11
25
|
/**
|
|
12
26
|
* Check if a sync server is reachable at the given URL.
|
|
13
27
|
* Returns true if the connection succeeds within the timeout.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AAqBvD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,GAAG,GAAE,MAAyB,EAC9B,aAAa,SAAM,GAClB,OAAO,CAAC,MAAM,IAAI,CAAC,CAerB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EACX,aAAa,SAAQ,GACpB,sBAAsB,CAKxB;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAexF;AAmCD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,GAAE,MAAyB,EAC9B,SAAS,SAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA2BlB"}
|
package/dist/sync-client.js
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { WebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket";
|
|
2
2
|
export const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
3
|
+
const TRANSIENT_SOCKET_ERROR_CODES = new Set([
|
|
4
|
+
"ECONNREFUSED",
|
|
5
|
+
"ECONNRESET",
|
|
6
|
+
"EPIPE",
|
|
7
|
+
"ETIMEDOUT",
|
|
8
|
+
"EHOSTUNREACH",
|
|
9
|
+
"ENETUNREACH",
|
|
10
|
+
"ENOTFOUND",
|
|
11
|
+
"EAI_AGAIN",
|
|
12
|
+
]);
|
|
13
|
+
const TRANSIENT_SOCKET_ERROR_MESSAGE_PATTERNS = [
|
|
14
|
+
/failed to connect/i,
|
|
15
|
+
/connection failed/i,
|
|
16
|
+
/connect ECONNREFUSED/i,
|
|
17
|
+
/read ECONNRESET/i,
|
|
18
|
+
/socket hang up/i,
|
|
19
|
+
];
|
|
3
20
|
/**
|
|
4
21
|
* Add a sync client adapter to a Repo, connecting to a remote sync server.
|
|
5
22
|
* Waits for the adapter to be ready before returning.
|
|
@@ -9,6 +26,7 @@ export const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
|
9
26
|
*/
|
|
10
27
|
export async function connectSyncClient(repo, url = DEFAULT_SYNC_URL, retryInterval = 500) {
|
|
11
28
|
const adapter = new WebSocketClientAdapter(url, retryInterval);
|
|
29
|
+
hardenWebSocketClientAdapterErrors(adapter);
|
|
12
30
|
repo.networkSubsystem.addNetworkAdapter(adapter);
|
|
13
31
|
// Wait for the WebSocket connection to establish
|
|
14
32
|
await adapter.whenReady();
|
|
@@ -21,6 +39,62 @@ export async function connectSyncClient(repo, url = DEFAULT_SYNC_URL, retryInter
|
|
|
21
39
|
}
|
|
22
40
|
};
|
|
23
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Add a remote sync adapter to a Repo without blocking.
|
|
44
|
+
*
|
|
45
|
+
* Unlike connectSyncClient(), this does NOT await the connection — the remote
|
|
46
|
+
* server may be temporarily unreachable. The adapter reconnects automatically
|
|
47
|
+
* at the given retryInterval.
|
|
48
|
+
*
|
|
49
|
+
* Returns the adapter so callers can listen for connection events and remove it.
|
|
50
|
+
*
|
|
51
|
+
* @param retryInterval - Retry interval in ms on disconnect (default: 30s for remote)
|
|
52
|
+
*/
|
|
53
|
+
export function addRemoteSyncAdapter(repo, url, retryInterval = 30000) {
|
|
54
|
+
const adapter = new WebSocketClientAdapter(url, retryInterval);
|
|
55
|
+
hardenWebSocketClientAdapterErrors(adapter);
|
|
56
|
+
repo.networkSubsystem.addNetworkAdapter(adapter);
|
|
57
|
+
return adapter;
|
|
58
|
+
}
|
|
59
|
+
export function hardenWebSocketClientAdapterErrors(adapter) {
|
|
60
|
+
const originalOnError = adapter.onError;
|
|
61
|
+
adapter.onError = (event) => {
|
|
62
|
+
try {
|
|
63
|
+
originalOnError(event);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const eventError = getEventError(event);
|
|
67
|
+
if (isTransientSocketError(error) || isTransientSocketError(eventError)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function getEventError(event) {
|
|
75
|
+
if (typeof event !== "object" || event === null) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
if (!("error" in event)) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
return event.error;
|
|
82
|
+
}
|
|
83
|
+
function isTransientSocketError(error) {
|
|
84
|
+
if (typeof error !== "object" || error === null) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const code = error.code;
|
|
88
|
+
if (typeof code === "string" && TRANSIENT_SOCKET_ERROR_CODES.has(code)) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
const message = error.message;
|
|
92
|
+
if (typeof message === "string" &&
|
|
93
|
+
TRANSIENT_SOCKET_ERROR_MESSAGE_PATTERNS.some((pattern) => pattern.test(message))) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
24
98
|
/**
|
|
25
99
|
* Check if a sync server is reachable at the given URL.
|
|
26
100
|
* Returns true if the connection succeeds within the timeout.
|
package/dist/sync-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.js","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,GAAG,GAAW,gBAAgB,EAC9B,aAAa,GAAG,GAAG,EACE;IACrB,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC/D,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEjD,iDAAiD;IACjD,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAE1B,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,qDAAmD;QACrD,CAAC;IAAA,CACF,CAAC;AAAA,CACH;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAG,GAAW,gBAAgB,EAC9B,SAAS,GAAG,GAAG,EACG;IAClB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,CAAC;QAAA,CAChB,EAAE,SAAS,CAAC,CAAC;QAEd,IAAI,CAAC;YACH,2CAA2C;YAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;gBAC5C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;gBAE9B,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,CAAC;gBAAA,CACf,CAAC;gBAEF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;oBACjB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAA,CAChB,CAAC;YAAA,CACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACJ"}
|
|
1
|
+
{"version":3,"file":"sync-client.js","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"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"}
|
package/dist/todu.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateHabitInput, CreateLabelInput, CreateNoteInput, CreateProjectInput, CreateRecurringInput, CreateTaskInput, Habit, HabitEntry, HabitFilter, HabitHistoryEntry, HabitId, HabitStreak, Label, LabelId, Note, NoteFilter, NoteId, Project, ProjectFilter, ProjectId, RecurringFilter, RecurringId, RecurringTemplate, Result, Task, TaskFilter, TaskId, TaskSortOptions, TaskWithDetail, UpdateHabitInput, UpdateLabelInput, UpdateNoteInput, UpdateProjectInput, UpdateRecurringInput, UpdateTaskInput } from "@todu/core";
|
|
1
|
+
import type { CreateHabitInput, CreateLabelInput, CreateNoteInput, CreateProjectInput, CreateRecurringInput, CreateTaskInput, Habit, HabitEntry, HabitFilter, HabitHistoryEntry, HabitId, HabitStreak, Label, LabelId, Note, NoteFilter, NoteId, Project, ProjectFilter, ProjectId, RecurringFilter, RecurringId, RecurringTemplate, RemoteSyncConfig, Result, Task, TaskFilter, TaskId, TaskSortOptions, TaskWithDetail, UpdateHabitInput, UpdateLabelInput, UpdateNoteInput, UpdateProjectInput, UpdateRecurringInput, UpdateTaskInput } from "@todu/core";
|
|
2
2
|
import type { UpcomingOccurrence } from "./recurring.js";
|
|
3
3
|
export interface ToduConfig {
|
|
4
4
|
/** Path to data storage directory */
|
|
@@ -9,6 +9,27 @@ export interface ToduConfig {
|
|
|
9
9
|
syncPort?: number;
|
|
10
10
|
/** Try to connect to a running sync server (used by CLI) */
|
|
11
11
|
syncClient?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Startup template processing policy.
|
|
14
|
+
*
|
|
15
|
+
* Processing is disabled by default. Hosts that own automation policy
|
|
16
|
+
* (for example daemon runtime) opt in explicitly.
|
|
17
|
+
*/
|
|
18
|
+
startupTemplateProcessing?: {
|
|
19
|
+
/** Run registered processors during startup when true. */
|
|
20
|
+
enabled?: boolean;
|
|
21
|
+
/** Optional generic exclusions controlled by the host. */
|
|
22
|
+
excludeTypes?: string[];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Remote multi-device sync configuration.
|
|
26
|
+
* When provided, connects a second WebSocketClientAdapter to the remote server.
|
|
27
|
+
* Used by Electron and toduai serve.
|
|
28
|
+
*
|
|
29
|
+
* IMPORTANT: Never use wss://sync.todu.sh in development or tests.
|
|
30
|
+
* Use ws://localhost:3030 via `make dev`.
|
|
31
|
+
*/
|
|
32
|
+
remoteSync?: RemoteSyncConfig;
|
|
12
33
|
}
|
|
13
34
|
export interface ProjectNamespace {
|
|
14
35
|
create(input: CreateProjectInput): Promise<Result<Project>>;
|
|
@@ -91,6 +112,17 @@ export interface SyncNamespace {
|
|
|
91
112
|
stop(): Promise<void>;
|
|
92
113
|
/** Get current sync status (local mode + remote state). */
|
|
93
114
|
status(): SyncStatus;
|
|
115
|
+
/**
|
|
116
|
+
* Register a callback for remote sync state changes.
|
|
117
|
+
* Fires when the remote connection transitions between
|
|
118
|
+
* connected/disconnected. Returns a cleanup function.
|
|
119
|
+
*/
|
|
120
|
+
onStatusChange(callback: (status: SyncStatus) => void): () => void;
|
|
121
|
+
/**
|
|
122
|
+
* Get the catalog document ID for this instance.
|
|
123
|
+
* Used as a join code so other devices can sync with this one.
|
|
124
|
+
*/
|
|
125
|
+
getCatalogId(): string;
|
|
94
126
|
}
|
|
95
127
|
export interface ConfigNamespace {
|
|
96
128
|
get(): ToduConfig;
|
package/dist/todu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todu.d.ts","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,KAAK,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,KAAK,EACL,OAAO,EACP,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,IAAI,EACJ,UAAU,EACV,MAAM,EACN,eAAe,EACf,cAAc,EAEd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMzD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"todu.d.ts","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,KAAK,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,KAAK,EACL,OAAO,EACP,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,EACN,IAAI,EACJ,UAAU,EACV,MAAM,EACN,eAAe,EACf,cAAc,EAEd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMzD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE;QAC1B,0DAA0D;QAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,0DAA0D;QAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IAEF;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAOD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzF,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;CAC3E;AAMD,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAE9E,iDAAiD;AACjD,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,KAAK,EAAE;QACL,IAAI,EAAE,aAAa,CAAC;KACrB,CAAC;IACF,kFAAgF;IAChF,MAAM,EAAE;QACN,KAAK,EAAE,eAAe,CAAC;QACvB,qCAAqC;QACrC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,6CAA6C;QAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,gDAAgD;IAChD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,2DAA2D;IAC3D,MAAM,IAAI,UAAU,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACnE;;;OAGG;IACH,YAAY,IAAI,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,IAAI,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAE3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAUD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC,CAuEzF"}
|
package/dist/todu.js
CHANGED
package/dist/todu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todu.js","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"todu.js","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"AAyNA,+EAA+E;AAC/E,gEAA8D;AAC9D,+EAA+E;AAE/E,SAAS,cAAc,GAAsC;IAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAAA,CACrD;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAkB,EAAoC;IACzF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;IAEpC,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;SACb;QACD,KAAK,EAAE;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd;QACD,KAAK,EAAE;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;SACd;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;YAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,YAA6B,EAAE;gBAC9C,MAAM,EAAE,EAAE,KAAK,EAAE,cAAiC,EAAE;aACrD,CAAC;YACF,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC;YAC9B,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;SACvB;QACD,MAAM,EAAE;YACN,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM;SAClB;KACF,CAAC;AAAA,CACH"}
|