"use strict"; /* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ (() => { var exports = {}; exports.id = "app/api/search/route"; exports.ids = ["app/api/search/route"]; exports.modules = { /***/ "next/dist/compiled/next-server/app-page.runtime.dev.js": /*!*************************************************************************!*\ !*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***! \*************************************************************************/ /***/ ((module) => { module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js"); /***/ }), /***/ "next/dist/compiled/next-server/app-route.runtime.dev.js": /*!**************************************************************************!*\ !*** external "next/dist/compiled/next-server/app-route.runtime.dev.js" ***! \**************************************************************************/ /***/ ((module) => { module.exports = require("next/dist/compiled/next-server/app-route.runtime.dev.js"); /***/ }), /***/ "undici": /*!*************************!*\ !*** external "undici" ***! \*************************/ /***/ ((module) => { module.exports = require("undici"); /***/ }), /***/ "buffer": /*!*************************!*\ !*** external "buffer" ***! \*************************/ /***/ ((module) => { module.exports = require("buffer"); /***/ }), /***/ "node:stream": /*!******************************!*\ !*** external "node:stream" ***! \******************************/ /***/ ((module) => { module.exports = require("node:stream"); /***/ }), /***/ "stream": /*!*************************!*\ !*** external "stream" ***! \*************************/ /***/ ((module) => { module.exports = require("stream"); /***/ }), /***/ "string_decoder": /*!*********************************!*\ !*** external "string_decoder" ***! \*********************************/ /***/ ((module) => { module.exports = require("string_decoder"); /***/ }), /***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fsearch%2Froute&page=%2Fapi%2Fsearch%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fsearch%2Froute.ts&appDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fsearch%2Froute&page=%2Fapi%2Fsearch%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fsearch%2Froute.ts&appDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ patchFetch: () => (/* binding */ patchFetch),\n/* harmony export */ requestAsyncStorage: () => (/* binding */ requestAsyncStorage),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ serverHooks: () => (/* binding */ serverHooks),\n/* harmony export */ staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-route/module.compiled */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js\");\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/server/lib/patch-fetch */ \"(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var D_Projects_Dev_Holiday_Travel_App_app_api_search_route_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/api/search/route.ts */ \"(rsc)/./app/api/search/route.ts\");\n\n\n\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppRouteRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_ROUTE,\n page: \"/api/search/route\",\n pathname: \"/api/search\",\n filename: \"route\",\n bundlePath: \"app/api/search/route\"\n },\n resolvedPagePath: \"D:\\\\Projects\\\\Dev\\\\Holiday Travel App\\\\app\\\\api\\\\search\\\\route.ts\",\n nextConfigOutput,\n userland: D_Projects_Dev_Holiday_Travel_App_app_api_search_route_ts__WEBPACK_IMPORTED_MODULE_3__\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks } = routeModule;\nconst originalPathname = \"/api/search/route\";\nfunction patchFetch() {\n return (0,next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__.patchFetch)({\n serverHooks,\n staticGenerationAsyncStorage\n });\n}\n\n\n//# sourceMappingURL=app-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZhcGklMkZzZWFyY2glMkZyb3V0ZSZwYWdlPSUyRmFwaSUyRnNlYXJjaCUyRnJvdXRlJmFwcFBhdGhzPSZwYWdlUGF0aD1wcml2YXRlLW5leHQtYXBwLWRpciUyRmFwaSUyRnNlYXJjaCUyRnJvdXRlLnRzJmFwcERpcj1EJTNBJTVDUHJvamVjdHMlNUNEZXYlNUNIb2xpZGF5JTIwVHJhdmVsJTIwQXBwJTVDYXBwJnBhZ2VFeHRlbnNpb25zPXRzeCZwYWdlRXh0ZW5zaW9ucz10cyZwYWdlRXh0ZW5zaW9ucz1qc3gmcGFnZUV4dGVuc2lvbnM9anMmcm9vdERpcj1EJTNBJTVDUHJvamVjdHMlNUNEZXYlNUNIb2xpZGF5JTIwVHJhdmVsJTIwQXBwJmlzRGV2PXRydWUmdHNjb25maWdQYXRoPXRzY29uZmlnLmpzb24mYmFzZVBhdGg9JmFzc2V0UHJlZml4PSZuZXh0Q29uZmlnT3V0cHV0PSZwcmVmZXJyZWRSZWdpb249Jm1pZGRsZXdhcmVDb25maWc9ZTMwJTNEISIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBc0c7QUFDdkM7QUFDYztBQUNpQjtBQUM5RjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0hBQW1CO0FBQzNDO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsWUFBWTtBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlFQUFpRTtBQUN6RTtBQUNBO0FBQ0EsV0FBVyw0RUFBVztBQUN0QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ3VIOztBQUV2SCIsInNvdXJjZXMiOlsid2VicGFjazovL2hvbGlkYXktZGVhbC1maW5kZXIvPzJlZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUm91dGVSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1yb3V0ZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBwYXRjaEZldGNoIGFzIF9wYXRjaEZldGNoIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3BhdGNoLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiRDpcXFxcUHJvamVjdHNcXFxcRGV2XFxcXEhvbGlkYXkgVHJhdmVsIEFwcFxcXFxhcHBcXFxcYXBpXFxcXHNlYXJjaFxcXFxyb3V0ZS50c1wiO1xuLy8gV2UgaW5qZWN0IHRoZSBuZXh0Q29uZmlnT3V0cHV0IGhlcmUgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0gaW4gdGhlIHJvdXRlXG4vLyBtb2R1bGUuXG5jb25zdCBuZXh0Q29uZmlnT3V0cHV0ID0gXCJcIlxuY29uc3Qgcm91dGVNb2R1bGUgPSBuZXcgQXBwUm91dGVSb3V0ZU1vZHVsZSh7XG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgICBraW5kOiBSb3V0ZUtpbmQuQVBQX1JPVVRFLFxuICAgICAgICBwYWdlOiBcIi9hcGkvc2VhcmNoL3JvdXRlXCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9hcGkvc2VhcmNoXCIsXG4gICAgICAgIGZpbGVuYW1lOiBcInJvdXRlXCIsXG4gICAgICAgIGJ1bmRsZVBhdGg6IFwiYXBwL2FwaS9zZWFyY2gvcm91dGVcIlxuICAgIH0sXG4gICAgcmVzb2x2ZWRQYWdlUGF0aDogXCJEOlxcXFxQcm9qZWN0c1xcXFxEZXZcXFxcSG9saWRheSBUcmF2ZWwgQXBwXFxcXGFwcFxcXFxhcGlcXFxcc2VhcmNoXFxcXHJvdXRlLnRzXCIsXG4gICAgbmV4dENvbmZpZ091dHB1dCxcbiAgICB1c2VybGFuZFxufSk7XG4vLyBQdWxsIG91dCB0aGUgZXhwb3J0cyB0aGF0IHdlIG5lZWQgdG8gZXhwb3NlIGZyb20gdGhlIG1vZHVsZS4gVGhpcyBzaG91bGRcbi8vIGJlIGVsaW1pbmF0ZWQgd2hlbiB3ZSd2ZSBtb3ZlZCB0aGUgb3RoZXIgcm91dGVzIHRvIHRoZSBuZXcgZm9ybWF0LiBUaGVzZVxuLy8gYXJlIHVzZWQgdG8gaG9vayBpbnRvIHRoZSByb3V0ZS5cbmNvbnN0IHsgcmVxdWVzdEFzeW5jU3RvcmFnZSwgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSwgc2VydmVySG9va3MgfSA9IHJvdXRlTW9kdWxlO1xuY29uc3Qgb3JpZ2luYWxQYXRobmFtZSA9IFwiL2FwaS9zZWFyY2gvcm91dGVcIjtcbmZ1bmN0aW9uIHBhdGNoRmV0Y2goKSB7XG4gICAgcmV0dXJuIF9wYXRjaEZldGNoKHtcbiAgICAgICAgc2VydmVySG9va3MsXG4gICAgICAgIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2VcbiAgICB9KTtcbn1cbmV4cG9ydCB7IHJvdXRlTW9kdWxlLCByZXF1ZXN0QXN5bmNTdG9yYWdlLCBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLCBzZXJ2ZXJIb29rcywgb3JpZ2luYWxQYXRobmFtZSwgcGF0Y2hGZXRjaCwgIH07XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1yb3V0ZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fsearch%2Froute&page=%2Fapi%2Fsearch%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fsearch%2Froute.ts&appDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n"); /***/ }), /***/ "(rsc)/./app/api/search/route.ts": /*!*********************************!*\ !*** ./app/api/search/route.ts ***! \*********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ POST: () => (/* binding */ POST)\n/* harmony export */ });\n/* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! zod */ \"(rsc)/./node_modules/zod/v3/types.js\");\n/* harmony import */ var _lib_providers_yowDeals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/lib/providers/yowDeals */ \"(rsc)/./lib/providers/yowDeals.ts\");\n/* harmony import */ var _lib_providers_linkBuilders__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/providers/linkBuilders */ \"(rsc)/./lib/providers/linkBuilders.ts\");\n/* harmony import */ var _lib_score__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/score */ \"(rsc)/./lib/score.ts\");\n\n\n\n\nconst schema = zod__WEBPACK_IMPORTED_MODULE_3__.object({\n origin: zod__WEBPACK_IMPORTED_MODULE_3__.string().min(3).max(4),\n destinations: zod__WEBPACK_IMPORTED_MODULE_3__.array(zod__WEBPACK_IMPORTED_MODULE_3__.string().min(3)).nonempty(),\n startDate: zod__WEBPACK_IMPORTED_MODULE_3__.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/),\n endDate: zod__WEBPACK_IMPORTED_MODULE_3__.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/),\n tripLengthMin: zod__WEBPACK_IMPORTED_MODULE_3__.number().int().positive(),\n tripLengthMax: zod__WEBPACK_IMPORTED_MODULE_3__.number().int().positive(),\n budget: zod__WEBPACK_IMPORTED_MODULE_3__.number().int().positive().optional().nullable(),\n currency: zod__WEBPACK_IMPORTED_MODULE_3__.string().default(\"CAD\").optional(),\n nonStopOnly: zod__WEBPACK_IMPORTED_MODULE_3__.boolean().optional(),\n sources: zod__WEBPACK_IMPORTED_MODULE_3__.array(zod__WEBPACK_IMPORTED_MODULE_3__.string()).optional(),\n preferences: zod__WEBPACK_IMPORTED_MODULE_3__.object({\n beach: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n pool: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n golf: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n spa: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n food: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n nightlife: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n shopping: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n culture: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n outdoor: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional(),\n family: zod__WEBPACK_IMPORTED_MODULE_3__.number().min(0).max(10).optional()\n }).optional()\n});\nasync function POST(req) {\n try {\n const body = await req.json();\n const parsed = schema.parse(body);\n const sources = (parsed.sources && parsed.sources.length ? parsed.sources : [\n \"Deals\",\n \"Skyscanner\",\n \"GoogleFlights\",\n \"AirCanada\"\n ]).map((s)=>s.toLowerCase());\n const tasks = [];\n if (sources.includes(\"deals\")) tasks.push((0,_lib_providers_yowDeals__WEBPACK_IMPORTED_MODULE_0__.fetchCityDeals)(parsed));\n if (sources.includes(\"skyscanner\")) tasks.push((0,_lib_providers_linkBuilders__WEBPACK_IMPORTED_MODULE_1__.buildSkyscannerLinks)(parsed));\n if (sources.includes(\"googleflights\")) tasks.push((0,_lib_providers_linkBuilders__WEBPACK_IMPORTED_MODULE_1__.buildGoogleFlightsLinks)(parsed));\n if (sources.includes(\"aircanada\")) tasks.push((0,_lib_providers_linkBuilders__WEBPACK_IMPORTED_MODULE_1__.buildAirCanadaLinks)(parsed));\n // Demo mode fallback\n const demo = process.env.DEMO === \"true\";\n let results = [];\n if (demo) {\n results = [\n {\n id: \"demo1\",\n title: \"\\uD83D\\uDD25 Ottawa → Cancun (7 nights)\",\n source: \"Demo\",\n link: \"#\",\n price: 685,\n currency: \"CAD\",\n startDate: parsed.startDate,\n endDate: parsed.startDate,\n nights: 7,\n origin: parsed.origin,\n destination: parsed.destinations[0],\n stops: 0\n },\n {\n id: \"demo2\",\n title: \"Ottawa → Punta Cana (7 nights)\",\n source: \"Demo\",\n link: \"#\",\n price: 712,\n currency: \"CAD\",\n startDate: parsed.startDate,\n endDate: parsed.startDate,\n nights: 7,\n origin: parsed.origin,\n destination: parsed.destinations[0],\n stops: 1\n }\n ];\n } else {\n const settled = await Promise.allSettled(tasks);\n for (const s of settled){\n if (s.status === \"fulfilled\") results.push(...s.value);\n }\n }\n // Filter and score\n if (parsed.budget) results = results.filter((r)=>!r.price || r.price <= (parsed.budget || 0));\n if (parsed.nonStopOnly) results = results.filter((r)=>r.stops == null || r.stops === 0);\n results.forEach((r)=>r.score = (0,_lib_score__WEBPACK_IMPORTED_MODULE_2__.scoreDeal)(r, parsed.preferences));\n results.sort((a, b)=>(b.score || 0) - (a.score || 0));\n // Optional n8n webhook\n const webhook = process.env.N8N_WEBHOOK_URL;\n if (webhook) {\n try {\n await fetch(webhook, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\"\n },\n body: JSON.stringify({\n criteria: parsed,\n top10: results.slice(0, 10)\n })\n });\n } catch (e) {}\n }\n return new Response(JSON.stringify({\n results\n }), {\n headers: {\n \"content-type\": \"application/json\"\n }\n });\n } catch (e) {\n return new Response(JSON.stringify({\n error: e?.message || \"Invalid payload\"\n }), {\n status: 400,\n headers: {\n \"content-type\": \"application/json\"\n }\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RixJQUFJdUIsT0FBT2xCLFdBQVcsRUFBRStCLFVBQVVBLFFBQVFjLE1BQU0sQ0FBQ0MsQ0FBQUEsSUFBS0EsRUFBRVAsS0FBSyxJQUFJLFFBQVFPLEVBQUVQLEtBQUssS0FBSztRQUVyRlIsUUFBUWdCLE9BQU8sQ0FBQ0QsQ0FBQUEsSUFBS0EsRUFBRUUsS0FBSyxHQUFHdkUscURBQVNBLENBQUNxRSxHQUFHNUIsT0FBT2YsV0FBVztRQUM5RDRCLFFBQVFrQixJQUFJLENBQUMsQ0FBQ0MsR0FBRUMsSUFBTSxDQUFDQSxFQUFFSCxLQUFLLElBQUksS0FBTUUsQ0FBQUEsRUFBRUYsS0FBSyxJQUFJO1FBRW5ELHVCQUF1QjtRQUN2QixNQUFNSSxVQUFVeEIsUUFBUUMsR0FBRyxDQUFDd0IsZUFBZTtRQUMzQyxJQUFJRCxTQUFTO1lBQ1gsSUFBSTtnQkFDRixNQUFNRSxNQUFNRixTQUFTO29CQUFFRyxRQUFRO29CQUFRQyxTQUFTO3dCQUFFLGdCQUFnQjtvQkFBbUI7b0JBQUd4QyxNQUFNeUMsS0FBS0MsU0FBUyxDQUFDO3dCQUFFQyxVQUFVekM7d0JBQVEwQyxPQUFPN0IsUUFBUThCLEtBQUssQ0FBQyxHQUFFO29CQUFJO2dCQUFHO1lBQ2pLLEVBQUUsT0FBTUMsR0FBRyxDQUFlO1FBQzVCO1FBRUEsT0FBTyxJQUFJQyxTQUFTTixLQUFLQyxTQUFTLENBQUM7WUFBRTNCO1FBQVEsSUFBSTtZQUFFeUIsU0FBUztnQkFBRSxnQkFBZ0I7WUFBbUI7UUFBRTtJQUNyRyxFQUFFLE9BQU9NLEdBQVE7UUFDZixPQUFPLElBQUlDLFNBQVNOLEtBQUtDLFNBQVMsQ0FBQztZQUFFTSxPQUFPRixHQUFHRyxXQUFXO1FBQWtCLElBQUk7WUFBRXRCLFFBQVE7WUFBS2EsU0FBUztnQkFBRSxnQkFBZ0I7WUFBbUI7UUFBRTtJQUNqSjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaG9saWRheS1kZWFsLWZpbmRlci8uL2FwcC9hcGkvc2VhcmNoL3JvdXRlLnRzPzc4MzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmV4dFJlcXVlc3QgfSBmcm9tIFwibmV4dC9zZXJ2ZXJcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaENyaXRlcmlhLCBEZWFsIH0gZnJvbSBcIkAvbGliL3R5cGVzXCI7XG5pbXBvcnQgeyBmZXRjaENpdHlEZWFscyB9IGZyb20gXCJAL2xpYi9wcm92aWRlcnMveW93RGVhbHNcIjtcbmltcG9ydCB7IGJ1aWxkU2t5c2Nhbm5lckxpbmtzLCBidWlsZEdvb2dsZUZsaWdodHNMaW5rcywgYnVpbGRBaXJDYW5hZGFMaW5rcyB9IGZyb20gXCJAL2xpYi9wcm92aWRlcnMvbGlua0J1aWxkZXJzXCI7XG5pbXBvcnQgeyBzY29yZURlYWwgfSBmcm9tIFwiQC9saWIvc2NvcmVcIjtcblxuY29uc3Qgc2NoZW1hID0gei5vYmplY3Qoe1xuICBvcmlnaW46IHouc3RyaW5nKCkubWluKDMpLm1heCg0KSxcbiAgZGVzdGluYXRpb25zOiB6LmFycmF5KHouc3RyaW5nKCkubWluKDMpKS5ub25lbXB0eSgpLFxuICBzdGFydERhdGU6IHouc3RyaW5nKCkucmVnZXgoL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvKSxcbiAgZW5kRGF0ZTogei5zdHJpbmcoKS5yZWdleCgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8pLFxuICB0cmlwTGVuZ3RoTWluOiB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCksXG4gIHRyaXBMZW5ndGhNYXg6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSxcbiAgYnVkZ2V0OiB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKS5kZWZhdWx0KFwiQ0FEXCIpLm9wdGlvbmFsKCksXG4gIG5vblN0b3BPbmx5OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBzb3VyY2VzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHByZWZlcmVuY2VzOiB6Lm9iamVjdCh7XG4gICAgYmVhY2g6IHoubnVtYmVyKCkubWluKDApLm1heCgxMCkub3B0aW9uYWwoKSxcbiAgICBwb29sOiB6Lm51bWJlcigpLm1pbigwKS5tYXgoMTApLm9wdGlvbmFsKCksXG4gICAgZ29sZjogei5udW1iZXIoKS5taW4oMCkubWF4KDEwKS5vcHRpb25hbCgpLFxuICAgIHNwYTogei5udW1iZXIoKS5taW4oMCkubWF4KDEwKS5vcHRpb25hbCgpLFxuICAgIGZvb2Q6IHoubnVtYmVyKCkubWluKDApLm1heCgxMCkub3B0aW9uYWwoKSxcbiAgICBuaWdodGxpZmU6IHoubnVtYmVyKCkubWluKDApLm1heCgxMCkub3B0aW9uYWwoKSxcbiAgICBzaG9wcGluZzogei5udW1iZXIoKS5taW4oMCkubWF4KDEwKS5vcHRpb25hbCgpLFxuICAgIGN1bHR1cmU6IHoubnVtYmVyKCkubWluKDApLm1heCgxMCkub3B0aW9uYWwoKSxcbiAgICBvdXRkb29yOiB6Lm51bWJlcigpLm1pbigwKS5tYXgoMTApLm9wdGlvbmFsKCksXG4gICAgZmFtaWx5OiB6Lm51bWJlcigpLm1pbigwKS5tYXgoMTApLm9wdGlvbmFsKCksXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gUE9TVChyZXE6IE5leHRSZXF1ZXN0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcS5qc29uKCk7XG4gICAgY29uc3QgcGFyc2VkID0gc2NoZW1hLnBhcnNlKGJvZHkpIGFzIFNlYXJjaENyaXRlcmlhO1xuICAgIGNvbnN0IHNvdXJjZXMgPSAocGFyc2VkLnNvdXJjZXMgJiYgcGFyc2VkLnNvdXJjZXMubGVuZ3RoID8gcGFyc2VkLnNvdXJjZXMgOiBbXCJEZWFsc1wiLCBcIlNreXNjYW5uZXJcIiwgXCJHb29nbGVGbGlnaHRzXCIsIFwiQWlyQ2FuYWRhXCJdKS5tYXAocyA9PiBzLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgY29uc3QgdGFza3M6IFByb21pc2U8RGVhbFtdPltdID0gW107XG5cbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcyhcImRlYWxzXCIpKSB0YXNrcy5wdXNoKGZldGNoQ2l0eURlYWxzKHBhcnNlZCkpO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKFwic2t5c2Nhbm5lclwiKSkgdGFza3MucHVzaChidWlsZFNreXNjYW5uZXJMaW5rcyhwYXJzZWQpKTtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcyhcImdvb2dsZWZsaWdodHNcIikpIHRhc2tzLnB1c2goYnVpbGRHb29nbGVGbGlnaHRzTGlua3MocGFyc2VkKSk7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoXCJhaXJjYW5hZGFcIikpIHRhc2tzLnB1c2goYnVpbGRBaXJDYW5hZGFMaW5rcyhwYXJzZWQpKTtcblxuICAgIC8vIERlbW8gbW9kZSBmYWxsYmFja1xuICAgIGNvbnN0IGRlbW8gPSBwcm9jZXNzLmVudi5ERU1PID09PSBcInRydWVcIjtcblxuICAgIGxldCByZXN1bHRzOiBEZWFsW10gPSBbXTtcbiAgICBpZiAoZGVtbykge1xuICAgICAgcmVzdWx0cyA9IFtcbiAgICAgICAgeyBpZDogXCJkZW1vMVwiLCB0aXRsZTogXCLwn5SlIE90dGF3YSDihpIgQ2FuY3VuICg3IG5pZ2h0cylcIiwgc291cmNlOiBcIkRlbW9cIiwgbGluazogXCIjXCIsIHByaWNlOiA2ODUsIGN1cnJlbmN5OiBcIkNBRFwiLCBzdGFydERhdGU6IHBhcnNlZC5zdGFydERhdGUsIGVuZERhdGU6IHBhcnNlZC5zdGFydERhdGUsIG5pZ2h0czogNywgb3JpZ2luOiBwYXJzZWQub3JpZ2luLCBkZXN0aW5hdGlvbjogcGFyc2VkLmRlc3RpbmF0aW9uc1swXSwgc3RvcHM6IDAgfSxcbiAgICAgICAgeyBpZDogXCJkZW1vMlwiLCB0aXRsZTogXCJPdHRhd2Eg4oaSIFB1bnRhIENhbmEgKDcgbmlnaHRzKVwiLCBzb3VyY2U6IFwiRGVtb1wiLCBsaW5rOiBcIiNcIiwgcHJpY2U6IDcxMiwgY3VycmVuY3k6IFwiQ0FEXCIsIHN0YXJ0RGF0ZTogcGFyc2VkLnN0YXJ0RGF0ZSwgZW5kRGF0ZTogcGFyc2VkLnN0YXJ0RGF0ZSwgbmlnaHRzOiA3LCBvcmlnaW46IHBhcnNlZC5vcmlnaW4sIGRlc3RpbmF0aW9uOiBwYXJzZWQuZGVzdGluYXRpb25zWzBdLCBzdG9wczogMSB9XG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZXR0bGVkID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRhc2tzKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBzZXR0bGVkKSB7XG4gICAgICAgIGlmIChzLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikgcmVzdWx0cy5wdXNoKC4uLnMudmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbHRlciBhbmQgc2NvcmVcbiAgICBpZiAocGFyc2VkLmJ1ZGdldCkgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHIgPT4gIXIucHJpY2UgfHwgci5wcmljZSA8PSAocGFyc2VkLmJ1ZGdldCB8fCAwKSk7XG4gICAgaWYgKHBhcnNlZC5ub25TdG9wT25seSkgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHIgPT4gci5zdG9wcyA9PSBudWxsIHx8IHIuc3RvcHMgPT09IDApO1xuXG4gICAgcmVzdWx0cy5mb3JFYWNoKHIgPT4gci5zY29yZSA9IHNjb3JlRGVhbChyLCBwYXJzZWQucHJlZmVyZW5jZXMpKTtcbiAgICByZXN1bHRzLnNvcnQoKGEsYikgPT4gKGIuc2NvcmUgfHwgMCkgLSAoYS5zY29yZSB8fCAwKSk7XG5cbiAgICAvLyBPcHRpb25hbCBuOG4gd2ViaG9va1xuICAgIGNvbnN0IHdlYmhvb2sgPSBwcm9jZXNzLmVudi5OOE5fV0VCSE9PS19VUkw7XG4gICAgaWYgKHdlYmhvb2spIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZldGNoKHdlYmhvb2ssIHsgbWV0aG9kOiBcIlBPU1RcIiwgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LCBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGNyaXRlcmlhOiBwYXJzZWQsIHRvcDEwOiByZXN1bHRzLnNsaWNlKDAsMTApIH0pIH0pO1xuICAgICAgfSBjYXRjaChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeSh7IHJlc3VsdHMgfSksIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IH0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IGU/Lm1lc3NhZ2UgfHwgXCJJbnZhbGlkIHBheWxvYWRcIiB9KSwgeyBzdGF0dXM6IDQwMCwgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IH0pO1xuICB9XG59XG4iXSwibmFtZXMiOlsieiIsImZldGNoQ2l0eURlYWxzIiwiYnVpbGRTa3lzY2FubmVyTGlua3MiLCJidWlsZEdvb2dsZUZsaWdodHNMaW5rcyIsImJ1aWxkQWlyQ2FuYWRhTGlua3MiLCJzY29yZURlYWwiLCJzY2hlbWEiLCJvYmplY3QiLCJvcmlnaW4iLCJzdHJpbmciLCJtaW4iLCJtYXgiLCJkZXN0aW5hdGlvbnMiLCJhcnJheSIsIm5vbmVtcHR5Iiwic3RhcnREYXRlIiwicmVnZXgiLCJlbmREYXRlIiwidHJpcExlbmd0aE1pbiIsIm51bWJlciIsImludCIsInBvc2l0aXZlIiwidHJpcExlbmd0aE1heCIsImJ1ZGdldCIsIm9wdGlvbmFsIiwibnVsbGFibGUiLCJjdXJyZW5jeSIsImRlZmF1bHQiLCJub25TdG9wT25seSIsImJvb2xlYW4iLCJzb3VyY2VzIiwicHJlZmVyZW5jZXMiLCJiZWFjaCIsInBvb2wiLCJnb2xmIiwic3BhIiwiZm9vZCIsIm5pZ2h0bGlmZSIsInNob3BwaW5nIiwiY3VsdHVyZSIsIm91dGRvb3IiLCJmYW1pbHkiLCJQT1NUIiwicmVxIiwiYm9keSIsImpzb24iLCJwYXJzZWQiLCJwYXJzZSIsImxlbmd0aCIsIm1hcCIsInMiLCJ0b0xvd2VyQ2FzZSIsInRhc2tzIiwiaW5jbHVkZXMiLCJwdXNoIiwiZGVtbyIsInByb2Nlc3MiLCJlbnYiLCJERU1PIiwicmVzdWx0cyIsImlkIiwidGl0bGUiLCJzb3VyY2UiLCJsaW5rIiwicHJpY2UiLCJuaWdodHMiLCJkZXN0aW5hdGlvbiIsInN0b3BzIiwic2V0dGxlZCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwic3RhdHVzIiwidmFsdWUiLCJmaWx0ZXIiLCJyIiwiZm9yRWFjaCIsInNjb3JlIiwic29ydCIsImEiLCJiIiwid2ViaG9vayIsIk44Tl9XRUJIT09LX1VSTCIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjcml0ZXJpYSIsInRvcDEwIiwic2xpY2UiLCJlIiwiUmVzcG9uc2UiLCJlcnJvciIsIm1lc3NhZ2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/api/search/route.ts\n"); /***/ }), /***/ "(rsc)/./lib/date.ts": /*!*********************!*\ !*** ./lib/date.ts ***! \*********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ enumerateDatePairs: () => (/* binding */ enumerateDatePairs),\n/* harmony export */ isoToSkyscanner: () => (/* binding */ isoToSkyscanner)\n/* harmony export */ });\n/* harmony import */ var _barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! __barrel_optimize__?names=addDays,differenceInDays,format,isBefore,parseISO!=!date-fns */ \"(rsc)/./node_modules/date-fns/parseISO.mjs\");\n/* harmony import */ var _barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! __barrel_optimize__?names=addDays,differenceInDays,format,isBefore,parseISO!=!date-fns */ \"(rsc)/./node_modules/date-fns/isBefore.mjs\");\n/* harmony import */ var _barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=addDays,differenceInDays,format,isBefore,parseISO!=!date-fns */ \"(rsc)/./node_modules/date-fns/addDays.mjs\");\n/* harmony import */ var _barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=addDays,differenceInDays,format,isBefore,parseISO!=!date-fns */ \"(rsc)/./node_modules/date-fns/format.mjs\");\n/* harmony import */ var _barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=addDays,differenceInDays,format,isBefore,parseISO!=!date-fns */ \"(rsc)/./node_modules/date-fns/differenceInDays.mjs\");\n\nfunction enumerateDatePairs(startISO, endISO, minNights, maxNights, maxPairs = 8) {\n const start = (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_0__.parseISO)(startISO);\n const end = (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_0__.parseISO)(endISO);\n const pairs = [];\n let cursor = start;\n while(!(0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_1__.isBefore)(end, cursor) && pairs.length < maxPairs){\n for(let n = minNights; n <= maxNights && pairs.length < maxPairs; n++){\n const back = (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_2__.addDays)(cursor, n);\n if ((0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_1__.isBefore)(end, back)) continue;\n pairs.push({\n out: (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_3__.format)(cursor, \"yyyyMMdd\"),\n back: (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_3__.format)(back, \"yyyyMMdd\"),\n nights: n\n });\n }\n cursor = (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_2__.addDays)(cursor, Math.max(1, Math.floor(((0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_4__.differenceInDays)(end, start) || 1) / maxPairs)));\n }\n if (pairs.length === 0) {\n // fallback to exact minNights from start\n const back = (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_2__.addDays)(start, minNights);\n pairs.push({\n out: (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_3__.format)(start, \"yyyyMMdd\"),\n back: (0,_barrel_optimize_names_addDays_differenceInDays_format_isBefore_parseISO_date_fns__WEBPACK_IMPORTED_MODULE_3__.format)(back, \"yyyyMMdd\"),\n nights: minNights\n });\n }\n return pairs;\n}\nfunction isoToSkyscanner(iso) {\n return iso.replace(/-/g, \"\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9saWIvZGF0ZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQWlGO0FBRTFFLFNBQVNLLG1CQUFtQkMsUUFBZ0IsRUFBRUMsTUFBYyxFQUFFQyxTQUFpQixFQUFFQyxTQUFpQixFQUFFQyxXQUFXLENBQUM7SUFDckgsTUFBTUMsUUFBUVQsMkhBQVFBLENBQUNJO0lBQ3ZCLE1BQU1NLE1BQU1WLDJIQUFRQSxDQUFDSztJQUNyQixNQUFNTSxRQUF1RCxFQUFFO0lBQy9ELElBQUlDLFNBQVNIO0lBQ2IsTUFBTyxDQUFDUCwySEFBUUEsQ0FBQ1EsS0FBS0UsV0FBV0QsTUFBTUUsTUFBTSxHQUFHTCxTQUFVO1FBQ3hELElBQUssSUFBSU0sSUFBSVIsV0FBV1EsS0FBS1AsYUFBYUksTUFBTUUsTUFBTSxHQUFHTCxVQUFVTSxJQUFLO1lBQ3RFLE1BQU1DLE9BQU9qQiwwSEFBT0EsQ0FBQ2MsUUFBUUU7WUFDN0IsSUFBSVosMkhBQVFBLENBQUNRLEtBQUtLLE9BQU87WUFDekJKLE1BQU1LLElBQUksQ0FBQztnQkFBRUMsS0FBS2hCLHlIQUFNQSxDQUFDVyxRQUFRO2dCQUFhRyxNQUFNZCx5SEFBTUEsQ0FBQ2MsTUFBTTtnQkFBYUcsUUFBUUo7WUFBRTtRQUMxRjtRQUNBRixTQUFTZCwwSEFBT0EsQ0FBQ2MsUUFBUU8sS0FBS0MsR0FBRyxDQUFDLEdBQUdELEtBQUtFLEtBQUssQ0FBQyxDQUFDdEIsbUlBQWdCQSxDQUFDVyxLQUFLRCxVQUFVLEtBQU1EO0lBQ3pGO0lBQ0EsSUFBSUcsTUFBTUUsTUFBTSxLQUFLLEdBQUc7UUFDdEIseUNBQXlDO1FBQ3pDLE1BQU1FLE9BQU9qQiwwSEFBT0EsQ0FBQ1csT0FBT0g7UUFDNUJLLE1BQU1LLElBQUksQ0FBQztZQUFFQyxLQUFLaEIseUhBQU1BLENBQUNRLE9BQU87WUFBYU0sTUFBTWQseUhBQU1BLENBQUNjLE1BQU07WUFBYUcsUUFBUVo7UUFBVTtJQUNqRztJQUNBLE9BQU9LO0FBQ1Q7QUFFTyxTQUFTVyxnQkFBZ0JDLEdBQVc7SUFDekMsT0FBT0EsSUFBSUMsT0FBTyxDQUFDLE1BQU07QUFDM0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ob2xpZGF5LWRlYWwtZmluZGVyLy4vbGliL2RhdGUudHM/OTljMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGREYXlzLCBkaWZmZXJlbmNlSW5EYXlzLCBwYXJzZUlTTywgZm9ybWF0LCBpc0JlZm9yZSB9IGZyb20gXCJkYXRlLWZuc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bWVyYXRlRGF0ZVBhaXJzKHN0YXJ0SVNPOiBzdHJpbmcsIGVuZElTTzogc3RyaW5nLCBtaW5OaWdodHM6IG51bWJlciwgbWF4TmlnaHRzOiBudW1iZXIsIG1heFBhaXJzID0gOCkge1xuICBjb25zdCBzdGFydCA9IHBhcnNlSVNPKHN0YXJ0SVNPKTtcbiAgY29uc3QgZW5kID0gcGFyc2VJU08oZW5kSVNPKTtcbiAgY29uc3QgcGFpcnM6IHtvdXQ6IHN0cmluZywgYmFjazogc3RyaW5nLCBuaWdodHM6IG51bWJlcn1bXSA9IFtdO1xuICBsZXQgY3Vyc29yID0gc3RhcnQ7XG4gIHdoaWxlICghaXNCZWZvcmUoZW5kLCBjdXJzb3IpICYmIHBhaXJzLmxlbmd0aCA8IG1heFBhaXJzKSB7XG4gICAgZm9yIChsZXQgbiA9IG1pbk5pZ2h0czsgbiA8PSBtYXhOaWdodHMgJiYgcGFpcnMubGVuZ3RoIDwgbWF4UGFpcnM7IG4rKykge1xuICAgICAgY29uc3QgYmFjayA9IGFkZERheXMoY3Vyc29yLCBuKTtcbiAgICAgIGlmIChpc0JlZm9yZShlbmQsIGJhY2spKSBjb250aW51ZTtcbiAgICAgIHBhaXJzLnB1c2goeyBvdXQ6IGZvcm1hdChjdXJzb3IsIFwieXl5eU1NZGRcIiksIGJhY2s6IGZvcm1hdChiYWNrLCBcInl5eXlNTWRkXCIpLCBuaWdodHM6IG4gfSk7XG4gICAgfVxuICAgIGN1cnNvciA9IGFkZERheXMoY3Vyc29yLCBNYXRoLm1heCgxLCBNYXRoLmZsb29yKChkaWZmZXJlbmNlSW5EYXlzKGVuZCwgc3RhcnQpIHx8IDEpIC8gKG1heFBhaXJzKSkpKTtcbiAgfVxuICBpZiAocGFpcnMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gZmFsbGJhY2sgdG8gZXhhY3QgbWluTmlnaHRzIGZyb20gc3RhcnRcbiAgICBjb25zdCBiYWNrID0gYWRkRGF5cyhzdGFydCwgbWluTmlnaHRzKTtcbiAgICBwYWlycy5wdXNoKHsgb3V0OiBmb3JtYXQoc3RhcnQsIFwieXl5eU1NZGRcIiksIGJhY2s6IGZvcm1hdChiYWNrLCBcInl5eXlNTWRkXCIpLCBuaWdodHM6IG1pbk5pZ2h0cyB9KTtcbiAgfVxuICByZXR1cm4gcGFpcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc29Ub1NreXNjYW5uZXIoaXNvOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGlzby5yZXBsYWNlKC8tL2csIFwiXCIpO1xufVxuIl0sIm5hbWVzIjpbImFkZERheXMiLCJkaWZmZXJlbmNlSW5EYXlzIiwicGFyc2VJU08iLCJmb3JtYXQiLCJpc0JlZm9yZSIsImVudW1lcmF0ZURhdGVQYWlycyIsInN0YXJ0SVNPIiwiZW5kSVNPIiwibWluTmlnaHRzIiwibWF4TmlnaHRzIiwibWF4UGFpcnMiLCJzdGFydCIsImVuZCIsInBhaXJzIiwiY3Vyc29yIiwibGVuZ3RoIiwibiIsImJhY2siLCJwdXNoIiwib3V0IiwibmlnaHRzIiwiTWF0aCIsIm1heCIsImZsb29yIiwiaXNvVG9Ta3lzY2FubmVyIiwiaXNvIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./lib/date.ts\n"); /***/ }), /***/ "(rsc)/./lib/providers/linkBuilders.ts": /*!***************************************!*\ !*** ./lib/providers/linkBuilders.ts ***! \***************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ buildAirCanadaLinks: () => (/* binding */ buildAirCanadaLinks),\n/* harmony export */ buildGoogleFlightsLinks: () => (/* binding */ buildGoogleFlightsLinks),\n/* harmony export */ buildSkyscannerLinks: () => (/* binding */ buildSkyscannerLinks)\n/* harmony export */ });\n/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../date */ \"(rsc)/./lib/date.ts\");\n\nfunction toLower(s) {\n return (s || \"\").toLowerCase();\n}\nasync function buildSkyscannerLinks(c) {\n const origin = toLower(c.origin);\n const out = [];\n const pairs = (0,_date__WEBPACK_IMPORTED_MODULE_0__.enumerateDatePairs)(c.startDate, c.endDate, c.tripLengthMin, c.tripLengthMax, 6);\n for (const dest of c.destinations){\n for (const p of pairs){\n const path = `https://www.skyscanner.ca/transport/flights/${origin}/${toLower(dest)}/${p.out}/${p.back}/`;\n out.push({\n id: `sky-${origin}-${dest}-${p.out}-${p.back}`,\n title: `${c.origin} → ${dest} (${p.nights} nights)`,\n source: \"Skyscanner Link\",\n link: path,\n price: null,\n currency: c.currency || \"CAD\",\n startDate: `${p.out.slice(0, 4)}-${p.out.slice(4, 6)}-${p.out.slice(6, 8)}`,\n endDate: `${p.back.slice(0, 4)}-${p.back.slice(4, 6)}-${p.back.slice(6, 8)}`,\n nights: p.nights,\n origin: c.origin,\n destination: dest\n });\n }\n }\n return out;\n}\nasync function buildGoogleFlightsLinks(c) {\n const out = [];\n const pairs = (0,_date__WEBPACK_IMPORTED_MODULE_0__.enumerateDatePairs)(c.startDate, c.endDate, c.tripLengthMin, c.tripLengthMax, 4);\n for (const dest of c.destinations){\n for (const p of pairs){\n const q = encodeURIComponent(`flights from ${c.origin} to ${dest} ${p.out} to ${p.back}`);\n const link = `https://www.google.com/travel/flights?q=${q}`;\n out.push({\n id: `gfl-${c.origin}-${dest}-${p.out}-${p.back}`,\n title: `Google Flights: ${c.origin} → ${dest} (${p.nights} nights)`,\n source: \"Google Flights Link\",\n link,\n price: null,\n currency: c.currency || \"CAD\",\n startDate: `${p.out.slice(0, 4)}-${p.out.slice(4, 6)}-${p.out.slice(6, 8)}`,\n endDate: `${p.back.slice(0, 4)}-${p.back.slice(4, 6)}-${p.back.slice(6, 8)}`,\n nights: p.nights,\n origin: c.origin,\n destination: dest\n });\n }\n }\n return out;\n}\nasync function buildAirCanadaLinks(c) {\n const out = [];\n const pairs = (0,_date__WEBPACK_IMPORTED_MODULE_0__.enumerateDatePairs)(c.startDate, c.endDate, c.tripLengthMin, c.tripLengthMax, 3);\n for (const dest of c.destinations){\n for (const p of pairs){\n const sd = `${p.out.slice(0, 4)}-${p.out.slice(4, 6)}-${p.out.slice(6, 8)}`;\n const ed = `${p.back.slice(0, 4)}-${p.back.slice(4, 6)}-${p.back.slice(6, 8)}`;\n const params = new URLSearchParams({\n org1: c.origin.toUpperCase(),\n dest1: dest.toUpperCase(),\n departureDate1: sd,\n returnDate1: ed,\n tripType: \"2\",\n lang: \"en-CA\"\n });\n const link = `https://www.aircanada.com/ca/en/aco/home/book/travel.html?${params.toString()}`;\n out.push({\n id: `ac-${c.origin}-${dest}-${p.out}-${p.back}`,\n title: `Air Canada: ${c.origin} → ${dest} (${p.nights} nights)`,\n source: \"Air Canada Link\",\n link,\n price: null,\n currency: c.currency || \"CAD\",\n startDate: sd,\n endDate: ed,\n nights: p.nights,\n origin: c.origin,\n destination: dest\n });\n }\n }\n return out;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZGVyLy4vbGliL3Byb3ZpZGVycy9saW5rQnVpbGRlcnMudHM/OGE0MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERlYWwsIFNlYXJjaENyaXRlcmlhIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBlbnVtZXJhdGVEYXRlUGFpcnMgfSBmcm9tIFwiLi4vZGF0ZVwiO1xuXG5mdW5jdGlvbiB0b0xvd2VyKHM6IHN0cmluZykgeyByZXR1cm4gKHN8fFwiXCIpLnRvTG93ZXJDYXNlKCk7IH1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2t5c2Nhbm5lckxpbmtzKGM6IFNlYXJjaENyaXRlcmlhKTogUHJvbWlzZTxEZWFsW10+IHtcbiAgY29uc3Qgb3JpZ2luID0gdG9Mb3dlcihjLm9yaWdpbik7XG4gIGNvbnN0IG91dDogRGVhbFtdID0gW107XG4gIGNvbnN0IHBhaXJzID0gZW51bWVyYXRlRGF0ZVBhaXJzKGMuc3RhcnREYXRlLCBjLmVuZERhdGUsIGMudHJpcExlbmd0aE1pbiwgYy50cmlwTGVuZ3RoTWF4LCA2KTtcblxuICBmb3IgKGNvbnN0IGRlc3Qgb2YgYy5kZXN0aW5hdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGFpcnMpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBgaHR0cHM6Ly93d3cuc2t5c2Nhbm5lci5jYS90cmFuc3BvcnQvZmxpZ2h0cy8ke29yaWdpbn0vJHt0b0xvd2VyKGRlc3QpfS8ke3Aub3V0fS8ke3AuYmFja30vYDtcbiAgICAgIG91dC5wdXNoKHtcbiAgICAgICAgaWQ6IGBza3ktJHtvcmlnaW59LSR7ZGVzdH0tJHtwLm91dH0tJHtwLmJhY2t9YCxcbiAgICAgICAgdGl0bGU6IGAke2Mub3JpZ2lufSDihpIgJHtkZXN0fSAoJHtwLm5pZ2h0c30gbmlnaHRzKWAsXG4gICAgICAgIHNvdXJjZTogXCJTa3lzY2FubmVyIExpbmtcIixcbiAgICAgICAgbGluazogcGF0aCxcbiAgICAgICAgcHJpY2U6IG51bGwsXG4gICAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5IHx8IFwiQ0FEXCIsXG4gICAgICAgIHN0YXJ0RGF0ZTogYCR7cC5vdXQuc2xpY2UoMCw0KX0tJHtwLm91dC5zbGljZSg0LDYpfS0ke3Aub3V0LnNsaWNlKDYsOCl9YCxcbiAgICAgICAgZW5kRGF0ZTogYCR7cC5iYWNrLnNsaWNlKDAsNCl9LSR7cC5iYWNrLnNsaWNlKDQsNil9LSR7cC5iYWNrLnNsaWNlKDYsOCl9YCxcbiAgICAgICAgbmlnaHRzOiBwLm5pZ2h0cyxcbiAgICAgICAgb3JpZ2luOiBjLm9yaWdpbixcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3QsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkR29vZ2xlRmxpZ2h0c0xpbmtzKGM6IFNlYXJjaENyaXRlcmlhKTogUHJvbWlzZTxEZWFsW10+IHtcbiAgY29uc3Qgb3V0OiBEZWFsW10gPSBbXTtcbiAgY29uc3QgcGFpcnMgPSBlbnVtZXJhdGVEYXRlUGFpcnMoYy5zdGFydERhdGUsIGMuZW5kRGF0ZSwgYy50cmlwTGVuZ3RoTWluLCBjLnRyaXBMZW5ndGhNYXgsIDQpO1xuICBmb3IgKGNvbnN0IGRlc3Qgb2YgYy5kZXN0aW5hdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGFpcnMpIHtcbiAgICAgIGNvbnN0IHEgPSBlbmNvZGVVUklDb21wb25lbnQoYGZsaWdodHMgZnJvbSAke2Mub3JpZ2lufSB0byAke2Rlc3R9ICR7cC5vdXR9IHRvICR7cC5iYWNrfWApO1xuICAgICAgY29uc3QgbGluayA9IGBodHRwczovL3d3dy5nb29nbGUuY29tL3RyYXZlbC9mbGlnaHRzP3E9JHtxfWA7XG4gICAgICBvdXQucHVzaCh7XG4gICAgICAgIGlkOiBgZ2ZsLSR7Yy5vcmlnaW59LSR7ZGVzdH0tJHtwLm91dH0tJHtwLmJhY2t9YCxcbiAgICAgICAgdGl0bGU6IGBHb29nbGUgRmxpZ2h0czogJHtjLm9yaWdpbn0g4oaSICR7ZGVzdH0gKCR7cC5uaWdodHN9IG5pZ2h0cylgLFxuICAgICAgICBzb3VyY2U6IFwiR29vZ2xlIEZsaWdodHMgTGlua1wiLFxuICAgICAgICBsaW5rLFxuICAgICAgICBwcmljZTogbnVsbCxcbiAgICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3kgfHwgXCJDQURcIixcbiAgICAgICAgc3RhcnREYXRlOiBgJHtwLm91dC5zbGljZSgwLDQpfS0ke3Aub3V0LnNsaWNlKDQsNil9LSR7cC5vdXQuc2xpY2UoNiw4KX1gLFxuICAgICAgICBlbmREYXRlOiBgJHtwLmJhY2suc2xpY2UoMCw0KX0tJHtwLmJhY2suc2xpY2UoNCw2KX0tJHtwLmJhY2suc2xpY2UoNiw4KX1gLFxuICAgICAgICBuaWdodHM6IHAubmlnaHRzLFxuICAgICAgICBvcmlnaW46IGMub3JpZ2luLFxuICAgICAgICBkZXN0aW5hdGlvbjogZGVzdCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRBaXJDYW5hZGFMaW5rcyhjOiBTZWFyY2hDcml0ZXJpYSk6IFByb21pc2U8RGVhbFtdPiB7XG4gIGNvbnN0IG91dDogRGVhbFtdID0gW107XG4gIGNvbnN0IHBhaXJzID0gZW51bWVyYXRlRGF0ZVBhaXJzKGMuc3RhcnREYXRlLCBjLmVuZERhdGUsIGMudHJpcExlbmd0aE1pbiwgYy50cmlwTGVuZ3RoTWF4LCAzKTtcbiAgZm9yIChjb25zdCBkZXN0IG9mIGMuZGVzdGluYXRpb25zKSB7XG4gICAgZm9yIChjb25zdCBwIG9mIHBhaXJzKSB7XG4gICAgICBjb25zdCBzZCA9IGAke3Aub3V0LnNsaWNlKDAsNCl9LSR7cC5vdXQuc2xpY2UoNCw2KX0tJHtwLm91dC5zbGljZSg2LDgpfWA7XG4gICAgICBjb25zdCBlZCA9IGAke3AuYmFjay5zbGljZSgwLDQpfS0ke3AuYmFjay5zbGljZSg0LDYpfS0ke3AuYmFjay5zbGljZSg2LDgpfWA7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgb3JnMTogYy5vcmlnaW4udG9VcHBlckNhc2UoKSxcbiAgICAgICAgZGVzdDE6IGRlc3QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgZGVwYXJ0dXJlRGF0ZTE6IHNkLFxuICAgICAgICByZXR1cm5EYXRlMTogZWQsXG4gICAgICAgIHRyaXBUeXBlOiBcIjJcIixcbiAgICAgICAgbGFuZzogXCJlbi1DQVwiXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxpbmsgPSBgaHR0cHM6Ly93d3cuYWlyY2FuYWRhLmNvbS9jYS9lbi9hY28vaG9tZS9ib29rL3RyYXZlbC5odG1sPyR7cGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgIG91dC5wdXNoKHtcbiAgICAgICAgaWQ6IGBhYy0ke2Mub3JpZ2lufS0ke2Rlc3R9LSR7cC5vdXR9LSR7cC5iYWNrfWAsXG4gICAgICAgIHRpdGxlOiBgQWlyIENhbmFkYTogJHtjLm9yaWdpbn0g4oaSICR7ZGVzdH0gKCR7cC5uaWdodHN9IG5pZ2h0cylgLFxuICAgICAgICBzb3VyY2U6IFwiQWlyIENhbmFkYSBMaW5rXCIsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHByaWNlOiBudWxsLFxuICAgICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSB8fCBcIkNBRFwiLFxuICAgICAgICBzdGFydERhdGU6IHNkLFxuICAgICAgICBlbmREYXRlOiBlZCxcbiAgICAgICAgbmlnaHRzOiBwLm5pZ2h0cyxcbiAgICAgICAgb3JpZ2luOiBjLm9yaWdpbixcbiAgICAgICAgZGVzdGluYXRpb246IGRlc3QsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdLCJuYW1lcyI6WyJlbnVtZXJhdGVEYXRlUGFpcnMiLCJ0b0xvd2VyIiwicyIsInRvTG93ZXJDYXNlIiwiYnVpbGRTa3lzY2FubmVyTGlua3MiLCJjIiwib3JpZ2luIiwib3V0IiwicGFpcnMiLCJzdGFydERhdGUiLCJlbmREYXRlIiwidHJpcExlbmd0aE1pbiIsInRyaXBMZW5ndGhNYXgiLCJkZXN0IiwiZGVzdGluYXRpb25zIiwicCIsInBhdGgiLCJiYWNrIiwicHVzaCIsImlkIiwidGl0bGUiLCJuaWdodHMiLCJzb3VyY2UiLCJsaW5rIiwicHJpY2UiLCJjdXJyZW5jeSIsInNsaWNlIiwiZGVzdGluYXRpb24iLCJidWlsZEdvb2dsZUZsaWdodHNMaW5rcyIsInEiLCJlbmNvZGVVUklDb21wb25lbnQiLCJidWlsZEFpckNhbmFkYUxpbmtzIiwic2QiLCJlZCIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsIm9yZzEiLCJ0b1VwcGVyQ2FzZSIsImRlc3QxIiwiZGVwYXJ0dXJlRGF0ZTEiLCJyZXR1cm5EYXRlMSIsInRyaXBUeXBlIiwibGFuZyIsInRvU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./lib/providers/linkBuilders.ts\n"); /***/ }), /***/ "(rsc)/./lib/providers/yowDeals.ts": /*!***********************************!*\ !*** ./lib/providers/yowDeals.ts ***! \***********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ fetchCityDeals: () => (/* binding */ fetchCityDeals)\n/* harmony export */ });\n/* harmony import */ var cheerio__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! cheerio */ \"(rsc)/./node_modules/cheerio/dist/esm/index.js\");\n\nconst SITE_BY_ORIGIN = {\n \"YOW\": \"https://www.yowdeals.com\",\n \"YYZ\": \"https://www.yyzdeals.com\",\n \"YUL\": \"https://www.yuldeals.com\",\n \"YVR\": \"https://www.yvrdeals.com\",\n \"YYC\": \"https://www.yycdeals.com\",\n \"YEG\": \"https://www.yegdeals.com\"\n};\nasync function fetchCityDeals(criteria) {\n const site = SITE_BY_ORIGIN[(criteria.origin || \"\").toUpperCase()] || SITE_BY_ORIGIN[\"YOW\"];\n try {\n const res = await fetch(site, {\n cache: \"no-store\"\n });\n const html = await res.text();\n const $ = cheerio__WEBPACK_IMPORTED_MODULE_0__.load(html);\n const deals = [];\n $(\"h2.post-title a, .post h2 a, .post-title a\").each((_, el)=>{\n const title = $(el).text().trim();\n const link = $(el).attr(\"href\") || site;\n const priceMatch = title.match(/\\$\\s?(\\d+[\\,\\d+]*)/);\n const price = priceMatch ? parseInt(priceMatch[1].replace(/,/g, \"\")) : null;\n const id = `dealsite-${Buffer.from(link).toString(\"base64\").slice(0, 16)}`;\n deals.push({\n id,\n title,\n source: new URL(site).host.replace(\"www.\", \"\"),\n link,\n price,\n currency: \"CAD\",\n origin: criteria.origin.toUpperCase()\n });\n });\n return deals.slice(0, 20); // don't flood\n } catch (e) {\n return [];\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9saWIvcHJvdmlkZXJzL3lvd0RlYWxzLnRzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW1DO0FBR25DLE1BQU1DLGlCQUF5QztJQUM3QyxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87QUFDVDtBQUVPLGVBQWVDLGVBQWVDLFFBQXdCO0lBQzNELE1BQU1DLE9BQU9ILGNBQWMsQ0FBQyxDQUFDRSxTQUFTRSxNQUFNLElBQUksRUFBQyxFQUFHQyxXQUFXLEdBQUcsSUFBSUwsY0FBYyxDQUFDLE1BQU07SUFDM0YsSUFBSTtRQUNGLE1BQU1NLE1BQU0sTUFBTUMsTUFBTUosTUFBTTtZQUFFSyxPQUFPO1FBQVc7UUFDbEQsTUFBTUMsT0FBTyxNQUFNSCxJQUFJSSxJQUFJO1FBQzNCLE1BQU1DLElBQUlaLHlDQUFZLENBQUNVO1FBQ3ZCLE1BQU1JLFFBQWdCLEVBQUU7UUFFeEJGLEVBQUUsOENBQThDRyxJQUFJLENBQUMsQ0FBQ0MsR0FBR0M7WUFDdkQsTUFBTUMsUUFBUU4sRUFBRUssSUFBSU4sSUFBSSxHQUFHUSxJQUFJO1lBQy9CLE1BQU1DLE9BQU9SLEVBQUVLLElBQUlJLElBQUksQ0FBQyxXQUFXakI7WUFDbkMsTUFBTWtCLGFBQWFKLE1BQU1LLEtBQUssQ0FBQztZQUMvQixNQUFNQyxRQUFRRixhQUFhRyxTQUFTSCxVQUFVLENBQUMsRUFBRSxDQUFDSSxPQUFPLENBQUMsTUFBTSxPQUFPO1lBQ3ZFLE1BQU1DLEtBQUssQ0FBQyxTQUFTLEVBQUVDLE9BQU9DLElBQUksQ0FBQ1QsTUFBTVUsUUFBUSxDQUFDLFVBQVVDLEtBQUssQ0FBQyxHQUFFLElBQUksQ0FBQztZQUN6RWpCLE1BQU1rQixJQUFJLENBQUM7Z0JBQ1RMO2dCQUNBVDtnQkFDQWUsUUFBUSxJQUFJQyxJQUFJOUIsTUFBTStCLElBQUksQ0FBQ1QsT0FBTyxDQUFDLFFBQU87Z0JBQzFDTjtnQkFDQUk7Z0JBQ0FZLFVBQVU7Z0JBQ1YvQixRQUFRRixTQUFTRSxNQUFNLENBQUNDLFdBQVc7WUFDckM7UUFDRjtRQUVBLE9BQU9RLE1BQU1pQixLQUFLLENBQUMsR0FBRyxLQUFLLGNBQWM7SUFDM0MsRUFBRSxPQUFPTSxHQUFHO1FBQ1YsT0FBTyxFQUFFO0lBQ1g7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL2hvbGlkYXktZGVhbC1maW5kZXIvLi9saWIvcHJvdmlkZXJzL3lvd0RlYWxzLnRzPzVjM2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tIFwiY2hlZXJpb1wiO1xuaW1wb3J0IHR5cGUgeyBEZWFsLCBTZWFyY2hDcml0ZXJpYSB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5jb25zdCBTSVRFX0JZX09SSUdJTjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJZT1dcIjogXCJodHRwczovL3d3dy55b3dkZWFscy5jb21cIixcbiAgXCJZWVpcIjogXCJodHRwczovL3d3dy55eXpkZWFscy5jb21cIixcbiAgXCJZVUxcIjogXCJodHRwczovL3d3dy55dWxkZWFscy5jb21cIixcbiAgXCJZVlJcIjogXCJodHRwczovL3d3dy55dnJkZWFscy5jb21cIixcbiAgXCJZWUNcIjogXCJodHRwczovL3d3dy55eWNkZWFscy5jb21cIixcbiAgXCJZRUdcIjogXCJodHRwczovL3d3dy55ZWdkZWFscy5jb21cIixcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaENpdHlEZWFscyhjcml0ZXJpYTogU2VhcmNoQ3JpdGVyaWEpOiBQcm9taXNlPERlYWxbXT4ge1xuICBjb25zdCBzaXRlID0gU0lURV9CWV9PUklHSU5bKGNyaXRlcmlhLm9yaWdpbiB8fCBcIlwiKS50b1VwcGVyQ2FzZSgpXSB8fCBTSVRFX0JZX09SSUdJTltcIllPV1wiXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChzaXRlLCB7IGNhY2hlOiBcIm5vLXN0b3JlXCIgfSk7XG4gICAgY29uc3QgaHRtbCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcbiAgICBjb25zdCBkZWFsczogRGVhbFtdID0gW107XG5cbiAgICAkKFwiaDIucG9zdC10aXRsZSBhLCAucG9zdCBoMiBhLCAucG9zdC10aXRsZSBhXCIpLmVhY2goKF8sIGVsKSA9PiB7XG4gICAgICBjb25zdCB0aXRsZSA9ICQoZWwpLnRleHQoKS50cmltKCk7XG4gICAgICBjb25zdCBsaW5rID0gJChlbCkuYXR0cihcImhyZWZcIikgfHwgc2l0ZTtcbiAgICAgIGNvbnN0IHByaWNlTWF0Y2ggPSB0aXRsZS5tYXRjaCgvXFwkXFxzPyhcXGQrW1xcLFxcZCtdKikvKTtcbiAgICAgIGNvbnN0IHByaWNlID0gcHJpY2VNYXRjaCA/IHBhcnNlSW50KHByaWNlTWF0Y2hbMV0ucmVwbGFjZSgvLC9nLCBcIlwiKSkgOiBudWxsO1xuICAgICAgY29uc3QgaWQgPSBgZGVhbHNpdGUtJHtCdWZmZXIuZnJvbShsaW5rKS50b1N0cmluZyhcImJhc2U2NFwiKS5zbGljZSgwLDE2KX1gO1xuICAgICAgZGVhbHMucHVzaCh7XG4gICAgICAgIGlkLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgc291cmNlOiBuZXcgVVJMKHNpdGUpLmhvc3QucmVwbGFjZShcInd3dy5cIixcIlwiKSxcbiAgICAgICAgbGluayxcbiAgICAgICAgcHJpY2UsXG4gICAgICAgIGN1cnJlbmN5OiBcIkNBRFwiLFxuICAgICAgICBvcmlnaW46IGNyaXRlcmlhLm9yaWdpbi50b1VwcGVyQ2FzZSgpLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVhbHMuc2xpY2UoMCwgMjApOyAvLyBkb24ndCBmbG9vZFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXSwibmFtZXMiOlsiY2hlZXJpbyIsIlNJVEVfQllfT1JJR0lOIiwiZmV0Y2hDaXR5RGVhbHMiLCJjcml0ZXJpYSIsInNpdGUiLCJvcmlnaW4iLCJ0b1VwcGVyQ2FzZSIsInJlcyIsImZldGNoIiwiY2FjaGUiLCJodG1sIiwidGV4dCIsIiQiLCJsb2FkIiwiZGVhbHMiLCJlYWNoIiwiXyIsImVsIiwidGl0bGUiLCJ0cmltIiwibGluayIsImF0dHIiLCJwcmljZU1hdGNoIiwibWF0Y2giLCJwcmljZSIsInBhcnNlSW50IiwicmVwbGFjZSIsImlkIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJwdXNoIiwic291cmNlIiwiVVJMIiwiaG9zdCIsImN1cnJlbmN5IiwiZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./lib/providers/yowDeals.ts\n"); /***/ }), /***/ "(rsc)/./lib/score.ts": /*!**********************!*\ !*** ./lib/score.ts ***! \**********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ scoreDeal: () => (/* binding */ scoreDeal)\n/* harmony export */ });\n// Destination feature profiles (0-10 ratings for common destinations)\nconst DESTINATION_PROFILES = {\n // Caribbean\n \"CUN\": {\n beach: 10,\n pool: 9,\n golf: 6,\n spa: 8,\n food: 8,\n nightlife: 9,\n shopping: 7,\n culture: 5,\n outdoor: 8,\n family: 9\n },\n \"PUJ\": {\n beach: 10,\n pool: 9,\n golf: 7,\n spa: 8,\n food: 7,\n nightlife: 8,\n shopping: 6,\n culture: 4,\n outdoor: 7,\n family: 9\n },\n \"MBJ\": {\n beach: 10,\n pool: 8,\n golf: 5,\n spa: 7,\n food: 8,\n nightlife: 7,\n shopping: 5,\n culture: 6,\n outdoor: 9,\n family: 8\n },\n \"NAS\": {\n beach: 9,\n pool: 8,\n golf: 6,\n spa: 6,\n food: 7,\n nightlife: 8,\n shopping: 7,\n culture: 5,\n outdoor: 8,\n family: 8\n },\n // Europe\n \"LHR\": {\n beach: 2,\n pool: 5,\n golf: 6,\n spa: 7,\n food: 9,\n nightlife: 8,\n shopping: 10,\n culture: 10,\n outdoor: 6,\n family: 7\n },\n \"CDG\": {\n beach: 1,\n pool: 6,\n golf: 5,\n spa: 8,\n food: 10,\n nightlife: 9,\n shopping: 10,\n culture: 10,\n outdoor: 5,\n family: 7\n },\n \"FCO\": {\n beach: 3,\n pool: 6,\n golf: 4,\n spa: 7,\n food: 10,\n nightlife: 8,\n shopping: 9,\n culture: 10,\n outdoor: 7,\n family: 8\n },\n \"BCN\": {\n beach: 8,\n pool: 7,\n golf: 5,\n spa: 7,\n food: 9,\n nightlife: 10,\n shopping: 8,\n culture: 9,\n outdoor: 7,\n family: 7\n },\n \"AMS\": {\n beach: 1,\n pool: 5,\n golf: 4,\n spa: 6,\n food: 8,\n nightlife: 9,\n shopping: 8,\n culture: 9,\n outdoor: 6,\n family: 7\n },\n // USA\n \"LAX\": {\n beach: 8,\n pool: 7,\n golf: 7,\n spa: 8,\n food: 9,\n nightlife: 9,\n shopping: 9,\n culture: 8,\n outdoor: 8,\n family: 7\n },\n \"LAS\": {\n beach: 0,\n pool: 9,\n golf: 8,\n spa: 10,\n food: 9,\n nightlife: 10,\n shopping: 10,\n culture: 5,\n outdoor: 5,\n family: 6\n },\n \"MIA\": {\n beach: 9,\n pool: 8,\n golf: 7,\n spa: 8,\n food: 8,\n nightlife: 10,\n shopping: 9,\n culture: 7,\n outdoor: 8,\n family: 7\n },\n \"MCO\": {\n beach: 5,\n pool: 10,\n golf: 8,\n spa: 7,\n food: 7,\n nightlife: 7,\n shopping: 8,\n culture: 6,\n outdoor: 6,\n family: 10\n },\n \"HNL\": {\n beach: 10,\n pool: 8,\n golf: 9,\n spa: 8,\n food: 8,\n nightlife: 7,\n shopping: 7,\n culture: 8,\n outdoor: 10,\n family: 9\n },\n // Default fallback\n \"DEFAULT\": {\n beach: 5,\n pool: 5,\n golf: 5,\n spa: 5,\n food: 5,\n nightlife: 5,\n shopping: 5,\n culture: 5,\n outdoor: 5,\n family: 5\n }\n};\nfunction calculatePreferenceMatch(deal, preferences) {\n if (!preferences || !deal.destination) return 0;\n const destProfile = DESTINATION_PROFILES[deal.destination.toUpperCase()] || DESTINATION_PROFILES[\"DEFAULT\"];\n let matchScore = 0;\n let totalWeight = 0;\n // Calculate how well the destination matches user preferences\n for (const [feature, userRating] of Object.entries(preferences)){\n if (userRating && userRating > 0) {\n const destRating = destProfile[feature] || 5;\n // Higher user rating + higher destination rating = better match\n matchScore += userRating * destRating;\n totalWeight += userRating * 10; // max possible for this feature\n }\n }\n // Normalize to 0-1000 scale\n if (totalWeight > 0) {\n return matchScore / totalWeight * 1000;\n }\n return 0;\n}\nfunction scoreDeal(d, preferences) {\n // Very simple scoring: prefer lower price, direct, reasonable nights\n let score = 0;\n if (typeof d.price === \"number\") score += Math.max(0, 10000 - d.price);\n if (d.stops === 0) score += 500;\n if (typeof d.nights === \"number\") {\n const target = 7;\n score += Math.max(0, 300 - Math.abs(d.nights - target) * 40);\n }\n if (d.source.includes(\"Deals\")) score += 150; // curated deal sites\n // Add preference matching bonus\n const preferenceBonus = calculatePreferenceMatch(d, preferences);\n score += preferenceBonus;\n return score;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9saWIvc2NvcmUudHMiLCJtYXBwaW5ncyI6Ijs7OztBQUVBLHNFQUFzRTtBQUN0RSxNQUFNQSx1QkFBMEQ7SUFDOUQsWUFBWTtJQUNaLE9BQU87UUFBRUMsT0FBTztRQUFJQyxNQUFNO1FBQUdDLE1BQU07UUFBR0MsS0FBSztRQUFHQyxNQUFNO1FBQUdDLFdBQVc7UUFBR0MsVUFBVTtRQUFHQyxTQUFTO1FBQUdDLFNBQVM7UUFBR0MsUUFBUTtJQUFFO0lBQ3BILE9BQU87UUFBRVQsT0FBTztRQUFJQyxNQUFNO1FBQUdDLE1BQU07UUFBR0MsS0FBSztRQUFHQyxNQUFNO1FBQUdDLFdBQVc7UUFBR0MsVUFBVTtRQUFHQyxTQUFTO1FBQUdDLFNBQVM7UUFBR0MsUUFBUTtJQUFFO0lBQ3BILE9BQU87UUFBRVQsT0FBTztRQUFJQyxNQUFNO1FBQUdDLE1BQU07UUFBR0MsS0FBSztRQUFHQyxNQUFNO1FBQUdDLFdBQVc7UUFBR0MsVUFBVTtRQUFHQyxTQUFTO1FBQUdDLFNBQVM7UUFBR0MsUUFBUTtJQUFFO0lBQ3BILE9BQU87UUFBRVQsT0FBTztRQUFHQyxNQUFNO1FBQUdDLE1BQU07UUFBR0MsS0FBSztRQUFHQyxNQUFNO1FBQUdDLFdBQVc7UUFBR0MsVUFBVTtRQUFHQyxTQUFTO1FBQUdDLFNBQVM7UUFBR0MsUUFBUTtJQUFFO0lBRW5ILFNBQVM7SUFDVCxPQUFPO1FBQUVULE9BQU87UUFBR0MsTUFBTTtRQUFHQyxNQUFNO1FBQUdDLEtBQUs7UUFBR0MsTUFBTTtRQUFHQyxXQUFXO1FBQUdDLFVBQVU7UUFBSUMsU0FBUztRQUFJQyxTQUFTO1FBQUdDLFFBQVE7SUFBRTtJQUNySCxPQUFPO1FBQUVULE9BQU87UUFBR0MsTUFBTTtRQUFHQyxNQUFNO1FBQUdDLEtBQUs7UUFBR0MsTUFBTTtRQUFJQyxXQUFXO1FBQUdDLFVBQVU7UUFBSUMsU0FBUztRQUFJQyxTQUFTO1FBQUdDLFFBQVE7SUFBRTtJQUN0SCxPQUFPO1FBQUVULE9BQU87UUFBR0MsTUFBTTtRQUFHQyxNQUFNO1FBQUdDLEtBQUs7UUFBR0MsTUFBTTtRQUFJQyxXQUFXO1FBQUdDLFVBQVU7UUFBR0MsU0FBUztRQUFJQyxTQUFTO1FBQUdDLFFBQVE7SUFBRTtJQUNySCxPQUFPO1FBQUVULE9BQU87UUFBR0MsTUFBTTtRQUFHQyxNQUFNO1FBQUdDLEtBQUs7UUFBR0MsTUFBTTtRQUFHQyxXQUFXO1FBQUlDLFVBQVU7UUFBR0MsU0FBUztRQUFHQyxTQUFTO1FBQUdDLFFBQVE7SUFBRTtJQUNwSCxPQUFPO1FBQUVULE9BQU87UUFBR0MsTUFBTTtRQUFHQyxNQUFNO1FBQUdDLEtBQUs7UUFBR0MsTUFBTTtRQUFHQyxXQUFXO1FBQUdDLFVBQVU7UUFBR0MsU0FBUztRQUFHQyxTQUFTO1FBQUdDLFFBQVE7SUFBRTtJQUVuSCxNQUFNO0lBQ04sT0FBTztRQUFFVCxPQUFPO1FBQUdDLE1BQU07UUFBR0MsTUFBTTtRQUFHQyxLQUFLO1FBQUdDLE1BQU07UUFBR0MsV0FBVztRQUFHQyxVQUFVO1FBQUdDLFNBQVM7UUFBR0MsU0FBUztRQUFHQyxRQUFRO0lBQUU7SUFDbkgsT0FBTztRQUFFVCxPQUFPO1FBQUdDLE1BQU07UUFBR0MsTUFBTTtRQUFHQyxLQUFLO1FBQUlDLE1BQU07UUFBR0MsV0FBVztRQUFJQyxVQUFVO1FBQUlDLFNBQVM7UUFBR0MsU0FBUztRQUFHQyxRQUFRO0lBQUU7SUFDdEgsT0FBTztRQUFFVCxPQUFPO1FBQUdDLE1BQU07UUFBR0MsTUFBTTtRQUFHQyxLQUFLO1FBQUdDLE1BQU07UUFBR0MsV0FBVztRQUFJQyxVQUFVO1FBQUdDLFNBQVM7UUFBR0MsU0FBUztRQUFHQyxRQUFRO0lBQUU7SUFDcEgsT0FBTztRQUFFVCxPQUFPO1FBQUdDLE1BQU07UUFBSUMsTUFBTTtRQUFHQyxLQUFLO1FBQUdDLE1BQU07UUFBR0MsV0FBVztRQUFHQyxVQUFVO1FBQUdDLFNBQVM7UUFBR0MsU0FBUztRQUFHQyxRQUFRO0lBQUc7SUFDckgsT0FBTztRQUFFVCxPQUFPO1FBQUlDLE1BQU07UUFBR0MsTUFBTTtRQUFHQyxLQUFLO1FBQUdDLE1BQU07UUFBR0MsV0FBVztRQUFHQyxVQUFVO1FBQUdDLFNBQVM7UUFBR0MsU0FBUztRQUFJQyxRQUFRO0lBQUU7SUFFckgsbUJBQW1CO0lBQ25CLFdBQVc7UUFBRVQsT0FBTztRQUFHQyxNQUFNO1FBQUdDLE1BQU07UUFBR0MsS0FBSztRQUFHQyxNQUFNO1FBQUdDLFdBQVc7UUFBR0MsVUFBVTtRQUFHQyxTQUFTO1FBQUdDLFNBQVM7UUFBR0MsUUFBUTtJQUFFO0FBQ3pIO0FBRUEsU0FBU0MseUJBQXlCQyxJQUFVLEVBQUVDLFdBQStCO0lBQzNFLElBQUksQ0FBQ0EsZUFBZSxDQUFDRCxLQUFLRSxXQUFXLEVBQUUsT0FBTztJQUU5QyxNQUFNQyxjQUFjZixvQkFBb0IsQ0FBQ1ksS0FBS0UsV0FBVyxDQUFDRSxXQUFXLEdBQUcsSUFBSWhCLG9CQUFvQixDQUFDLFVBQVU7SUFDM0csSUFBSWlCLGFBQWE7SUFDakIsSUFBSUMsY0FBYztJQUVsQiw4REFBOEQ7SUFDOUQsS0FBSyxNQUFNLENBQUNDLFNBQVNDLFdBQVcsSUFBSUMsT0FBT0MsT0FBTyxDQUFDVCxhQUFjO1FBQy9ELElBQUlPLGNBQWNBLGFBQWEsR0FBRztZQUNoQyxNQUFNRyxhQUFhUixXQUFXLENBQUNJLFFBQW1DLElBQUk7WUFDdEUsZ0VBQWdFO1lBQ2hFRixjQUFlRyxhQUFhRztZQUM1QkwsZUFBZ0JFLGFBQWEsSUFBSyxnQ0FBZ0M7UUFDcEU7SUFDRjtJQUVBLDRCQUE0QjtJQUM1QixJQUFJRixjQUFjLEdBQUc7UUFDbkIsT0FBTyxhQUFjQSxjQUFlO0lBQ3RDO0lBRUEsT0FBTztBQUNUO0FBRU8sU0FBU00sVUFBVUMsQ0FBTyxFQUFFWixXQUErQjtJQUNoRSxxRUFBcUU7SUFDckUsSUFBSWEsUUFBUTtJQUNaLElBQUksT0FBT0QsRUFBRUUsS0FBSyxLQUFLLFVBQVVELFNBQVNFLEtBQUtDLEdBQUcsQ0FBQyxHQUFHLFFBQVFKLEVBQUVFLEtBQUs7SUFDckUsSUFBSUYsRUFBRUssS0FBSyxLQUFLLEdBQUdKLFNBQVM7SUFDNUIsSUFBSSxPQUFPRCxFQUFFTSxNQUFNLEtBQUssVUFBVTtRQUNoQyxNQUFNQyxTQUFTO1FBQ2ZOLFNBQVNFLEtBQUtDLEdBQUcsQ0FBQyxHQUFHLE1BQU1ELEtBQUtLLEdBQUcsQ0FBQ1IsRUFBRU0sTUFBTSxHQUFHQyxVQUFVO0lBQzNEO0lBQ0EsSUFBSVAsRUFBRVMsTUFBTSxDQUFDQyxRQUFRLENBQUMsVUFBVVQsU0FBUyxLQUFLLHFCQUFxQjtJQUVuRSxnQ0FBZ0M7SUFDaEMsTUFBTVUsa0JBQWtCekIseUJBQXlCYyxHQUFHWjtJQUNwRGEsU0FBU1U7SUFFVCxPQUFPVjtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vaG9saWRheS1kZWFsLWZpbmRlci8uL2xpYi9zY29yZS50cz9iNGY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVhbCwgVHJhdmVsUHJlZmVyZW5jZXMgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBEZXN0aW5hdGlvbiBmZWF0dXJlIHByb2ZpbGVzICgwLTEwIHJhdGluZ3MgZm9yIGNvbW1vbiBkZXN0aW5hdGlvbnMpXG5jb25zdCBERVNUSU5BVElPTl9QUk9GSUxFUzogUmVjb3JkPHN0cmluZywgVHJhdmVsUHJlZmVyZW5jZXM+ID0ge1xuICAvLyBDYXJpYmJlYW5cbiAgXCJDVU5cIjogeyBiZWFjaDogMTAsIHBvb2w6IDksIGdvbGY6IDYsIHNwYTogOCwgZm9vZDogOCwgbmlnaHRsaWZlOiA5LCBzaG9wcGluZzogNywgY3VsdHVyZTogNSwgb3V0ZG9vcjogOCwgZmFtaWx5OiA5IH0sXG4gIFwiUFVKXCI6IHsgYmVhY2g6IDEwLCBwb29sOiA5LCBnb2xmOiA3LCBzcGE6IDgsIGZvb2Q6IDcsIG5pZ2h0bGlmZTogOCwgc2hvcHBpbmc6IDYsIGN1bHR1cmU6IDQsIG91dGRvb3I6IDcsIGZhbWlseTogOSB9LFxuICBcIk1CSlwiOiB7IGJlYWNoOiAxMCwgcG9vbDogOCwgZ29sZjogNSwgc3BhOiA3LCBmb29kOiA4LCBuaWdodGxpZmU6IDcsIHNob3BwaW5nOiA1LCBjdWx0dXJlOiA2LCBvdXRkb29yOiA5LCBmYW1pbHk6IDggfSxcbiAgXCJOQVNcIjogeyBiZWFjaDogOSwgcG9vbDogOCwgZ29sZjogNiwgc3BhOiA2LCBmb29kOiA3LCBuaWdodGxpZmU6IDgsIHNob3BwaW5nOiA3LCBjdWx0dXJlOiA1LCBvdXRkb29yOiA4LCBmYW1pbHk6IDggfSxcbiAgXG4gIC8vIEV1cm9wZVxuICBcIkxIUlwiOiB7IGJlYWNoOiAyLCBwb29sOiA1LCBnb2xmOiA2LCBzcGE6IDcsIGZvb2Q6IDksIG5pZ2h0bGlmZTogOCwgc2hvcHBpbmc6IDEwLCBjdWx0dXJlOiAxMCwgb3V0ZG9vcjogNiwgZmFtaWx5OiA3IH0sXG4gIFwiQ0RHXCI6IHsgYmVhY2g6IDEsIHBvb2w6IDYsIGdvbGY6IDUsIHNwYTogOCwgZm9vZDogMTAsIG5pZ2h0bGlmZTogOSwgc2hvcHBpbmc6IDEwLCBjdWx0dXJlOiAxMCwgb3V0ZG9vcjogNSwgZmFtaWx5OiA3IH0sXG4gIFwiRkNPXCI6IHsgYmVhY2g6IDMsIHBvb2w6IDYsIGdvbGY6IDQsIHNwYTogNywgZm9vZDogMTAsIG5pZ2h0bGlmZTogOCwgc2hvcHBpbmc6IDksIGN1bHR1cmU6IDEwLCBvdXRkb29yOiA3LCBmYW1pbHk6IDggfSxcbiAgXCJCQ05cIjogeyBiZWFjaDogOCwgcG9vbDogNywgZ29sZjogNSwgc3BhOiA3LCBmb29kOiA5LCBuaWdodGxpZmU6IDEwLCBzaG9wcGluZzogOCwgY3VsdHVyZTogOSwgb3V0ZG9vcjogNywgZmFtaWx5OiA3IH0sXG4gIFwiQU1TXCI6IHsgYmVhY2g6IDEsIHBvb2w6IDUsIGdvbGY6IDQsIHNwYTogNiwgZm9vZDogOCwgbmlnaHRsaWZlOiA5LCBzaG9wcGluZzogOCwgY3VsdHVyZTogOSwgb3V0ZG9vcjogNiwgZmFtaWx5OiA3IH0sXG4gIFxuICAvLyBVU0FcbiAgXCJMQVhcIjogeyBiZWFjaDogOCwgcG9vbDogNywgZ29sZjogNywgc3BhOiA4LCBmb29kOiA5LCBuaWdodGxpZmU6IDksIHNob3BwaW5nOiA5LCBjdWx0dXJlOiA4LCBvdXRkb29yOiA4LCBmYW1pbHk6IDcgfSxcbiAgXCJMQVNcIjogeyBiZWFjaDogMCwgcG9vbDogOSwgZ29sZjogOCwgc3BhOiAxMCwgZm9vZDogOSwgbmlnaHRsaWZlOiAxMCwgc2hvcHBpbmc6IDEwLCBjdWx0dXJlOiA1LCBvdXRkb29yOiA1LCBmYW1pbHk6IDYgfSxcbiAgXCJNSUFcIjogeyBiZWFjaDogOSwgcG9vbDogOCwgZ29sZjogNywgc3BhOiA4LCBmb29kOiA4LCBuaWdodGxpZmU6IDEwLCBzaG9wcGluZzogOSwgY3VsdHVyZTogNywgb3V0ZG9vcjogOCwgZmFtaWx5OiA3IH0sXG4gIFwiTUNPXCI6IHsgYmVhY2g6IDUsIHBvb2w6IDEwLCBnb2xmOiA4LCBzcGE6IDcsIGZvb2Q6IDcsIG5pZ2h0bGlmZTogNywgc2hvcHBpbmc6IDgsIGN1bHR1cmU6IDYsIG91dGRvb3I6IDYsIGZhbWlseTogMTAgfSxcbiAgXCJITkxcIjogeyBiZWFjaDogMTAsIHBvb2w6IDgsIGdvbGY6IDksIHNwYTogOCwgZm9vZDogOCwgbmlnaHRsaWZlOiA3LCBzaG9wcGluZzogNywgY3VsdHVyZTogOCwgb3V0ZG9vcjogMTAsIGZhbWlseTogOSB9LFxuICBcbiAgLy8gRGVmYXVsdCBmYWxsYmFja1xuICBcIkRFRkFVTFRcIjogeyBiZWFjaDogNSwgcG9vbDogNSwgZ29sZjogNSwgc3BhOiA1LCBmb29kOiA1LCBuaWdodGxpZmU6IDUsIHNob3BwaW5nOiA1LCBjdWx0dXJlOiA1LCBvdXRkb29yOiA1LCBmYW1pbHk6IDUgfVxufTtcblxuZnVuY3Rpb24gY2FsY3VsYXRlUHJlZmVyZW5jZU1hdGNoKGRlYWw6IERlYWwsIHByZWZlcmVuY2VzPzogVHJhdmVsUHJlZmVyZW5jZXMpOiBudW1iZXIge1xuICBpZiAoIXByZWZlcmVuY2VzIHx8ICFkZWFsLmRlc3RpbmF0aW9uKSByZXR1cm4gMDtcbiAgXG4gIGNvbnN0IGRlc3RQcm9maWxlID0gREVTVElOQVRJT05fUFJPRklMRVNbZGVhbC5kZXN0aW5hdGlvbi50b1VwcGVyQ2FzZSgpXSB8fCBERVNUSU5BVElPTl9QUk9GSUxFU1tcIkRFRkFVTFRcIl07XG4gIGxldCBtYXRjaFNjb3JlID0gMDtcbiAgbGV0IHRvdGFsV2VpZ2h0ID0gMDtcbiAgXG4gIC8vIENhbGN1bGF0ZSBob3cgd2VsbCB0aGUgZGVzdGluYXRpb24gbWF0Y2hlcyB1c2VyIHByZWZlcmVuY2VzXG4gIGZvciAoY29uc3QgW2ZlYXR1cmUsIHVzZXJSYXRpbmddIG9mIE9iamVjdC5lbnRyaWVzKHByZWZlcmVuY2VzKSkge1xuICAgIGlmICh1c2VyUmF0aW5nICYmIHVzZXJSYXRpbmcgPiAwKSB7XG4gICAgICBjb25zdCBkZXN0UmF0aW5nID0gZGVzdFByb2ZpbGVbZmVhdHVyZSBhcyBrZXlvZiBUcmF2ZWxQcmVmZXJlbmNlc10gfHwgNTtcbiAgICAgIC8vIEhpZ2hlciB1c2VyIHJhdGluZyArIGhpZ2hlciBkZXN0aW5hdGlvbiByYXRpbmcgPSBiZXR0ZXIgbWF0Y2hcbiAgICAgIG1hdGNoU2NvcmUgKz0gKHVzZXJSYXRpbmcgKiBkZXN0UmF0aW5nKTtcbiAgICAgIHRvdGFsV2VpZ2h0ICs9ICh1c2VyUmF0aW5nICogMTApOyAvLyBtYXggcG9zc2libGUgZm9yIHRoaXMgZmVhdHVyZVxuICAgIH1cbiAgfVxuICBcbiAgLy8gTm9ybWFsaXplIHRvIDAtMTAwMCBzY2FsZVxuICBpZiAodG90YWxXZWlnaHQgPiAwKSB7XG4gICAgcmV0dXJuIChtYXRjaFNjb3JlIC8gdG90YWxXZWlnaHQpICogMTAwMDtcbiAgfVxuICBcbiAgcmV0dXJuIDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY29yZURlYWwoZDogRGVhbCwgcHJlZmVyZW5jZXM/OiBUcmF2ZWxQcmVmZXJlbmNlcyk6IG51bWJlciB7XG4gIC8vIFZlcnkgc2ltcGxlIHNjb3Jpbmc6IHByZWZlciBsb3dlciBwcmljZSwgZGlyZWN0LCByZWFzb25hYmxlIG5pZ2h0c1xuICBsZXQgc2NvcmUgPSAwO1xuICBpZiAodHlwZW9mIGQucHJpY2UgPT09IFwibnVtYmVyXCIpIHNjb3JlICs9IE1hdGgubWF4KDAsIDEwMDAwIC0gZC5wcmljZSk7XG4gIGlmIChkLnN0b3BzID09PSAwKSBzY29yZSArPSA1MDA7XG4gIGlmICh0eXBlb2YgZC5uaWdodHMgPT09IFwibnVtYmVyXCIpIHtcbiAgICBjb25zdCB0YXJnZXQgPSA3O1xuICAgIHNjb3JlICs9IE1hdGgubWF4KDAsIDMwMCAtIE1hdGguYWJzKGQubmlnaHRzIC0gdGFyZ2V0KSAqIDQwKTtcbiAgfVxuICBpZiAoZC5zb3VyY2UuaW5jbHVkZXMoXCJEZWFsc1wiKSkgc2NvcmUgKz0gMTUwOyAvLyBjdXJhdGVkIGRlYWwgc2l0ZXNcbiAgXG4gIC8vIEFkZCBwcmVmZXJlbmNlIG1hdGNoaW5nIGJvbnVzXG4gIGNvbnN0IHByZWZlcmVuY2VCb251cyA9IGNhbGN1bGF0ZVByZWZlcmVuY2VNYXRjaChkLCBwcmVmZXJlbmNlcyk7XG4gIHNjb3JlICs9IHByZWZlcmVuY2VCb251cztcbiAgXG4gIHJldHVybiBzY29yZTtcbn1cbiJdLCJuYW1lcyI6WyJERVNUSU5BVElPTl9QUk9GSUxFUyIsImJlYWNoIiwicG9vbCIsImdvbGYiLCJzcGEiLCJmb29kIiwibmlnaHRsaWZlIiwic2hvcHBpbmciLCJjdWx0dXJlIiwib3V0ZG9vciIsImZhbWlseSIsImNhbGN1bGF0ZVByZWZlcmVuY2VNYXRjaCIsImRlYWwiLCJwcmVmZXJlbmNlcyIsImRlc3RpbmF0aW9uIiwiZGVzdFByb2ZpbGUiLCJ0b1VwcGVyQ2FzZSIsIm1hdGNoU2NvcmUiLCJ0b3RhbFdlaWdodCIsImZlYXR1cmUiLCJ1c2VyUmF0aW5nIiwiT2JqZWN0IiwiZW50cmllcyIsImRlc3RSYXRpbmciLCJzY29yZURlYWwiLCJkIiwic2NvcmUiLCJwcmljZSIsIk1hdGgiLCJtYXgiLCJzdG9wcyIsIm5pZ2h0cyIsInRhcmdldCIsImFicyIsInNvdXJjZSIsImluY2x1ZGVzIiwicHJlZmVyZW5jZUJvbnVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./lib/score.ts\n"); /***/ }) }; ; // load runtime var __webpack_require__ = require("../../../webpack-runtime.js"); __webpack_require__.C(exports); var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/date-fns","vendor-chunks/iconv-lite","vendor-chunks/parse5","vendor-chunks/cheerio","vendor-chunks/css-select","vendor-chunks/entities","vendor-chunks/domutils","vendor-chunks/zod","vendor-chunks/htmlparser2","vendor-chunks/whatwg-mimetype","vendor-chunks/nth-check","vendor-chunks/cheerio-select","vendor-chunks/whatwg-encoding","vendor-chunks/encoding-sniffer","vendor-chunks/domhandler","vendor-chunks/dom-serializer","vendor-chunks/css-what","vendor-chunks/parse5-parser-stream","vendor-chunks/parse5-htmlparser2-tree-adapter","vendor-chunks/domelementtype","vendor-chunks/safer-buffer","vendor-chunks/boolbase"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fsearch%2Froute&page=%2Fapi%2Fsearch%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fsearch%2Froute.ts&appDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=D%3A%5CProjects%5CDev%5CHoliday%20Travel%20App&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"))); module.exports = __webpack_exports__; })();