@neottia/searchable-core 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 (77) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +5 -0
  3. package/README.md +71 -0
  4. package/config.schema.json +246 -0
  5. package/dist/config.d.ts +423 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +343 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/errors.d.ts +32 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +41 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/extraction-worker.d.ts +2 -0
  14. package/dist/extraction-worker.d.ts.map +1 -0
  15. package/dist/extraction-worker.js +38 -0
  16. package/dist/extraction-worker.js.map +1 -0
  17. package/dist/fetcher.d.ts +5 -0
  18. package/dist/fetcher.d.ts.map +1 -0
  19. package/dist/fetcher.js +173 -0
  20. package/dist/fetcher.js.map +1 -0
  21. package/dist/http.d.ts +54 -0
  22. package/dist/http.d.ts.map +1 -0
  23. package/dist/http.js +372 -0
  24. package/dist/http.js.map +1 -0
  25. package/dist/index.d.ts +14 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +14 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/migration-worker.d.ts +2 -0
  30. package/dist/migration-worker.d.ts.map +1 -0
  31. package/dist/migration-worker.js +60 -0
  32. package/dist/migration-worker.js.map +1 -0
  33. package/dist/migration.d.ts +19 -0
  34. package/dist/migration.d.ts.map +1 -0
  35. package/dist/migration.js +221 -0
  36. package/dist/migration.js.map +1 -0
  37. package/dist/providers.d.ts +9 -0
  38. package/dist/providers.d.ts.map +1 -0
  39. package/dist/providers.js +210 -0
  40. package/dist/providers.js.map +1 -0
  41. package/dist/redaction.d.ts +9 -0
  42. package/dist/redaction.d.ts.map +1 -0
  43. package/dist/redaction.js +161 -0
  44. package/dist/redaction.js.map +1 -0
  45. package/dist/runtime.d.ts +20 -0
  46. package/dist/runtime.d.ts.map +1 -0
  47. package/dist/runtime.js +205 -0
  48. package/dist/runtime.js.map +1 -0
  49. package/dist/schemas.d.ts +49 -0
  50. package/dist/schemas.d.ts.map +1 -0
  51. package/dist/schemas.js +64 -0
  52. package/dist/schemas.js.map +1 -0
  53. package/dist/services.d.ts +20 -0
  54. package/dist/services.d.ts.map +1 -0
  55. package/dist/services.js +2 -0
  56. package/dist/services.js.map +1 -0
  57. package/dist/stash.d.ts +65 -0
  58. package/dist/stash.d.ts.map +1 -0
  59. package/dist/stash.js +490 -0
  60. package/dist/stash.js.map +1 -0
  61. package/dist/tool-contracts.d.ts +104 -0
  62. package/dist/tool-contracts.d.ts.map +1 -0
  63. package/dist/tool-contracts.js +71 -0
  64. package/dist/tool-contracts.js.map +1 -0
  65. package/dist/tools.d.ts +23 -0
  66. package/dist/tools.d.ts.map +1 -0
  67. package/dist/tools.js +134 -0
  68. package/dist/tools.js.map +1 -0
  69. package/dist/utf8.d.ts +2 -0
  70. package/dist/utf8.d.ts.map +1 -0
  71. package/dist/utf8.js +14 -0
  72. package/dist/utf8.js.map +1 -0
  73. package/dist/worker.d.ts +12 -0
  74. package/dist/worker.d.ts.map +1 -0
  75. package/dist/worker.js +45 -0
  76. package/dist/worker.js.map +1 -0
  77. package/package.json +63 -0
@@ -0,0 +1,71 @@
1
+ import { z } from 'zod';
2
+ import { searchableHttpUrlSchema, searchableProviderSchema, webAskResultSchema, webFetchResultSchema, webFetchSourceSchema, webGrepResultSchema, webSearchResultSchema, } from './schemas.js';
3
+ const query = z
4
+ .string()
5
+ .max(16 * 1024)
6
+ .trim()
7
+ .min(1)
8
+ .regex(/\S/u, 'must not be blank');
9
+ const limit = z.number().int().min(1).max(100);
10
+ function configuredLimit(defaultValue) {
11
+ return limit.optional().meta({ default: defaultValue });
12
+ }
13
+ export const searchableToolSchemas = {
14
+ web_search: {
15
+ input: z
16
+ .object({
17
+ query,
18
+ provider: searchableProviderSchema.optional().meta({ default: 'duckduckgo' }),
19
+ limit: configuredLimit(5),
20
+ })
21
+ .strict(),
22
+ output: z.object({ results: z.array(webSearchResultSchema).max(100) }).strict(),
23
+ },
24
+ web_fetch: {
25
+ input: z.object({ url: searchableHttpUrlSchema }).strict(),
26
+ output: webFetchResultSchema,
27
+ },
28
+ web_stash: {
29
+ input: z
30
+ .object({
31
+ url: searchableHttpUrlSchema,
32
+ title: z
33
+ .string()
34
+ .max(4 * 1024)
35
+ .trim()
36
+ .min(1)
37
+ .regex(/\S/u, 'must not be blank'),
38
+ content: z
39
+ .string()
40
+ .min(1)
41
+ .regex(/\S/u, 'must not be blank')
42
+ .max(10 * 1024 * 1024),
43
+ excerpt: z
44
+ .string()
45
+ .max(10 * 1024 * 1024)
46
+ .optional(),
47
+ siteName: z
48
+ .string()
49
+ .max(4 * 1024)
50
+ .trim()
51
+ .min(1)
52
+ .regex(/\S/u, 'must not be blank')
53
+ .optional(),
54
+ source: webFetchSourceSchema.optional(),
55
+ })
56
+ .strict(),
57
+ output: z.object({ stashed: z.literal(true), url: searchableHttpUrlSchema }).strict(),
58
+ },
59
+ web_grep: {
60
+ input: z.object({ query, limit: configuredLimit(5) }).strict(),
61
+ output: z.object({ results: z.array(webGrepResultSchema).max(100) }).strict(),
62
+ },
63
+ web_ask: {
64
+ input: z.object({ question: query, limit: configuredLimit(3) }).strict(),
65
+ output: webAskResultSchema,
66
+ },
67
+ };
68
+ export function searchableToolJsonSchema(name, boundary) {
69
+ return z.toJSONSchema(searchableToolSchemas[name][boundary]);
70
+ }
71
+ //# sourceMappingURL=tool-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-contracts.js","sourceRoot":"","sources":["../src/tool-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { DeepReadonly } from '@neottia/config';
2
+ import { z } from 'zod';
3
+ import { type SearchableConfig, type SearchableConfigInput } from './config.js';
4
+ import type { SearchableServices } from './services.js';
5
+ import { type SearchableToolName } from './tool-contracts.js';
6
+ export interface SearchableToolContext {
7
+ readonly cwd: string;
8
+ readonly services: SearchableServices;
9
+ readonly signal?: AbortSignal;
10
+ readonly config?: DeepReadonly<SearchableConfig>;
11
+ readonly configOverrides?: Partial<SearchableConfigInput>;
12
+ readonly onStaleCache?: () => boolean | Promise<boolean>;
13
+ }
14
+ export interface SearchableToolDefinition {
15
+ readonly name: SearchableToolName;
16
+ readonly description: string;
17
+ readonly inputSchema: z.ZodObject;
18
+ readonly outputSchema: z.ZodType;
19
+ readonly run: (context: SearchableToolContext, input: unknown) => Promise<unknown>;
20
+ }
21
+ export declare const SEARCHABLE_TOOLS: readonly SearchableToolDefinition[];
22
+ export declare function findSearchableTool(name: string): SearchableToolDefinition | undefined;
23
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAwB,KAAK,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGtG,OAAO,KAAK,EAA8B,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAIL,KAAK,kBAAkB,EAExB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAE9B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAEjD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE1D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1D;AAGD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF;AAmED,eAAO,MAAM,gBAAgB,EAAE,SAAS,wBAAwB,EAkB/D,CAAC;AAGF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAErF"}
package/dist/tools.js ADDED
@@ -0,0 +1,134 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import { loadSearchableConfig } from './config.js';
3
+ import { SearchableError } from './errors.js';
4
+ import { asRedactedSearchableError } from './redaction.js';
5
+ import { searchableToolSchemas, } from './tool-contracts.js';
6
+ function makeTool(name, description, handler) {
7
+ const inputSchema = searchableToolSchemas[name].input;
8
+ const outputSchema = searchableToolSchemas[name].output;
9
+ return {
10
+ name,
11
+ description,
12
+ inputSchema,
13
+ outputSchema,
14
+ async run(context, input) {
15
+ const parsed = inputSchema.safeParse(input);
16
+ if (!parsed.success)
17
+ throw new SearchableError('validation', 'TOOL_INPUT_INVALID', `Invalid ${name} input: ${formatIssues(parsed.error)}`, parsed.error.issues.map((issue) => issue.path.join('.')));
18
+ assertNotCancelled(context.signal);
19
+ const config = context.config ?? loadSearchableConfig(context.cwd, context.configOverrides);
20
+ try {
21
+ if (!config.enabled)
22
+ throw new SearchableError('configuration', 'CAPABILITY_DISABLED', 'Searchable operation requires modules.searchable.enabled=true; the capability is disabled.');
23
+ assertInputBounds(name, input, config);
24
+ const resolvedInput = resolveInputDefaults(name, parsed.data, config);
25
+ assertInputBounds(name, resolvedInput, config);
26
+ const operation = {
27
+ cwd: context.cwd,
28
+ config,
29
+ ...(context.signal === undefined ? {} : { signal: context.signal }),
30
+ ...(context.onStaleCache === undefined ? {} : { onStaleCache: context.onStaleCache }),
31
+ };
32
+ const output = await handler(context.services, resolvedInput, operation);
33
+ assertNotCancelled(context.signal);
34
+ const validated = outputSchema.safeParse(output);
35
+ if (!validated.success)
36
+ throw new SearchableError('validation', 'TOOL_OUTPUT_INVALID', `Invalid ${name} service output: ${formatIssues(validated.error)}`, validated.error.issues.map((issue) => issue.path.join('.')));
37
+ assertOutputBounds(name, validated.data, config);
38
+ return validated.data;
39
+ }
40
+ catch (error) {
41
+ throw asRedactedSearchableError(error, config);
42
+ }
43
+ },
44
+ };
45
+ }
46
+ export const SEARCHABLE_TOOLS = [
47
+ makeTool('web_search', 'Search the web through an injected provider service.', (services, input, context) => services.search(input, context)),
48
+ makeTool('web_fetch', 'Fetch and extract an HTTP(S) page through an injected service.', (services, input, context) => services.fetch(input, context)),
49
+ makeTool('web_stash', 'Persist extracted page content through an injected storage service.', (services, input, context) => services.stash(input, context)),
50
+ makeTool('web_grep', 'Search stashed pages through an injected storage service.', (services, input, context) => services.grep(input, context)),
51
+ makeTool('web_ask', 'Answer from stashed context through an injected ask service.', (services, input, context) => services.ask(input, context)),
52
+ ];
53
+ export function findSearchableTool(name) {
54
+ return SEARCHABLE_TOOLS.find((tool) => tool.name === name);
55
+ }
56
+ function resolveInputDefaults(name, input, config) {
57
+ const value = input;
58
+ let resolved = value;
59
+ if (name === 'web_search')
60
+ resolved = {
61
+ ...value,
62
+ provider: value['provider'] ?? config.search.provider,
63
+ limit: value['limit'] ?? config.search.limit,
64
+ };
65
+ else if (name === 'web_grep')
66
+ resolved = { ...value, limit: value['limit'] ?? config.grep.limit };
67
+ else if (name === 'web_ask')
68
+ resolved = { ...value, limit: value['limit'] ?? config.ask.limit };
69
+ return resolved;
70
+ }
71
+ function assertInputBounds(name, input, config) {
72
+ const value = input;
73
+ if (typeof value['query'] === 'string')
74
+ assertBytes('query', value['query'], config.security.limits.max_query_bytes);
75
+ if (typeof value['question'] === 'string')
76
+ assertBytes('question', value['question'], config.security.limits.max_query_bytes);
77
+ if (typeof value['url'] === 'string')
78
+ assertBytes('url', value['url'], config.security.limits.max_url_bytes);
79
+ if (typeof value['title'] === 'string')
80
+ assertBytes('title', value['title'], config.security.limits.max_title_bytes);
81
+ if (typeof value['content'] === 'string')
82
+ assertBytes('content', value['content'], config.security.limits.max_content_bytes);
83
+ if (typeof value['excerpt'] === 'string')
84
+ assertBytes('excerpt', value['excerpt'], config.security.limits.max_content_bytes);
85
+ if (typeof value['siteName'] === 'string')
86
+ assertBytes('siteName', value['siteName'], config.security.limits.max_title_bytes);
87
+ if (typeof value['limit'] === 'number' && value['limit'] > config.security.limits.max_results)
88
+ throw limitError('limit', config.security.limits.max_results, name);
89
+ }
90
+ function assertOutputBounds(name, output, config) {
91
+ const value = output;
92
+ const rows = Array.isArray(value['results']) ? value['results'] : [value];
93
+ if (Array.isArray(value['results']) && value['results'].length > config.security.limits.max_results)
94
+ throw limitError('results', config.security.limits.max_results, name);
95
+ for (const row of rows)
96
+ assertOutputRecord(row, config);
97
+ if (Array.isArray(value['contextUrls'])) {
98
+ if (value['contextUrls'].length > config.security.limits.max_results)
99
+ throw limitError('contextUrls', config.security.limits.max_results, name);
100
+ for (const url of value['contextUrls'])
101
+ if (typeof url === 'string')
102
+ assertBytes('contextUrls', url, config.security.limits.max_url_bytes);
103
+ }
104
+ const serializedBytes = Buffer.byteLength(JSON.stringify(output), 'utf8');
105
+ if (serializedBytes > config.security.limits.max_result_bytes)
106
+ throw limitError('serialized output', config.security.limits.max_result_bytes, name, serializedBytes);
107
+ }
108
+ function assertOutputRecord(value, config) {
109
+ for (const field of ['url'])
110
+ if (typeof value[field] === 'string')
111
+ assertBytes(field, value[field], config.security.limits.max_url_bytes);
112
+ for (const field of ['title', 'siteName'])
113
+ if (typeof value[field] === 'string')
114
+ assertBytes(field, value[field], config.security.limits.max_title_bytes);
115
+ for (const field of ['content', 'excerpt', 'snippet', 'answer'])
116
+ if (typeof value[field] === 'string')
117
+ assertBytes(field, value[field], config.security.limits.max_content_bytes);
118
+ }
119
+ function assertBytes(field, value, maximum) {
120
+ const actual = Buffer.byteLength(value, 'utf8');
121
+ if (actual > maximum)
122
+ throw limitError(field, maximum, undefined, actual);
123
+ }
124
+ function limitError(field, maximum, tool, actual) {
125
+ return new SearchableError('resource_limit', 'RESOURCE_LIMIT_EXCEEDED', `${field} exceeds the configured limit.`, [field], { maximum, ...(actual === undefined ? {} : { actual }), ...(tool === undefined ? {} : { tool }) });
126
+ }
127
+ function assertNotCancelled(signal) {
128
+ if (signal?.aborted)
129
+ throw new SearchableError('cancelled', 'OPERATION_CANCELLED', 'Searchable operation was cancelled.');
130
+ }
131
+ function formatIssues(error) {
132
+ return error.issues.map((issue) => `${issue.path.join('.') || '<root>'}: ${issue.message}`).join('; ');
133
+ }
134
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/utf8.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function truncateUtf8(value: string, maximumBytes: number): string;
2
+ //# sourceMappingURL=utf8.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8.d.ts","sourceRoot":"","sources":["../src/utf8.ts"],"names":[],"mappings":"AACA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAWxE"}
package/dist/utf8.js ADDED
@@ -0,0 +1,14 @@
1
+ export function truncateUtf8(value, maximumBytes) {
2
+ const bytes = Buffer.from(value, 'utf8');
3
+ if (bytes.byteLength <= maximumBytes)
4
+ return value;
5
+ const decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });
6
+ for (let length = maximumBytes; length >= Math.max(0, maximumBytes - 3); length -= 1)
7
+ try {
8
+ return decoder.decode(bytes.subarray(0, length));
9
+ }
10
+ catch {
11
+ }
12
+ return '';
13
+ }
14
+ //# sourceMappingURL=utf8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8.js","sourceRoot":"","sources":["../src/utf8.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,YAAoB;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,UAAU,IAAI,YAAY;QAAE,OAAO,KAAK,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,KAAK,IAAI,MAAM,GAAG,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;QAClF,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type Worker } from 'node:worker_threads';
2
+ export type WorkerMessageDecoder<T> = (message: unknown) => T;
3
+ export interface BoundedWorkerOptions<T> {
4
+ readonly signal?: AbortSignal;
5
+ readonly timeoutMs: number;
6
+ readonly cancellationError: () => Error;
7
+ readonly timeoutError: () => Error;
8
+ readonly workerError: () => Error;
9
+ readonly decode: WorkerMessageDecoder<T>;
10
+ }
11
+ export declare function runBoundedWorker<T>(worker: Worker, options: BoundedWorkerOptions<T>): Promise<T>;
12
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC;AAG9D,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,KAAK,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,KAAK,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;CAC1C;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoChG"}
package/dist/worker.js ADDED
@@ -0,0 +1,45 @@
1
+ export function runBoundedWorker(worker, options) {
2
+ return new Promise((resolve, reject) => {
3
+ let claimed = false;
4
+ const cleanup = () => {
5
+ clearTimeout(timer);
6
+ options.signal?.removeEventListener('abort', cancel);
7
+ };
8
+ const settle = async (result) => {
9
+ if (claimed)
10
+ return;
11
+ claimed = true;
12
+ cleanup();
13
+ try {
14
+ await worker.terminate();
15
+ }
16
+ catch {
17
+ reject(options.workerError());
18
+ return;
19
+ }
20
+ if ('error' in result)
21
+ reject(result.error);
22
+ else
23
+ resolve(result.value);
24
+ };
25
+ const cancel = () => void settle({ error: options.cancellationError() });
26
+ const timer = setTimeout(() => void settle({ error: options.timeoutError() }), Math.max(1, options.timeoutMs));
27
+ options.signal?.addEventListener('abort', cancel, { once: true });
28
+ worker.once('message', (message) => {
29
+ try {
30
+ void settle({ value: options.decode(message) });
31
+ }
32
+ catch (error) {
33
+ void settle({ error });
34
+ }
35
+ });
36
+ worker.once('error', () => void settle({ error: options.workerError() }));
37
+ worker.once('exit', () => {
38
+ if (!claimed)
39
+ void settle({ error: options.workerError() });
40
+ });
41
+ if (options.signal?.aborted)
42
+ cancel();
43
+ });
44
+ }
45
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,gBAAgB,CAAI,MAAc,EAAE,OAAgC;IAClF,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,EAAE,MAA2D,EAAE,EAAE;YACnF,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YACD,IAAI,OAAO,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/G,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC1C,IAAI,CAAC;gBACH,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YACvB,IAAI,CAAC,OAAO;gBAAE,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,MAAM,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@neottia/searchable-core",
3
+ "version": "0.2.0",
4
+ "description": "Concrete runtime and shared contracts for Searchable web tools",
5
+ "author": "Dragos Cirjan",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "sideEffects": false,
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/dragoscirjan/neottia.git",
12
+ "directory": "packages/searchable-core"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/dragoscirjan/neottia/issues"
16
+ },
17
+ "homepage": "https://github.com/dragoscirjan/neottia#readme",
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "main": "./dist/index.js",
22
+ "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "default": "./dist/index.js"
27
+ },
28
+ "./config.schema.json": "./config.schema.json"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "README.md",
33
+ "LICENSE",
34
+ "NOTICE.md",
35
+ "config.schema.json"
36
+ ],
37
+ "engines": {
38
+ "node": ">=22.16.0"
39
+ },
40
+ "dependencies": {
41
+ "@mozilla/readability": "^0.6.0",
42
+ "jsdom": "^29.1.1",
43
+ "turndown": "^7.2.4",
44
+ "yaml": "^2.9.0",
45
+ "zod": "^4.5.4",
46
+ "@neottia/config": "^0.2.0",
47
+ "@neottia/repository-store": "0.2.0"
48
+ },
49
+ "devDependencies": {
50
+ "@templ-project/tsconfig": "^0.2.2",
51
+ "@types/jsdom": "^27.0.0",
52
+ "@types/node": "^25.0.3",
53
+ "@types/turndown": "^5.0.6",
54
+ "typescript": "^5.9.3",
55
+ "vitest": "^4.1.11"
56
+ },
57
+ "scripts": {
58
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json && node scripts/generate-config-schema.mjs && pnpm exec prettier --write config.schema.json",
59
+ "pretest": "node ../../scripts/run-unless-workspace-prebuilt.mjs pnpm --filter @neottia/searchable-core... run build",
60
+ "test": "vitest run --root ../.. packages/searchable-core/src",
61
+ "typecheck": "tsc --noEmit"
62
+ }
63
+ }