Skip to content

Commit 4b4620e

Browse files
committed
@dr-js/core@0.3.0
notable change: - deprecated: `objectDeleteUndefined` from `common/immutable/Object` - deprecated: node: `requestAsync` from `node/net` - deprecated: node: `urlString` option in `createWebSocketClient` from `node/server/WebSocket/WebSocketClient` - break: sort `Async*` code: - use `AsyncFuncQueue` instead of `AsyncTaskQueue` (previous one) - use `AsyncLane` with `Async*Queue` support instead of `AsyncTaskLane` (previous one) - use `AsyncTaskQueue` instead of `AsyncTaskRunner` - use `AsyncTaskQueue + AsyncLane` instead of `AsyncTaskRunnerCluster` - break: use `prettyStringifyTreeNode` instead of `prettyStringifyTree` - break: node: mass code sort for `node/file/`: - drop `node/file/function`, use `fs` directly - default to `getPathLstat` so most symlink will be kept - sort `node/file/Directory`: - use `getDirInfoList` instead of `getDirectorySubInfoList` - use `getDirInfoTree` instead of `getDirectoryInfoTree` - use `walkDirInfoTreeAsync` instead of `walkDirectoryInfoTree` - use `walkDirInfoTreeBottomUpAsync` instead of `walkDirectoryInfoTreeBottomUp` - use `copyDirInfoTree` instead of `copyDirectoryInfoTree` - use `renameDirInfoTree` instead of `renameDirectoryInfoTree` - use `deleteDirInfoTree` instead of `deleteDirectoryInfoTree` - break: node: mass code sort in `node/data/Stream`: - use `readableStreamToBufferAsync` instead of `receiveBufferAsync` from `node/data/Buffer` - use `writeBufferToStreamAsync` instead of `sendBufferAsync` from `node/data/Buffer` - use `waitStreamStopAsync(setupStreamPipe( ... ))` instead of `pipeStreamAsync` - use `readlineOfStreamAsync` instead of `createReadlineFromStreamAsync` - break: node: use `getDefaultOpenCommandList` instead of `getDefaultOpen` - break: node: use `request.destroy()|request.destroyed` instead of `request.abort()|request.aborted` follow: nodejs/node#32807 - break: node: use `response.writableEnded` (need `nodejs@>=12.9`) - break: browser: use `onProgressUpload/onProgressDownload` instead of `onUploadProgress/onDownloadProgress` for `fetchLikeRequest` - fix: ci: git CRLF config & longer test timeout - fix: ci: patch `libgbm1` for `puppeteer@3`, check: puppeteer/puppeteer#5674 - fix: better handle WebSocket `doUpgradeSocket` error - fix: sanity test for `nodejs@14` - fix: flaky test `fetchLikeRequest() option: timeout` in `net.test.js` - fix: code lint for `eslint-config-almost-standard-v14` - add: `onProgressUpload/onProgressDownload` for both `fetchLikeRequest` - add: `AsyncTask` and `AsyncTaskQueue` - add: `catchPromise` to `common/error` - add: `.sanity.test` for some peace of mind - add: `typeNameOf` to `common/format` - add: tree-like structure support in `common/data/Tree` - add: node: support pass `ReadableStream` as `body` to `fetchLikeRequest` - add: node: `isReadableStream/isWritableStream` - add: node: `ResolveCommand` moved from `@dr-js/node` - add: node: TLS server session ticket rotation - add: browser: `browser/net.test.js` - add: bin: percent for mode `fetch` - ci: update `.gitignore` & `.github/workflows/ci-test.yml` - better `error.stack` for `withTimeoutPromise|withTimeoutAsync` - simplify `createInsideOutPromise` code - sort test file naming - package update notable change from `0.2.1-dev.*`: - add: `isRegExp|regexp` in `common/check|verify` - add: `createMarkReplacer` to `common/string` - add: node: `closeAsync|readAsync|writeAsync|readlinkAsync|symlinkAsync` to `node/file/function` - add: node: `resolvePath` to `createOptionGetter` in `node/module/Option/preset` - fix: node: leaked `error` event in `createReadlineFromStreamAsync` - node: update `buffer.readUInt*()` usage for removed `noAssert` since `nodejs@10` - node: sort `node/module/Option/preset` code - sort build script - package update
1 parent d3dcbd8 commit 4b4620e

8 files changed

Lines changed: 1209 additions & 1221 deletions

File tree

package-lock.json

Lines changed: 1195 additions & 1207 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"private": true,
33
"name": "@dr-js/core",
4-
"version": "0.3.0-dev.12",
4+
"version": "0.3.0",
55
"description": "A collection of strange functions",
66
"author": "dr-js",
77
"license": "MIT",
@@ -47,8 +47,8 @@
4747
"npm": ">=6.14"
4848
},
4949
"devDependencies": {
50-
"@dr-js/dev": "0.3.0-dev.10",
51-
"@dr-js/dev-web-puppeteer": "0.3.0-dev.10"
50+
"@dr-js/dev": "0.3.0-dev.11",
51+
"@dr-js/dev-web-puppeteer": "0.3.0-dev.11"
5252
},
5353
"sideEffects": false
5454
}

source/node/file/Path.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const deletePath = async (path, pathStat) => {
5858
: fsAsync.unlink(path) // resolve to nothing
5959
}
6060

61-
const nearestExistPath = async (path) => { // TODO: NOTE: may be file or directory
61+
const nearestExistPath = async (path) => { // TODO: NOTE: may be file instead of directory
6262
while (path && (Error === await fsAsync.access(path).catch(() => Error))) path = dirname(path)
6363
return path
6464
}
@@ -68,7 +68,7 @@ const REGEXP_PATH_SEP_WIN32 = /\\/g
6868

6969
const createPathPrefixLock = (rootPath) => {
7070
rootPath = resolve(rootPath)
71-
return (relativePath) => { // TODO: may silently drop path, should add fool-proof error/check
71+
return (relativePath) => { // TODO: will silently drop path when used like `ppl('img', 'a.png')`, should add fool-proof error/check?
7272
const absolutePath = resolve(rootPath, relativePath)
7373
if (!absolutePath.startsWith(rootPath)) throw new Error(`invalid relativePath: ${relativePath}`)
7474
return absolutePath

source/node/file/Path.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ describe('Node.File.Path', () => {
109109
strictEqual(getPathFromRoot('a/b/c'), expectedPath)
110110
strictEqual(getPathFromRoot('./a/b/c'), expectedPath)
111111
strictEqual(getPathFromRoot('a/d/../b/c'), expectedPath)
112-
doThrow(() => getPathFromRoot('..'), 'should throw Error for to much "../"')
113-
doThrow(() => getPathFromRoot('a/../../b'), 'should throw Error for to much "../"')
112+
doThrow(() => getPathFromRoot('..'), 'should throw Error for too much "../"')
113+
doThrow(() => getPathFromRoot('a/../../b'), 'should throw Error for too much "../"')
114114
}
115115

116116
const getPathFromRoot0 = createPathPrefixLock('/root/path/0/')

source/node/server/WebSocket/WebSocket.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ const CLOSED = 3 // The connection is closed or couldn't be opened.
3131
const createWebSocket = ({
3232
socket,
3333
frameLengthLimit = DEFAULT_FRAME_LENGTH_LIMIT,
34-
isMask = false,
35-
shouldPing = false // for server
34+
isMask = false, // default only for client to server, to prevent proxy mistaken binary data as http or other protocol
35+
shouldPing = false // default for server to start active ping
3636
}) => {
3737
const eventEmitter = createEventEmitter()
3838
const frameSenderStore = createFrameSenderStore(frameLengthLimit)

source/node/server/WebSocket/WebSocketClient.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const createWebSocketClient = ({
2828
} = {},
2929
onError,
3030
onUpgradeResponse = DEFAULT_ON_UPGRADE_RESPONSE,
31-
frameLengthLimit
31+
frameLengthLimit, isMask = true, shouldPing = false // by default, client do mask and do not ping
3232
}) => {
3333
url = url instanceof URL ? url : new URL(url)
3434
if (!VALID_WEBSOCKET_PROTOCOL_SET.has(url.protocol)) throw new Error(`invalid url protocol: ${url.protocol}`)
@@ -63,7 +63,7 @@ const createWebSocketClient = ({
6363
onError(new Error('unexpected response'))
6464
})
6565
request.on('upgrade', async (response, socket, bodyHeadBuffer) => {
66-
const webSocket = createWebSocket({ socket, frameLengthLimit, isMask: true })
66+
const webSocket = createWebSocket({ socket, frameLengthLimit, isMask, shouldPing })
6767

6868
webSocket.origin = origin
6969
webSocket.isSecure = isSecure

source/node/server/WebSocket/WebSocketServer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ const doUpgradeSocket = (webSocket, protocol, responseKey) => {
3838
const enableWebSocketServer = ({
3939
server,
4040
onUpgradeRequest = DEFAULT_ON_UPGRADE_REQUEST,
41-
frameLengthLimit
41+
frameLengthLimit, isMask = false, shouldPing = true // by default, server do not mask and do ping
4242
}) => {
4343
const webSocketSet = new Set()
4444

4545
server.on('upgrade', async (request, socket, bodyHeadBuffer) => {
46-
const webSocket = createWebSocket({ socket, frameLengthLimit, isMask: false, shouldPing: true })
46+
const webSocket = createWebSocket({ socket, frameLengthLimit, isMask, shouldPing })
4747
const { responseKey } = parseUpgradeRequest(webSocket, request)
4848
if (webSocket.isClosed()) return
4949

source/node/system/ResolveCommand.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const { describe, it, info = console.log } = global
99
describe('Node.Module.ResolveCommand', () => {
1010
const COMMAND_NAME_LIST = [
1111
// [ commandName, isExpectResult ]
12-
[ process.platform === 'win32' ? 'ipconfig' : 'ifconfig', true ],
12+
[ process.platform === 'win32' ? 'where' : 'which', true ],
1313
[ 'npm', true ],
1414
[ 'npx', true ],
1515
[ 'node', true ],

0 commit comments

Comments
 (0)