@delali/narsil-react-native 0.0.0-stage → 0.3.1-next.146
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 +201 -0
- package/NarsilReactNative.podspec +57 -0
- package/README.md +46 -2
- package/android/CMakeLists.txt +48 -0
- package/android/build.gradle +151 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/AndroidEnvironment.cpp +44 -0
- package/android/src/main/cpp/AndroidEnvironment.hpp +11 -0
- package/android/src/main/cpp/cpp-adapter.cpp +11 -0
- package/android/src/main/java/com/margelo/nitro/narsil/NarsilAndroidEnvironment.kt +29 -0
- package/android/src/main/java/com/margelo/nitro/narsil/NarsilReactNativePackage.kt +22 -0
- package/app.plugin.js +25 -0
- package/cpp/AttachedField.cpp +234 -0
- package/cpp/AttachedField.hpp +61 -0
- package/cpp/Compression.cpp +113 -0
- package/cpp/Compression.hpp +16 -0
- package/cpp/GraphHeldAlone.cpp +29 -0
- package/cpp/GraphHeldAlone.hpp +25 -0
- package/cpp/HostMemory.cpp +123 -0
- package/cpp/HostMemory.hpp +53 -0
- package/cpp/HybridNarsilCoreImpl.cpp +390 -0
- package/cpp/HybridNarsilCoreImpl.hpp +68 -0
- package/cpp/HybridNarsilFilesImpl.cpp +245 -0
- package/cpp/HybridNarsilFilesImpl.hpp +34 -0
- package/cpp/HybridNarsilHostImpl.cpp +126 -0
- package/cpp/HybridNarsilHostImpl.hpp +42 -0
- package/cpp/NativeAtomics.cpp +110 -0
- package/cpp/NativeAtomics.hpp +11 -0
- package/cpp/ProcessInfo.cpp +83 -0
- package/cpp/ProcessInfo.hpp +11 -0
- package/cpp/ThreadPriority.cpp +77 -0
- package/cpp/ThreadPriority.hpp +8 -0
- package/cpp/WorkletRuntimeDispatcher.cpp +61 -0
- package/cpp/WorkletRuntimeDispatcher.hpp +9 -0
- package/cpp/core/include/narsil_core.h +208 -0
- package/cpp/core/src/connect.c +213 -0
- package/cpp/core/src/distance.c +103 -0
- package/cpp/core/src/files.c +99 -0
- package/cpp/core/src/heap.c +84 -0
- package/cpp/core/src/internal.h +284 -0
- package/cpp/core/src/kernels_code.c +209 -0
- package/cpp/core/src/kernels_float.c +197 -0
- package/cpp/core/src/kernels_pair.c +133 -0
- package/cpp/core/src/last_links.c +145 -0
- package/cpp/core/src/links.c +195 -0
- package/cpp/core/src/locks.c +168 -0
- package/cpp/core/src/nearest_links.c +147 -0
- package/cpp/core/src/place.c +215 -0
- package/cpp/core/src/quantize.c +226 -0
- package/cpp/core/src/records.c +97 -0
- package/cpp/core/src/remove.c +205 -0
- package/cpp/core/src/vectors.c +139 -0
- package/cpp/core/src/walk.c +231 -0
- package/cpp/core/src/workspace.c +167 -0
- package/ios/PrivacyInfo.xcprivacy +23 -0
- package/lib/client.d.ts +19 -0
- package/lib/client.js +41 -0
- package/lib/constants.d.ts +9 -0
- package/lib/constants.js +9 -0
- package/lib/engine/byte-files.d.ts +5 -0
- package/lib/engine/byte-files.js +97 -0
- package/lib/engine/core.d.ts +3 -0
- package/lib/engine/core.js +113 -0
- package/lib/engine/files.d.ts +3 -0
- package/lib/engine/files.js +188 -0
- package/lib/engine/host.d.ts +13 -0
- package/lib/engine/host.js +102 -0
- package/lib/engine/install.d.ts +4 -0
- package/lib/engine/install.js +29 -0
- package/lib/engine/native-error.d.ts +1 -0
- package/lib/engine/native-error.js +12 -0
- package/lib/engine/stand-ins/atomics.d.ts +5 -0
- package/lib/engine/stand-ins/atomics.js +236 -0
- package/lib/engine/stand-ins/crypto.d.ts +2 -0
- package/lib/engine/stand-ins/crypto.js +65 -0
- package/lib/engine/stand-ins/process.d.ts +2 -0
- package/lib/engine/stand-ins/process.js +22 -0
- package/lib/engine/stand-ins/streams.d.ts +1 -0
- package/lib/engine/stand-ins/streams.js +31 -0
- package/lib/engine/stand-ins/structured-clone.d.ts +1 -0
- package/lib/engine/stand-ins/structured-clone.js +121 -0
- package/lib/engine/streamed.d.ts +6 -0
- package/lib/engine/streamed.js +29 -0
- package/lib/engine/transfer.d.ts +3 -0
- package/lib/engine/transfer.js +77 -0
- package/lib/errors.d.ts +25 -0
- package/lib/errors.js +59 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +2 -0
- package/lib/methods.d.ts +5 -0
- package/lib/methods.js +47 -0
- package/lib/native-objects.d.ts +2 -0
- package/lib/native-objects.js +24 -0
- package/lib/specs/core.nitro.d.ts +79 -0
- package/lib/specs/core.nitro.js +1 -0
- package/lib/specs/files.nitro.d.ts +36 -0
- package/lib/specs/files.nitro.js +1 -0
- package/lib/specs/host.nitro.d.ts +24 -0
- package/lib/specs/host.nitro.js +1 -0
- package/lib/transferred.d.ts +15 -0
- package/lib/transferred.js +6 -0
- package/lib/types.d.ts +136 -0
- package/lib/types.js +1 -0
- package/lib/worklets/app-turns.d.ts +1 -0
- package/lib/worklets/app-turns.js +44 -0
- package/lib/worklets/client.d.ts +30 -0
- package/lib/worklets/client.js +144 -0
- package/lib/worklets/index.d.ts +4 -0
- package/lib/worklets/index.js +2 -0
- package/lib/worklets/instances.d.ts +15 -0
- package/lib/worklets/instances.js +194 -0
- package/lib/worklets/json-part.d.ts +1 -0
- package/lib/worklets/json-part.js +42 -0
- package/lib/worklets/runtime.d.ts +25 -0
- package/lib/worklets/runtime.js +80 -0
- package/lib/worklets/transfer-queue.d.ts +7 -0
- package/lib/worklets/transfer-queue.js +79 -0
- package/lib/worklets/types.d.ts +26 -0
- package/lib/worklets/types.js +1 -0
- package/nitro.json +32 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NarsilReactNative+autolinking.cmake +85 -0
- package/nitrogen/generated/android/NarsilReactNative+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NarsilReactNativeOnLoad.cpp +69 -0
- package/nitrogen/generated/android/NarsilReactNativeOnLoad.hpp +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/narsil/NarsilReactNativeOnLoad.kt +35 -0
- package/nitrogen/generated/ios/NarsilReactNative+autolinking.rb +62 -0
- package/nitrogen/generated/ios/NarsilReactNative-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/NarsilReactNative-Swift-Cxx-Bridge.hpp +27 -0
- package/nitrogen/generated/ios/NarsilReactNative-Swift-Cxx-Umbrella.hpp +38 -0
- package/nitrogen/generated/ios/NarsilReactNativeAutolinking.mm +55 -0
- package/nitrogen/generated/ios/NarsilReactNativeAutolinking.swift +16 -0
- package/nitrogen/generated/shared/c++/DirectoryEntry.hpp +91 -0
- package/nitrogen/generated/shared/c++/FileStatus.hpp +103 -0
- package/nitrogen/generated/shared/c++/GraphMemory.hpp +120 -0
- package/nitrogen/generated/shared/c++/HybridNarsilAttachedGraphSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridNarsilAttachedGraphSpec.hpp +62 -0
- package/nitrogen/generated/shared/c++/HybridNarsilAttachedStoreSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridNarsilAttachedStoreSpec.hpp +62 -0
- package/nitrogen/generated/shared/c++/HybridNarsilCoreSpec.cpp +35 -0
- package/nitrogen/generated/shared/c++/HybridNarsilCoreSpec.hpp +100 -0
- package/nitrogen/generated/shared/c++/HybridNarsilFilesSpec.cpp +37 -0
- package/nitrogen/generated/shared/c++/HybridNarsilFilesSpec.hpp +86 -0
- package/nitrogen/generated/shared/c++/HybridNarsilHostSpec.cpp +34 -0
- package/nitrogen/generated/shared/c++/HybridNarsilHostSpec.hpp +78 -0
- package/nitrogen/generated/shared/c++/MemoryView.hpp +91 -0
- package/nitrogen/generated/shared/c++/NativeConnectOutcome.hpp +87 -0
- package/nitrogen/generated/shared/c++/NativeScores.hpp +87 -0
- package/nitrogen/generated/shared/c++/NativeSearchHits.hpp +91 -0
- package/nitrogen/generated/shared/c++/ProcessMemory.hpp +87 -0
- package/nitrogen/generated/shared/c++/StoreMemory.hpp +142 -0
- package/package.json +87 -3
- package/react-native.config.js +8 -0
- package/src/client.ts +44 -0
- package/src/constants.ts +9 -0
- package/src/engine/byte-files.ts +99 -0
- package/src/engine/core.ts +162 -0
- package/src/engine/files.ts +186 -0
- package/src/engine/host.ts +111 -0
- package/src/engine/install.ts +31 -0
- package/src/engine/native-error.ts +10 -0
- package/src/engine/stand-ins/atomics.ts +288 -0
- package/src/engine/stand-ins/crypto.ts +81 -0
- package/src/engine/stand-ins/process.ts +30 -0
- package/src/engine/stand-ins/streams.ts +45 -0
- package/src/engine/stand-ins/structured-clone.ts +118 -0
- package/src/engine/streamed.ts +40 -0
- package/src/engine/transfer.ts +72 -0
- package/src/errors.ts +73 -0
- package/src/index.ts +3 -0
- package/src/methods.ts +52 -0
- package/src/native-objects.ts +30 -0
- package/src/specs/core.nitro.ts +140 -0
- package/src/specs/files.nitro.ts +42 -0
- package/src/specs/host.nitro.ts +30 -0
- package/src/transferred.ts +18 -0
- package/src/types.ts +164 -0
- package/src/worklets/app-turns.ts +48 -0
- package/src/worklets/client.ts +165 -0
- package/src/worklets/index.ts +4 -0
- package/src/worklets/instances.ts +231 -0
- package/src/worklets/json-part.ts +38 -0
- package/src/worklets/runtime.ts +190 -0
- package/src/worklets/transfer-queue.ts +98 -0
- package/src/worklets/types.ts +37 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import type { BoxedHybridObject } from 'react-native-nitro-modules'
|
|
2
|
+
import { createWorkletRuntime, scheduleOnRuntime, type WorkletRuntime } from 'react-native-worklets'
|
|
3
|
+
import { ENGINE_RUNTIME_NAME } from '../constants'
|
|
4
|
+
import {
|
|
5
|
+
adoptAppThreadPriorityOn,
|
|
6
|
+
installWorkletDispatcherOn,
|
|
7
|
+
type NativeObjects,
|
|
8
|
+
threadPriorityOf,
|
|
9
|
+
} from '../engine/host'
|
|
10
|
+
import { installEngineHost } from '../engine/install'
|
|
11
|
+
import type { EngineMethod } from '../methods'
|
|
12
|
+
import type { NarsilCore } from '../specs/core.nitro'
|
|
13
|
+
import type { NarsilFiles } from '../specs/files.nitro'
|
|
14
|
+
import type { NarsilHost } from '../specs/host.nitro'
|
|
15
|
+
import type { CallOutcome } from '../transferred'
|
|
16
|
+
import {
|
|
17
|
+
callOnEngine,
|
|
18
|
+
dropCallParts,
|
|
19
|
+
listenOnEngine,
|
|
20
|
+
openOnEngine,
|
|
21
|
+
recordEngineStartFailure,
|
|
22
|
+
stageCallPart,
|
|
23
|
+
stageCallPartText,
|
|
24
|
+
} from './instances'
|
|
25
|
+
import type { EngineSetup, WorkletNarsilConfig } from './types'
|
|
26
|
+
|
|
27
|
+
type Settle = (callId: number, outcome: CallOutcome) => void
|
|
28
|
+
type DeliverEvent = (instanceId: number, event: string, payload: unknown) => void
|
|
29
|
+
|
|
30
|
+
export interface BoxedNativeObjects {
|
|
31
|
+
host: BoxedHybridObject<NarsilHost>
|
|
32
|
+
files: BoxedHybridObject<NarsilFiles>
|
|
33
|
+
core: BoxedHybridObject<NarsilCore>
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
let engineRuntime: WorkletRuntime | null = null
|
|
37
|
+
|
|
38
|
+
export async function boxNativeObjects(natives: NativeObjects): Promise<BoxedNativeObjects> {
|
|
39
|
+
const { NitroModules } = await import('react-native-nitro-modules')
|
|
40
|
+
return {
|
|
41
|
+
host: NitroModules.box(natives.host),
|
|
42
|
+
files: NitroModules.box(natives.files),
|
|
43
|
+
core: NitroModules.box(natives.core),
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function startEngineRuntime({ host, files, core }: BoxedNativeObjects): WorkletRuntime {
|
|
48
|
+
if (engineRuntime !== null) return engineRuntime
|
|
49
|
+
const appThreadPriority = threadPriorityOf(host.unbox())
|
|
50
|
+
const runtime = createWorkletRuntime({
|
|
51
|
+
name: ENGINE_RUNTIME_NAME,
|
|
52
|
+
initializer: () => {
|
|
53
|
+
'worklet'
|
|
54
|
+
try {
|
|
55
|
+
const nativeHost = host.unbox()
|
|
56
|
+
const nativeThreads = installWorkletDispatcherOn(nativeHost)
|
|
57
|
+
installEngineHost({ host: nativeHost, files: files.unbox(), core: core.unbox() }, nativeThreads)
|
|
58
|
+
} catch (error) {
|
|
59
|
+
recordEngineStartFailure(error)
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
if (appThreadPriority !== null) {
|
|
64
|
+
scheduleOnRuntime(
|
|
65
|
+
runtime,
|
|
66
|
+
(priority: number) => {
|
|
67
|
+
'worklet'
|
|
68
|
+
try {
|
|
69
|
+
adoptAppThreadPriorityOn(host.unbox(), priority)
|
|
70
|
+
} catch {}
|
|
71
|
+
},
|
|
72
|
+
appThreadPriority,
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
engineRuntime = runtime
|
|
76
|
+
return runtime
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function sendOpen(
|
|
80
|
+
runtime: WorkletRuntime,
|
|
81
|
+
callId: number,
|
|
82
|
+
settle: Settle,
|
|
83
|
+
config: WorkletNarsilConfig,
|
|
84
|
+
setup: EngineSetup | undefined,
|
|
85
|
+
): void {
|
|
86
|
+
scheduleOnRuntime(
|
|
87
|
+
runtime,
|
|
88
|
+
(id: number, deliver: Settle, settings: WorkletNarsilConfig, prepare: EngineSetup | undefined) => {
|
|
89
|
+
'worklet'
|
|
90
|
+
openOnEngine(id, deliver, settings, prepare)
|
|
91
|
+
},
|
|
92
|
+
callId,
|
|
93
|
+
settle,
|
|
94
|
+
config,
|
|
95
|
+
setup,
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function sendCall(
|
|
100
|
+
runtime: WorkletRuntime,
|
|
101
|
+
callId: number,
|
|
102
|
+
settle: Settle,
|
|
103
|
+
instanceId: number,
|
|
104
|
+
method: EngineMethod,
|
|
105
|
+
args: readonly unknown[],
|
|
106
|
+
partedArgs: readonly number[],
|
|
107
|
+
): void {
|
|
108
|
+
scheduleOnRuntime(
|
|
109
|
+
runtime,
|
|
110
|
+
(
|
|
111
|
+
id: number,
|
|
112
|
+
deliver: Settle,
|
|
113
|
+
instance: number,
|
|
114
|
+
name: EngineMethod,
|
|
115
|
+
values: readonly unknown[],
|
|
116
|
+
parted: readonly number[],
|
|
117
|
+
) => {
|
|
118
|
+
'worklet'
|
|
119
|
+
callOnEngine(id, deliver, instance, name, values, parted)
|
|
120
|
+
},
|
|
121
|
+
callId,
|
|
122
|
+
settle,
|
|
123
|
+
instanceId,
|
|
124
|
+
method,
|
|
125
|
+
args,
|
|
126
|
+
partedArgs,
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function sendCallPart(
|
|
131
|
+
runtime: WorkletRuntime,
|
|
132
|
+
callId: number,
|
|
133
|
+
argIndex: number,
|
|
134
|
+
items: readonly unknown[],
|
|
135
|
+
): void {
|
|
136
|
+
scheduleOnRuntime(
|
|
137
|
+
runtime,
|
|
138
|
+
(id: number, index: number, part: readonly unknown[]) => {
|
|
139
|
+
'worklet'
|
|
140
|
+
stageCallPart(id, index, part)
|
|
141
|
+
},
|
|
142
|
+
callId,
|
|
143
|
+
argIndex,
|
|
144
|
+
items,
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function sendCallPartText(runtime: WorkletRuntime, callId: number, argIndex: number, text: string): void {
|
|
149
|
+
scheduleOnRuntime(
|
|
150
|
+
runtime,
|
|
151
|
+
(id: number, index: number, part: string) => {
|
|
152
|
+
'worklet'
|
|
153
|
+
stageCallPartText(id, index, part)
|
|
154
|
+
},
|
|
155
|
+
callId,
|
|
156
|
+
argIndex,
|
|
157
|
+
text,
|
|
158
|
+
)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function sendDropCallParts(runtime: WorkletRuntime, callId: number): void {
|
|
162
|
+
scheduleOnRuntime(
|
|
163
|
+
runtime,
|
|
164
|
+
(id: number) => {
|
|
165
|
+
'worklet'
|
|
166
|
+
dropCallParts(id)
|
|
167
|
+
},
|
|
168
|
+
callId,
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export function sendListen(
|
|
173
|
+
runtime: WorkletRuntime,
|
|
174
|
+
instanceId: number,
|
|
175
|
+
event: string,
|
|
176
|
+
deliver: DeliverEvent,
|
|
177
|
+
listening: boolean,
|
|
178
|
+
): void {
|
|
179
|
+
scheduleOnRuntime(
|
|
180
|
+
runtime,
|
|
181
|
+
(instance: number, name: string, forward: DeliverEvent, on: boolean) => {
|
|
182
|
+
'worklet'
|
|
183
|
+
listenOnEngine(instance, name as Parameters<typeof listenOnEngine>[1], forward, on)
|
|
184
|
+
},
|
|
185
|
+
instanceId,
|
|
186
|
+
event,
|
|
187
|
+
deliver,
|
|
188
|
+
listening,
|
|
189
|
+
)
|
|
190
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {
|
|
2
|
+
WORKLET_TRANSFER_FIRST_PART_ITEMS,
|
|
3
|
+
WORKLET_TRANSFER_LARGEST_PART_ITEMS,
|
|
4
|
+
WORKLET_TRANSFER_PART_TARGET_MS,
|
|
5
|
+
WORKLET_TRANSFER_TURN_BUDGET_MS,
|
|
6
|
+
} from '../constants'
|
|
7
|
+
import { afterAppTurn } from './app-turns'
|
|
8
|
+
|
|
9
|
+
interface Transfer {
|
|
10
|
+
sendNextStep(): boolean
|
|
11
|
+
fail(error: unknown): void
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface CallSends {
|
|
15
|
+
sendPart(argIndex: number, items: readonly unknown[]): void
|
|
16
|
+
sendCall(args: readonly unknown[], partedArgs: readonly number[]): void
|
|
17
|
+
dropParts(): void
|
|
18
|
+
fail(error: unknown): void
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const waiting: Transfer[] = []
|
|
22
|
+
let sending = false
|
|
23
|
+
|
|
24
|
+
function sendWaiting(): void {
|
|
25
|
+
sending = true
|
|
26
|
+
const turnStarted = performance.now()
|
|
27
|
+
while (waiting.length > 0) {
|
|
28
|
+
const transfer = waiting[0]
|
|
29
|
+
let finished: boolean
|
|
30
|
+
try {
|
|
31
|
+
finished = transfer.sendNextStep()
|
|
32
|
+
} catch (error) {
|
|
33
|
+
finished = true
|
|
34
|
+
transfer.fail(error)
|
|
35
|
+
}
|
|
36
|
+
if (finished) waiting.shift()
|
|
37
|
+
if (waiting.length > 0 && performance.now() - turnStarted >= WORKLET_TRANSFER_TURN_BUDGET_MS) {
|
|
38
|
+
afterAppTurn(sendWaiting)
|
|
39
|
+
return
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
sending = false
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function enqueue(transfer: Transfer): void {
|
|
46
|
+
waiting.push(transfer)
|
|
47
|
+
if (!sending) sendWaiting()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function nextPartItems(sentItems: number, elapsedMs: number): number {
|
|
51
|
+
const perItemMs = elapsedMs / sentItems
|
|
52
|
+
if (perItemMs <= 0) return WORKLET_TRANSFER_LARGEST_PART_ITEMS
|
|
53
|
+
const fitting = Math.floor(WORKLET_TRANSFER_PART_TARGET_MS / perItemMs)
|
|
54
|
+
return Math.min(WORKLET_TRANSFER_LARGEST_PART_ITEMS, Math.max(1, fitting))
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function enqueueCall(args: readonly unknown[], sends: CallSends): void {
|
|
58
|
+
const partedArgs: number[] = []
|
|
59
|
+
for (const [index, value] of args.entries()) {
|
|
60
|
+
if (Array.isArray(value) && value.length > WORKLET_TRANSFER_FIRST_PART_ITEMS) partedArgs.push(index)
|
|
61
|
+
}
|
|
62
|
+
let argPosition = 0
|
|
63
|
+
let offset = 0
|
|
64
|
+
let partItems = WORKLET_TRANSFER_FIRST_PART_ITEMS
|
|
65
|
+
let sentAnyPart = false
|
|
66
|
+
|
|
67
|
+
function sendNextStep(): boolean {
|
|
68
|
+
const argIndex = partedArgs[argPosition]
|
|
69
|
+
if (argIndex === undefined) {
|
|
70
|
+
const remaining = args.map((value, index) => (partedArgs.includes(index) ? null : value))
|
|
71
|
+
sends.sendCall(remaining, partedArgs)
|
|
72
|
+
return true
|
|
73
|
+
}
|
|
74
|
+
const items = args[argIndex] as readonly unknown[]
|
|
75
|
+
const part = items.slice(offset, offset + partItems)
|
|
76
|
+
const started = performance.now()
|
|
77
|
+
sends.sendPart(argIndex, part)
|
|
78
|
+
sentAnyPart = true
|
|
79
|
+
partItems = nextPartItems(part.length, performance.now() - started)
|
|
80
|
+
offset += part.length
|
|
81
|
+
if (offset >= items.length) {
|
|
82
|
+
argPosition += 1
|
|
83
|
+
offset = 0
|
|
84
|
+
}
|
|
85
|
+
return false
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function fail(error: unknown): void {
|
|
89
|
+
if (sentAnyPart) {
|
|
90
|
+
try {
|
|
91
|
+
sends.dropParts()
|
|
92
|
+
} catch {}
|
|
93
|
+
}
|
|
94
|
+
sends.fail(error)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
enqueue({ sendNextStep, fail })
|
|
98
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { DurabilityConfig, NarsilConfig } from '@delali/narsil'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The engine settings that an app passes to the engine on its own Worklets
|
|
5
|
+
* runtime. Each value has to cross to that runtime as data, so the settings
|
|
6
|
+
* that hold a function, such as an embedding adapter or a plugin, go in an
|
|
7
|
+
* {@link EngineSetup} worklet instead.
|
|
8
|
+
*
|
|
9
|
+
* `durability` defaults to a write-ahead log in a `narsil` directory inside
|
|
10
|
+
* the app's private storage, and `null` keeps the index in memory alone. A
|
|
11
|
+
* relative `directory` resolves against that private storage.
|
|
12
|
+
*
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export type WorkletNarsilConfig = Omit<
|
|
16
|
+
NarsilConfig,
|
|
17
|
+
| 'persistence'
|
|
18
|
+
| 'invalidation'
|
|
19
|
+
| 'plugins'
|
|
20
|
+
| 'idGenerator'
|
|
21
|
+
| 'embedding'
|
|
22
|
+
| 'embeddingAdapters'
|
|
23
|
+
| 'rerankAdapters'
|
|
24
|
+
| 'events'
|
|
25
|
+
| 'durability'
|
|
26
|
+
> & { durability?: DurabilityConfig | null }
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A worklet that runs on the engine's runtime before the engine starts, and
|
|
30
|
+
* returns the settings that hold functions, such as `embeddingAdapters`,
|
|
31
|
+
* `plugins`, or `idGenerator`. Its values override the matching values of
|
|
32
|
+
* {@link WorkletNarsilConfig}. Mark the function with the `'worklet'`
|
|
33
|
+
* directive, and register a language or a tokenizer inside it.
|
|
34
|
+
*
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
export type EngineSetup = () => Partial<NarsilConfig> | Promise<Partial<NarsilConfig>>
|