From fb83c3556ff7df234cf168f258116f78a1245206 Mon Sep 17 00:00:00 2001 From: Roger Qiu Date: Wed, 20 Jul 2022 13:38:37 +1000 Subject: [PATCH] WIP --- package-lock.json | 42 ++++++++++++++++++++++++++++++++++++++++++ package.json | 3 ++- src/queue/Queue.ts | 26 ++++++++++++++++++++++++++ src/queue/index.ts | 0 src/timer/Timer.ts | 7 +++++++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/queue/Queue.ts create mode 100644 src/queue/index.ts create mode 100644 src/timer/Timer.ts diff --git a/package-lock.json b/package-lock.json index d605f791d8..8d26503404 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,6 +67,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.0.0", + "fast-check": "^3.0.1", "grpc_tools_node_protoc_ts": "^5.1.3", "jest": "^28.1.1", "jest-junit": "^14.0.0", @@ -5646,6 +5647,22 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/fast-check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.0.1.tgz", + "integrity": "sha512-AriFDYpYVOBynpPZq/quxSLumFOo2hPB2H5Nz2vc1QlNfjOaA62zX8USNXcOY5nwKHEq7lZ84dG9M1W+LAND1g==", + "dev": true, + "dependencies": { + "pure-rand": "^5.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -9971,6 +9988,16 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.1.tgz", + "integrity": "sha512-ksWccjmXOHU2gJBnH0cK1lSYdvSZ0zLoCMSz/nTGh6hDvCSgcRxDyIcOBD6KNxFz3xhMPm/T267Tbe2JRymKEQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -15710,6 +15737,15 @@ "jest-util": "^28.1.1" } }, + "fast-check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.0.1.tgz", + "integrity": "sha512-AriFDYpYVOBynpPZq/quxSLumFOo2hPB2H5Nz2vc1QlNfjOaA62zX8USNXcOY5nwKHEq7lZ84dG9M1W+LAND1g==", + "dev": true, + "requires": { + "pure-rand": "^5.0.1" + } + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -18911,6 +18947,12 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "pure-rand": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.1.tgz", + "integrity": "sha512-ksWccjmXOHU2gJBnH0cK1lSYdvSZ0zLoCMSz/nTGh6hDvCSgcRxDyIcOBD6KNxFz3xhMPm/T267Tbe2JRymKEQ==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", diff --git a/package.json b/package.json index 53e5ef5830..e06208d080 100644 --- a/package.json +++ b/package.json @@ -111,8 +111,8 @@ "uuid": "^8.3.0" }, "devDependencies": { - "@swc/core": "^1.2.215", "@babel/preset-env": "^7.13.10", + "@swc/core": "^1.2.215", "@types/cross-spawn": "^6.0.2", "@types/google-protobuf": "^3.7.4", "@types/jest": "^28.1.3", @@ -130,6 +130,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.0.0", + "fast-check": "^3.0.1", "grpc_tools_node_protoc_ts": "^5.1.3", "jest": "^28.1.1", "jest-junit": "^14.0.0", diff --git a/src/queue/Queue.ts b/src/queue/Queue.ts new file mode 100644 index 0000000000..5435e51c96 --- /dev/null +++ b/src/queue/Queue.ts @@ -0,0 +1,26 @@ +// epic queue +// need to do a couple things: +// 1. integrate fast-check +// 2. integrate span checks +// 3. might also consider span logs? +// 4. open tracing observability +// 5. structured logging +// 6. async hooks to get traced promises to understand the situation +// 7. do we also get fantasy land promises? and async cancellable stuff? +// 8. task abstractions? +// need to use the db for this +// 9. priority structure +// 10. timers +// abort controller + +// timeout scheduling system is task scheduling +// queue is the persistent version of this +// in general you have a job scheduling problem +// but lighter weight + +class Queue { + + +} + +export default Queue; diff --git a/src/queue/index.ts b/src/queue/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/timer/Timer.ts b/src/timer/Timer.ts new file mode 100644 index 0000000000..da0f288303 --- /dev/null +++ b/src/timer/Timer.ts @@ -0,0 +1,7 @@ +class Timer { + + protected timer: ReturnType; + public readonly timerP: Promise; + protected _timedOut: boolean; + +}