From b774a59db23ddccaa3c54d2cb785bf9ba6a1cc46 Mon Sep 17 00:00:00 2001 From: Hari Narayanan Date: Tue, 1 Dec 2020 21:21:13 +0530 Subject: [PATCH] Web Worker regex test (#1354) Co-authored-by: Liyas Thomas --- Dockerfile | 3 +- assets/js/regex.worker.js | 31 ++++++++++++++++++ components/realtime/mqtt.vue | 25 +++++++++++++-- components/realtime/socketio.vue | 25 +++++++++++++-- components/realtime/sse.vue | 25 +++++++++++++-- components/realtime/websocket.vue | 25 +++++++++++++-- nuxt.config.js | 14 ++++++++- package-lock.json | 52 +++++++++++++++++++++++++++++++ package.json | 3 +- plugins/web-worker.js | 9 ++++++ 10 files changed, 201 insertions(+), 11 deletions(-) create mode 100644 assets/js/regex.worker.js create mode 100644 plugins/web-worker.js diff --git a/Dockerfile b/Dockerfile index ab4f293f..4443e3f6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,12 +8,13 @@ RUN apk add --update --no-cache \ # Create app directory WORKDIR /app -ADD . /app/ COPY package*.json ./ RUN npm install +ADD . /app/ + COPY . . RUN npm run generate diff --git a/assets/js/regex.worker.js b/assets/js/regex.worker.js new file mode 100644 index 00000000..c6f69036 --- /dev/null +++ b/assets/js/regex.worker.js @@ -0,0 +1,31 @@ +function generateREForProtocol(protocol) { + return [ + new RegExp( + `${protocol}(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$` + ), + new RegExp( + `${protocol}(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9/])$` + ), + ] +} + +const ws = generateREForProtocol("^(wss?:\\/\\/)?") +const sse = generateREForProtocol("^(https?:\\/\\/)?") +const socketio = generateREForProtocol("^((wss?:\\/\\/)|(https?:\\/\\/))?") +const regex = { ws, sse, socketio } + +// type = ws/sse/socketio +async function validator(type, url) { + console.time("validator " + url) + const [res1, res2] = await Promise.all([regex[type][0].test(url), regex[type][1].test(url)]) + console.timeEnd("validator " + url) + return res1 || res2 +} + +onmessage = async function (event) { + var { type, url } = event.data + + const result = await validator(type, url) + + postMessage({ type, url, result }) +} diff --git a/components/realtime/mqtt.vue b/components/realtime/mqtt.vue index 6303cd1e..dfd14ae6 100644 --- a/components/realtime/mqtt.vue +++ b/components/realtime/mqtt.vue @@ -70,12 +70,13 @@