@know-graph/core 0.4.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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/connectors/cache.d.ts +25 -0
- package/dist/connectors/cache.d.ts.map +1 -0
- package/dist/connectors/cache.js +73 -0
- package/dist/connectors/cache.js.map +1 -0
- package/dist/connectors/index.d.ts +12 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +7 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/jira-connector.d.ts +26 -0
- package/dist/connectors/jira-connector.d.ts.map +1 -0
- package/dist/connectors/jira-connector.js +234 -0
- package/dist/connectors/jira-connector.js.map +1 -0
- package/dist/connectors/notion-connector.d.ts +24 -0
- package/dist/connectors/notion-connector.d.ts.map +1 -0
- package/dist/connectors/notion-connector.js +246 -0
- package/dist/connectors/notion-connector.js.map +1 -0
- package/dist/connectors/rate-limiter.d.ts +23 -0
- package/dist/connectors/rate-limiter.d.ts.map +1 -0
- package/dist/connectors/rate-limiter.js +54 -0
- package/dist/connectors/rate-limiter.js.map +1 -0
- package/dist/connectors/registry.d.ts +15 -0
- package/dist/connectors/registry.d.ts.map +1 -0
- package/dist/connectors/registry.js +72 -0
- package/dist/connectors/registry.js.map +1 -0
- package/dist/connectors/types.d.ts +142 -0
- package/dist/connectors/types.d.ts.map +1 -0
- package/dist/connectors/types.js +35 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts +9 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js +11 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts +2 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts.map +1 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js +4 -0
- package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js.map +1 -0
- package/dist/coverage/coverage-calculator.d.ts +3 -0
- package/dist/coverage/coverage-calculator.d.ts.map +1 -0
- package/dist/coverage/coverage-calculator.js +204 -0
- package/dist/coverage/coverage-calculator.js.map +1 -0
- package/dist/coverage/index.d.ts +3 -0
- package/dist/coverage/index.d.ts.map +1 -0
- package/dist/coverage/index.js +2 -0
- package/dist/coverage/index.js.map +1 -0
- package/dist/coverage/types.d.ts +38 -0
- package/dist/coverage/types.d.ts.map +1 -0
- package/dist/coverage/types.js +13 -0
- package/dist/coverage/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/database.d.ts +32 -0
- package/dist/indexer/database.d.ts.map +1 -0
- package/dist/indexer/database.js +242 -0
- package/dist/indexer/database.js.map +1 -0
- package/dist/indexer/index.d.ts +7 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +4 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/indexer.d.ts +12 -0
- package/dist/indexer/indexer.d.ts.map +1 -0
- package/dist/indexer/indexer.js +145 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/indexer/schema.d.ts +21 -0
- package/dist/indexer/schema.d.ts.map +1 -0
- package/dist/indexer/schema.js +122 -0
- package/dist/indexer/schema.js.map +1 -0
- package/dist/indexer/types.d.ts +85 -0
- package/dist/indexer/types.d.ts.map +1 -0
- package/dist/indexer/types.js +2 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/parsers/generic-parser.d.ts +3 -0
- package/dist/parsers/generic-parser.d.ts.map +1 -0
- package/dist/parsers/generic-parser.js +150 -0
- package/dist/parsers/generic-parser.js.map +1 -0
- package/dist/parsers/go-parser.d.ts +3 -0
- package/dist/parsers/go-parser.d.ts.map +1 -0
- package/dist/parsers/go-parser.js +437 -0
- package/dist/parsers/go-parser.js.map +1 -0
- package/dist/parsers/index.d.ts +10 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +8 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/java-parser.d.ts +3 -0
- package/dist/parsers/java-parser.d.ts.map +1 -0
- package/dist/parsers/java-parser.js +321 -0
- package/dist/parsers/java-parser.js.map +1 -0
- package/dist/parsers/metadata-extractor.d.ts +25 -0
- package/dist/parsers/metadata-extractor.d.ts.map +1 -0
- package/dist/parsers/metadata-extractor.js +137 -0
- package/dist/parsers/metadata-extractor.js.map +1 -0
- package/dist/parsers/python-parser.d.ts +3 -0
- package/dist/parsers/python-parser.d.ts.map +1 -0
- package/dist/parsers/python-parser.js +226 -0
- package/dist/parsers/python-parser.js.map +1 -0
- package/dist/parsers/registry.d.ts +3 -0
- package/dist/parsers/registry.d.ts.map +1 -0
- package/dist/parsers/registry.js +41 -0
- package/dist/parsers/registry.js.map +1 -0
- package/dist/parsers/types.d.ts +23 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +2 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/parsers/typescript-parser.d.ts +3 -0
- package/dist/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/parsers/typescript-parser.js +321 -0
- package/dist/parsers/typescript-parser.js.map +1 -0
- package/dist/query/index.d.ts +3 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +2 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/query-engine.d.ts +40 -0
- package/dist/query/query-engine.d.ts.map +1 -0
- package/dist/query/query-engine.js +126 -0
- package/dist/query/query-engine.js.map +1 -0
- package/dist/suggest/index.d.ts +3 -0
- package/dist/suggest/index.d.ts.map +1 -0
- package/dist/suggest/index.js +2 -0
- package/dist/suggest/index.js.map +1 -0
- package/dist/suggest/suggestion-engine.d.ts +7 -0
- package/dist/suggest/suggestion-engine.d.ts.map +1 -0
- package/dist/suggest/suggestion-engine.js +239 -0
- package/dist/suggest/suggestion-engine.js.map +1 -0
- package/dist/suggest/types.d.ts +29 -0
- package/dist/suggest/types.d.ts.map +1 -0
- package/dist/suggest/types.js +13 -0
- package/dist/suggest/types.js.map +1 -0
- package/dist/types/entity.d.ts +336 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entity.js +99 -0
- package/dist/types/entity.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/manifest.d.ts +488 -0
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +66 -0
- package/dist/types/manifest.js.map +1 -0
- package/dist/types/parse-result.d.ts +25 -0
- package/dist/types/parse-result.d.ts.map +1 -0
- package/dist/types/parse-result.js +2 -0
- package/dist/types/parse-result.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +3 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/rules.d.ts +9 -0
- package/dist/validation/rules.d.ts.map +1 -0
- package/dist/validation/rules.js +119 -0
- package/dist/validation/rules.js.map +1 -0
- package/dist/validation/types.d.ts +34 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +2 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/validator.d.ts +10 -0
- package/dist/validation/validator.d.ts.map +1 -0
- package/dist/validation/validator.js +111 -0
- package/dist/validation/validator.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { createCache } from './cache.js';
|
|
2
|
+
import { createRateLimiter } from './rate-limiter.js';
|
|
3
|
+
// --- Notion URL Utilities ---
|
|
4
|
+
const NOTION_URL_PATTERN = /^https?:\/\/(www\.)?notion\.(so|site)\//;
|
|
5
|
+
const NOTION_PAGE_ID_PATTERN = /([a-f0-9]{32}|[a-f0-9-]{36})(?:\?|$)/;
|
|
6
|
+
export function isNotionUrl(url) {
|
|
7
|
+
return NOTION_URL_PATTERN.test(url);
|
|
8
|
+
}
|
|
9
|
+
export function extractNotionPageId(url) {
|
|
10
|
+
const match = url.match(NOTION_PAGE_ID_PATTERN);
|
|
11
|
+
if (!match)
|
|
12
|
+
return undefined;
|
|
13
|
+
return match[1].replace(/-/g, '');
|
|
14
|
+
}
|
|
15
|
+
// --- Fetch-based Notion API Client ---
|
|
16
|
+
export function createNotionApiClient(apiKey) {
|
|
17
|
+
const baseUrl = 'https://api.notion.com/v1';
|
|
18
|
+
const headers = {
|
|
19
|
+
Authorization: `Bearer ${apiKey}`,
|
|
20
|
+
'Notion-Version': '2022-06-28',
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
};
|
|
23
|
+
function extractTitle(page) {
|
|
24
|
+
const properties = page.properties;
|
|
25
|
+
if (!properties)
|
|
26
|
+
return 'Untitled';
|
|
27
|
+
for (const value of Object.values(properties)) {
|
|
28
|
+
const prop = value;
|
|
29
|
+
if (prop.type === 'title') {
|
|
30
|
+
const titleArray = prop.title;
|
|
31
|
+
if (titleArray && titleArray.length > 0) {
|
|
32
|
+
return titleArray.map((t) => t.plain_text).join('');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return 'Untitled';
|
|
37
|
+
}
|
|
38
|
+
function extractStatus(page) {
|
|
39
|
+
const properties = page.properties;
|
|
40
|
+
if (!properties)
|
|
41
|
+
return undefined;
|
|
42
|
+
const status = properties['Status'];
|
|
43
|
+
if (status?.type === 'status') {
|
|
44
|
+
const statusValue = status.status;
|
|
45
|
+
return statusValue?.name;
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
async getPage(pageId) {
|
|
51
|
+
const response = await fetch(`${baseUrl}/pages/${pageId}`, { headers });
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
throw new Error(`Notion API error: ${response.status} ${response.statusText}`);
|
|
54
|
+
}
|
|
55
|
+
const data = (await response.json());
|
|
56
|
+
return {
|
|
57
|
+
id: data.id,
|
|
58
|
+
url: data.url,
|
|
59
|
+
title: extractTitle(data),
|
|
60
|
+
lastEditedTime: data.last_edited_time,
|
|
61
|
+
status: extractStatus(data),
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
async searchPages(query) {
|
|
65
|
+
const response = await fetch(`${baseUrl}/search`, {
|
|
66
|
+
method: 'POST',
|
|
67
|
+
headers,
|
|
68
|
+
body: JSON.stringify({
|
|
69
|
+
query,
|
|
70
|
+
filter: { value: 'page', property: 'object' },
|
|
71
|
+
page_size: 10,
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
throw new Error(`Notion API error: ${response.status} ${response.statusText}`);
|
|
76
|
+
}
|
|
77
|
+
const data = (await response.json());
|
|
78
|
+
return data.results.map((page) => ({
|
|
79
|
+
id: page.id,
|
|
80
|
+
url: page.url,
|
|
81
|
+
title: extractTitle(page),
|
|
82
|
+
lastEditedTime: page.last_edited_time,
|
|
83
|
+
status: extractStatus(page),
|
|
84
|
+
}));
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function getAllEntities(dbManager) {
|
|
89
|
+
const rows = dbManager.db
|
|
90
|
+
.prepare('SELECT * FROM entities ORDER BY name ASC')
|
|
91
|
+
.all();
|
|
92
|
+
return rows.map((row) => {
|
|
93
|
+
const tags = dbManager.db
|
|
94
|
+
.prepare('SELECT tag FROM tags WHERE entity_id = ?')
|
|
95
|
+
.all(row.id).map((t) => t.tag);
|
|
96
|
+
const links = dbManager.db
|
|
97
|
+
.prepare('SELECT link_type, url, title FROM links WHERE entity_id = ?')
|
|
98
|
+
.all(row.id).map((l) => ({
|
|
99
|
+
type: l.link_type,
|
|
100
|
+
url: l.url,
|
|
101
|
+
title: l.title ?? undefined,
|
|
102
|
+
}));
|
|
103
|
+
return {
|
|
104
|
+
id: row.id,
|
|
105
|
+
filePath: row.file_path,
|
|
106
|
+
name: row.name,
|
|
107
|
+
entityType: row.entity_type,
|
|
108
|
+
description: row.description,
|
|
109
|
+
rawDocstring: row.raw_docstring,
|
|
110
|
+
signature: row.signature,
|
|
111
|
+
parent: row.parent,
|
|
112
|
+
language: row.language,
|
|
113
|
+
line: row.line,
|
|
114
|
+
column: row.column_num,
|
|
115
|
+
owner: row.owner,
|
|
116
|
+
status: row.status,
|
|
117
|
+
metadata: JSON.parse(row.metadata_json),
|
|
118
|
+
tags,
|
|
119
|
+
links,
|
|
120
|
+
fileHash: row.file_hash,
|
|
121
|
+
createdAt: row.created_at,
|
|
122
|
+
updatedAt: row.updated_at,
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function filterEntities(entities, filter) {
|
|
127
|
+
if (!filter)
|
|
128
|
+
return entities;
|
|
129
|
+
return entities.filter((entity) => {
|
|
130
|
+
if (filter.owner && entity.owner !== filter.owner)
|
|
131
|
+
return false;
|
|
132
|
+
if (filter.tags && filter.tags.length > 0) {
|
|
133
|
+
const hasMatchingTag = filter.tags.some((t) => entity.tags.includes(t));
|
|
134
|
+
if (!hasMatchingTag)
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export function createNotionConnector(deps = {}) {
|
|
141
|
+
const cache = deps.cache ?? createCache({ ttlMs: 5 * 60 * 1000 });
|
|
142
|
+
const rateLimiter = deps.rateLimiter ??
|
|
143
|
+
createRateLimiter({ maxTokens: 3, refillRate: 3, refillIntervalMs: 1000 });
|
|
144
|
+
return {
|
|
145
|
+
name: 'notion',
|
|
146
|
+
supportedLinkTypes: ['notion'],
|
|
147
|
+
validate(config) {
|
|
148
|
+
const issues = [];
|
|
149
|
+
if (!config.api_key_env) {
|
|
150
|
+
issues.push({
|
|
151
|
+
field: 'api_key_env',
|
|
152
|
+
message: 'api_key_env is required (env variable name for Notion API key)',
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
else if (!process.env[config.api_key_env]) {
|
|
156
|
+
issues.push({
|
|
157
|
+
field: 'api_key_env',
|
|
158
|
+
message: `Environment variable "${config.api_key_env}" is not set`,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return { valid: issues.length === 0, issues };
|
|
162
|
+
},
|
|
163
|
+
async sync(options) {
|
|
164
|
+
const startTime = Date.now();
|
|
165
|
+
const { dbManager, config, entityFilter, dryRun } = options;
|
|
166
|
+
const errors = [];
|
|
167
|
+
const linksAdded = 0;
|
|
168
|
+
let linksUpdated = 0;
|
|
169
|
+
const apiKey = config.api_key_env
|
|
170
|
+
? process.env[config.api_key_env]
|
|
171
|
+
: undefined;
|
|
172
|
+
if (!apiKey) {
|
|
173
|
+
return {
|
|
174
|
+
connector: 'notion',
|
|
175
|
+
entitiesProcessed: 0,
|
|
176
|
+
linksAdded: 0,
|
|
177
|
+
linksUpdated: 0,
|
|
178
|
+
errors: [
|
|
179
|
+
{
|
|
180
|
+
entityId: '',
|
|
181
|
+
message: 'Notion API key not found in environment',
|
|
182
|
+
code: 'AUTH_MISSING',
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
duration: Date.now() - startTime,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
const apiClient = deps.apiClient ?? createNotionApiClient(apiKey);
|
|
189
|
+
const allEntities = getAllEntities(dbManager);
|
|
190
|
+
const entities = filterEntities(allEntities, entityFilter);
|
|
191
|
+
for (const entity of entities) {
|
|
192
|
+
const notionLinks = entity.links.filter((l) => l.type === 'notion' || (l.url && isNotionUrl(l.url)));
|
|
193
|
+
for (const link of notionLinks) {
|
|
194
|
+
const pageId = extractNotionPageId(link.url);
|
|
195
|
+
if (!pageId)
|
|
196
|
+
continue;
|
|
197
|
+
try {
|
|
198
|
+
const cached = cache.get(pageId);
|
|
199
|
+
let page;
|
|
200
|
+
if (cached) {
|
|
201
|
+
page = cached;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
await rateLimiter.acquire();
|
|
205
|
+
page = await apiClient.getPage(pageId);
|
|
206
|
+
cache.set(pageId, page);
|
|
207
|
+
}
|
|
208
|
+
if (!dryRun) {
|
|
209
|
+
// Delete old link and insert updated one
|
|
210
|
+
dbManager.db
|
|
211
|
+
.prepare('DELETE FROM links WHERE entity_id = ? AND url = ?')
|
|
212
|
+
.run(entity.id, link.url);
|
|
213
|
+
dbManager.insertLinks(entity.id, [
|
|
214
|
+
{
|
|
215
|
+
type: 'notion',
|
|
216
|
+
url: link.url,
|
|
217
|
+
title: page.title,
|
|
218
|
+
},
|
|
219
|
+
]);
|
|
220
|
+
linksUpdated++;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
linksUpdated++;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
errors.push({
|
|
228
|
+
entityId: entity.id,
|
|
229
|
+
message: `Failed to fetch Notion page ${pageId}: ${err instanceof Error ? err.message : String(err)}`,
|
|
230
|
+
code: 'FETCH_ERROR',
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
connector: 'notion',
|
|
237
|
+
entitiesProcessed: entities.length,
|
|
238
|
+
linksAdded,
|
|
239
|
+
linksUpdated,
|
|
240
|
+
errors,
|
|
241
|
+
duration: Date.now() - startTime,
|
|
242
|
+
};
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=notion-connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notion-connector.js","sourceRoot":"","sources":["../../src/connectors/notion-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @knowgraph
|
|
3
|
+
* type: module
|
|
4
|
+
* description: Token bucket rate limiter for connector API calls
|
|
5
|
+
* owner: knowgraph-core
|
|
6
|
+
* status: experimental
|
|
7
|
+
* tags: [connector, rate-limiter, throttle, api]
|
|
8
|
+
* context:
|
|
9
|
+
* business_goal: Prevent API rate limit violations when syncing with external services
|
|
10
|
+
* domain: connectors
|
|
11
|
+
*/
|
|
12
|
+
export interface RateLimiter {
|
|
13
|
+
acquire(): Promise<void>;
|
|
14
|
+
tryAcquire(): boolean;
|
|
15
|
+
readonly availableTokens: number;
|
|
16
|
+
}
|
|
17
|
+
export interface RateLimiterOptions {
|
|
18
|
+
readonly maxTokens: number;
|
|
19
|
+
readonly refillRate: number;
|
|
20
|
+
readonly refillIntervalMs: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function createRateLimiter(options: RateLimiterOptions): RateLimiter;
|
|
23
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/connectors/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAgD1E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @knowgraph
|
|
3
|
+
* type: module
|
|
4
|
+
* description: Token bucket rate limiter for connector API calls
|
|
5
|
+
* owner: knowgraph-core
|
|
6
|
+
* status: experimental
|
|
7
|
+
* tags: [connector, rate-limiter, throttle, api]
|
|
8
|
+
* context:
|
|
9
|
+
* business_goal: Prevent API rate limit violations when syncing with external services
|
|
10
|
+
* domain: connectors
|
|
11
|
+
*/
|
|
12
|
+
export function createRateLimiter(options) {
|
|
13
|
+
const { maxTokens, refillRate, refillIntervalMs } = options;
|
|
14
|
+
let tokens = maxTokens;
|
|
15
|
+
let lastRefillTime = Date.now();
|
|
16
|
+
function refill() {
|
|
17
|
+
const now = Date.now();
|
|
18
|
+
const elapsed = now - lastRefillTime;
|
|
19
|
+
const intervals = Math.floor(elapsed / refillIntervalMs);
|
|
20
|
+
if (intervals > 0) {
|
|
21
|
+
tokens = Math.min(maxTokens, tokens + intervals * refillRate);
|
|
22
|
+
lastRefillTime = now;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function tryAcquire() {
|
|
26
|
+
refill();
|
|
27
|
+
if (tokens > 0) {
|
|
28
|
+
tokens--;
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
async function acquire() {
|
|
34
|
+
if (tryAcquire())
|
|
35
|
+
return;
|
|
36
|
+
const waitTime = refillIntervalMs - (Date.now() - lastRefillTime);
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, Math.max(0, waitTime)));
|
|
38
|
+
refill();
|
|
39
|
+
if (tokens > 0) {
|
|
40
|
+
tokens--;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
return acquire();
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
acquire,
|
|
47
|
+
tryAcquire,
|
|
48
|
+
get availableTokens() {
|
|
49
|
+
refill();
|
|
50
|
+
return tokens;
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/connectors/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAC5D,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEhC,SAAS,MAAM;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,cAAc,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAC,CAAC;QAEzD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;YAC9D,cAAc,GAAG,GAAG,CAAC;QACvB,CAAC;IACH,CAAC;IAED,SAAS,UAAU;QACjB,MAAM,EAAE,CAAC;QACT,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,UAAU,OAAO;QACpB,IAAI,UAAU,EAAE;YAAE,OAAO;QAEzB,MAAM,QAAQ,GAAG,gBAAgB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,CAAC;QAClE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,EAAE,CAAC;QAET,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QAED,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO;QACP,UAAU;QACV,IAAI,eAAe;YACjB,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @knowgraph
|
|
3
|
+
* type: module
|
|
4
|
+
* description: Connector registry that manages and orchestrates external knowledge connectors
|
|
5
|
+
* owner: knowgraph-core
|
|
6
|
+
* status: experimental
|
|
7
|
+
* tags: [connector, registry, factory, orchestration]
|
|
8
|
+
* context:
|
|
9
|
+
* business_goal: Enable pluggable external knowledge source integration
|
|
10
|
+
* domain: connectors
|
|
11
|
+
*/
|
|
12
|
+
import type { ConnectorRegistry } from './types.js';
|
|
13
|
+
export declare function createConnectorRegistry(): ConnectorRegistry;
|
|
14
|
+
export declare function createDefaultConnectorRegistry(): ConnectorRegistry;
|
|
15
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AA2EpB,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D;AAED,wBAAgB,8BAA8B,IAAI,iBAAiB,CAKlE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { createNotionConnector } from './notion-connector.js';
|
|
2
|
+
import { createJiraConnector } from './jira-connector.js';
|
|
3
|
+
function createRegistry() {
|
|
4
|
+
const connectors = [];
|
|
5
|
+
return {
|
|
6
|
+
register(connector) {
|
|
7
|
+
const existing = connectors.findIndex((c) => c.name === connector.name);
|
|
8
|
+
if (existing !== -1) {
|
|
9
|
+
connectors[existing] = connector;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
connectors.push(connector);
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
getConnector(name) {
|
|
16
|
+
return connectors.find((c) => c.name === name);
|
|
17
|
+
},
|
|
18
|
+
listConnectors() {
|
|
19
|
+
return connectors.map((c) => c.name);
|
|
20
|
+
},
|
|
21
|
+
async syncAll(options) {
|
|
22
|
+
const { configs, dbManager, entityFilter, dryRun, onProgress } = options;
|
|
23
|
+
const results = [];
|
|
24
|
+
for (const connector of connectors) {
|
|
25
|
+
const config = configs[connector.name];
|
|
26
|
+
if (!config || !config.enabled) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const validation = connector.validate(config);
|
|
30
|
+
if (!validation.valid) {
|
|
31
|
+
const errorMessages = validation.issues
|
|
32
|
+
.map((i) => `${i.field}: ${i.message}`)
|
|
33
|
+
.join('; ');
|
|
34
|
+
results.push({
|
|
35
|
+
connector: connector.name,
|
|
36
|
+
entitiesProcessed: 0,
|
|
37
|
+
linksAdded: 0,
|
|
38
|
+
linksUpdated: 0,
|
|
39
|
+
errors: [
|
|
40
|
+
{
|
|
41
|
+
entityId: '',
|
|
42
|
+
message: `Configuration invalid: ${errorMessages}`,
|
|
43
|
+
code: 'CONFIG_INVALID',
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
duration: 0,
|
|
47
|
+
});
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const result = await connector.sync({
|
|
51
|
+
dbManager,
|
|
52
|
+
config,
|
|
53
|
+
entityFilter,
|
|
54
|
+
dryRun,
|
|
55
|
+
});
|
|
56
|
+
results.push(result);
|
|
57
|
+
onProgress?.(connector.name, result);
|
|
58
|
+
}
|
|
59
|
+
return results;
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function createConnectorRegistry() {
|
|
64
|
+
return createRegistry();
|
|
65
|
+
}
|
|
66
|
+
export function createDefaultConnectorRegistry() {
|
|
67
|
+
const registry = createRegistry();
|
|
68
|
+
registry.register(createNotionConnector());
|
|
69
|
+
registry.register(createJiraConnector());
|
|
70
|
+
return registry;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @knowgraph
|
|
3
|
+
* type: interface
|
|
4
|
+
* description: Type definitions and Zod schemas for the connector plugin system
|
|
5
|
+
* owner: knowgraph-core
|
|
6
|
+
* status: experimental
|
|
7
|
+
* tags: [connector, types, interface, zod]
|
|
8
|
+
* context:
|
|
9
|
+
* business_goal: Define contracts for external knowledge connectors
|
|
10
|
+
* domain: connectors
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import type { DatabaseManager } from '../indexer/database.js';
|
|
14
|
+
import type { LinkType } from '../types/entity.js';
|
|
15
|
+
import type { ConnectorConfig } from '../types/manifest.js';
|
|
16
|
+
export declare const ConnectorValidationIssueSchema: z.ZodObject<{
|
|
17
|
+
field: z.ZodString;
|
|
18
|
+
message: z.ZodString;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
message: string;
|
|
21
|
+
field: string;
|
|
22
|
+
}, {
|
|
23
|
+
message: string;
|
|
24
|
+
field: string;
|
|
25
|
+
}>;
|
|
26
|
+
export declare const ConnectorValidationResultSchema: z.ZodObject<{
|
|
27
|
+
valid: z.ZodBoolean;
|
|
28
|
+
issues: z.ZodArray<z.ZodObject<{
|
|
29
|
+
field: z.ZodString;
|
|
30
|
+
message: z.ZodString;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
message: string;
|
|
33
|
+
field: string;
|
|
34
|
+
}, {
|
|
35
|
+
message: string;
|
|
36
|
+
field: string;
|
|
37
|
+
}>, "many">;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
valid: boolean;
|
|
40
|
+
issues: {
|
|
41
|
+
message: string;
|
|
42
|
+
field: string;
|
|
43
|
+
}[];
|
|
44
|
+
}, {
|
|
45
|
+
valid: boolean;
|
|
46
|
+
issues: {
|
|
47
|
+
message: string;
|
|
48
|
+
field: string;
|
|
49
|
+
}[];
|
|
50
|
+
}>;
|
|
51
|
+
export declare const ConnectorErrorSchema: z.ZodObject<{
|
|
52
|
+
entityId: z.ZodString;
|
|
53
|
+
message: z.ZodString;
|
|
54
|
+
code: z.ZodOptional<z.ZodString>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
message: string;
|
|
57
|
+
entityId: string;
|
|
58
|
+
code?: string | undefined;
|
|
59
|
+
}, {
|
|
60
|
+
message: string;
|
|
61
|
+
entityId: string;
|
|
62
|
+
code?: string | undefined;
|
|
63
|
+
}>;
|
|
64
|
+
export declare const ConnectorSyncResultSchema: z.ZodObject<{
|
|
65
|
+
connector: z.ZodString;
|
|
66
|
+
entitiesProcessed: z.ZodNumber;
|
|
67
|
+
linksAdded: z.ZodNumber;
|
|
68
|
+
linksUpdated: z.ZodNumber;
|
|
69
|
+
errors: z.ZodArray<z.ZodObject<{
|
|
70
|
+
entityId: z.ZodString;
|
|
71
|
+
message: z.ZodString;
|
|
72
|
+
code: z.ZodOptional<z.ZodString>;
|
|
73
|
+
}, "strip", z.ZodTypeAny, {
|
|
74
|
+
message: string;
|
|
75
|
+
entityId: string;
|
|
76
|
+
code?: string | undefined;
|
|
77
|
+
}, {
|
|
78
|
+
message: string;
|
|
79
|
+
entityId: string;
|
|
80
|
+
code?: string | undefined;
|
|
81
|
+
}>, "many">;
|
|
82
|
+
duration: z.ZodNumber;
|
|
83
|
+
}, "strip", z.ZodTypeAny, {
|
|
84
|
+
connector: string;
|
|
85
|
+
entitiesProcessed: number;
|
|
86
|
+
linksAdded: number;
|
|
87
|
+
linksUpdated: number;
|
|
88
|
+
errors: {
|
|
89
|
+
message: string;
|
|
90
|
+
entityId: string;
|
|
91
|
+
code?: string | undefined;
|
|
92
|
+
}[];
|
|
93
|
+
duration: number;
|
|
94
|
+
}, {
|
|
95
|
+
connector: string;
|
|
96
|
+
entitiesProcessed: number;
|
|
97
|
+
linksAdded: number;
|
|
98
|
+
linksUpdated: number;
|
|
99
|
+
errors: {
|
|
100
|
+
message: string;
|
|
101
|
+
entityId: string;
|
|
102
|
+
code?: string | undefined;
|
|
103
|
+
}[];
|
|
104
|
+
duration: number;
|
|
105
|
+
}>;
|
|
106
|
+
export type ConnectorValidationIssue = z.infer<typeof ConnectorValidationIssueSchema>;
|
|
107
|
+
export type ConnectorValidationResult = z.infer<typeof ConnectorValidationResultSchema>;
|
|
108
|
+
export type ConnectorError = z.infer<typeof ConnectorErrorSchema>;
|
|
109
|
+
export type ConnectorSyncResult = z.infer<typeof ConnectorSyncResultSchema>;
|
|
110
|
+
export type { ConnectorConfig } from '../types/manifest.js';
|
|
111
|
+
export interface ConnectorSyncOptions {
|
|
112
|
+
readonly dbManager: DatabaseManager;
|
|
113
|
+
readonly config: ConnectorConfig;
|
|
114
|
+
readonly entityFilter?: {
|
|
115
|
+
readonly owner?: string;
|
|
116
|
+
readonly tags?: readonly string[];
|
|
117
|
+
};
|
|
118
|
+
readonly dryRun: boolean;
|
|
119
|
+
}
|
|
120
|
+
export interface Connector {
|
|
121
|
+
readonly name: string;
|
|
122
|
+
readonly supportedLinkTypes: readonly LinkType[];
|
|
123
|
+
validate(config: ConnectorConfig): ConnectorValidationResult;
|
|
124
|
+
sync(options: ConnectorSyncOptions): Promise<ConnectorSyncResult>;
|
|
125
|
+
}
|
|
126
|
+
export interface SyncAllOptions {
|
|
127
|
+
readonly dbManager: DatabaseManager;
|
|
128
|
+
readonly configs: Readonly<Record<string, ConnectorConfig>>;
|
|
129
|
+
readonly entityFilter?: {
|
|
130
|
+
readonly owner?: string;
|
|
131
|
+
readonly tags?: readonly string[];
|
|
132
|
+
};
|
|
133
|
+
readonly dryRun: boolean;
|
|
134
|
+
readonly onProgress?: (connectorName: string, result: ConnectorSyncResult) => void;
|
|
135
|
+
}
|
|
136
|
+
export interface ConnectorRegistry {
|
|
137
|
+
register(connector: Connector): void;
|
|
138
|
+
getConnector(name: string): Connector | undefined;
|
|
139
|
+
listConnectors(): readonly string[];
|
|
140
|
+
syncAll(options: SyncAllOptions): Promise<readonly ConnectorSyncResult[]>;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connectors/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,eAAO,MAAM,8BAA8B;;;;;;;;;EAGzC,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;EAG1C,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOpC,CAAC;AAIH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAC5C,OAAO,8BAA8B,CACtC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,+BAA+B,CACvC,CAAC;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAI5E,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE;QACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,kBAAkB,EAAE,SAAS,QAAQ,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE;QACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,CACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,KACxB,IAAI,CAAC;CACX;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,cAAc,IAAI,SAAS,MAAM,EAAE,CAAC;IACpC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;CAC3E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @knowgraph
|
|
3
|
+
* type: interface
|
|
4
|
+
* description: Type definitions and Zod schemas for the connector plugin system
|
|
5
|
+
* owner: knowgraph-core
|
|
6
|
+
* status: experimental
|
|
7
|
+
* tags: [connector, types, interface, zod]
|
|
8
|
+
* context:
|
|
9
|
+
* business_goal: Define contracts for external knowledge connectors
|
|
10
|
+
* domain: connectors
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
// --- Zod Schemas ---
|
|
14
|
+
export const ConnectorValidationIssueSchema = z.object({
|
|
15
|
+
field: z.string(),
|
|
16
|
+
message: z.string(),
|
|
17
|
+
});
|
|
18
|
+
export const ConnectorValidationResultSchema = z.object({
|
|
19
|
+
valid: z.boolean(),
|
|
20
|
+
issues: z.array(ConnectorValidationIssueSchema),
|
|
21
|
+
});
|
|
22
|
+
export const ConnectorErrorSchema = z.object({
|
|
23
|
+
entityId: z.string(),
|
|
24
|
+
message: z.string(),
|
|
25
|
+
code: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
export const ConnectorSyncResultSchema = z.object({
|
|
28
|
+
connector: z.string(),
|
|
29
|
+
entitiesProcessed: z.number(),
|
|
30
|
+
linksAdded: z.number(),
|
|
31
|
+
linksUpdated: z.number(),
|
|
32
|
+
errors: z.array(ConnectorErrorSchema),
|
|
33
|
+
duration: z.number(),
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/connectors/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,sBAAsB;AAEtB,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotated.d.ts","sourceRoot":"","sources":["../../../../../src/coverage/__tests__/fixtures/mixed-project/annotated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAE9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotated.js","sourceRoot":"","sources":["../../../../../src/coverage/__tests__/fixtures/mixed-project/annotated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,KAAK;IACnB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|