sliftutils 1.1.41 → 1.1.43
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/index.d.ts +219 -0
- package/package.json +2 -2
- package/render-utils/mobxTyped.d.ts +1 -0
- package/render-utils/mobxTyped.ts +4 -0
- package/storage/BulkDatabase2/BulkDatabase2.d.ts +70 -0
- package/storage/BulkDatabase2/BulkDatabase2.ts +667 -0
- package/storage/BulkDatabase2/BulkDatabaseFormat.d.ts +24 -0
- package/storage/BulkDatabase2/BulkDatabaseFormat.ts +235 -0
- package/storage/BulkDatabase2/blockCache.d.ts +17 -0
- package/storage/BulkDatabase2/blockCache.ts +173 -0
- package/storage/BulkDatabase2/streamLog.d.ts +25 -0
- package/storage/BulkDatabase2/streamLog.ts +116 -0
- package/storage/BulkDatabase2/syncClient.d.ts +9 -0
- package/storage/BulkDatabase2/syncClient.ts +58 -0
- package/storage/BulkDatabase2/syncWorker.d.ts +1 -0
- package/storage/BulkDatabase2/syncWorker.ts +65 -0
- package/storage/FileFolderAPI.d.ts +48 -0
- package/storage/FileFolderAPI.tsx +66 -19
- package/yarn.lock +4 -4
package/index.d.ts
CHANGED
|
@@ -715,6 +715,7 @@ declare module "sliftutils/render-utils/colors" {
|
|
|
715
715
|
}
|
|
716
716
|
|
|
717
717
|
declare module "sliftutils/render-utils/mobxTyped" {
|
|
718
|
+
export { observable, runInAction, computed, autorun } from "mobx";
|
|
718
719
|
export declare function configureMobxNextFrameScheduler(): void;
|
|
719
720
|
|
|
720
721
|
}
|
|
@@ -761,6 +762,176 @@ declare module "sliftutils/render-utils/observer" {
|
|
|
761
762
|
|
|
762
763
|
}
|
|
763
764
|
|
|
765
|
+
declare module "sliftutils/storage/BulkDatabase2/BulkDatabase2" {
|
|
766
|
+
export declare class BulkDatabase2<T extends {
|
|
767
|
+
key: string;
|
|
768
|
+
}> {
|
|
769
|
+
readonly name: string;
|
|
770
|
+
constructor(name: string);
|
|
771
|
+
static clearCache(): void;
|
|
772
|
+
private storage;
|
|
773
|
+
private overlay;
|
|
774
|
+
private streamTimes;
|
|
775
|
+
private loadVersion;
|
|
776
|
+
private streamFileName;
|
|
777
|
+
private streamRowsWritten;
|
|
778
|
+
private getStreamFileName;
|
|
779
|
+
private reader;
|
|
780
|
+
private syncSetup;
|
|
781
|
+
private localTime;
|
|
782
|
+
private applyRemote;
|
|
783
|
+
private resetReader;
|
|
784
|
+
write(entry: T): Promise<void>;
|
|
785
|
+
writeBatch(entries: T[]): Promise<void>;
|
|
786
|
+
delete(key: string): Promise<void>;
|
|
787
|
+
deleteBatch(keys: string[]): Promise<void>;
|
|
788
|
+
private writeBulkFile;
|
|
789
|
+
private listStreamFiles;
|
|
790
|
+
private loadStreamEntries;
|
|
791
|
+
private orderStreamEntries;
|
|
792
|
+
private maybeRolloverStream;
|
|
793
|
+
private rolloverStream;
|
|
794
|
+
compact(): Promise<void>;
|
|
795
|
+
private listFiles;
|
|
796
|
+
private loadFileReader;
|
|
797
|
+
private handleUnreadableFile;
|
|
798
|
+
private mergeFiles;
|
|
799
|
+
private formatInfo;
|
|
800
|
+
private patchColumn;
|
|
801
|
+
getSingleField<Column extends keyof T>(key: string, column: Column): Promise<T[Column] | undefined>;
|
|
802
|
+
getColumn<Column extends keyof T>(column: Column): Promise<{
|
|
803
|
+
key: string;
|
|
804
|
+
value: T[Column];
|
|
805
|
+
}[]>;
|
|
806
|
+
getKeys(): Promise<string[]>;
|
|
807
|
+
private baseColumns;
|
|
808
|
+
private baseColumnsLoading;
|
|
809
|
+
private baseFields;
|
|
810
|
+
private baseFieldsLoading;
|
|
811
|
+
private ensureBaseColumn;
|
|
812
|
+
private ensureBaseField;
|
|
813
|
+
getSingleFieldSync<Column extends keyof T>(config: {
|
|
814
|
+
key: string;
|
|
815
|
+
column: Column;
|
|
816
|
+
}): T[Column] | undefined;
|
|
817
|
+
getColumnSync<Column extends keyof T>(column: Column): {
|
|
818
|
+
key: string;
|
|
819
|
+
value: T[Column];
|
|
820
|
+
}[] | undefined;
|
|
821
|
+
getColumnInfo(): Promise<{
|
|
822
|
+
column: string;
|
|
823
|
+
byteSize: number;
|
|
824
|
+
}[]>;
|
|
825
|
+
getReaderInfo(): Promise<{
|
|
826
|
+
rowCount: number;
|
|
827
|
+
totalBytes: number;
|
|
828
|
+
keyCount: number;
|
|
829
|
+
sampleKey: string | undefined;
|
|
830
|
+
columns: {
|
|
831
|
+
column: string;
|
|
832
|
+
byteSize: number;
|
|
833
|
+
}[];
|
|
834
|
+
}>;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
declare module "sliftutils/storage/BulkDatabase2/BulkDatabaseFormat" {
|
|
840
|
+
/// <reference types="node" />
|
|
841
|
+
/// <reference types="node" />
|
|
842
|
+
export declare const KEY_COLUMN = "key";
|
|
843
|
+
export declare const EMPTY_BUFFER: Buffer;
|
|
844
|
+
export declare function buildFileBuffer(rows: Record<string, unknown>[]): Buffer;
|
|
845
|
+
export type BaseBulkDatabaseReader = {
|
|
846
|
+
rowCount: number;
|
|
847
|
+
totalBytes: number;
|
|
848
|
+
keys: string[];
|
|
849
|
+
columns: {
|
|
850
|
+
column: string;
|
|
851
|
+
byteSize: number;
|
|
852
|
+
}[];
|
|
853
|
+
deletedKeys?: Set<string>;
|
|
854
|
+
getColumn: (column: string) => Promise<{
|
|
855
|
+
key: string;
|
|
856
|
+
value: unknown;
|
|
857
|
+
}[]>;
|
|
858
|
+
getSingleField: (key: string, column: string) => Promise<unknown | undefined>;
|
|
859
|
+
};
|
|
860
|
+
export declare function loadBulkDatabase(config: {
|
|
861
|
+
totalBytes: number;
|
|
862
|
+
getRange: (start: number, end: number) => Promise<Buffer>;
|
|
863
|
+
}): Promise<BaseBulkDatabaseReader>;
|
|
864
|
+
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
declare module "sliftutils/storage/BulkDatabase2/blockCache" {
|
|
868
|
+
/// <reference types="node" />
|
|
869
|
+
/// <reference types="node" />
|
|
870
|
+
export type GetRange = (start: number, end: number) => Promise<Buffer>;
|
|
871
|
+
export declare function encodeCompressedBlocks(data: Buffer): Buffer;
|
|
872
|
+
export declare class BlockCache {
|
|
873
|
+
private blocks;
|
|
874
|
+
private indexes;
|
|
875
|
+
clear(): void;
|
|
876
|
+
private touch;
|
|
877
|
+
private readIndex;
|
|
878
|
+
open(fileId: string, fileSize: number, rawGetRange: GetRange): Promise<{
|
|
879
|
+
uncompressedSize: number;
|
|
880
|
+
getRange: GetRange;
|
|
881
|
+
}>;
|
|
882
|
+
private makeGetRange;
|
|
883
|
+
}
|
|
884
|
+
export declare const blockCache: BlockCache;
|
|
885
|
+
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
declare module "sliftutils/storage/BulkDatabase2/streamLog" {
|
|
889
|
+
/// <reference types="node" />
|
|
890
|
+
/// <reference types="node" />
|
|
891
|
+
import { BaseBulkDatabaseReader } from "./BulkDatabaseFormat";
|
|
892
|
+
export declare const STREAM_EXTENSION = ".stream";
|
|
893
|
+
export type StreamEntry = {
|
|
894
|
+
time: number;
|
|
895
|
+
row?: Record<string, unknown>;
|
|
896
|
+
deletedKey?: string;
|
|
897
|
+
};
|
|
898
|
+
export declare function frameRows(entries: {
|
|
899
|
+
time: number;
|
|
900
|
+
row: Record<string, unknown>;
|
|
901
|
+
}[]): Buffer;
|
|
902
|
+
export declare function frameDeletes(entries: {
|
|
903
|
+
time: number;
|
|
904
|
+
key: string;
|
|
905
|
+
}[]): Buffer;
|
|
906
|
+
export declare function parseStream(buffer: Buffer): {
|
|
907
|
+
entries: StreamEntry[];
|
|
908
|
+
badBytes: number;
|
|
909
|
+
};
|
|
910
|
+
export declare function streamReaderFromEntries(entries: StreamEntry[], totalBytes: number): {
|
|
911
|
+
reader: BaseBulkDatabaseReader;
|
|
912
|
+
times: Map<string, number>;
|
|
913
|
+
};
|
|
914
|
+
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
declare module "sliftutils/storage/BulkDatabase2/syncClient" {
|
|
918
|
+
export type RemoteWrite = {
|
|
919
|
+
key: string;
|
|
920
|
+
time: number;
|
|
921
|
+
deleted?: boolean;
|
|
922
|
+
value?: unknown;
|
|
923
|
+
};
|
|
924
|
+
export declare function isSyncSupported(): boolean;
|
|
925
|
+
export declare function connect(collection: string, onWrite: (write: RemoteWrite) => void): Promise<RemoteWrite[]>;
|
|
926
|
+
export declare function broadcast(collection: string, write: RemoteWrite): void;
|
|
927
|
+
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
declare module "sliftutils/storage/BulkDatabase2/syncWorker" {
|
|
931
|
+
export {};
|
|
932
|
+
|
|
933
|
+
}
|
|
934
|
+
|
|
764
935
|
declare module "sliftutils/storage/CBORStorage" {
|
|
765
936
|
/// <reference types="node" />
|
|
766
937
|
/// <reference types="node" />
|
|
@@ -987,6 +1158,52 @@ declare module "sliftutils/storage/FileFolderAPI" {
|
|
|
987
1158
|
]>;
|
|
988
1159
|
};
|
|
989
1160
|
export declare function setFileAPIKey(key: string): void;
|
|
1161
|
+
export declare class NodeJSFileHandleWrapper implements FileWrapper {
|
|
1162
|
+
private filePath;
|
|
1163
|
+
constructor(filePath: string);
|
|
1164
|
+
getFile(): Promise<{
|
|
1165
|
+
size: number;
|
|
1166
|
+
lastModified: number;
|
|
1167
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
1168
|
+
slice: (start: number, end: number) => {
|
|
1169
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
1170
|
+
};
|
|
1171
|
+
}>;
|
|
1172
|
+
createWritable(config?: {
|
|
1173
|
+
keepExistingData?: boolean;
|
|
1174
|
+
}): Promise<{
|
|
1175
|
+
seek: (offset: number) => Promise<void>;
|
|
1176
|
+
write: (value: Buffer) => Promise<void>;
|
|
1177
|
+
close: () => Promise<void>;
|
|
1178
|
+
}>;
|
|
1179
|
+
}
|
|
1180
|
+
export declare class NodeJSDirectoryHandleWrapper implements DirectoryWrapper {
|
|
1181
|
+
private rootPath;
|
|
1182
|
+
constructor(rootPath: string);
|
|
1183
|
+
removeEntry(key: string, options?: {
|
|
1184
|
+
recursive?: boolean;
|
|
1185
|
+
}): Promise<void>;
|
|
1186
|
+
getFileHandle(key: string, options?: {
|
|
1187
|
+
create?: boolean;
|
|
1188
|
+
}): Promise<FileWrapper>;
|
|
1189
|
+
getDirectoryHandle(key: string, options?: {
|
|
1190
|
+
create?: boolean;
|
|
1191
|
+
}): Promise<DirectoryWrapper>;
|
|
1192
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<[
|
|
1193
|
+
string,
|
|
1194
|
+
{
|
|
1195
|
+
kind: "file";
|
|
1196
|
+
name: string;
|
|
1197
|
+
getFile(): Promise<FileWrapper>;
|
|
1198
|
+
} | {
|
|
1199
|
+
kind: "directory";
|
|
1200
|
+
name: string;
|
|
1201
|
+
getDirectoryHandle(key: string, options?: {
|
|
1202
|
+
create?: boolean;
|
|
1203
|
+
}): Promise<DirectoryWrapper>;
|
|
1204
|
+
}
|
|
1205
|
+
]>;
|
|
1206
|
+
}
|
|
990
1207
|
export declare const getDirectoryHandle: {
|
|
991
1208
|
(): Promise<DirectoryWrapper>;
|
|
992
1209
|
reset(): void;
|
|
@@ -1015,6 +1232,8 @@ declare module "sliftutils/storage/FileFolderAPI" {
|
|
|
1015
1232
|
export type FileStorage = IStorageRaw & {
|
|
1016
1233
|
folder: NestedFileStorage;
|
|
1017
1234
|
};
|
|
1235
|
+
export declare function wrapHandle(handle: DirectoryWrapper): FileStorage;
|
|
1236
|
+
export declare function tryToLoadPointer(pointer: string): Promise<DirectoryWrapper | undefined>;
|
|
1018
1237
|
export {};
|
|
1019
1238
|
|
|
1020
1239
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sliftutils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.43",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"mobx": "^6.13.3",
|
|
52
52
|
"preact-old-types": "^10.28.1",
|
|
53
53
|
"shell-quote": "^1.8.3",
|
|
54
|
-
"socket-function": "^1.1.
|
|
54
|
+
"socket-function": "^1.1.38",
|
|
55
55
|
"typenode": "*",
|
|
56
56
|
"typesafecss": "*",
|
|
57
57
|
"ws": "^8.18.3",
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import * as mobx from "mobx";
|
|
2
2
|
import { batchFunction } from "socket-function/src/batching";
|
|
3
|
+
|
|
4
|
+
// Re-export the core mobx primitives so downstream packages (which may have their own duplicate mobx
|
|
5
|
+
// in node_modules) can share THIS mobx instance, otherwise reactivity doesn't cross package boundaries.
|
|
6
|
+
export { observable, runInAction, computed, autorun } from "mobx";
|
|
3
7
|
export function configureMobxNextFrameScheduler() {
|
|
4
8
|
// NOTE: This makes a big difference if we do await calls in a loop which mutates observable state. BUT... we should probably just do those await calls before the loop?
|
|
5
9
|
let batchReactionScheduler = batchFunction({
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export declare class BulkDatabase2<T extends {
|
|
2
|
+
key: string;
|
|
3
|
+
}> {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
constructor(name: string);
|
|
6
|
+
static clearCache(): void;
|
|
7
|
+
private storage;
|
|
8
|
+
private overlay;
|
|
9
|
+
private streamTimes;
|
|
10
|
+
private loadVersion;
|
|
11
|
+
private streamFileName;
|
|
12
|
+
private streamRowsWritten;
|
|
13
|
+
private getStreamFileName;
|
|
14
|
+
private reader;
|
|
15
|
+
private syncSetup;
|
|
16
|
+
private localTime;
|
|
17
|
+
private applyRemote;
|
|
18
|
+
private resetReader;
|
|
19
|
+
write(entry: T): Promise<void>;
|
|
20
|
+
writeBatch(entries: T[]): Promise<void>;
|
|
21
|
+
delete(key: string): Promise<void>;
|
|
22
|
+
deleteBatch(keys: string[]): Promise<void>;
|
|
23
|
+
private writeBulkFile;
|
|
24
|
+
private listStreamFiles;
|
|
25
|
+
private loadStreamEntries;
|
|
26
|
+
private orderStreamEntries;
|
|
27
|
+
private maybeRolloverStream;
|
|
28
|
+
private rolloverStream;
|
|
29
|
+
compact(): Promise<void>;
|
|
30
|
+
private listFiles;
|
|
31
|
+
private loadFileReader;
|
|
32
|
+
private handleUnreadableFile;
|
|
33
|
+
private mergeFiles;
|
|
34
|
+
private formatInfo;
|
|
35
|
+
private patchColumn;
|
|
36
|
+
getSingleField<Column extends keyof T>(key: string, column: Column): Promise<T[Column] | undefined>;
|
|
37
|
+
getColumn<Column extends keyof T>(column: Column): Promise<{
|
|
38
|
+
key: string;
|
|
39
|
+
value: T[Column];
|
|
40
|
+
}[]>;
|
|
41
|
+
getKeys(): Promise<string[]>;
|
|
42
|
+
private baseColumns;
|
|
43
|
+
private baseColumnsLoading;
|
|
44
|
+
private baseFields;
|
|
45
|
+
private baseFieldsLoading;
|
|
46
|
+
private ensureBaseColumn;
|
|
47
|
+
private ensureBaseField;
|
|
48
|
+
getSingleFieldSync<Column extends keyof T>(config: {
|
|
49
|
+
key: string;
|
|
50
|
+
column: Column;
|
|
51
|
+
}): T[Column] | undefined;
|
|
52
|
+
getColumnSync<Column extends keyof T>(column: Column): {
|
|
53
|
+
key: string;
|
|
54
|
+
value: T[Column];
|
|
55
|
+
}[] | undefined;
|
|
56
|
+
getColumnInfo(): Promise<{
|
|
57
|
+
column: string;
|
|
58
|
+
byteSize: number;
|
|
59
|
+
}[]>;
|
|
60
|
+
getReaderInfo(): Promise<{
|
|
61
|
+
rowCount: number;
|
|
62
|
+
totalBytes: number;
|
|
63
|
+
keyCount: number;
|
|
64
|
+
sampleKey: string | undefined;
|
|
65
|
+
columns: {
|
|
66
|
+
column: string;
|
|
67
|
+
byteSize: number;
|
|
68
|
+
}[];
|
|
69
|
+
}>;
|
|
70
|
+
}
|