@shakenbake/linear 0.0.1

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.
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const core_1 = require("@shakenbake/core");
5
+ const graphql_js_1 = require("../graphql.js");
6
+ (0, vitest_1.describe)('linearFetch', () => {
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ let fetchMock;
9
+ (0, vitest_1.beforeEach)(() => {
10
+ fetchMock = vitest_1.vi.spyOn(globalThis, 'fetch');
11
+ });
12
+ (0, vitest_1.afterEach)(() => {
13
+ vitest_1.vi.restoreAllMocks();
14
+ });
15
+ (0, vitest_1.it)('sends POST request with correct headers', async () => {
16
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({ data: { viewer: { id: '1' } } }), {
17
+ status: 200,
18
+ headers: { 'Content-Type': 'application/json' },
19
+ }));
20
+ await (0, graphql_js_1.linearFetch)('my-api-key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
21
+ (0, vitest_1.expect)(fetchMock).toHaveBeenCalledWith('https://api.linear.app/graphql', {
22
+ method: 'POST',
23
+ headers: {
24
+ 'Content-Type': 'application/json',
25
+ Authorization: 'my-api-key',
26
+ },
27
+ body: JSON.stringify({ query: graphql_js_1.VIEWER_QUERY, variables: undefined }),
28
+ });
29
+ });
30
+ (0, vitest_1.it)('returns data on successful response', async () => {
31
+ const responseData = { viewer: { id: 'user-1' } };
32
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({ data: responseData }), { status: 200 }));
33
+ const result = await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
34
+ (0, vitest_1.expect)(result).toEqual(responseData);
35
+ });
36
+ (0, vitest_1.it)('passes variables in request body', async () => {
37
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({ data: { issueCreate: {} } }), { status: 200 }));
38
+ const variables = { input: { title: 'Bug', teamId: 'team-1' } };
39
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.ISSUE_CREATE_MUTATION, variables);
40
+ const call = fetchMock.mock.calls[0];
41
+ const body = JSON.parse(call[1].body);
42
+ (0, vitest_1.expect)(body.variables).toEqual(variables);
43
+ });
44
+ (0, vitest_1.it)('throws AUTH_FAILED on HTTP 401', async () => {
45
+ fetchMock.mockResolvedValueOnce(new Response('Unauthorized', { status: 401 }));
46
+ try {
47
+ await (0, graphql_js_1.linearFetch)('bad-key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
48
+ vitest_1.expect.unreachable('Should have thrown');
49
+ }
50
+ catch (e) {
51
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
52
+ (0, vitest_1.expect)(e.code).toBe('AUTH_FAILED');
53
+ (0, vitest_1.expect)(e.retryable).toBe(false);
54
+ }
55
+ });
56
+ (0, vitest_1.it)('throws AUTH_FAILED on HTTP 403', async () => {
57
+ fetchMock.mockResolvedValueOnce(new Response('Forbidden', { status: 403 }));
58
+ try {
59
+ await (0, graphql_js_1.linearFetch)('bad-key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
60
+ vitest_1.expect.unreachable('Should have thrown');
61
+ }
62
+ catch (e) {
63
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
64
+ (0, vitest_1.expect)(e.code).toBe('AUTH_FAILED');
65
+ }
66
+ });
67
+ (0, vitest_1.it)('throws RATE_LIMITED on HTTP 429', async () => {
68
+ fetchMock.mockResolvedValueOnce(new Response('Too Many Requests', { status: 429 }));
69
+ try {
70
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
71
+ vitest_1.expect.unreachable('Should have thrown');
72
+ }
73
+ catch (e) {
74
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
75
+ (0, vitest_1.expect)(e.code).toBe('RATE_LIMITED');
76
+ (0, vitest_1.expect)(e.retryable).toBe(true);
77
+ }
78
+ });
79
+ (0, vitest_1.it)('throws NETWORK_ERROR on fetch failure', async () => {
80
+ fetchMock.mockRejectedValueOnce(new TypeError('Failed to fetch'));
81
+ try {
82
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
83
+ vitest_1.expect.unreachable('Should have thrown');
84
+ }
85
+ catch (e) {
86
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
87
+ (0, vitest_1.expect)(e.code).toBe('NETWORK_ERROR');
88
+ (0, vitest_1.expect)(e.originalError).toBeInstanceOf(TypeError);
89
+ }
90
+ });
91
+ (0, vitest_1.it)('throws UNKNOWN on non-standard HTTP error', async () => {
92
+ fetchMock.mockResolvedValueOnce(new Response('Server Error', { status: 500 }));
93
+ try {
94
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
95
+ vitest_1.expect.unreachable('Should have thrown');
96
+ }
97
+ catch (e) {
98
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
99
+ (0, vitest_1.expect)(e.code).toBe('UNKNOWN');
100
+ }
101
+ });
102
+ (0, vitest_1.it)('throws on GraphQL errors in response', async () => {
103
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({
104
+ errors: [{ message: 'Team not found' }],
105
+ }), { status: 200 }));
106
+ try {
107
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.ISSUE_CREATE_MUTATION, {});
108
+ vitest_1.expect.unreachable('Should have thrown');
109
+ }
110
+ catch (e) {
111
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
112
+ (0, vitest_1.expect)(e.message).toContain('Team not found');
113
+ }
114
+ });
115
+ (0, vitest_1.it)('throws RATE_LIMITED on GraphQL RATELIMITED extension code', async () => {
116
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({
117
+ errors: [
118
+ {
119
+ message: 'Rate limit exceeded',
120
+ extensions: { code: 'RATELIMITED' },
121
+ },
122
+ ],
123
+ }), { status: 200 }));
124
+ try {
125
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
126
+ vitest_1.expect.unreachable('Should have thrown');
127
+ }
128
+ catch (e) {
129
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
130
+ (0, vitest_1.expect)(e.code).toBe('RATE_LIMITED');
131
+ (0, vitest_1.expect)(e.retryable).toBe(true);
132
+ }
133
+ });
134
+ (0, vitest_1.it)('throws AUTH_FAILED on GraphQL authentication error', async () => {
135
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({
136
+ errors: [{ message: 'Authentication required' }],
137
+ }), { status: 200 }));
138
+ try {
139
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
140
+ vitest_1.expect.unreachable('Should have thrown');
141
+ }
142
+ catch (e) {
143
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
144
+ (0, vitest_1.expect)(e.code).toBe('AUTH_FAILED');
145
+ }
146
+ });
147
+ (0, vitest_1.it)('throws UNKNOWN on empty data response', async () => {
148
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({ data: null }), { status: 200 }));
149
+ try {
150
+ await (0, graphql_js_1.linearFetch)('key', 'https://api.linear.app/graphql', graphql_js_1.VIEWER_QUERY);
151
+ vitest_1.expect.unreachable('Should have thrown');
152
+ }
153
+ catch (e) {
154
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
155
+ (0, vitest_1.expect)(e.code).toBe('UNKNOWN');
156
+ (0, vitest_1.expect)(e.message).toContain('empty response');
157
+ }
158
+ });
159
+ });
160
+ (0, vitest_1.describe)('GraphQL constants', () => {
161
+ (0, vitest_1.it)('VIEWER_QUERY contains viewer query', () => {
162
+ (0, vitest_1.expect)(graphql_js_1.VIEWER_QUERY).toContain('viewer');
163
+ (0, vitest_1.expect)(graphql_js_1.VIEWER_QUERY).toContain('id');
164
+ });
165
+ (0, vitest_1.it)('ISSUE_CREATE_MUTATION contains issueCreate', () => {
166
+ (0, vitest_1.expect)(graphql_js_1.ISSUE_CREATE_MUTATION).toContain('issueCreate');
167
+ (0, vitest_1.expect)(graphql_js_1.ISSUE_CREATE_MUTATION).toContain('IssueCreateInput');
168
+ (0, vitest_1.expect)(graphql_js_1.ISSUE_CREATE_MUTATION).toContain('success');
169
+ (0, vitest_1.expect)(graphql_js_1.ISSUE_CREATE_MUTATION).toContain('url');
170
+ });
171
+ (0, vitest_1.it)('FILE_UPLOAD_MUTATION contains fileUpload with headers', () => {
172
+ (0, vitest_1.expect)(graphql_js_1.FILE_UPLOAD_MUTATION).toContain('fileUpload');
173
+ (0, vitest_1.expect)(graphql_js_1.FILE_UPLOAD_MUTATION).toContain('uploadUrl');
174
+ (0, vitest_1.expect)(graphql_js_1.FILE_UPLOAD_MUTATION).toContain('assetUrl');
175
+ (0, vitest_1.expect)(graphql_js_1.FILE_UPLOAD_MUTATION).toContain('headers');
176
+ (0, vitest_1.expect)(graphql_js_1.FILE_UPLOAD_MUTATION).toContain('key');
177
+ (0, vitest_1.expect)(graphql_js_1.FILE_UPLOAD_MUTATION).toContain('value');
178
+ (0, vitest_1.expect)(graphql_js_1.FILE_UPLOAD_MUTATION).toContain('success');
179
+ });
180
+ });
181
+ (0, vitest_1.describe)('requestUploadUrl', () => {
182
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
183
+ let fetchMock;
184
+ (0, vitest_1.beforeEach)(() => {
185
+ fetchMock = vitest_1.vi.spyOn(globalThis, 'fetch');
186
+ });
187
+ (0, vitest_1.afterEach)(() => {
188
+ vitest_1.vi.restoreAllMocks();
189
+ });
190
+ (0, vitest_1.it)('returns uploadUrl, assetUrl, and headers on success', async () => {
191
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({
192
+ data: {
193
+ fileUpload: {
194
+ success: true,
195
+ uploadFile: {
196
+ uploadUrl: 'https://uploads.linear.app/upload-1',
197
+ assetUrl: 'https://assets.linear.app/asset-1',
198
+ headers: [{ key: 'x-amz-acl', value: 'public-read' }],
199
+ },
200
+ },
201
+ },
202
+ }), { status: 200 }));
203
+ const result = await (0, graphql_js_1.requestUploadUrl)('api-key', 'https://api.linear.app/graphql', 'test.png', 'image/png', 1024);
204
+ (0, vitest_1.expect)(result.uploadUrl).toBe('https://uploads.linear.app/upload-1');
205
+ (0, vitest_1.expect)(result.assetUrl).toBe('https://assets.linear.app/asset-1');
206
+ (0, vitest_1.expect)(result.headers).toEqual([{ key: 'x-amz-acl', value: 'public-read' }]);
207
+ });
208
+ (0, vitest_1.it)('throws UPLOAD_FAILED when success is false', async () => {
209
+ fetchMock.mockResolvedValueOnce(new Response(JSON.stringify({
210
+ data: {
211
+ fileUpload: {
212
+ success: false,
213
+ uploadFile: {
214
+ uploadUrl: '',
215
+ assetUrl: '',
216
+ headers: [],
217
+ },
218
+ },
219
+ },
220
+ }), { status: 200 }));
221
+ try {
222
+ await (0, graphql_js_1.requestUploadUrl)('api-key', 'https://api.linear.app/graphql', 'test.png', 'image/png', 1024);
223
+ vitest_1.expect.unreachable('Should have thrown');
224
+ }
225
+ catch (e) {
226
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
227
+ (0, vitest_1.expect)(e.code).toBe('UPLOAD_FAILED');
228
+ }
229
+ });
230
+ (0, vitest_1.it)('propagates AUTH_FAILED from linearFetch', async () => {
231
+ fetchMock.mockResolvedValueOnce(new Response('Unauthorized', { status: 401 }));
232
+ try {
233
+ await (0, graphql_js_1.requestUploadUrl)('bad-key', 'https://api.linear.app/graphql', 'test.png', 'image/png', 1024);
234
+ vitest_1.expect.unreachable('Should have thrown');
235
+ }
236
+ catch (e) {
237
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
238
+ (0, vitest_1.expect)(e.code).toBe('AUTH_FAILED');
239
+ }
240
+ });
241
+ (0, vitest_1.it)('propagates NETWORK_ERROR from linearFetch', async () => {
242
+ fetchMock.mockRejectedValueOnce(new TypeError('fetch failed'));
243
+ try {
244
+ await (0, graphql_js_1.requestUploadUrl)('api-key', 'https://api.linear.app/graphql', 'test.png', 'image/png', 1024);
245
+ vitest_1.expect.unreachable('Should have thrown');
246
+ }
247
+ catch (e) {
248
+ (0, vitest_1.expect)(e).toBeInstanceOf(core_1.ShakeNbakeError);
249
+ (0, vitest_1.expect)(e.code).toBe('NETWORK_ERROR');
250
+ }
251
+ });
252
+ });
253
+ //# sourceMappingURL=graphql.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.test.js","sourceRoot":"","sources":["../../src/__tests__/graphql.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=markdown.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/markdown.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const markdown_js_1 = require("../markdown.js");
5
+ function makeReport(overrides) {
6
+ return {
7
+ id: 'report-001',
8
+ timestamp: '2026-02-20T12:00:00.000Z',
9
+ title: 'Bug title',
10
+ description: 'Something went wrong.',
11
+ severity: 'high',
12
+ category: 'bug',
13
+ screenshot: {
14
+ annotated: 'base64-annotated',
15
+ original: 'base64-original',
16
+ dimensions: { width: 1080, height: 1920 },
17
+ },
18
+ context: {
19
+ platform: { os: 'Android', osVersion: '14' },
20
+ device: { manufacturer: 'Samsung', model: 'Galaxy S24' },
21
+ screen: { width: 1080, height: 2340, scale: 2.5 },
22
+ network: { type: 'cellular', effectiveType: '4g' },
23
+ battery: { level: 72, state: 'charging' },
24
+ locale: { languageCode: 'en', regionCode: 'US', timezone: 'America/Chicago' },
25
+ app: { version: '2.0.0', buildNumber: '100' },
26
+ accessibility: {},
27
+ performance: {},
28
+ navigation: { currentRoute: '/settings' },
29
+ console: {
30
+ recentErrors: [],
31
+ },
32
+ },
33
+ ...overrides,
34
+ };
35
+ }
36
+ (0, vitest_1.describe)('buildIssueDescription', () => {
37
+ (0, vitest_1.it)('includes Bug Report header and description', () => {
38
+ const md = (0, markdown_js_1.buildIssueDescription)(makeReport());
39
+ (0, vitest_1.expect)(md).toContain('## Bug Report');
40
+ (0, vitest_1.expect)(md).toContain('Something went wrong.');
41
+ });
42
+ (0, vitest_1.it)('includes annotated screenshot URL when provided', () => {
43
+ const md = (0, markdown_js_1.buildIssueDescription)(makeReport(), 'https://img.linear.app/annotated.png');
44
+ (0, vitest_1.expect)(md).toContain('**Annotated:**');
45
+ (0, vitest_1.expect)(md).toContain('![Annotated screenshot](https://img.linear.app/annotated.png)');
46
+ });
47
+ (0, vitest_1.it)('includes original screenshot URL when provided', () => {
48
+ const md = (0, markdown_js_1.buildIssueDescription)(makeReport(), undefined, 'https://img.linear.app/original.png');
49
+ (0, vitest_1.expect)(md).toContain('**Original:**');
50
+ (0, vitest_1.expect)(md).toContain('![Original screenshot](https://img.linear.app/original.png)');
51
+ });
52
+ (0, vitest_1.it)('includes audio link when provided', () => {
53
+ const md = (0, markdown_js_1.buildIssueDescription)(makeReport(), undefined, undefined, 'https://audio.linear.app/recording.webm');
54
+ (0, vitest_1.expect)(md).toContain('[Listen](https://audio.linear.app/recording.webm)');
55
+ });
56
+ (0, vitest_1.it)('includes audio transcript when available', () => {
57
+ const report = makeReport({
58
+ audio: {
59
+ data: 'base64audio',
60
+ durationMs: 3000,
61
+ mimeType: 'audio/webm',
62
+ transcript: 'The button is not responding',
63
+ },
64
+ });
65
+ const md = (0, markdown_js_1.buildIssueDescription)(report);
66
+ (0, vitest_1.expect)(md).toContain('### Audio Transcript');
67
+ (0, vitest_1.expect)(md).toContain('The button is not responding');
68
+ });
69
+ (0, vitest_1.it)('includes device context table', () => {
70
+ const md = (0, markdown_js_1.buildIssueDescription)(makeReport());
71
+ (0, vitest_1.expect)(md).toContain('### Device Context');
72
+ (0, vitest_1.expect)(md).toContain('Android 14');
73
+ (0, vitest_1.expect)(md).toContain('Samsung Galaxy S24');
74
+ (0, vitest_1.expect)(md).toContain('1080x2340 @2.5x');
75
+ (0, vitest_1.expect)(md).toContain('cellular (4g)');
76
+ (0, vitest_1.expect)(md).toContain('72% (charging)');
77
+ (0, vitest_1.expect)(md).toContain('en-US');
78
+ (0, vitest_1.expect)(md).toContain('America/Chicago');
79
+ (0, vitest_1.expect)(md).toContain('2.0.0 (100)');
80
+ (0, vitest_1.expect)(md).toContain('/settings');
81
+ });
82
+ (0, vitest_1.it)('wraps context in collapsible details tag', () => {
83
+ const md = (0, markdown_js_1.buildIssueDescription)(makeReport());
84
+ (0, vitest_1.expect)(md).toContain('<details>');
85
+ (0, vitest_1.expect)(md).toContain('<summary>Full device and environment details</summary>');
86
+ (0, vitest_1.expect)(md).toContain('</details>');
87
+ });
88
+ (0, vitest_1.it)('includes console errors when present', () => {
89
+ const report = makeReport({
90
+ context: {
91
+ ...makeReport().context,
92
+ console: {
93
+ recentErrors: [
94
+ {
95
+ message: 'ReferenceError: x is not defined',
96
+ stack: 'at eval (app.js:10)',
97
+ timestamp: '2026-02-20T11:55:00Z',
98
+ },
99
+ ],
100
+ },
101
+ },
102
+ });
103
+ const md = (0, markdown_js_1.buildIssueDescription)(report);
104
+ (0, vitest_1.expect)(md).toContain('### Console Errors (last 5)');
105
+ (0, vitest_1.expect)(md).toContain('ReferenceError: x is not defined');
106
+ (0, vitest_1.expect)(md).toContain('at eval (app.js:10)');
107
+ });
108
+ (0, vitest_1.it)('omits console errors section when no errors', () => {
109
+ const report = makeReport();
110
+ const md = (0, markdown_js_1.buildIssueDescription)(report);
111
+ (0, vitest_1.expect)(md).not.toContain('### Console Errors');
112
+ });
113
+ (0, vitest_1.it)('gracefully handles missing context fields', () => {
114
+ const report = makeReport({
115
+ context: {
116
+ platform: { os: 'web' },
117
+ device: {},
118
+ screen: { width: 1920, height: 1080 },
119
+ network: {},
120
+ battery: {},
121
+ locale: {},
122
+ app: {},
123
+ accessibility: {},
124
+ performance: {},
125
+ navigation: {},
126
+ console: {},
127
+ },
128
+ });
129
+ const md = (0, markdown_js_1.buildIssueDescription)(report);
130
+ // Should not contain "undefined"
131
+ (0, vitest_1.expect)(md).not.toContain('undefined');
132
+ // Should still have the basic structure
133
+ (0, vitest_1.expect)(md).toContain('## Bug Report');
134
+ (0, vitest_1.expect)(md).toContain('Platform | web');
135
+ });
136
+ (0, vitest_1.it)('includes ShakeNbake footer', () => {
137
+ const md = (0, markdown_js_1.buildIssueDescription)(makeReport());
138
+ (0, vitest_1.expect)(md).toContain('*Reported via [ShakeNbake]');
139
+ });
140
+ (0, vitest_1.it)('limits console errors to last 5', () => {
141
+ const errors = Array.from({ length: 8 }, (_, i) => ({
142
+ message: `Error ${String(i + 1)}`,
143
+ timestamp: `2026-02-20T11:5${String(i)}:00Z`,
144
+ }));
145
+ const report = makeReport({
146
+ context: {
147
+ ...makeReport().context,
148
+ console: { recentErrors: errors },
149
+ },
150
+ });
151
+ const md = (0, markdown_js_1.buildIssueDescription)(report);
152
+ // Should contain the last 5 errors (4-8), not the first ones
153
+ (0, vitest_1.expect)(md).toContain('Error 4');
154
+ (0, vitest_1.expect)(md).toContain('Error 8');
155
+ (0, vitest_1.expect)(md).not.toContain('Error 1');
156
+ (0, vitest_1.expect)(md).not.toContain('Error 2');
157
+ (0, vitest_1.expect)(md).not.toContain('Error 3');
158
+ });
159
+ });
160
+ //# sourceMappingURL=markdown.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.test.js","sourceRoot":"","sources":["../../src/__tests__/markdown.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upload.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/upload.test.ts"],"names":[],"mappings":""}