From 0519b1bd82c5660e6b9f487438f5b9711874bffe Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Mon, 31 Jul 2023 16:21:40 -0500 Subject: [PATCH 1/9] feat: integrate queues for honeycomb tracing --- src/config.ts | 2 ++ src/logging.ts | 10 ++++++++++ src/modules.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/queues.d.ts | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 src/queues.d.ts diff --git a/src/config.ts b/src/config.ts index 68006e7..2d966e1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -46,6 +46,7 @@ export type ResolvedConfig = { serviceName: string sendTraceContext: boolean | RegExp debugLog: boolean + queueUrl: string } export type Config = Partial @@ -61,6 +62,7 @@ const configDefaults: ResolvedConfig = { sendTraceContext: false, serviceName: 'worker', debugLog: false, + queueUrl: '', } function resolve(cfg: Config): ResolvedConfig { diff --git a/src/logging.ts b/src/logging.ts index 1054050..b7d0bbf 100644 --- a/src/logging.ts +++ b/src/logging.ts @@ -213,6 +213,16 @@ export class RequestTracer extends Span { this.finish() } + public finishQueueResponse(response?: QueueHanderResult, error?: Error) { + if (response) { + this.addData({ queueResponse: response.data }) + } else if (error) { + this.addData({ exception: true, responseException: error.toString() }) + if (error.stack) this.addData({ stacktrace: error.stack }) + } + this.finish() + } + public setSampleRate(sampleRate: number) { this.sampleRate = sampleRate } diff --git a/src/modules.ts b/src/modules.ts index 19c7d0b..d98a18a 100644 --- a/src/modules.ts +++ b/src/modules.ts @@ -35,6 +35,7 @@ import { RequestTracer } from './logging' export interface HoneycombEnv { HONEYCOMB_API_KEY?: string HONEYCOMB_DATASET?: string + QUEUE_URL?: string } function cacheTraceId(trace_id: string): void { @@ -200,6 +201,50 @@ function workerProxy(config: ResolvedConfig, mod: ExportedHandler): Export } }, }), + queue: new Proxy(mod.queue!, { + apply: (target, thisArg, argArray): Promise => { + const env = argArray[1] as HoneycombEnv + const request = new Request(env.QUEUE_URL || config.queueUrl) + + const tracer = new RequestTracer(request, config) + + request.tracer = tracer + argArray[3] = tracer + argArray[1] = proxyEnv(env, tracer) + config.apiKey = env.HONEYCOMB_API_KEY || config.apiKey + + if (!config.apiKey || !config.dataset) { + console.error( + new Error('Need both HONEYCOMB_API_KEY and HONEYCOMB_DATASET to be configured. Skipping trace.'), + ) + return Reflect.apply(target, thisArg, argArray) + } + + const ctx = argArray[2] as ExecutionContext + + // TODO: proxy ctx.waitUntil + + try { + const result: any = Reflect.apply(target, thisArg, argArray) + + result.then((response: QueueHanderResult) => { + tracer.finishQueueResponse(response) + ctx.waitUntil(tracer.sendEvents()) + return response + }) + result.catch((err: Error) => { + tracer.finishQueueResponse(undefined, err) + ctx.waitUntil(tracer.sendEvents()) + throw err + }) + return result + } catch (err) { + tracer.finishQueueResponse(undefined, err as Error) + ctx.waitUntil(tracer.sendEvents()) + throw err + } + }, + }), } } diff --git a/src/queues.d.ts b/src/queues.d.ts new file mode 100644 index 0000000..f7639a8 --- /dev/null +++ b/src/queues.d.ts @@ -0,0 +1,48 @@ +// -------- QUEUES INTERFACES -------- + +// This interfaces are referenced from +// https://developers.cloudflare.com/queues/platform/javascript-apis/ + +interface MessageBatch { + readonly queue: string + readonly messages: Message[] + ackAll(): void + retryAll(): void +} + +interface Queue { + send(body: Body): Promise + sendBatch(messages: Iterable>): Promise +} + +interface Message { + readonly id: string + readonly timestamp: Date + readonly body: Body + ack(): void + retry(): void +} + +type MessageSendRequest = { + body: Body +} + +// -------- QUEUES INTERFACES -------- + +interface QueueHanderResult { + success: boolean + data: any +} + +declare type ExportedHandlerQueueHandler = ( + request: MessageBatch, + env: Env, + ctx: ExecutionContext, + span: any, +) => QueueHanderResult + +interface ExportedHandler { + fetch?: ExportedHandlerFetchHandler + scheduled?: ExportedHandlerScheduledHandler + queue?: ExportedHandlerQueueHandler +} From b4f994f2f9dd585a82123d066816707abe21930d Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Mon, 31 Jul 2023 16:41:49 -0500 Subject: [PATCH 2/9] feat: example --- run/queue-consumer-worker/package.json | 23 + run/queue-consumer-worker/rollup.config.js | 25 + run/queue-consumer-worker/src/index.mTs | 62 ++ run/queue-consumer-worker/wrangler.toml | 14 + run/queue-consumer-worker/yarn.lock | 674 +++++++++++++++++++++ src/modules.ts | 49 ++ 6 files changed, 847 insertions(+) create mode 100644 run/queue-consumer-worker/package.json create mode 100644 run/queue-consumer-worker/rollup.config.js create mode 100644 run/queue-consumer-worker/src/index.mTs create mode 100644 run/queue-consumer-worker/wrangler.toml create mode 100644 run/queue-consumer-worker/yarn.lock diff --git a/run/queue-consumer-worker/package.json b/run/queue-consumer-worker/package.json new file mode 100644 index 0000000..1117652 --- /dev/null +++ b/run/queue-consumer-worker/package.json @@ -0,0 +1,23 @@ +{ + "private": true, + "name": "module-worker", + "version": "1.0.0", + "description": "A template for kick starting a Cloudflare Workers project", + "module": "./dist/index.mjs", + "scripts": { + "build": "rollup -c", + "test": "echo \"Error: no test specified\" && exit 1", + "format": "prettier --write '**/*.{js,css,json,md}'" + }, + "author": "{{ authors }}", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.1.0", + "@rollup/plugin-replace": "^2.4.2", + "prettier": "^1.19.1", + "rollup": "^2.36.1", + "rollup-plugin-copy": "^3.3.0", + "rollup-plugin-terser": "^7.0.2" + } +} diff --git a/run/queue-consumer-worker/rollup.config.js b/run/queue-consumer-worker/rollup.config.js new file mode 100644 index 0000000..9d01e93 --- /dev/null +++ b/run/queue-consumer-worker/rollup.config.js @@ -0,0 +1,25 @@ +// plugin-node-resolve and plugin-commonjs are required for a rollup bundled project +// to resolve dependencies from node_modules. See the documentation for these plugins +// for more details. +import dotenv from 'dotenv' +import { nodeResolve } from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' +import replace from '@rollup/plugin-replace' + +dotenv.config() + +const replace_plugin = replace({ + __HONEYCOMB_API_KEY__: process.env.HONEYCOMB_API_KEY, + preventAssignment: true, +}) + +export default { + input: 'src/index.mjs', + output: { + exports: 'named', + format: 'es', + file: 'dist/index.mjs', + sourcemap: true, + }, + plugins: [commonjs(), nodeResolve({ browser: true }), replace_plugin], +} diff --git a/run/queue-consumer-worker/src/index.mTs b/run/queue-consumer-worker/src/index.mTs new file mode 100644 index 0000000..cefa021 --- /dev/null +++ b/run/queue-consumer-worker/src/index.mTs @@ -0,0 +1,62 @@ +/** BSD 3-Clause License + +Copyright (c) 2021, Cloudflare Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +import { wrapModule } from '../../../dist/index' + +import { QueueHanderResult, MessageBatch } from '../../../dist/index' +import { Span } from '../../../dist/index' + +const worker = { + async queue(request: MessageBatch, env, ctx, span: Span): Promise { + + const result = await span.fetch('https://cloudflare.com') + return { + success: true, + data: result.json(), + } + }, +} + +const sampleQueue = (data: QueueHanderResult) => { + if (!data.success) { + return 1; + } + return 10 +} + +const config = { + apiKey: '__HONEYCOMB_API_KEY__', + dataset: 'my-first-dataset', + queueUrl: '', + sampleRates: sampleQueue +} + +export default wrapModule(config, worker) diff --git a/run/queue-consumer-worker/wrangler.toml b/run/queue-consumer-worker/wrangler.toml new file mode 100644 index 0000000..d8afe84 --- /dev/null +++ b/run/queue-consumer-worker/wrangler.toml @@ -0,0 +1,14 @@ +name = "module-worker" +# type = "javascript" is required to use the `[build]` section +type = "javascript" +account_id = "03bac747018bef5f4ad236a15c22c360" +workers_dev = true +route = "" +zone_id = "" + +[build] +command = "yarn install && yarn build" +[build.upload] +# The "modules" upload format is required for all projects that export a Durable Objects class +format = "modules" +main = "./index.mts" diff --git a/run/queue-consumer-worker/yarn.lock b/run/queue-consumer-worker/yarn.lock new file mode 100644 index 0000000..446e471 --- /dev/null +++ b/run/queue-consumer-worker/yarn.lock @@ -0,0 +1,674 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.10.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@rollup/plugin-commonjs@^17.0.0": + version "17.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz#757ec88737dffa8aa913eb392fade2e45aef2a2d" + integrity sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-node-resolve@^11.1.0": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.2": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@types/estree@*": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/fs-extra@^8.0.1": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.2.tgz#7125cc2e4bdd9bd2fc83005ffdb1d0ba00cca61f" + integrity sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@*": + version "17.0.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.14.tgz#33b9b94f789a8fedd30a68efdbca4dbb06b61f20" + integrity sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +acorn@^8.5.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colorette@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fast-glob@^3.0.3: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3, glob@^7.1.6: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globby@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" + integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +ignore@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-glob@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" + integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== + +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.2.2, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +resolve@^1.17.0, resolve@^1.19.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rollup-plugin-copy@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz#f1228a3ffb66ffad8606e2f3fb7ff23141ed3286" + integrity sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ== + dependencies: + "@types/fs-extra" "^8.0.1" + colorette "^1.1.0" + fs-extra "^8.1.0" + globby "10.0.1" + is-plain-object "^3.0.0" + +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup@^2.36.1: + version "2.67.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.67.0.tgz#496de7e641dbe39f681c5a82419cb5013917d406" + integrity sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +terser@^5.0.0: + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= diff --git a/src/modules.ts b/src/modules.ts index d98a18a..4e7402d 100644 --- a/src/modules.ts +++ b/src/modules.ts @@ -29,6 +29,55 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +// -------- QUEUES INTERFACES -------- + +// This interfaces are referenced from +// https://developers.cloudflare.com/queues/platform/javascript-apis/ + +export interface MessageBatch { + readonly queue: string + readonly messages: Message[] + ackAll(): void + retryAll(): void +} + +export interface Queue { + send(body: Body): Promise + sendBatch(messages: Iterable>): Promise +} + +export interface Message { + readonly id: string + readonly timestamp: Date + readonly body: Body + ack(): void + retry(): void +} + +export type MessageSendRequest = { + body: Body +} + +// -------- QUEUES INTERFACES -------- + +export interface QueueHanderResult { + success: boolean + data: any +} + +declare type ExportedHandlerQueueHandler = ( + request: MessageBatch, + env: Env, + ctx: ExecutionContext, + span: any, +) => QueueHanderResult | Promise + +export interface ExportedHandler { + fetch?: ExportedHandlerFetchHandler + scheduled?: ExportedHandlerScheduledHandler + queue?: ExportedHandlerQueueHandler +} + import { Config, resolve, ResolvedConfig } from './config' import { RequestTracer } from './logging' From 9646c66d6cd7dd04a807ea9be5c146f63a73def5 Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Mon, 31 Jul 2023 17:04:59 -0500 Subject: [PATCH 3/9] fix: comments --- run/queue-consumer-worker/src/index.mTs | 6 ++-- src/logging.ts | 4 ++- src/modules.ts | 16 ++++----- src/queues.d.ts | 48 ------------------------- 4 files changed, 14 insertions(+), 60 deletions(-) delete mode 100644 src/queues.d.ts diff --git a/run/queue-consumer-worker/src/index.mTs b/run/queue-consumer-worker/src/index.mTs index cefa021..1f02226 100644 --- a/run/queue-consumer-worker/src/index.mTs +++ b/run/queue-consumer-worker/src/index.mTs @@ -35,17 +35,17 @@ import { QueueHanderResult, MessageBatch } from '../../../dist/index' import { Span } from '../../../dist/index' const worker = { - async queue(request: MessageBatch, env, ctx, span: Span): Promise { + async queue(request: MessageBatch, env, ctx, span: Span): Promise> { const result = await span.fetch('https://cloudflare.com') return { success: true, - data: result.json(), + data: result.ok, } }, } -const sampleQueue = (data: QueueHanderResult) => { +const sampleQueue = (data: QueueHanderResult) => { if (!data.success) { return 1; } diff --git a/src/logging.ts b/src/logging.ts index b7d0bbf..ff43e0d 100644 --- a/src/logging.ts +++ b/src/logging.ts @@ -32,6 +32,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import { HttpStatusBuckets, ResolvedConfig } from './config' import { TraceContext } from './tracecontext' +import { QueueHanderResult } from './modules' + declare global { interface FetchEvent { waitUntilTracer: Span @@ -213,7 +215,7 @@ export class RequestTracer extends Span { this.finish() } - public finishQueueResponse(response?: QueueHanderResult, error?: Error) { + public finishQueueResponse(response?: QueueHanderResult, error?: Error) { if (response) { this.addData({ queueResponse: response.data }) } else if (error) { diff --git a/src/modules.ts b/src/modules.ts index 4e7402d..6ca7d44 100644 --- a/src/modules.ts +++ b/src/modules.ts @@ -33,7 +33,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This interfaces are referenced from // https://developers.cloudflare.com/queues/platform/javascript-apis/ - +import { Span } from './logging' export interface MessageBatch { readonly queue: string readonly messages: Message[] @@ -60,17 +60,17 @@ export type MessageSendRequest = { // -------- QUEUES INTERFACES -------- -export interface QueueHanderResult { +export interface QueueHanderResult { success: boolean - data: any + data: T } -declare type ExportedHandlerQueueHandler = ( +declare type ExportedHandlerQueueHandler = ( request: MessageBatch, env: Env, ctx: ExecutionContext, - span: any, -) => QueueHanderResult | Promise + span: Span, +) => QueueHanderResult | Promise> export interface ExportedHandler { fetch?: ExportedHandlerFetchHandler @@ -192,7 +192,7 @@ function proxyEnv(env: any, tracer: RequestTracer): any { }) } -function workerProxy(config: ResolvedConfig, mod: ExportedHandler): ExportedHandler { +function workerProxy(config: ResolvedConfig, mod: ExportedHandler): ExportedHandler { return { fetch: new Proxy(mod.fetch!, { apply: (target, thisArg, argArray): Promise => { @@ -276,7 +276,7 @@ function workerProxy(config: ResolvedConfig, mod: ExportedHandler): Export try { const result: any = Reflect.apply(target, thisArg, argArray) - result.then((response: QueueHanderResult) => { + result.then((response: QueueHanderResult) => { tracer.finishQueueResponse(response) ctx.waitUntil(tracer.sendEvents()) return response diff --git a/src/queues.d.ts b/src/queues.d.ts deleted file mode 100644 index f7639a8..0000000 --- a/src/queues.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -// -------- QUEUES INTERFACES -------- - -// This interfaces are referenced from -// https://developers.cloudflare.com/queues/platform/javascript-apis/ - -interface MessageBatch { - readonly queue: string - readonly messages: Message[] - ackAll(): void - retryAll(): void -} - -interface Queue { - send(body: Body): Promise - sendBatch(messages: Iterable>): Promise -} - -interface Message { - readonly id: string - readonly timestamp: Date - readonly body: Body - ack(): void - retry(): void -} - -type MessageSendRequest = { - body: Body -} - -// -------- QUEUES INTERFACES -------- - -interface QueueHanderResult { - success: boolean - data: any -} - -declare type ExportedHandlerQueueHandler = ( - request: MessageBatch, - env: Env, - ctx: ExecutionContext, - span: any, -) => QueueHanderResult - -interface ExportedHandler { - fetch?: ExportedHandlerFetchHandler - scheduled?: ExportedHandlerScheduledHandler - queue?: ExportedHandlerQueueHandler -} From 928d09cf0d479b71e59537b864dfbeccecc45497 Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Mon, 31 Jul 2023 17:08:14 -0500 Subject: [PATCH 4/9] fix: logic --- src/logging.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/logging.ts b/src/logging.ts index ff43e0d..96d994e 100644 --- a/src/logging.ts +++ b/src/logging.ts @@ -218,7 +218,8 @@ export class RequestTracer extends Span { public finishQueueResponse(response?: QueueHanderResult, error?: Error) { if (response) { this.addData({ queueResponse: response.data }) - } else if (error) { + } + if (error) { this.addData({ exception: true, responseException: error.toString() }) if (error.stack) this.addData({ stacktrace: error.stack }) } From 175cfa3f1299969da02b20eed410bb3b153f4612 Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Tue, 1 Aug 2023 14:34:37 -0500 Subject: [PATCH 5/9] feat: release files --- .github/actions/common-setup/action.yml | 43 ++++++++++ .../common-setup/workflows/release.yml | 83 +++++++++++++++++++ run/queue-consumer-worker/src/index.mTs | 4 +- src/.releaserc | 17 ++++ src/modules.ts | 30 +------ src/queues.ts | 29 +++++++ 6 files changed, 176 insertions(+), 30 deletions(-) create mode 100644 .github/actions/common-setup/action.yml create mode 100644 .github/actions/common-setup/workflows/release.yml create mode 100644 src/.releaserc create mode 100644 src/queues.ts diff --git a/.github/actions/common-setup/action.yml b/.github/actions/common-setup/action.yml new file mode 100644 index 0000000..8d2fa2e --- /dev/null +++ b/.github/actions/common-setup/action.yml @@ -0,0 +1,43 @@ +name: Common setup for JS +description: Configure tools every job in JS projects, node version, code artifact and dependency installation +branding: + icon: "cloud" + color: "green" +inputs: + aws-access-key-id: + description: Key to connect with AWS + required: true + type: string + aws-secret-access-key: + description: Secret key to connect with AWS + required: true + type: string + aws-region: + description: Region AWS + required: true + type: string + aws-domain: + description: AWS domain + required: true + type: string +runs: + using: "composite" + steps: + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + aws-access-key-id: ${{ inputs.aws-access-key-id }} + aws-secret-access-key: ${{ inputs.aws-secret-access-key }} + aws-region: ${{ inputs.aws-region }} + - name: Configure CodeArtifact + run: aws codeartifact login --tool npm --repository npm-store --domain ${{ inputs.aws-domain }} --domain-owner 115365964428 --namespace @platzi + shell: bash + - name: Configure yarn with CodeArtifact + run: echo always-auth=true >> ~/.npmrc + shell: bash + - name: Install dependencies + uses: bahmutov/npm-install@v1 \ No newline at end of file diff --git a/.github/actions/common-setup/workflows/release.yml b/.github/actions/common-setup/workflows/release.yml new file mode 100644 index 0000000..ee8e820 --- /dev/null +++ b/.github/actions/common-setup/workflows/release.yml @@ -0,0 +1,83 @@ +name: platzi/testing library +on: + pull_request: + branches: + - "[0-9]+.x" + - "master" + - "next" + - "beta" + - "alpha" + - "infra" + push: + paths: + - "!packages/testing/**/*.md" + - "packages/testing/**" + branches: + - "[0-9]+.x" + - "master" + - "next" + - "beta" + - "alpha" + - "infra" +jobs: + common: + runs-on: ubuntu-latest + defaults: + run: + shell: bash + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Setup action + uses: ./.github/actions/common-setup + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + aws-domain: ${{ secrets.SR_CA_DOMAIN }} + release: + needs: common + runs-on: ubuntu-latest + if: ${{ github.event_name == 'push' }} + defaults: + run: + shell: bash + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Setup action + uses: ./.github/actions/common-setup + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + aws-domain: ${{ secrets.SR_CA_DOMAIN }} + - name: Build + run: yarn build --filter=@platzi/honeycomb-workers + - name: Release + uses: cycjimmy/semantic-release-action@v3 + with: + semantic_version: 19.0.3 + branches: | + [ + '+([0-9])?(.{+([0-9]),x}).x', + 'master', + 'next', + {name: 'beta', prerelease: true}, + {name: 'alpha', prerelease: true}, + {name: 'infra', prerelease: true} + ] + extends: | + semantic-release-monorepo@7.0.5 + extra_plugins: | + @semantic-release/changelog@6.0.0 + @semantic-release/git@^10.0.0 + working_directory: ./packages/testing + tag_format: platzi-testing-${version} + env: + GITHUB_TOKEN: ${{ secrets.GB_ACCESS_TOKEN }} + GH_TOKEN: ${{ secrets.GB_ACCESS_TOKEN }} \ No newline at end of file diff --git a/run/queue-consumer-worker/src/index.mTs b/run/queue-consumer-worker/src/index.mTs index 1f02226..a532472 100644 --- a/run/queue-consumer-worker/src/index.mTs +++ b/run/queue-consumer-worker/src/index.mTs @@ -31,7 +31,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import { wrapModule } from '../../../dist/index' -import { QueueHanderResult, MessageBatch } from '../../../dist/index' +import { QueueHanderResult } from '../../../dist/index' +import { MessageBatch } from '../../../dist/queues' + import { Span } from '../../../dist/index' const worker = { diff --git a/src/.releaserc b/src/.releaserc new file mode 100644 index 0000000..f3345aa --- /dev/null +++ b/src/.releaserc @@ -0,0 +1,17 @@ +{ + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/changelog", + "@semantic-release/npm", + [ + "@semantic-release/git", + { + "assets": [ + "CHANGELOG.md" + ] + } + ], + "@semantic-release/github" + ] +} diff --git a/src/modules.ts b/src/modules.ts index 6ca7d44..2feb314 100644 --- a/src/modules.ts +++ b/src/modules.ts @@ -29,36 +29,8 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -// -------- QUEUES INTERFACES -------- - -// This interfaces are referenced from -// https://developers.cloudflare.com/queues/platform/javascript-apis/ import { Span } from './logging' -export interface MessageBatch { - readonly queue: string - readonly messages: Message[] - ackAll(): void - retryAll(): void -} - -export interface Queue { - send(body: Body): Promise - sendBatch(messages: Iterable>): Promise -} - -export interface Message { - readonly id: string - readonly timestamp: Date - readonly body: Body - ack(): void - retry(): void -} - -export type MessageSendRequest = { - body: Body -} - -// -------- QUEUES INTERFACES -------- +import { MessageBatch } from './queues' export interface QueueHanderResult { success: boolean diff --git a/src/queues.ts b/src/queues.ts new file mode 100644 index 0000000..7c0d3c3 --- /dev/null +++ b/src/queues.ts @@ -0,0 +1,29 @@ +// -------- QUEUES INTERFACES -------- + +// This interfaces are referenced from +// https://developers.cloudflare.com/queues/platform/javascript-apis/ +export interface MessageBatch { + readonly queue: string + readonly messages: Message[] + ackAll(): void + retryAll(): void +} + +export interface Queue { + send(body: Body): Promise + sendBatch(messages: Iterable>): Promise +} + +export interface Message { + readonly id: string + readonly timestamp: Date + readonly body: Body + ack(): void + retry(): void +} + +type MessageSendRequest = { + body: Body +} + +// -------- QUEUES INTERFACES -------- From cd2f728fa45f1b78eaf4eb5323ccd07d8291fc9c Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Tue, 1 Aug 2023 14:38:47 -0500 Subject: [PATCH 6/9] chore: empty commit --- run/queue-consumer-worker/src/index.mTs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/run/queue-consumer-worker/src/index.mTs b/run/queue-consumer-worker/src/index.mTs index a532472..31d00d0 100644 --- a/run/queue-consumer-worker/src/index.mTs +++ b/run/queue-consumer-worker/src/index.mTs @@ -54,6 +54,8 @@ const sampleQueue = (data: QueueHanderResult) => { return 10 } + + const config = { apiKey: '__HONEYCOMB_API_KEY__', dataset: 'my-first-dataset', From 4abcd75eda96ae2402fabdf46c4e84032b3593a6 Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Tue, 1 Aug 2023 15:31:18 -0500 Subject: [PATCH 7/9] fix: file location --- .github/{actions/common-setup => }/workflows/release.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{actions/common-setup => }/workflows/release.yml (100%) diff --git a/.github/actions/common-setup/workflows/release.yml b/.github/workflows/release.yml similarity index 100% rename from .github/actions/common-setup/workflows/release.yml rename to .github/workflows/release.yml From bb69c60740b8e7422e976256d6b60ec554f141fa Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Tue, 1 Aug 2023 15:32:25 -0500 Subject: [PATCH 8/9] fix: workflow name --- .github/workflows/release.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ee8e820..fb3eb2d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,24 +1,24 @@ -name: platzi/testing library +name: platzi/Honeycomb library on: pull_request: branches: - - "[0-9]+.x" - - "master" - - "next" - - "beta" - - "alpha" - - "infra" + - '[0-9]+.x' + - 'master' + - 'next' + - 'beta' + - 'alpha' + - 'infra' push: paths: - - "!packages/testing/**/*.md" - - "packages/testing/**" + - '!packages/testing/**/*.md' + - 'packages/testing/**' branches: - - "[0-9]+.x" - - "master" - - "next" - - "beta" - - "alpha" - - "infra" + - '[0-9]+.x' + - 'master' + - 'next' + - 'beta' + - 'alpha' + - 'infra' jobs: common: runs-on: ubuntu-latest @@ -80,4 +80,4 @@ jobs: tag_format: platzi-testing-${version} env: GITHUB_TOKEN: ${{ secrets.GB_ACCESS_TOKEN }} - GH_TOKEN: ${{ secrets.GB_ACCESS_TOKEN }} \ No newline at end of file + GH_TOKEN: ${{ secrets.GB_ACCESS_TOKEN }} From 2c34a113fbc1fe9b18de4a711eb7e29e38ccfe29 Mon Sep 17 00:00:00 2001 From: Eduardo Alvarez Date: Tue, 1 Aug 2023 15:32:54 -0500 Subject: [PATCH 9/9] fix: remove useless commands --- .github/workflows/release.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fb3eb2d..8cb507b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,9 +9,6 @@ on: - 'alpha' - 'infra' push: - paths: - - '!packages/testing/**/*.md' - - 'packages/testing/**' branches: - '[0-9]+.x' - 'master'