@hasna/todos 0.15.34 → 0.15.35
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/cli/cloud-router.d.ts +1 -1
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/project-commands.d.ts.map +1 -1
- package/dist/cli/commands/task-commands.d.ts.map +1 -1
- package/dist/cli/index.js +255 -43
- package/dist/contracts.js +86 -4
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/projects.d.ts +23 -0
- package/dist/db/projects.d.ts.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/index.js +209 -39
- package/dist/json-contracts.d.ts.map +1 -1
- package/dist/lib/import-export-bridge.d.ts.map +1 -1
- package/dist/lib/onboarding-fixtures.d.ts.map +1 -1
- package/dist/mcp/index.js +221 -39
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp.js +4 -1
- package/dist/project-registration/authority.d.ts.map +1 -1
- package/dist/project-registration/sqlite.d.ts.map +1 -1
- package/dist/project-registration.js +156 -17
- package/dist/registry.js +86 -4
- package/dist/release-provenance.json +5 -5
- package/dist/sdk/v1.generated.d.ts +3 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -1
- package/dist/server/index.js +221 -39
- package/dist/server/openapi.d.ts +13 -0
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage.js +128 -12
- package/dist/types/index.d.ts +5 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +4 -1
package/dist/index.js
CHANGED
|
@@ -1884,6 +1884,10 @@ var init_migrations = __esm(() => {
|
|
|
1884
1884
|
);
|
|
1885
1885
|
INSERT OR IGNORE INTO _migrations (id) VALUES (70);
|
|
1886
1886
|
COMMIT;
|
|
1887
|
+
`,
|
|
1888
|
+
`BEGIN;
|
|
1889
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (71);
|
|
1890
|
+
COMMIT;
|
|
1887
1891
|
`
|
|
1888
1892
|
];
|
|
1889
1893
|
});
|
|
@@ -2557,6 +2561,8 @@ function ensureSchema(db) {
|
|
|
2557
2561
|
ensureColumn("projects", "task_list_id", "TEXT");
|
|
2558
2562
|
ensureColumn("projects", "task_prefix", "TEXT");
|
|
2559
2563
|
ensureColumn("projects", "task_counter", "INTEGER NOT NULL DEFAULT 0");
|
|
2564
|
+
ensureColumn("projects", "parent_id", "TEXT REFERENCES projects(id) ON DELETE SET NULL");
|
|
2565
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_projects_parent_id ON projects(parent_id)");
|
|
2560
2566
|
ensureColumn("tasks", "plan_id", "TEXT REFERENCES plans(id) ON DELETE SET NULL");
|
|
2561
2567
|
ensureColumn("tasks", "task_list_id", "TEXT REFERENCES task_lists(id) ON DELETE SET NULL");
|
|
2562
2568
|
ensureColumn("tasks", "short_id", "TEXT");
|
|
@@ -5045,17 +5051,24 @@ function createProject(input, db) {
|
|
|
5045
5051
|
const id = uuid();
|
|
5046
5052
|
const timestamp2 = now();
|
|
5047
5053
|
const derivedSlug = slugify(input.name);
|
|
5048
|
-
const taskListId = input.task_list_id === undefined ?
|
|
5054
|
+
const taskListId = input.task_list_id === undefined ? derivedSlug : slugify(input.task_list_id);
|
|
5049
5055
|
if (!derivedSlug || !taskListId)
|
|
5050
5056
|
throw new Error("Project name and task-list slug must be non-empty");
|
|
5051
5057
|
const slugConflict = d.query("SELECT id FROM projects WHERE task_list_id = ? LIMIT 1").get(taskListId);
|
|
5052
5058
|
if (slugConflict || !claimCanonicalSlug("project", "global", taskListId, id, d)) {
|
|
5053
5059
|
throw new ResourceConflictError("PROJECT_SLUG_CONFLICT", `Project slug "${taskListId}" already exists`);
|
|
5054
5060
|
}
|
|
5061
|
+
const parentId = input.parent_id ?? null;
|
|
5062
|
+
if (parentId !== null) {
|
|
5063
|
+
const parent = getProject(parentId, d);
|
|
5064
|
+
if (!parent)
|
|
5065
|
+
throw new ProjectNotFoundError(parentId);
|
|
5066
|
+
assertNotProjectAncestor(id, parentId, d);
|
|
5067
|
+
}
|
|
5055
5068
|
const taskPrefix = input.task_prefix || generatePrefix(input.name, d);
|
|
5056
5069
|
const machineId = currentStorageMachineId(d);
|
|
5057
|
-
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, created_at, updated_at, machine_id)
|
|
5058
|
-
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?)`, [id, input.name, input.path, input.description || null, taskListId, taskPrefix, timestamp2, timestamp2, machineId]);
|
|
5070
|
+
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, parent_id, created_at, updated_at, machine_id)
|
|
5071
|
+
VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)`, [id, input.name, input.path, input.description || null, taskListId, taskPrefix, parentId, timestamp2, timestamp2, machineId]);
|
|
5059
5072
|
return getProject(id, d);
|
|
5060
5073
|
})();
|
|
5061
5074
|
}
|
|
@@ -5080,6 +5093,60 @@ function listProjects(db) {
|
|
|
5080
5093
|
const d = db || getDatabase();
|
|
5081
5094
|
return d.query("SELECT * FROM projects ORDER BY name").all();
|
|
5082
5095
|
}
|
|
5096
|
+
function orderProjectsParentFirst(projects) {
|
|
5097
|
+
const projectId = (project) => {
|
|
5098
|
+
const id = project.id;
|
|
5099
|
+
return typeof id === "string" && id.length > 0 ? id : null;
|
|
5100
|
+
};
|
|
5101
|
+
const parentId = (project) => {
|
|
5102
|
+
const parent = project.parent_id;
|
|
5103
|
+
return parent == null ? null : String(parent);
|
|
5104
|
+
};
|
|
5105
|
+
const byId = new Set;
|
|
5106
|
+
for (const project of projects) {
|
|
5107
|
+
const id = projectId(project);
|
|
5108
|
+
if (id !== null)
|
|
5109
|
+
byId.add(id);
|
|
5110
|
+
}
|
|
5111
|
+
const ordered = [];
|
|
5112
|
+
const emitted = new Set;
|
|
5113
|
+
let remaining = [...projects];
|
|
5114
|
+
let progress = true;
|
|
5115
|
+
while (progress && remaining.length > 0) {
|
|
5116
|
+
progress = false;
|
|
5117
|
+
const deferred = [];
|
|
5118
|
+
for (const project of remaining) {
|
|
5119
|
+
const parent = parentId(project);
|
|
5120
|
+
if (parent === null || emitted.has(parent) || !byId.has(parent)) {
|
|
5121
|
+
ordered.push(project);
|
|
5122
|
+
const id = projectId(project);
|
|
5123
|
+
if (id !== null)
|
|
5124
|
+
emitted.add(id);
|
|
5125
|
+
progress = true;
|
|
5126
|
+
} else {
|
|
5127
|
+
deferred.push(project);
|
|
5128
|
+
}
|
|
5129
|
+
}
|
|
5130
|
+
remaining = deferred;
|
|
5131
|
+
}
|
|
5132
|
+
ordered.push(...remaining);
|
|
5133
|
+
return ordered;
|
|
5134
|
+
}
|
|
5135
|
+
function assertNotProjectAncestor(projectId, ancestorId, db) {
|
|
5136
|
+
const d = db || getDatabase();
|
|
5137
|
+
let cursor = ancestorId;
|
|
5138
|
+
const seen = new Set;
|
|
5139
|
+
while (cursor !== null) {
|
|
5140
|
+
if (cursor === projectId) {
|
|
5141
|
+
throw new ResourceConflictError("PROJECT_PARENT_CYCLE", `Project "${projectId}" cannot be placed under its own descendant`);
|
|
5142
|
+
}
|
|
5143
|
+
if (seen.has(cursor))
|
|
5144
|
+
break;
|
|
5145
|
+
seen.add(cursor);
|
|
5146
|
+
const row = d.query("SELECT parent_id FROM projects WHERE id = ?").get(cursor);
|
|
5147
|
+
cursor = row?.parent_id ?? null;
|
|
5148
|
+
}
|
|
5149
|
+
}
|
|
5083
5150
|
function updateProject(id, input, db) {
|
|
5084
5151
|
const d = db || getDatabase();
|
|
5085
5152
|
const project = getProject(id, d);
|
|
@@ -5102,6 +5169,16 @@ function updateProject(id, input, db) {
|
|
|
5102
5169
|
sets.push("path = ?");
|
|
5103
5170
|
params.push(input.path);
|
|
5104
5171
|
}
|
|
5172
|
+
if (input.parent_id !== undefined) {
|
|
5173
|
+
if (input.parent_id !== null) {
|
|
5174
|
+
const parent = getProject(input.parent_id, d);
|
|
5175
|
+
if (!parent)
|
|
5176
|
+
throw new ProjectNotFoundError(input.parent_id);
|
|
5177
|
+
assertNotProjectAncestor(id, input.parent_id, d);
|
|
5178
|
+
}
|
|
5179
|
+
sets.push("parent_id = ?");
|
|
5180
|
+
params.push(input.parent_id);
|
|
5181
|
+
}
|
|
5105
5182
|
params.push(id);
|
|
5106
5183
|
d.run(`UPDATE projects SET ${sets.join(", ")} WHERE id = ?`, params);
|
|
5107
5184
|
return getProject(id, d);
|
|
@@ -12841,7 +12918,7 @@ var init_dispatches = __esm(() => {
|
|
|
12841
12918
|
// package.json
|
|
12842
12919
|
var package_default = {
|
|
12843
12920
|
name: "@hasna/todos",
|
|
12844
|
-
version: "0.15.
|
|
12921
|
+
version: "0.15.35",
|
|
12845
12922
|
description: "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
|
|
12846
12923
|
type: "module",
|
|
12847
12924
|
main: "dist/index.js",
|
|
@@ -12916,6 +12993,9 @@ var package_default = {
|
|
|
12916
12993
|
"verify:release-review": "bun run scripts/verify-npm-release-agent-review.ts",
|
|
12917
12994
|
"verify:attested-container-candidate": "bun run scripts/attested-container-candidate.ts verify",
|
|
12918
12995
|
"test:attested-container-candidate": "bun test scripts/attested-container-candidate.test.ts",
|
|
12996
|
+
"emit:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts emit",
|
|
12997
|
+
"verify:iapp-deployment-compatibility-vector": "bun run scripts/attested-container-compatibility-vector.ts verify",
|
|
12998
|
+
"test:attested-container-compatibility-vector": "bun test scripts/attested-container-compatibility-vector.test.ts",
|
|
12919
12999
|
"issue:release-review": "bun run scripts/issue-npm-release-agent-review.ts",
|
|
12920
13000
|
prepublishOnly: "bun run scripts/verify-public-release.ts --mode=publish",
|
|
12921
13001
|
postinstall: "mkdir -p $HOME/.hasna/todos $HOME/.hasna/todos/training 2>/dev/null || true"
|
|
@@ -13604,6 +13684,7 @@ var TODOS_JSON_CONTRACTS = [
|
|
|
13604
13684
|
task_list_id: nullableIdField,
|
|
13605
13685
|
task_prefix: field(["string", "null"], "Optional task prefix.", true),
|
|
13606
13686
|
task_counter: field("integer", "Monotonic project task counter."),
|
|
13687
|
+
parent_id: field(["string", "null"], "Optional parent project id; null means top-level.", true),
|
|
13607
13688
|
created_at: isoDateField,
|
|
13608
13689
|
updated_at: isoDateField
|
|
13609
13690
|
},
|
|
@@ -16889,6 +16970,7 @@ function createAgentProjectDemoBundle() {
|
|
|
16889
16970
|
task_list_id: ids.list,
|
|
16890
16971
|
task_prefix: "DEMO",
|
|
16891
16972
|
task_counter: 4,
|
|
16973
|
+
parent_id: null,
|
|
16892
16974
|
created_at: createdAt,
|
|
16893
16975
|
updated_at: completedAt
|
|
16894
16976
|
});
|
|
@@ -26529,6 +26611,7 @@ var PROJECT_COLUMNS = [
|
|
|
26529
26611
|
"task_list_id",
|
|
26530
26612
|
"task_prefix",
|
|
26531
26613
|
"task_counter",
|
|
26614
|
+
"parent_id",
|
|
26532
26615
|
"created_at",
|
|
26533
26616
|
"updated_at",
|
|
26534
26617
|
"machine_id",
|
|
@@ -26748,7 +26831,7 @@ function importSqliteTodosStorageSnapshot(snapshot, db) {
|
|
|
26748
26831
|
}
|
|
26749
26832
|
}
|
|
26750
26833
|
};
|
|
26751
|
-
applyRows("projects", "projects", PROJECT_COLUMNS, snapshot.projects, "updated_at");
|
|
26834
|
+
applyRows("projects", "projects", PROJECT_COLUMNS, orderProjectsParentFirst(snapshot.projects), "updated_at");
|
|
26752
26835
|
applyRows("project_machine_paths", "project_machine_paths", PROJECT_MACHINE_PATH_COLUMNS, snapshot.projectMachinePaths ?? [], "updated_at");
|
|
26753
26836
|
applyRows("agents", "agents", AGENT_COLUMNS, snapshot.agents, "last_seen_at");
|
|
26754
26837
|
applyRows("task_lists", "task_lists", TASK_LIST_COLUMNS, snapshot.taskLists, "updated_at");
|
|
@@ -28203,8 +28286,12 @@ class PostgresJsonRecordStore {
|
|
|
28203
28286
|
OR ($11::text <> $2
|
|
28204
28287
|
AND NOT EXISTS (SELECT 1 FROM parent_chain WHERE object_id = $2)
|
|
28205
28288
|
AND NOT EXISTS (SELECT 1 FROM parent_chain WHERE cycle))) AS parent_acyclic,
|
|
28206
|
-
(SELECT
|
|
28207
|
-
|
|
28289
|
+
(COALESCE((SELECT payload->>'plan_id' FROM locked_task), '')
|
|
28290
|
+
IS DISTINCT FROM COALESCE($3::jsonb->>'plan_id', '')) AS membership_changed,
|
|
28291
|
+
(NOT (COALESCE((SELECT payload->>'plan_id' FROM locked_task), '')
|
|
28292
|
+
IS DISTINCT FROM COALESCE($3::jsonb->>'plan_id', ''))
|
|
28293
|
+
OR $8::text IS NULL
|
|
28294
|
+
OR EXISTS (SELECT 1 FROM locked_plans WHERE object_id = $8)) AS target_plan_found,
|
|
28208
28295
|
(SELECT payload->>'project_id' FROM locked_plans WHERE object_id = $8) AS target_project_id
|
|
28209
28296
|
), guarded AS (
|
|
28210
28297
|
SELECT
|
|
@@ -28227,7 +28314,6 @@ class PostgresJsonRecordStore {
|
|
|
28227
28314
|
AND guarded.version_matches
|
|
28228
28315
|
AND guarded.parent_found
|
|
28229
28316
|
AND guarded.parent_acyclic
|
|
28230
|
-
AND guarded.all_plans_found
|
|
28231
28317
|
AND guarded.target_plan_found
|
|
28232
28318
|
AND NOT guarded.project_conflict
|
|
28233
28319
|
ON CONFLICT (service, object_type, object_id) DO UPDATE SET
|
|
@@ -28243,7 +28329,7 @@ class PostgresJsonRecordStore {
|
|
|
28243
28329
|
RETURNING payload
|
|
28244
28330
|
)
|
|
28245
28331
|
SELECT guarded.task_found, guarded.version_matches, guarded.parent_found, guarded.parent_acyclic,
|
|
28246
|
-
guarded.
|
|
28332
|
+
guarded.membership_changed, guarded.target_plan_found, guarded.project_conflict,
|
|
28247
28333
|
(SELECT payload FROM stored) AS payload,
|
|
28248
28334
|
(SELECT payload FROM locked_task) AS current_payload
|
|
28249
28335
|
FROM guarded`, [
|
|
@@ -28275,7 +28361,7 @@ class PostgresJsonRecordStore {
|
|
|
28275
28361
|
if (parentGuard && !row?.parent_acyclic && parentGuard.parentId) {
|
|
28276
28362
|
throw new ResourceConflictError("TASK_PARENT_CYCLE", `TASK_PARENT_CYCLE: assigning parent ${parentGuard.parentId} to task ${value.id} would create or retain a parent cycle`);
|
|
28277
28363
|
}
|
|
28278
|
-
if (!row?.
|
|
28364
|
+
if (!row?.target_plan_found) {
|
|
28279
28365
|
throw new PlanProjectLinkError("PLAN_PROJECT_LINK_PLAN_NOT_FOUND", `Plan membership changed through a missing plan: ${targetPlanId ?? planIds.join(", ")}`, { plan_ids: planIds, target_plan_id: targetPlanId });
|
|
28280
28366
|
}
|
|
28281
28367
|
if (row.project_conflict) {
|
|
@@ -29487,17 +29573,26 @@ async function getChangedSince(since, filters, store) {
|
|
|
29487
29573
|
async function createProject2(input, store, context) {
|
|
29488
29574
|
const timestamp3 = new Date().toISOString();
|
|
29489
29575
|
const derivedSlug = slugifyRaw(input.name);
|
|
29490
|
-
const taskListId = input.task_list_id === undefined ?
|
|
29576
|
+
const taskListId = input.task_list_id === undefined ? derivedSlug : slugifyRaw(input.task_list_id);
|
|
29491
29577
|
if (!derivedSlug || !taskListId)
|
|
29492
29578
|
throw new Error("Project name and task-list slug must be non-empty");
|
|
29579
|
+
const parentId = input.parent_id ?? null;
|
|
29580
|
+
const id = randomUUID3();
|
|
29581
|
+
if (parentId !== null) {
|
|
29582
|
+
const parent = await store.get("projects", parentId);
|
|
29583
|
+
if (!parent)
|
|
29584
|
+
throw new ProjectNotFoundError(parentId);
|
|
29585
|
+
await assertNotProjectAncestorPostgres(id, parentId, store);
|
|
29586
|
+
}
|
|
29493
29587
|
const project = {
|
|
29494
|
-
id
|
|
29588
|
+
id,
|
|
29495
29589
|
name: input.name,
|
|
29496
29590
|
path: input.path,
|
|
29497
29591
|
description: input.description ?? null,
|
|
29498
29592
|
task_list_id: taskListId,
|
|
29499
29593
|
task_prefix: input.task_prefix ?? await generateProjectPrefix(input.name, store),
|
|
29500
29594
|
task_counter: 0,
|
|
29595
|
+
parent_id: parentId,
|
|
29501
29596
|
created_at: timestamp3,
|
|
29502
29597
|
updated_at: timestamp3,
|
|
29503
29598
|
machine_id: store.machineId(context),
|
|
@@ -29505,12 +29600,38 @@ async function createProject2(input, store, context) {
|
|
|
29505
29600
|
};
|
|
29506
29601
|
return store.upsert("projects", project, context);
|
|
29507
29602
|
}
|
|
29603
|
+
async function assertNotProjectAncestorPostgres(projectId, candidateParentId, store) {
|
|
29604
|
+
const all = await store.list("projects");
|
|
29605
|
+
const byId = new Map(all.map((project) => [project.id, project.parent_id ?? null]));
|
|
29606
|
+
let cursor = candidateParentId;
|
|
29607
|
+
const seen = new Set;
|
|
29608
|
+
while (cursor !== null) {
|
|
29609
|
+
if (cursor === projectId) {
|
|
29610
|
+
throw new ResourceConflictError("PROJECT_PARENT_CYCLE", `Project "${projectId}" cannot be placed under its own descendant`);
|
|
29611
|
+
}
|
|
29612
|
+
if (seen.has(cursor))
|
|
29613
|
+
break;
|
|
29614
|
+
seen.add(cursor);
|
|
29615
|
+
cursor = byId.get(cursor) ?? null;
|
|
29616
|
+
}
|
|
29617
|
+
}
|
|
29508
29618
|
async function updateProject2(id, input, store) {
|
|
29509
29619
|
if ("task_list_id" in input) {
|
|
29510
29620
|
throw new Error("task_list_id cannot be changed by updateProject; use renameProject for an atomic canonical rename");
|
|
29511
29621
|
}
|
|
29512
29622
|
const project = await requireRecord("projects", id, store);
|
|
29513
|
-
|
|
29623
|
+
if (input.parent_id !== undefined && input.parent_id !== null) {
|
|
29624
|
+
const parent = await store.get("projects", input.parent_id);
|
|
29625
|
+
if (!parent)
|
|
29626
|
+
throw new ProjectNotFoundError(input.parent_id);
|
|
29627
|
+
await assertNotProjectAncestorPostgres(id, input.parent_id, store);
|
|
29628
|
+
}
|
|
29629
|
+
const updated = {
|
|
29630
|
+
...project,
|
|
29631
|
+
...definedPatch(input),
|
|
29632
|
+
...input.parent_id !== undefined ? { parent_id: input.parent_id } : {},
|
|
29633
|
+
updated_at: new Date().toISOString()
|
|
29634
|
+
};
|
|
29514
29635
|
return store.upsert("projects", updated);
|
|
29515
29636
|
}
|
|
29516
29637
|
async function createPlan2(input, store, context) {
|
|
@@ -35340,7 +35461,7 @@ class StagedSqliteTodosProjectRegistrationTransaction {
|
|
|
35340
35461
|
}
|
|
35341
35462
|
async createProject(input) {
|
|
35342
35463
|
const derivedSlug = normalizeSlug(input.name);
|
|
35343
|
-
const taskListId = input.task_list_id === undefined ?
|
|
35464
|
+
const taskListId = input.task_list_id === undefined ? derivedSlug : normalizeSlug(input.task_list_id);
|
|
35344
35465
|
if (!derivedSlug || !taskListId) {
|
|
35345
35466
|
throw new Error("Project name and task-list slug must be non-empty");
|
|
35346
35467
|
}
|
|
@@ -35352,6 +35473,7 @@ class StagedSqliteTodosProjectRegistrationTransaction {
|
|
|
35352
35473
|
task_list_id: taskListId,
|
|
35353
35474
|
task_prefix: input.task_prefix ?? this.availableProjectPrefix(input.name),
|
|
35354
35475
|
task_counter: 0,
|
|
35476
|
+
parent_id: input.parent_id ?? null,
|
|
35355
35477
|
created_at: now(),
|
|
35356
35478
|
updated_at: now(),
|
|
35357
35479
|
machine_id: currentStorageMachineId(this.db)
|
|
@@ -35362,14 +35484,15 @@ class StagedSqliteTodosProjectRegistrationTransaction {
|
|
|
35362
35484
|
try {
|
|
35363
35485
|
const result = this.db.run(`INSERT INTO projects (
|
|
35364
35486
|
id, name, path, description, task_list_id, task_prefix,
|
|
35365
|
-
task_counter, created_at, updated_at, machine_id
|
|
35366
|
-
) VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?)`, [
|
|
35487
|
+
task_counter, parent_id, created_at, updated_at, machine_id
|
|
35488
|
+
) VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)`, [
|
|
35367
35489
|
project.id,
|
|
35368
35490
|
project.name,
|
|
35369
35491
|
project.path,
|
|
35370
35492
|
project.description,
|
|
35371
35493
|
project.task_list_id,
|
|
35372
35494
|
project.task_prefix,
|
|
35495
|
+
project.parent_id,
|
|
35373
35496
|
project.created_at,
|
|
35374
35497
|
project.updated_at,
|
|
35375
35498
|
project.machine_id ?? null
|
|
@@ -35765,7 +35888,10 @@ function taskListSlug(projectSlug) {
|
|
|
35765
35888
|
if (!slug || slug !== projectSlug) {
|
|
35766
35889
|
throw new TodosProjectRegistrationError("TODOS_PROJECT_REGISTRATION_INVALID_INPUT", "project_slug must be canonical kebab-case");
|
|
35767
35890
|
}
|
|
35768
|
-
return
|
|
35891
|
+
return slug;
|
|
35892
|
+
}
|
|
35893
|
+
function legacyTaskListSlug(projectSlug) {
|
|
35894
|
+
return `todos-${normalizeSlug(projectSlug)}`;
|
|
35769
35895
|
}
|
|
35770
35896
|
function deterministicTaskPrefix(projectSlug) {
|
|
35771
35897
|
const letters = projectSlug.replace(/[^a-z0-9]/gi, "").toUpperCase();
|
|
@@ -36284,6 +36410,12 @@ class PackageOwnedTodosProjectRegistrationAuthority {
|
|
|
36284
36410
|
created_by_operation: false
|
|
36285
36411
|
};
|
|
36286
36412
|
}
|
|
36413
|
+
if (request.bind_existing === true && conflict2.path === path && conflict2.task_list_id === legacyTaskListSlug(request.project_slug)) {
|
|
36414
|
+
return {
|
|
36415
|
+
record: boundExistingProjectRecord(conflict2),
|
|
36416
|
+
created_by_operation: false
|
|
36417
|
+
};
|
|
36418
|
+
}
|
|
36287
36419
|
return this.terminalFor(transaction, request, normalizedCallDigest(request), "target_already_exists", { targetId: conflict2.id });
|
|
36288
36420
|
}
|
|
36289
36421
|
await this.fault("before_object_write", request);
|
|
@@ -36320,6 +36452,15 @@ class PackageOwnedTodosProjectRegistrationAuthority {
|
|
|
36320
36452
|
}
|
|
36321
36453
|
return this.terminalFor(transaction, request, normalizedCallDigest(request), "target_already_exists", { targetId: conflict.id });
|
|
36322
36454
|
}
|
|
36455
|
+
if (request.bind_existing === true) {
|
|
36456
|
+
const legacy = await transaction.findTaskListConflict(todosProjectId, legacyTaskListSlug(request.project_slug));
|
|
36457
|
+
if (legacy && legacy.project_id === todosProjectId) {
|
|
36458
|
+
return {
|
|
36459
|
+
record: boundExistingTaskListRecord(legacy),
|
|
36460
|
+
created_by_operation: false
|
|
36461
|
+
};
|
|
36462
|
+
}
|
|
36463
|
+
}
|
|
36323
36464
|
await this.fault("before_object_write", request);
|
|
36324
36465
|
const taskList = await transaction.createTaskList({
|
|
36325
36466
|
name: request.project_name,
|
|
@@ -43662,7 +43803,32 @@ function classifyRemoteRequestError(baseUrl, route, error) {
|
|
|
43662
43803
|
}
|
|
43663
43804
|
throw error;
|
|
43664
43805
|
}
|
|
43665
|
-
|
|
43806
|
+
var REMOTE_REQUEST_TIMEOUT_MS = 1e4;
|
|
43807
|
+
function withBoundedRemoteRequest(options, requestTimeoutMs, run) {
|
|
43808
|
+
const controller = new AbortController;
|
|
43809
|
+
const onBaseAbort = () => controller.abort();
|
|
43810
|
+
if (options?.signal) {
|
|
43811
|
+
if (options.signal.aborted)
|
|
43812
|
+
controller.abort();
|
|
43813
|
+
else
|
|
43814
|
+
options.signal.addEventListener("abort", onBaseAbort, { once: true });
|
|
43815
|
+
}
|
|
43816
|
+
let timer;
|
|
43817
|
+
const deadline = new Promise((_, reject) => {
|
|
43818
|
+
timer = setTimeout(() => {
|
|
43819
|
+
controller.abort();
|
|
43820
|
+
reject(new DOMException(`Todos remote request exceeded the ${requestTimeoutMs}ms bounded request timeout`, "AbortError"));
|
|
43821
|
+
}, requestTimeoutMs);
|
|
43822
|
+
});
|
|
43823
|
+
const attempt = run({ ...options, signal: controller.signal });
|
|
43824
|
+
attempt.catch(() => {});
|
|
43825
|
+
return Promise.race([attempt, deadline]).finally(() => {
|
|
43826
|
+
if (timer)
|
|
43827
|
+
clearTimeout(timer);
|
|
43828
|
+
options?.signal?.removeEventListener("abort", onBaseAbort);
|
|
43829
|
+
});
|
|
43830
|
+
}
|
|
43831
|
+
function protectRemoteClient(client, requestTimeoutMs) {
|
|
43666
43832
|
const baseUrl = remoteAuthorityBase(client);
|
|
43667
43833
|
const protect = async (route, request) => {
|
|
43668
43834
|
try {
|
|
@@ -43671,25 +43837,26 @@ function protectRemoteClient(client) {
|
|
|
43671
43837
|
return classifyRemoteRequestError(baseUrl, route, error);
|
|
43672
43838
|
}
|
|
43673
43839
|
};
|
|
43840
|
+
const bounded = (options, run) => withBoundedRemoteRequest(options, requestTimeoutMs, run);
|
|
43674
43841
|
const transport = client.transport;
|
|
43675
43842
|
const protectedTransport = {
|
|
43676
43843
|
baseUrl: transport.baseUrl,
|
|
43677
|
-
request: (method, path, body2, options) => protect(path, () => transport.request(method, path, body2,
|
|
43678
|
-
get: (path, options) => protect(path, () => transport.get(path,
|
|
43679
|
-
post: (path, body2, options) => protect(path, () => transport.post(path, body2,
|
|
43680
|
-
put: (path, body2, options) => protect(path, () => transport.put(path, body2,
|
|
43681
|
-
patch: (path, body2, options) => protect(path, () => transport.patch(path, body2,
|
|
43682
|
-
del: (path, body2, options) => protect(path, () => transport.del(path, body2,
|
|
43844
|
+
request: (method, path, body2, options) => protect(path, () => bounded(options, (opts) => transport.request(method, path, body2, opts))),
|
|
43845
|
+
get: (path, options) => protect(path, () => bounded(options, (opts) => transport.get(path, opts))),
|
|
43846
|
+
post: (path, body2, options) => protect(path, () => bounded(options, (opts) => transport.post(path, body2, opts))),
|
|
43847
|
+
put: (path, body2, options) => protect(path, () => bounded(options, (opts) => transport.put(path, body2, opts))),
|
|
43848
|
+
patch: (path, body2, options) => protect(path, () => bounded(options, (opts) => transport.patch(path, body2, opts))),
|
|
43849
|
+
del: (path, body2, options) => protect(path, () => bounded(options, (opts) => transport.del(path, body2, opts)))
|
|
43683
43850
|
};
|
|
43684
43851
|
return {
|
|
43685
43852
|
name: client.name,
|
|
43686
43853
|
baseUrl: client.baseUrl,
|
|
43687
43854
|
transport: protectedTransport,
|
|
43688
|
-
list: (resource, options) => protect(`/${resource}`, () => client.list(resource,
|
|
43689
|
-
get: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => client.get(resource, id,
|
|
43690
|
-
create: (resource, body2, options) => protect(`/${resource}`, () => client.create(resource, body2,
|
|
43691
|
-
update: (resource, id, patch, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => client.update(resource, id, patch,
|
|
43692
|
-
delete: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => client.delete(resource, id,
|
|
43855
|
+
list: (resource, options) => protect(`/${resource}`, () => bounded(options, (opts) => client.list(resource, opts))),
|
|
43856
|
+
get: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => bounded(options, (opts) => client.get(resource, id, opts))),
|
|
43857
|
+
create: (resource, body2, options) => protect(`/${resource}`, () => bounded(options, (opts) => client.create(resource, body2, opts))),
|
|
43858
|
+
update: (resource, id, patch, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => bounded(options, (opts) => client.update(resource, id, patch, opts))),
|
|
43859
|
+
delete: (resource, id, options) => protect(`/${resource}/${encodeURIComponent(id)}`, () => bounded(options, (opts) => client.delete(resource, id, opts)))
|
|
43693
43860
|
};
|
|
43694
43861
|
}
|
|
43695
43862
|
function remoteAuthorityBase(client) {
|
|
@@ -43710,17 +43877,18 @@ async function requiredRemoteRoute(client, route, request, recognized404Codes =
|
|
|
43710
43877
|
throw error;
|
|
43711
43878
|
}
|
|
43712
43879
|
}
|
|
43713
|
-
function getTodosCloudClient(env = process.env) {
|
|
43880
|
+
function getTodosCloudClient(env = process.env, requestTimeoutMs = REMOTE_REQUEST_TIMEOUT_MS) {
|
|
43714
43881
|
if (requestedTransport(env) !== "http")
|
|
43715
43882
|
return null;
|
|
43716
43883
|
const resolved = resolveStorageClient("todos", requireTodosRemoteAuthorityEnv(env), {
|
|
43717
|
-
fetchImpl: (input, init) => globalThis.fetch(input, { ...init, redirect: "manual" })
|
|
43884
|
+
fetchImpl: (input, init) => globalThis.fetch(input, { ...init, redirect: "manual" }),
|
|
43885
|
+
timeoutMs: requestTimeoutMs
|
|
43718
43886
|
});
|
|
43719
43887
|
if (resolved.transport === "cloud-http")
|
|
43720
|
-
return protectRemoteClient(resolved.client);
|
|
43888
|
+
return protectRemoteClient(resolved.client, requestTimeoutMs);
|
|
43721
43889
|
const transportName = resolved.transport;
|
|
43722
43890
|
if (transportName === "http")
|
|
43723
|
-
return protectRemoteClient(resolved.client);
|
|
43891
|
+
return protectRemoteClient(resolved.client, requestTimeoutMs);
|
|
43724
43892
|
return null;
|
|
43725
43893
|
}
|
|
43726
43894
|
function unwrapTask(raw) {
|
|
@@ -47793,7 +47961,7 @@ function addSourceOnce(projectId, type, name, uri, metadata, db) {
|
|
|
47793
47961
|
function bootstrapProject(options = {}, db) {
|
|
47794
47962
|
const d = db || getDatabase();
|
|
47795
47963
|
const discovery = discoverProjectWorkspace(options.path);
|
|
47796
|
-
const taskListSlug2 = options.taskListSlug ||
|
|
47964
|
+
const taskListSlug2 = options.taskListSlug || slugify(options.name || discovery.projectName);
|
|
47797
47965
|
if (options.dryRun) {
|
|
47798
47966
|
return {
|
|
47799
47967
|
dryRun: true,
|
|
@@ -55211,21 +55379,22 @@ function upsertProject(raw, d) {
|
|
|
55211
55379
|
const existing = getProject(id, d);
|
|
55212
55380
|
const ts = now();
|
|
55213
55381
|
if (!existing) {
|
|
55214
|
-
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, created_at, updated_at)
|
|
55215
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
55382
|
+
d.run(`INSERT INTO projects (id, name, path, description, task_list_id, task_prefix, task_counter, parent_id, created_at, updated_at)
|
|
55383
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
55216
55384
|
id,
|
|
55217
55385
|
raw.name,
|
|
55218
55386
|
raw.path,
|
|
55219
55387
|
raw.description ?? null,
|
|
55220
|
-
raw.task_list_id ??
|
|
55388
|
+
raw.task_list_id ?? String(raw.name).toLowerCase().replace(/\s+/g, "-"),
|
|
55221
55389
|
raw.task_prefix ?? "TSK",
|
|
55222
55390
|
raw.task_counter ?? 0,
|
|
55391
|
+
raw.parent_id ?? null,
|
|
55223
55392
|
raw.created_at ?? ts,
|
|
55224
55393
|
raw.updated_at ?? ts
|
|
55225
55394
|
].map(sqlValue));
|
|
55226
55395
|
return "created";
|
|
55227
55396
|
}
|
|
55228
|
-
d.run(`UPDATE projects SET name = ?, path = ?, description = ?, task_list_id = ?, task_prefix = ?, task_counter = ?, updated_at = ?
|
|
55397
|
+
d.run(`UPDATE projects SET name = ?, path = ?, description = ?, task_list_id = ?, task_prefix = ?, task_counter = ?, parent_id = ?, updated_at = ?
|
|
55229
55398
|
WHERE id = ?`, [
|
|
55230
55399
|
raw.name ?? existing.name,
|
|
55231
55400
|
raw.path ?? existing.path,
|
|
@@ -55233,6 +55402,7 @@ function upsertProject(raw, d) {
|
|
|
55233
55402
|
raw.task_list_id ?? existing.task_list_id,
|
|
55234
55403
|
raw.task_prefix ?? existing.task_prefix,
|
|
55235
55404
|
raw.task_counter ?? existing.task_counter,
|
|
55405
|
+
raw.parent_id ?? existing.parent_id,
|
|
55236
55406
|
raw.updated_at ?? ts,
|
|
55237
55407
|
id
|
|
55238
55408
|
].map(sqlValue));
|
|
@@ -55313,7 +55483,7 @@ function importBundle(bundle, options = {}, db) {
|
|
|
55313
55483
|
};
|
|
55314
55484
|
if (options.dry_run)
|
|
55315
55485
|
return result;
|
|
55316
|
-
for (const raw of bundle.projects) {
|
|
55486
|
+
for (const raw of orderProjectsParentFirst(bundle.projects)) {
|
|
55317
55487
|
try {
|
|
55318
55488
|
const id = raw.id;
|
|
55319
55489
|
const local = getProject(id, d);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-contracts.d.ts","sourceRoot":"","sources":["../src/json-contracts.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,cAAc,CAAC;AAC3D,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3G,MAAM,WAAW,kCAAkC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,kBAAkB,GAAG,SAAS,kBAAkB,EAAE,CAAC;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACjD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE;QACT,gBAAgB,EAAE,SAAS,GAAG,WAAW,CAAC;QAC1C,sBAAsB,EAAE,UAAU,CAAC;QACnC,0BAA0B,EAAE,UAAU,CAAC;QACvC,qBAAqB,EAAE,UAAU,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,wBAAwB,EAAE,uBAAuB,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,2BAA2B,EAAE,CAAC;CAC/C;AAqDD,eAAO,MAAM,oCAAoC,EAAE,uBAAuB,EAyCzE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"json-contracts.d.ts","sourceRoot":"","sources":["../src/json-contracts.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,cAAc,CAAC;AAC3D,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3G,MAAM,WAAW,kCAAkC;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,kBAAkB,GAAG,SAAS,kBAAkB,EAAE,CAAC;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACjD,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE;QACT,gBAAgB,EAAE,SAAS,GAAG,WAAW,CAAC;QAC1C,sBAAsB,EAAE,UAAU,CAAC;QACnC,0BAA0B,EAAE,UAAU,CAAC;QACvC,qBAAqB,EAAE,UAAU,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,8BAA8B,CAAC;IACxC,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,wBAAwB,EAAE,uBAAuB,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,2BAA2B,EAAE,CAAC;CAC/C;AAqDD,eAAO,MAAM,oCAAoC,EAAE,uBAAuB,EAyCzE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,uBAAuB,EAu8DzD,CAAC;AAyBF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAGlF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,4BAA4B,CAmCrG;AAED,wBAAgB,2BAA2B,CACzC,OAAO,GAAE,kCAAuC,GAC/C,0BAA0B,CAS5B;AAED,eAAO,MAAM,6BAA6B,4BAExC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-export-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/import-export-bridge.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"import-export-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/import-export-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding-fixtures.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding-fixtures.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,wCAAwC,eAAe,CAAC;AACrE,eAAO,MAAM,+BAA+B,sCAAsC,CAAC;AAEnF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,oBAAoB,EAAE,MAAM,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,8BAA+B,SAAQ,wBAAwB;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"onboarding-fixtures.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding-fixtures.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,wCAAwC,eAAe,CAAC;AACrE,eAAO,MAAM,+BAA+B,sCAAsC,CAAC;AAEnF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,oBAAoB,EAAE,MAAM,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,8BAA+B,SAAQ,wBAAwB;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAsXD,wBAAgB,sBAAsB,IAAI,wBAAwB,EAAE,CAMnE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,SAAuB,GAAG,iBAAiB,CAUnF;AAED,wBAAgB,0BAA0B,CAAC,IAAI,SAAuB,GAAG,sBAAsB,CAE9F;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,4BAA4B,CAS3F;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,uBAAuB,CAMzB"}
|