@andrestobelem/clone 0.2.0 → 0.2.2
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 +8 -0
- package/dist/actors.js +49 -0
- package/dist/actors.js.map +1 -0
- package/dist/automations.js +57 -0
- package/dist/automations.js.map +1 -0
- package/dist/cli.js +142 -12
- package/dist/cli.js.map +1 -1
- package/dist/database.js +22 -2
- package/dist/database.js.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/issues.js +264 -0
- package/dist/issues.js.map +1 -0
- package/dist/projects.js +134 -0
- package/dist/projects.js.map +1 -0
- package/dist/recurring.js +45 -0
- package/dist/recurring.js.map +1 -0
- package/dist/seed.js +498 -0
- package/dist/seed.js.map +1 -0
- package/dist/teams.js +77 -0
- package/dist/teams.js.map +1 -0
- package/dist/time.js +4 -0
- package/dist/time.js.map +1 -0
- package/dist/workspace-helpers.js +75 -0
- package/dist/workspace-helpers.js.map +1 -0
- package/dist/workspace-mutations.js +160 -0
- package/dist/workspace-mutations.js.map +1 -0
- package/dist/workspace-reads.js +62 -0
- package/dist/workspace-reads.js.map +1 -0
- package/dist/workspace.js +7 -1392
- package/dist/workspace.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { one, run, sql } from "./database.js";
|
|
2
|
+
import { InvalidInputError } from "./errors.js";
|
|
3
|
+
import { priorities } from "./schema.js";
|
|
4
|
+
import { now } from "./time.js";
|
|
5
|
+
export function parseJson(value, fallback) {
|
|
6
|
+
if (typeof value !== "string" || !value)
|
|
7
|
+
return fallback;
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(value);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return fallback;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function isObject(value) {
|
|
16
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
export function event(database, type, id, actor, action, payload) {
|
|
19
|
+
run(database, "INSERT INTO activity_events(entity_type,entity_id,actor_id,action,payload,created_at) VALUES(?,?,?,?,?,?)", type, id, actor, action, JSON.stringify(payload), now());
|
|
20
|
+
}
|
|
21
|
+
export function updateSetting(database, key, value) {
|
|
22
|
+
const row = one(database, "SELECT value_json FROM app_settings WHERE key=?", key);
|
|
23
|
+
const existing = parseJson(row?.value_json, {});
|
|
24
|
+
if (isObject(existing) && isObject(value))
|
|
25
|
+
value = { ...existing, ...value };
|
|
26
|
+
run(database, "INSERT INTO app_settings(key,value_json,updated_at) VALUES(?,?,?) ON CONFLICT(key) DO UPDATE SET value_json=excluded.value_json,updated_at=excluded.updated_at", key, JSON.stringify(value), now());
|
|
27
|
+
}
|
|
28
|
+
export function priorityNumber(value) {
|
|
29
|
+
if (Number.isInteger(value) && Number(value) >= 0 && Number(value) <= 4)
|
|
30
|
+
return Number(value);
|
|
31
|
+
if (typeof value === "string" && /^\d$/.test(value) && Number(value) <= 4)
|
|
32
|
+
return Number(value);
|
|
33
|
+
const index = priorities.indexOf(value);
|
|
34
|
+
if (index < 0)
|
|
35
|
+
fail("Unknown priority");
|
|
36
|
+
return index;
|
|
37
|
+
}
|
|
38
|
+
export function updateFields(database, table, key, id, data, map, transforms = {}) {
|
|
39
|
+
const changes = {};
|
|
40
|
+
for (const [source, target] of Object.entries(map))
|
|
41
|
+
if (source in data)
|
|
42
|
+
changes[target] = (transforms[source] ?? ((v) => v))(data[source]);
|
|
43
|
+
updateColumns(database, table, key, id, changes);
|
|
44
|
+
return Object.keys(changes).length > 0;
|
|
45
|
+
}
|
|
46
|
+
export function updateColumns(database, table, key, id, changes) {
|
|
47
|
+
const entries = Object.entries(changes);
|
|
48
|
+
if (!entries.length)
|
|
49
|
+
return;
|
|
50
|
+
database
|
|
51
|
+
.prepare(`UPDATE ${table} SET ${entries.map(([column]) => `${column}=?`).join(",")} WHERE ${key}=?`)
|
|
52
|
+
.run(...entries.map(([, value]) => sql(value)), id);
|
|
53
|
+
}
|
|
54
|
+
export function replaceLinks(database, table, key, id, column, values) {
|
|
55
|
+
run(database, `DELETE FROM ${table} WHERE ${key}=?`, id);
|
|
56
|
+
for (const value of values)
|
|
57
|
+
run(database, `INSERT OR IGNORE INTO ${table}(${key},${column}) VALUES(?,?)`, id, sql(value));
|
|
58
|
+
}
|
|
59
|
+
export function text(value, message) {
|
|
60
|
+
const result = String(value ?? "").trim();
|
|
61
|
+
if (!result)
|
|
62
|
+
fail(message);
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
export function array(value, fallback = []) {
|
|
66
|
+
return Array.isArray(value) ? value : fallback;
|
|
67
|
+
}
|
|
68
|
+
export function withoutActor(data) {
|
|
69
|
+
const { actorId: _, ...rest } = data;
|
|
70
|
+
return rest;
|
|
71
|
+
}
|
|
72
|
+
export function fail(message) {
|
|
73
|
+
throw new InvalidInputError(message);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=workspace-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-helpers.js","sourceRoot":"","sources":["../src/workspace-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { mutateAgent, requireActor } from "./actors.js";
|
|
2
|
+
import { applyAutomations } from "./automations.js";
|
|
3
|
+
import { lastInsertId, one, rows, run, sql, } from "./database.js";
|
|
4
|
+
import { mutateIssue } from "./issues.js";
|
|
5
|
+
import { mutateProject } from "./projects.js";
|
|
6
|
+
import { mutateTeam } from "./teams.js";
|
|
7
|
+
import { now } from "./time.js";
|
|
8
|
+
import { mutationPayload } from "./validation.js";
|
|
9
|
+
import { array, fail, isObject, text, updateFields, updateSetting, withoutActor, } from "./workspace-helpers.js";
|
|
10
|
+
export function dispatchMutation(database, method, route, raw, paths) {
|
|
11
|
+
const data = mutationPayload(raw, route);
|
|
12
|
+
const actor = requireActor(database, data.actorId ?? 1);
|
|
13
|
+
validateActorFields(database, data, method, route);
|
|
14
|
+
const stamp = now();
|
|
15
|
+
return (mutateAgent(database, method, route, data, stamp) ??
|
|
16
|
+
mutateTeam(database, method, route, data, stamp, actor) ??
|
|
17
|
+
mutateProject(database, method, route, data, stamp, actor) ??
|
|
18
|
+
mutateIssue(database, method, route, data, stamp, actor, paths, applyAutomations) ??
|
|
19
|
+
mutateGeneral(database, method, route, data, stamp, actor));
|
|
20
|
+
}
|
|
21
|
+
function mutateGeneral(database, method, route, data, stamp, actor) {
|
|
22
|
+
if (route === "/api/views" && method === "POST") {
|
|
23
|
+
run(database, "INSERT INTO views(name,description,icon,entity,scope,owner_id,team_id,filters_json,display_json,is_favorite,created_at,updated_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)", text(data.name, "View name is required"), sql(data.description ?? ""), sql(data.icon ?? "◈"), sql(data.entity ?? "issues"), sql(data.scope ?? "Personal"), actor, sql(data.teamId), JSON.stringify(data.filters ?? {}), JSON.stringify(data.display ?? {}), data.isFavorite ? 1 : 0, stamp, stamp);
|
|
24
|
+
return { viewId: lastInsertId(database), _status: 201 };
|
|
25
|
+
}
|
|
26
|
+
const view = route.match(/^\/api\/views\/(\d+)$/);
|
|
27
|
+
if (view && ["PUT", "PATCH"].includes(method)) {
|
|
28
|
+
updateFields(database, "views", "id", Number(view[1]), data, {
|
|
29
|
+
name: "name",
|
|
30
|
+
description: "description",
|
|
31
|
+
icon: "icon",
|
|
32
|
+
entity: "entity",
|
|
33
|
+
scope: "scope",
|
|
34
|
+
teamId: "team_id",
|
|
35
|
+
isFavorite: "is_favorite",
|
|
36
|
+
});
|
|
37
|
+
if ("filters" in data)
|
|
38
|
+
run(database, "UPDATE views SET filters_json=?,updated_at=? WHERE id=?", JSON.stringify(data.filters), stamp, Number(view[1]));
|
|
39
|
+
if ("display" in data)
|
|
40
|
+
run(database, "UPDATE views SET display_json=?,updated_at=? WHERE id=?", JSON.stringify(data.display), stamp, Number(view[1]));
|
|
41
|
+
return { ok: true };
|
|
42
|
+
}
|
|
43
|
+
if (view && method === "DELETE") {
|
|
44
|
+
run(database, "DELETE FROM views WHERE id=?", Number(view[1]));
|
|
45
|
+
return { ok: true };
|
|
46
|
+
}
|
|
47
|
+
if (route === "/api/cycles" && method === "POST") {
|
|
48
|
+
run(database, "INSERT INTO cycles(team_id,name,starts_at,ends_at,status,capacity,created_at) VALUES(?,?,?,?,?,?,?)", sql(data.teamId ?? 1), text(data.name, "Cycle name is required"), sql(data.startsAt), sql(data.endsAt), sql(data.status ?? "Upcoming"), sql(data.capacity ?? 20), stamp);
|
|
49
|
+
return { cycleId: lastInsertId(database), _status: 201 };
|
|
50
|
+
}
|
|
51
|
+
if (route === "/api/preferences" && ["PUT", "PATCH"].includes(method)) {
|
|
52
|
+
updateSetting(database, "preferences", withoutActor(data));
|
|
53
|
+
return { ok: true };
|
|
54
|
+
}
|
|
55
|
+
const notification = route.match(/^\/api\/notifications\/(\d+)\/(read|unread|archive)$/);
|
|
56
|
+
if (notification && method === "POST") {
|
|
57
|
+
const assignment = notification[2] === "archive"
|
|
58
|
+
? "archived=1"
|
|
59
|
+
: notification[2] === "read"
|
|
60
|
+
? "is_read=1"
|
|
61
|
+
: "is_read=0";
|
|
62
|
+
run(database, `UPDATE notifications SET ${assignment} WHERE id=? AND recipient_id=?`, Number(notification[1]), actor);
|
|
63
|
+
return { ok: true };
|
|
64
|
+
}
|
|
65
|
+
if (route === "/api/notifications/read-all" && method === "POST") {
|
|
66
|
+
run(database, "UPDATE notifications SET is_read=1 WHERE recipient_id=?", actor);
|
|
67
|
+
return { ok: true };
|
|
68
|
+
}
|
|
69
|
+
if ([
|
|
70
|
+
"/api/notifications/archive-selected",
|
|
71
|
+
"/api/notifications/read-selected",
|
|
72
|
+
].includes(route) &&
|
|
73
|
+
method === "POST") {
|
|
74
|
+
const ids = array(data.ids).map(Number);
|
|
75
|
+
if (!ids.length)
|
|
76
|
+
return { ok: true, count: 0 };
|
|
77
|
+
const set = route.endsWith("archive-selected") ? "archived=1" : "is_read=1";
|
|
78
|
+
const statement = database.prepare(`UPDATE notifications SET ${set} WHERE recipient_id=? AND id IN (${ids.map(() => "?").join(",")})`);
|
|
79
|
+
const result = statement.run(actor, ...ids);
|
|
80
|
+
return { ok: true, count: Number(result.changes) };
|
|
81
|
+
}
|
|
82
|
+
if (route === "/api/import" && method === "POST") {
|
|
83
|
+
const created = [];
|
|
84
|
+
for (const raw of array(data.issues)) {
|
|
85
|
+
const item = {
|
|
86
|
+
...raw,
|
|
87
|
+
actorId: actor,
|
|
88
|
+
teamId: raw.teamId ?? 1,
|
|
89
|
+
};
|
|
90
|
+
const result = dispatchMutation(database, "POST", "/api/issues", item, {
|
|
91
|
+
database: "",
|
|
92
|
+
dataDirectory: "",
|
|
93
|
+
snapshotDirectory: "",
|
|
94
|
+
attachmentsDirectory: "",
|
|
95
|
+
backupsDirectory: "",
|
|
96
|
+
});
|
|
97
|
+
created.push(String(result.issue.identifier));
|
|
98
|
+
}
|
|
99
|
+
return { created, count: created.length };
|
|
100
|
+
}
|
|
101
|
+
if (route === "/api/automations" && method === "POST") {
|
|
102
|
+
run(database, "INSERT INTO automations(team_id,name,trigger_json,condition_json,action_json,enabled,created_at,updated_at) VALUES(?,?,?,?,?,1,?,?)", sql(data.teamId ?? 1), text(data.name, "Automation name is required"), JSON.stringify(data.trigger ?? {}), JSON.stringify(data.condition ?? {}), JSON.stringify(data.action ?? {}), stamp, stamp);
|
|
103
|
+
return { automationId: lastInsertId(database), _status: 201 };
|
|
104
|
+
}
|
|
105
|
+
if (route === "/api/recurring" && method === "POST") {
|
|
106
|
+
run(database, "INSERT INTO recurring_rules(team_id,title,description,cadence,next_run,enabled,created_at) VALUES(?,?,?,?,?,1,?)", sql(data.teamId ?? 1), sql(data.title), sql(data.description ?? ""), sql(data.cadence ?? "Weekly"), sql(data.nextRun ?? stamp.slice(0, 10)), stamp);
|
|
107
|
+
return { ok: true, _status: 201 };
|
|
108
|
+
}
|
|
109
|
+
if (route === "/api/settings" && ["PUT", "PATCH"].includes(method)) {
|
|
110
|
+
const key = String(data.key ?? "");
|
|
111
|
+
if (!key)
|
|
112
|
+
fail("Setting key is required");
|
|
113
|
+
updateSetting(database, key, data.value ?? {});
|
|
114
|
+
if (key === "workspace" && isObject(data.value))
|
|
115
|
+
updateFields(database, "workspace", "id", 1, data.value, {
|
|
116
|
+
name: "name",
|
|
117
|
+
icon: "icon",
|
|
118
|
+
});
|
|
119
|
+
return { ok: true };
|
|
120
|
+
}
|
|
121
|
+
return { error: "Not found", _status: 404 };
|
|
122
|
+
}
|
|
123
|
+
function validateActorFields(database, data, method, route) {
|
|
124
|
+
const existing = {};
|
|
125
|
+
if (["PATCH", "PUT"].includes(method)) {
|
|
126
|
+
const issue = route.match(/^\/api\/issues\/([^/]+)$/);
|
|
127
|
+
if (issue) {
|
|
128
|
+
const row = one(database, "SELECT id,assignee_id FROM issues WHERE identifier=?", issue[1]);
|
|
129
|
+
if (row) {
|
|
130
|
+
existing.assigneeId = new Set(row.assignee_id == null ? [] : [Number(row.assignee_id)]);
|
|
131
|
+
existing.subscriberIds = new Set(rows(database, "SELECT member_id FROM issue_subscribers WHERE issue_id=?", sql(row.id)).map((item) => Number(item.member_id)));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const project = route.match(/^\/api\/projects\/(\d+)$/);
|
|
135
|
+
if (project) {
|
|
136
|
+
const row = one(database, "SELECT lead_id FROM projects WHERE id=?", Number(project[1]));
|
|
137
|
+
if (row) {
|
|
138
|
+
existing.leadId = new Set(row.lead_id == null ? [] : [Number(row.lead_id)]);
|
|
139
|
+
existing.memberIds = new Set(rows(database, "SELECT member_id FROM project_members WHERE project_id=?", Number(project[1])).map((item) => Number(item.member_id)));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const team = route.match(/^\/api\/teams\/(\d+)$/);
|
|
143
|
+
if (team)
|
|
144
|
+
existing.memberIds = new Set(rows(database, "SELECT member_id FROM team_members WHERE team_id=?", Number(team[1])).map((item) => Number(item.member_id)));
|
|
145
|
+
}
|
|
146
|
+
for (const field of ["assigneeId", "leadId", "memberIds", "subscriberIds"]) {
|
|
147
|
+
if (!(field in data))
|
|
148
|
+
continue;
|
|
149
|
+
const values = ["memberIds", "subscriberIds"].includes(field)
|
|
150
|
+
? array(data[field])
|
|
151
|
+
: [data[field]];
|
|
152
|
+
for (const value of values) {
|
|
153
|
+
if (value === null && ["assigneeId", "leadId"].includes(field))
|
|
154
|
+
continue;
|
|
155
|
+
if (!existing[field]?.has(Number(value)))
|
|
156
|
+
requireActor(database, value);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=workspace-mutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-mutations.js","sourceRoot":"","sources":["../src/workspace-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { actorRecord, actorRecords } from "./actors.js";
|
|
2
|
+
import { one, rows, sql } from "./database.js";
|
|
3
|
+
import { issueRow } from "./issues.js";
|
|
4
|
+
import { projectRecord } from "./projects.js";
|
|
5
|
+
import { cycleRecord } from "./teams.js";
|
|
6
|
+
import { parseJson } from "./workspace-helpers.js";
|
|
7
|
+
export function bootstrap(database, currentActor = 1) {
|
|
8
|
+
const workspace = one(database, "SELECT * FROM workspace LIMIT 1") ?? {};
|
|
9
|
+
const teams = rows(database, "SELECT * FROM teams ORDER BY id").map((team) => ({
|
|
10
|
+
...team,
|
|
11
|
+
members: rows(database, "SELECT member_id FROM team_members WHERE team_id=?", sql(team.id)).map((row) => actorRecord(database, Number(row.member_id))),
|
|
12
|
+
statuses: rows(database, "SELECT * FROM issue_statuses WHERE team_id=? ORDER BY position", sql(team.id)),
|
|
13
|
+
resources: rows(database, "SELECT * FROM team_resources WHERE team_id=? ORDER BY section,id", sql(team.id)),
|
|
14
|
+
}));
|
|
15
|
+
const projects = rows(database, "SELECT * FROM projects WHERE archived=0 ORDER BY id DESC").map((project) => projectRecord(database, project));
|
|
16
|
+
const issues = rows(database, "SELECT id FROM issues WHERE archived=0 ORDER BY number DESC").map((row) => issueRow(database, Number(row.id)));
|
|
17
|
+
const views = rows(database, "SELECT * FROM views ORDER BY is_favorite DESC,updated_at DESC").map(({ filters_json, display_json, ...view }) => ({
|
|
18
|
+
...view,
|
|
19
|
+
filters: parseJson(filters_json, {}),
|
|
20
|
+
display: parseJson(display_json, {}),
|
|
21
|
+
}));
|
|
22
|
+
const cycles = rows(database, "SELECT c.*,t.name AS team_name,t.key FROM cycles c JOIN teams t ON t.id=c.team_id ORDER BY c.starts_at DESC").map((cycle) => cycleRecord(database, cycle));
|
|
23
|
+
const settings = Object.fromEntries(rows(database, "SELECT * FROM app_settings").map((row) => [
|
|
24
|
+
String(row.key),
|
|
25
|
+
parseJson(row.value_json, {}),
|
|
26
|
+
]));
|
|
27
|
+
return {
|
|
28
|
+
workspace,
|
|
29
|
+
teams,
|
|
30
|
+
members: rows(database, "SELECT * FROM members WHERE active=1 ORDER BY name"),
|
|
31
|
+
issues,
|
|
32
|
+
projects,
|
|
33
|
+
views,
|
|
34
|
+
notifications: rows(database, "SELECT * FROM notifications WHERE archived=0 AND recipient_id=? ORDER BY created_at DESC", currentActor),
|
|
35
|
+
cycles,
|
|
36
|
+
statuses: rows(database, "SELECT * FROM issue_statuses ORDER BY team_id,position"),
|
|
37
|
+
labels: rows(database, "SELECT * FROM labels ORDER BY name"),
|
|
38
|
+
recurring: rows(database, "SELECT * FROM recurring_rules ORDER BY id"),
|
|
39
|
+
automations: rows(database, "SELECT * FROM automations ORDER BY id"),
|
|
40
|
+
archives: {
|
|
41
|
+
issues: rows(database, "SELECT id FROM issues WHERE archived=1 ORDER BY updated_at DESC").map((row) => issueRow(database, Number(row.id))),
|
|
42
|
+
projects: rows(database, "SELECT id,name,summary,status,updated_at FROM projects WHERE archived=1 ORDER BY updated_at DESC"),
|
|
43
|
+
},
|
|
44
|
+
settings,
|
|
45
|
+
currentMemberId: 1,
|
|
46
|
+
currentActorId: currentActor,
|
|
47
|
+
actors: actorRecords(database, null, true),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function search(database, query, scope = "All") {
|
|
51
|
+
const trimmed = query.trim();
|
|
52
|
+
if (!trimmed)
|
|
53
|
+
return { results: [] };
|
|
54
|
+
const like = `%${trimmed}%`;
|
|
55
|
+
const result = [];
|
|
56
|
+
if (["All", "Issues"].includes(scope))
|
|
57
|
+
result.push(...rows(database, "SELECT i.id,i.identifier AS key,i.title,s.name AS status,'Issue' AS type FROM issues i JOIN issue_statuses s ON s.id=i.status_id WHERE i.archived=0 AND (i.identifier LIKE ? OR i.title LIKE ? OR i.description LIKE ?) ORDER BY i.updated_at DESC LIMIT 40", like, like, like));
|
|
58
|
+
if (["All", "Projects"].includes(scope))
|
|
59
|
+
result.push(...rows(database, "SELECT id,id AS key,name AS title,status,'Project' AS type FROM projects WHERE archived=0 AND (name LIKE ? OR summary LIKE ? OR description LIKE ?) LIMIT 30", like, like, like));
|
|
60
|
+
return { results: result.slice(0, 80) };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=workspace-reads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-reads.js","sourceRoot":"","sources":["../src/workspace-reads.ts"],"names":[],"mappings":"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"}
|