@relayfile/adapter-linear 0.1.4 → 0.1.6

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.
Files changed (39) hide show
  1. package/dist/__tests__/linear-adapter.test.d.ts +2 -0
  2. package/dist/__tests__/linear-adapter.test.d.ts.map +1 -0
  3. package/dist/__tests__/linear-adapter.test.js +295 -0
  4. package/dist/__tests__/linear-adapter.test.js.map +1 -0
  5. package/dist/__tests__/types.test.d.ts +2 -0
  6. package/dist/__tests__/types.test.d.ts.map +1 -0
  7. package/dist/__tests__/types.test.js +19 -0
  8. package/dist/__tests__/types.test.js.map +1 -0
  9. package/dist/__tests__/webhook-normalizer.test.d.ts +2 -0
  10. package/dist/__tests__/webhook-normalizer.test.d.ts.map +1 -0
  11. package/dist/__tests__/webhook-normalizer.test.js +59 -0
  12. package/dist/__tests__/webhook-normalizer.test.js.map +1 -0
  13. package/{src/index.ts → dist/index.d.ts} +1 -1
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/linear-adapter.d.ts +73 -0
  17. package/dist/linear-adapter.d.ts.map +1 -0
  18. package/dist/linear-adapter.js +484 -0
  19. package/dist/linear-adapter.js.map +1 -0
  20. package/dist/path-mapper.d.ts +11 -0
  21. package/dist/path-mapper.d.ts.map +1 -0
  22. package/dist/path-mapper.js +57 -0
  23. package/dist/path-mapper.js.map +1 -0
  24. package/dist/types.d.ts +142 -0
  25. package/dist/types.d.ts.map +1 -0
  26. package/dist/types.js +3 -0
  27. package/dist/types.js.map +1 -0
  28. package/dist/webhook-normalizer.d.ts +43 -0
  29. package/dist/webhook-normalizer.d.ts.map +1 -0
  30. package/dist/webhook-normalizer.js +519 -0
  31. package/dist/webhook-normalizer.js.map +1 -0
  32. package/package.json +13 -4
  33. package/src/__tests__/linear-adapter.test.ts +0 -345
  34. package/src/__tests__/types.test.ts +0 -27
  35. package/src/__tests__/webhook-normalizer.test.ts +0 -77
  36. package/src/linear-adapter.ts +0 -680
  37. package/src/path-mapper.ts +0 -69
  38. package/src/types.ts +0 -164
  39. package/src/webhook-normalizer.ts +0 -721
@@ -0,0 +1,484 @@
1
+ import { computeLinearPath, linearCyclePath, linearIssuePath, linearProjectPath, normalizeLinearObjectType, } from './path-mapper.js';
2
+ export class IntegrationAdapter {
3
+ client;
4
+ provider;
5
+ constructor(client, provider) {
6
+ this.client = client;
7
+ this.provider = provider;
8
+ }
9
+ }
10
+ const JSON_CONTENT_TYPE = 'application/json; charset=utf-8';
11
+ const SUPPORTED_EVENTS = ['comment', 'cycle', 'issue', 'project'];
12
+ const LINEAR_PROVIDER_NAME = 'linear';
13
+ export class LinearAdapter extends IntegrationAdapter {
14
+ name = LINEAR_PROVIDER_NAME;
15
+ version = '0.1.0';
16
+ config;
17
+ constructor(client, provider, config = {}) {
18
+ super(client, provider);
19
+ this.config = config;
20
+ }
21
+ supportedEvents() {
22
+ return SUPPORTED_EVENTS.flatMap((objectType) => [
23
+ `${objectType}.create`,
24
+ `${objectType}.update`,
25
+ `${objectType}.remove`,
26
+ ]);
27
+ }
28
+ async ingestWebhook(workspaceId, event) {
29
+ try {
30
+ const normalized = this.normalizeEvent(event);
31
+ const path = this.computePath(normalized.objectType, normalized.objectId);
32
+ if (this.isRemoveEvent(normalized)) {
33
+ if (this.client.deleteFile) {
34
+ await this.client.deleteFile({ workspaceId, path });
35
+ return {
36
+ filesWritten: 0,
37
+ filesUpdated: 0,
38
+ filesDeleted: 1,
39
+ paths: [path],
40
+ errors: [],
41
+ };
42
+ }
43
+ const deleteResult = await this.client.writeFile({
44
+ workspaceId,
45
+ path,
46
+ content: this.renderContent(workspaceId, normalized, true),
47
+ contentType: JSON_CONTENT_TYPE,
48
+ semantics: this.computeSemantics(normalized.objectType, normalized.objectId, normalized.payload),
49
+ });
50
+ const counts = inferWriteCounts(normalized, deleteResult, true);
51
+ return {
52
+ filesWritten: counts.filesWritten,
53
+ filesUpdated: counts.filesUpdated,
54
+ filesDeleted: counts.filesDeleted,
55
+ paths: [path],
56
+ errors: [],
57
+ };
58
+ }
59
+ const writeResult = await this.client.writeFile({
60
+ workspaceId,
61
+ path,
62
+ content: this.renderContent(workspaceId, normalized, false),
63
+ contentType: JSON_CONTENT_TYPE,
64
+ semantics: this.computeSemantics(normalized.objectType, normalized.objectId, normalized.payload),
65
+ });
66
+ const counts = inferWriteCounts(normalized, writeResult, false);
67
+ return {
68
+ filesWritten: counts.filesWritten,
69
+ filesUpdated: counts.filesUpdated,
70
+ filesDeleted: 0,
71
+ paths: [path],
72
+ errors: [],
73
+ };
74
+ }
75
+ catch (error) {
76
+ const fallbackPath = inferFallbackPath(event);
77
+ return {
78
+ filesWritten: 0,
79
+ filesUpdated: 0,
80
+ filesDeleted: 0,
81
+ paths: fallbackPath ? [fallbackPath] : [],
82
+ errors: [
83
+ {
84
+ path: fallbackPath,
85
+ error: toErrorMessage(error),
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ }
91
+ computePath(objectType, objectId) {
92
+ return computeLinearPath(objectType, objectId);
93
+ }
94
+ computeSemantics(objectType, objectId, payload) {
95
+ const normalizedType = normalizeLinearObjectType(objectType);
96
+ const properties = {
97
+ provider: LINEAR_PROVIDER_NAME,
98
+ 'provider.object_id': objectId,
99
+ 'provider.object_type': normalizedType,
100
+ 'linear.id': objectId,
101
+ 'linear.object_type': normalizedType,
102
+ };
103
+ const relations = new Set();
104
+ const comments = [];
105
+ addStringProperty(properties, 'linear.url', payload.url);
106
+ const webhook = getRecord(payload._webhook);
107
+ if (webhook) {
108
+ addStringProperty(properties, 'linear.webhook.action', webhook.action);
109
+ addStringProperty(properties, 'linear.webhook.created_at', webhook.createdAt);
110
+ addStringProperty(properties, 'linear.webhook.organization_id', webhook.organizationId);
111
+ addStringProperty(properties, 'linear.webhook.url', webhook.url);
112
+ }
113
+ switch (normalizedType) {
114
+ case 'issue':
115
+ applyIssueSemantics(properties, relations, payload);
116
+ break;
117
+ case 'comment':
118
+ applyCommentSemantics(properties, relations, comments, payload);
119
+ break;
120
+ case 'project':
121
+ applyProjectSemantics(properties, payload);
122
+ break;
123
+ case 'cycle':
124
+ applyCycleSemantics(properties, payload);
125
+ break;
126
+ }
127
+ const semantics = {
128
+ properties,
129
+ relations: sortStrings(relations),
130
+ };
131
+ if (comments.length > 0) {
132
+ semantics.comments = comments;
133
+ }
134
+ return compactSemantics(semantics);
135
+ }
136
+ normalizeEvent(event) {
137
+ if (isNormalizedWebhook(event)) {
138
+ const normalized = {
139
+ provider: event.provider || this.config.provider || LINEAR_PROVIDER_NAME,
140
+ eventType: event.eventType,
141
+ objectType: normalizeLinearObjectType(event.objectType),
142
+ objectId: event.objectId.trim(),
143
+ payload: event.payload,
144
+ };
145
+ const connectionId = event.connectionId || this.config.connectionId;
146
+ if (connectionId) {
147
+ normalized.connectionId = connectionId;
148
+ }
149
+ return normalized;
150
+ }
151
+ const objectType = normalizeLinearObjectType(event.type);
152
+ const objectId = extractPayloadId(event.data);
153
+ if (!objectId) {
154
+ throw new Error(`Linear ${objectType} webhook is missing data.id`);
155
+ }
156
+ const payload = mergeLinearPayload(event);
157
+ const normalized = {
158
+ provider: this.config.provider || LINEAR_PROVIDER_NAME,
159
+ eventType: `${objectType}.${String(event.action)}`,
160
+ objectType,
161
+ objectId,
162
+ payload,
163
+ };
164
+ if (this.config.connectionId) {
165
+ normalized.connectionId = this.config.connectionId;
166
+ }
167
+ return normalized;
168
+ }
169
+ isRemoveEvent(event) {
170
+ const action = getWebhookAction(event.payload) ?? getEventAction(event.eventType);
171
+ return action === 'remove';
172
+ }
173
+ renderContent(workspaceId, event, deleted) {
174
+ return stableJson({
175
+ provider: event.provider,
176
+ connectionId: event.connectionId ?? null,
177
+ workspaceId,
178
+ eventType: event.eventType,
179
+ objectType: normalizeLinearObjectType(event.objectType),
180
+ objectId: event.objectId,
181
+ deleted,
182
+ payload: event.payload,
183
+ });
184
+ }
185
+ }
186
+ function applyIssueSemantics(properties, relations, payload) {
187
+ const issue = payload;
188
+ addStringProperty(properties, 'linear.identifier', issue.identifier);
189
+ addStringProperty(properties, 'linear.title', issue.title);
190
+ addStringProperty(properties, 'linear.branch_name', issue.branchName);
191
+ addStringProperty(properties, 'linear.due_date', issue.dueDate);
192
+ addStringProperty(properties, 'linear.created_at', issue.createdAt);
193
+ addStringProperty(properties, 'linear.updated_at', issue.updatedAt);
194
+ addStringProperty(properties, 'linear.completed_at', issue.completedAt);
195
+ addStringProperty(properties, 'linear.canceled_at', issue.canceledAt);
196
+ addNumberProperty(properties, 'linear.estimate', issue.estimate);
197
+ const priority = asNumber(issue.priority);
198
+ if (priority !== undefined) {
199
+ properties['linear.priority'] = String(priority);
200
+ properties['linear.priority_label'] = mapPriorityLabel(priority);
201
+ }
202
+ const state = issue.state;
203
+ if (state) {
204
+ addStringProperty(properties, 'linear.state_id', state.id);
205
+ addStringProperty(properties, 'linear.state_name', state.name);
206
+ addStringProperty(properties, 'linear.state_type', state.type);
207
+ addStringProperty(properties, 'linear.state_color', state.color);
208
+ }
209
+ const assignee = issue.assignee;
210
+ if (assignee) {
211
+ addStringProperty(properties, 'linear.assignee_id', assignee.id);
212
+ addStringProperty(properties, 'linear.assignee_name', assignee.displayName ?? assignee.name);
213
+ addStringProperty(properties, 'linear.assignee_email', assignee.email);
214
+ addStringProperty(properties, 'linear.assignee_url', assignee.url);
215
+ }
216
+ const creator = issue.creator;
217
+ if (creator) {
218
+ addStringProperty(properties, 'linear.creator_id', creator.id);
219
+ addStringProperty(properties, 'linear.creator_name', creator.displayName ?? creator.name);
220
+ }
221
+ const labels = asLabels(issue.labels);
222
+ if (labels.length > 0) {
223
+ const labelNames = labels
224
+ .map((label) => label.name.trim())
225
+ .filter((name) => name.length > 0)
226
+ .sort((left, right) => left.localeCompare(right));
227
+ if (labelNames.length > 0) {
228
+ properties['linear.labels'] = labelNames.join(', ');
229
+ properties['linear.label_count'] = String(labelNames.length);
230
+ }
231
+ }
232
+ if (issue.project?.id) {
233
+ relations.add(linearProjectPath(issue.project.id));
234
+ addStringProperty(properties, 'linear.project_id', issue.project.id);
235
+ addStringProperty(properties, 'linear.project_name', issue.project.name);
236
+ addStringProperty(properties, 'linear.project_state', issue.project.state);
237
+ addStringProperty(properties, 'linear.project_url', issue.project.url);
238
+ }
239
+ if (issue.cycle?.id) {
240
+ relations.add(linearCyclePath(issue.cycle.id));
241
+ addStringProperty(properties, 'linear.cycle_id', issue.cycle.id);
242
+ addNumberProperty(properties, 'linear.cycle_number', issue.cycle.number);
243
+ addStringProperty(properties, 'linear.cycle_name', issue.cycle.name);
244
+ }
245
+ if (issue.parent?.id) {
246
+ relations.add(linearIssuePath(issue.parent.id));
247
+ addStringProperty(properties, 'linear.parent_id', issue.parent.id);
248
+ }
249
+ for (const child of issue.children ?? []) {
250
+ if (child.id) {
251
+ relations.add(linearIssuePath(child.id));
252
+ }
253
+ }
254
+ for (const relation of asRelations(issue.relations)) {
255
+ if (relation.relatedIssueId) {
256
+ relations.add(linearIssuePath(relation.relatedIssueId));
257
+ }
258
+ }
259
+ if (issue.team?.id) {
260
+ addStringProperty(properties, 'linear.team_id', issue.team.id);
261
+ addStringProperty(properties, 'linear.team_key', issue.team.key);
262
+ addStringProperty(properties, 'linear.team_name', issue.team.name);
263
+ }
264
+ }
265
+ function applyCommentSemantics(properties, relations, comments, payload) {
266
+ const comment = payload;
267
+ addStringProperty(properties, 'linear.created_at', comment.createdAt);
268
+ addStringProperty(properties, 'linear.updated_at', comment.updatedAt);
269
+ const author = comment.user;
270
+ if (author) {
271
+ addStringProperty(properties, 'linear.author_id', author.id);
272
+ addStringProperty(properties, 'linear.author_name', author.displayName ?? author.name);
273
+ addStringProperty(properties, 'linear.author_email', author.email);
274
+ addStringProperty(properties, 'linear.author_url', author.url);
275
+ }
276
+ if (comment.issue?.id) {
277
+ relations.add(linearIssuePath(comment.issue.id));
278
+ addStringProperty(properties, 'linear.issue_id', comment.issue.id);
279
+ addStringProperty(properties, 'linear.issue_identifier', comment.issue.identifier);
280
+ addStringProperty(properties, 'linear.issue_title', comment.issue.title);
281
+ addStringProperty(properties, 'linear.issue_url', comment.issue.url);
282
+ }
283
+ const body = asString(comment.body);
284
+ if (body) {
285
+ comments.push(body);
286
+ properties['linear.comment_length'] = String(body.length);
287
+ }
288
+ }
289
+ function applyProjectSemantics(properties, payload) {
290
+ const project = payload;
291
+ addStringProperty(properties, 'linear.name', project.name);
292
+ addStringProperty(properties, 'linear.state', project.state);
293
+ addStringProperty(properties, 'linear.target_date', project.targetDate);
294
+ addStringProperty(properties, 'linear.started_at', project.startedAt);
295
+ addStringProperty(properties, 'linear.completed_at', project.completedAt);
296
+ const progress = asNumber(project.progress);
297
+ if (progress !== undefined) {
298
+ properties['linear.progress'] = String(progress);
299
+ }
300
+ }
301
+ function applyCycleSemantics(properties, payload) {
302
+ const cycle = payload;
303
+ addNumberProperty(properties, 'linear.number', cycle.number);
304
+ addStringProperty(properties, 'linear.name', cycle.name);
305
+ addStringProperty(properties, 'linear.starts_at', cycle.startsAt);
306
+ addStringProperty(properties, 'linear.ends_at', cycle.endsAt);
307
+ addStringProperty(properties, 'linear.completed_at', cycle.completedAt);
308
+ }
309
+ function asLabels(labels) {
310
+ return Array.isArray(labels) ? labels.filter((label) => Boolean(label?.name)) : [];
311
+ }
312
+ function asRelations(relations) {
313
+ return Array.isArray(relations)
314
+ ? relations.filter((relation) => Boolean(relation?.relatedIssueId))
315
+ : [];
316
+ }
317
+ function mergeLinearPayload(event) {
318
+ const data = getRecord(event.data) ?? {};
319
+ return {
320
+ ...data,
321
+ _webhook: compactObject({
322
+ action: asString(event.action),
323
+ actionBy: event.actionBy ?? undefined,
324
+ createdAt: asString(event.createdAt),
325
+ organization: event.organization ?? undefined,
326
+ organizationId: asString(event.organizationId),
327
+ previousData: event.previousData ?? undefined,
328
+ type: asString(event.type),
329
+ url: asString(event.url),
330
+ }),
331
+ };
332
+ }
333
+ function inferWriteCounts(event, writeResult, deleted) {
334
+ if (deleted) {
335
+ if (writeResult?.status === 'created' || writeResult?.created) {
336
+ return { filesWritten: 1, filesUpdated: 0, filesDeleted: 0 };
337
+ }
338
+ return { filesWritten: 0, filesUpdated: 1, filesDeleted: 0 };
339
+ }
340
+ if (writeResult?.created || writeResult?.status === 'created') {
341
+ return { filesWritten: 1, filesUpdated: 0, filesDeleted: 0 };
342
+ }
343
+ if (writeResult?.updated || writeResult?.status === 'updated') {
344
+ return { filesWritten: 0, filesUpdated: 1, filesDeleted: 0 };
345
+ }
346
+ const action = getWebhookAction(event.payload) ?? getEventAction(event.eventType);
347
+ if (action === 'create') {
348
+ return { filesWritten: 1, filesUpdated: 0, filesDeleted: 0 };
349
+ }
350
+ return { filesWritten: 0, filesUpdated: 1, filesDeleted: 0 };
351
+ }
352
+ function getWebhookAction(payload) {
353
+ return asString(getRecord(payload._webhook)?.action)?.toLowerCase();
354
+ }
355
+ function getEventAction(eventType) {
356
+ const separatorIndex = eventType.lastIndexOf('.');
357
+ if (separatorIndex === -1 || separatorIndex === eventType.length - 1) {
358
+ return undefined;
359
+ }
360
+ return eventType.slice(separatorIndex + 1).toLowerCase();
361
+ }
362
+ function inferFallbackPath(event) {
363
+ try {
364
+ if (isNormalizedWebhook(event)) {
365
+ return computeLinearPath(event.objectType, event.objectId);
366
+ }
367
+ const objectId = extractPayloadId(event.data);
368
+ if (!objectId) {
369
+ return '';
370
+ }
371
+ return computeLinearPath(event.type, objectId);
372
+ }
373
+ catch {
374
+ return '';
375
+ }
376
+ }
377
+ function extractPayloadId(value) {
378
+ const record = getRecord(value);
379
+ return asString(record?.id);
380
+ }
381
+ function isNormalizedWebhook(event) {
382
+ return (isRecord(event) &&
383
+ typeof event.eventType === 'string' &&
384
+ typeof event.objectType === 'string' &&
385
+ typeof event.objectId === 'string' &&
386
+ isRecord(event.payload));
387
+ }
388
+ function addStringProperty(properties, key, value) {
389
+ const normalized = asString(value);
390
+ if (normalized) {
391
+ properties[key] = normalized;
392
+ }
393
+ }
394
+ function addNumberProperty(properties, key, value) {
395
+ const normalized = asNumber(value);
396
+ if (normalized !== undefined) {
397
+ properties[key] = String(normalized);
398
+ }
399
+ }
400
+ function compactSemantics(semantics) {
401
+ const compacted = {};
402
+ if (semantics.properties && Object.keys(semantics.properties).length > 0) {
403
+ compacted.properties = semantics.properties;
404
+ }
405
+ if (semantics.relations && semantics.relations.length > 0) {
406
+ compacted.relations = semantics.relations;
407
+ }
408
+ if (semantics.comments && semantics.comments.length > 0) {
409
+ compacted.comments = semantics.comments;
410
+ }
411
+ return compacted;
412
+ }
413
+ function compactObject(value) {
414
+ const entries = Object.entries(value).filter(([, entry]) => entry !== undefined);
415
+ return Object.fromEntries(entries);
416
+ }
417
+ function sortStrings(values) {
418
+ return Array.from(values).sort((left, right) => left.localeCompare(right));
419
+ }
420
+ function stableJson(value) {
421
+ return `${JSON.stringify(sortJson(value), null, 2)}\n`;
422
+ }
423
+ function sortJson(value) {
424
+ if (Array.isArray(value)) {
425
+ return value.map(sortJson);
426
+ }
427
+ if (isRecord(value)) {
428
+ const sortedEntries = Object.entries(value)
429
+ .sort(([left], [right]) => left.localeCompare(right))
430
+ .map(([key, entry]) => [key, sortJson(entry)]);
431
+ return Object.fromEntries(sortedEntries);
432
+ }
433
+ return value;
434
+ }
435
+ function getRecord(value) {
436
+ return isRecord(value) ? value : undefined;
437
+ }
438
+ function isRecord(value) {
439
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
440
+ }
441
+ function asString(value) {
442
+ if (typeof value !== 'string') {
443
+ return undefined;
444
+ }
445
+ const trimmed = value.trim();
446
+ return trimmed.length > 0 ? trimmed : undefined;
447
+ }
448
+ function asNumber(value) {
449
+ if (typeof value === 'number' && Number.isFinite(value)) {
450
+ return value;
451
+ }
452
+ if (typeof value === 'string') {
453
+ const trimmed = value.trim();
454
+ if (!trimmed) {
455
+ return undefined;
456
+ }
457
+ const parsed = Number(trimmed);
458
+ return Number.isFinite(parsed) ? parsed : undefined;
459
+ }
460
+ return undefined;
461
+ }
462
+ function mapPriorityLabel(priority) {
463
+ switch (priority) {
464
+ case 0:
465
+ return 'none';
466
+ case 1:
467
+ return 'urgent';
468
+ case 2:
469
+ return 'high';
470
+ case 3:
471
+ return 'normal';
472
+ case 4:
473
+ return 'low';
474
+ default:
475
+ return 'custom';
476
+ }
477
+ }
478
+ function toErrorMessage(error) {
479
+ if (error instanceof Error) {
480
+ return error.message;
481
+ }
482
+ return String(error);
483
+ }
484
+ //# sourceMappingURL=linear-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-adapter.js","sourceRoot":"","sources":["../src/linear-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const LINEAR_PATH_ROOT = "/linear";
2
+ export declare const LINEAR_OBJECT_TYPES: readonly ["comment", "cycle", "issue", "project"];
3
+ export type LinearPathObjectType = (typeof LINEAR_OBJECT_TYPES)[number];
4
+ export declare function encodeLinearPathSegment(value: string): string;
5
+ export declare function normalizeLinearObjectType(objectType: string): LinearPathObjectType;
6
+ export declare function linearIssuePath(issueId: string): string;
7
+ export declare function linearCommentPath(commentId: string): string;
8
+ export declare function linearProjectPath(projectId: string): string;
9
+ export declare function linearCyclePath(cycleId: string): string;
10
+ export declare function computeLinearPath(objectType: string, objectId: string): string;
11
+ //# sourceMappingURL=path-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-mapper.d.ts","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,eAAO,MAAM,mBAAmB,mDAAoD,CAAC;AAErF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAqBxE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAOlF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc9E"}
@@ -0,0 +1,57 @@
1
+ export const LINEAR_PATH_ROOT = '/linear';
2
+ export const LINEAR_OBJECT_TYPES = ['comment', 'cycle', 'issue', 'project'];
3
+ const OBJECT_TYPE_ALIASES = {
4
+ comment: 'comment',
5
+ comments: 'comment',
6
+ cycle: 'cycle',
7
+ cycles: 'cycle',
8
+ issue: 'issue',
9
+ issues: 'issue',
10
+ project: 'project',
11
+ projects: 'project',
12
+ };
13
+ function assertNonEmptySegment(value, label) {
14
+ const trimmed = value.trim();
15
+ if (!trimmed) {
16
+ throw new Error(`Linear ${label} must be a non-empty string`);
17
+ }
18
+ return trimmed;
19
+ }
20
+ export function encodeLinearPathSegment(value) {
21
+ return encodeURIComponent(assertNonEmptySegment(value, 'path segment'));
22
+ }
23
+ export function normalizeLinearObjectType(objectType) {
24
+ const normalized = objectType.trim().toLowerCase();
25
+ const mapped = OBJECT_TYPE_ALIASES[normalized];
26
+ if (!mapped) {
27
+ throw new Error(`Unsupported Linear object type: ${objectType}`);
28
+ }
29
+ return mapped;
30
+ }
31
+ export function linearIssuePath(issueId) {
32
+ return `${LINEAR_PATH_ROOT}/issues/${encodeLinearPathSegment(issueId)}.json`;
33
+ }
34
+ export function linearCommentPath(commentId) {
35
+ return `${LINEAR_PATH_ROOT}/comments/${encodeLinearPathSegment(commentId)}.json`;
36
+ }
37
+ export function linearProjectPath(projectId) {
38
+ return `${LINEAR_PATH_ROOT}/projects/${encodeLinearPathSegment(projectId)}.json`;
39
+ }
40
+ export function linearCyclePath(cycleId) {
41
+ return `${LINEAR_PATH_ROOT}/cycles/${encodeLinearPathSegment(cycleId)}.json`;
42
+ }
43
+ export function computeLinearPath(objectType, objectId) {
44
+ const normalizedType = normalizeLinearObjectType(objectType);
45
+ const normalizedId = assertNonEmptySegment(objectId, 'object id');
46
+ switch (normalizedType) {
47
+ case 'issue':
48
+ return linearIssuePath(normalizedId);
49
+ case 'comment':
50
+ return linearCommentPath(normalizedId);
51
+ case 'project':
52
+ return linearProjectPath(normalizedId);
53
+ case 'cycle':
54
+ return linearCyclePath(normalizedId);
55
+ }
56
+ }
57
+ //# sourceMappingURL=path-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-mapper.js","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAIrF,MAAM,mBAAmB,GAAmD;IAC1E,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;CACpB,CAAC;AAEF,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAa;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,6BAA6B,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,kBAAkB,CAAC,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,GAAG,gBAAgB,WAAW,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,GAAG,gBAAgB,aAAa,uBAAuB,CAAC,SAAS,CAAC,OAAO,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,GAAG,gBAAgB,aAAa,uBAAuB,CAAC,SAAS,CAAC,OAAO,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,GAAG,gBAAgB,WAAW,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,QAAgB;IACpE,MAAM,cAAc,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAElE,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,YAAY,CAAC,CAAC;QACvC,KAAK,SAAS;YACZ,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACzC,KAAK,SAAS;YACZ,OAAO,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}