refactor: switch to vercel pg

This commit is contained in:
iCrawl 2023-11-13 21:07:01 +01:00
parent 9a8110047e
commit c4767bacde
No known key found for this signature in database
GPG key ID: 1AB888B16355FBB2
10 changed files with 125 additions and 89 deletions

View file

@ -52,11 +52,11 @@
"@discordjs/ui": "workspace:^", "@discordjs/ui": "workspace:^",
"@microsoft/tsdoc": "^0.14.2", "@microsoft/tsdoc": "^0.14.2",
"@microsoft/tsdoc-config": "0.16.2", "@microsoft/tsdoc-config": "0.16.2",
"@planetscale/database": "^1.11.0",
"@react-icons/all-files": "^4.1.0", "@react-icons/all-files": "^4.1.0",
"@vercel/analytics": "^1.1.1", "@vercel/analytics": "^1.1.1",
"@vercel/edge-config": "^0.4.1", "@vercel/edge-config": "^0.4.1",
"@vercel/og": "^0.5.20", "@vercel/og": "^0.5.20",
"@vercel/postgres": "^0.5.1",
"ariakit": "2.0.0-next.44", "ariakit": "2.0.0-next.44",
"bright": "^0.8.4", "bright": "^0.8.4",
"class-variance-authority": "^0.7.0", "class-variance-authority": "^0.7.0",

View file

@ -1,26 +1,15 @@
import { readFile } from 'node:fs/promises'; import { readFile } from 'node:fs/promises';
import { join } from 'node:path'; import { join } from 'node:path';
import { connect } from '@planetscale/database'; import { sql } from '@vercel/postgres';
const sql = connect({
url: process.env.DATABASE_URL!,
async fetch(url, init) {
delete init?.cache;
return fetch(url, { ...init, next: { revalidate: 3_600 } });
},
});
export const fetchVersions = async (packageName: string): Promise<string[]> => { export const fetchVersions = async (packageName: string): Promise<string[]> => {
if (process.env.NEXT_PUBLIC_LOCAL_DEV || process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview') { if (process.env.NEXT_PUBLIC_LOCAL_DEV === 'true' || process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview') {
return ['main']; return ['main'];
} }
try { try {
const { rows } = await sql.execute('select version from documentation where name = ? order by version desc', [ const { rows } = await sql`select version from documentation where name = ${packageName} order by version desc`;
packageName,
]);
// @ts-expect-error: https://github.com/planetscale/database-js/issues/71
return rows.map((row) => row.version); return rows.map((row) => row.version);
} catch { } catch {
return []; return [];
@ -28,7 +17,7 @@ export const fetchVersions = async (packageName: string): Promise<string[]> => {
}; };
export const fetchModelJSON = async (packageName: string, version: string) => { export const fetchModelJSON = async (packageName: string, version: string) => {
if (process.env.NEXT_PUBLIC_LOCAL_DEV) { if (process.env.NEXT_PUBLIC_LOCAL_DEV === 'true') {
try { try {
const res = await readFile( const res = await readFile(
join(process.cwd(), '..', '..', 'packages', packageName, 'docs', 'docs.api.json'), join(process.cwd(), '..', '..', 'packages', packageName, 'docs', 'docs.api.json'),
@ -43,12 +32,8 @@ export const fetchModelJSON = async (packageName: string, version: string) => {
if (process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview') { if (process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview') {
try { try {
const { rows } = await sql.execute('select data from documentation where name = ? and version = ?', [ const { rows } = await sql`select data from documentation where name = ${packageName} and version = ${'main'}`;
packageName,
'main',
]);
// @ts-expect-error: https://github.com/planetscale/database-js/issues/71
return rows[0]?.data ?? null; return rows[0]?.data ?? null;
} catch { } catch {
return null; return null;
@ -56,12 +41,8 @@ export const fetchModelJSON = async (packageName: string, version: string) => {
} }
try { try {
const { rows } = await sql.execute('select data from documentation where name = ? and version = ?', [ const { rows } = await sql`select data from documentation where name = ${packageName} and version = ${version}`;
packageName,
version,
]);
// @ts-expect-error: https://github.com/planetscale/database-js/issues/71
return rows[0]?.data ?? null; return rows[0]?.data ?? null;
} catch { } catch {
return null; return null;

View file

@ -7,7 +7,7 @@ import Link from 'next/link';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { useMemo } from 'react'; import { useMemo } from 'react';
const isDev = process.env.NEXT_PUBLIC_LOCAL_DEV ?? process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview'; const isDev = process.env.NEXT_PUBLIC_LOCAL_DEV === 'true' ?? process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview';
export default function VersionSelect({ versions }: { readonly versions: string[] }) { export default function VersionSelect({ versions }: { readonly versions: string[] }) {
const pathname = usePathname(); const pathname = usePathname();

View file

@ -1,26 +1,15 @@
import { connect } from '@planetscale/database';
import { get } from '@vercel/edge-config'; import { get } from '@vercel/edge-config';
import { sql } from '@vercel/postgres';
import { NextResponse, type NextRequest } from 'next/server'; import { NextResponse, type NextRequest } from 'next/server';
import { PACKAGES } from './util/constants'; import { PACKAGES } from './util/constants';
const sql = connect({
url: process.env.DATABASE_URL!,
async fetch(url, init) {
delete init?.cache;
return fetch(url, { ...init, next: { revalidate: 3_600 } });
},
});
async function fetchLatestVersion(packageName: string): Promise<string> { async function fetchLatestVersion(packageName: string): Promise<string> {
if (process.env.NEXT_PUBLIC_LOCAL_DEV || process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview') { if (process.env.NEXT_PUBLIC_LOCAL_DEV === 'true' || process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview') {
return 'main'; return 'main';
} }
const { rows } = await sql.execute('select version from documentation where name = ? order by version desc', [ const { rows } = await sql`select version from documentation where name = ${packageName} order by version desc`;
packageName,
]);
// @ts-expect-error: https://github.com/planetscale/database-js/issues/71
return rows.map((row) => row.version).at(1) ?? 'main'; return rows.map((row) => row.version).at(1) ?? 'main';
} }

View file

@ -43,7 +43,7 @@
"@actions/core": "^1.10.1", "@actions/core": "^1.10.1",
"@actions/glob": "^0.4.0", "@actions/glob": "^0.4.0",
"@discordjs/scripts": "workspace:^", "@discordjs/scripts": "workspace:^",
"@planetscale/database": "^1.11.0", "@vercel/postgres": "^0.5.1",
"meilisearch": "^0.35.0", "meilisearch": "^0.35.0",
"tslib": "^2.6.2", "tslib": "^2.6.2",
"undici": "5.27.2" "undici": "5.27.2"

View file

@ -2,8 +2,7 @@ import { readFile } from 'node:fs/promises';
import process from 'node:process'; import process from 'node:process';
import { getInput, setFailed } from '@actions/core'; import { getInput, setFailed } from '@actions/core';
import { create } from '@actions/glob'; import { create } from '@actions/glob';
import { connect } from '@planetscale/database'; import { createPool } from '@vercel/postgres';
import { fetch } from 'undici';
if (!process.env.DATABASE_URL) { if (!process.env.DATABASE_URL) {
setFailed('DATABASE_URL is not set'); setFailed('DATABASE_URL is not set');
@ -12,9 +11,8 @@ if (!process.env.DATABASE_URL) {
const pkg = getInput('package') || '*'; const pkg = getInput('package') || '*';
const version = getInput('version') || 'main'; const version = getInput('version') || 'main';
const sql = connect({ const pool = createPool({
fetch, connectionString: process.env.DATABASE_URL,
url: process.env.DATABASE_URL!,
}); });
const globber = await create(`packages/${pkg}/docs/docs.api.json`); const globber = await create(`packages/${pkg}/docs/docs.api.json`);
@ -22,7 +20,7 @@ for await (const file of globber.globGenerator()) {
const data = await readFile(file, 'utf8'); const data = await readFile(file, 'utf8');
try { try {
console.log(`Uploading ${file} with ${version}...`); console.log(`Uploading ${file} with ${version}...`);
await sql.execute('replace into documentation (version, data) values (?, ?)', [version, data]); await pool.sql`insert into documentation (version, data) values (${version}, ${data}) on conflict (version) do update set data = EXCLUDED.data`;
} catch (error) { } catch (error) {
const err = error as Error; const err = error as Error;
setFailed(err.message); setFailed(err.message);

View file

@ -1,9 +1,8 @@
import process from 'node:process'; import process from 'node:process';
import { setFailed } from '@actions/core'; import { setFailed } from '@actions/core';
import { generateAllIndices } from '@discordjs/scripts'; import { generateAllIndices } from '@discordjs/scripts';
import { connect } from '@planetscale/database'; import { createPool } from '@vercel/postgres';
import { MeiliSearch } from 'meilisearch'; import { MeiliSearch } from 'meilisearch';
import { fetch } from 'undici';
if (!process.env.DATABASE_URL) { if (!process.env.DATABASE_URL) {
setFailed('DATABASE_URL is not set'); setFailed('DATABASE_URL is not set');
@ -17,9 +16,8 @@ if (!process.env.SEARCH_API_KEY) {
setFailed('SEARCH_API_KEY is not set'); setFailed('SEARCH_API_KEY is not set');
} }
const sql = connect({ const pool = createPool({
fetch, connectionString: process.env.DATABASE_URL,
url: process.env.DATABASE_URL!,
}); });
const client = new MeiliSearch({ const client = new MeiliSearch({
@ -32,20 +30,15 @@ try {
const indices = await generateAllIndices({ const indices = await generateAllIndices({
fetchPackageVersions: async (pkg) => { fetchPackageVersions: async (pkg) => {
console.log(`Fetching versions for ${pkg}...`); console.log(`Fetching versions for ${pkg}...`);
const { rows } = await sql.execute('select version from documentation where name = ?', [pkg]); const { rows } = await pool.sql`select version from documentation where name = ${pkg}`;
// @ts-expect-error: https://github.com/planetscale/database-js/issues/71
return rows.map((row) => row.version); return rows.map((row) => row.version);
}, },
fetchPackageVersionDocs: async (pkg, version) => { fetchPackageVersionDocs: async (pkg, version) => {
console.log(`Fetching data for ${pkg} ${version}...`); console.log(`Fetching data for ${pkg} ${version}...`);
const { rows } = await sql.execute('select data from documentation where name = ? and version = ?', [ const { rows } = await pool.sql`select data from documentation where name = ${pkg} and version = ${version}`;
pkg,
version,
]);
// @ts-expect-error: https://github.com/planetscale/database-js/issues/71 return rows[0]?.data ?? null;
return rows[0].data;
}, },
writeToFile: false, writeToFile: false,
}); });

View file

@ -58,7 +58,7 @@
"@discordjs/api-extractor-utils": "workspace:^", "@discordjs/api-extractor-utils": "workspace:^",
"@microsoft/tsdoc": "0.14.2", "@microsoft/tsdoc": "0.14.2",
"@microsoft/tsdoc-config": "0.16.2", "@microsoft/tsdoc-config": "0.16.2",
"@planetscale/database": "^1.11.0", "@vercel/postgres": "^0.5.1",
"tslib": "^2.6.2", "tslib": "^2.6.2",
"undici": "5.27.2", "undici": "5.27.2",
"yaml": "2.3.4" "yaml": "2.3.4"

View file

@ -1,15 +1,14 @@
import { readFile } from 'node:fs/promises'; import { readFile } from 'node:fs/promises';
import process, { cwd } from 'node:process'; import process, { cwd } from 'node:process';
import { create } from '@actions/glob'; import { create } from '@actions/glob';
import { connect } from '@planetscale/database'; import { createPool } from '@vercel/postgres';
const sql = connect({ const pool = createPool({
url: process.env.DATABASE_URL!, connectionString: process.env.DATABASE_URL,
}); });
process.chdir(`${cwd()}/../../`); process.chdir(`${cwd()}/../../`);
const globber = await create(`packages/*/docs/*.api.json`); const globber = await create(`packages/*/docs/*.api.json`);
// const globber2 = await create(`discord.js/*.json`);
for await (const file of globber.globGenerator()) { for await (const file of globber.globGenerator()) {
const parsed = /(?<semver>\d+.\d+.\d+)-?.*/.exec(file); const parsed = /(?<semver>\d+.\d+.\d+)-?.*/.exec(file);
const data = await readFile(file, 'utf8'); const data = await readFile(file, 'utf8');
@ -17,14 +16,14 @@ for await (const file of globber.globGenerator()) {
if (parsed?.groups) { if (parsed?.groups) {
console.log(parsed.groups.semver, file); console.log(parsed.groups.semver, file);
try { try {
await sql.execute('replace into documentation (version, data) values (?, ?)', [parsed.groups.semver, data]); await pool.sql`insert into documentation (version, data) values (${parsed.groups.semver}, ${data}) on conflict (name, version) do update set data = EXCLUDED.data`;
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
} else { } else {
console.log('main', file); console.log('main', file);
try { try {
await sql.execute('replace into documentation (version, data) values (?, ?)', ['main', data]); await pool.sql`insert into documentation (version, data) values (${'main'}, ${data}) on conflict (name, version) do update set data = EXCLUDED.data`;
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }

View file

@ -244,9 +244,6 @@ importers:
'@microsoft/tsdoc-config': '@microsoft/tsdoc-config':
specifier: 0.16.2 specifier: 0.16.2
version: 0.16.2(patch_hash=35av6rrndvjtr2u2jso66jatbu) version: 0.16.2(patch_hash=35av6rrndvjtr2u2jso66jatbu)
'@planetscale/database':
specifier: ^1.11.0
version: 1.11.0
'@react-icons/all-files': '@react-icons/all-files':
specifier: ^4.1.0 specifier: ^4.1.0
version: 4.1.0(react@18.2.0) version: 4.1.0(react@18.2.0)
@ -259,6 +256,9 @@ importers:
'@vercel/og': '@vercel/og':
specifier: ^0.5.20 specifier: ^0.5.20
version: 0.5.20 version: 0.5.20
'@vercel/postgres':
specifier: ^0.5.1
version: 0.5.1
ariakit: ariakit:
specifier: 2.0.0-next.44 specifier: 2.0.0-next.44
version: 2.0.0-next.44(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) version: 2.0.0-next.44(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)
@ -386,9 +386,9 @@ importers:
'@discordjs/scripts': '@discordjs/scripts':
specifier: workspace:^ specifier: workspace:^
version: link:../scripts version: link:../scripts
'@planetscale/database': '@vercel/postgres':
specifier: ^1.11.0 specifier: ^0.5.1
version: 1.11.0 version: 0.5.1
meilisearch: meilisearch:
specifier: ^0.35.0 specifier: ^0.35.0
version: 0.35.0 version: 0.35.0
@ -933,7 +933,7 @@ importers:
version: 5.27.2 version: 5.27.2
ws: ws:
specifier: 8.14.2 specifier: 8.14.2
version: 8.14.2 version: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)
devDependencies: devDependencies:
'@discordjs/api-extractor': '@discordjs/api-extractor':
specifier: workspace:^ specifier: workspace:^
@ -1340,9 +1340,9 @@ importers:
'@microsoft/tsdoc-config': '@microsoft/tsdoc-config':
specifier: 0.16.2 specifier: 0.16.2
version: 0.16.2(patch_hash=35av6rrndvjtr2u2jso66jatbu) version: 0.16.2(patch_hash=35av6rrndvjtr2u2jso66jatbu)
'@planetscale/database': '@vercel/postgres':
specifier: ^1.11.0 specifier: ^0.5.1
version: 1.11.0 version: 0.5.1
tslib: tslib:
specifier: ^2.6.2 specifier: ^2.6.2
version: 2.6.2 version: 2.6.2
@ -1560,7 +1560,7 @@ importers:
version: 2.6.2 version: 2.6.2
ws: ws:
specifier: ^8.14.2 specifier: ^8.14.2
version: 8.14.2 version: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)
devDependencies: devDependencies:
'@babel/core': '@babel/core':
specifier: ^7.23.3 specifier: ^7.23.3
@ -1651,7 +1651,7 @@ importers:
version: 2.6.2 version: 2.6.2
ws: ws:
specifier: ^8.14.2 specifier: ^8.14.2
version: 8.14.2 version: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)
devDependencies: devDependencies:
'@discordjs/api-extractor': '@discordjs/api-extractor':
specifier: workspace:^ specifier: workspace:^
@ -4929,6 +4929,12 @@ packages:
tar-fs: 2.1.1 tar-fs: 2.1.1
dev: true dev: true
/@neondatabase/serverless@0.6.0:
resolution: {integrity: sha512-qXxBRYN0m2v8kVQBfMxbzNGn2xFAhTXFibzQlE++NfJ56Shz3m7+MyBBtXDlEH+3Wfa6lToDXf1MElocY4sJ3w==}
dependencies:
'@types/pg': 8.6.6
dev: false
/@next/bundle-analyzer@14.0.3-canary.5: /@next/bundle-analyzer@14.0.3-canary.5:
resolution: {integrity: sha512-PhGJFo0FDJxIlNyD8SZmVBrDmSESyS2R5snCH0sqCY4OGlJJbWsxQ1EXlL63nO6UtPqxuifcyHUQJNSm6eFWLg==} resolution: {integrity: sha512-PhGJFo0FDJxIlNyD8SZmVBrDmSESyS2R5snCH0sqCY4OGlJJbWsxQ1EXlL63nO6UtPqxuifcyHUQJNSm6eFWLg==}
dependencies: dependencies:
@ -5362,11 +5368,6 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: true dev: true
/@planetscale/database@1.11.0:
resolution: {integrity: sha512-aWbU+D/IRHoDE9975y+Q4c+EwwAWxCPwFId+N1AhQVFXzbeJMkj6KN2iQtoi03elcLMRdfT+V3i9Z4WRw+/oIA==}
engines: {node: '>=16'}
dev: false
/@polka/url@1.0.0-next.23: /@polka/url@1.0.0-next.23:
resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==}
dev: true dev: true
@ -7191,7 +7192,7 @@ packages:
util: 0.12.5 util: 0.12.5
util-deprecate: 1.0.2 util-deprecate: 1.0.2
watchpack: 2.4.0 watchpack: 2.4.0
ws: 8.14.2 ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- encoding - encoding
@ -7972,6 +7973,14 @@ packages:
resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
dev: false dev: false
/@types/pg@8.6.6:
resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==}
dependencies:
'@types/node': 18.18.9
pg-protocol: 1.6.0
pg-types: 2.2.0
dev: false
/@types/pretty-hrtime@1.0.2: /@types/pretty-hrtime@1.0.2:
resolution: {integrity: sha512-vyv9knII8XeW8TnXDcGH7HqG6FeR56ESN6ExM34d/U8Zvs3xuG34euV6CVyB7KEYI7Ts4lQM8b4NL72e7UadnA==} resolution: {integrity: sha512-vyv9knII8XeW8TnXDcGH7HqG6FeR56ESN6ExM34d/U8Zvs3xuG34euV6CVyB7KEYI7Ts4lQM8b4NL72e7UadnA==}
dev: true dev: true
@ -8725,6 +8734,16 @@ packages:
yoga-wasm-web: 0.3.3 yoga-wasm-web: 0.3.3
dev: false dev: false
/@vercel/postgres@0.5.1:
resolution: {integrity: sha512-JKl8QOBIDnifhkxAhIKtY0A5Tb8oWBf2nzZhm0OH7Ffjsl0hGVnDL2w1/FCfpX8xna3JAWM034NGuhZfTFdmiw==}
engines: {node: '>=14.6'}
dependencies:
'@neondatabase/serverless': 0.6.0
bufferutil: 4.0.8
utf-8-validate: 6.0.3
ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)
dev: false
/@vercel/python@4.1.0: /@vercel/python@4.1.0:
resolution: {integrity: sha512-EIQXK5zL6fce0Barh74gc7xyLtRyvgmLZDIVQ8yJLtFxPlPCRY3GXkdJ7Jdcw8Pd0uuVF0vIHatv18xSLbcwtg==} resolution: {integrity: sha512-EIQXK5zL6fce0Barh74gc7xyLtRyvgmLZDIVQ8yJLtFxPlPCRY3GXkdJ7Jdcw8Pd0uuVF0vIHatv18xSLbcwtg==}
dev: true dev: true
@ -9915,6 +9934,13 @@ packages:
base64-js: 1.5.1 base64-js: 1.5.1
ieee754: 1.2.1 ieee754: 1.2.1
/bufferutil@4.0.8:
resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
engines: {node: '>=6.14.2'}
requiresBuild: true
dependencies:
node-gyp-build: 4.6.1
/builtin-modules@1.1.1: /builtin-modules@1.1.1:
resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==} resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -17519,7 +17545,6 @@ packages:
/node-gyp-build@4.6.1: /node-gyp-build@4.6.1:
resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==} resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==}
hasBin: true hasBin: true
dev: true
/node-int64@0.4.0: /node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@ -18232,6 +18257,26 @@ packages:
is-reference: 3.0.2 is-reference: 3.0.2
dev: false dev: false
/pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
dev: false
/pg-protocol@1.6.0:
resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==}
dev: false
/pg-types@2.2.0:
resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
engines: {node: '>=4'}
dependencies:
pg-int8: 1.0.1
postgres-array: 2.0.0
postgres-bytea: 1.0.0
postgres-date: 1.0.7
postgres-interval: 1.2.0
dev: false
/picocolors@1.0.0: /picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
@ -18410,6 +18455,28 @@ packages:
picocolors: 1.0.0 picocolors: 1.0.0
source-map-js: 1.0.2 source-map-js: 1.0.2
/postgres-array@2.0.0:
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
engines: {node: '>=4'}
dev: false
/postgres-bytea@1.0.0:
resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
engines: {node: '>=0.10.0'}
dev: false
/postgres-date@1.0.7:
resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
engines: {node: '>=0.10.0'}
dev: false
/postgres-interval@1.2.0:
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
engines: {node: '>=0.10.0'}
dependencies:
xtend: 4.0.2
dev: false
/prebuild-install@7.1.1: /prebuild-install@7.1.1:
resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -21816,6 +21883,13 @@ packages:
react: 18.2.0 react: 18.2.0
tslib: 2.6.2 tslib: 2.6.2
/utf-8-validate@6.0.3:
resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==}
engines: {node: '>=6.14.2'}
requiresBuild: true
dependencies:
node-gyp-build: 4.6.1
/util-deprecate@1.0.2: /util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@ -22541,7 +22615,7 @@ packages:
optional: true optional: true
dev: true dev: true
/ws@8.14.2: /ws@8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3):
resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
peerDependencies: peerDependencies:
@ -22552,6 +22626,9 @@ packages:
optional: true optional: true
utf-8-validate: utf-8-validate:
optional: true optional: true
dependencies:
bufferutil: 4.0.8
utf-8-validate: 6.0.3
/xdg-app-paths@5.1.0: /xdg-app-paths@5.1.0:
resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==}
@ -22579,7 +22656,6 @@ packages:
/xtend@4.0.2: /xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'} engines: {node: '>=0.4'}
dev: true
/y18n@4.0.3: /y18n@4.0.3:
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}