From 071ce36cf21de7cfb9db0b71c3c76f5ad7d983a1 Mon Sep 17 00:00:00 2001 From: Shah Shalin Date: Thu, 20 Feb 2025 16:35:46 +0530 Subject: [PATCH] feature: allow overloading of query from configs. --- examples/nextjs/starter/tsconfig.json | 2 +- package-lock.json | 20 ++++--------------- .../core/src/config/snapwp-config-manager.ts | 17 +++++++++++++++- packages/query/src/query-engine/index.ts | 19 ++++++++++++++++-- packages/types/package.json | 3 ++- packages/types/src/index.ts | 1 + .../types/src/queries/current-template.ts | 4 ++++ packages/types/src/queries/global-styles.ts | 4 ++++ packages/types/src/queries/index.ts | 2 ++ 9 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 packages/types/src/queries/current-template.ts create mode 100644 packages/types/src/queries/global-styles.ts create mode 100644 packages/types/src/queries/index.ts diff --git a/examples/nextjs/starter/tsconfig.json b/examples/nextjs/starter/tsconfig.json index 4ede652e..fa9e3ac0 100644 --- a/examples/nextjs/starter/tsconfig.json +++ b/examples/nextjs/starter/tsconfig.json @@ -45,5 +45,5 @@ "**/*.tsx", ".next/types/**/*.ts" ], - "exclude": [ "node_modules", "src/__generated" ] + "exclude": [ "node_modules" ] } diff --git a/package-lock.json b/package-lock.json index 4491e7cd..13569ab3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,7 +68,6 @@ "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.13.1.tgz", "integrity": "sha512-HaAt62h3jNUXpJ1v5HNgUiCzPP1c5zc2Q/FeTb2cTk/v09YlhoqKKHQFJI7St50VCJ5q8JVIc03I5bRcBrQxsg==", "license": "MIT", - "peer": true, "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@wry/caches": "^1.0.0", @@ -6148,7 +6147,6 @@ "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -6161,7 +6159,6 @@ "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -6174,7 +6171,6 @@ "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.7.tgz", "integrity": "sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -6187,7 +6183,6 @@ "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -9967,7 +9962,6 @@ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz", "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==", "license": "MIT", - "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -10192,7 +10186,6 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "react-is": "^16.7.0" } @@ -10201,8 +10194,7 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/hosted-git-info": { "version": "2.8.9", @@ -13549,7 +13541,6 @@ "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.1.tgz", "integrity": "sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==", "license": "MIT", - "peer": true, "dependencies": { "@wry/caches": "^1.0.0", "@wry/context": "^0.7.0", @@ -14476,7 +14467,6 @@ "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "*", "react": "*" @@ -15714,7 +15704,6 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10" } @@ -16082,7 +16071,6 @@ "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.1.0" }, @@ -17071,15 +17059,13 @@ "version": "0.8.15", "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/zen-observable-ts": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", "license": "MIT", - "peer": true, "dependencies": { "zen-observable": "0.8.15" } @@ -17274,8 +17260,10 @@ "react": "^19.0.0" }, "devDependencies": { + "@apollo/client": "^3.11.4", "@types/node": "*", "@types/react": "*", + "graphql": "^16.9.0", "resolve-tspaths": "*", "tsc-watch": "*", "typescript": "*" diff --git a/packages/core/src/config/snapwp-config-manager.ts b/packages/core/src/config/snapwp-config-manager.ts index 77aeeac8..460bd3ce 100644 --- a/packages/core/src/config/snapwp-config-manager.ts +++ b/packages/core/src/config/snapwp-config-manager.ts @@ -1,7 +1,11 @@ 'use snapWPConfig'; import { isValidUrl, generateGraphqlUrl } from '@/utils'; import { Logger } from '@/logger'; -import type { BlockDefinitions } from '@snapwp/types'; +import type { + BlockDefinitions, + CurrentTemplateDocument, + GlobalStylesDocument, +} from '@snapwp/types'; import type { HTMLReactParserOptions } from 'html-react-parser'; export interface SnapWPEnv { @@ -46,6 +50,13 @@ export interface SnapWPConfig { * html-react-parser overload options */ parserOptions?: HTMLReactParserOptions; + /** + * Queries + */ + queries?: { + globalStylesDocument?: GlobalStylesDocument; + currentTemplateDocument?: CurrentTemplateDocument; + }; } /** @@ -116,6 +127,10 @@ class SnapWPConfigManager { type: 'object', required: false, }, + queries: { + type: 'object', + required: false, + }, }; /** diff --git a/packages/query/src/query-engine/index.ts b/packages/query/src/query-engine/index.ts index 3fae34d6..c547ac03 100644 --- a/packages/query/src/query-engine/index.ts +++ b/packages/query/src/query-engine/index.ts @@ -62,9 +62,17 @@ export class QueryEngine { QueryEngine.initialize(); } + const { queries } = getConfig(); + + let query = GetGlobalStylesDocument; + + if ( queries?.globalStylesDocument ) { + query = queries.globalStylesDocument; + } + try { const data = await QueryEngine.apolloClient.query( { - query: GetGlobalStylesDocument, + query, fetchPolicy: 'network-only', // @todo figure out a caching strategy, instead of always fetching from network errorPolicy: 'all', } ); @@ -99,9 +107,16 @@ export class QueryEngine { } const variables = { uri }; + const { queries } = getConfig(); + + let query = GetCurrentTemplateDocument; + + if ( queries?.currentTemplateDocument ) { + query = queries.currentTemplateDocument; + } try { const data = await QueryEngine.apolloClient.query( { - query: GetCurrentTemplateDocument, + query, variables, fetchPolicy: 'network-only', // @todo figure out a caching strategy, instead of always fetching from network errorPolicy: 'all', diff --git a/packages/types/package.json b/packages/types/package.json index 81e9e515..26909f04 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -38,6 +38,7 @@ "@types/react": "*", "resolve-tspaths": "*", "tsc-watch": "*", - "typescript": "*" + "typescript": "*", + "@apollo/client": "^3.11.4" } } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 91bf7d9c..6beb7a7a 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1 +1,2 @@ export * from './blocks'; +export * from './queries'; diff --git a/packages/types/src/queries/current-template.ts b/packages/types/src/queries/current-template.ts new file mode 100644 index 00000000..0b083018 --- /dev/null +++ b/packages/types/src/queries/current-template.ts @@ -0,0 +1,4 @@ +import type { TypedDocumentNode } from '@apollo/client'; + +// Until we figure out generic types for GraphQL queries, we'll use `any` for now. +export type CurrentTemplateDocument = TypedDocumentNode< any, any >; diff --git a/packages/types/src/queries/global-styles.ts b/packages/types/src/queries/global-styles.ts new file mode 100644 index 00000000..c0cba417 --- /dev/null +++ b/packages/types/src/queries/global-styles.ts @@ -0,0 +1,4 @@ +import type { TypedDocumentNode } from '@apollo/client'; + +// Until we figure out generic types for GraphQL queries, we'll use `any` for now. +export type GlobalStylesDocument = TypedDocumentNode< any, any >; diff --git a/packages/types/src/queries/index.ts b/packages/types/src/queries/index.ts new file mode 100644 index 00000000..891de283 --- /dev/null +++ b/packages/types/src/queries/index.ts @@ -0,0 +1,2 @@ +export * from './current-template'; +export * from './global-styles';