@delali/narsil 0.1.7 → 0.1.9
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/README.md +800 -111
- package/dist/adapters/filesystem.d.ts +1 -1
- package/dist/adapters/filesystem.mjs +46 -2
- package/dist/adapters/indexeddb.d.ts +1 -1
- package/dist/adapters/indexeddb.mjs +1 -1
- package/dist/adapters/memory.d.ts +1 -1
- package/dist/{adapters-BbRkoiu9.d.ts → adapters-Bo2JQg8b.d.ts} +2 -1
- package/dist/chunk-ALB35PRQ.mjs +98 -0
- package/dist/chunk-KMMJMDUA.mjs +44 -0
- package/dist/chunk-RQLXC2YS.mjs +269 -0
- package/dist/chunk-S7RJJMHI.mjs +1086 -0
- package/dist/chunk-SVDEEMO6.mjs +7023 -0
- package/dist/{chunk-I24SGLFS.mjs → chunk-TW6BXTOL.mjs} +5 -1
- package/dist/{chunk-KHL4RPC3.mjs → chunk-VWF7RKSF.mjs} +2566 -2282
- package/dist/chunk-WISGW24C.mjs +455 -0
- package/dist/config-DX--2Owg.d.ts +472 -0
- package/dist/direct-executor-KC5O5D2R.mjs +4 -0
- package/dist/distribution/coordinator/etcd.d.ts +16 -0
- package/dist/distribution/coordinator/etcd.mjs +2 -0
- package/dist/distribution/coordinator/in-memory.d.ts +7 -0
- package/dist/distribution/coordinator/in-memory.mjs +1 -0
- package/dist/distribution.d.ts +122 -0
- package/dist/distribution.mjs +7410 -0
- package/dist/embeddings/openai.d.ts +1 -1
- package/dist/embeddings/openai.mjs +6 -1
- package/dist/index.browser.mjs +11750 -7532
- package/dist/index.d.ts +6 -450
- package/dist/index.mjs +7 -3236
- package/dist/invalidation/broadcast-channel.d.ts +1 -1
- package/dist/invalidation/filesystem.d.ts +1 -1
- package/dist/invalidation/noop.d.ts +1 -1
- package/dist/{language-ClUGLuoC.d.ts → language-ONQ3iVDf.d.ts} +1 -0
- package/dist/languages/arabic.d.ts +1 -1
- package/dist/languages/armenian.d.ts +1 -1
- package/dist/languages/bulgarian.d.ts +1 -1
- package/dist/languages/chinese.d.ts +1 -1
- package/dist/languages/dagbani.d.ts +1 -1
- package/dist/languages/danish.d.ts +1 -1
- package/dist/languages/dutch.d.ts +1 -1
- package/dist/languages/english.d.ts +1 -1
- package/dist/languages/english.mjs +1 -1
- package/dist/languages/ewe.d.ts +1 -1
- package/dist/languages/finnish.d.ts +1 -1
- package/dist/languages/french.d.ts +1 -1
- package/dist/languages/ga.d.ts +1 -1
- package/dist/languages/german.d.ts +1 -1
- package/dist/languages/greek.d.ts +1 -1
- package/dist/languages/hausa.d.ts +1 -1
- package/dist/languages/hindi.d.ts +1 -1
- package/dist/languages/hungarian.d.ts +1 -1
- package/dist/languages/igbo.d.ts +1 -1
- package/dist/languages/indonesian.d.ts +1 -1
- package/dist/languages/irish.d.ts +1 -1
- package/dist/languages/italian.d.ts +1 -1
- package/dist/languages/japanese.d.ts +1 -1
- package/dist/languages/nepali.d.ts +1 -1
- package/dist/languages/norwegian.d.ts +1 -1
- package/dist/languages/portuguese.d.ts +1 -1
- package/dist/languages/romanian.d.ts +1 -1
- package/dist/languages/russian.d.ts +1 -1
- package/dist/languages/sanskrit.d.ts +1 -1
- package/dist/languages/serbian.d.ts +1 -1
- package/dist/languages/slovenian.d.ts +1 -1
- package/dist/languages/spanish.d.ts +1 -1
- package/dist/languages/swahili.d.ts +1 -1
- package/dist/languages/swedish.d.ts +1 -1
- package/dist/languages/tamil.d.ts +1 -1
- package/dist/languages/turkish.d.ts +1 -1
- package/dist/languages/twi.d.ts +1 -1
- package/dist/languages/ukrainian.d.ts +1 -1
- package/dist/languages/yoruba.d.ts +1 -1
- package/dist/languages/zulu.d.ts +1 -1
- package/dist/narsil-B3jKyXCr.d.ts +72 -0
- package/dist/persistence/durability/checkpoint-worker.d.ts +48 -0
- package/dist/persistence/durability/checkpoint-worker.mjs +59 -0
- package/dist/schema-C3VhNvfw.d.ts +60 -0
- package/dist/serialization/crc32-worker.d.ts +20 -0
- package/dist/serialization/crc32-worker.mjs +61 -0
- package/dist/server.d.ts +218 -0
- package/dist/server.mjs +1184 -0
- package/dist/types-CTVVm4GG.d.ts +73 -0
- package/dist/vector/hnsw-build-worker.mjs +1 -1
- package/dist/workers/entry.mjs +1 -1
- package/package.json +38 -2
- package/dist/chunk-R2C2EQGO.mjs +0 -53
- package/dist/chunk-VVORJOXR.mjs +0 -759
- package/dist/direct-executor-LBJLGMJ2.mjs +0 -4
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { S as SchemaDefinition } from './schema-C3VhNvfw.js';
|
|
2
|
+
|
|
3
|
+
type NodeRole = 'data' | 'coordinator' | 'controller';
|
|
4
|
+
type PartitionState = 'UNASSIGNED' | 'INITIALISING' | 'ACTIVE' | 'MIGRATING' | 'DECOMMISSIONING';
|
|
5
|
+
interface NodeCapacity {
|
|
6
|
+
memoryBytes: number;
|
|
7
|
+
cpuCores: number;
|
|
8
|
+
diskBytes: number | null;
|
|
9
|
+
}
|
|
10
|
+
interface NodeRegistration {
|
|
11
|
+
nodeId: string;
|
|
12
|
+
address: string;
|
|
13
|
+
roles: NodeRole[];
|
|
14
|
+
capacity: NodeCapacity;
|
|
15
|
+
startedAt: string;
|
|
16
|
+
version: string;
|
|
17
|
+
metadata?: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
interface PartitionAssignment {
|
|
20
|
+
primary: string | null;
|
|
21
|
+
replicas: string[];
|
|
22
|
+
inSyncSet: string[];
|
|
23
|
+
state: PartitionState;
|
|
24
|
+
primaryTerm: number;
|
|
25
|
+
}
|
|
26
|
+
interface AllocationTable {
|
|
27
|
+
indexName: string;
|
|
28
|
+
version: number;
|
|
29
|
+
replicationFactor: number;
|
|
30
|
+
assignments: Map<number, PartitionAssignment>;
|
|
31
|
+
}
|
|
32
|
+
interface NodeEvent {
|
|
33
|
+
type: 'node_joined' | 'node_left';
|
|
34
|
+
nodeId: string;
|
|
35
|
+
registration: NodeRegistration | null;
|
|
36
|
+
}
|
|
37
|
+
interface AllocationEvent {
|
|
38
|
+
indexName: string;
|
|
39
|
+
table: AllocationTable;
|
|
40
|
+
}
|
|
41
|
+
interface SchemaEvent {
|
|
42
|
+
type: 'schema_created' | 'schema_dropped';
|
|
43
|
+
indexName: string;
|
|
44
|
+
schema: SchemaDefinition | null;
|
|
45
|
+
}
|
|
46
|
+
interface AllocationConstraints {
|
|
47
|
+
zoneAwareness: boolean;
|
|
48
|
+
zoneAttribute: string;
|
|
49
|
+
maxShardsPerNode: number | null;
|
|
50
|
+
}
|
|
51
|
+
interface ClusterCoordinator {
|
|
52
|
+
registerNode(registration: NodeRegistration): Promise<void>;
|
|
53
|
+
deregisterNode(nodeId: string): Promise<void>;
|
|
54
|
+
listNodes(): Promise<NodeRegistration[]>;
|
|
55
|
+
watchNodes(handler: (event: NodeEvent) => void): Promise<() => void>;
|
|
56
|
+
getAllocation(indexName: string): Promise<AllocationTable | null>;
|
|
57
|
+
putAllocation(indexName: string, table: AllocationTable, expectedVersion?: number | null): Promise<boolean>;
|
|
58
|
+
watchAllocation(handler: (event: AllocationEvent) => void): Promise<() => void>;
|
|
59
|
+
getPartitionState(indexName: string, partitionId: number): Promise<PartitionState>;
|
|
60
|
+
putPartitionState(indexName: string, partitionId: number, state: PartitionState): Promise<void>;
|
|
61
|
+
acquireLease(key: string, nodeId: string, ttlMs: number): Promise<boolean>;
|
|
62
|
+
renewLease(key: string, nodeId: string, ttlMs: number): Promise<boolean>;
|
|
63
|
+
releaseLease(key: string): Promise<void>;
|
|
64
|
+
get(key: string): Promise<Uint8Array | null>;
|
|
65
|
+
compareAndSet(key: string, expected: Uint8Array | null, value: Uint8Array): Promise<boolean>;
|
|
66
|
+
getSchema(indexName: string): Promise<SchemaDefinition | null>;
|
|
67
|
+
putSchema(indexName: string, schema: SchemaDefinition): Promise<void>;
|
|
68
|
+
watchSchemas(handler: (event: SchemaEvent) => void): Promise<() => void>;
|
|
69
|
+
getLeaseHolder(key: string): Promise<string | null>;
|
|
70
|
+
shutdown(): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export type { AllocationTable as A, ClusterCoordinator as C, NodeRegistration as N, PartitionAssignment as P, SchemaEvent as S, NodeRole as a, NodeCapacity as b, AllocationConstraints as c, AllocationEvent as d, NodeEvent as e, PartitionState as f };
|
package/dist/workers/entry.mjs
CHANGED
|
@@ -15,7 +15,7 @@ async function setup() {
|
|
|
15
15
|
} catch {
|
|
16
16
|
parentPort = null;
|
|
17
17
|
}
|
|
18
|
-
const { createDirectExecutor } = await import('../direct-executor-
|
|
18
|
+
const { createDirectExecutor } = await import('../direct-executor-KC5O5D2R.mjs');
|
|
19
19
|
const executor = createDirectExecutor();
|
|
20
20
|
function buildErrorResponse(requestId, code, message) {
|
|
21
21
|
return { type: "error", requestId, code, message };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delali/narsil",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A distributed full-text search engine with cross-language portable binary format.",
|
|
6
6
|
"author": "Delali (https://sondelali.com)",
|
|
@@ -81,6 +81,22 @@
|
|
|
81
81
|
"./languages/*": {
|
|
82
82
|
"import": "./dist/languages/*.mjs",
|
|
83
83
|
"types": "./dist/languages/*.d.ts"
|
|
84
|
+
},
|
|
85
|
+
"./distribution": {
|
|
86
|
+
"import": "./dist/distribution.mjs",
|
|
87
|
+
"types": "./dist/distribution.d.ts"
|
|
88
|
+
},
|
|
89
|
+
"./distribution/coordinator/in-memory": {
|
|
90
|
+
"import": "./dist/distribution/coordinator/in-memory.mjs",
|
|
91
|
+
"types": "./dist/distribution/coordinator/in-memory.d.ts"
|
|
92
|
+
},
|
|
93
|
+
"./distribution/coordinator/etcd": {
|
|
94
|
+
"import": "./dist/distribution/coordinator/etcd.mjs",
|
|
95
|
+
"types": "./dist/distribution/coordinator/etcd.d.ts"
|
|
96
|
+
},
|
|
97
|
+
"./server": {
|
|
98
|
+
"import": "./dist/server.mjs",
|
|
99
|
+
"types": "./dist/server.d.ts"
|
|
84
100
|
}
|
|
85
101
|
},
|
|
86
102
|
"files": [
|
|
@@ -94,21 +110,41 @@
|
|
|
94
110
|
"@biomejs/biome": "2.4.4",
|
|
95
111
|
"@types/node": "22.15.32",
|
|
96
112
|
"@vitest/coverage-v8": "4.0.18",
|
|
113
|
+
"etcd3": "1.1.2",
|
|
114
|
+
"fflate": "0.8.3",
|
|
115
|
+
"selfsigned": "5.5.0",
|
|
97
116
|
"tsup": "8.5.1",
|
|
98
117
|
"typescript": "5.9.3",
|
|
118
|
+
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.58.0",
|
|
99
119
|
"vitest": "4.0.18",
|
|
100
120
|
"wabt": "1.0.39",
|
|
101
121
|
"@delali/narsil-embeddings-transformers": "0.1.6"
|
|
102
122
|
},
|
|
123
|
+
"peerDependencies": {
|
|
124
|
+
"etcd3": "1.1.2",
|
|
125
|
+
"uWebSockets.js": ">=20.0.0"
|
|
126
|
+
},
|
|
127
|
+
"peerDependenciesMeta": {
|
|
128
|
+
"etcd3": {
|
|
129
|
+
"optional": true
|
|
130
|
+
},
|
|
131
|
+
"uWebSockets.js": {
|
|
132
|
+
"optional": true
|
|
133
|
+
}
|
|
134
|
+
},
|
|
103
135
|
"scripts": {
|
|
104
136
|
"build": "tsup",
|
|
105
137
|
"test": "vitest run --exclude='**/vector/recall.test.ts'",
|
|
138
|
+
"test:etcd": "vitest run src/__tests__/distribution/coordinator/etcd-integration/*.test.ts",
|
|
106
139
|
"test:watch": "vitest",
|
|
107
140
|
"test:coverage": "vitest run --coverage",
|
|
108
141
|
"test:recall": "vitest run src/__tests__/vector/recall.test.ts",
|
|
109
142
|
"test:embeddings": "NARSIL_TEST_EMBEDDINGS=1 vitest run embedding-e2e",
|
|
110
143
|
"bench": "vitest bench",
|
|
111
144
|
"lint": "biome check src/",
|
|
112
|
-
"typecheck": "tsc --noEmit"
|
|
145
|
+
"typecheck:src": "tsc --noEmit",
|
|
146
|
+
"typecheck:tests": "tsc --noEmit -p tsconfig.test.json",
|
|
147
|
+
"typecheck:tooling": "tsc --noEmit -p scripts/tsconfig.json && tsc --noEmit -p benchmarks/tsconfig.json && tsc --noEmit -p wasm/tsconfig.json",
|
|
148
|
+
"typecheck": "pnpm run typecheck:src && pnpm run typecheck:tests && pnpm run typecheck:tooling"
|
|
113
149
|
}
|
|
114
150
|
}
|
package/dist/chunk-R2C2EQGO.mjs
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
// src/errors.ts
|
|
2
|
-
var ErrorCodes = {
|
|
3
|
-
SCHEMA_INVALID_TYPE: "SCHEMA_INVALID_TYPE",
|
|
4
|
-
SCHEMA_MISSING_FIELD: "SCHEMA_MISSING_FIELD",
|
|
5
|
-
SCHEMA_DEPTH_EXCEEDED: "SCHEMA_DEPTH_EXCEEDED",
|
|
6
|
-
SCHEMA_INVALID_VECTOR_DIMENSION: "SCHEMA_INVALID_VECTOR_DIMENSION",
|
|
7
|
-
SCHEMA_INVALID_GEOPOINT: "SCHEMA_INVALID_GEOPOINT",
|
|
8
|
-
DOC_NOT_FOUND: "DOC_NOT_FOUND",
|
|
9
|
-
DOC_ALREADY_EXISTS: "DOC_ALREADY_EXISTS",
|
|
10
|
-
DOC_VALIDATION_FAILED: "DOC_VALIDATION_FAILED",
|
|
11
|
-
INDEX_NOT_FOUND: "INDEX_NOT_FOUND",
|
|
12
|
-
INDEX_ALREADY_EXISTS: "INDEX_ALREADY_EXISTS",
|
|
13
|
-
PARTITION_CORRUPTED: "PARTITION_CORRUPTED",
|
|
14
|
-
PARTITION_REBALANCING_BACKPRESSURE: "PARTITION_REBALANCING_BACKPRESSURE",
|
|
15
|
-
WORKER_CRASHED: "WORKER_CRASHED",
|
|
16
|
-
WORKER_BUSY: "WORKER_BUSY",
|
|
17
|
-
WORKER_TIMEOUT: "WORKER_TIMEOUT",
|
|
18
|
-
PERSISTENCE_SAVE_FAILED: "PERSISTENCE_SAVE_FAILED",
|
|
19
|
-
PERSISTENCE_LOAD_FAILED: "PERSISTENCE_LOAD_FAILED",
|
|
20
|
-
PERSISTENCE_DELETE_FAILED: "PERSISTENCE_DELETE_FAILED",
|
|
21
|
-
PERSISTENCE_CRC_MISMATCH: "PERSISTENCE_CRC_MISMATCH",
|
|
22
|
-
SEARCH_INVALID_FIELD: "SEARCH_INVALID_FIELD",
|
|
23
|
-
SEARCH_INVALID_VECTOR_SIZE: "SEARCH_INVALID_VECTOR_SIZE",
|
|
24
|
-
VECTOR_DIMENSION_MISMATCH: "VECTOR_DIMENSION_MISMATCH",
|
|
25
|
-
SEARCH_INVALID_FILTER: "SEARCH_INVALID_FILTER",
|
|
26
|
-
SEARCH_INVALID_MODE: "SEARCH_INVALID_MODE",
|
|
27
|
-
SEARCH_INVALID_CURSOR: "SEARCH_INVALID_CURSOR",
|
|
28
|
-
LANGUAGE_NOT_SUPPORTED: "LANGUAGE_NOT_SUPPORTED",
|
|
29
|
-
ENVELOPE_VERSION_MISMATCH: "ENVELOPE_VERSION_MISMATCH",
|
|
30
|
-
ENVELOPE_INVALID_MAGIC: "ENVELOPE_INVALID_MAGIC",
|
|
31
|
-
PARTITION_CAPACITY_EXCEEDED: "PARTITION_CAPACITY_EXCEEDED",
|
|
32
|
-
EMBEDDING_FAILED: "EMBEDDING_FAILED",
|
|
33
|
-
EMBEDDING_DIMENSION_MISMATCH: "EMBEDDING_DIMENSION_MISMATCH",
|
|
34
|
-
EMBEDDING_NO_SOURCE: "EMBEDDING_NO_SOURCE",
|
|
35
|
-
EMBEDDING_CONFIG_INVALID: "EMBEDDING_CONFIG_INVALID",
|
|
36
|
-
DOC_MISSING_REQUIRED_FIELD: "DOC_MISSING_REQUIRED_FIELD",
|
|
37
|
-
CONFIG_INVALID: "CONFIG_INVALID"
|
|
38
|
-
};
|
|
39
|
-
var NarsilError = class extends Error {
|
|
40
|
-
code;
|
|
41
|
-
details;
|
|
42
|
-
constructor(code, message, details) {
|
|
43
|
-
super(message);
|
|
44
|
-
this.name = "NarsilError";
|
|
45
|
-
this.code = code;
|
|
46
|
-
this.details = details ?? {};
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
function createNarsilError(code, message, details) {
|
|
50
|
-
return new NarsilError(code, message, details);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export { ErrorCodes, NarsilError, createNarsilError };
|