this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

test: use diff rather than raw output to test patches (#725)

authored by

Victor Berchet and committed by
GitHub
eb448362 92a18c46

+237 -531
+1
packages/cloudflare/package.json
··· 64 64 "@tsconfig/strictest": "catalog:", 65 65 "@types/mock-fs": "catalog:", 66 66 "@types/node": "catalog:", 67 + "diff": "^8.0.2", 67 68 "esbuild": "catalog:", 68 69 "eslint": "catalog:", 69 70 "eslint-plugin-import": "catalog:",
+118 -331
packages/cloudflare/src/cli/build/patches/plugins/next-server.spec.ts
··· 1 - import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js"; 2 1 import { describe, expect, test } from "vitest"; 3 2 3 + import { computePatchDiff } from "../../utils/test-patch.js"; 4 4 import { 5 5 buildIdRule, 6 6 createCacheHandlerRule, ··· 94 94 }`; 95 95 96 96 test("build ID", () => { 97 - expect(patchCode(nextServerCode, buildIdRule)).toMatchInlineSnapshot(` 98 - "class NextNodeServer extends _baseserver.default { 99 - constructor(options){ 100 - // Initialize super class 101 - super(options); 102 - this.handleNextImageRequest = async (req, res, parsedUrl) => { /* ... */ }; 103 - } 104 - async handleUpgrade() { 105 - // The web server does not support web sockets, it's only used for HMR in 106 - // development. 107 - } 108 - loadEnvConfig({ dev, forceReload, silent }) { 109 - (0, _env.loadEnvConfig)(this.dir, dev, silent ? { 110 - info: ()=>{}, 111 - error: ()=>{} 112 - } : _log, forceReload); 113 - } 114 - async hasPage(pathname) { 115 - var _this_nextConfig_i18n; 116 - return !!(0, _require.getMaybePagePath)(pathname, this.distDir, (_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.locales, this.enabledDirectories.app); 117 - } 118 - getBuildId() { 119 - return process.env.NEXT_BUILD_ID; 120 - } 121 - getMiddlewareManifest() { 122 - if (this.minimalMode) return null; 123 - const manifest = require(this.middlewareManifestPath); 124 - return manifest; 125 - } 126 - async loadCustomCacheHandlers() { 127 - const { cacheHandlers } = this.nextConfig.experimental; 128 - if (!cacheHandlers) return; 129 - // If we've already initialized the cache handlers interface, don't do it 130 - // again. 131 - if (!(0, _handlers.initializeCacheHandlers)()) return; 132 - for (const [kind, handler] of Object.entries(cacheHandlers)){ 133 - if (!handler) continue; 134 - (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, handler)))); 135 - } 136 - } 137 - async getIncrementalCache({ requestHeaders, requestProtocol }) { 138 - const dev = !!this.renderOpts.dev; 139 - let CacheHandler; 140 - const { cacheHandler } = this.nextConfig; 141 - if (cacheHandler) { 142 - CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, cacheHandler))); 143 - } 144 - await this.loadCustomCacheHandlers(); 145 - // incremental-cache is request specific 146 - // although can have shared caches in module scope 147 - // per-cache handler 148 - return new _incrementalcache.IncrementalCache({ 149 - fs: this.getCacheFilesystem(), 150 - dev, 151 - requestHeaders, 152 - requestProtocol, 153 - allowedRevalidateHeaderKeys: this.nextConfig.experimental.allowedRevalidateHeaderKeys, 154 - minimalMode: this.minimalMode, 155 - serverDistDir: this.serverDistDir, 156 - fetchCacheKeyPrefix: this.nextConfig.experimental.fetchCacheKeyPrefix, 157 - maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize, 158 - flushToDisk: !this.minimalMode && this.nextConfig.experimental.isrFlushToDisk, 159 - getPrerenderManifest: ()=>this.getPrerenderManifest(), 160 - CurCacheHandler: CacheHandler 161 - }); 162 - } 163 - getEnabledDirectories(dev) { 164 - const dir = dev ? this.dir : this.serverDistDir; 165 - return { 166 - app: (0, _findpagesdir.findDir)(dir, "app") ? true : false, 167 - pages: (0, _findpagesdir.findDir)(dir, "pages") ? true : false 168 - }; 169 - } 170 - // ... 171 - }" 172 - `); 97 + expect(computePatchDiff("next-server.js", nextServerCode, buildIdRule)).toMatchInlineSnapshot(` 98 + "Index: next-server.js 99 + =================================================================== 100 + --- next-server.js 101 + +++ next-server.js 102 + @@ -1,5 +1,4 @@ 103 + - 104 + class NextNodeServer extends _baseserver.default { 105 + constructor(options){ 106 + // Initialize super class 107 + super(options); 108 + @@ -19,18 +18,10 @@ 109 + var _this_nextConfig_i18n; 110 + return !!(0, _require.getMaybePagePath)(pathname, this.distDir, (_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.locales, this.enabledDirectories.app); 111 + } 112 + getBuildId() { 113 + - const buildIdFile = (0, _path.join)(this.distDir, _constants.BUILD_ID_FILE); 114 + - try { 115 + - return _fs.default.readFileSync(buildIdFile, "utf8").trim(); 116 + - } catch (err) { 117 + - if (err.code === "ENOENT") { 118 + - throw new Error(\`Could not find a production build in the '\${this.distDir}' directory. Try building your app with 'next build' before starting the production server. https://nextjs.org/docs/messages/production-start-no-build-id\`); 119 + - } 120 + - throw err; 121 + - } 122 + - } 123 + + return process.env.NEXT_BUILD_ID; 124 + +} 125 + getMiddlewareManifest() { 126 + if (this.minimalMode) return null; 127 + const manifest = require(this.middlewareManifestPath); 128 + return manifest; 129 + " 130 + `); 173 131 }); 174 132 175 133 test("middleware manifest", () => { 176 - expect(patchCode(nextServerCode, createMiddlewareManifestRule("manifest"))).toMatchInlineSnapshot(` 177 - "class NextNodeServer extends _baseserver.default { 178 - constructor(options){ 179 - // Initialize super class 180 - super(options); 181 - this.handleNextImageRequest = async (req, res, parsedUrl) => { /* ... */ }; 182 - } 183 - async handleUpgrade() { 184 - // The web server does not support web sockets, it's only used for HMR in 185 - // development. 186 - } 187 - loadEnvConfig({ dev, forceReload, silent }) { 188 - (0, _env.loadEnvConfig)(this.dir, dev, silent ? { 189 - info: ()=>{}, 190 - error: ()=>{} 191 - } : _log, forceReload); 192 - } 193 - async hasPage(pathname) { 194 - var _this_nextConfig_i18n; 195 - return !!(0, _require.getMaybePagePath)(pathname, this.distDir, (_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.locales, this.enabledDirectories.app); 196 - } 197 - getBuildId() { 198 - const buildIdFile = (0, _path.join)(this.distDir, _constants.BUILD_ID_FILE); 199 - try { 200 - return _fs.default.readFileSync(buildIdFile, "utf8").trim(); 201 - } catch (err) { 202 - if (err.code === "ENOENT") { 203 - throw new Error(\`Could not find a production build in the '\${this.distDir}' directory. Try building your app with 'next build' before starting the production server. https://nextjs.org/docs/messages/production-start-no-build-id\`); 204 - } 205 - throw err; 206 - } 207 - } 208 - getMiddlewareManifest() { 209 - return "manifest"; 210 - } 211 - async loadCustomCacheHandlers() { 212 - const { cacheHandlers } = this.nextConfig.experimental; 213 - if (!cacheHandlers) return; 214 - // If we've already initialized the cache handlers interface, don't do it 215 - // again. 216 - if (!(0, _handlers.initializeCacheHandlers)()) return; 217 - for (const [kind, handler] of Object.entries(cacheHandlers)){ 218 - if (!handler) continue; 219 - (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, handler)))); 220 - } 221 - } 222 - async getIncrementalCache({ requestHeaders, requestProtocol }) { 223 - const dev = !!this.renderOpts.dev; 224 - let CacheHandler; 225 - const { cacheHandler } = this.nextConfig; 226 - if (cacheHandler) { 227 - CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, cacheHandler))); 228 - } 229 - await this.loadCustomCacheHandlers(); 230 - // incremental-cache is request specific 231 - // although can have shared caches in module scope 232 - // per-cache handler 233 - return new _incrementalcache.IncrementalCache({ 234 - fs: this.getCacheFilesystem(), 235 - dev, 236 - requestHeaders, 237 - requestProtocol, 238 - allowedRevalidateHeaderKeys: this.nextConfig.experimental.allowedRevalidateHeaderKeys, 239 - minimalMode: this.minimalMode, 240 - serverDistDir: this.serverDistDir, 241 - fetchCacheKeyPrefix: this.nextConfig.experimental.fetchCacheKeyPrefix, 242 - maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize, 243 - flushToDisk: !this.minimalMode && this.nextConfig.experimental.isrFlushToDisk, 244 - getPrerenderManifest: ()=>this.getPrerenderManifest(), 245 - CurCacheHandler: CacheHandler 246 - }); 247 - } 248 - getEnabledDirectories(dev) { 249 - const dir = dev ? this.dir : this.serverDistDir; 250 - return { 251 - app: (0, _findpagesdir.findDir)(dir, "app") ? true : false, 252 - pages: (0, _findpagesdir.findDir)(dir, "pages") ? true : false 253 - }; 254 - } 255 - // ... 256 - }" 134 + expect(computePatchDiff("next-server.js", nextServerCode, createMiddlewareManifestRule("manifest"))) 135 + .toMatchInlineSnapshot(` 136 + "Index: next-server.js 137 + =================================================================== 138 + --- next-server.js 139 + +++ next-server.js 140 + @@ -1,5 +1,4 @@ 141 + - 142 + class NextNodeServer extends _baseserver.default { 143 + constructor(options){ 144 + // Initialize super class 145 + super(options); 146 + @@ -30,12 +29,10 @@ 147 + throw err; 148 + } 149 + } 150 + getMiddlewareManifest() { 151 + - if (this.minimalMode) return null; 152 + - const manifest = require(this.middlewareManifestPath); 153 + - return manifest; 154 + - } 155 + + return "manifest"; 156 + +} 157 + async loadCustomCacheHandlers() { 158 + const { cacheHandlers } = this.nextConfig.experimental; 159 + if (!cacheHandlers) return; 160 + // If we've already initialized the cache handlers interface, don't do it 161 + " 257 162 `); 258 163 }); 259 164 260 165 test("cache handler", () => { 261 - expect(patchCode(nextServerCode, createCacheHandlerRule("manifest"))).toMatchInlineSnapshot(` 262 - "class NextNodeServer extends _baseserver.default { 263 - constructor(options){ 264 - // Initialize super class 265 - super(options); 266 - this.handleNextImageRequest = async (req, res, parsedUrl) => { /* ... */ }; 267 - } 268 - async handleUpgrade() { 269 - // The web server does not support web sockets, it's only used for HMR in 270 - // development. 271 - } 272 - loadEnvConfig({ dev, forceReload, silent }) { 273 - (0, _env.loadEnvConfig)(this.dir, dev, silent ? { 274 - info: ()=>{}, 275 - error: ()=>{} 276 - } : _log, forceReload); 277 - } 278 - async hasPage(pathname) { 279 - var _this_nextConfig_i18n; 280 - return !!(0, _require.getMaybePagePath)(pathname, this.distDir, (_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.locales, this.enabledDirectories.app); 281 - } 282 - getBuildId() { 283 - const buildIdFile = (0, _path.join)(this.distDir, _constants.BUILD_ID_FILE); 284 - try { 285 - return _fs.default.readFileSync(buildIdFile, "utf8").trim(); 286 - } catch (err) { 287 - if (err.code === "ENOENT") { 288 - throw new Error(\`Could not find a production build in the '\${this.distDir}' directory. Try building your app with 'next build' before starting the production server. https://nextjs.org/docs/messages/production-start-no-build-id\`); 289 - } 290 - throw err; 291 - } 292 - } 293 - getMiddlewareManifest() { 294 - if (this.minimalMode) return null; 295 - const manifest = require(this.middlewareManifestPath); 296 - return manifest; 297 - } 298 - async loadCustomCacheHandlers() { 299 - const { cacheHandlers } = this.nextConfig.experimental; 300 - if (!cacheHandlers) return; 301 - // If we've already initialized the cache handlers interface, don't do it 302 - // again. 303 - if (!(0, _handlers.initializeCacheHandlers)()) return; 304 - for (const [kind, handler] of Object.entries(cacheHandlers)){ 305 - if (!handler) continue; 306 - (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, handler)))); 307 - } 308 - } 309 - async getIncrementalCache({ requestHeaders, requestProtocol }) { 310 - const dev = !!this.renderOpts.dev; 311 - let CacheHandler; 312 - const cacheHandler = null; 313 - CacheHandler = require('manifest').default; 314 - if (cacheHandler) { 315 - CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, cacheHandler))); 316 - } 317 - await this.loadCustomCacheHandlers(); 318 - // incremental-cache is request specific 319 - // although can have shared caches in module scope 320 - // per-cache handler 321 - return new _incrementalcache.IncrementalCache({ 322 - fs: this.getCacheFilesystem(), 323 - dev, 324 - requestHeaders, 325 - requestProtocol, 326 - allowedRevalidateHeaderKeys: this.nextConfig.experimental.allowedRevalidateHeaderKeys, 327 - minimalMode: this.minimalMode, 328 - serverDistDir: this.serverDistDir, 329 - fetchCacheKeyPrefix: this.nextConfig.experimental.fetchCacheKeyPrefix, 330 - maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize, 331 - flushToDisk: !this.minimalMode && this.nextConfig.experimental.isrFlushToDisk, 332 - getPrerenderManifest: ()=>this.getPrerenderManifest(), 333 - CurCacheHandler: CacheHandler 334 - }); 335 - } 336 - getEnabledDirectories(dev) { 337 - const dir = dev ? this.dir : this.serverDistDir; 338 - return { 339 - app: (0, _findpagesdir.findDir)(dir, "app") ? true : false, 340 - pages: (0, _findpagesdir.findDir)(dir, "pages") ? true : false 341 - }; 342 - } 343 - // ... 344 - }" 166 + expect(computePatchDiff("next-server.js", nextServerCode, createCacheHandlerRule("manifest"))) 167 + .toMatchInlineSnapshot(` 168 + "Index: next-server.js 169 + =================================================================== 170 + --- next-server.js 171 + +++ next-server.js 172 + @@ -1,5 +1,4 @@ 173 + - 174 + class NextNodeServer extends _baseserver.default { 175 + constructor(options){ 176 + // Initialize super class 177 + super(options); 178 + @@ -48,9 +47,10 @@ 179 + } 180 + async getIncrementalCache({ requestHeaders, requestProtocol }) { 181 + const dev = !!this.renderOpts.dev; 182 + let CacheHandler; 183 + - const { cacheHandler } = this.nextConfig; 184 + + const cacheHandler = null; 185 + +CacheHandler = require('manifest').default; 186 + if (cacheHandler) { 187 + CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, cacheHandler))); 188 + } 189 + await this.loadCustomCacheHandlers(); 190 + " 345 191 `); 346 192 }); 347 193 348 194 test("composable cache handler", () => { 349 - expect(patchCode(nextServerCode, createComposableCacheHandlersRule("manifest"))).toMatchInlineSnapshot(` 350 - "class NextNodeServer extends _baseserver.default { 351 - constructor(options){ 352 - // Initialize super class 353 - super(options); 354 - this.handleNextImageRequest = async (req, res, parsedUrl) => { /* ... */ }; 355 - } 356 - async handleUpgrade() { 357 - // The web server does not support web sockets, it's only used for HMR in 358 - // development. 359 - } 360 - loadEnvConfig({ dev, forceReload, silent }) { 361 - (0, _env.loadEnvConfig)(this.dir, dev, silent ? { 362 - info: ()=>{}, 363 - error: ()=>{} 364 - } : _log, forceReload); 365 - } 366 - async hasPage(pathname) { 367 - var _this_nextConfig_i18n; 368 - return !!(0, _require.getMaybePagePath)(pathname, this.distDir, (_this_nextConfig_i18n = this.nextConfig.i18n) == null ? void 0 : _this_nextConfig_i18n.locales, this.enabledDirectories.app); 369 - } 370 - getBuildId() { 371 - const buildIdFile = (0, _path.join)(this.distDir, _constants.BUILD_ID_FILE); 372 - try { 373 - return _fs.default.readFileSync(buildIdFile, "utf8").trim(); 374 - } catch (err) { 375 - if (err.code === "ENOENT") { 376 - throw new Error(\`Could not find a production build in the '\${this.distDir}' directory. Try building your app with 'next build' before starting the production server. https://nextjs.org/docs/messages/production-start-no-build-id\`); 377 - } 378 - throw err; 379 - } 380 - } 381 - getMiddlewareManifest() { 382 - if (this.minimalMode) return null; 383 - const manifest = require(this.middlewareManifestPath); 384 - return manifest; 385 - } 386 - async loadCustomCacheHandlers() { 387 - const cacheHandlers = null; 388 - const handlersSymbol = Symbol.for('@next/cache-handlers'); 389 - const handlersMapSymbol = Symbol.for('@next/cache-handlers-map'); 390 - const handlersSetSymbol = Symbol.for('@next/cache-handlers-set'); 391 - globalThis[handlersMapSymbol] = new Map(); 392 - globalThis[handlersMapSymbol].set("default", require('manifest').default); 393 - globalThis[handlersSetSymbol] = new Set(globalThis[handlersMapSymbol].values()); 394 - if (!cacheHandlers) return; 395 - // If we've already initialized the cache handlers interface, don't do it 396 - // again. 397 - if (!(0, _handlers.initializeCacheHandlers)()) return; 398 - for (const [kind, handler] of Object.entries(cacheHandlers)){ 399 - if (!handler) continue; 400 - (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, handler)))); 401 - } 402 - } 403 - async getIncrementalCache({ requestHeaders, requestProtocol }) { 404 - const dev = !!this.renderOpts.dev; 405 - let CacheHandler; 406 - const { cacheHandler } = this.nextConfig; 407 - if (cacheHandler) { 408 - CacheHandler = (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, cacheHandler))); 409 - } 410 - await this.loadCustomCacheHandlers(); 411 - // incremental-cache is request specific 412 - // although can have shared caches in module scope 413 - // per-cache handler 414 - return new _incrementalcache.IncrementalCache({ 415 - fs: this.getCacheFilesystem(), 416 - dev, 417 - requestHeaders, 418 - requestProtocol, 419 - allowedRevalidateHeaderKeys: this.nextConfig.experimental.allowedRevalidateHeaderKeys, 420 - minimalMode: this.minimalMode, 421 - serverDistDir: this.serverDistDir, 422 - fetchCacheKeyPrefix: this.nextConfig.experimental.fetchCacheKeyPrefix, 423 - maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize, 424 - flushToDisk: !this.minimalMode && this.nextConfig.experimental.isrFlushToDisk, 425 - getPrerenderManifest: ()=>this.getPrerenderManifest(), 426 - CurCacheHandler: CacheHandler 427 - }); 428 - } 429 - getEnabledDirectories(dev) { 430 - const dir = dev ? this.dir : this.serverDistDir; 431 - return { 432 - app: (0, _findpagesdir.findDir)(dir, "app") ? true : false, 433 - pages: (0, _findpagesdir.findDir)(dir, "pages") ? true : false 434 - }; 435 - } 436 - // ... 437 - }" 195 + expect(computePatchDiff("next-server.js", nextServerCode, createComposableCacheHandlersRule("manifest"))) 196 + .toMatchInlineSnapshot(` 197 + "Index: next-server.js 198 + =================================================================== 199 + --- next-server.js 200 + +++ next-server.js 201 + @@ -1,5 +1,4 @@ 202 + - 203 + class NextNodeServer extends _baseserver.default { 204 + constructor(options){ 205 + // Initialize super class 206 + super(options); 207 + @@ -35,9 +34,15 @@ 208 + const manifest = require(this.middlewareManifestPath); 209 + return manifest; 210 + } 211 + async loadCustomCacheHandlers() { 212 + - const { cacheHandlers } = this.nextConfig.experimental; 213 + + const cacheHandlers = null; 214 + +const handlersSymbol = Symbol.for('@next/cache-handlers'); 215 + +const handlersMapSymbol = Symbol.for('@next/cache-handlers-map'); 216 + +const handlersSetSymbol = Symbol.for('@next/cache-handlers-set'); 217 + +globalThis[handlersMapSymbol] = new Map(); 218 + +globalThis[handlersMapSymbol].set("default", require('manifest').default); 219 + +globalThis[handlersSetSymbol] = new Set(globalThis[handlersMapSymbol].values()); 220 + if (!cacheHandlers) return; 221 + // If we've already initialized the cache handlers interface, don't do it 222 + // again. 223 + if (!(0, _handlers.initializeCacheHandlers)()) return; 224 + " 438 225 `); 439 226 }); 440 227 });
+22 -64
packages/cloudflare/src/cli/build/patches/plugins/res-revalidate.spec.ts
··· 1 1 import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js"; 2 2 import { describe, expect, test } from "vitest"; 3 3 4 + import { computePatchDiff } from "../../utils/test-patch.js"; 4 5 import { rule } from "./res-revalidate.js"; 5 6 6 7 const minifiedApiPageRuntimeCode = `var r=/(?:^|,)\\s*?no-cache\\s*?(?:,|$)/;function t(e){var r=e&&Date.parse(e);return"number"==typeof r?r:NaN}e.exports=function(e,n){var o=e["if-modified-since"],i=e["if-none-match"];if(!o&&!i)return!1;var a=e["cache-control"];if(a&&r.test(a))return!1;if(i&&"*"!==i){var s=n.etag;if(!s)return!1;for(var d=!0,u=function(e){for(var r=0,t=[],n=0,o=0,i=e.length;o<i;o++)switch(e.charCodeAt(o)){case 32:n===r&&(n=r=o+1);break;case 44:t.push(e.substring(n,r)),n=r=o+1;break;default:r=o+1}return t.push(e.substring(n,r)),t}(i),l=0;l<u.length;l++){var p=u[l];if(p===s||p==="W/"+s||"W/"+p===s){d=!1;break}}if(d)return!1}if(o){var c=n["last-modified"];if(!c||!(t(c)<=t(o)))return!1}return!0}}},t={};function n(e){var o=t[e];if(void 0!==o)return o.exports;var i=t[e]={exports:{}},a=!0;try{r[e](i,i.exports,n),a=!1}finally{a&&delete t[e]}return i.exports}n.ab=__dirname+"/";var o=n(695);e.exports=o})()},"./dist/esm/server/crypto-utils.js":(e,r,t)=>{"use strict";t.r(r),t.d(r,{decryptWithSecret:()=>s,encryptWithSecret:()=>a});let n=require("crypto");var o=/*#__PURE__*/t.n(n);let i="aes-256-gcm";function a(e,r){let t=o().randomBytes(16),n=o().randomBytes(64),a=o().pbkdf2Sync(e,n,1e5,32,"sha512"),s=o().createCipheriv(i,a,t),d=Buffer.concat([s.update(r,"utf8"),s.final()]),u=s.getAuthTag();return Buffer.concat([n,t,u,d]).toString("hex")}function s(e,r){let t=Buffer.from(r,"hex"),n=t.slice(0,64),a=t.slice(64,80),s=t.slice(80,96),d=t.slice(96),u=o().pbkdf2Sync(e,n,1e5,32,"sha512"),l=o().createDecipheriv(i,u,a);return l.setAuthTag(s),l.update(d)+l.final("utf8")}},"next/dist/compiled/jsonwebtoken":e=>{"use strict";e.exports=require("next/dist/compiled/jsonwebtoken")},"next/dist/compiled/raw-body":e=>{"use strict";e.exports=require("next/dist/compiled/raw-body")},querystring:e=>{"use strict";e.exports=require("querystring")}},r={};function t(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return e[n](i,i.exports,t),i.exports}t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";t.r(n),t.d(n,{PagesAPIRouteModule:()=>z,default:()=>U});class e{static get(e,r,t){let n=Reflect.get(e,r,t);return"function"==typeof n?n.bind(e):n}static set(e,r,t,n){return Reflect.set(e,r,t,n)}static has(e,r){return Reflect.has(e,r)}static deleteProperty(e,r){return Reflect.deleteProperty(e,r)}}class r extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new r}}class o extends Headers{constructor(r){super(),this.headers=new Proxy(r,{get(t,n,o){if("symbol"==typeof n)return e.get(t,n,o);let i=n.toLowerCase(),a=Object.keys(r).find(e=>e.toLowerCase()===i);if(void 0!==a)return e.get(t,a,o)},set(t,n,o,i){if("symbol"==typeof n)return e.set(t,n,o,i);let a=n.toLowerCase(),s=Object.keys(r).find(e=>e.toLowerCase()===a);return e.set(t,s??n,o,i)},has(t,n){if("symbol"==typeof n)return e.has(t,n);let o=n.toLowerCase(),i=Object.keys(r).find(e=>e.toLowerCase()===o);return void 0!==i&&e.has(t,i)},deleteProperty(t,n){if("symbol"==typeof n)return e.deleteProperty(t,n);let o=n.toLowerCase(),i=Object.keys(r).find(e=>e.toLowerCase()===o);return void 0===i||e.deleteProperty(t,i)}})}static seal(t){return new Proxy(t,{get(t,n,o){switch(n){case"append":case"delete":case"set":return r.callable;default:return e.get(t,n,o)}}})}merge(e){return Array.isArray(e)?e.join(", "):e}static from(e){return e instanceof Headers?e:new o(e)}append(e,r){let t=this.headers[e];"string"==typeof t?this.headers[e]=[t,r]:Array.isArray(t)?t.push(r):this.headers[e]=r}delete(e){delete this.headers[e]}get(e){let r=this.headers[e];return void 0!==r?this.merge(r):null}has(e){return void 0!==this.headers[e]}set(e,r){this.headers[e]=r}forEach(e,r){for(let[t,n]of this.entries())e.call(r,n,t,this)}*entries(){for(let e of Object.keys(this.headers)){let r=e.toLowerCase(),t=this.get(r);yield[r,t]}}*keys(){for(let e of Object.keys(this.headers)){let r=e.toLowerCase();yield r}}*values(){for(let e of Object.keys(this.headers)){let r=this.get(e);yield r}}[Symbol.iterator](){return this.entries()}}let i="x-prerender-revalidate",a="x-prerender-revalidate-if-generated",s={shared:"shared",reactServerComponents:"rsc",serverSideRendering:"ssr",actionBrowser:"action-browser",apiNode:"api-node",apiEdge:"api-edge",middleware:"middleware",instrument:"instrument",edgeAsset:"edge-asset",appPagesBrowser:"app-pages-browser",pagesDirBrowser:"pages-dir-browser",pagesDirEdge:"pages-dir-edge",pagesDirNode:"pages-dir-node"};({...s,GROUP:{builtinReact:[s.reactServerComponents,s.actionBrowser],serverOnly:[s.reactServerComponents,s.actionBrowser,s.instrument,s.middleware],neutralTarget:[s.apiNode,s.apiEdge],clientOnly:[s.serverSideRendering,s.appPagesBrowser],bundled:[s.reactServerComponents,s.actionBrowser,s.serverSideRendering,s.appPagesBrowser,s.shared,s.instrument,s.middleware],appPages:[s.reactServerComponents,s.serverSideRendering,s.appPagesBrowser,s.actionBrowser]}});let d=require("next/dist/server/lib/trace/tracer");var u=/*#__PURE__*/function(e){return e.handleRequest="BaseServer.handleRequest",e.run="BaseServer.run",e.pipe="BaseServer.pipe",e.getStaticHTML="BaseServer.getStaticHTML",e.render="BaseServer.render",e.renderToResponseWithComponents="BaseServer.renderToResponseWithComponents",e.renderToResponse="BaseServer.renderToResponse",e.renderToHTML="BaseServer.renderToHTML",e.renderError="BaseServer.renderError",e.renderErrorToResponse="BaseServer.renderErrorToResponse",e.renderErrorToHTML="BaseServer.renderErrorToHTML",e.render404="BaseServer.render404",e}(u||{}),l=/*#__PURE__*/function(e){return e.loadDefaultErrorComponents="LoadComponents.loadDefaultErrorComponents",e.loadComponents="LoadComponents.loadComponents",e}(l||{}),p=/*#__PURE__*/function(e){return e.getRequestHandler="NextServer.getRequestHandler",e.getServer="NextServer.getServer",e.getServerRequestHandler="NextServer.getServerRequestHandler",e.createServer="createServer.createServer",e}(p||{}),c=/*#__PURE__*/function(e){return e.compression="NextNodeServer.compression",e.getBuildId="NextNodeServer.getBuildId",e.createComponentTree="NextNodeServer.createComponentTree",e.clientComponentLoading="NextNodeServer.clientComponentLoading",e.getLayoutOrPageModule="NextNodeServer.getLayoutOrPageModule",e.generateStaticRoutes="NextNodeServer.generateStaticRoutes",e.generateFsStaticRoutes="NextNodeServer.generateFsStaticRoutes",e.generatePublicRoutes="NextNodeServer.generatePublicRoutes",e.generateImageRoutes="NextNodeServer.generateImageRoutes.route",e.sendRenderResult="NextNodeServer.sendRenderResult",e.proxyRequest="NextNodeServer.proxyRequest",e.runApi="NextNodeServer.runApi",e.render="NextNodeServer.render",e.renderHTML="NextNodeServer.renderHTML",e.imageOptimizer="NextNodeServer.imageOptimizer",e.getPagePath="NextNodeServer.getPagePath",e.getRoutesManifest="NextNodeServer.getRoutesManifest",e.findPageComponents="NextNodeServer.findPageComponents",e.getFontManifest="NextNodeServer.getFontManifest",e.getServerComponentManifest="NextNodeServer.getServerComponentManifest",e.getRequestHandler="NextNodeServer.getRequestHandler",e.renderToHTML="NextNodeServer.renderToHTML",e.renderError="NextNodeServer.renderError",e.renderErrorToHTML="NextNodeServer.renderErrorToHTML",e.render404="NextNodeServer.render404",e.startResponse="NextNodeServer.startResponse",e.route="route",e.onProxyReq="onProxyReq",e.apiResolver="apiResolver",e.internalFetch="internalFetch",e}(c||{}),f=/*#__PURE__*/function(e){return e.startServer="startServer.startServer",e}(f||{}),g=/*#__PURE__*/function(e){return e.getServerSideProps="Render.getServerSideProps",e.getStaticProps="Render.getStaticProps",e.renderToString="Render.renderToString",e.renderDocument="Render.renderDocument",e.createBodyResult="Render.createBodyResult",e}(g||{}),v=/*#__PURE__*/function(e){return e.renderToString="AppRender.renderToString",e.renderToReadableStream="AppRender.renderToReadableStream",e.getBodyResult="AppRender.getBodyResult",e.fetch="AppRender.fetch",e}(v||{}),m=/*#__PURE__*/function(e){return e.executeRoute="Router.executeRoute",e}(m||{}),h=/*#__PURE__*/function(e){return e.runHandler="Node.runHandler",e}(h||{}),y=/*#__PURE__*/function(e){return e.runHandler="AppRouteRouteHandlers.runHandler",e}(y||{}),b=/*#__PURE__*/function(e){return e.generateMetadata="ResolveMetadata.generateMetadata",e.generateViewport="ResolveMetadata.generateViewport",e}(b||{}),x=/*#__PURE__*/function(e){return e.execute="Middleware.execute",e}(x||{});let w="__prerender_bypass",S="__next_preview_data",R=Symbol(S),_=Symbol(w);function E(e,r={}){if(_ in e)return e;let{serialize:n}=t("./dist/compiled/cookie/index.js"),o=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof o?[o]:Array.isArray(o)?o:[],n(w,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==r.path?{path:r.path}:void 0}),n(S,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==r.path?{path:r.path}:void 0})]),Object.defineProperty(e,_,{value:!0,enumerable:!1}),e}class O extends Error{constructor(e,r){super(r),this.statusCode=e}}function C(e,r,t){e.statusCode=r,e.statusMessage=t,e.end(t)}function N({req:e},r,t){let n={configurable:!0,enumerable:!0},o={...n,writable:!0};Object.defineProperty(e,r,{...n,get:()=>{let n=t();return Object.defineProperty(e,r,{...o,value:n}),n},set:t=>{Object.defineProperty(e,r,{...o,value:t})}})}class j{constructor({userland:e,definition:r}){this.userland=e,this.definition=r}}var T=t("./dist/compiled/bytes/index.js"),P=/*#__PURE__*/t.n(T);let A=e=>{let r=e.length,t=0,n=0,o=8997,i=0,a=33826,s=0,d=40164,u=0,l=52210;for(;t<r;)o^=e.charCodeAt(t++),n=435*o,i=435*a,s=435*d,u=435*l,s+=o<<8,u+=a<<8,i+=n>>>16,o=65535&n,s+=i>>>16,a=65535&i,l=u+(s>>>16)&65535,d=65535&s;return(15&l)*0x1000000000000+0x100000000*d+65536*a+(o^l>>4)},H=(e,r=!1)=>(r?'W/"':'"')+A(e).toString(36)+e.length.toString(36)+'"';"undefined"!=typeof performance&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);var M=t("./dist/compiled/fresh/index.js"),k=/*#__PURE__*/t.n(M);let B=require("stream");function L(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}var D=t("./dist/compiled/@edge-runtime/cookies/index.js"),$=t("./dist/compiled/content-type/index.js");async function q(e,r){let n,o;try{n=(0,$.parse)(e.headers["content-type"]||"text/plain")}catch{n=(0,$.parse)("text/plain")}let{type:i,parameters:a}=n,s=a.charset||"utf-8";try{let n=t("next/dist/compiled/raw-body");o=await n(e,{encoding:s,limit:r})}catch(e){if(L(e)&&"entity.too.large"===e.type)throw Object.defineProperty(new O(413,\`Body exceeded \${r} limit\`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw Object.defineProperty(new O(400,"Invalid body"),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}let d=o.toString();return"application/json"===i||"application/ld+json"===i?function(e){if(0===e.length)return{};try{return JSON.parse(e)}catch(e){throw Object.defineProperty(new O(400,"Invalid JSON"),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}}(d):"application/x-www-form-urlencoded"===i?t("querystring").decode(d):d}function I(e){return"string"==typeof e&&e.length>=16}async function K(e,r,t,n){if("string"!=typeof e||!e.startsWith("/"))throw Object.defineProperty(Error(\`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received \${e}\`),"__NEXT_ERROR_CODE",{value:"E153",enumerable:!1,configurable:!0});let o={[i]:n.previewModeId,...r.unstable_onlyGenerated?{[a]:"1"}:{}},s=[...n.allowedRevalidateHeaderKeys||[]];for(let e of((n.trustHostHeader||n.dev)&&s.push("cookie"),n.trustHostHeader&&s.push("x-vercel-protection-bypass"),Object.keys(t.headers)))s.includes(e)&&(o[e]=t.headers[e]);try{if(n.trustHostHeader){let n=await fetch(\`https://\${t.headers.host}\${e}\`,{method:"HEAD",headers:o}),i=n.headers.get("x-vercel-cache")||n.headers.get("x-nextjs-cache");if((null==i?void 0:i.toUpperCase())!=="REVALIDATED"&&200!==n.status&&!(404===n.status&&r.unstable_onlyGenerated))throw Object.defineProperty(Error(\`Invalid response \${n.status}\`),"__NEXT_ERROR_CODE",{value:"E175",enumerable:!1,configurable:!0})}else if(n.revalidate)await n.revalidate({urlPath:e,revalidateHeaders:o,opts:r});else throw Object.defineProperty(Error("Invariant: required internal revalidate method not passed to api-utils"),"__NEXT_ERROR_CODE",{value:"E174",enumerable:!1,configurable:!0})}catch(r){throw Object.defineProperty(Error(\`Failed to revalidate \${e}: \${L(r)?r.message:r}\`),"__NEXT_ERROR_CODE",{value:"E240",enumerable:!1,configurable:!0})}}async function X(e,r,n,s,d,u,l,p,c){try{var f,g,v,m;if(!s){r.statusCode=404,r.end("Not Found");return}let u=s.config||{},l=(null==(f=u.api)?void 0:f.bodyParser)!==!1,p=(null==(g=u.api)?void 0:g.responseLimit)??!0;null==(v=u.api)||v.externalResolver,N({req:e},"cookies",(m=e.headers,function(){let{cookie:e}=m;if(!e)return{};let{parse:r}=t("./dist/compiled/cookie/index.js");return r(Array.isArray(e)?e.join("; "):e)})),e.query=n,N({req:e},"previewData",()=>(function(e,r,n,s){var d,u;let l;if(n&&function(e,r){let t=o.from(e.headers);return{isOnDemandRevalidate:t.get(i)===r.previewModeId,revalidateOnlyGenerated:t.has(a)}}(e,n).isOnDemandRevalidate)return!1;if(R in e)return e[R];let p=o.from(e.headers),c=new D.RequestCookies(p),f=null==(d=c.get(w))?void 0:d.value,g=null==(u=c.get(S))?void 0:u.value;if(f&&!g&&f===n.previewModeId){let r={};return Object.defineProperty(e,R,{value:r,enumerable:!1}),r}if(!f&&!g)return!1;if(!f||!g||f!==n.previewModeId)return s||E(r),!1;try{l=t("next/dist/compiled/jsonwebtoken").verify(g,n.previewModeSigningKey)}catch{return E(r),!1}let{decryptWithSecret:v}=t("./dist/esm/server/crypto-utils.js"),m=v(Buffer.from(n.previewModeEncryptionKey),l.data);try{let r=JSON.parse(m);return Object.defineProperty(e,R,{value:r,enumerable:!1}),r}catch{return!1}})(e,r,d,!!d.multiZoneDraftMode)),N({req:e},"preview",()=>!1!==e.previewData||void 0),N({req:e},"draftMode",()=>e.preview),l&&!e.body&&(e.body=await q(e,u.api&&u.api.bodyParser&&u.api.bodyParser.sizeLimit?u.api.bodyParser.sizeLimit:"1mb"));let c=0,h=p&&"boolean"!=typeof p?P().parse(p):4194304,y=r.write,b=r.end;r.write=(...e)=>(c+=Buffer.byteLength(e[0]||""),y.apply(r,e)),r.end=(...t)=>(t.length&&"function"!=typeof t[0]&&(c+=Buffer.byteLength(t[0]||"")),p&&c>=h&&console.warn(\`API response for \${e.url} exceeds \${P().format(h)}. API Routes are meant to respond quickly. https://nextjs.org/docs/messages/api-routes-response-size-limit\`),b.apply(r,t)),r.status=e=>(r.statusCode=e,r),r.send=t=>(function(e,r,t){var n;if(null==t){r.end();return}if(204===r.statusCode||304===r.statusCode){r.removeHeader("Content-Type"),r.removeHeader("Content-Length"),r.removeHeader("Transfer-Encoding"),r.end();return}let o=r.getHeader("Content-Type");if(t instanceof B.Stream){o||r.setHeader("Content-Type","application/octet-stream"),t.pipe(r);return}let i=["object","number","boolean"].includes(typeof t),a=i?JSON.stringify(t):t;if((n=H(a))&&r.setHeader("ETag",n),!k()(e.headers,{etag:n})||(r.statusCode=304,r.end(),0)){if(Buffer.isBuffer(t)){o||r.setHeader("Content-Type","application/octet-stream"),r.setHeader("Content-Length",t.length),r.end(t);return}i&&r.setHeader("Content-Type","application/json; charset=utf-8"),r.setHeader("Content-Length",Buffer.byteLength(a)),r.end(a)}})(e,r,t),r.json=e=>{r.setHeader("Content-Type","application/json; charset=utf-8"),r.send(JSON.stringify(e))},r.redirect=(e,t)=>(function(e,r,t){if("string"==typeof r&&(t=r,r=307),"number"!=typeof r||"string"!=typeof t)throw Object.defineProperty(Error("Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination')."),"__NEXT_ERROR_CODE",{value:"E389",enumerable:!1,configurable:!0});return e.writeHead(r,{Location:t}),e.write(t),e.end(),e})(r,e,t),r.setDraftMode=(e={enable:!0})=>(function(e,r){if(!I(r.previewModeId))throw Object.defineProperty(Error("invariant: invalid previewModeId"),"__NEXT_ERROR_CODE",{value:"E169",enumerable:!1,configurable:!0});let n=r.enable?void 0:new Date(0),{serialize:o}=t("./dist/compiled/cookie/index.js"),i=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof i?[i]:Array.isArray(i)?i:[],o(w,r.previewModeId,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",expires:n})]),e})(r,Object.assign({},d,e)),r.setPreviewData=(e,n={})=>(function(e,r,n){if(!I(n.previewModeId))throw Object.defineProperty(Error("invariant: invalid previewModeId"),"__NEXT_ERROR_CODE",{value:"E169",enumerable:!1,configurable:!0});if(!I(n.previewModeEncryptionKey))throw Object.defineProperty(Error("invariant: invalid previewModeEncryptionKey"),"__NEXT_ERROR_CODE",{value:"E334",enumerable:!1,configurable:!0});if(!I(n.previewModeSigningKey))throw Object.defineProperty(Error("invariant: invalid previewModeSigningKey"),"__NEXT_ERROR_CODE",{value:"E436",enumerable:!1,configurable:!0});let o=t("next/dist/compiled/jsonwebtoken"),{encryptWithSecret:i}=t("./dist/esm/server/crypto-utils.js"),a=o.sign({data:i(Buffer.from(n.previewModeEncryptionKey),JSON.stringify(r))},n.previewModeSigningKey,{algorithm:"HS256",...void 0!==n.maxAge?{expiresIn:n.maxAge}:void 0});if(a.length>2048)throw Object.defineProperty(Error("Preview data is limited to 2KB currently, reduce how much data you are storing as preview data to continue"),"__NEXT_ERROR_CODE",{value:"E465",enumerable:!1,configurable:!0});let{serialize:s}=t("./dist/compiled/cookie/index.js"),d=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof d?[d]:Array.isArray(d)?d:[],s(w,n.previewModeId,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==n.maxAge?{maxAge:n.maxAge}:void 0,...void 0!==n.path?{path:n.path}:void 0}),s(S,a,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==n.maxAge?{maxAge:n.maxAge}:void 0,...void 0!==n.path?{path:n.path}:void 0})]),e})(r,e,Object.assign({},d,n)),r.clearPreviewData=(e={})=>E(r,e),r.revalidate=(r,t)=>K(r,t||{},e,d);let x=s.default||s;await x(e,r)}catch(t){if(null==c||c(t,e,{routerKind:"Pages Router",routePath:p||"",routeType:"route",revalidateReason:void 0}),t instanceof O)C(r,t.statusCode,t.message);else{if(l)throw L(t)&&(t.page=p),t;if(console.error(t),u)throw t;C(r,500,"Internal Server Error")}}}class z extends j{constructor(e){if(super(e),"function"!=typeof e.userland.default)throw Object.defineProperty(Error(\`Page \${e.definition.page} does not export a default function.\`),"__NEXT_ERROR_CODE",{value:"E379",enumerable:!1,configurable:!0});this.apiResolverWrapped=function(e,r){return(...t)=>((0,d.getTracer)().setRootSpanAttribute("next.route",e),(0,d.getTracer)().trace(h.runHandler,{spanName:\`executing api route (pages) \${e}\`},()=>r(...t)))}(e.definition.page,X)}async render(e,r,t){let{apiResolverWrapped:n}=this;await n(e,r,t.query,this.userland,{...t.previewProps,revalidate:t.revalidate,trustHostHeader:t.trustHostHeader,allowedRevalidateHeaderKeys:t.allowedRevalidateHeaderKeys,hostname:t.hostname,multiZoneDraftMode:t.multiZoneDraftMode,dev:t.dev},t.minimalMode,t.dev,t.page,t.onError)}}let U=z})(),module.exports=n})();`; ··· 80 81 }); 81 82 82 83 test("patch unminified code", () => { 83 - expect(patchCode(unminifiedCode, rule)) 84 - .toMatchInlineSnapshot(`"async function revalidate(urlPath, opts, req, context) { 85 - if (typeof urlPath !== 'string' || !urlPath.startsWith('/')) { 86 - throw Object.defineProperty(new Error(\`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received \${urlPath}\`), "__NEXT_ERROR_CODE", { 87 - value: "E153", 88 - enumerable: false, 89 - configurable: true 90 - }); 91 - } 92 - const revalidateHeaders = { 93 - [_constants.PRERENDER_REVALIDATE_HEADER]: context.previewModeId, 94 - ...opts.unstable_onlyGenerated ? { 95 - [_constants.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]: '1' 96 - } : {} 97 - }; 98 - const allowedRevalidateHeaderKeys = [ 99 - ...context.allowedRevalidateHeaderKeys || [] 100 - ]; 101 - if (context.trustHostHeader || context.dev) { 102 - allowedRevalidateHeaderKeys.push('cookie'); 103 - } 104 - if (context.trustHostHeader) { 105 - allowedRevalidateHeaderKeys.push('x-vercel-protection-bypass'); 106 - } 107 - for (const key of Object.keys(req.headers)){ 108 - if (allowedRevalidateHeaderKeys.includes(key)) { 109 - revalidateHeaders[key] = req.headers[key]; 110 - } 111 - } 112 - try { 113 - if (context.trustHostHeader) { 114 - const res = await (await import("@opennextjs/cloudflare")).getCloudflareContext().env.WORKER_SELF_REFERENCE.fetch(\`\${req.headers.host.includes("localhost") ? "http":"https" }://\${req.headers.host}\${urlPath}\`,{method:'HEAD', headers:revalidateHeaders}); 115 - // we use the cache header to determine successful revalidate as 116 - // a non-200 status code can be returned from a successful revalidate 117 - // e.g. notFound: true returns 404 status code but is successful 118 - const cacheHeader = res.headers.get('x-vercel-cache') || res.headers.get('x-nextjs-cache'); 119 - if ((cacheHeader == null ? void 0 : cacheHeader.toUpperCase()) !== 'REVALIDATED' && res.status !== 200 && !(res.status === 404 && opts.unstable_onlyGenerated)) { 120 - throw Object.defineProperty(new Error(\`Invalid response \${res.status}\`), "__NEXT_ERROR_CODE", { 121 - value: "E175", 122 - enumerable: false, 123 - configurable: true 124 - }); 125 - } 126 - } else if (context.revalidate) { 127 - await context.revalidate({ 128 - urlPath, 129 - revalidateHeaders, 130 - opts 131 - }); 132 - } else { 133 - throw Object.defineProperty(new Error(\`Invariant: required internal revalidate method not passed to api-utils\`), "__NEXT_ERROR_CODE", { 134 - value: "E174", 135 - enumerable: false, 136 - configurable: true 137 - }); 138 - } 139 - } catch (err) { 140 - throw Object.defineProperty(new Error(\`Failed to revalidate \${urlPath}: \${(0, _iserror.default)(err) ? err.message : err}\`), "__NEXT_ERROR_CODE", { 141 - value: "E240", 142 - enumerable: false, 143 - configurable: true 144 - }); 145 - } 146 - }"`); 84 + expect(computePatchDiff("pages-api.runtime.prod.js", unminifiedCode, rule)).toMatchInlineSnapshot(` 85 + "Index: pages-api.runtime.prod.js 86 + =================================================================== 87 + --- pages-api.runtime.prod.js 88 + +++ pages-api.runtime.prod.js 89 + @@ -27,12 +27,9 @@ 90 + } 91 + } 92 + try { 93 + if (context.trustHostHeader) { 94 + - const res = await fetch(\`https://\${req.headers.host}\${urlPath}\`, { 95 + - method: 'HEAD', 96 + - headers: revalidateHeaders 97 + - }); 98 + + const res = await (await import("@opennextjs/cloudflare")).getCloudflareContext().env.WORKER_SELF_REFERENCE.fetch(\`\${req.headers.host.includes("localhost") ? "http":"https" }://\${req.headers.host}\${urlPath}\`,{method:'HEAD', headers:revalidateHeaders}); 99 + // we use the cache header to determine successful revalidate as 100 + // a non-200 status code can be returned from a successful revalidate 101 + // e.g. notFound: true returns 404 status code but is successful 102 + const cacheHeader = res.headers.get('x-vercel-cache') || res.headers.get('x-nextjs-cache'); 103 + " 104 + `); 147 105 }); 148 106 });
+22 -77
packages/cloudflare/src/cli/build/patches/plugins/use-cache.spec.ts
··· 1 - import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js"; 2 1 import { expect, test } from "vitest"; 3 2 3 + import { computePatchDiff } from "../../utils/test-patch.js"; 4 4 import { rule } from "./use-cache.js"; 5 5 6 - const codeToPatch = `"use strict"; 6 + const code = `"use strict"; 7 7 Object.defineProperty(exports, "__esModule", { 8 8 value: true 9 9 }); ··· 81 81 `; 82 82 83 83 test("patch the createSnapshot function", () => { 84 - const patchedCode = patchCode(codeToPatch, rule); 85 - expect(patchedCode).toMatchInlineSnapshot(`""use strict"; 86 - Object.defineProperty(exports, "__esModule", { 87 - value: true 88 - }); 89 - 0 && (module.exports = { 90 - bindSnapshot: null, 91 - createAsyncLocalStorage: null, 92 - createSnapshot: null 93 - }); 94 - function _export(target, all) { 95 - for(var name in all)Object.defineProperty(target, name, { 96 - enumerable: true, 97 - get: all[name] 98 - }); 99 - } 100 - _export(exports, { 101 - bindSnapshot: function() { 102 - return bindSnapshot; 103 - }, 104 - createAsyncLocalStorage: function() { 105 - return createAsyncLocalStorage; 106 - }, 107 - createSnapshot: function() { 108 - return createSnapshot; 109 - } 110 - }); 111 - const sharedAsyncLocalStorageNotAvailableError = Object.defineProperty(new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'), "__NEXT_ERROR_CODE", { 112 - value: "E504", 113 - enumerable: false, 114 - configurable: true 115 - }); 116 - class FakeAsyncLocalStorage { 117 - disable() { 118 - throw sharedAsyncLocalStorageNotAvailableError; 119 - } 120 - getStore() { 121 - // This fake implementation of AsyncLocalStorage always returns \`undefined\`. 122 - return undefined; 123 - } 124 - run() { 125 - throw sharedAsyncLocalStorageNotAvailableError; 126 - } 127 - exit() { 128 - throw sharedAsyncLocalStorageNotAvailableError; 129 - } 130 - enterWith() { 131 - throw sharedAsyncLocalStorageNotAvailableError; 132 - } 133 - static bind(fn) { 134 - return fn; 135 - } 136 - } 137 - const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage; 138 - function createAsyncLocalStorage() { 139 - if (maybeGlobalAsyncLocalStorage) { 140 - return new maybeGlobalAsyncLocalStorage(); 141 - } 142 - return new FakeAsyncLocalStorage(); 143 - } 144 - function bindSnapshot(fn) { 145 - if (maybeGlobalAsyncLocalStorage) { 146 - return maybeGlobalAsyncLocalStorage.bind(fn); 147 - } 148 - return FakeAsyncLocalStorage.bind(fn); 149 - } 150 - function createSnapshot() { 151 - // Ignored snapshot 152 - return function(fn, ...args) { 153 - return fn(...args); 154 - }; 155 - } 156 - 157 - //# sourceMappingURL=async-local-storage.js.map 158 - "`); 84 + expect(computePatchDiff("async-local-storage.js", code, rule)).toMatchInlineSnapshot(` 85 + "Index: async-local-storage.js 86 + =================================================================== 87 + --- async-local-storage.js 88 + +++ async-local-storage.js 89 + @@ -63,11 +63,9 @@ 90 + } 91 + return FakeAsyncLocalStorage.bind(fn); 92 + } 93 + function createSnapshot() { 94 + - if (maybeGlobalAsyncLocalStorage) { 95 + - return maybeGlobalAsyncLocalStorage.snapshot(); 96 + - } 97 + + // Ignored snapshot 98 + return function(fn, ...args) { 99 + return fn(...args); 100 + }; 101 + } 102 + " 103 + `); 159 104 });
+15
packages/cloudflare/src/cli/build/utils/test-patch.ts
··· 1 + import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js"; 2 + import { createPatch } from "diff"; 3 + 4 + /** 5 + * Compute the diff resulting of applying the `rule` to `src`. 6 + * 7 + * @param filename Filename used in the patch output 8 + * @param src Content of the source code 9 + * @param rule ASTgrep rule 10 + * @returns diff in unified diff format 11 + */ 12 + export function computePatchDiff(filename: string, src: string, rule: string): string { 13 + const dst = patchCode(src, rule); 14 + return createPatch(filename, src, dst); 15 + }
+59 -59
pnpm-lock.yaml
··· 192 192 version: 5.7.3 193 193 wrangler: 194 194 specifier: 'catalog:' 195 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 195 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 196 196 197 197 examples/bugs/gh-219: 198 198 dependencies: ··· 420 420 version: 5.7.3 421 421 wrangler: 422 422 specifier: 'catalog:' 423 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 423 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 424 424 425 425 examples/e2e/app-pages-router: 426 426 dependencies: ··· 466 466 version: 5.7.3 467 467 wrangler: 468 468 specifier: 'catalog:' 469 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 469 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 470 470 471 471 examples/e2e/app-router: 472 472 dependencies: ··· 512 512 version: 5.7.3 513 513 wrangler: 514 514 specifier: 'catalog:' 515 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 515 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 516 516 517 517 examples/e2e/experimental: 518 518 dependencies: ··· 546 546 version: 5.7.3 547 547 wrangler: 548 548 specifier: 'catalog:' 549 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 549 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 550 550 551 551 examples/e2e/pages-router: 552 552 dependencies: ··· 592 592 version: 5.7.3 593 593 wrangler: 594 594 specifier: 'catalog:' 595 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 595 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 596 596 597 597 examples/e2e/shared: 598 598 dependencies: ··· 651 651 version: 5.7.3 652 652 wrangler: 653 653 specifier: 'catalog:' 654 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 654 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 655 655 656 656 examples/next-partial-prerendering: 657 657 dependencies: ··· 712 712 version: 5.5.3 713 713 wrangler: 714 714 specifier: 'catalog:' 715 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 715 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 716 716 717 717 examples/overrides/d1-tag-next: 718 718 dependencies: ··· 746 746 version: 5.7.3 747 747 wrangler: 748 748 specifier: 'catalog:' 749 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 749 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 750 750 751 751 examples/overrides/memory-queue: 752 752 dependencies: ··· 780 780 version: 5.7.3 781 781 wrangler: 782 782 specifier: 'catalog:' 783 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 783 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 784 784 785 785 examples/overrides/r2-incremental-cache: 786 786 dependencies: ··· 814 814 version: 5.7.3 815 815 wrangler: 816 816 specifier: 'catalog:' 817 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 817 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 818 818 819 819 examples/overrides/static-assets-incremental-cache: 820 820 dependencies: ··· 848 848 version: 5.7.3 849 849 wrangler: 850 850 specifier: 'catalog:' 851 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 851 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 852 852 853 853 examples/playground14: 854 854 dependencies: ··· 873 873 version: 22.2.0 874 874 wrangler: 875 875 specifier: 'catalog:' 876 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 876 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 877 877 878 878 examples/playground15: 879 879 dependencies: ··· 898 898 version: 22.2.0 899 899 wrangler: 900 900 specifier: 'catalog:' 901 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 901 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 902 902 903 903 examples/prisma: 904 904 dependencies: ··· 938 938 version: 5.7.3 939 939 wrangler: 940 940 specifier: 'catalog:' 941 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 941 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 942 942 943 943 examples/ssg-app: 944 944 dependencies: ··· 972 972 version: 5.7.3 973 973 wrangler: 974 974 specifier: 'catalog:' 975 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 975 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 976 976 977 977 examples/vercel-blog-starter: 978 978 dependencies: ··· 1027 1027 version: 5.7.3 1028 1028 wrangler: 1029 1029 specifier: 'catalog:' 1030 - version: 4.19.1(@cloudflare/workers-types@4.20250224.0) 1030 + version: 4.19.1(@cloudflare/workers-types@4.20250109.0) 1031 1031 1032 1032 packages/cloudflare: 1033 1033 dependencies: ··· 1065 1065 '@types/node': 1066 1066 specifier: 'catalog:' 1067 1067 version: 22.2.0 1068 + diff: 1069 + specifier: ^8.0.2 1070 + version: 8.0.2 1068 1071 esbuild: 1069 1072 specifier: 'catalog:' 1070 1073 version: 0.25.4 ··· 5529 5532 resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 5530 5533 engines: {node: '>=0.3.1'} 5531 5534 5535 + diff@8.0.2: 5536 + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} 5537 + engines: {node: '>=0.3.1'} 5538 + 5532 5539 dinero.js@2.0.0-alpha.8: 5533 5540 resolution: {integrity: sha512-6bl+g6oh6iQ6vPR5Pd4qr7D+P5e51GYRUT3jl8HYqYeejYC5sd9OVTTbXC3WU7L25mAIbOm+diiTVz1rL4QLwg==} 5534 5541 ··· 7022 7029 7023 7030 libsql@0.4.7: 7024 7031 resolution: {integrity: sha512-T9eIRCs6b0J1SHKYIvD8+KCJMcWZ900iZyxdnSCdqxN12Z1ijzT+jY5nrk72Jw4B0HGzms2NgpryArlJqvc3Lw==} 7032 + cpu: [x64, arm64, wasm32] 7025 7033 os: [darwin, linux, win32] 7026 7034 7027 7035 lilconfig@2.1.0: ··· 7603 7611 node-domexception@1.0.0: 7604 7612 resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 7605 7613 engines: {node: '>=10.5.0'} 7614 + deprecated: Use your platform's native DOMException instead 7606 7615 7607 7616 node-fetch@2.6.7: 7608 7617 resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} ··· 15025 15034 15026 15035 diff@4.0.2: {} 15027 15036 15037 + diff@8.0.2: {} 15038 + 15028 15039 dinero.js@2.0.0-alpha.8: 15029 15040 dependencies: 15030 15041 '@dinero.js/calculator-number': 2.0.0-alpha.8 ··· 15532 15543 '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) 15533 15544 eslint: 8.57.1 15534 15545 eslint-import-resolver-node: 0.3.9 15535 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) 15536 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) 15546 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) 15547 + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) 15537 15548 eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) 15538 15549 eslint-plugin-react: 7.36.1(eslint@8.57.1) 15539 15550 eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) ··· 15552 15563 '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) 15553 15564 eslint: 8.57.1 15554 15565 eslint-import-resolver-node: 0.3.9 15555 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) 15566 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) 15556 15567 eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) 15557 15568 eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) 15558 15569 eslint-plugin-react: 7.36.1(eslint@8.57.1) ··· 15572 15583 '@typescript-eslint/parser': 8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3) 15573 15584 eslint: 9.11.1(jiti@1.21.6) 15574 15585 eslint-import-resolver-node: 0.3.9 15575 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) 15586 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)) 15576 15587 eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)) 15577 15588 eslint-plugin-jsx-a11y: 6.10.0(eslint@9.11.1(jiti@1.21.6)) 15578 15589 eslint-plugin-react: 7.37.4(eslint@9.11.1(jiti@1.21.6)) ··· 15592 15603 '@typescript-eslint/parser': 8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3) 15593 15604 eslint: 9.19.0(jiti@1.21.6) 15594 15605 eslint-import-resolver-node: 0.3.9 15595 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) 15606 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)) 15596 15607 eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)) 15597 15608 eslint-plugin-jsx-a11y: 6.10.0(eslint@9.19.0(jiti@1.21.6)) 15598 15609 eslint-plugin-react: 7.37.4(eslint@9.19.0(jiti@1.21.6)) ··· 15612 15623 transitivePeerDependencies: 15613 15624 - supports-color 15614 15625 15615 - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1): 15626 + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1): 15616 15627 dependencies: 15617 15628 '@nolyfill/is-core-module': 1.0.39 15618 15629 debug: 4.4.0 15619 15630 enhanced-resolve: 5.17.1 15620 15631 eslint: 8.57.1 15621 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) 15632 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) 15622 15633 fast-glob: 3.3.2 15623 15634 get-tsconfig: 4.8.0 15624 15635 is-bun-module: 1.2.1 15625 15636 is-glob: 4.0.3 15626 15637 optionalDependencies: 15627 - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) 15638 + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) 15628 15639 transitivePeerDependencies: 15629 15640 - '@typescript-eslint/parser' 15630 15641 - eslint-import-resolver-node 15631 15642 - eslint-import-resolver-webpack 15632 15643 - supports-color 15633 15644 15634 - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1): 15645 + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1): 15635 15646 dependencies: 15636 15647 '@nolyfill/is-core-module': 1.0.39 15637 15648 debug: 4.4.0 15638 15649 enhanced-resolve: 5.17.1 15639 15650 eslint: 8.57.1 15640 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) 15651 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) 15641 15652 fast-glob: 3.3.2 15642 15653 get-tsconfig: 4.8.0 15643 15654 is-bun-module: 1.2.1 ··· 15650 15661 - eslint-import-resolver-webpack 15651 15662 - supports-color 15652 15663 15653 - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)): 15664 + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)): 15654 15665 dependencies: 15655 15666 '@nolyfill/is-core-module': 1.0.39 15656 15667 debug: 4.4.0 15657 15668 enhanced-resolve: 5.17.1 15658 15669 eslint: 9.11.1(jiti@1.21.6) 15659 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) 15670 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)) 15660 15671 fast-glob: 3.3.2 15661 15672 get-tsconfig: 4.8.0 15662 15673 is-bun-module: 1.2.1 ··· 15669 15680 - eslint-import-resolver-webpack 15670 15681 - supports-color 15671 15682 15672 - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)): 15683 + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)): 15673 15684 dependencies: 15674 15685 '@nolyfill/is-core-module': 1.0.39 15675 15686 debug: 4.4.0 15676 15687 enhanced-resolve: 5.17.1 15677 15688 eslint: 9.19.0(jiti@1.21.6) 15678 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) 15689 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)) 15679 15690 fast-glob: 3.3.2 15680 15691 get-tsconfig: 4.8.0 15681 15692 is-bun-module: 1.2.1 ··· 15688 15699 - eslint-import-resolver-webpack 15689 15700 - supports-color 15690 15701 15691 - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): 15702 + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): 15692 15703 dependencies: 15693 15704 debug: 3.2.7 15694 15705 optionalDependencies: 15695 15706 '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) 15696 15707 eslint: 8.57.1 15697 15708 eslint-import-resolver-node: 0.3.9 15698 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) 15709 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) 15699 15710 transitivePeerDependencies: 15700 15711 - supports-color 15701 15712 15702 - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): 15703 - dependencies: 15704 - debug: 3.2.7 15705 - optionalDependencies: 15706 - '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) 15707 - eslint: 8.57.1 15708 - eslint-import-resolver-node: 0.3.9 15709 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) 15710 - transitivePeerDependencies: 15711 - - supports-color 15712 - 15713 - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)): 15713 + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)): 15714 15714 dependencies: 15715 15715 debug: 3.2.7 15716 15716 optionalDependencies: 15717 15717 '@typescript-eslint/parser': 8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3) 15718 15718 eslint: 9.11.1(jiti@1.21.6) 15719 15719 eslint-import-resolver-node: 0.3.9 15720 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) 15720 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)) 15721 15721 transitivePeerDependencies: 15722 15722 - supports-color 15723 15723 15724 - eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)): 15724 + eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)): 15725 15725 dependencies: 15726 15726 debug: 3.2.7 15727 15727 optionalDependencies: 15728 15728 '@typescript-eslint/parser': 8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3) 15729 15729 eslint: 9.19.0(jiti@1.21.6) 15730 15730 eslint-import-resolver-node: 0.3.9 15731 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) 15731 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)) 15732 15732 transitivePeerDependencies: 15733 15733 - supports-color 15734 15734 15735 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): 15735 + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): 15736 15736 dependencies: 15737 15737 debug: 3.2.7 15738 15738 optionalDependencies: 15739 15739 '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.7.3) 15740 15740 eslint: 8.57.1 15741 15741 eslint-import-resolver-node: 0.3.9 15742 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1) 15742 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1) 15743 15743 transitivePeerDependencies: 15744 15744 - supports-color 15745 15745 15746 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)): 15746 + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)): 15747 15747 dependencies: 15748 15748 debug: 3.2.7 15749 15749 optionalDependencies: 15750 15750 '@typescript-eslint/parser': 8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3) 15751 15751 eslint: 9.11.1(jiti@1.21.6) 15752 15752 eslint-import-resolver-node: 0.3.9 15753 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) 15753 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.11.1(jiti@1.21.6)) 15754 15754 transitivePeerDependencies: 15755 15755 - supports-color 15756 15756 15757 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)): 15757 + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)): 15758 15758 dependencies: 15759 15759 debug: 3.2.7 15760 15760 optionalDependencies: 15761 15761 '@typescript-eslint/parser': 8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3) 15762 15762 eslint: 9.19.0(jiti@1.21.6) 15763 15763 eslint-import-resolver-node: 0.3.9 15764 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) 15764 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.6)) 15765 15765 transitivePeerDependencies: 15766 15766 - supports-color 15767 15767 15768 - eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): 15768 + eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): 15769 15769 dependencies: 15770 15770 '@rtsao/scc': 1.1.0 15771 15771 array-includes: 3.1.8 ··· 15776 15776 doctrine: 2.1.0 15777 15777 eslint: 8.57.1 15778 15778 eslint-import-resolver-node: 0.3.9 15779 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) 15779 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) 15780 15780 hasown: 2.0.2 15781 15781 is-core-module: 2.16.1 15782 15782 is-glob: 4.0.3 ··· 15804 15804 doctrine: 2.1.0 15805 15805 eslint: 8.57.1 15806 15806 eslint-import-resolver-node: 0.3.9 15807 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) 15807 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) 15808 15808 hasown: 2.0.2 15809 15809 is-core-module: 2.16.1 15810 15810 is-glob: 4.0.3 ··· 15833 15833 doctrine: 2.1.0 15834 15834 eslint: 9.11.1(jiti@1.21.6) 15835 15835 eslint-import-resolver-node: 0.3.9 15836 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) 15836 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)) 15837 15837 hasown: 2.0.2 15838 15838 is-core-module: 2.16.1 15839 15839 is-glob: 4.0.3 ··· 15862 15862 doctrine: 2.1.0 15863 15863 eslint: 9.19.0(jiti@1.21.6) 15864 15864 eslint-import-resolver-node: 0.3.9 15865 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)))(eslint@9.19.0(jiti@1.21.6)) 15865 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@9.19.0(jiti@1.21.6))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.19.0(jiti@1.21.6)) 15866 15866 hasown: 2.0.2 15867 15867 is-core-module: 2.16.1 15868 15868 is-glob: 4.0.3