querysub 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.
- package/.dependency-cruiser.js +304 -0
- package/.eslintrc.js +51 -0
- package/.github/copilot-instructions.md +1 -0
- package/.vscode/settings.json +25 -0
- package/bin/deploy.js +4 -0
- package/bin/function.js +4 -0
- package/bin/server.js +4 -0
- package/costsBenefits.txt +112 -0
- package/deploy.ts +3 -0
- package/inject.ts +1 -0
- package/package.json +60 -0
- package/prompts.txt +54 -0
- package/spec.txt +820 -0
- package/src/-a-archives/archiveCache.ts +913 -0
- package/src/-a-archives/archives.ts +148 -0
- package/src/-a-archives/archivesBackBlaze.ts +792 -0
- package/src/-a-archives/archivesDisk.ts +418 -0
- package/src/-a-archives/copyLocalToBackblaze.ts +24 -0
- package/src/-a-auth/certs.ts +517 -0
- package/src/-a-auth/der.ts +122 -0
- package/src/-a-auth/ed25519.ts +1015 -0
- package/src/-a-auth/node-forge-ed25519.d.ts +17 -0
- package/src/-b-authorities/dnsAuthority.ts +203 -0
- package/src/-b-authorities/emailAuthority.ts +57 -0
- package/src/-c-identity/IdentityController.ts +200 -0
- package/src/-d-trust/NetworkTrust2.ts +150 -0
- package/src/-e-certs/EdgeCertController.ts +288 -0
- package/src/-e-certs/certAuthority.ts +192 -0
- package/src/-f-node-discovery/NodeDiscovery.ts +543 -0
- package/src/-g-core-values/NodeCapabilities.ts +134 -0
- package/src/-g-core-values/oneTimeForward.ts +91 -0
- package/src/-h-path-value-serialize/PathValueSerializer.ts +769 -0
- package/src/-h-path-value-serialize/stringSerializer.ts +176 -0
- package/src/0-path-value-core/LoggingClient.tsx +24 -0
- package/src/0-path-value-core/NodePathAuthorities.ts +978 -0
- package/src/0-path-value-core/PathController.ts +1 -0
- package/src/0-path-value-core/PathValueCommitter.ts +565 -0
- package/src/0-path-value-core/PathValueController.ts +231 -0
- package/src/0-path-value-core/archiveLocks/ArchiveLocks.ts +154 -0
- package/src/0-path-value-core/archiveLocks/ArchiveLocks2.ts +820 -0
- package/src/0-path-value-core/archiveLocks/archiveSnapshots.ts +180 -0
- package/src/0-path-value-core/debugLogs.ts +90 -0
- package/src/0-path-value-core/pathValueArchives.ts +483 -0
- package/src/0-path-value-core/pathValueCore.ts +2217 -0
- package/src/1-path-client/RemoteWatcher.ts +558 -0
- package/src/1-path-client/pathValueClientWatcher.ts +702 -0
- package/src/2-proxy/PathValueProxyWatcher.ts +1857 -0
- package/src/2-proxy/archiveMoveHarness.ts +376 -0
- package/src/2-proxy/garbageCollection.ts +753 -0
- package/src/2-proxy/pathDatabaseProxyBase.ts +37 -0
- package/src/2-proxy/pathValueProxy.ts +139 -0
- package/src/2-proxy/schema2.ts +518 -0
- package/src/3-path-functions/PathFunctionHelpers.ts +129 -0
- package/src/3-path-functions/PathFunctionRunner.ts +619 -0
- package/src/3-path-functions/PathFunctionRunnerMain.ts +67 -0
- package/src/3-path-functions/deployBlock.ts +10 -0
- package/src/3-path-functions/deployCheck.ts +7 -0
- package/src/3-path-functions/deployMain.ts +160 -0
- package/src/3-path-functions/pathFunctionLoader.ts +282 -0
- package/src/3-path-functions/syncSchema.ts +475 -0
- package/src/3-path-functions/tests/functionsTest.ts +135 -0
- package/src/3-path-functions/tests/rejectTest.ts +77 -0
- package/src/4-dom/css.tsx +29 -0
- package/src/4-dom/cssTypes.d.ts +212 -0
- package/src/4-dom/qreact.tsx +2322 -0
- package/src/4-dom/qreactTest.tsx +417 -0
- package/src/4-querysub/Querysub.ts +877 -0
- package/src/4-querysub/QuerysubController.ts +620 -0
- package/src/4-querysub/copyEvent.ts +0 -0
- package/src/4-querysub/permissions.ts +289 -0
- package/src/4-querysub/permissionsShared.ts +1 -0
- package/src/4-querysub/querysubPrediction.ts +525 -0
- package/src/5-diagnostics/FullscreenModal.tsx +67 -0
- package/src/5-diagnostics/GenericFormat.tsx +165 -0
- package/src/5-diagnostics/Modal.tsx +79 -0
- package/src/5-diagnostics/Table.tsx +183 -0
- package/src/5-diagnostics/TimeGrouper.tsx +114 -0
- package/src/5-diagnostics/diskValueAudit.ts +216 -0
- package/src/5-diagnostics/memoryValueAudit.ts +442 -0
- package/src/5-diagnostics/nodeMetadata.ts +135 -0
- package/src/5-diagnostics/qreactDebug.tsx +309 -0
- package/src/5-diagnostics/shared.ts +26 -0
- package/src/5-diagnostics/synchronousLagTracking.ts +47 -0
- package/src/TestController.ts +35 -0
- package/src/allowclient.flag +0 -0
- package/src/bits.ts +86 -0
- package/src/buffers.ts +69 -0
- package/src/config.ts +53 -0
- package/src/config2.ts +48 -0
- package/src/diagnostics/ActionsHistory.ts +56 -0
- package/src/diagnostics/NodeViewer.tsx +503 -0
- package/src/diagnostics/SizeLimiter.ts +62 -0
- package/src/diagnostics/TimeDebug.tsx +18 -0
- package/src/diagnostics/benchmark.ts +139 -0
- package/src/diagnostics/errorLogs/ErrorLogController.ts +515 -0
- package/src/diagnostics/errorLogs/ErrorLogCore.ts +274 -0
- package/src/diagnostics/errorLogs/LogClassifiers.tsx +302 -0
- package/src/diagnostics/errorLogs/LogFilterUI.tsx +84 -0
- package/src/diagnostics/errorLogs/LogNotify.tsx +101 -0
- package/src/diagnostics/errorLogs/LogTimeSelector.tsx +724 -0
- package/src/diagnostics/errorLogs/LogViewer.tsx +757 -0
- package/src/diagnostics/errorLogs/hookErrors.ts +60 -0
- package/src/diagnostics/errorLogs/logFiltering.tsx +149 -0
- package/src/diagnostics/heapTag.ts +13 -0
- package/src/diagnostics/listenOnDebugger.ts +77 -0
- package/src/diagnostics/logs/DiskLoggerPage.tsx +572 -0
- package/src/diagnostics/logs/ObjectDisplay.tsx +165 -0
- package/src/diagnostics/logs/ansiFormat.ts +108 -0
- package/src/diagnostics/logs/diskLogGlobalContext.ts +38 -0
- package/src/diagnostics/logs/diskLogger.ts +305 -0
- package/src/diagnostics/logs/diskShimConsoleLogs.ts +32 -0
- package/src/diagnostics/logs/injectFileLocationToConsole.ts +50 -0
- package/src/diagnostics/logs/logGitHashes.ts +30 -0
- package/src/diagnostics/managementPages.tsx +289 -0
- package/src/diagnostics/periodic.ts +89 -0
- package/src/diagnostics/runSaturationTest.ts +416 -0
- package/src/diagnostics/satSchema.ts +64 -0
- package/src/diagnostics/trackResources.ts +82 -0
- package/src/diagnostics/watchdog.ts +55 -0
- package/src/errors.ts +132 -0
- package/src/forceProduction.ts +3 -0
- package/src/fs.ts +72 -0
- package/src/heapDumps.ts +666 -0
- package/src/https.ts +2 -0
- package/src/inject.ts +1 -0
- package/src/library-components/ATag.tsx +84 -0
- package/src/library-components/Button.tsx +344 -0
- package/src/library-components/ButtonSelector.tsx +64 -0
- package/src/library-components/DropdownCustom.tsx +151 -0
- package/src/library-components/DropdownSelector.tsx +32 -0
- package/src/library-components/Input.tsx +334 -0
- package/src/library-components/InputLabel.tsx +198 -0
- package/src/library-components/InputPicker.tsx +125 -0
- package/src/library-components/LazyComponent.tsx +62 -0
- package/src/library-components/MeasureHeightCSS.tsx +48 -0
- package/src/library-components/MeasuredDiv.tsx +47 -0
- package/src/library-components/ShowMore.tsx +51 -0
- package/src/library-components/SyncedController.ts +171 -0
- package/src/library-components/TimeRangeSelector.tsx +407 -0
- package/src/library-components/URLParam.ts +263 -0
- package/src/library-components/colors.tsx +14 -0
- package/src/library-components/drag.ts +114 -0
- package/src/library-components/icons.tsx +692 -0
- package/src/library-components/niceStringify.ts +50 -0
- package/src/library-components/renderToString.ts +52 -0
- package/src/misc/PromiseRace.ts +101 -0
- package/src/misc/color.ts +30 -0
- package/src/misc/getParentProcessId.cs +53 -0
- package/src/misc/getParentProcessId.ts +53 -0
- package/src/misc/hash.ts +83 -0
- package/src/misc/ipPong.js +13 -0
- package/src/misc/networking.ts +2 -0
- package/src/misc/random.ts +45 -0
- package/src/misc.ts +19 -0
- package/src/noserverhotreload.flag +0 -0
- package/src/path.ts +226 -0
- package/src/persistentLocalStore.ts +37 -0
- package/src/promise.ts +15 -0
- package/src/server.ts +73 -0
- package/src/src.d.ts +1 -0
- package/src/test/heapProcess.ts +36 -0
- package/src/test/mongoSatTest.tsx +55 -0
- package/src/test/satTest.ts +193 -0
- package/src/test/test.tsx +552 -0
- package/src/zip.ts +92 -0
- package/src/zipThreaded.ts +106 -0
- package/src/zipThreadedWorker.js +19 -0
- package/tsconfig.json +27 -0
- package/yarnSpec.txt +56 -0
package/src/errors.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import debugbreak from "debugbreak";
|
|
2
|
+
import { delay } from "socket-function/src/batching";
|
|
3
|
+
import { blue, red } from "socket-function/src/formatting/logColors";
|
|
4
|
+
import { canHaveChildren } from "socket-function/src/types";
|
|
5
|
+
|
|
6
|
+
let callstackTracking = false;
|
|
7
|
+
/** WARNING: This can be VERY slow. The only way to record the callstack of some errors is to record it
|
|
8
|
+
* on promise initialization, which results in gathering callstacks even for successful promises.
|
|
9
|
+
*/
|
|
10
|
+
export function enableCallbackTracking() {
|
|
11
|
+
callstackTracking = true;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function logError(e: Error, callstack: unknown) {
|
|
15
|
+
console.error(`${blue("Error from promise")}: ${red(e.stack || e.message)}`);
|
|
16
|
+
if (callstackTracking) {
|
|
17
|
+
console.log(callstack);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function logErrors(promiseorError: Promise<unknown> | unknown | undefined) {
|
|
21
|
+
let callstack = callstackTracking && new Error().stack;
|
|
22
|
+
if (!promiseorError) return;
|
|
23
|
+
if (!canHaveChildren(promiseorError)) return;
|
|
24
|
+
if (promiseorError instanceof Promise) {
|
|
25
|
+
promiseorError.catch(e => {
|
|
26
|
+
logError(e, callstack);
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
if (promiseorError instanceof Error) {
|
|
30
|
+
logError(promiseorError, callstack);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function ignoreErrors(promise: Promise<unknown>) {
|
|
35
|
+
if (!promise) return;
|
|
36
|
+
if (!promise?.catch) return;
|
|
37
|
+
promise.catch(e => { });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Logs the error as well. */
|
|
41
|
+
export function errorToUndefined<T>(p: Promise<T>): Promise<T | undefined> {
|
|
42
|
+
if (!p?.catch) return p;
|
|
43
|
+
return p.catch((e) => {
|
|
44
|
+
console.error(`${blue("Error to undefined error")}: ${red(e.stack)}`);
|
|
45
|
+
return undefined;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export function errorToUndefinedSilent<T>(p: Promise<T>): Promise<T | undefined> {
|
|
49
|
+
if (!p?.catch) return Promise.resolve(undefined);
|
|
50
|
+
return p.catch((e) => {
|
|
51
|
+
return undefined;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function timeoutToError<T>(time: number, p: Promise<T>, err: () => Error) {
|
|
56
|
+
return new Promise<T>((resolve, reject) => {
|
|
57
|
+
let timeout = setTimeout(() => reject(err()), time);
|
|
58
|
+
p.then(resolve, reject).finally(() => clearTimeout(timeout));
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// NOTE: Both errors and timeouts are converted to undefined
|
|
63
|
+
export function timeoutToUndefined<T>(time: number, p: Promise<T>) {
|
|
64
|
+
return new Promise<T | undefined>((resolve, reject) => {
|
|
65
|
+
let timeout = setTimeout(() => {
|
|
66
|
+
console.error(blue(`timeoutToUndefined timed out after ${time}`));
|
|
67
|
+
resolve(undefined);
|
|
68
|
+
}, time);
|
|
69
|
+
p.then(resolve,
|
|
70
|
+
(err) => {
|
|
71
|
+
console.error(`${blue("timeoutToUndefined error")}: ${red(err.stack)}`);
|
|
72
|
+
resolve(undefined);
|
|
73
|
+
}
|
|
74
|
+
).finally(() => clearTimeout(timeout));
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export function timeoutToUndefinedSilent<T>(time: number, p: Promise<T>) {
|
|
78
|
+
return new Promise<T | undefined>((resolve, reject) => {
|
|
79
|
+
let timeout = setTimeout(() => {
|
|
80
|
+
resolve(undefined);
|
|
81
|
+
}, time);
|
|
82
|
+
p.then(
|
|
83
|
+
resolve,
|
|
84
|
+
(err) => {
|
|
85
|
+
resolve(undefined);
|
|
86
|
+
}
|
|
87
|
+
).finally(() => clearTimeout(timeout));
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** Used when accessing paid resources, so we don't rack up charges due to an error,
|
|
92
|
+
* but also so that it doesn't take forever for the initial call to run.
|
|
93
|
+
*/
|
|
94
|
+
export async function backoffRetryLoop<T>(code: () => Promise<T>, waitTime = 5 * 1000) {
|
|
95
|
+
while (true) {
|
|
96
|
+
try {
|
|
97
|
+
return await code();
|
|
98
|
+
} catch (e: any) {
|
|
99
|
+
console.error(`Error retrying in ${waitTime}ms\n${e.stack}`);
|
|
100
|
+
await delay(waitTime);
|
|
101
|
+
waitTime *= 1.01;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function errorify(error: any, messageOverride?: string) {
|
|
107
|
+
if (error instanceof Error) {
|
|
108
|
+
return error;
|
|
109
|
+
}
|
|
110
|
+
let errorObj = new Error();
|
|
111
|
+
if (typeof error === "string" && error.includes("\n")) {
|
|
112
|
+
errorObj.stack = error;
|
|
113
|
+
} else {
|
|
114
|
+
errorObj.message = error;
|
|
115
|
+
}
|
|
116
|
+
if (messageOverride) {
|
|
117
|
+
errorObj.message = messageOverride;
|
|
118
|
+
}
|
|
119
|
+
return errorObj;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function assertValue<T>(value: T | undefined | null, message?: string): T {
|
|
123
|
+
if (value === undefined || value === null) {
|
|
124
|
+
throw new Error(`Value is ${value === undefined ? "undefined" : "null"}, ${message}`);
|
|
125
|
+
}
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
export function assert<T>(value: T | undefined | null, message?: string): asserts value is T {
|
|
129
|
+
if (value === undefined || value === null) {
|
|
130
|
+
throw new Error(`Value is ${value === undefined ? "undefined" : "null"}, ${message}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
package/src/fs.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { cache, lazy } from "socket-function/src/caching";
|
|
2
|
+
import os from "os";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import debugbreak from "debugbreak";
|
|
5
|
+
import { isNode } from "socket-function/src/misc";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import { magenta } from "socket-function/src/formatting/logColors";
|
|
8
|
+
|
|
9
|
+
let rootDir = "";
|
|
10
|
+
if (isNode()) {
|
|
11
|
+
let base = path.resolve(".");
|
|
12
|
+
// Search upwards until we find a package.json
|
|
13
|
+
while (base.length > 3 && !fs.existsSync(base + "/package.json")) {
|
|
14
|
+
base = path.resolve(base + "/..");
|
|
15
|
+
}
|
|
16
|
+
rootDir = pathToLongPath(base.replaceAll("\\", "/") + "/database-storage/");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function setRootDirKey(key: string) {
|
|
20
|
+
rootDir = pathToLongPath(os.homedir() + "/" + key + "/");
|
|
21
|
+
}
|
|
22
|
+
export function setRootDir(newRootDir: string) {
|
|
23
|
+
rootDir = newRootDir;
|
|
24
|
+
rootDir = pathToLongPath(rootDir);
|
|
25
|
+
}
|
|
26
|
+
function pathToLongPath(fullPath: string): string {
|
|
27
|
+
// I guess we don't need the special prefix?
|
|
28
|
+
// if (isNode() && process.platform === "win32") {
|
|
29
|
+
// fullPath = path.resolve(fullPath);
|
|
30
|
+
// if (!fullPath.startsWith("\\\\?\\")) {
|
|
31
|
+
// fullPath = "\\\\?\\" + fullPath;
|
|
32
|
+
// }
|
|
33
|
+
// }
|
|
34
|
+
if (isNode()) {
|
|
35
|
+
fullPath = path.resolve(fullPath).replaceAll("\\", "/") + "/";
|
|
36
|
+
}
|
|
37
|
+
return fullPath;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const getStorageDir = lazy(() => {
|
|
41
|
+
let dir = rootDir;
|
|
42
|
+
if (isNode() && !fs.existsSync(dir)) {
|
|
43
|
+
fs.mkdirSync(dir);
|
|
44
|
+
}
|
|
45
|
+
return dir;
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const getSubFolder = cache((path: string) => {
|
|
49
|
+
let dir = getStorageDir() + path;
|
|
50
|
+
if (!dir.endsWith("/")) {
|
|
51
|
+
dir += "/";
|
|
52
|
+
}
|
|
53
|
+
if (isNode() && !fs.existsSync(dir)) {
|
|
54
|
+
fs.mkdirSync(dir);
|
|
55
|
+
}
|
|
56
|
+
return dir;
|
|
57
|
+
});
|
|
58
|
+
export const getStorageFolder = getSubFolder;
|
|
59
|
+
|
|
60
|
+
export async function* readDirRecursive(dir: string): AsyncGenerator<string> {
|
|
61
|
+
try {
|
|
62
|
+
for (let file of await fs.promises.readdir(dir)) {
|
|
63
|
+
let fullPath = dir + file;
|
|
64
|
+
try {
|
|
65
|
+
let stat = await fs.promises.stat(fullPath);
|
|
66
|
+
if (stat.isDirectory()) {
|
|
67
|
+
yield* readDirRecursive(fullPath + "/");
|
|
68
|
+
}
|
|
69
|
+
} catch { }
|
|
70
|
+
}
|
|
71
|
+
} catch { }
|
|
72
|
+
}
|