From 3ee0a1fb14606774db03f6a4c15430f685c8fc2b Mon Sep 17 00:00:00 2001 From: Colin Date: Fri, 16 Feb 2024 09:43:24 -0500 Subject: [PATCH] Make test and node prod setup the same --- products/jbrowse-img/package.json | 1 - products/jbrowse-img/src/index.test.ts | 22 ++----------- products/jbrowse-img/src/index.ts | 42 ++---------------------- products/jbrowse-img/src/setupEnv.ts | 44 ++++++++++++++++++++++++++ yarn.lock | 2 +- 5 files changed, 49 insertions(+), 62 deletions(-) create mode 100644 products/jbrowse-img/src/setupEnv.ts diff --git a/products/jbrowse-img/package.json b/products/jbrowse-img/package.json index 8c9c457fd3..efae874a38 100644 --- a/products/jbrowse-img/package.json +++ b/products/jbrowse-img/package.json @@ -30,7 +30,6 @@ "@emotion/react": "^11.9.0", "@jbrowse/plugin-linear-genome-view": "^2.10.1", "@jbrowse/react-linear-genome-view": "^2.10.1", - "abortcontroller-polyfill": "^1.7.3", "canvas": "^2.9.1", "jsdom": "^24.0.0", "mobx": "^6.6.0", diff --git a/products/jbrowse-img/src/index.test.ts b/products/jbrowse-img/src/index.test.ts index 243b5415b7..2acf80a9dc 100644 --- a/products/jbrowse-img/src/index.test.ts +++ b/products/jbrowse-img/src/index.test.ts @@ -1,4 +1,3 @@ -/* eslint-disable tsdoc/syntax */ /** * @jest-environment node */ @@ -9,26 +8,9 @@ import { renderRegion } from './renderRegion' import path from 'path' import fs from 'fs' -import { JSDOM } from 'jsdom' -import { Image, createCanvas } from 'canvas' -import fetch, { Headers, Response, Request } from 'node-fetch' +import setupEnv from './setupEnv' -// @ts-expect-error -global.fetch = fetch -// @ts-expect-error -global.Headers = Headers -// @ts-expect-error -global.Response = Response -// @ts-expect-error -global.Request = Request - -const { document } = new JSDOM(`...`).window -global.document = document - -// @ts-expect-error -global.nodeImage = Image -// @ts-expect-error -global.nodeCreateCanvas = createCanvas +setupEnv() function pa(s: string) { return path.join(__dirname, s) diff --git a/products/jbrowse-img/src/index.ts b/products/jbrowse-img/src/index.ts index 09d392d6e7..4133345445 100644 --- a/products/jbrowse-img/src/index.ts +++ b/products/jbrowse-img/src/index.ts @@ -1,51 +1,13 @@ import fs from 'fs' import yargs from 'yargs' -import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only' -import fetch, { Headers, Response, Request } from 'node-fetch' -import { JSDOM } from 'jsdom' -import { Image, createCanvas } from 'canvas' // locals import { standardizeArgv, parseArgv } from './parseArgv' import { renderRegion, Opts } from './renderRegion' import { convert } from './util' +import setupEnv from './setupEnv' -// @ts-expect-error -global.nodeImage = Image -// @ts-expect-error -global.nodeCreateCanvas = createCanvas - -const { document } = new JSDOM(`...`).window -global.document = document - -// force use of node-fetch polyfill, even if node 18+ fetch is available. -// native node 18+ fetch currently gives errors related to unidici and -// Uint8Array: -// -// -// % node --version -// v18.12.1 -// -// % jb2export --fasta https://jbrowse.org/code/jb2/main/test_data/volvox/volvox.fa --bam https://jbrowse.org/code/jb2/main/test_data/volvox/volvox-sorted.bam --loc ctgA:1-1000 --out out4.svg -// [ -// '(node:1387934) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time\n' + -// '(Use `node --trace-warnings ...` to show where the warning was created)' -// ] -// [ -// RangeError: offset is out of bounds -// at Uint8Array.set () -// at Response.arrayBuffer (node:internal/deps/undici/undici:6117:23) -// at process.processTicksAndRejections (node:internal/process/task_queues:95:5) -// ] - -// @ts-expect-error -global.fetch = fetch -// @ts-expect-error -global.Headers = Headers -// @ts-expect-error -global.Response = Response -// @ts-expect-error -global.Request = Request +setupEnv() const err = console.error console.error = (...p: unknown[]) => { diff --git a/products/jbrowse-img/src/setupEnv.ts b/products/jbrowse-img/src/setupEnv.ts new file mode 100644 index 0000000000..98bf8a024e --- /dev/null +++ b/products/jbrowse-img/src/setupEnv.ts @@ -0,0 +1,44 @@ +import fetch, { Headers, Response, Request } from 'node-fetch' +import { JSDOM } from 'jsdom' +import { Image, createCanvas } from 'canvas' + +export default function setupEnv() { + // @ts-expect-error + global.nodeImage = Image + // @ts-expect-error + global.nodeCreateCanvas = createCanvas + + const window = new JSDOM(`...`).window + global.document = window.document + // @ts-expect-error + global.window = window + + // force use of node-fetch polyfill, even if node 18+ fetch is available. + // native node 18+ fetch currently gives errors related to unidici and + // Uint8Array: + // + // + // % node --version + // v18.12.1 + // + // % jb2export --fasta https://jbrowse.org/code/jb2/main/test_data/volvox/volvox.fa --bam https://jbrowse.org/code/jb2/main/test_data/volvox/volvox-sorted.bam --loc ctgA:1-1000 --out out4.svg + // [ + // '(node:1387934) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time\n' + + // '(Use `node --trace-warnings ...` to show where the warning was created)' + // ] + // [ + // RangeError: offset is out of bounds + // at Uint8Array.set () + // at Response.arrayBuffer (node:internal/deps/undici/undici:6117:23) + // at process.processTicksAndRejections (node:internal/process/task_queues:95:5) + // ] + + // @ts-expect-error + global.fetch = fetch + // @ts-expect-error + global.Headers = Headers + // @ts-expect-error + global.Response = Response + // @ts-expect-error + global.Request = Request +} diff --git a/yarn.lock b/yarn.lock index d8d325cb57..c4e199592c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6329,7 +6329,7 @@ abortable-promise-cache@^1.0.1, abortable-promise-cache@^1.2.0, abortable-promis dependencies: abortcontroller-polyfill "^1.2.9" -abortcontroller-polyfill@^1.2.9, abortcontroller-polyfill@^1.7.3: +abortcontroller-polyfill@^1.2.9: version "1.7.5" resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==