chore: Changes to enable internal cypress dashboard (#26626)

> Pull Request Template
>
> Use this template to quickly create a well written pull request.
Delete all quotes before creating the pull request.
>
## Description
> Add a TL;DR when description is extra long (helps content team)
>
> Please include a summary of the changes and which issue has been
fixed. Please also include relevant motivation
> and context. List any dependencies that are required for this change
>
> Links to Notion, Figma or any other documents that might be relevant
to the PR
>
>
#### PR fixes following issue(s)
Fixes # (issue number)
> if no issue exists, please create an issue and ask the maintainers
about this first
>
>
#### Media
> A video or a GIF is preferred. when using Loom, don’t embed because it
looks like it’s a GIF. instead, just link to the video
>
>
#### Type of change
> Please delete options that are not relevant.
- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- Chore (housekeeping or task changes that don't impact user perception)
- This change requires a documentation update
>
>
>
## Testing
>
#### How Has This Been Tested?
> Please describe the tests that you ran to verify your changes. Also
list any relevant details for your test configuration.
> Delete anything that is not relevant
- [ ] Manual
- [ ] JUnit
- [ ] Jest
- [ ] Cypress
>
>
#### Test Plan
> Add Testsmith test cases links that relate to this PR
>
>
#### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)
>
>
>
## Checklist:
#### Dev activity
- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag


#### QA activity:
- [ ] [Speedbreak
features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-)
have been covered
- [ ] Test plan covers all impacted features and [areas of
interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-)
- [ ] Test plan has been peer reviewed by project stakeholders and other
QA members
- [ ] Manually tested functionality on DP
- [ ] We had an implementation alignment call with stakeholders post QA
Round 2
- [ ] Cypress test cases have been added and approved by SDET/manual QA
- [ ] Added `Test Plan Approved` label after Cypress tests were reviewed
- [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
This commit is contained in:
Saroj 2023-08-25 10:21:12 +05:30 committed by GitHub
parent 8640c27d37
commit edbbefd979
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 569 additions and 15 deletions

View File

@ -239,6 +239,42 @@ jobs:
- run: |
echo "BROWSER_PATH=$(which chrome)" >> $GITHUB_ENV
- name: Save Git values
# pass env variables from this step to other steps
# using GitHub Actions environment file
# https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions#environment-files
run: |
PR_NUMBER=${{ inputs.pr }}
echo COMMIT_INFO_BRANCH=$(git rev-parse --abbrev-ref HEAD) >> $GITHUB_ENV
echo COMMIT_INFO_MESSAGE=OkToTest run on PR# ${{ inputs.pr }} >> $GITHUB_ENV
echo COMMIT_INFO_EMAIL=$(git show -s --pretty=%ae) >> $GITHUB_ENV
echo COMMIT_INFO_AUTHOR=$(git show -s --pretty=%an) >> $GITHUB_ENV
echo COMMIT_INFO_SHA=$(git show -s --pretty=%H) >> $GITHUB_ENV
echo COMMIT_INFO_TIMESTAMP=$(git show -s --pretty=%ct) >> $GITHUB_ENV
echo COMMIT_INFO_REMOTE=$(git config --get remote.origin.url) >> $GITHUB_ENV
# delete the .git folder afterwords to use the environment values
rm -rf .git
- name: Show Git values
run: |
echo Branch $COMMIT_INFO_BRANCH
echo Message $COMMIT_INFO_MESSAGE
echo Email $COMMIT_INFO_EMAIL
echo Author $COMMIT_INFO_AUTHOR
echo SHA $COMMIT_INFO_SHA
echo Timestamp $COMMIT_INFO_TIMESTAMP
echo Remote $COMMIT_INFO_REMOTE
- name: Set Commit Message
env:
EVENT_COMMITS: ${{ toJson(github.event.commits[0].message) }}
run: |
if [[ ${{ inputs.pr }} -ne 0 ]]; then
echo "COMMIT_INFO_MESSAGE=${{ env.COMMIT_INFO_MESSAGE }}" >> $GITHUB_ENV
else
echo "COMMIT_INFO_MESSAGE=$(echo \"${{ env.EVENT_COMMITS }}\" | awk -F '\\\\n' '{print $1}' | sed 's/^\"//')" >> $GITHUB_ENV
fi
- name: Run the cypress test
if: steps.run_result.outputs.run_result != 'success' && steps.run_result.outputs.run_result != 'failedtest'
id: cypress_test
@ -292,6 +328,18 @@ jobs:
CYPRESS_CONFIG_FILE: cypress_ci_custom.config.ts
CYPRESS_HEADLESS: "true"
CYPRESS_BROWSER: ${{ env.BROWSER_PATH }}
RUNID: ${{ github.run_id }}
ATTEMPT_NUMBER: ${{ github.run_attempt }}
REPOSITORY: ${{ github.repository }}
COMMITTER: ${{ env.COMMIT_INFO_AUTHOR }}
TAG: ${{ github.event_name }}
BRANCH: ${{ env.COMMIT_INFO_BRANCH }}
CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }}
CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
CYPRESS_DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
CYPRESS_S3_ACCESS: ${{ secrets.CYPRESS_S3_ACCESS }}
CYPRESS_S3_SECRET: ${{ secrets.CYPRESS_S3_SECRET }}
with:
install: false
working-directory: app/client
@ -347,6 +395,19 @@ jobs:
CYPRESS_CONFIG_FILE: cypress_ci.config.ts
CYPRESS_HEADLESS: "true"
CYPRESS_BROWSER: ${{ env.BROWSER_PATH }}
RUNID: ${{ github.run_id }}
ATTEMPT_NUMBER: ${{ github.run_attempt }}
REPOSITORY: ${{ github.repository }}
COMMITTER: ${{ env.COMMIT_INFO_AUTHOR }}
TAG: ${{ github.event_name }}
BRANCH: ${{ env.COMMIT_INFO_BRANCH }}
THIS_RUNNER: ${{ strategy.job-index }}
CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }}
CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
CYPRESS_DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
CYPRESS_S3_ACCESS: ${{ secrets.CYPRESS_S3_ACCESS }}
CYPRESS_S3_SECRET: ${{ secrets.CYPRESS_S3_SECRET }}
with:
install: false
working-directory: app/client

View File

@ -363,6 +363,19 @@ jobs:
APPSMITH_GOOGLE_MAPS_API_KEY: ${{ secrets.APPSMITH_GOOGLE_MAPS_API_KEY }}
COMMIT_INFO_MESSAGE: ${{ env.COMMIT_INFO_MESSAGE }}
CYPRESS_VERIFY_TIMEOUT: 100000
RUNID: ${{ github.run_id }}
ATTEMPT_NUMBER: ${{ github.run_attempt }}
REPOSITORY: ${{ github.repository }}
COMMITTER: ${{ env.COMMIT_INFO_AUTHOR }}
TAG: ${{ github.event_name }}
BRANCH: ${{ env.COMMIT_INFO_BRANCH }}
THIS_RUNNER: ${{ strategy.job-index }}
CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }}
CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
CYPRESS_DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
CYPRESS_S3_ACCESS: ${{ secrets.CYPRESS_S3_ACCESS }}
CYPRESS_S3_SECRET: ${{ secrets.CYPRESS_S3_SECRET }}
with:
browser: ${{ env.BROWSER_PATH }}
record: true
@ -442,6 +455,19 @@ jobs:
APPSMITH_DISABLE_TELEMETRY: true
APPSMITH_GOOGLE_MAPS_API_KEY: ${{ secrets.APPSMITH_GOOGLE_MAPS_API_KEY }}
COMMIT_INFO_MESSAGE: ${{ env.COMMIT_INFO_MESSAGE }}
RUNID: ${{ github.run_id }}
ATTEMPT_NUMBER: ${{ github.run_attempt }}
REPOSITORY: ${{ github.repository }}
COMMITTER: ${{ env.COMMIT_INFO_AUTHOR }}
TAG: ${{ github.event_name }}
BRANCH: ${{ env.COMMIT_INFO_BRANCH }}
THIS_RUNNER: ${{ strategy.job-index }}
CYPRESS_DB_USER: ${{ secrets.CYPRESS_DB_USER }}
CYPRESS_DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
CYPRESS_DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
CYPRESS_DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
CYPRESS_S3_ACCESS: ${{ secrets.CYPRESS_S3_ACCESS }}
CYPRESS_S3_SECRET: ${{ secrets.CYPRESS_S3_SECRET }}
with:
browser: ${{ env.BROWSER_PATH }}
record: true

View File

@ -122,3 +122,4 @@ jobs:
- name: Check ci-test set status
if: needs.ci-test.result != 'success'
run: exit 1

View File

@ -11,6 +11,7 @@ const {
addMatchImageSnapshotPlugin,
} = require("cypress-image-snapshot/plugin");
const { tagify } = require("cypress-tags");
const { cypressHooks } = require("../scripts/cypress-hooks");
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
@ -44,6 +45,9 @@ module.exports = (on, config) => {
on("file:preprocessor", tagify(config));
addMatchImageSnapshotPlugin(on, config);
if (process.env["RUNID"]) {
cypressHooks(on, config);
}
on("before:browser:launch", (browser = {}, launchOptions) => {
/*

View File

@ -0,0 +1,224 @@
const { Client } = require("pg");
const os = require("os");
const AWS = require("aws-sdk");
const fs = require("fs");
exports.cypressHooks = cypressHooks;
// This function will helps to check and get env variables
function getEnvValue(varName, { required = true }) {
if (required && process.env[varName] === undefined) {
throw Error(
`Please check some or all the following ENV variables are not set properly [ RUNID, ATTEMPT_NUMBER, REPOSITORY, COMMITTER, TAG, BRANCH, THIS_RUNNER, CYPRESS_DB_USER, CYPRESS_DB_HOST, CYPRESS_DB_NAME, CYPRESS_DB_PWD, CYPRESS_S3_ACCESS, CYPRESS_S3_SECRET ].`,
);
}
const value =
process.env[varName] === undefined ? "Cypress test" : process.env[varName];
return value;
}
//This is to setup the db client
function configureDbClient() {
const dbConfig = {
user: getEnvValue("CYPRESS_DB_USER", { required: true }),
host: getEnvValue("CYPRESS_DB_HOST", { required: true }),
database: getEnvValue("CYPRESS_DB_NAME", { required: true }),
password: getEnvValue("CYPRESS_DB_PWD", { required: true }),
port: 5432,
ssl: true,
keepalives: 0,
};
const dbClient = new Client(dbConfig);
dbClient.connect();
return dbClient;
}
// This is to setup the AWS client
AWS.config.update({ region: "ap-south-1" });
const s3 = new AWS.S3({
credentials: {
accessKeyId: getEnvValue("CYPRESS_S3_ACCESS", { required: true }),
secretAccessKey: getEnvValue("CYPRESS_S3_SECRET", { required: true }),
},
});
// This is to upload files to s3 when required
function uploadToS3(filePath, key) {
const fileContent = fs.readFileSync(filePath);
const params = {
Bucket: "appsmith-internal-cy-db",
Key: key,
Body: fileContent,
};
return s3.upload(params).promise();
}
async function cypressHooks(on, config) {
const dbClient = configureDbClient();
const runData = {
commitMsg: getEnvValue("COMMIT_INFO_MESSAGE", { required: false }),
workflowId: getEnvValue("RUNID", { required: true }),
attempt: getEnvValue("ATTEMPT_NUMBER", { required: true }),
os: os.type(),
repo: getEnvValue("REPOSITORY", { required: true }),
committer: getEnvValue("COMMITTER", { required: true }),
type: getEnvValue("TAG", { required: true }),
branch: getEnvValue("BRANCH", { required: true }),
};
const matrix = {
matrixId: getEnvValue("THIS_RUNNER", { required: true }),
matrixStatus: "started",
};
const specData = {};
await on("before:run", async (runDetails) => {
runData.browser = runDetails.browser.name;
try {
const runResponse = await dbClient.query(
`INSERT INTO public.attempt ("workflowId", "attempt", "browser", "os", "repo", "committer", "type", "commitMsg", "branch")
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
ON CONFLICT ("workflowId", attempt) DO NOTHING
RETURNING id;`,
[
runData.workflowId,
runData.attempt,
runData.browser,
runData.os,
runData.repo,
runData.committer,
runData.type,
runData.commitMsg,
runData.branch,
],
);
if (runResponse.rows.length > 0) {
runData.attemptId = runResponse.rows[0].id; // Save the inserted attempt ID for later updates
} else {
const res = await dbClient.query(
`SELECT id FROM public.attempt WHERE "workflowId" = $1 AND attempt = $2`,
[runData.workflowId, runData.attempt],
);
runData.attemptId = res.rows[0].id;
}
const matrixResponse = await dbClient.query(
`INSERT INTO public.matrix ("workflowId", "matrixId", "status", "attemptId")
VALUES ($1, $2, $3, $4)
ON CONFLICT ("matrixId", "attemptId") DO NOTHING
RETURNING id;`,
[
runData.workflowId,
matrix.matrixId,
matrix.matrixStatus,
runData.attemptId,
],
);
matrix.id = matrixResponse.rows[0].id; // Save the inserted matrix ID for later updates
} catch (err) {
console.log(err);
}
});
await on("before:spec", async (spec) => {
specData.name = spec.relative;
specData.matrixId = matrix.id;
try {
const specResponse = await dbClient.query(
'INSERT INTO public.specs ("name", "matrixId") VALUES ($1, $2) RETURNING id',
[specData.name, matrix.id],
);
specData.specId = specResponse.rows[0].id; // Save the inserted spec ID for later updates
} catch (err) {
console.log(err);
}
});
await on("after:spec", async (spec, results) => {
specData.testCount = results.stats.tests;
specData.passes = results.stats.passes;
specData.failed = results.stats.failures;
specData.pending = results.stats.pending;
specData.skipped = results.stats.skipped;
specData.status = results.stats.failures > 0 ? "fail" : "pass";
try {
await dbClient.query(
'UPDATE public.specs SET "testCount" = $1, "passes" = $2, "failed" = $3, "skipped" = $4, "pending" = $5, "status" = $6 WHERE id = $7',
[
results.stats.tests,
results.stats.passes,
results.stats.failures,
results.stats.skipped,
results.stats.pending,
specData.status,
specData.specId,
],
);
for (const test of results.tests) {
const testResponse = await dbClient.query(
`INSERT INTO public.tests ("name", "specId", "status", "retries", "retryData") VALUES ($1, $2, $3, $4, $5) RETURNING id`,
[
test.title[1],
specData.specId,
test.state,
test.attempts.length,
JSON.stringify(test.attempts),
],
);
if (
test.attempts.some((attempt) => attempt.state === "failed") &&
results.screenshots
) {
const out = results.screenshots.filter(
(scr) => scr.testId === test.testId,
);
console.log("Uploading screenshots...");
for (const scr of out) {
const key = `${testResponse.rows[0].id}_${specData.specId}_${
scr.testAttemptIndex + 1
}`;
Promise.all([uploadToS3(scr.path, key)]).catch((error) => {
console.log("Error in uploading screenshots:", error);
});
}
}
}
if (
results.tests.some((test) =>
test.attempts.some((attempt) => attempt.state === "failed"),
) &&
results.video
) {
console.log("Uploading video...");
const key = `${specData.specId}`;
Promise.all([uploadToS3(results.video, key)]).catch((error) => {
console.log("Error in uploading video:", error);
});
}
} catch (err) {
console.log(err);
}
});
on("after:run", async (runDetails) => {
try {
await dbClient.query(
`UPDATE public.matrix SET "status" = $1 WHERE id = $2`,
["done", matrix.id],
);
await dbClient.query(
`UPDATE public.attempt SET "endTime" = $1 WHERE "id" = $2`,
[new Date(), runData.attemptId],
);
await dbClient.end();
} catch (err) {
console.log(err);
}
});
}

View File

@ -83,6 +83,7 @@
"algoliasearch": "^4.2.0",
"assert-never": "^1.2.1",
"astring": "^1.7.5",
"aws-sdk": "^2.1443.0",
"axios": "^0.27.2",
"classnames": "^2.3.1",
"clsx": "^1.2.1",
@ -138,6 +139,7 @@
"normalizr": "^3.3.0",
"object-hash": "^3.0.0",
"path-to-regexp": "^6.2.0",
"pg": "^8.11.3",
"popper.js": "^1.15.0",
"prismjs": "^1.27.0",
"proxy-memoize": "^1.2.0",

View File

@ -9946,6 +9946,7 @@ __metadata:
algoliasearch: ^4.2.0
assert-never: ^1.2.1
astring: ^1.7.5
aws-sdk: ^2.1443.0
axios: ^0.27.2
babel-plugin-lodash: ^3.3.4
babel-plugin-module-resolver: ^4.1.0
@ -10041,6 +10042,7 @@ __metadata:
normalizr: ^3.3.0
object-hash: ^3.0.0
path-to-regexp: ^6.2.0
pg: ^8.11.3
plop: ^3.1.1
popper.js: ^1.15.0
postinstall-postinstall: ^2.1.0
@ -10526,6 +10528,24 @@ __metadata:
languageName: node
linkType: hard
"aws-sdk@npm:^2.1443.0":
version: 2.1443.0
resolution: "aws-sdk@npm:2.1443.0"
dependencies:
buffer: 4.9.2
events: 1.1.1
ieee754: 1.1.13
jmespath: 0.16.0
querystring: 0.2.0
sax: 1.2.1
url: 0.10.3
util: ^0.12.4
uuid: 8.0.0
xml2js: 0.5.0
checksum: 494124cded48679ec449bfa1cee54db969141639414b71fd984d519f5cc4904b614a023339ad17f58f89d5ca45e038d9bc89b22bdd4e5b02b138eb0d800162f7
languageName: node
linkType: hard
"aws-sign2@npm:~0.7.0":
version: 0.7.0
resolution: "aws-sign2@npm:0.7.0"
@ -11501,6 +11521,13 @@ __metadata:
languageName: node
linkType: hard
"buffer-writer@npm:2.0.0":
version: 2.0.0
resolution: "buffer-writer@npm:2.0.0"
checksum: 11736b48bb75106c52ca8ec9f025e7c1b3b25ce31875f469d7210eabd5c576c329e34f6b805d4a8d605ff3f0db1e16342328802c4c963e9c826b0e43a4e631c2
languageName: node
linkType: hard
"buffer-xor@npm:^1.0.3":
version: 1.0.3
resolution: "buffer-xor@npm:1.0.3"
@ -11508,6 +11535,17 @@ __metadata:
languageName: node
linkType: hard
"buffer@npm:4.9.2":
version: 4.9.2
resolution: "buffer@npm:4.9.2"
dependencies:
base64-js: ^1.0.2
ieee754: ^1.1.4
isarray: ^1.0.0
checksum: 8801bc1ba08539f3be70eee307a8b9db3d40f6afbfd3cf623ab7ef41dffff1d0a31de0addbe1e66e0ca5f7193eeb667bfb1ecad3647f8f1b0750de07c13295c3
languageName: node
linkType: hard
"buffer@npm:^5.5.0, buffer@npm:^5.6.0":
version: 5.7.1
resolution: "buffer@npm:5.7.1"
@ -15415,7 +15453,7 @@ __metadata:
languageName: node
linkType: hard
"events@npm:^1.1.1":
"events@npm:1.1.1, events@npm:^1.1.1":
version: 1.1.1
resolution: "events@npm:1.1.1"
checksum: 40431eb005cc4c57861b93d44c2981a49e7feb99df84cf551baed299ceea4444edf7744733f6a6667e942af687359b1f4a87ec1ec4f21d5127dac48a782039b9
@ -17622,6 +17660,13 @@ __metadata:
languageName: node
linkType: hard
"ieee754@npm:1.1.13":
version: 1.1.13
resolution: "ieee754@npm:1.1.13"
checksum: 102df1ba662e316e6160f7ce29c7c7fa3e04f2014c288336c5a9ff40bbcc2a27d209fa2a81ebfb33f28b1941021343d30e9ad8ee85a2d61f79f5936c35edc33d
languageName: node
linkType: hard
"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1":
version: 1.2.1
resolution: "ieee754@npm:1.2.1"
@ -18509,6 +18554,13 @@ __metadata:
languageName: node
linkType: hard
"isarray@npm:^1.0.0, isarray@npm:~1.0.0":
version: 1.0.0
resolution: "isarray@npm:1.0.0"
checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab
languageName: node
linkType: hard
"isarray@npm:^2.0.5":
version: 2.0.5
resolution: "isarray@npm:2.0.5"
@ -18516,13 +18568,6 @@ __metadata:
languageName: node
linkType: hard
"isarray@npm:~1.0.0":
version: 1.0.0
resolution: "isarray@npm:1.0.0"
checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab
languageName: node
linkType: hard
"isbinaryfile@npm:^4.0.8":
version: 4.0.10
resolution: "isbinaryfile@npm:4.0.10"
@ -19732,6 +19777,13 @@ __metadata:
languageName: node
linkType: hard
"jmespath@npm:0.16.0":
version: 0.16.0
resolution: "jmespath@npm:0.16.0"
checksum: 2d602493a1e4addfd1350ac8c9d54b1b03ed09e305fd863bab84a4ee1f52868cf939dd1a08c5cdea29ce9ba8f86875ebb458b6ed45dab3e1c3f2694503fb2fd9
languageName: node
linkType: hard
"joi@npm:^17.3.0":
version: 17.9.2
resolution: "joi@npm:17.9.2"
@ -22270,6 +22322,13 @@ __metadata:
languageName: node
linkType: hard
"packet-reader@npm:1.0.0":
version: 1.0.0
resolution: "packet-reader@npm:1.0.0"
checksum: 0b7516f0cbf3e322aad591bed29ba544220088c53943145c0d9121a6f59182ad811f7fd6785a8979a34356aca69d97653689029964c5998dc02645633d88ffd7
languageName: node
linkType: hard
"paging-algorithm@npm:^1.0.1":
version: 1.0.1
resolution: "paging-algorithm@npm:1.0.1"
@ -22581,6 +22640,89 @@ __metadata:
languageName: node
linkType: hard
"pg-cloudflare@npm:^1.1.1":
version: 1.1.1
resolution: "pg-cloudflare@npm:1.1.1"
checksum: 32aac06b5dc4588bbf78801b6267781bc7e13be672009df949d08e9627ba9fdc26924916665d4de99d47f9b0495301930547488dad889d826856976c7b3f3731
languageName: node
linkType: hard
"pg-connection-string@npm:^2.6.2":
version: 2.6.2
resolution: "pg-connection-string@npm:2.6.2"
checksum: 22265882c3b6f2320785378d0760b051294a684989163d5a1cde4009e64e84448d7bf67d9a7b9e7f69440c3ee9e2212f9aa10dd17ad6773f6143c6020cebbcb5
languageName: node
linkType: hard
"pg-int8@npm:1.0.1":
version: 1.0.1
resolution: "pg-int8@npm:1.0.1"
checksum: a1e3a05a69005ddb73e5f324b6b4e689868a447c5fa280b44cd4d04e6916a344ac289e0b8d2695d66e8e89a7fba023affb9e0e94778770ada5df43f003d664c9
languageName: node
linkType: hard
"pg-pool@npm:^3.6.1":
version: 3.6.1
resolution: "pg-pool@npm:3.6.1"
peerDependencies:
pg: ">=8.0"
checksum: 8a6513e6f74a794708c9dd16d2ccda0debadc56435ec2582de2b2e35b01315550c5dab8a0a9a2a16f4adce45523228f5739940fb7687ec7e9c300f284eb08fd1
languageName: node
linkType: hard
"pg-protocol@npm:^1.6.0":
version: 1.6.0
resolution: "pg-protocol@npm:1.6.0"
checksum: e12662d2de2011e0c3a03f6a09f435beb1025acdc860f181f18a600a5495dc38a69d753bbde1ace279c8c442536af9c1a7c11e1d0fe3fad3aa1348b28d9d2683
languageName: node
linkType: hard
"pg-types@npm:^2.1.0":
version: 2.2.0
resolution: "pg-types@npm:2.2.0"
dependencies:
pg-int8: 1.0.1
postgres-array: ~2.0.0
postgres-bytea: ~1.0.0
postgres-date: ~1.0.4
postgres-interval: ^1.1.0
checksum: bf4ec3f594743442857fb3a8dfe5d2478a04c98f96a0a47365014557cbc0b4b0cee01462c79adca863b93befbf88f876299b75b72c665b5fb84a2c94fbd10316
languageName: node
linkType: hard
"pg@npm:^8.11.3":
version: 8.11.3
resolution: "pg@npm:8.11.3"
dependencies:
buffer-writer: 2.0.0
packet-reader: 1.0.0
pg-cloudflare: ^1.1.1
pg-connection-string: ^2.6.2
pg-pool: ^3.6.1
pg-protocol: ^1.6.0
pg-types: ^2.1.0
pgpass: 1.x
peerDependencies:
pg-native: ">=3.0.1"
dependenciesMeta:
pg-cloudflare:
optional: true
peerDependenciesMeta:
pg-native:
optional: true
checksum: 8af9468b8969fa0d73a6b349216c8cbc953d938fcae5594f2d24043060e9226a072c8085fc4230172b5576fcab4c39c8563c655f271dc2a9209b6ad5370cafe5
languageName: node
linkType: hard
"pgpass@npm:1.x":
version: 1.0.5
resolution: "pgpass@npm:1.0.5"
dependencies:
split2: ^4.1.0
checksum: 947ac096c031eebdf08d989de2e9f6f156b8133d6858c7c2c06c041e1e71dda6f5f3bad3c0ec1e96a09497bbc6ef89e762eefe703b5ef9cb2804392ec52ec400
languageName: node
linkType: hard
"picocolors@npm:^0.2.1":
version: 0.2.1
resolution: "picocolors@npm:0.2.1"
@ -23632,6 +23774,36 @@ __metadata:
languageName: node
linkType: hard
"postgres-array@npm:~2.0.0":
version: 2.0.0
resolution: "postgres-array@npm:2.0.0"
checksum: 0e1e659888147c5de579d229a2d95c0d83ebdbffc2b9396d890a123557708c3b758a0a97ed305ce7f58edfa961fa9f0bbcd1ea9f08b6e5df73322e683883c464
languageName: node
linkType: hard
"postgres-bytea@npm:~1.0.0":
version: 1.0.0
resolution: "postgres-bytea@npm:1.0.0"
checksum: d844ae4ca7a941b70e45cac1261a73ee8ed39d72d3d74ab1d645248185a1b7f0ac91a3c63d6159441020f4e1f7fe64689ac56536a307b31cef361e5187335090
languageName: node
linkType: hard
"postgres-date@npm:~1.0.4":
version: 1.0.7
resolution: "postgres-date@npm:1.0.7"
checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed
languageName: node
linkType: hard
"postgres-interval@npm:^1.1.0":
version: 1.2.0
resolution: "postgres-interval@npm:1.2.0"
dependencies:
xtend: ^4.0.0
checksum: 746b71f93805ae33b03528e429dc624706d1f9b20ee81bf743263efb6a0cd79ae02a642a8a480dbc0f09547b4315ab7df6ce5ec0be77ed700bac42730f5c76b2
languageName: node
linkType: hard
"postinstall-postinstall@npm:^2.1.0":
version: 2.1.0
resolution: "postinstall-postinstall@npm:2.1.0"
@ -23968,6 +24140,13 @@ __metadata:
languageName: node
linkType: hard
"punycode@npm:1.3.2":
version: 1.3.2
resolution: "punycode@npm:1.3.2"
checksum: b8807fd594b1db33335692d1f03e8beeddde6fda7fbb4a2e32925d88d20a3aa4cd8dcc0c109ccaccbd2ba761c208dfaaada83007087ea8bfb0129c9ef1b99ed6
languageName: node
linkType: hard
"punycode@npm:^1.3.2, punycode@npm:^1.4.1":
version: 1.4.1
resolution: "punycode@npm:1.4.1"
@ -24087,6 +24266,13 @@ __metadata:
languageName: node
linkType: hard
"querystring@npm:0.2.0":
version: 0.2.0
resolution: "querystring@npm:0.2.0"
checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69
languageName: node
linkType: hard
"querystringify@npm:^2.1.1":
version: 2.2.0
resolution: "querystringify@npm:2.2.0"
@ -26407,6 +26593,20 @@ __metadata:
languageName: node
linkType: hard
"sax@npm:1.2.1":
version: 1.2.1
resolution: "sax@npm:1.2.1"
checksum: 8dca7d5e1cd7d612f98ac50bdf0b9f63fbc964b85f0c4e2eb271f8b9b47fd3bf344c4d6a592e69ecf726d1485ca62cd8a52e603bbc332d18a66af25a9a1045ad
languageName: node
linkType: hard
"sax@npm:>=0.6.0, sax@npm:~1.2.4":
version: 1.2.4
resolution: "sax@npm:1.2.4"
checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe
languageName: node
linkType: hard
"sax@npm:~1.1.1":
version: 1.1.6
resolution: "sax@npm:1.1.6"
@ -26414,13 +26614,6 @@ __metadata:
languageName: node
linkType: hard
"sax@npm:~1.2.4":
version: 1.2.4
resolution: "sax@npm:1.2.4"
checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe
languageName: node
linkType: hard
"saxes@npm:^5.0.1":
version: 5.0.1
resolution: "saxes@npm:5.0.1"
@ -27212,6 +27405,13 @@ __metadata:
languageName: node
linkType: hard
"split2@npm:^4.1.0":
version: 4.2.0
resolution: "split2@npm:4.2.0"
checksum: 05d54102546549fe4d2455900699056580cca006c0275c334611420f854da30ac999230857a85fdd9914dc2109ae50f80fda43d2a445f2aa86eccdc1dfce779d
languageName: node
linkType: hard
"sprintf-js@npm:~1.0.2":
version: 1.0.3
resolution: "sprintf-js@npm:1.0.3"
@ -29220,6 +29420,16 @@ __metadata:
languageName: node
linkType: hard
"url@npm:0.10.3":
version: 0.10.3
resolution: "url@npm:0.10.3"
dependencies:
punycode: 1.3.2
querystring: 0.2.0
checksum: 7b83ddb106c27bf9bde8629ccbe8d26e9db789c8cda5aa7db72ca2c6f9b8a88a5adf206f3e10db78e6e2d042b327c45db34c7010c1bf0d9908936a17a2b57d05
languageName: node
linkType: hard
"url@npm:~0.11.0":
version: 0.11.1
resolution: "url@npm:0.11.1"
@ -29381,6 +29591,15 @@ __metadata:
languageName: node
linkType: hard
"uuid@npm:8.0.0":
version: 8.0.0
resolution: "uuid@npm:8.0.0"
bin:
uuid: dist/bin/uuid
checksum: 56d4e23aa7ac26fa2db6bd1778db34cb8c9f5a10df1770a27167874bf6705fc8f14a4ac414af58a0d96c7653b2bd4848510b29d1c2ef8c91ccb17429c1872b5e
languageName: node
linkType: hard
"uuid@npm:^3.2.1":
version: 3.4.0
resolution: "uuid@npm:3.4.0"
@ -30483,6 +30702,16 @@ __metadata:
languageName: node
linkType: hard
"xml2js@npm:0.5.0":
version: 0.5.0
resolution: "xml2js@npm:0.5.0"
dependencies:
sax: ">=0.6.0"
xmlbuilder: ~11.0.0
checksum: 1aa71d62e5bc2d89138e3929b9ea46459157727759cbc62ef99484b778641c0cd21fb637696c052d901a22f82d092a3e740a16b4ce218e81ac59b933535124ea
languageName: node
linkType: hard
"xmlbuilder@npm:^10.0.0":
version: 10.1.1
resolution: "xmlbuilder@npm:10.1.1"
@ -30497,6 +30726,13 @@ __metadata:
languageName: node
linkType: hard
"xmlbuilder@npm:~11.0.0":
version: 11.0.1
resolution: "xmlbuilder@npm:11.0.1"
checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0
languageName: node
linkType: hard
"xmlchars@npm:^2.2.0":
version: 2.2.0
resolution: "xmlchars@npm:2.2.0"