From 055b47e285da7a3fb412349a2111c78687f47b44 Mon Sep 17 00:00:00 2001 From: Saihajpreet Singh Date: Wed, 13 Dec 2023 13:06:36 -0500 Subject: [PATCH] feat: validate graphql schema at build time --- packages/cli/package.json | 4 + packages/cli/src/subgraph.ts | 6 +- packages/cli/src/validation/schema.ts | 42 ++- pnpm-lock.yaml | 431 +++++++++++++++++++++++--- 4 files changed, 436 insertions(+), 47 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index af8430f06..f3ba0eb02 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -31,6 +31,10 @@ "@babel/core": "^7.20.5", "@babel/preset-typescript": "^7.18.6", "@float-capital/float-subgraph-uncrashable": "^0.0.0-alpha.4", + "@graphql-tools/graphql-file-loader": "^8.0.0", + "@graphql-tools/load": "^8.0.1", + "@graphql-tools/schema": "^10.0.2", + "@graphql-tools/url-loader": "^8.0.1", "@oclif/core": "2.8.6", "@oclif/plugin-autocomplete": "^2.3.6", "@oclif/plugin-not-found": "^2.4.0", diff --git a/packages/cli/src/subgraph.ts b/packages/cli/src/subgraph.ts index 1c2b105c1..2425cd407 100644 --- a/packages/cli/src/subgraph.ts +++ b/packages/cli/src/subgraph.ts @@ -76,11 +76,11 @@ export default class Subgraph { }); } - static validateSchema(manifest: any, { resolveFile }: { resolveFile: ResolveFile }) { + static async validateSchema(manifest: any, { resolveFile }: { resolveFile: ResolveFile }) { subgraphDebug.extend('validate')('Validating schema in manifest'); const filename = resolveFile(manifest.getIn(['schema', 'file'])); subgraphDebug.extend('validate')('Loaded schema from %s', filename); - const validationErrors = validation.validateSchema(filename); + const validationErrors = await validation.validateSchema(filename); let errors: immutable.Collection; if (validationErrors.size > 0) { @@ -296,7 +296,7 @@ More than one template named '${name}', template names must be unique.`, // Validate the schema subgraphDebug.extend('manifest')('Validating schema'); - Subgraph.validateSchema(manifest, { resolveFile }); + await Subgraph.validateSchema(manifest, { resolveFile }); // Perform other validations const protocolSubgraph = protocol.getSubgraph({ diff --git a/packages/cli/src/validation/schema.ts b/packages/cli/src/validation/schema.ts index 37b4c7bc9..783680fb4 100644 --- a/packages/cli/src/validation/schema.ts +++ b/packages/cli/src/validation/schema.ts @@ -1,7 +1,12 @@ -import fs from 'fs'; +import * as fs from 'node:fs'; import * as graphql from 'graphql/language'; import immutable from 'immutable'; +import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader'; +import { loadSchema as toolsLoadSchema } from '@graphql-tools/load'; +import { mergeSchemas } from '@graphql-tools/schema'; +import { UrlLoader } from '@graphql-tools/url-loader'; import debugFactory from '../debug'; +import fetchWrapper from '../fetch'; const validateDebugger = debugFactory('graph-cli:validation'); @@ -1041,11 +1046,38 @@ const validateNamingCollisions = (local: any[], imported: any) => { return validateNamingCollisionsInTypes(local.concat(imported)); }; -export const validateSchema = (filename: string) => { +// TODO - temporarily not using `master` see https://github.com/graphprotocol/graph-node/pull/5069 +// const META_SCHEMA_GRAPH_NODE= "https://raw.githubusercontent.com/graphprotocol/graph-node/master/graph/src/schema/meta.graphql" +const META_SCHEMA_GRAPH_NODE = + 'https://raw.githubusercontent.com/graphprotocol/graph-node/saihaj/fix-meta-schema/graph/src/schema/meta.graphql'; + +export const validateSchema = async (filename: string) => { validateDebugger('Validating schema: %s', filename); - const doc = loadSchema(filename); - validateDebugger('Loaded schema: %s', filename); - const schema = parseSchema(doc); + + try { + const [doc, metaSchema] = await Promise.all([ + toolsLoadSchema(filename, { + loaders: [new GraphQLFileLoader()], + assumeValid: true, + assumeValidSDL: true, + }), + toolsLoadSchema(META_SCHEMA_GRAPH_NODE, { + loaders: [new UrlLoader()], + fetch: fetchWrapper, + }), + ]); + console.log('doc', doc); + validateDebugger('Loaded schema: %s', filename); + + const b = mergeSchemas({ + schemas: [metaSchema], + }); + console.log(b); + } catch (e) { + console.trace('Error', e); + } + + const schema = parseSchema(loadSchema(filename)); validateDebugger.extend('schema')('Parsed schema: %M', schema); return List.of( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42a641471..3eec9a58e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,10 +53,10 @@ importers: examples/arweave-blocks-transactions: devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts examples/cosmos-block-filtering: @@ -69,10 +69,10 @@ importers: version: 6.26.0 devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts mustache: specifier: ^4.2.0 @@ -88,10 +88,10 @@ importers: version: 6.26.0 devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts examples/cosmos-validator-delegations: @@ -107,10 +107,10 @@ importers: version: 6.26.0 devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts mustache: specifier: ^4.2.0 @@ -126,10 +126,10 @@ importers: version: 6.26.0 devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts mustache: specifier: ^4.2.0 @@ -178,10 +178,10 @@ importers: version: 5.0.4 devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts '@nomicfoundation/hardhat-toolbox': specifier: ^2.0.2 @@ -196,10 +196,10 @@ importers: examples/ethereum-gravatar: devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts '@nomicfoundation/hardhat-toolbox': specifier: ^2.0.2 @@ -211,16 +211,16 @@ importers: examples/example-subgraph: devDependencies: '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts examples/matic-lens-protocol-posts-subgraph: dependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts devDependencies: matchstick-as: @@ -230,25 +230,25 @@ importers: examples/near-blocks: devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts examples/near-receipts: devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli '@graphprotocol/graph-ts': - specifier: 0.31.0 + specifier: 0.32.0 version: link:../../packages/ts examples/substreams-powered-subgraph: devDependencies: '@graphprotocol/graph-cli': - specifier: 0.62.0 + specifier: 0.63.1 version: link:../../packages/cli packages/cli: @@ -262,6 +262,18 @@ importers: '@float-capital/float-subgraph-uncrashable': specifier: ^0.0.0-alpha.4 version: 0.0.0-alpha.6 + '@graphql-tools/graphql-file-loader': + specifier: ^8.0.0 + version: 8.0.0(graphql@15.5.0) + '@graphql-tools/load': + specifier: ^8.0.1 + version: 8.0.1(graphql@15.5.0) + '@graphql-tools/schema': + specifier: ^10.0.2 + version: 10.0.2(graphql@15.5.0) + '@graphql-tools/url-loader': + specifier: ^8.0.1 + version: 8.0.1(@types/node@20.6.2)(graphql@15.5.0) '@oclif/core': specifier: 2.8.6 version: 2.8.6(@types/node@20.6.2)(typescript@5.0.2) @@ -413,6 +425,15 @@ packages: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.19 + /@ardatan/sync-fetch@0.0.1: + resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} + engines: {node: '>=14'} + dependencies: + node-fetch: 2.6.9 + transitivePeerDependencies: + - encoding + dev: false + /@babel/code-frame@7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} @@ -1782,7 +1803,7 @@ packages: dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-transform-typescript': 7.20.2(@babel/core@7.20.5) transitivePeerDependencies: - supports-color @@ -2454,6 +2475,226 @@ packages: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true + /@graphql-tools/batch-execute@9.0.2(graphql@15.5.0): + resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + dataloader: 2.2.2 + graphql: 15.5.0 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@graphql-tools/delegate@10.0.3(graphql@15.5.0): + resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/batch-execute': 9.0.2(graphql@15.5.0) + '@graphql-tools/executor': 1.2.0(graphql@15.5.0) + '@graphql-tools/schema': 10.0.2(graphql@15.5.0) + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + dataloader: 2.2.2 + graphql: 15.5.0 + tslib: 2.6.2 + dev: false + + /@graphql-tools/executor-graphql-ws@1.1.0(graphql@15.5.0): + resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + '@types/ws': 8.5.10 + graphql: 15.5.0 + graphql-ws: 5.14.2(graphql@15.5.0) + isomorphic-ws: 5.0.0(ws@8.15.1) + tslib: 2.6.2 + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@graphql-tools/executor-http@1.0.5(@types/node@20.6.2)(graphql@15.5.0): + resolution: {integrity: sha512-roQyDLOAywyaCTPOhwXiT/WDr0bfuVhqOXjECsnrIl/1TMPDUYjiT2sW6Gz6pqnYMmokdhyvlV6D5d7WtIrKsA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + '@repeaterjs/repeater': 3.0.5 + '@whatwg-node/fetch': 0.9.14 + extract-files: 11.0.0 + graphql: 15.5.0 + meros: 1.3.0(@types/node@20.6.2) + tslib: 2.6.2 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + dev: false + + /@graphql-tools/executor-legacy-ws@1.0.5(graphql@15.5.0): + resolution: {integrity: sha512-w54AZ7zkNuvpyV09FH+eGHnnAmaxhBVHg4Yh2ICcsMfRg0brkLt77PlbjBuxZ4HY8XZnKJaYWf+tKazQZtkQtg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + '@types/ws': 8.5.10 + graphql: 15.5.0 + isomorphic-ws: 5.0.0(ws@8.15.1) + tslib: 2.6.2 + ws: 8.15.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@graphql-tools/executor@1.2.0(graphql@15.5.0): + resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@15.5.0) + '@repeaterjs/repeater': 3.0.5 + graphql: 15.5.0 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@graphql-tools/graphql-file-loader@8.0.0(graphql@15.5.0): + resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/import': 7.0.0(graphql@15.5.0) + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + globby: 11.1.0 + graphql: 15.5.0 + tslib: 2.6.2 + unixify: 1.0.0 + dev: false + + /@graphql-tools/import@7.0.0(graphql@15.5.0): + resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + graphql: 15.5.0 + resolve-from: 5.0.0 + tslib: 2.6.2 + dev: false + + /@graphql-tools/load@8.0.1(graphql@15.5.0): + resolution: {integrity: sha512-qSMsKngJhDqRbuWyo3NvakEFqFL6+eSjy8ooJ1o5qYD26N7dqXkKzIMycQsX7rBK19hOuINAUSaRcVWH6hTccw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/schema': 10.0.2(graphql@15.5.0) + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + graphql: 15.5.0 + p-limit: 3.1.0 + tslib: 2.6.2 + dev: false + + /@graphql-tools/merge@9.0.1(graphql@15.5.0): + resolution: {integrity: sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + graphql: 15.5.0 + tslib: 2.6.2 + dev: false + + /@graphql-tools/schema@10.0.2(graphql@15.5.0): + resolution: {integrity: sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 9.0.1(graphql@15.5.0) + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + graphql: 15.5.0 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@graphql-tools/url-loader@8.0.1(@types/node@20.6.2)(graphql@15.5.0): + resolution: {integrity: sha512-B2k8KQEkEQmfV1zhurT5GLoXo8jbXP+YQHUayhCSxKYlRV7j/1Fhp1b21PDM8LXIDGlDRXaZ0FbWKOs7eYXDuQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 10.0.3(graphql@15.5.0) + '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@15.5.0) + '@graphql-tools/executor-http': 1.0.5(@types/node@20.6.2)(graphql@15.5.0) + '@graphql-tools/executor-legacy-ws': 1.0.5(graphql@15.5.0) + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + '@graphql-tools/wrap': 10.0.1(graphql@15.5.0) + '@types/ws': 8.5.10 + '@whatwg-node/fetch': 0.9.14 + graphql: 15.5.0 + isomorphic-ws: 5.0.0(ws@8.15.1) + tslib: 2.6.2 + value-or-promise: 1.0.12 + ws: 8.15.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@graphql-tools/utils@10.0.11(graphql@15.5.0): + resolution: {integrity: sha512-vVjXgKn6zjXIlYBd7yJxCVMYGb5j18gE3hx3Qw3mNsSEsYQXbJbPdlwb7Fc9FogsJei5AaqiQerqH4kAosp1nQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@15.5.0) + cross-inspect: 1.0.0 + dset: 3.1.3 + graphql: 15.5.0 + tslib: 2.6.2 + dev: false + + /@graphql-tools/wrap@10.0.1(graphql@15.5.0): + resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/delegate': 10.0.3(graphql@15.5.0) + '@graphql-tools/schema': 10.0.2(graphql@15.5.0) + '@graphql-tools/utils': 10.0.11(graphql@15.5.0) + graphql: 15.5.0 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + + /@graphql-typed-document-node/core@3.2.0(graphql@15.5.0): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 15.5.0 + dev: false + /@humanwhocodes/config-array@0.11.13: resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} @@ -2819,6 +3060,10 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@kamilkisiela/fast-url-parser@1.1.4: + resolution: {integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==} + dev: false + /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: @@ -3680,7 +3925,7 @@ packages: '@peculiar/asn1-schema': 2.3.6 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.2 - tslib: 2.5.0 + tslib: 2.6.2 webcrypto-core: 1.7.7 dev: false @@ -3746,6 +3991,10 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false + /@repeaterjs/repeater@3.0.5: + resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} + dev: false + /@rescript/std@9.0.0: resolution: {integrity: sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ==} dev: false @@ -4281,6 +4530,12 @@ packages: '@types/node': 20.6.2 dev: false + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 20.6.2 + dev: false + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} @@ -4427,6 +4682,11 @@ packages: resolution: {integrity: sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w==} dev: false + /@whatwg-node/events@0.1.1: + resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} + engines: {node: '>=16.0.0'} + dev: false + /@whatwg-node/fetch@0.8.4: resolution: {integrity: sha512-xK0NGWt49P+JmsdfN+8zmHzZoscENrV0KL1SyyncvWkc6vbFmSqGSpvItEBuhj1PAfTGFEUpyiRMCsut2hLy/Q==} dependencies: @@ -4437,6 +4697,14 @@ packages: web-streams-polyfill: 3.2.1 dev: false + /@whatwg-node/fetch@0.9.14: + resolution: {integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==} + engines: {node: '>=16.0.0'} + dependencies: + '@whatwg-node/node-fetch': 0.5.2 + urlpattern-polyfill: 9.0.0 + dev: false + /@whatwg-node/node-fetch@0.3.4: resolution: {integrity: sha512-gP1MN6DiHVbhkLWH1eCELhE2ZtLRxb+HRKu4eYze1Tijxz0uT1T2kk3lseZp94txzxCfbxGFU0jsWkxNdH3EXA==} dependencies: @@ -4444,7 +4712,18 @@ packages: busboy: 1.6.0 fast-querystring: 1.1.1 fast-url-parser: 1.1.3 - tslib: 2.5.0 + tslib: 2.6.2 + dev: false + + /@whatwg-node/node-fetch@0.5.2: + resolution: {integrity: sha512-uVYCnmWoCiGbv5AtnSx5nZ1kQJ+U8f269/yHB62y7wXPdjYx6o4sBSefnfwUI8HNf4rf16VbvGR/AzuABhDD5g==} + engines: {node: '>=16.0.0'} + dependencies: + '@kamilkisiela/fast-url-parser': 1.1.4 + '@whatwg-node/events': 0.1.1 + busboy: 1.6.0 + fast-querystring: 1.1.1 + tslib: 2.6.2 dev: false /JSONStream@1.3.2: @@ -6185,6 +6464,13 @@ packages: whatwg-fetch: 2.0.3 dev: true + /cross-inspect@1.0.0: + resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==} + engines: {node: '>=16.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -6262,6 +6548,10 @@ packages: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true + /dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + dev: false + /date-fns@2.29.3: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} engines: {node: '>=0.11'} @@ -6589,6 +6879,11 @@ packages: engines: {node: '>=10'} dev: true + /dset@3.1.3: + resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} + engines: {node: '>=4'} + dev: false + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -7644,6 +7939,11 @@ packages: tmp: 0.0.33 dev: true + /extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + dev: false + /extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -7664,16 +7964,6 @@ packages: resolution: {integrity: sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg==} dev: false - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -7683,7 +7973,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -8223,7 +8512,7 @@ packages: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 glob: 7.2.3 ignore: 5.2.4 merge2: 1.4.1 @@ -8235,7 +8524,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -8324,6 +8613,15 @@ packages: graphql: 16.6.0 dev: false + /graphql-ws@5.14.2(graphql@15.5.0): + resolution: {integrity: sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 15.5.0 + dev: false + /graphql@15.5.0: resolution: {integrity: sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==} engines: {node: '>= 10.x'} @@ -9308,6 +9606,14 @@ packages: ws: 7.5.9 dev: false + /isomorphic-ws@5.0.0(ws@8.15.1): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.15.1 + dev: false + /isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} @@ -10648,6 +10954,18 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /meros@1.3.0(@types/node@20.6.2): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.6.2 + dev: false + /micromark-core-commonmark@1.0.6: resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} dependencies: @@ -11447,6 +11765,13 @@ packages: validate-npm-package-license: 3.0.4 dev: true + /normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: false + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -12624,7 +12949,6 @@ packages: /remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: true /repeating@2.0.1: resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} @@ -14271,6 +14595,13 @@ packages: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} + /unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + dependencies: + normalize-path: 2.1.1 + dev: false + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -14308,6 +14639,10 @@ packages: braces: 3.0.2 dev: false + /urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + dev: false + /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} @@ -14381,6 +14716,11 @@ packages: builtins: 1.0.3 dev: true + /value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + dev: false + /varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} dev: false @@ -14743,6 +15083,19 @@ packages: utf-8-validate: optional: true + /ws@8.15.1: + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xml2js@0.4.19: resolution: {integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==} dependencies: