@whatcha/cli 0.3.0 → 0.6.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 +120 -3
- package/dist/cli.js +18 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/diary-cover.js +54 -0
- package/dist/commands/diary-cover.js.map +1 -0
- package/dist/commands/entry.js +367 -0
- package/dist/commands/entry.js.map +1 -0
- package/dist/commands/profiles.js +125 -33
- package/dist/commands/profiles.js.map +1 -1
- package/dist/commands/read.js +7 -1
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/shared-diary.js +5 -3
- package/dist/commands/shared-diary.js.map +1 -1
- package/dist/commands/whoami.js +12 -2
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/write.js +187 -10
- package/dist/commands/write.js.map +1 -1
- package/dist/lib/append-entry.js +188 -52
- package/dist/lib/append-entry.js.map +1 -1
- package/dist/lib/entry-date.js +2 -2
- package/dist/lib/entry-date.js.map +1 -1
- package/dist/lib/entry-edit.js +75 -0
- package/dist/lib/entry-edit.js.map +1 -0
- package/dist/lib/entry-get.js +31 -0
- package/dist/lib/entry-get.js.map +1 -0
- package/dist/lib/profile-family.js +14 -0
- package/dist/lib/profile-family.js.map +1 -1
- package/package.json +2 -2
package/dist/lib/append-entry.js
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MAX_TAGS = exports.MAX_TAG_LENGTH = exports.MAX_TITLE_LENGTH = void 0;
|
|
3
|
+
exports.MAX_LOCATION_LENGTH = exports.MAX_MOOD_LENGTH = exports.MAX_TAGS = exports.MAX_TAG_LENGTH = exports.MAX_TITLE_LENGTH = void 0;
|
|
4
|
+
exports.headerOf = headerOf;
|
|
4
5
|
exports.normalizeTags = normalizeTags;
|
|
5
6
|
exports.mergeHeader = mergeHeader;
|
|
6
7
|
exports.writeEntry = writeEntry;
|
|
8
|
+
exports.readRange = readRange;
|
|
9
|
+
exports.saveRange = saveRange;
|
|
7
10
|
const errors_1 = require("../errors");
|
|
11
|
+
const entry_get_1 = require("./entry-get");
|
|
8
12
|
/** The API's own limits (entries-content.ts `contentSchema`). */
|
|
9
13
|
exports.MAX_TITLE_LENGTH = 200;
|
|
10
14
|
exports.MAX_TAG_LENGTH = 64;
|
|
11
15
|
exports.MAX_TAGS = 32;
|
|
16
|
+
exports.MAX_MOOD_LENGTH = 64;
|
|
17
|
+
exports.MAX_LOCATION_LENGTH = 200;
|
|
18
|
+
/** What the v1 entry surface answers for a range never set (diary-entries-service.ts `toEntries`). */
|
|
19
|
+
const UNSET_START = "00:00";
|
|
20
|
+
const UNSET_END = "23:59";
|
|
12
21
|
function existingEntryIdFrom(err) {
|
|
13
22
|
if (err.status !== 409 || err.code !== "VERSION_CONFLICT")
|
|
14
23
|
return null;
|
|
@@ -43,6 +52,36 @@ function normalizeTags(tags) {
|
|
|
43
52
|
* the append rule. Exported for the tests.
|
|
44
53
|
*/
|
|
45
54
|
function mergeHeader(header, meta) {
|
|
55
|
+
const base = mergeTitleAndTags(header, meta);
|
|
56
|
+
let merged = base.header;
|
|
57
|
+
const kept = {};
|
|
58
|
+
// #57: mood, place and coordinates follow the title's rule -- they fill
|
|
59
|
+
// an entry that has none and never replace what somebody else set.
|
|
60
|
+
// "Kept" means a different value was already there, as for the title.
|
|
61
|
+
const mood = meta.mood?.trim();
|
|
62
|
+
if (mood) {
|
|
63
|
+
const had = header.mood?.trim();
|
|
64
|
+
kept.moodKept = Boolean(had) && had !== mood;
|
|
65
|
+
if (!had)
|
|
66
|
+
merged = { ...merged, mood };
|
|
67
|
+
}
|
|
68
|
+
const location = meta.location?.trim();
|
|
69
|
+
if (location) {
|
|
70
|
+
const had = header.location?.trim();
|
|
71
|
+
kept.locationKept = Boolean(had) && had !== location;
|
|
72
|
+
if (!had)
|
|
73
|
+
merged = { ...merged, location };
|
|
74
|
+
}
|
|
75
|
+
if (meta.coordinates) {
|
|
76
|
+
const { lat, lng } = meta.coordinates;
|
|
77
|
+
const had = typeof header.locationLat === "number" && typeof header.locationLng === "number";
|
|
78
|
+
kept.coordinatesKept = had && (header.locationLat !== lat || header.locationLng !== lng);
|
|
79
|
+
if (!had)
|
|
80
|
+
merged = { ...merged, locationLat: lat, locationLng: lng };
|
|
81
|
+
}
|
|
82
|
+
return { header: merged, titleKept: base.titleKept, ...kept };
|
|
83
|
+
}
|
|
84
|
+
function mergeTitleAndTags(header, meta) {
|
|
46
85
|
const wanted = meta.title?.trim();
|
|
47
86
|
const hasTitle = Boolean(header.title && header.title.trim());
|
|
48
87
|
const title = hasTitle ? header.title : wanted ? wanted : header.title;
|
|
@@ -63,12 +102,17 @@ function mergeHeader(header, meta) {
|
|
|
63
102
|
* API's own `appendedBody` (apps/api/src/modules/diaries/entries/
|
|
64
103
|
* entries-content.ts, merged to master in #1424): existing text, trimmed,
|
|
65
104
|
* then a blank line, then the new text -- or just the new text if there was
|
|
66
|
-
* none yet.
|
|
105
|
+
* none yet. No text (only images or a cover, #51) leaves it as it was.
|
|
67
106
|
*/
|
|
68
107
|
function expectedAppendedBody(existingBody, text) {
|
|
69
108
|
const trimmed = existingBody.trimEnd();
|
|
109
|
+
if (!text.trim())
|
|
110
|
+
return trimmed;
|
|
70
111
|
return trimmed ? `${trimmed}\n\n${text}` : text;
|
|
71
112
|
}
|
|
113
|
+
function mediaOf(ids) {
|
|
114
|
+
return (ids ?? []).map((mediaAssetId) => ({ mediaAssetId }));
|
|
115
|
+
}
|
|
72
116
|
/**
|
|
73
117
|
* The one thing this whole command exists to get right: add `text` to
|
|
74
118
|
* `diaryId`'s entry for `occurredAt`'s day without ever touching what
|
|
@@ -104,21 +148,27 @@ function expectedAppendedBody(existingBody, text) {
|
|
|
104
148
|
async function writeEntry(client, diaryId, occurredAt, text, meta = {}) {
|
|
105
149
|
const title = meta.title?.trim() || undefined;
|
|
106
150
|
const tags = normalizeTags(meta.tags ?? []);
|
|
151
|
+
const cover = meta.coverMediaAssetId;
|
|
152
|
+
const images = meta.images ?? [];
|
|
153
|
+
const mood = meta.mood?.trim() || undefined;
|
|
154
|
+
const location = meta.location?.trim() || undefined;
|
|
155
|
+
const { coordinates, range } = meta;
|
|
156
|
+
let created;
|
|
107
157
|
try {
|
|
108
|
-
|
|
158
|
+
created = await client.post("/entries", {
|
|
109
159
|
diaryId,
|
|
110
160
|
occurredAt: occurredAt.toISOString(),
|
|
111
|
-
content: {
|
|
161
|
+
content: {
|
|
162
|
+
body: text,
|
|
163
|
+
...(title ? { title } : {}),
|
|
164
|
+
...(mood ? { mood } : {}),
|
|
165
|
+
...(location ? { location } : {}),
|
|
166
|
+
...(coordinates ? { locationLat: coordinates.lat, locationLng: coordinates.lng } : {}),
|
|
167
|
+
...(tags.length > 0 ? { tags } : {}),
|
|
168
|
+
...(cover ? { coverMediaAssetId: cover } : {}),
|
|
169
|
+
},
|
|
170
|
+
...(images.length > 0 ? { media: mediaOf(images) } : {}),
|
|
112
171
|
});
|
|
113
|
-
return {
|
|
114
|
-
entryId: created.id,
|
|
115
|
-
headCommitId: created.headCommitId,
|
|
116
|
-
mode: "created",
|
|
117
|
-
verified: null,
|
|
118
|
-
title: title ?? null,
|
|
119
|
-
tags,
|
|
120
|
-
titleKept: false,
|
|
121
|
-
};
|
|
122
172
|
}
|
|
123
173
|
catch (err) {
|
|
124
174
|
if (!(err instanceof errors_1.ApiError))
|
|
@@ -126,47 +176,133 @@ async function writeEntry(client, diaryId, occurredAt, text, meta = {}) {
|
|
|
126
176
|
const existingEntryId = existingEntryIdFrom(err);
|
|
127
177
|
if (!existingEntryId)
|
|
128
178
|
throw err;
|
|
129
|
-
return appendToExisting(client, existingEntryId, text, {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
content: { body: text, ...header },
|
|
139
|
-
appendBody: true,
|
|
140
|
-
expectedHeadCommitId: existing.headCommitId,
|
|
179
|
+
return appendToExisting(client, diaryId, existingEntryId, text, {
|
|
180
|
+
title,
|
|
181
|
+
tags,
|
|
182
|
+
images,
|
|
183
|
+
coverMediaAssetId: cover,
|
|
184
|
+
mood,
|
|
185
|
+
location,
|
|
186
|
+
coordinates,
|
|
187
|
+
range,
|
|
141
188
|
});
|
|
142
|
-
const verified = await verifyAppend(client, entryId, existing.body, text);
|
|
143
|
-
return { entryId, headCommitId: saved.headCommitId, mode: "appended", verified, ...after };
|
|
144
189
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
190
|
+
const headCommitId = range ? await saveRange(client, diaryId, created.id, range, created.headCommitId) : created.headCommitId;
|
|
191
|
+
return {
|
|
192
|
+
entryId: created.id,
|
|
193
|
+
headCommitId,
|
|
194
|
+
mode: "created",
|
|
195
|
+
verified: null,
|
|
196
|
+
title: title ?? null,
|
|
197
|
+
tags,
|
|
198
|
+
titleKept: false,
|
|
199
|
+
...(cover ? { coverKept: false } : {}),
|
|
200
|
+
...(mood ? { moodKept: false } : {}),
|
|
201
|
+
...(location ? { locationKept: false } : {}),
|
|
202
|
+
...(coordinates ? { coordinatesKept: false } : {}),
|
|
203
|
+
...(range ? { rangeKept: false, range } : {}),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The entry's time range (#57), as the v1 entry surface reports it -- the
|
|
208
|
+
* only one that does: `GET /entries/{id}` has no `start` / `end`. null
|
|
209
|
+
* when none was ever set (that surface answers 00:00-23:59 then).
|
|
210
|
+
*/
|
|
211
|
+
async function readRange(client, diaryId, entryId) {
|
|
212
|
+
const e = await client.get(`/diaries/${diaryId}/entries/${entryId}`);
|
|
213
|
+
const start = e.start_time || UNSET_START;
|
|
214
|
+
const end = e.end_time || UNSET_END;
|
|
215
|
+
return start === UNSET_START && end === UNSET_END ? null : { start, end };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Saves `range` into the entry's header (#57). `content` on `POST` / `PATCH
|
|
219
|
+
* /entries` has no field for it, so this is the call the app's calendar
|
|
220
|
+
* makes: `PATCH /diaries/{diaryId}/entries/{entryId}`, a details-only
|
|
221
|
+
* commit that carries the text, the rest of the header and every image
|
|
222
|
+
* over untouched. The new head commit's id, when the answer has one.
|
|
223
|
+
*/
|
|
224
|
+
async function saveRange(client, diaryId, entryId, range, headCommitId) {
|
|
225
|
+
const saved = await client.patch(`/diaries/${diaryId}/entries/${entryId}`, {
|
|
226
|
+
startTime: range.start,
|
|
227
|
+
endTime: range.end,
|
|
228
|
+
});
|
|
229
|
+
return saved?.head?.id ?? headCommitId;
|
|
230
|
+
}
|
|
231
|
+
async function appendToExisting(client, diaryId, entryId, text, meta) {
|
|
232
|
+
const existing = await (0, entry_get_1.getEntry)(client, entryId);
|
|
233
|
+
const merged = mergeHeader(headerOf(existing), meta);
|
|
234
|
+
const { titleKept, moodKept, locationKept, coordinatesKept } = merged;
|
|
235
|
+
let header = merged.header;
|
|
236
|
+
let coverKept;
|
|
237
|
+
if (meta.coverMediaAssetId) {
|
|
238
|
+
coverKept = Boolean(header.coverMediaAssetId);
|
|
239
|
+
if (!coverKept)
|
|
240
|
+
header = { ...header, coverMediaAssetId: meta.coverMediaAssetId };
|
|
169
241
|
}
|
|
242
|
+
// #57: read before the append, because the append itself clears it --
|
|
243
|
+
// a `PATCH /entries` save writes the header from `content`, which cannot
|
|
244
|
+
// carry a range -- so an existing range is put back afterwards, and only
|
|
245
|
+
// an entry without one takes the new one.
|
|
246
|
+
const existingRange = meta.range ? await readRange(client, diaryId, entryId) : null;
|
|
247
|
+
const range = meta.range ? (existingRange ?? meta.range) : undefined;
|
|
248
|
+
const after = {
|
|
249
|
+
title: header.title,
|
|
250
|
+
tags: header.tags,
|
|
251
|
+
titleKept,
|
|
252
|
+
...(coverKept !== undefined ? { coverKept } : {}),
|
|
253
|
+
...(moodKept !== undefined ? { moodKept } : {}),
|
|
254
|
+
...(locationKept !== undefined ? { locationKept } : {}),
|
|
255
|
+
...(coordinatesKept !== undefined ? { coordinatesKept } : {}),
|
|
256
|
+
...(range
|
|
257
|
+
? {
|
|
258
|
+
rangeKept: existingRange !== null &&
|
|
259
|
+
(existingRange.start !== meta.range.start || existingRange.end !== meta.range.end),
|
|
260
|
+
range,
|
|
261
|
+
}
|
|
262
|
+
: {}),
|
|
263
|
+
};
|
|
264
|
+
const withRange = async (r) => range ? { ...r, headCommitId: await saveRange(client, diaryId, entryId, range, r.headCommitId) } : r;
|
|
265
|
+
// Sent only when there are images to add: leaving `media` out keeps the entry's own.
|
|
266
|
+
const media = meta.images && meta.images.length > 0 ? { media: [...(0, entry_get_1.entryMedia)(existing), ...mediaOf(meta.images)] } : {};
|
|
267
|
+
const saveText = async () => {
|
|
268
|
+
try {
|
|
269
|
+
const saved = await client.patch(`/entries/${entryId}`, {
|
|
270
|
+
content: { body: text, ...header },
|
|
271
|
+
...media,
|
|
272
|
+
appendBody: true,
|
|
273
|
+
expectedHeadCommitId: existing.headCommitId,
|
|
274
|
+
});
|
|
275
|
+
const verified = await verifyAppend(client, entryId, existing.body, text);
|
|
276
|
+
return { entryId, headCommitId: saved.headCommitId, mode: "appended", verified, ...after };
|
|
277
|
+
}
|
|
278
|
+
catch (err) {
|
|
279
|
+
if (!(err instanceof errors_1.ApiError))
|
|
280
|
+
throw err;
|
|
281
|
+
if (err.status === 409)
|
|
282
|
+
throw concurrentWriteError(err);
|
|
283
|
+
if (!err.isUnrecognizedAppendBodyFlag())
|
|
284
|
+
throw err;
|
|
285
|
+
// Fallback: this server does not know appendBody. Merge client-side
|
|
286
|
+
// from the body we already read, and send the merged body as a plain
|
|
287
|
+
// replacement -- which is safe precisely because we just read what it
|
|
288
|
+
// is replacing.
|
|
289
|
+
const mergedBody = expectedAppendedBody(existing.body, text);
|
|
290
|
+
const saved = await client
|
|
291
|
+
.patch(`/entries/${entryId}`, {
|
|
292
|
+
content: { body: mergedBody, ...header },
|
|
293
|
+
...media,
|
|
294
|
+
expectedHeadCommitId: existing.headCommitId,
|
|
295
|
+
})
|
|
296
|
+
.catch((fallbackErr) => {
|
|
297
|
+
if (fallbackErr instanceof errors_1.ApiError && fallbackErr.status === 409)
|
|
298
|
+
throw concurrentWriteError(fallbackErr);
|
|
299
|
+
throw fallbackErr;
|
|
300
|
+
});
|
|
301
|
+
const verified = await verifyAppend(client, entryId, existing.body, text);
|
|
302
|
+
return { entryId, headCommitId: saved.headCommitId, mode: "appended-fallback", verified, ...after };
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
return withRange(await saveText());
|
|
170
306
|
}
|
|
171
307
|
function concurrentWriteError(err) {
|
|
172
308
|
return new errors_1.CliUsageError("Someone else saved to this entry while whatcha was writing to it. Nothing was overwritten -- " +
|
|
@@ -187,7 +323,7 @@ function concurrentWriteError(err) {
|
|
|
187
323
|
* this does not mistake a corrupted write for a clean one.
|
|
188
324
|
*/
|
|
189
325
|
async function verifyAppend(client, entryId, bodyBeforeWrite, text) {
|
|
190
|
-
const after = await
|
|
326
|
+
const after = await (0, entry_get_1.getEntry)(client, entryId);
|
|
191
327
|
return after.body === expectedAppendedBody(bodyBeforeWrite, text);
|
|
192
328
|
}
|
|
193
329
|
//# sourceMappingURL=append-entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"append-entry.js","sourceRoot":"","sources":["../../src/lib/append-entry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"append-entry.js","sourceRoot":"","sources":["../../src/lib/append-entry.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/entry-date.js
CHANGED
|
@@ -20,9 +20,9 @@ function assertValidDate(date) {
|
|
|
20
20
|
throw new errors_1.CliUsageError(`--date "${date}" is not a real calendar date.`);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
function assertValidTime(time) {
|
|
23
|
+
function assertValidTime(time, flag = "--time") {
|
|
24
24
|
if (!TIME_RE.test(time))
|
|
25
|
-
throw new errors_1.CliUsageError(
|
|
25
|
+
throw new errors_1.CliUsageError(`${flag} must be HH:MM (24h), got "${time}".`);
|
|
26
26
|
}
|
|
27
27
|
/** "YYYY-MM-DD" for `date`, as read in `timeZone` -- what day the diary's own §11.4 uniqueness check would see. */
|
|
28
28
|
function dateKeyInTimeZone(date, timeZone) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-date.js","sourceRoot":"","sources":["../../src/lib/entry-date.ts"],"names":[],"mappings":";;AAKA,0CASC;AAED,0CAEC;AAGD,8CAMC;AAGD,8CAOC;AAcD,wCAIC;AA+BD,8CAUC;AAhGD,sCAA0C;AAE1C,MAAM,OAAO,GAAG,qBAAqB,CAAC;AACtC,MAAM,OAAO,GAAG,6BAA6B,CAAC;AAE9C,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,sBAAa,CAAC,mCAAmC,IAAI,IAAI,CAAC,CAAC;IAC9F,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1G,MAAM,IAAI,sBAAa,CAAC,WAAW,IAAI,gCAAgC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;
|
|
1
|
+
{"version":3,"file":"entry-date.js","sourceRoot":"","sources":["../../src/lib/entry-date.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getBlame = getBlame;
|
|
4
|
+
exports.otherWriters = otherWriters;
|
|
5
|
+
exports.blameMatches = blameMatches;
|
|
6
|
+
exports.replaceMyPart = replaceMyPart;
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
/** The blame of `versionId` (the head the caller is about to save on top of), so it describes exactly that text. */
|
|
9
|
+
async function getBlame(client, entryId, versionId) {
|
|
10
|
+
try {
|
|
11
|
+
return await client.get(`/entries/${entryId}/blame`, versionId ? { versionId } : undefined);
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
// An entry without a single commit has no lines to attribute.
|
|
15
|
+
if (err instanceof errors_1.ApiError && err.status === 404 && !versionId)
|
|
16
|
+
return [];
|
|
17
|
+
throw err;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const isBlank = (line) => line.content.trim().length === 0;
|
|
21
|
+
/** The other people with words in the entry: display names (or handles), once each, in order of first appearance. */
|
|
22
|
+
function otherWriters(blame, myId) {
|
|
23
|
+
const names = [];
|
|
24
|
+
for (const line of blame) {
|
|
25
|
+
if (isBlank(line) || line.author?.id === myId)
|
|
26
|
+
continue;
|
|
27
|
+
const a = line.author;
|
|
28
|
+
const name = a?.displayName || (a?.username ? `@${a.username}` : null) || "someone";
|
|
29
|
+
if (!names.includes(name))
|
|
30
|
+
names.push(name);
|
|
31
|
+
}
|
|
32
|
+
return names;
|
|
33
|
+
}
|
|
34
|
+
/** True when `blame` is a line-by-line description of `body` -- checked before a splice trusts its line numbers. */
|
|
35
|
+
function blameMatches(blame, body) {
|
|
36
|
+
return blame.map((l) => l.content).join("\n").trimEnd() === body.trimEnd();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* `body` with the lines `myId` wrote replaced by `text` -- the rest exactly
|
|
40
|
+
* as it was. Your part is the run from your first written line to your last;
|
|
41
|
+
* blank lines inside it count as yours (they are the separators `whatcha
|
|
42
|
+
* write` puts between appends). Empty `text` removes your part, and the
|
|
43
|
+
* blank lines around it collapse to one paragraph break.
|
|
44
|
+
*
|
|
45
|
+
* Refuses rather than guesses when there is nothing of yours, or when
|
|
46
|
+
* somebody else's words sit between your first line and your last: either
|
|
47
|
+
* way there is no one "your part" to replace.
|
|
48
|
+
*/
|
|
49
|
+
function replaceMyPart(blame, myId, text) {
|
|
50
|
+
const mine = blame.map((l, i) => (!isBlank(l) && l.author?.id === myId ? i : -1)).filter((i) => i >= 0);
|
|
51
|
+
if (mine.length === 0) {
|
|
52
|
+
throw new errors_1.CliUsageError("You have not written anything in this entry, so --mine has nothing to replace. " +
|
|
53
|
+
"Use `whatcha write` to add to it.");
|
|
54
|
+
}
|
|
55
|
+
const first = mine[0];
|
|
56
|
+
const last = mine[mine.length - 1];
|
|
57
|
+
const between = blame.slice(first, last + 1).filter((l) => !isBlank(l) && l.author?.id !== myId);
|
|
58
|
+
if (between.length > 0) {
|
|
59
|
+
throw new errors_1.CliUsageError(`Your text in this entry is interleaved with ${otherWriters(between, myId).join(", ")}'s ` +
|
|
60
|
+
`(line ${between[0].lineNumber}), so there is no one part of yours to replace. ` +
|
|
61
|
+
"Edit it in the app, or replace the whole text with --all.");
|
|
62
|
+
}
|
|
63
|
+
const before = blame.slice(0, first).map((l) => l.content);
|
|
64
|
+
const after = blame.slice(last + 1).map((l) => l.content);
|
|
65
|
+
const middle = text.replace(/\s+$/, "");
|
|
66
|
+
if (!middle) {
|
|
67
|
+
const head = before.join("\n").trimEnd();
|
|
68
|
+
const rest = after.join("\n").replace(/^(\s*\n)+/, "").trimEnd();
|
|
69
|
+
return [head, rest].filter((s) => s.length > 0).join("\n\n");
|
|
70
|
+
}
|
|
71
|
+
// The new text goes exactly where yours was, between the same lines --
|
|
72
|
+
// the line breaks around your part are the ones the entry already had.
|
|
73
|
+
return [...before, middle, ...after].join("\n").trimEnd();
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=entry-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-edit.js","sourceRoot":"","sources":["../../src/lib/entry-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getEntry = getEntry;
|
|
4
|
+
exports.entryBody = entryBody;
|
|
5
|
+
exports.entryMedia = entryMedia;
|
|
6
|
+
/**
|
|
7
|
+
* `GET /entries/:id`, with `body` always a string (#53).
|
|
8
|
+
*
|
|
9
|
+
* The API answers with the commit's `items`; a top-level `body` came back
|
|
10
|
+
* only with the fix for #53. Every server without it made `whatcha read`
|
|
11
|
+
* print "undefined" and made `whatcha write` unable to confirm that an
|
|
12
|
+
* append kept the text before it. So the text item is the fallback, and
|
|
13
|
+
* nothing here trusts `body` to be present.
|
|
14
|
+
*/
|
|
15
|
+
async function getEntry(client, entryId) {
|
|
16
|
+
const entry = await client.get(`/entries/${entryId}`);
|
|
17
|
+
return { ...entry, body: entryBody(entry) };
|
|
18
|
+
}
|
|
19
|
+
function entryBody(entry) {
|
|
20
|
+
if (typeof entry.body === "string")
|
|
21
|
+
return entry.body;
|
|
22
|
+
const text = (entry.items ?? []).find((i) => i.type === "text" && i.text);
|
|
23
|
+
return text?.text?.content ?? "";
|
|
24
|
+
}
|
|
25
|
+
/** The entry's images in order, as a save must resend them to keep them. */
|
|
26
|
+
function entryMedia(entry) {
|
|
27
|
+
return (entry.items ?? [])
|
|
28
|
+
.filter((i) => i.type === "media" && i.media?.mediaAssetId)
|
|
29
|
+
.map((i) => ({ mediaAssetId: i.media.mediaAssetId, caption: i.media.caption ?? null }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=entry-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-get.js","sourceRoot":"","sources":["../../src/lib/entry-get.ts"],"names":[],"mappings":";;AAYA,4BAGC;AAED,8BAIC;AAGD,gCAIC;AAzBD;;;;;;;;GAQG;AACI,KAAK,UAAU,QAAQ,CAAC,MAAqB,EAAE,OAAe;IACnE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAc,YAAY,OAAO,EAAE,CAAC,CAAC;IACnE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,SAAgB,SAAS,CAAC,KAA0C;IAClE,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,4EAA4E;AAC5E,SAAgB,UAAU,CAAC,KAAiC;IAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,KAAM,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,KAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.findProfile = findProfile;
|
|
4
4
|
exports.bearerClients = bearerClients;
|
|
5
5
|
exports.clientAsProfile = clientAsProfile;
|
|
6
|
+
exports.currentProfile = currentProfile;
|
|
6
7
|
const http_client_1 = require("../http-client");
|
|
7
8
|
/** A profile of this login by @handle (the `@` optional, case-insensitive) or id. */
|
|
8
9
|
function findProfile(profiles, target) {
|
|
@@ -26,4 +27,17 @@ async function clientAsProfile(client, profileId, forToken) {
|
|
|
26
27
|
const issued = await client.post(`/me/profiles/${profileId}/session`, {});
|
|
27
28
|
return forToken(issued.accessToken);
|
|
28
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* The profile `client` acts as, asked of the server (#58).
|
|
32
|
+
*
|
|
33
|
+
* The saved session's `userId` is a note the CLI keeps, not the credential:
|
|
34
|
+
* 0.4.0's `switch --account` swapped the token back to the account's but
|
|
35
|
+
* left the sub-profile's id in that note, so `switch @that-profile` then
|
|
36
|
+
* answered "Already writing as" without switching, and `profile-avatar`
|
|
37
|
+
* set the account's picture while meaning the profile's. Anything that
|
|
38
|
+
* decides "is this the profile in use?" asks here instead.
|
|
39
|
+
*/
|
|
40
|
+
async function currentProfile(client) {
|
|
41
|
+
return client.get("/me");
|
|
42
|
+
}
|
|
29
43
|
//# sourceMappingURL=profile-family.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-family.js","sourceRoot":"","sources":["../../src/lib/profile-family.ts"],"names":[],"mappings":";;AA+BA,kCAGC;AAKD,sCAEC;AAYD,0CAOC;
|
|
1
|
+
{"version":3,"file":"profile-family.js","sourceRoot":"","sources":["../../src/lib/profile-family.ts"],"names":[],"mappings":";;AA+BA,kCAGC;AAKD,sCAEC;AAYD,0CAOC;AAoBD,wCAEC;AAlFD,gDAAwE;AA8BxE,qFAAqF;AACrF,SAAgB,WAAW,CAAC,QAA6B,EAAE,MAAc;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;AAC9F,CAAC;AAKD,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,gCAAkB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,eAAe,CACnC,MAAqB,EACrB,SAAiB,EACjB,QAAwB;IAExB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,gBAAgB,SAAS,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1F,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACtC,CAAC;AAUD;;;;;;;;;GASG;AACI,KAAK,UAAU,cAAc,CAAC,MAAqB;IACxD,OAAO,MAAM,CAAC,GAAG,CAAK,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whatcha/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Official command-line client for what-are-you-do-ing (whatareyoudo.ing) -- login (password or personal access key), list diaries, write and
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Official command-line client for what-are-you-do-ing (whatareyoudo.ing) -- login (password or personal access key), list diaries, write, read, edit and delete entries, switch profiles, read and write the Experience Wiki, with images.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://whatareyoudo.ing/cli",
|
|
7
7
|
"repository": {
|