@superbee/core 0.2.0-pre.21 → 0.2.0-pre.22

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 (51) hide show
  1. package/README.md +50 -0
  2. package/dist/connector-request.d.ts +87 -0
  3. package/dist/connector-request.d.ts.map +1 -0
  4. package/dist/connector-request.js +370 -0
  5. package/dist/connector-request.js.map +1 -0
  6. package/dist/connectors.d.ts +32 -0
  7. package/dist/connectors.d.ts.map +1 -1
  8. package/dist/connectors.js +30 -1
  9. package/dist/connectors.js.map +1 -1
  10. package/dist/recipe-lifecycle/evolution.d.ts.map +1 -1
  11. package/dist/recipe-lifecycle/evolution.js +49 -13
  12. package/dist/recipe-lifecycle/evolution.js.map +1 -1
  13. package/dist/recipe-lifecycle/install.d.ts.map +1 -1
  14. package/dist/recipe-lifecycle/install.js +2 -2
  15. package/dist/recipe-lifecycle/install.js.map +1 -1
  16. package/dist/recipe-lifecycle/stamp.d.ts +2 -0
  17. package/dist/recipe-lifecycle/stamp.d.ts.map +1 -1
  18. package/dist/recipe-lifecycle/stamp.js +5 -1
  19. package/dist/recipe-lifecycle/stamp.js.map +1 -1
  20. package/dist/source-engine/guard.d.ts +4 -8
  21. package/dist/source-engine/guard.d.ts.map +1 -1
  22. package/dist/source-engine/guard.js +32 -5
  23. package/dist/source-engine/guard.js.map +1 -1
  24. package/dist/source-engine/index.d.ts +2 -0
  25. package/dist/source-engine/index.d.ts.map +1 -1
  26. package/dist/source-engine/index.js +1 -0
  27. package/dist/source-engine/index.js.map +1 -1
  28. package/dist/source-engine/observe.d.ts.map +1 -1
  29. package/dist/source-engine/observe.js +29 -7
  30. package/dist/source-engine/observe.js.map +1 -1
  31. package/dist/source-engine/overlay.d.ts +49 -0
  32. package/dist/source-engine/overlay.d.ts.map +1 -0
  33. package/dist/source-engine/overlay.js +114 -0
  34. package/dist/source-engine/overlay.js.map +1 -0
  35. package/dist/source-engine/types.d.ts +2 -0
  36. package/dist/source-engine/types.d.ts.map +1 -1
  37. package/dist/source-harness/conformance.d.ts.map +1 -1
  38. package/dist/source-harness/conformance.js +13 -12
  39. package/dist/source-harness/conformance.js.map +1 -1
  40. package/dist/source-harness/fixture.d.ts.map +1 -1
  41. package/dist/source-harness/fixture.js +30 -18
  42. package/dist/source-harness/fixture.js.map +1 -1
  43. package/dist/source-profiles/index.d.ts +32 -0
  44. package/dist/source-profiles/index.d.ts.map +1 -0
  45. package/dist/source-profiles/index.js +326 -0
  46. package/dist/source-profiles/index.js.map +1 -0
  47. package/dist/source-profiles/link-header.d.ts +6 -0
  48. package/dist/source-profiles/link-header.d.ts.map +1 -0
  49. package/dist/source-profiles/link-header.js +131 -0
  50. package/dist/source-profiles/link-header.js.map +1 -0
  51. package/package.json +6 -1
@@ -0,0 +1,326 @@
1
+ /** Credential-free declarative profiles. All requests go through the source engine's transport. */
2
+ import { nextLinkTarget } from "./link-header.js";
3
+ import { validateConnectorRequest, readSourcePath, renderRequestValue } from "../connectors.js";
4
+ import { unsupportedContent } from "../source-engine/index.js";
5
+ const object = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
6
+ const scalar = (v) => v === null || typeof v === "string" || typeof v === "boolean" || typeof v === "number" && Number.isFinite(v);
7
+ function put(record, path, value) {
8
+ const names = path.split(".");
9
+ let next = record;
10
+ for (const name of names.slice(0, -1)) {
11
+ if (!object(next[name]))
12
+ next[name] = {};
13
+ next = next[name];
14
+ }
15
+ next[names[names.length - 1]] = value;
16
+ }
17
+ function transform(value, type) {
18
+ if (value === undefined || value === null || type === undefined)
19
+ return value;
20
+ if (!scalar(value))
21
+ unsupportedContent("transform requires a scalar");
22
+ switch (type) {
23
+ case "text": return String(value);
24
+ case "integer": {
25
+ if (typeof value === "boolean" || !/^-?\d+$/.test(String(value)) || !Number.isSafeInteger(Number(value)))
26
+ unsupportedContent("invalid integer");
27
+ return Number(value);
28
+ }
29
+ case "date":
30
+ case "epoch-date": {
31
+ const ms = type === "epoch-date" ? Number(value) * 1000 : Date.parse(String(value));
32
+ if (!Number.isFinite(ms))
33
+ unsupportedContent("invalid date");
34
+ try {
35
+ return new Date(ms).toISOString();
36
+ }
37
+ catch {
38
+ unsupportedContent("invalid date");
39
+ }
40
+ }
41
+ case "url": {
42
+ try {
43
+ const url = new URL(String(value));
44
+ if (url.protocol !== "https:" && url.protocol !== "http:" || url.username || url.password)
45
+ unsupportedContent("invalid URL");
46
+ return url.href;
47
+ }
48
+ catch {
49
+ unsupportedContent("invalid URL");
50
+ }
51
+ }
52
+ default: unsupportedContent("unknown transform");
53
+ }
54
+ }
55
+ export const restJsonProfile = Object.freeze({
56
+ id: "rest-json",
57
+ version: 1,
58
+ kind: "generic",
59
+ validateSpec(value) {
60
+ if (!object(value) || !object(value.identity) || typeof value.identity.resource !== "string" || !object(value.request))
61
+ return { ok: false, errors: [{ path: "/request", message: "rest-json requires a source with identity and request" }] };
62
+ const source = value;
63
+ const errors = validateConnectorRequest(source);
64
+ if (source.request?.graphql)
65
+ errors.push({ path: "/request/graphql", message: "use graphql-cursor for GraphQL" });
66
+ return errors.length ? { ok: false, errors } : { ok: true, spec: JSON.parse(JSON.stringify(source)) };
67
+ },
68
+ hostsFor: (source) => [source.request.host],
69
+ async observe(ctx) {
70
+ const { spec, bound, transport, resumed, mode } = ctx;
71
+ const r = spec.request;
72
+ const paging = r.paging;
73
+ const previous = ctx.cursor;
74
+ const validCursor = (value) => value === null || object(value) && Object.entries(value).every(([key, v]) => ["token", "url", "watermark", "since"].includes(key) ? typeof v === "string" : ["page", "offset"].includes(key) && typeof v === "number");
75
+ if (!validCursor(previous))
76
+ unsupportedContent("invalid cursor");
77
+ const numeric = paging?.kind === "page-number" || paging?.kind === "offset";
78
+ const start = mode === "complete" && previous === null;
79
+ const page = numeric && resumed ? 1 : previous?.page ?? 1;
80
+ const offset = numeric && resumed ? 0 : previous?.offset ?? 0;
81
+ if (!Number.isSafeInteger(page) || page < 1 || !Number.isSafeInteger(offset) || offset < 0)
82
+ unsupportedContent("invalid numeric cursor");
83
+ let since = previous?.since;
84
+ if (since === undefined && previous?.watermark && r.watermark && !start) {
85
+ const ms = Date.parse(previous.watermark) - r.watermark.overlap_seconds * 1000;
86
+ if (!Number.isFinite(ms))
87
+ unsupportedContent("invalid watermark");
88
+ since = new Date(ms).toISOString();
89
+ }
90
+ const dynamic = { cursor: previous?.token ?? "", page: String(paging?.kind === "offset" ? offset : page), watermark: since ?? "" };
91
+ const render = (v) => renderRequestValue(v, bound.parameters, dynamic);
92
+ const path = r.path.replace(/\{([A-Za-z][A-Za-z0-9_]*)\}/g, (_, name) => {
93
+ const value = bound.parameters[name] ?? dynamic[name];
94
+ if (value === undefined || value === "." || value === "..")
95
+ unsupportedContent("missing request binding");
96
+ return encodeURIComponent(value);
97
+ });
98
+ const target = new URL(`https://${r.host}${path}`);
99
+ for (const [name, value] of Object.entries(r.query ?? {})) {
100
+ if (value === "{cursor}" && !previous?.token || value === "{watermark}" && !since)
101
+ continue;
102
+ target.searchParams.set(name, String(render(value)));
103
+ }
104
+ if (paging?.size_param && paging.size)
105
+ target.searchParams.set(paging.size_param, String(paging.size));
106
+ if (paging?.kind === "page-number")
107
+ target.searchParams.set(paging.page_param, String(page));
108
+ if (paging?.kind === "offset")
109
+ target.searchParams.set(paging.offset_param, String(offset));
110
+ if (r.watermark && since)
111
+ target.searchParams.set(r.watermark.param, since);
112
+ const headers = Object.fromEntries(Object.entries(r.headers ?? { accept: "application/json" }).map(([k, v]) => [k, String(render(v))]));
113
+ if (ctx.validators && mode === "incremental")
114
+ for (const [k, v] of Object.entries(ctx.validators))
115
+ headers[k] = v;
116
+ const body = r.body ? JSON.stringify(Object.fromEntries(Object.entries(r.body).map(([k, v]) => [k, render(v)]))) : undefined;
117
+ // Provider URLs are never rendered as templates. The engine checks the provider's listed paging forms.
118
+ const response = await transport.request({ url: numeric && resumed ? target.href : previous?.url ?? target.href, method: r.method, headers, ...(body !== undefined ? { body } : {}) });
119
+ if (response.status === 304)
120
+ return { records: [], nextCursor: previous, more: false, complete: false };
121
+ let parsed;
122
+ try {
123
+ parsed = JSON.parse(response.body);
124
+ }
125
+ catch {
126
+ unsupportedContent("invalid_json");
127
+ }
128
+ const items = readSourcePath(parsed, r.items);
129
+ if (!Array.isArray(items) || !items.every(object))
130
+ unsupportedContent("items must be an array of records");
131
+ let watermark = previous?.watermark;
132
+ let skipped = 0;
133
+ const records = [];
134
+ for (const item of items) {
135
+ if (r.watermark) {
136
+ const value = readSourcePath(item, r.watermark.field);
137
+ if (typeof value !== "string" || !Number.isFinite(Date.parse(value)))
138
+ unsupportedContent("invalid record watermark");
139
+ if (!watermark || Date.parse(value) > Date.parse(watermark))
140
+ watermark = new Date(value).toISOString();
141
+ }
142
+ if (r.skip?.some(rule => readSourcePath(item, rule.path) !== undefined)) {
143
+ skipped++;
144
+ continue;
145
+ }
146
+ const normalized = JSON.parse(JSON.stringify(item));
147
+ for (const [name, field] of Object.entries(r.fields ?? {})) {
148
+ const value = Object.hasOwn(field, "const") ? field.const : transform(readSourcePath(item, field.from), field.type);
149
+ if (value !== undefined)
150
+ put(normalized, name, value);
151
+ }
152
+ records.push(normalized);
153
+ }
154
+ let token;
155
+ let url;
156
+ let more = false;
157
+ if (paging?.kind === "link-header") {
158
+ url = nextLinkTarget(response.headers.link ?? "", response.url);
159
+ more = url !== undefined;
160
+ }
161
+ else if (paging?.kind === "cursor") {
162
+ const next = readSourcePath(parsed, paging.next_path ?? paging.cursor_path);
163
+ if (next !== undefined && next !== null && next !== "") {
164
+ if (typeof next !== "string")
165
+ unsupportedContent("cursor must be a string");
166
+ if (paging.next_path) {
167
+ try {
168
+ url = new URL(next, response.url).href;
169
+ }
170
+ catch {
171
+ unsupportedContent("invalid next URL");
172
+ }
173
+ }
174
+ else
175
+ token = next;
176
+ more = true;
177
+ }
178
+ }
179
+ else if (numeric)
180
+ more = items.length >= paging.size;
181
+ const nextCursor = {
182
+ ...(token !== undefined ? { token } : {}), ...(url !== undefined ? { url } : {}),
183
+ ...(numeric && more ? paging.kind === "page-number" ? { page: page + 1 } : { offset: offset + paging.size } : {}),
184
+ ...(watermark ? { watermark } : {}), ...(more ? { since: since ?? "" } : {}),
185
+ };
186
+ const declaredComplete = r.complete === "always" || object(r.complete) && readSourcePath(parsed, r.complete.when_path) === r.complete.equals;
187
+ const validators = {};
188
+ if (response.headers.etag)
189
+ validators["if-none-match"] = response.headers.etag;
190
+ if (response.headers["last-modified"])
191
+ validators["if-modified-since"] = response.headers["last-modified"];
192
+ return { records, nextCursor: Object.keys(nextCursor).length ? nextCursor : null, more, complete: !more && declaredComplete && !resumed,
193
+ ...(skipped ? { diagnostics: [{ code: "records_skipped", message: "records skipped by declared presence rule", count: skipped }] } : {}),
194
+ ...(Object.keys(validators).length ? { validators } : {}),
195
+ };
196
+ },
197
+ });
198
+ export const GITHUB_FIELD_COVERAGE = Object.freeze({
199
+ mapped: Object.freeze(["node_id", "number", "repository_url", "title", "html_url", "state", "state_reason", "type", "labels", "assignees", "created_at", "updated_at", "closed_at"]),
200
+ properties: Object.freeze(["number"]),
201
+ ignored: Object.freeze(["id", "url", "body", "user", "comments", "reactions", "locked", "active_lock_reason", "author_association", "closed_by", "draft", "performed_via_github_app", "milestone", "sub_issues_summary", "issue_field_values", "assignee", "repository"]),
202
+ skipped: Object.freeze(["pull_request"]),
203
+ });
204
+ /** Navigation URLs are accounted for but never followed by the normalizer. */
205
+ export function uncoveredGithubFields(issue) {
206
+ const covered = new Set(Object.values(GITHUB_FIELD_COVERAGE).flat());
207
+ return Object.keys(issue).filter(key => !covered.has(key) && !key.endsWith("_url"));
208
+ }
209
+ /** GitHub REST issue projection; the singular assignee is deliberately ignored. */
210
+ export function normalizeGithubIssue(issue, parameters) {
211
+ const { owner, repo } = parameters;
212
+ const expected = `https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`;
213
+ if (!owner || !repo || issue.repository_url !== expected)
214
+ unsupportedContent("issue outside bound repository");
215
+ if (Object.hasOwn(issue, "pull_request"))
216
+ return null;
217
+ for (const name of ["node_id", "title", "html_url", "state", "created_at", "updated_at"]) {
218
+ if (typeof issue[name] !== "string" || !issue[name])
219
+ unsupportedContent(`invalid issue ${name}`);
220
+ }
221
+ if (!Number.isSafeInteger(issue.number) || Number(issue.number) < 1)
222
+ unsupportedContent("invalid issue number");
223
+ for (const name of ["state_reason", "closed_at"])
224
+ if (issue[name] !== null && typeof issue[name] !== "string")
225
+ unsupportedContent(`invalid issue ${name}`);
226
+ if (!Array.isArray(issue.labels) || !Array.isArray(issue.assignees))
227
+ unsupportedContent("invalid issue lists");
228
+ const names = (values, key, prefix = "") => values.map(value => {
229
+ const name = object(value) ? value[key] : key === "name" ? value : undefined;
230
+ if (typeof name !== "string" || !name)
231
+ unsupportedContent(`invalid issue ${key}`);
232
+ return prefix + name;
233
+ });
234
+ const normalized = {
235
+ owner, repo, node_id: issue.node_id, repository: `${owner}/${repo}`, key: `${owner}/${repo}#${issue.number}`,
236
+ number: issue.number, title: issue.title, html_url: issue.html_url, state: issue.state,
237
+ state_key: issue.state_reason === null ? issue.state : `${issue.state}:${issue.state_reason}`,
238
+ close_reason: issue.state === "closed" ? issue.state_reason : null,
239
+ labels: [...new Set(names(issue.labels, "name"))].sort(),
240
+ assignees: [...new Set(names(issue.assignees, "login", "github:"))].sort(),
241
+ created_at: issue.created_at, updated_at: issue.updated_at, closed_at: issue.closed_at,
242
+ };
243
+ if (issue.type !== undefined && issue.type !== null) {
244
+ if (!object(issue.type) || typeof issue.type.name !== "string" || !issue.type.name)
245
+ unsupportedContent("invalid issue type");
246
+ normalized.type_name = issue.type.name;
247
+ }
248
+ return normalized;
249
+ }
250
+ /** Repository-scoped REST issues, sharing the declarative request and paging implementation. */
251
+ export const githubIssuesProfile = Object.freeze({
252
+ id: "github-issues", version: 1, kind: "extension",
253
+ validateSpec(value) {
254
+ const validated = restJsonProfile.validateSpec(value);
255
+ if (!validated.ok)
256
+ return validated;
257
+ const source = validated.spec;
258
+ const r = source.request;
259
+ const errors = [];
260
+ const problem = (path, message) => { errors.push({ path, message }); };
261
+ if (source.identity.resource !== "https://github.com/{owner}/{repo}")
262
+ problem("/identity/resource", "github-issues requires a repository identity");
263
+ if (r.host !== "api.github.com" || r.method !== "GET" || r.path !== "/repos/{owner}/{repo}/issues" || r.items !== "")
264
+ problem("/request", "github-issues requires the repository issues REST listing");
265
+ if (r.paging?.kind !== "link-header" || r.complete !== "always" || r.query?.state !== "all")
266
+ problem("/request", "github-issues requires state=all, Link paging and complete=always");
267
+ if (r.paging && Object.keys(r.paging).some(key => key !== "kind"))
268
+ problem("/request/paging", "github-issues uses provider Link paging only");
269
+ if (r.query?.per_page !== undefined && (!Number.isSafeInteger(Number(r.query.per_page)) || Number(r.query.per_page) < 1 || Number(r.query.per_page) > 100))
270
+ problem("/request/query/per_page", "page size is an integer from 1 to 100");
271
+ if (r.fields || r.skip || r.body || r.graphql)
272
+ problem("/request", "github-issues owns provider normalization and filtering");
273
+ if (Object.keys(r.query ?? {}).some(key => !["state", "sort", "direction", "per_page"].includes(key)))
274
+ problem("/request/query", "unsupported issue filter or paging query");
275
+ if (r.watermark && (r.watermark.field !== "updated_at" || r.watermark.param !== "since"))
276
+ problem("/request/watermark", "github-issues watermark is updated_at through since");
277
+ return errors.length ? { ok: false, errors } : validated;
278
+ },
279
+ hostsFor: () => ["api.github.com"],
280
+ async observe(ctx) {
281
+ // Link page numbers are unstable between runs. Restart without claiming absence on resume.
282
+ const page = await restJsonProfile.observe({ ...ctx, cursor: ctx.resumed ? null : ctx.cursor,
283
+ transport: { request: async (input) => {
284
+ const response = await ctx.transport.request(input);
285
+ const next = nextLinkTarget(response.headers.link ?? "", response.url);
286
+ if (next === undefined)
287
+ return response;
288
+ const target = new URL(next);
289
+ const numeric = /^\/repositories\/[1-9][0-9]*\/issues$/.test(target.pathname);
290
+ const boundPath = `/repos/${encodeURIComponent(ctx.bound.parameters.owner)}/${encodeURIComponent(ctx.bound.parameters.repo)}/issues`;
291
+ if (target.origin !== "https://api.github.com" || !numeric && target.pathname !== boundPath)
292
+ return response;
293
+ const pageNumber = target.searchParams.get("page");
294
+ if (pageNumber === null ? !target.searchParams.has("after") : target.searchParams.getAll("page").length !== 1 || !/^[1-9][0-9]*$/.test(pageNumber) || !Number.isSafeInteger(Number(pageNumber)))
295
+ unsupportedContent("invalid GitHub next page");
296
+ const size = ctx.spec.request.query?.per_page;
297
+ if (target.searchParams.getAll("per_page").length > 1 || target.searchParams.has("per_page") && target.searchParams.get("per_page") !== String(size ?? 30))
298
+ unsupportedContent("GitHub next page changed page size");
299
+ if (!numeric)
300
+ return response;
301
+ // Numeric repository ids in Link headers grant no identity authority. Only their paging
302
+ // query is reused, against the original bound repository and the engine's request guard.
303
+ target.pathname = boundPath;
304
+ return { ...response, headers: { ...response.headers, link: `<${target.href}>; rel="next"` } };
305
+ } },
306
+ });
307
+ const records = [];
308
+ let skipped = 0;
309
+ for (const item of page.records) {
310
+ const normalized = normalizeGithubIssue(item, ctx.bound.parameters);
311
+ if (normalized)
312
+ records.push(normalized);
313
+ else
314
+ skipped++;
315
+ }
316
+ return { ...page, records, complete: page.complete && ctx.mode === "complete" && !ctx.resumed,
317
+ ...(skipped ? { diagnostics: [{ code: "PULL_REQUEST_SKIPPED", message: "pull requests excluded from issue listing", count: skipped }] } : {}),
318
+ };
319
+ },
320
+ });
321
+ export const SOURCE_PROFILES = Object.freeze([restJsonProfile, githubIssuesProfile].map(profile => Object.freeze({ id: profile.id, version: profile.version, kind: profile.kind })));
322
+ /** Inert lookup. Extensions are explicit caller imports, never discovered or executed here. */
323
+ export function getSourceProfile(id) {
324
+ return id === restJsonProfile.id ? restJsonProfile : id === githubIssuesProfile.id ? githubIssuesProfile : undefined;
325
+ }
326
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/source-profiles/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * RFC 8288 sections 3 and 3.3, with quoted-pairs from RFC 7230 section 3.2.6.
3
+ * Malformed or unsupported input refuses the page, rather than establishing terminal completeness.
4
+ */
5
+ export declare function nextLinkTarget(header: string, base: string): string | undefined;
6
+ //# sourceMappingURL=link-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-header.d.ts","sourceRoot":"","sources":["../../src/source-profiles/link-header.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0F/E"}
@@ -0,0 +1,131 @@
1
+ /** Bounded Link-field parsing for paging; parameter values never become parameter syntax. */
2
+ import { unsupportedContent } from "../source-engine/index.js";
3
+ const TOKEN_CHAR = /^[!#$%&'*+.^_`|~0-9A-Za-z-]$/;
4
+ const MAX_HEADER = 65_536;
5
+ const MAX_LINKS = 128;
6
+ const MAX_PARAMETERS = 64;
7
+ /**
8
+ * RFC 8288 sections 3 and 3.3, with quoted-pairs from RFC 7230 section 3.2.6.
9
+ * Malformed or unsupported input refuses the page, rather than establishing terminal completeness.
10
+ */
11
+ export function nextLinkTarget(header, base) {
12
+ if (header.length > MAX_HEADER)
13
+ unsupportedContent("Link header exceeds parser bound");
14
+ let at = 0;
15
+ let links = 0;
16
+ let next;
17
+ const malformed = () => unsupportedContent("malformed Link header");
18
+ const whitespace = () => { while (header[at] === " " || header[at] === "\t")
19
+ at++; };
20
+ const token = () => {
21
+ const begin = at;
22
+ while (at < header.length && TOKEN_CHAR.test(header[at]))
23
+ at++;
24
+ if (at === begin)
25
+ malformed();
26
+ return header.slice(begin, at);
27
+ };
28
+ const quoted = () => {
29
+ at++; // opening DQUOTE
30
+ let value = "";
31
+ while (at < header.length) {
32
+ let ch = header[at++];
33
+ if (ch === '"')
34
+ return value;
35
+ if (ch === "\\") {
36
+ if (at === header.length)
37
+ malformed();
38
+ ch = header[at++];
39
+ }
40
+ const code = ch.charCodeAt(0);
41
+ if (code !== 9 && (code < 32 || code === 127 || code > 255))
42
+ malformed();
43
+ value += ch;
44
+ }
45
+ return malformed();
46
+ };
47
+ whitespace();
48
+ while (at < header.length) {
49
+ if (++links > MAX_LINKS)
50
+ unsupportedContent("too many Link targets");
51
+ if (header[at++] !== "<")
52
+ malformed();
53
+ const begin = at;
54
+ while (at < header.length && header[at] !== ">") {
55
+ const ch = header[at++];
56
+ const code = ch.charCodeAt(0);
57
+ if (code <= 32 || code >= 127 || ch === "<" || ch === '"' || ch === "\\")
58
+ malformed();
59
+ }
60
+ if (header[at] !== ">")
61
+ malformed();
62
+ const target = header.slice(begin, at++);
63
+ let relation;
64
+ let anchor;
65
+ let parameters = 0;
66
+ whitespace();
67
+ while (header[at] === ";") {
68
+ if (++parameters > MAX_PARAMETERS)
69
+ unsupportedContent("too many Link parameters");
70
+ at++;
71
+ whitespace();
72
+ const name = token().toLowerCase();
73
+ whitespace();
74
+ let value;
75
+ if (header[at] === "=") {
76
+ at++;
77
+ whitespace();
78
+ value = header[at] === '"' ? quoted() : token();
79
+ whitespace();
80
+ }
81
+ if (name === "rel" && relation === undefined) {
82
+ if (value === undefined || value === "")
83
+ malformed();
84
+ relation = value;
85
+ }
86
+ if (name === "anchor" && anchor === undefined) {
87
+ if (value === undefined)
88
+ malformed();
89
+ anchor = value;
90
+ }
91
+ if (at < header.length && header[at] !== ";" && header[at] !== ",")
92
+ malformed();
93
+ }
94
+ if (relation === undefined)
95
+ return malformed();
96
+ let resolved;
97
+ try {
98
+ resolved = new URL(target, base).href;
99
+ if (anchor !== undefined && new URL(anchor, base).href !== new URL(base).href)
100
+ unsupportedContent("Link context override is unsupported");
101
+ }
102
+ catch {
103
+ return unsupportedContent("invalid Link target or context");
104
+ }
105
+ const relations = relation.toLowerCase().split(/[ \t]+/);
106
+ for (const name of relations) {
107
+ if (/^[a-z][a-z0-9.-]*$/.test(name))
108
+ continue;
109
+ try {
110
+ new URL(name);
111
+ }
112
+ catch {
113
+ malformed();
114
+ }
115
+ }
116
+ if (relations.includes("next")) {
117
+ if (next !== undefined)
118
+ unsupportedContent("multiple next links");
119
+ next = resolved;
120
+ }
121
+ if (at === header.length)
122
+ break;
123
+ if (header[at++] !== ",")
124
+ malformed();
125
+ whitespace();
126
+ if (at === header.length)
127
+ malformed();
128
+ }
129
+ return next;
130
+ }
131
+ //# sourceMappingURL=link-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-header.js","sourceRoot":"","sources":["../../src/source-profiles/link-header.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superbee/core",
3
- "version": "0.2.0-pre.21",
3
+ "version": "0.2.0-pre.22",
4
4
  "type": "module",
5
5
  "description": "OKF store engine \u2014 bundle I/O, cross-links, derived backlinks, freshness, and versioned writes.",
6
6
  "license": "Apache-2.0",
@@ -206,6 +206,10 @@
206
206
  "./kind-authoring": {
207
207
  "types": "./dist/kind-authoring.d.ts",
208
208
  "default": "./dist/kind-authoring.js"
209
+ },
210
+ "./source-profiles": {
211
+ "types": "./dist/source-profiles/index.d.ts",
212
+ "default": "./dist/source-profiles/index.js"
209
213
  }
210
214
  },
211
215
  "files": [
@@ -223,6 +227,7 @@
223
227
  "prepublishOnly": "node -e \"console.error('@superbee/core is released by .github/workflows/release-libraries.yml; do not run npm publish here'); process.exit(1)\""
224
228
  },
225
229
  "dependencies": {
230
+ "graphql": "17.0.2",
226
231
  "gray-matter": "^4.0.3",
227
232
  "js-yaml": "^3.15.2"
228
233
  },