@suspensive/react-query
Advanced tools
| //#region \0rolldown/runtime.js | ||
| var __create = Object.create; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __getProtoOf = Object.getPrototypeOf; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { | ||
| key = keys[i]; | ||
| if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { | ||
| get: ((k) => from[k]).bind(null, key), | ||
| enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable | ||
| }); | ||
| } | ||
| return to; | ||
| }; | ||
| var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { | ||
| value: mod, | ||
| enumerable: true | ||
| }) : target, mod)); | ||
| //#endregion | ||
| let node_fs = require("node:fs"); | ||
| node_fs = __toESM(node_fs); | ||
| let node_path = require("node:path"); | ||
| node_path = __toESM(node_path); | ||
| //#region src/bin/utils/logger.ts | ||
| const LOG_PREFIX = "[@suspensive/react-query]"; | ||
| const logger = { | ||
| log: (message) => console.log(LOG_PREFIX, message), | ||
| warn: (message) => console.warn(LOG_PREFIX, message), | ||
| error: (message) => console.error(LOG_PREFIX, message) | ||
| }; | ||
| //#endregion | ||
| //#region src/bin/utils/package.ts | ||
| function loadModule(name) { | ||
| try { | ||
| return require(name); | ||
| } catch { | ||
| throw new Error(`${name} is not found.`); | ||
| } | ||
| } | ||
| function getPackageJson() { | ||
| return loadModule("@suspensive/react-query/package.json"); | ||
| } | ||
| function getTanStackReactQueryPackageJson() { | ||
| return loadModule("@tanstack/react-query/package.json"); | ||
| } | ||
| function getSuspensiveReactQueryPackageJson(targetVersion) { | ||
| switch (targetVersion) { | ||
| case "4": | ||
| case "5": return loadModule(`@suspensive/react-query-${targetVersion}/package.json`); | ||
| default: throw new Error(`@suspensive/react-query-${targetVersion} is not found.`); | ||
| } | ||
| } | ||
| function getIndexFileContent(...paths) { | ||
| const basePath = node_path.default.resolve(...paths, "dist").replace(/src/, ""); | ||
| try { | ||
| return node_fs.default.readFileSync(node_path.default.join(basePath, "index.mjs"), "utf-8"); | ||
| } catch { | ||
| throw new Error(`no such file or directory, open '${paths}'`); | ||
| } | ||
| } | ||
| function getTargetSuspensiveReactQueryVersion() { | ||
| const indexFileContent = getIndexFileContent(__dirname, "../../"); | ||
| return (/* @__PURE__ */ new RegExp(/@suspensive\/react-query-(\d+)/)).exec(indexFileContent)?.[1]; | ||
| } | ||
| function getTargetSuspensiveReactQueryAPIs() { | ||
| const modules = getIndexFileContent(__dirname, "../../").matchAll(/from ['"](@suspensive\/react-query-\d+)['"]/g); | ||
| const results = []; | ||
| for (const [, moduleName] of modules) { | ||
| const module = loadModule(moduleName); | ||
| results.push(...Object.keys(module).reverse()); | ||
| } | ||
| return results; | ||
| } | ||
| function getTanStackReactQueryAPIs(majorVersionOfTanStackQuery) { | ||
| switch (majorVersionOfTanStackQuery) { | ||
| case "5": return [ | ||
| "useSuspenseQuery", | ||
| "useSuspenseQueries", | ||
| "useSuspenseInfiniteQuery", | ||
| "usePrefetchQuery", | ||
| "usePrefetchInfiniteQuery", | ||
| "queryOptions", | ||
| "infiniteQueryOptions" | ||
| ]; | ||
| case "4": return ["-"]; | ||
| default: throw new Error("@tanstack/react-query version is required"); | ||
| } | ||
| } | ||
| //#endregion | ||
| //#region src/bin/utils/copy.ts | ||
| const dir = (0, node_path.resolve)(__dirname, ".."); | ||
| function copy(version) { | ||
| const files = node_fs.default.readdirSync(dir); | ||
| if (files.length === 0) return false; | ||
| for (const file of files) if (file.includes(`v${version}`)) { | ||
| const src = (0, node_path.join)(dir, file); | ||
| const dest = (0, node_path.join)(dir, file.replace(`v${version}`, "index")); | ||
| const content = node_fs.default.readFileSync(src, "utf-8"); | ||
| try { | ||
| node_fs.default.unlinkSync(dest); | ||
| } catch {} | ||
| node_fs.default.writeFileSync(dest, content, "utf-8"); | ||
| } | ||
| return true; | ||
| } | ||
| //#endregion | ||
| //#region src/bin/utils/switchVersion.ts | ||
| function switchVersion(version) { | ||
| if (copy(version)) logger.log(`switched to version v${version}`); | ||
| else logger.error("not found version files."); | ||
| } | ||
| //#endregion | ||
| //#region src/bin/utils/deprecationWarning.ts | ||
| function showDeprecationWarning() { | ||
| const tanstackPackageJson = getTanStackReactQueryPackageJson(); | ||
| const suspensivePackageJson = getPackageJson(); | ||
| const major = tanstackPackageJson.version.split(".")[0]; | ||
| logger.warn(` | ||
| Installing @suspensive/react-query directly is deprecated. | ||
| This package will be removed in the next major version. Only @suspensive/react-query-4 and @suspensive/react-query-5 will remain. | ||
| Please use npm aliases to install the version-specific package instead: | ||
| npm install @suspensive/react-query@npm:@suspensive/react-query-${major} @tanstack/react-query@${major} | ||
| This keeps your import path as "@suspensive/react-query" while installing the correct package. | ||
| Your package.json will look like: | ||
| { | ||
| "dependencies": { | ||
| "@suspensive/react-query": "npm:@suspensive/react-query-${major}@^${suspensivePackageJson.version}" | ||
| } | ||
| } | ||
| When upgrading @tanstack/react-query, just change the alias in package.json โ no code changes required. | ||
| See: https://suspensive.org/docs/react-query/installation | ||
| `); | ||
| } | ||
| //#endregion | ||
| Object.defineProperty(exports, "__toESM", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return __toESM; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getPackageJson", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getPackageJson; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getSuspensiveReactQueryPackageJson", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getSuspensiveReactQueryPackageJson; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTanStackReactQueryAPIs", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTanStackReactQueryAPIs; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTanStackReactQueryPackageJson", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTanStackReactQueryPackageJson; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTargetSuspensiveReactQueryAPIs", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTargetSuspensiveReactQueryAPIs; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTargetSuspensiveReactQueryVersion", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTargetSuspensiveReactQueryVersion; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "logger", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return logger; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "showDeprecationWarning", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return showDeprecationWarning; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "switchVersion", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return switchVersion; | ||
| } | ||
| }); |
| import { logger } from './logger' | ||
| import { getPackageJson, getTanStackReactQueryPackageJson } from './package' | ||
| export function showDeprecationWarning() { | ||
| const tanstackPackageJson = getTanStackReactQueryPackageJson() | ||
| const suspensivePackageJson = getPackageJson() | ||
| const major = tanstackPackageJson.version.split('.')[0] | ||
| logger.warn(` | ||
| Installing @suspensive/react-query directly is deprecated. | ||
| This package will be removed in the next major version. Only @suspensive/react-query-4 and @suspensive/react-query-5 will remain. | ||
| Please use npm aliases to install the version-specific package instead: | ||
| npm install @suspensive/react-query@npm:@suspensive/react-query-${major} @tanstack/react-query@${major} | ||
| This keeps your import path as "@suspensive/react-query" while installing the correct package. | ||
| Your package.json will look like: | ||
| { | ||
| "dependencies": { | ||
| "@suspensive/react-query": "npm:@suspensive/react-query-${major}@^${suspensivePackageJson.version}" | ||
| } | ||
| } | ||
| When upgrading @tanstack/react-query, just change the alias in package.json โ no code changes required. | ||
| See: https://suspensive.org/docs/react-query/installation | ||
| `) | ||
| } |
+20
-19
| #!/usr/bin/env node | ||
| const require_switchVersion = require("./switchVersion-DgWqQlsu.cjs"); | ||
| const require_deprecationWarning = require("./deprecationWarning-DyFRkdDl.cjs"); | ||
| let _commander_js_extra_typings = require("@commander-js/extra-typings"); | ||
| let cli_table3 = require("cli-table3"); | ||
| cli_table3 = require_switchVersion.__toESM(cli_table3); | ||
| cli_table3 = require_deprecationWarning.__toESM(cli_table3); | ||
| //#region src/bin/utils/table.ts | ||
| function getStatusTable(currentTargetVersion) { | ||
| const packageJson = require_switchVersion.getPackageJson(); | ||
| const tanStackReactQueryPackageJson = require_switchVersion.getTanStackReactQueryPackageJson(); | ||
| const packageJson = require_deprecationWarning.getPackageJson(); | ||
| const tanStackReactQueryPackageJson = require_deprecationWarning.getTanStackReactQueryPackageJson(); | ||
| const tanStackReactQueryMajorVersion = tanStackReactQueryPackageJson.version.split(".")[0]; | ||
| const targetSuspensiveReactQueryPackageJson = require_switchVersion.getSuspensiveReactQueryPackageJson(tanStackReactQueryMajorVersion); | ||
| const suspensiveReactQueryAPIs = require_switchVersion.getTargetSuspensiveReactQueryAPIs(); | ||
| const tanStackReactQueryAPIs = require_switchVersion.getTanStackReactQueryAPIs(tanStackReactQueryMajorVersion); | ||
| const targetSuspensiveReactQueryPackageJson = require_deprecationWarning.getSuspensiveReactQueryPackageJson(tanStackReactQueryMajorVersion); | ||
| const suspensiveReactQueryAPIs = require_deprecationWarning.getTargetSuspensiveReactQueryAPIs(); | ||
| const tanStackReactQueryAPIs = require_deprecationWarning.getTanStackReactQueryAPIs(tanStackReactQueryMajorVersion); | ||
| const isVersionCompatible = currentTargetVersion === tanStackReactQueryMajorVersion; | ||
@@ -57,5 +57,5 @@ const statusSymbol = isVersionCompatible ? "๐ข" : "โ"; | ||
| function statusAction() { | ||
| const targetSuspensiveReactQueryVersion = require_switchVersion.getTargetSuspensiveReactQueryVersion(); | ||
| const targetSuspensiveReactQueryVersion = require_deprecationWarning.getTargetSuspensiveReactQueryVersion(); | ||
| if (!targetSuspensiveReactQueryVersion) { | ||
| require_switchVersion.logger.error("The version is not found."); | ||
| require_deprecationWarning.logger.error("The version is not found."); | ||
| return; | ||
@@ -66,14 +66,14 @@ } | ||
| function switchAction(version) { | ||
| if (version === "4") require_switchVersion.switchVersion(4); | ||
| else if (version === "5") require_switchVersion.switchVersion(5); | ||
| if (version === "4") require_deprecationWarning.switchVersion(4); | ||
| else if (version === "5") require_deprecationWarning.switchVersion(5); | ||
| else console.warn("[@suspensive/react-query]", `version v${version} is not supported.`); | ||
| } | ||
| function fixAction() { | ||
| const tanStackReactQueryPackageJson = require_switchVersion.getTanStackReactQueryPackageJson(); | ||
| const targetSuspensiveReactQueryVersion = require_switchVersion.getTargetSuspensiveReactQueryVersion(); | ||
| const tanStackReactQueryPackageJson = require_deprecationWarning.getTanStackReactQueryPackageJson(); | ||
| const targetSuspensiveReactQueryVersion = require_deprecationWarning.getTargetSuspensiveReactQueryVersion(); | ||
| const tanStackReactQueryMajorVersion = tanStackReactQueryPackageJson.version.split(".")[0]; | ||
| if (targetSuspensiveReactQueryVersion === tanStackReactQueryMajorVersion) require_switchVersion.logger.log("The versions are compatible."); | ||
| if (targetSuspensiveReactQueryVersion === tanStackReactQueryMajorVersion) require_deprecationWarning.logger.log("The versions are compatible."); | ||
| else { | ||
| require_switchVersion.logger.log("Switching to the compatible version..."); | ||
| require_switchVersion.switchVersion(Number(tanStackReactQueryMajorVersion)); | ||
| require_deprecationWarning.logger.log("Switching to the compatible version..."); | ||
| require_deprecationWarning.switchVersion(Number(tanStackReactQueryMajorVersion)); | ||
| } | ||
@@ -83,4 +83,4 @@ } | ||
| //#region src/bin/cli.ts | ||
| const packageJson = require_switchVersion.getPackageJson(); | ||
| const program = new _commander_js_extra_typings.Command(packageJson.name).configureOutput({ writeErr: (str) => require_switchVersion.logger.error(str.replace("error: ", "")) }); | ||
| const packageJson = require_deprecationWarning.getPackageJson(); | ||
| const program = new _commander_js_extra_typings.Command(packageJson.name).configureOutput({ writeErr: (str) => require_deprecationWarning.logger.error(str.replace("error: ", "")) }); | ||
| program.description(packageJson.description).version(packageJson.version, "-v, --version", "Displays the currently installed version of @suspensive/react-query"); | ||
@@ -92,5 +92,6 @@ program.command("status").description("Checks compatibility with the currently used version of @tanstack/react-query").action(statusAction); | ||
| program.parse(process.argv); | ||
| require_deprecationWarning.showDeprecationWarning(); | ||
| } catch (error) { | ||
| if (error instanceof Error) require_switchVersion.logger.error(error.message); | ||
| if (error instanceof Error) require_deprecationWarning.logger.error(error.message); | ||
| } | ||
| //#endregion |
@@ -1,15 +0,16 @@ | ||
| const require_switchVersion = require("./switchVersion-DgWqQlsu.cjs"); | ||
| const require_deprecationWarning = require("./deprecationWarning-DyFRkdDl.cjs"); | ||
| //#region src/bin/postinstall.ts | ||
| const { version } = require_switchVersion.getTanStackReactQueryPackageJson(); | ||
| switch (version.split(".")[0]) { | ||
| const tanstackPackageJson = require_deprecationWarning.getTanStackReactQueryPackageJson(); | ||
| switch (tanstackPackageJson.version.split(".")[0]) { | ||
| case "4": | ||
| require_switchVersion.switchVersion(4); | ||
| require_deprecationWarning.switchVersion(4); | ||
| break; | ||
| case "5": | ||
| require_switchVersion.switchVersion(5); | ||
| require_deprecationWarning.switchVersion(5); | ||
| break; | ||
| default: | ||
| require_switchVersion.logger.error(`version v${version} is not supported.`); | ||
| require_deprecationWarning.logger.error(`version v${tanstackPackageJson.version} is not supported.`); | ||
| break; | ||
| } | ||
| require_deprecationWarning.showDeprecationWarning(); | ||
| //#endregion |
+3
-3
| { | ||
| "name": "@suspensive/react-query", | ||
| "version": "3.20.0", | ||
| "version": "3.20.1", | ||
| "description": "Suspensive interfaces for @tanstack/react-query", | ||
@@ -47,4 +47,4 @@ "keywords": [ | ||
| "@commander-js/extra-typings": "^13.0.0", | ||
| "@suspensive/react-query-4": "^3.20.0", | ||
| "@suspensive/react-query-5": "^3.20.0", | ||
| "@suspensive/react-query-4": "^3.20.1", | ||
| "@suspensive/react-query-5": "^3.20.1", | ||
| "cli-table3": "^0.6.5", | ||
@@ -51,0 +51,0 @@ "commander": "^13.0.0" |
+8
-13
| # Introduction | ||
| @suspensive/react-query provide components and hooks to use @tanstack/react-query@4's suspense option easily. | ||
| @suspensive/react-query provides components and hooks to use @tanstack/react-query's suspense option easily. | ||
| [](https://www.npmjs.com/package/@suspensive/react-query) | ||
| [](https://www.npmjs.com/package/@suspensive/react-query) | ||
| [](https://www.npmjs.com/package/@suspensive/react-query) | ||
| ## Installation | ||
| @suspensive/react-query is available on npm. | ||
| Install the package that matches your @tanstack/react-query version. By using npm aliases, the import path remains `@suspensive/react-query` across your codebase. When upgrading your @tanstack/react-query version, you only need to change the alias in package.json โ no code changes required. | ||
| From version 2.2.0 onwards, it supports both v4 and v5 of @tanstack/react-query. Depending on the version of @tanstack/react-query specified in your package.json dependencies, the appropriate version of @suspensive/react-query will be used automatically. | ||
| #### @tanstack/react-query v5 | ||
| To use the latest stable version, run the following command. | ||
| ```shell npm2yarn | ||
| npm install @suspensive/react-query @tanstack/react-query | ||
| npm install @suspensive/react-query@npm:@suspensive/react-query-5 @tanstack/react-query@5 | ||
| ``` | ||
| To use @tanstack/react-query v4, run the following command. | ||
| @tanstack/react-query v4 supports [lower version browsers](https://suspensive.org/docs/react-query/motivation#solution-for-the-issue-of-tanstackreact-query-v5-not-being-able-to-support-lower-version-browsers-due-to-es-private-field) compared to v5. | ||
| #### @tanstack/react-query v4 | ||
| @tanstack/react-query v4 supports [lower version browsers](https://suspensive.org/docs/react-query/motivation#v5-drops-support-for-older-browsers) compared to v5. | ||
| ```shell npm2yarn | ||
| npm install @suspensive/react-query @tanstack/react-query@4 | ||
| npm install @suspensive/react-query@npm:@suspensive/react-query-4 @tanstack/react-query@4 | ||
| ``` |
+2
-0
@@ -5,2 +5,3 @@ #!/usr/bin/env node | ||
| import { fixAction, statusAction, switchAction } from './utils/commands' | ||
| import { showDeprecationWarning } from './utils/deprecationWarning' | ||
| import { logger } from './utils/logger' | ||
@@ -43,2 +44,3 @@ import { getPackageJson } from './utils/package' | ||
| program.parse(process.argv) | ||
| showDeprecationWarning() | ||
| } catch (error) { | ||
@@ -45,0 +47,0 @@ if (error instanceof Error) { |
| import { beforeEach, describe, expect, it, vi } from 'vitest' | ||
| import { getTanStackReactQueryPackageJson } from './utils/package' | ||
| import { showDeprecationWarning } from './utils/deprecationWarning' | ||
| import { getPackageJson, getTanStackReactQueryPackageJson } from './utils/package' | ||
| import { switchVersion } from './utils/switchVersion' | ||
| vi.mock('./utils/deprecationWarning') | ||
| vi.mock('./utils/package') | ||
@@ -11,2 +13,3 @@ vi.mock('./utils/switchVersion') | ||
| const mockGetTanStackReactQueryPackageJson = vi.mocked(getTanStackReactQueryPackageJson) | ||
| const mockGetPackageJson = vi.mocked(getPackageJson) | ||
| const mockSwitchVersion = vi.mocked(switchVersion) | ||
@@ -20,2 +23,7 @@ | ||
| }) | ||
| mockGetPackageJson.mockReturnValue({ | ||
| name: '@suspensive/react-query', | ||
| version: '3.20.0', | ||
| description: 'Suspensive interfaces for @tanstack/react-query', | ||
| }) | ||
@@ -37,2 +45,3 @@ await import('./postinstall') | ||
| expect(mockConsoleError).not.toHaveBeenCalled() | ||
| expect(showDeprecationWarning).toHaveBeenCalledTimes(1) | ||
| }) | ||
@@ -47,2 +56,3 @@ | ||
| expect(mockConsoleError).not.toHaveBeenCalled() | ||
| expect(showDeprecationWarning).toHaveBeenCalledTimes(1) | ||
| }) | ||
@@ -56,3 +66,4 @@ | ||
| expect(mockConsoleError).toHaveBeenCalledWith('[@suspensive/react-query]', 'version v3.3.4 is not supported.') | ||
| expect(showDeprecationWarning).toHaveBeenCalledTimes(1) | ||
| }) | ||
| }) |
@@ -0,1 +1,2 @@ | ||
| import { showDeprecationWarning } from './utils/deprecationWarning' | ||
| import { logger } from './utils/logger' | ||
@@ -5,5 +6,5 @@ import { getTanStackReactQueryPackageJson } from './utils/package' | ||
| const { version } = getTanStackReactQueryPackageJson() | ||
| const tanstackPackageJson = getTanStackReactQueryPackageJson() | ||
| const major = version.split('.')[0] | ||
| const major = tanstackPackageJson.version.split('.')[0] | ||
@@ -18,4 +19,6 @@ switch (major) { | ||
| default: | ||
| logger.error(`version v${version} is not supported.`) | ||
| logger.error(`version v${tanstackPackageJson.version} is not supported.`) | ||
| break | ||
| } | ||
| showDeprecationWarning() |
@@ -5,3 +5,4 @@ const LOG_PREFIX = '[@suspensive/react-query]' | ||
| log: (message: string) => console.log(LOG_PREFIX, message), | ||
| warn: (message: string) => console.warn(LOG_PREFIX, message), | ||
| error: (message: string) => console.error(LOG_PREFIX, message), | ||
| } |
| //#region \0rolldown/runtime.js | ||
| var __create = Object.create; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __getProtoOf = Object.getPrototypeOf; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { | ||
| key = keys[i]; | ||
| if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { | ||
| get: ((k) => from[k]).bind(null, key), | ||
| enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable | ||
| }); | ||
| } | ||
| return to; | ||
| }; | ||
| var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { | ||
| value: mod, | ||
| enumerable: true | ||
| }) : target, mod)); | ||
| //#endregion | ||
| let node_fs = require("node:fs"); | ||
| node_fs = __toESM(node_fs); | ||
| let node_path = require("node:path"); | ||
| node_path = __toESM(node_path); | ||
| //#region src/bin/utils/logger.ts | ||
| const LOG_PREFIX = "[@suspensive/react-query]"; | ||
| const logger = { | ||
| log: (message) => console.log(LOG_PREFIX, message), | ||
| error: (message) => console.error(LOG_PREFIX, message) | ||
| }; | ||
| //#endregion | ||
| //#region src/bin/utils/package.ts | ||
| function loadModule(name) { | ||
| try { | ||
| return require(name); | ||
| } catch { | ||
| throw new Error(`${name} is not found.`); | ||
| } | ||
| } | ||
| function getPackageJson() { | ||
| return loadModule("@suspensive/react-query/package.json"); | ||
| } | ||
| function getTanStackReactQueryPackageJson() { | ||
| return loadModule("@tanstack/react-query/package.json"); | ||
| } | ||
| function getSuspensiveReactQueryPackageJson(targetVersion) { | ||
| switch (targetVersion) { | ||
| case "4": | ||
| case "5": return loadModule(`@suspensive/react-query-${targetVersion}/package.json`); | ||
| default: throw new Error(`@suspensive/react-query-${targetVersion} is not found.`); | ||
| } | ||
| } | ||
| function getIndexFileContent(...paths) { | ||
| const basePath = node_path.default.resolve(...paths, "dist").replace(/src/, ""); | ||
| try { | ||
| return node_fs.default.readFileSync(node_path.default.join(basePath, "index.mjs"), "utf-8"); | ||
| } catch { | ||
| throw new Error(`no such file or directory, open '${paths}'`); | ||
| } | ||
| } | ||
| function getTargetSuspensiveReactQueryVersion() { | ||
| const indexFileContent = getIndexFileContent(__dirname, "../../"); | ||
| return (/* @__PURE__ */ new RegExp(/@suspensive\/react-query-(\d+)/)).exec(indexFileContent)?.[1]; | ||
| } | ||
| function getTargetSuspensiveReactQueryAPIs() { | ||
| const modules = getIndexFileContent(__dirname, "../../").matchAll(/from ['"](@suspensive\/react-query-\d+)['"]/g); | ||
| const results = []; | ||
| for (const [, moduleName] of modules) { | ||
| const module = loadModule(moduleName); | ||
| results.push(...Object.keys(module).reverse()); | ||
| } | ||
| return results; | ||
| } | ||
| function getTanStackReactQueryAPIs(majorVersionOfTanStackQuery) { | ||
| switch (majorVersionOfTanStackQuery) { | ||
| case "5": return [ | ||
| "useSuspenseQuery", | ||
| "useSuspenseQueries", | ||
| "useSuspenseInfiniteQuery", | ||
| "usePrefetchQuery", | ||
| "usePrefetchInfiniteQuery", | ||
| "queryOptions", | ||
| "infiniteQueryOptions" | ||
| ]; | ||
| case "4": return ["-"]; | ||
| default: throw new Error("@tanstack/react-query version is required"); | ||
| } | ||
| } | ||
| //#endregion | ||
| //#region src/bin/utils/copy.ts | ||
| const dir = (0, node_path.resolve)(__dirname, ".."); | ||
| function copy(version) { | ||
| const files = node_fs.default.readdirSync(dir); | ||
| if (files.length === 0) return false; | ||
| for (const file of files) if (file.includes(`v${version}`)) { | ||
| const src = (0, node_path.join)(dir, file); | ||
| const dest = (0, node_path.join)(dir, file.replace(`v${version}`, "index")); | ||
| const content = node_fs.default.readFileSync(src, "utf-8"); | ||
| try { | ||
| node_fs.default.unlinkSync(dest); | ||
| } catch {} | ||
| node_fs.default.writeFileSync(dest, content, "utf-8"); | ||
| } | ||
| return true; | ||
| } | ||
| //#endregion | ||
| //#region src/bin/utils/switchVersion.ts | ||
| function switchVersion(version) { | ||
| if (copy(version)) logger.log(`switched to version v${version}`); | ||
| else logger.error("not found version files."); | ||
| } | ||
| //#endregion | ||
| Object.defineProperty(exports, "__toESM", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return __toESM; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getPackageJson", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getPackageJson; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getSuspensiveReactQueryPackageJson", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getSuspensiveReactQueryPackageJson; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTanStackReactQueryAPIs", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTanStackReactQueryAPIs; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTanStackReactQueryPackageJson", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTanStackReactQueryPackageJson; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTargetSuspensiveReactQueryAPIs", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTargetSuspensiveReactQueryAPIs; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "getTargetSuspensiveReactQueryVersion", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return getTargetSuspensiveReactQueryVersion; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "logger", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return logger; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, "switchVersion", { | ||
| enumerable: true, | ||
| get: function() { | ||
| return switchVersion; | ||
| } | ||
| }); |
-26
| # ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๊ฐ | ||
| @suspensive/react-query๋ @tanstack/react-query@4์ suspense ์ต์ ์ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ ์ปดํฌ๋ํธ์ ํ ์ ์ ๊ณตํฉ๋๋ค. | ||
| [](https://www.npmjs.com/package/@suspensive/react-query) | ||
| [](https://www.npmjs.com/package/@suspensive/react-query) | ||
| [](https://www.npmjs.com/package/@suspensive/react-query) | ||
| ## ์ค์นํ๊ธฐ | ||
| @suspensive/react-query๋ npm์ ์์ต๋๋ค. | ||
| 2.2.0 ๋ฒ์ ์ดํ๋ก๋ @tanstack/react-query์ v4์ v5๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค. package.json์ dependencies์ @tanstack/react-query์ ๋ฒ์ ์ ๋ฐ๋ผ ์๋์ผ๋ก ์๋ง์ @suspensive/react-query ๋ฒ์ ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. | ||
| @suspensive/react-query ๋ npm์ ์์ต๋๋ค. ์ต์ ์์ ๋ฒ์ ์ ์ค์นํ๊ธฐ ์ํด ์๋ ์ปค๋งจ๋๋ฅผ ์คํํ์ธ์ | ||
| ```shell npm2yarn | ||
| npm install @suspensive/react-query @tanstack/react-query | ||
| ``` | ||
| @tanstack/react-query v4๋ @tanstack/react-query v5 ๋ณด๋ค [๋ ๋ฎ์ ๋ฒ์ ์ ๋ธ๋ผ์ฐ์ ](https://suspensive.org/ko/docs/react-query/motivation#tanstackreact-query-v5%EC%9D%98-es-private-field%EB%A1%9C-%EC%9D%B8%ED%95%B4-%EC%A0%80%EB%B2%84%EC%A0%84%EC%9D%98-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EB%A5%BC-%EC%A7%80%EC%9B%90%ED%95%98%EC%A7%80-%EB%AA%BB%ED%95%98%EB%8A%94-%EB%AC%B8%EC%A0%9C%EB%A5%BC-%ED%95%B4%EA%B2%B0%ED%95%A9%EB%8B%88%EB%8B%A4)๋ฅผ ์ง์ํฉ๋๋ค. | ||
| @tanstack/react-query v4๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ฉด ์๋ ์ปค๋งจ๋๋ฅผ ์คํํ์ธ์. | ||
| ```shell npm2yarn | ||
| npm install @suspensive/react-query @tanstack/react-query@4 | ||
| ``` |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
66788
1.85%1386
5.24%22
-18.52%3
50%