@rivi-software/agentic-seo-check 0.1.0 → 0.2.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.
Files changed (144) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +124 -18
  3. package/dist/brand.d.ts +11 -0
  4. package/dist/brand.js +22 -0
  5. package/dist/brand.js.map +1 -0
  6. package/dist/cli.js +174 -86
  7. package/dist/cli.js.map +1 -1
  8. package/dist/core/aeo/audit.d.ts +44 -0
  9. package/dist/core/aeo/audit.js +310 -0
  10. package/dist/core/aeo/audit.js.map +1 -0
  11. package/dist/core/aeo/bots.d.ts +30 -0
  12. package/dist/core/aeo/bots.js +299 -0
  13. package/dist/core/aeo/bots.js.map +1 -0
  14. package/dist/core/aeo/llms-txt.d.ts +8 -0
  15. package/dist/core/aeo/llms-txt.js +88 -0
  16. package/dist/core/aeo/llms-txt.js.map +1 -0
  17. package/dist/core/aeo/page.d.ts +53 -0
  18. package/dist/core/aeo/page.js +312 -0
  19. package/dist/core/aeo/page.js.map +1 -0
  20. package/dist/core/aeo/probe.d.ts +10 -0
  21. package/dist/core/aeo/probe.js +53 -0
  22. package/dist/core/aeo/probe.js.map +1 -0
  23. package/dist/core/aeo/site-rules.d.ts +13 -0
  24. package/dist/core/aeo/site-rules.js +178 -0
  25. package/dist/core/aeo/site-rules.js.map +1 -0
  26. package/dist/core/audit.d.ts +37 -16
  27. package/dist/core/audit.js +389 -249
  28. package/dist/core/audit.js.map +1 -1
  29. package/dist/core/concurrency.d.ts +4 -4
  30. package/dist/core/concurrency.js +33 -23
  31. package/dist/core/concurrency.js.map +1 -1
  32. package/dist/core/crawl.d.ts +9 -5
  33. package/dist/core/crawl.js +271 -123
  34. package/dist/core/crawl.js.map +1 -1
  35. package/dist/core/fetch.d.ts +5 -5
  36. package/dist/core/fetch.js +151 -100
  37. package/dist/core/fetch.js.map +1 -1
  38. package/dist/core/html/answer.d.ts +4 -0
  39. package/dist/core/html/answer.js +198 -0
  40. package/dist/core/html/answer.js.map +1 -0
  41. package/dist/core/html/dom.d.ts +17 -0
  42. package/dist/core/html/dom.js +83 -0
  43. package/dist/core/html/dom.js.map +1 -0
  44. package/dist/core/html/extract.d.ts +2 -2
  45. package/dist/core/html/extract.js +102 -111
  46. package/dist/core/html/extract.js.map +1 -1
  47. package/dist/core/html/structured-data.d.ts +16 -6
  48. package/dist/core/html/structured-data.js +180 -145
  49. package/dist/core/html/structured-data.js.map +1 -1
  50. package/dist/core/html/text.d.ts +14 -14
  51. package/dist/core/html/text.js +110 -107
  52. package/dist/core/html/text.js.map +1 -1
  53. package/dist/core/lighthouse.d.ts +26 -25
  54. package/dist/core/lighthouse.js +181 -105
  55. package/dist/core/lighthouse.js.map +1 -1
  56. package/dist/core/performance-rules.d.ts +2 -2
  57. package/dist/core/performance-rules.js +105 -33
  58. package/dist/core/performance-rules.js.map +1 -1
  59. package/dist/core/render-rules.d.ts +5 -4
  60. package/dist/core/render-rules.js +129 -62
  61. package/dist/core/render-rules.js.map +1 -1
  62. package/dist/core/render.d.ts +2 -2
  63. package/dist/core/render.js +29 -23
  64. package/dist/core/render.js.map +1 -1
  65. package/dist/core/report/markdown.d.ts +4 -2
  66. package/dist/core/report/markdown.js +210 -129
  67. package/dist/core/report/markdown.js.map +1 -1
  68. package/dist/core/robots.d.ts +12 -5
  69. package/dist/core/robots.js +43 -17
  70. package/dist/core/robots.js.map +1 -1
  71. package/dist/core/rules/aeo.d.ts +11 -0
  72. package/dist/core/rules/aeo.js +423 -0
  73. package/dist/core/rules/aeo.js.map +1 -0
  74. package/dist/core/rules/canonical.d.ts +1 -1
  75. package/dist/core/rules/canonical.js +93 -57
  76. package/dist/core/rules/canonical.js.map +1 -1
  77. package/dist/core/rules/content.js +40 -26
  78. package/dist/core/rules/content.js.map +1 -1
  79. package/dist/core/rules/document.js +64 -41
  80. package/dist/core/rules/document.js.map +1 -1
  81. package/dist/core/rules/headings.js +58 -38
  82. package/dist/core/rules/headings.js.map +1 -1
  83. package/dist/core/rules/hreflang.js +70 -38
  84. package/dist/core/rules/hreflang.js.map +1 -1
  85. package/dist/core/rules/images.js +44 -26
  86. package/dist/core/rules/images.js.map +1 -1
  87. package/dist/core/rules/index.d.ts +10 -6
  88. package/dist/core/rules/index.js +43 -36
  89. package/dist/core/rules/index.js.map +1 -1
  90. package/dist/core/rules/indexing.d.ts +2 -2
  91. package/dist/core/rules/indexing.js +48 -26
  92. package/dist/core/rules/indexing.js.map +1 -1
  93. package/dist/core/rules/keyword.js +84 -47
  94. package/dist/core/rules/keyword.js.map +1 -1
  95. package/dist/core/rules/links.js +72 -37
  96. package/dist/core/rules/links.js.map +1 -1
  97. package/dist/core/rules/meta.js +55 -34
  98. package/dist/core/rules/meta.js.map +1 -1
  99. package/dist/core/rules/response.js +75 -41
  100. package/dist/core/rules/response.js.map +1 -1
  101. package/dist/core/rules/rule.d.ts +6 -6
  102. package/dist/core/rules/rule.js +36 -36
  103. package/dist/core/rules/rule.js.map +1 -1
  104. package/dist/core/rules/social.js +86 -45
  105. package/dist/core/rules/social.js.map +1 -1
  106. package/dist/core/rules/structured-data.d.ts +6 -4
  107. package/dist/core/rules/structured-data.js +314 -102
  108. package/dist/core/rules/structured-data.js.map +1 -1
  109. package/dist/core/rules/title.js +48 -33
  110. package/dist/core/rules/title.js.map +1 -1
  111. package/dist/core/score.d.ts +5 -3
  112. package/dist/core/score.js +11 -9
  113. package/dist/core/score.js.map +1 -1
  114. package/dist/core/site-rules.d.ts +3 -3
  115. package/dist/core/site-rules.js +409 -198
  116. package/dist/core/site-rules.js.map +1 -1
  117. package/dist/core/sitemap.d.ts +5 -5
  118. package/dist/core/sitemap.js +109 -64
  119. package/dist/core/sitemap.js.map +1 -1
  120. package/dist/core/static.d.ts +2 -2
  121. package/dist/core/static.js +210 -112
  122. package/dist/core/static.js.map +1 -1
  123. package/dist/core/summary.d.ts +2 -2
  124. package/dist/core/summary.js +11 -6
  125. package/dist/core/summary.js.map +1 -1
  126. package/dist/core/types.d.ts +189 -14
  127. package/dist/core/types.js +15 -8
  128. package/dist/core/types.js.map +1 -1
  129. package/dist/core/url.d.ts +11 -11
  130. package/dist/core/url.js +122 -70
  131. package/dist/core/url.js.map +1 -1
  132. package/dist/index.d.ts +15 -11
  133. package/dist/index.js +11 -9
  134. package/dist/index.js.map +1 -1
  135. package/dist/mcp-bin.js +7 -4
  136. package/dist/mcp-bin.js.map +1 -1
  137. package/dist/mcp.d.ts +3 -3
  138. package/dist/mcp.js +437 -121
  139. package/dist/mcp.js.map +1 -1
  140. package/dist/version.d.ts +0 -1
  141. package/dist/version.js +4 -2
  142. package/dist/version.js.map +1 -1
  143. package/package.json +32 -10
  144. package/skills/seo-audit/SKILL.md +8 -2
@@ -1,185 +1,220 @@
1
- import { collapseWhitespace } from './text.js';
2
- export function extractStructuredData($) {
3
- const items = [];
4
- const errors = [];
5
- $('script[type]').each((_, el) => {
6
- const type = ($(el).attr('type') ?? '').trim().toLowerCase();
7
- if (type !== 'application/ld+json')
8
- return;
9
- const raw = $(el).text().trim();
10
- if (!raw) {
11
- errors.push({ source: 'json-ld', message: 'Empty JSON-LD script block', snippet: '' });
12
- return;
13
- }
14
- let parsed;
15
- try {
16
- parsed = JSON.parse(stripCdata(raw));
17
- }
18
- catch (err) {
19
- errors.push({
20
- source: 'json-ld',
21
- message: `Invalid JSON: ${err.message}`,
22
- snippet: raw.slice(0, 200),
23
- });
24
- return;
25
- }
26
- for (const node of flattenJsonLd(parsed, null))
27
- items.push(node);
28
- });
29
- for (const item of extractMicrodata($))
30
- items.push(item);
31
- return { items, errors };
32
- }
33
- function stripCdata(text) {
34
- return text
35
- .replace(/^\s*<!--/, '')
36
- .replace(/-->\s*$/, '')
37
- .replace(/^\s*\/\*\s*<!\[CDATA\[\s*\*\//, '')
38
- .replace(/\/\*\s*\]\]>\s*\*\/\s*$/, '')
39
- .replace(/^\s*<!\[CDATA\[/, '')
40
- .replace(/\]\]>\s*$/, '');
41
- }
42
- function flattenJsonLd(node, inheritedContext) {
43
- if (Array.isArray(node))
44
- return node.flatMap((n) => flattenJsonLd(n, inheritedContext));
45
- if (!node || typeof node !== 'object')
46
- return [];
47
- const obj = node;
48
- const context = contextString(obj['@context']) ?? inheritedContext;
49
- if (Array.isArray(obj['@graph'])) {
50
- return obj['@graph'].flatMap((n) => flattenJsonLd(n, context));
51
- }
52
- return [{ source: 'json-ld', types: typesOf(obj['@type']), context, data: obj }];
53
- }
54
- export function contextString(value) {
55
- if (typeof value === 'string')
1
+ import { isTag } from "domhandler";
2
+ import { attr, childElements, hasAttr, queryAll, text } from "./dom.js";
3
+ import { collapseWhitespace } from "./text.js";
4
+ /** Whether a structured-data value is a string. */
5
+ export const isString = (value) => typeof value === "string";
6
+ /** Whether a structured-data value is an object with properties, rather than a list or a scalar. */
7
+ export const isJsonObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
8
+ const stripCdata = (source) => source
9
+ .replace(/^\s*<!--/u, "")
10
+ .replace(/-->\s*$/u, "")
11
+ .replace(/^\s*\/\*\s*<!\[CDATA\[\s*\*\//u, "")
12
+ .replace(/\/\*\s*\]\]>\s*\*\/\s*$/u, "")
13
+ .replace(/^\s*<!\[CDATA\[/u, "")
14
+ .replace(/\]\]>\s*$/u, "");
15
+ /** `https://schema.org/Article` -> `Article`, `schema:Article` -> `Article`. */
16
+ export const shortType = (type) => {
17
+ const t = type.trim();
18
+ const slash = t.lastIndexOf("/");
19
+ const colon = t.lastIndexOf(":");
20
+ const cut = Math.max(slash, t.startsWith("http") ? -1 : colon);
21
+ return cut >= 0 ? t.slice(cut + 1) : t;
22
+ };
23
+ export const contextString = (value) => {
24
+ if (isString(value)) {
56
25
  return value;
26
+ }
57
27
  if (Array.isArray(value)) {
58
28
  for (const v of value) {
59
29
  const s = contextString(v);
60
- if (s)
30
+ if (s) {
61
31
  return s;
32
+ }
62
33
  }
63
34
  return null;
64
35
  }
65
- if (value && typeof value === 'object') {
66
- const vocab = value['@vocab'];
67
- if (typeof vocab === 'string')
36
+ if (isJsonObject(value)) {
37
+ const vocab = value["@vocab"];
38
+ if (isString(vocab)) {
68
39
  return vocab;
40
+ }
69
41
  }
70
42
  return null;
71
- }
72
- export function typesOf(value) {
73
- if (typeof value === 'string')
43
+ };
44
+ export const typesOf = (value) => {
45
+ if (isString(value)) {
74
46
  return [shortType(value)];
75
- if (Array.isArray(value))
76
- return value.filter((v) => typeof v === 'string').map(shortType);
47
+ }
48
+ if (Array.isArray(value)) {
49
+ return value.filter(isString).map(shortType);
50
+ }
77
51
  return [];
78
- }
79
- /** `https://schema.org/Article` -> `Article`, `schema:Article` -> `Article`. */
80
- export function shortType(type) {
81
- const t = type.trim();
82
- const slash = t.lastIndexOf('/');
83
- const colon = t.lastIndexOf(':');
84
- const cut = Math.max(slash, t.startsWith('http') ? -1 : colon);
85
- return cut >= 0 ? t.slice(cut + 1) : t;
86
- }
52
+ };
53
+ const flattenJsonLd = (node, inheritedContext) => {
54
+ if (Array.isArray(node)) {
55
+ return node.flatMap((n) => flattenJsonLd(n, inheritedContext));
56
+ }
57
+ if (!isJsonObject(node)) {
58
+ return [];
59
+ }
60
+ const context = contextString(node["@context"]) ?? inheritedContext;
61
+ const graph = node["@graph"];
62
+ if (Array.isArray(graph)) {
63
+ return graph.flatMap((n) => flattenJsonLd(n, context));
64
+ }
65
+ return [
66
+ { source: "json-ld", types: typesOf(node["@type"]), context, data: node },
67
+ ];
68
+ };
87
69
  /* ---------------------------------------------------------------------------
88
70
  * Microdata
89
71
  * ------------------------------------------------------------------------- */
90
- function extractMicrodata($) {
91
- const items = [];
92
- $('[itemscope]').each((_, el) => {
93
- // Top-level scopes only: nested scopes become property values.
94
- if ($(el).parents('[itemscope]').length > 0)
95
- return;
96
- const data = microdataObject($, el);
97
- items.push({
98
- source: 'microdata',
99
- types: typesOf(data['@type']),
100
- context: contextString(data['@context']),
101
- data,
102
- });
103
- });
104
- return items;
105
- }
106
- function microdataObject($, scope) {
72
+ /** Elements whose microdata value is always one attribute, empty when it is missing. */
73
+ const URL_VALUE_ATTRIBUTES = new Map([
74
+ ["meta", "content"],
75
+ ["img", "src"],
76
+ ["audio", "src"],
77
+ ["embed", "src"],
78
+ ["iframe", "src"],
79
+ ["source", "src"],
80
+ ["track", "src"],
81
+ ["video", "src"],
82
+ ["a", "href"],
83
+ ["area", "href"],
84
+ ["link", "href"],
85
+ ["object", "data"],
86
+ ]);
87
+ /** Elements whose microdata value is an attribute other than `content`, or else their text. */
88
+ const TEXT_VALUE_ATTRIBUTES = new Map([
89
+ ["data", "value"],
90
+ ["meter", "value"],
91
+ ["time", "datetime"],
92
+ ]);
93
+ const microdataValue = (el) => {
94
+ const tag = el.name.toLowerCase();
95
+ const urlAttribute = URL_VALUE_ATTRIBUTES.get(tag);
96
+ if (urlAttribute) {
97
+ return attr(el, urlAttribute) ?? "";
98
+ }
99
+ return (attr(el, TEXT_VALUE_ATTRIBUTES.get(tag) ?? "content") ??
100
+ collapseWhitespace(text(el)));
101
+ };
102
+ /** Walk descendants, stopping at nested itemscopes (they are added as a single property). */
103
+ const collectProps = (root, out) => {
104
+ for (const child of childElements(root)) {
105
+ if (hasAttr(child, "itemprop")) {
106
+ out.push(child);
107
+ }
108
+ if (!hasAttr(child, "itemscope")) {
109
+ collectProps(child, out);
110
+ }
111
+ }
112
+ };
113
+ /** Whether an element sits inside another itemscope, which makes it a property, not an item. */
114
+ const hasItemscopeAncestor = (el) => {
115
+ for (let p = el.parent; p && isTag(p); p = p.parent) {
116
+ if (hasAttr(p, "itemscope")) {
117
+ return true;
118
+ }
119
+ }
120
+ return false;
121
+ };
122
+ const microdataObject = (scope) => {
107
123
  const obj = {};
108
- const itemtype = $(scope).attr('itemtype');
124
+ const itemtype = attr(scope, "itemtype");
109
125
  if (itemtype) {
110
- const types = itemtype.split(/\s+/).filter(Boolean);
111
- obj['@type'] = types.length === 1 ? types[0] : types;
112
- const first = types[0];
126
+ const types = itemtype.split(/\s+/u).filter(Boolean);
127
+ const [first] = types;
128
+ obj["@type"] = types.length === 1 && first ? first : types;
113
129
  if (first) {
114
130
  try {
115
131
  const u = new URL(first);
116
- obj['@context'] = `${u.protocol}//${u.host}`;
132
+ obj["@context"] = `${u.protocol}//${u.host}`;
117
133
  }
118
134
  catch {
119
135
  /* not a URL */
120
136
  }
121
137
  }
122
138
  }
123
- const itemid = $(scope).attr('itemid');
124
- if (itemid)
125
- obj['@id'] = itemid;
139
+ const itemid = attr(scope, "itemid");
140
+ if (itemid) {
141
+ obj["@id"] = itemid;
142
+ }
126
143
  const props = [];
127
- collectProps($, scope, props);
144
+ collectProps(scope, props);
128
145
  for (const el of props) {
129
- const names = ($(el).attr('itemprop') ?? '').split(/\s+/).filter(Boolean);
130
- const value = $(el).is('[itemscope]') ? microdataObject($, el) : microdataValue($, el);
146
+ const names = (attr(el, "itemprop") ?? "").split(/\s+/u).filter(Boolean);
147
+ const value = hasAttr(el, "itemscope")
148
+ ? microdataObject(el)
149
+ : microdataValue(el);
131
150
  for (const name of names) {
132
151
  const existing = obj[name];
133
- if (existing === undefined)
152
+ if (existing === undefined) {
134
153
  obj[name] = value;
135
- else if (Array.isArray(existing))
154
+ }
155
+ else if (Array.isArray(existing)) {
136
156
  existing.push(value);
137
- else
157
+ }
158
+ else {
138
159
  obj[name] = [existing, value];
160
+ }
139
161
  }
140
162
  }
141
163
  return obj;
142
- }
143
- /** Walk descendants, stopping at nested itemscopes (they are added as a single property). */
144
- function collectProps($, root, out) {
145
- const children = $(root).children().toArray();
146
- for (const child of children) {
147
- const hasProp = $(child).is('[itemprop]');
148
- if (hasProp)
149
- out.push(child);
150
- if (!$(child).is('[itemscope]'))
151
- collectProps($, child, out);
152
- }
153
- }
154
- function microdataValue($, el) {
155
- const $el = $(el);
156
- const tag = (el.tagName ?? '').toLowerCase();
157
- switch (tag) {
158
- case 'meta':
159
- return $el.attr('content') ?? '';
160
- case 'img':
161
- case 'audio':
162
- case 'embed':
163
- case 'iframe':
164
- case 'source':
165
- case 'track':
166
- case 'video':
167
- return $el.attr('src') ?? '';
168
- case 'a':
169
- case 'area':
170
- case 'link':
171
- return $el.attr('href') ?? '';
172
- case 'object':
173
- return $el.attr('data') ?? '';
174
- case 'data':
175
- case 'meter':
176
- return $el.attr('value') ?? collapseWhitespace($el.text());
177
- case 'time':
178
- return $el.attr('datetime') ?? collapseWhitespace($el.text());
179
- default: {
180
- const content = $el.attr('content');
181
- return content !== undefined ? content : collapseWhitespace($el.text());
164
+ };
165
+ const extractMicrodata = (doc) => {
166
+ const items = [];
167
+ for (const el of queryAll(doc, "[itemscope]")) {
168
+ // Top-level scopes only: nested scopes become property values.
169
+ if (hasItemscopeAncestor(el)) {
170
+ continue;
171
+ }
172
+ const data = microdataObject(el);
173
+ items.push({
174
+ source: "microdata",
175
+ types: typesOf(data["@type"]),
176
+ context: contextString(data["@context"]),
177
+ data,
178
+ });
179
+ }
180
+ return items;
181
+ };
182
+ export const extractStructuredData = (doc) => {
183
+ const items = [];
184
+ const errors = [];
185
+ for (const el of queryAll(doc, "script[type]")) {
186
+ const type = (attr(el, "type") ?? "").trim().toLowerCase();
187
+ if (type !== "application/ld+json") {
188
+ continue;
189
+ }
190
+ const raw = text(el).trim();
191
+ if (!raw) {
192
+ errors.push({
193
+ source: "json-ld",
194
+ message: "Empty JSON-LD script block",
195
+ snippet: "",
196
+ });
197
+ continue;
198
+ }
199
+ let parsed;
200
+ try {
201
+ parsed = JSON.parse(stripCdata(raw));
202
+ }
203
+ catch (error) {
204
+ errors.push({
205
+ source: "json-ld",
206
+ message: `Invalid JSON: ${error instanceof Error ? error.message : String(error)}`,
207
+ snippet: raw.slice(0, 200),
208
+ });
209
+ continue;
210
+ }
211
+ for (const node of flattenJsonLd(parsed, null)) {
212
+ items.push(node);
182
213
  }
183
214
  }
184
- }
215
+ for (const item of extractMicrodata(doc)) {
216
+ items.push(item);
217
+ }
218
+ return { items, errors };
219
+ };
185
220
  //# sourceMappingURL=structured-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"structured-data.js","sourceRoot":"","sources":["../../../src/core/html/structured-data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structured-data.js","sourceRoot":"","sources":["../../../src/core/html/structured-data.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  /** Text analysis helpers: word counts, readability, placeholder detection. */
2
- export declare function words(text: string): string[];
3
- export declare function wordCount(text: string): number;
4
- export declare function collapseWhitespace(text: string): string;
5
- export declare function sentenceCount(text: string): number;
2
+ export declare const words: (text: string) => string[];
3
+ export declare const wordCount: (text: string) => number;
4
+ export declare const collapseWhitespace: (text: string) => string;
5
+ export declare const sentenceCount: (text: string) => number;
6
6
  /** English syllable heuristic: vowel groups minus silent trailing e, min 1. */
7
- export declare function syllables(word: string): number;
7
+ export declare const syllables: (word: string) => number;
8
8
  /**
9
9
  * Flesch Reading Ease (English formula). Returns null when there is not enough text.
10
10
  * 90-100 very easy, 60-70 plain English, 30-50 difficult, <30 very difficult.
11
11
  */
12
- export declare function fleschReadingEase(text: string): number | null;
13
- export declare function hasPlaceholderText(text: string): boolean;
12
+ export declare const fleschReadingEase: (text: string) => number | null;
13
+ export declare const hasPlaceholderText: (text: string) => boolean;
14
14
  export declare const GENERIC_TITLES: Set<string>;
15
- export declare function isGenericTitle(title: string): boolean;
15
+ export declare const isGenericTitle: (title: string) => boolean;
16
16
  export declare const GENERIC_ANCHORS: Set<string>;
17
- export declare function isGenericAnchor(text: string): boolean;
18
- export declare function normalizeForComparison(text: string): string;
19
- export declare function includesKeyword(haystack: string | null | undefined, keyword: string): boolean;
20
- export declare function keywordOccurrences(text: string, keyword: string): number;
17
+ export declare const isGenericAnchor: (text: string) => boolean;
18
+ export declare const normalizeForComparison: (text: string) => string;
19
+ export declare const includesKeyword: (haystack: string | null | undefined, keyword: string) => boolean;
20
+ export declare const keywordOccurrences: (text: string, keyword: string) => number;
21
21
  /** 5-word shingles for near-duplicate detection. */
22
- export declare function shingles(text: string, size?: number): Set<string>;
23
- export declare function jaccard(a: Set<string>, b: Set<string>): number;
22
+ export declare const shingles: (text: string, size?: number) => Set<string>;
23
+ export declare const jaccard: (a: Set<string>, b: Set<string>) => number;