From d34dec859b466c038053bc19f392c7cc5352c85f Mon Sep 17 00:00:00 2001 From: Drew Powers Date: Fri, 10 Sep 2021 18:36:16 -0600 Subject: [PATCH] More test improvements --- packages/astro/.gitignore | 1 + packages/astro/jest.config.js | 6 + packages/astro/jest.setup.js | 10 ++ packages/astro/jest.teardown.js | 8 + packages/astro/package.json | 5 +- .../astro/test/astro-component-code.test.js | 144 +++++++-------- .../astro/test/astro-get-static-paths.test.js | 2 +- .../astro/test/builtins-polyfillnode.test.js | 2 + packages/astro/test/test-utils.js | 32 +++- yarn.lock | 164 ++++++++++++++++-- 10 files changed, 280 insertions(+), 94 deletions(-) create mode 100644 packages/astro/.gitignore create mode 100644 packages/astro/jest.config.js create mode 100644 packages/astro/jest.setup.js create mode 100644 packages/astro/jest.teardown.js diff --git a/packages/astro/.gitignore b/packages/astro/.gitignore new file mode 100644 index 000000000..ec224ca77 --- /dev/null +++ b/packages/astro/.gitignore @@ -0,0 +1 @@ +test/test-state.sqlite diff --git a/packages/astro/jest.config.js b/packages/astro/jest.config.js new file mode 100644 index 000000000..d2bf86759 --- /dev/null +++ b/packages/astro/jest.config.js @@ -0,0 +1,6 @@ +/** @type {import('@jest/types').Config.InitialOptions} */ +const config = { + globalSetup: './jest.setup.js', + globalTeardown: './jest.teardown.js', +}; +export default config; diff --git a/packages/astro/jest.setup.js b/packages/astro/jest.setup.js new file mode 100644 index 000000000..285b4faff --- /dev/null +++ b/packages/astro/jest.setup.js @@ -0,0 +1,10 @@ +import { fileURLToPath } from 'url'; +import { open } from 'sqlite'; +import sqlite3 from 'sqlite3'; + +const DB_PATH = new URL('./test/test-state.sqlite', import.meta.url); + +export default async function setup() { + const db = await open({ filename: fileURLToPath(DB_PATH), driver: sqlite3.Database }); + await db.exec(`CREATE TABLE IF NOT EXISTS test_ports (id INTEGER PRIMARY KEY AUTOINCREMENT, port INTEGER)`); +} diff --git a/packages/astro/jest.teardown.js b/packages/astro/jest.teardown.js new file mode 100644 index 000000000..7f14e76a8 --- /dev/null +++ b/packages/astro/jest.teardown.js @@ -0,0 +1,8 @@ +import fs from 'fs'; + +const DB_NAME = './test/test-state.sqlite'; +const DB_PATH = new URL(DB_NAME, import.meta.url); + +export default async function teardown() { + if (fs.existsSync(DB_PATH)) fs.rmSync(DB_PATH); +} diff --git a/packages/astro/package.json b/packages/astro/package.json index 2b304f5af..d8e456a49 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -55,6 +55,7 @@ "etag": "^1.8.1", "fast-xml-parser": "^3.19.0", "fdir": "^5.1.0", + "get-port": "^5.1.1", "kleur": "^4.1.4", "mime": "^2.5.2", "morphdom": "^2.6.1", @@ -82,7 +83,9 @@ "@types/mime": "^2.0.3", "@types/node-fetch": "^2.5.12", "@types/send": "^0.17.1", - "@types/yargs-parser": "^20.2.1" + "@types/yargs-parser": "^20.2.1", + "sqlite": "^4.0.23", + "sqlite3": "^5.0.2" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0", diff --git a/packages/astro/test/astro-component-code.test.js b/packages/astro/test/astro-component-code.test.js index bc5380ca1..87ba1114e 100644 --- a/packages/astro/test/astro-component-code.test.js +++ b/packages/astro/test/astro-component-code.test.js @@ -1,84 +1,88 @@ -import { suite } from 'uvu'; -import * as assert from 'uvu/assert'; -import { doc } from './test-utils.js'; -import { setup } from './helpers.js'; +import cheerio from 'cheerio'; +import { loadFixture } from './test-utils.js'; -const Components = suite(''); +describe(' { + let fixture; + let devServer; -setup(Components, './fixtures/astro-component-code'); + beforeAll(async () => { + fixture = await loadFixture({ projectRoot: './fixtures/astro-component-code' }); + devServer = await fixture.dev(); + }); -Components(' without lang or theme', async ({ runtime }) => { - let result = await runtime.load('/no-lang'); - assert.ok(!result.error, `build error: ${result.error}`); - const $ = doc(result.contents); - assert.equal($('pre').length, 1); - assert.equal($('pre').attr('style'), 'background-color: #0d1117; overflow-x: auto;', 'applies default and overflow'); - assert.equal($('pre > code').length, 1); - assert.ok($('pre > code span').length > 1, 'contains some generated spans'); -}); + test(' without lang or theme', async () => { + let html = await fixture.fetch('/no-lang'); + const $ = cheerio.load(html); + expect($('pre')).toHaveLength(1); + expect($('pre').attr('style')).toBe('background-color: #0d1117; overflow-x: auto;', 'applies default and overflow'); + expect($('pre > code')).toHaveLength(1); -Components('', async ({ runtime }) => { - let result = await runtime.load('/basic'); - assert.ok(!result.error, `build error: ${result.error}`); - const $ = doc(result.contents); - assert.equal($('pre').length, 1); - assert.equal($('pre').attr('class'), 'astro-code'); - assert.equal($('pre > code').length, 1); - assert.ok($('pre > code span').length >= 6, 'contains many generated spans'); -}); + // test: contains some generated spans + expect($('pre > code span').length).toBeGreaterThan(1); + }); -Components('', async ({ runtime }) => { - let result = await runtime.load('/custom-theme'); - assert.ok(!result.error, `build error: ${result.error}`); - const $ = doc(result.contents); - assert.equal($('pre').length, 1); - assert.equal($('pre').attr('class'), 'astro-code'); - assert.equal($('pre').attr('style'), 'background-color: #2e3440ff; overflow-x: auto;', 'applies custom theme'); -}); + test('', async () => { + let html = await fixture.fetch('/basic'); + const $ = cheerio.load(html); + expect($('pre')).toHaveLength(1); + expect($('pre').attr('class'), 'astro-code'); + expect($('pre > code')).toHaveLength(1); + // test: contains many generated spans + expect($('pre > code span').length).toBeGreaterThanOrEqual(6); + }); -Components('', async ({ runtime }) => { - { - let result = await runtime.load('/wrap-true'); - assert.ok(!result.error, `build error: ${result.error}`); - const $ = doc(result.contents); - assert.equal($('pre').length, 1); - assert.equal($('pre').attr('style'), 'background-color: #0d1117; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;', 'applies wrap overflow'); - } - { - let result = await runtime.load('/wrap-false'); - assert.ok(!result.error, `build error: ${result.error}`); - const $ = doc(result.contents); - assert.equal($('pre').length, 1); - assert.equal($('pre').attr('style'), 'background-color: #0d1117; overflow-x: auto;', 'applies wrap overflow'); - } - { - let result = await runtime.load('/wrap-null'); - assert.ok(!result.error, `build error: ${result.error}`); - const $ = doc(result.contents); - assert.equal($('pre').length, 1); - assert.equal($('pre').attr('style'), 'background-color: #0d1117', 'applies wrap overflow'); - } -}); + test('', async () => { + let html = await fixture.fetch('/custom-theme'); + const $ = cheerio.load(html); + expect($('pre')).toHaveLength(1); + expect($('pre').attr('class')).toBe('astro-code'); + expect($('pre').attr('style')).toBe('background-color: #2e3440ff; overflow-x: auto;', 'applies custom theme'); + }); -Components('', async ({ runtime }) => { - let result = await runtime.load('/css-theme'); - assert.ok(!result.error, `build error: ${result.error}`); - const $ = doc(result.contents); - assert.equal($('pre').length, 1); - assert.equal($('pre').attr('class'), 'astro-code'); - assert.equal( - $('pre, pre span') - .map((i, f) => (f.attribs ? f.attribs.style : 'no style found')) - .toArray(), - [ + test('', async () => { + { + let html = await fixture.fetch('/wrap-true'); + const $ = cheerio.load(html); + expect($('pre')).toHaveLength(1); + // test: applies wrap overflow + expect($('pre').attr('style')).toBe('background-color: #0d1117; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;'); + } + { + let html = await fixture.fetch('/wrap-false'); + const $ = cheerio.load(html); + expect($('pre')).toHaveLength(1); + // test: applies wrap overflow + expect($('pre').attr('style')).toBe('background-color: #0d1117; overflow-x: auto;'); + } + { + let html = await fixture.fetch('/wrap-null'); + const $ = cheerio.load(html); + expect($('pre')).toHaveLength(1); + // test: applies wrap overflow + expect($('pre').attr('style')).toBe('background-color: #0d1117'); + } + }); + + test('', async () => { + let html = await fixture.fetch('/css-theme'); + const $ = cheerio.load(html); + expect($('pre')).toHaveLength(1); + expect($('pre').attr('class')).toBe('astro-code'); + expect( + $('pre, pre span') + .map((i, f) => (f.attribs ? f.attribs.style : 'no style found')) + .toArray() + ).toEqual([ 'background-color: var(--astro-code-color-background); overflow-x: auto;', 'color: var(--astro-code-token-constant)', 'color: var(--astro-code-token-function)', 'color: var(--astro-code-color-text)', 'color: var(--astro-code-token-string-expression)', 'color: var(--astro-code-color-text)', - ] - ); -}); + ]); + }); -Components.run(); + afterAll(async () => { + await devServer.close(); + }); +}); diff --git a/packages/astro/test/astro-get-static-paths.test.js b/packages/astro/test/astro-get-static-paths.test.js index a2c0967bc..df64b3d1b 100644 --- a/packages/astro/test/astro-get-static-paths.test.js +++ b/packages/astro/test/astro-get-static-paths.test.js @@ -1,4 +1,4 @@ -import { loadFixture } from './helpers.js'; +import { loadFixture } from './test-utils'; describe('getStaticPaths()', () => { let fixture; diff --git a/packages/astro/test/builtins-polyfillnode.test.js b/packages/astro/test/builtins-polyfillnode.test.js index 0c0dd3759..7369a1714 100644 --- a/packages/astro/test/builtins-polyfillnode.test.js +++ b/packages/astro/test/builtins-polyfillnode.test.js @@ -3,9 +3,11 @@ import { loadFixture } from './test-utils.js'; describe('Node builtins with polyfillNode option', () => { let fixture; + let devServer; beforeAll(async () => { fixture = await loadFixture({ projectRoot: './fixtures/builtins-polyfillnode/' }); + devServer = await fixture.dev(); }); test('Doesn’t alias to node: prefix', async () => { diff --git a/packages/astro/test/test-utils.js b/packages/astro/test/test-utils.js index 3efe2d38c..c579d9666 100644 --- a/packages/astro/test/test-utils.js +++ b/packages/astro/test/test-utils.js @@ -1,12 +1,13 @@ import execa from 'execa'; import fs from 'fs'; import fetch from 'node-fetch'; +import { open } from 'sqlite'; +import sqlite3 from 'sqlite3'; import { loadConfig } from '../dist/config.js'; import dev from '../dist/dev/index.js'; import build from '../dist/build/index.js'; import preview from '../dist/preview/index.js'; - -let lastPort = 3000; +import { fileURLToPath } from 'url'; /** * Load Astro fixture @@ -37,14 +38,11 @@ export async function loadFixture(inlineConfig) { } } - // get unique port - lastPort += 1; // note: tests run in parallel, and every test/fixture needs its own port. Increment by 1 every time this is called (can support thousands of tests) - if (!inlineConfig.devOptions) inlineConfig.devOptions = {}; - inlineConfig.devOptions.port = lastPort; - // merge configs if (!inlineConfig.buildOptions) inlineConfig.buildOptions = {}; if (inlineConfig.buildOptions.sitemap === undefined) inlineConfig.buildOptions.sitemap = false; + if (!inlineConfig.devOptions) inlineConfig.devOptions = {}; + inlineConfig.devOptions.port = await uniquePort(); // force each test to have its own port if (!inlineConfig.devOptions.hostname) inlineConfig.devOptions.hostname = 'localhost'; if (!inlineConfig.dist) inlineConfig.dist = './dist/'; if (!inlineConfig.pages) inlineConfig.pages = './src/pages/'; @@ -93,9 +91,29 @@ function merge(a, b) { } const cliURL = new URL('../astro.js', import.meta.url); + /** Start Dev server via CLI */ export function devCLI(root, additionalArgs = []) { const args = [cliURL.pathname, 'dev', '--project-root', root.pathname].concat(additionalArgs); const proc = execa('node', args); return proc; } + +let db; +const DB_PATH = new URL('./test-state.sqlite', import.meta.url); + +/** + * Get a unique port. Uses sqlite to share state across multiple threads. + * Also has better success than get-port due to race conditions and inability to work with multiple processes. + */ +export async function uniquePort() { + if (!db) db = await open({ filename: fileURLToPath(DB_PATH), driver: sqlite3.Database }); + let lastPort = 2999; // first run: start at 3001 + const row = await db.get(`SELECT port FROM test_ports ORDER BY ID DESC LIMIT 1`); + if (row) { + lastPort = parseInt(row.port, 10); + } + lastPort += 1; // bump by one + await db.run(`INSERT INTO test_ports (port) VALUES (${lastPort});`); + return lastPort; +} diff --git a/yarn.lock b/yarn.lock index ea6d8d72d..3fa80c061 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2933,6 +2933,13 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + bluebird@3.7.2, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -3905,7 +3912,7 @@ debug@4, debug@4.3.2, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, de dependencies: ms "2.1.2" -debug@^3.1.0: +debug@^3.1.0, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -3957,6 +3964,11 @@ deep-equal@~1.0.1: resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -4057,6 +4069,11 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -4971,6 +4988,16 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5620,7 +5647,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5644,7 +5671,7 @@ icss-utils@^5.0.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ignore-walk@^3.0.3: +ignore-walk@^3.0.1, ignore-walk@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== @@ -5714,7 +5741,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5724,7 +5751,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.2, ini@^1.3.4: +ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -7883,7 +7910,7 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -7966,6 +7993,15 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +needle@^2.2.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.2, negotiator@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -7994,6 +8030,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-addon-api@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + node-emoji@^1.8.1: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -8006,6 +8047,24 @@ node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@~2.6.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-gyp@3.x: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + node-gyp@^5.0.2: version "5.1.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" @@ -8049,6 +8108,22 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-releases@^1.1.75: version "1.1.75" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" @@ -8062,7 +8137,7 @@ node.extend@~2.0.2: has "^1.0.3" is "^3.2.1" -nopt@^3.0.1: +"nopt@2 || 3", nopt@^3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= @@ -8138,7 +8213,7 @@ not@^0.1.0: resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" integrity sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0= -npm-bundled@^1.1.1: +npm-bundled@^1.0.1, npm-bundled@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== @@ -8180,6 +8255,15 @@ npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-pack semver "^7.3.4" validate-npm-package-name "^3.0.0" +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-packlist@^2.1.4: version "2.2.2" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" @@ -8255,7 +8339,7 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -8421,7 +8505,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: +osenv@0, osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -9256,6 +9340,16 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-dom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" @@ -9575,7 +9669,7 @@ remark-slug@^7.0.0: unified "^10.0.0" unist-util-visit "^4.0.0" -request@^2.88.0, request@^2.88.2: +request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -9709,7 +9803,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@2, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9808,6 +9902,11 @@ sass@^1.38.1: dependencies: chokidar ">=3.0.0 <4.0.0" +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -9823,7 +9922,7 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1, semver@~5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1, semver@~5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -9840,6 +9939,11 @@ semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semve dependencies: lru-cache "^6.0.0" +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + send@^0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -10158,6 +10262,22 @@ srcset-parse@^1.1.0: resolved "https://registry.yarnpkg.com/srcset-parse/-/srcset-parse-1.1.0.tgz#73f787f38b73ede2c5af775e0a3465579488122b" integrity sha512-JWp4cG2eybkvKA1QUHGoNK6JDEYcOnSuhzNGjZuYUPqXreDl/VkkvP2sZW7Rmh+icuCttrR9ccb2WPIazyM/Cw== +sqlite3@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.2.tgz#00924adcc001c17686e0a6643b6cbbc2d3965083" + integrity sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA== + dependencies: + node-addon-api "^3.0.0" + node-pre-gyp "^0.11.0" + optionalDependencies: + node-gyp "3.x" + +sqlite@^4.0.23: + version "4.0.23" + resolved "https://registry.yarnpkg.com/sqlite/-/sqlite-4.0.23.tgz#ada09028b38e91883db08ac465d841e814d1bb00" + integrity sha512-dSdmSkrdIhUL7xP/fiEMfFuAo4dxb0afag3rK8T4Y9lYxE3g3fXT0J8H9qSFvmcKxnM0zEA8yvLbpdWQ8mom3g== + + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -10413,6 +10533,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -10539,7 +10664,16 @@ tailwindcss@^2.1.2: resolve "^1.20.0" tmp "^0.2.1" -tar@^4.4.12: +tar@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + +tar@^4, tar@^4.4.12: version "4.4.19" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== @@ -11443,7 +11577,7 @@ which-typed-array@^1.1.2: has-tostringtag "^1.0.0" is-typed-array "^1.1.6" -which@^1.2.9, which@^1.3.1: +which@1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==