- Redesigned card display with 2.5:3.5 aspect ratio and image-only view - Added infinite scroll to replace pagination - Implemented authentic card back placeholders for MTG, Pokemon, and Lorcana - Added rarity-based particle effects with tiered intensity (mythic/enchanted/rare/uncommon) - Enhanced hover details panel with structured card information - Fixed search functionality with debouncing and Enter key support - Improved filter system with working TCG, rarity, set, and price filters - Added favorite system for cards in both hover and detail views - Updated card detail page with comprehensive metadata and actions - Fixed API filtering with proper Vercel Postgres implementation - Added particle animations and rarity glow effects - Improved overall UX with better visual hierarchy and interactions
66 lines
No EOL
36 KiB
JavaScript
66 lines
No EOL
36 KiB
JavaScript
"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 = "pages/api/cards/search";
|
|
exports.ids = ["pages/api/cards/search"];
|
|
exports.modules = {
|
|
|
|
/***/ "(api-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fcards%2Fsearch&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fcards%2Fsearch.js&middlewareConfigBase64=e30%3D!":
|
|
/*!**********************************************************************************************************************************************************************************************************************************!*\
|
|
!*** ./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fcards%2Fsearch&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fcards%2Fsearch.js&middlewareConfigBase64=e30%3D! ***!
|
|
\**********************************************************************************************************************************************************************************************************************************/
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ handler: () => (/* binding */ handler)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/api-utils */ \"(api-node)/./node_modules/next/dist/server/api-utils/index.js\");\n/* harmony import */ var next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/route-kind */ \"(api-node)/./node_modules/next/dist/server/route-kind.js\");\n/* harmony import */ var next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/server/route-modules/pages-api/module.compiled */ \"(api-node)/./node_modules/next/dist/server/route-modules/pages-api/module.compiled.js\");\n/* harmony import */ var next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/build/templates/helpers */ \"(api-node)/./node_modules/next/dist/build/templates/helpers.js\");\n/* harmony import */ var _pages_api_cards_search_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/api/cards/search.js */ \"(api-node)/./pages/api/cards/search.js\");\n/* harmony import */ var next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next/dist/server/lib/trace/tracer */ \"(api-node)/./node_modules/next/dist/server/lib/trace/tracer.js\");\n/* harmony import */ var next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! next/dist/server/lib/trace/constants */ \"(api-node)/./node_modules/next/dist/server/lib/trace/constants.js\");\n/* harmony import */ var next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__);\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_pages_api_cards_search_js__WEBPACK_IMPORTED_MODULE_4__]);\n_pages_api_cards_search_js__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\n\n\n// Import the userland code.\n\n\n\n// Re-export the handler (should be the default export).\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_3__.hoist)(_pages_api_cards_search_js__WEBPACK_IMPORTED_MODULE_4__, 'default'));\n// Re-export config.\nconst config = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_3__.hoist)(_pages_api_cards_search_js__WEBPACK_IMPORTED_MODULE_4__, 'config');\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2__.PagesAPIRouteModule({\n definition: {\n kind: next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.PAGES_API,\n page: \"/api/cards/search\",\n pathname: \"/api/cards/search\",\n // The following aren't used in production.\n bundlePath: '',\n filename: ''\n },\n userland: _pages_api_cards_search_js__WEBPACK_IMPORTED_MODULE_4__,\n distDir: \".next\" || 0,\n projectDir: false || ''\n});\nasync function handler(req, res, ctx) {\n let srcPage = \"/api/cards/search\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (false) {}\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return;\n }\n const { query, params, prerenderManifest } = prepareResult;\n try {\n const method = req.method || 'GET';\n const tracer = (0,next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__.getTracer)();\n const activeSpan = tracer.getActiveScopeSpan();\n const onRequestError = routeModule.instrumentationOnRequestError.bind(routeModule);\n const invokeRouteModule = async (span)=>routeModule.render(req, res, {\n query: {\n ...query,\n ...params\n },\n params,\n allowedRevalidateHeaderKeys: undefined,\n multiZoneDraftMode: Boolean(\"false\"),\n trustHostHeader: undefined,\n // TODO: get this from from runtime env so manifest\n // doesn't need to load\n previewProps: prerenderManifest.preview,\n propagateError: false,\n dev: routeModule.isDev,\n page: \"/api/cards/search\",\n projectDir: false || '',\n onError: (...args)=>onRequestError(req, ...args)\n }).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__.BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${req.url}`);\n }\n });\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await invokeRouteModule(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__.BaseServerSpan.handleRequest, {\n spanName: `${method} ${req.url}`,\n kind: next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__.SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, invokeRouteModule));\n }\n } catch (err) {\n // we re-throw in dev to show the error overlay\n if (routeModule.isDev) {\n throw err;\n }\n // this is technically an invariant as error handling\n // should be done inside of api-resolver onError\n (0,next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0__.sendError)(res, 500, 'Internal Server Error');\n } finally{\n // We don't allow any waitUntil work in pages API routes currently\n // so if callback is present return with resolved promise since no\n // pending work\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n }\n}\n\n//# sourceMappingURL=pages-api.js.map\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwaS1ub2RlKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtcm91dGUtbG9hZGVyL2luZGV4LmpzP2tpbmQ9UEFHRVNfQVBJJnBhZ2U9JTJGYXBpJTJGY2FyZHMlMkZzZWFyY2gmcHJlZmVycmVkUmVnaW9uPSZhYnNvbHV0ZVBhZ2VQYXRoPS4lMkZwYWdlcyUyRmFwaSUyRmNhcmRzJTJGc2VhcmNoLmpzJm1pZGRsZXdhcmVDb25maWdCYXNlNjQ9ZTMwJTNEISIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF1RDtBQUNDO0FBQ3VDO0FBQ3JDO0FBQzFEO0FBQ3dEO0FBQ2dCO0FBQ0Y7QUFDdEU7QUFDQSxpRUFBZSx3RUFBSyxDQUFDLHVEQUFRLFlBQVksRUFBQztBQUMxQztBQUNPLGVBQWUsd0VBQUssQ0FBQyx1REFBUTtBQUNwQztBQUNBLHdCQUF3Qix5R0FBbUI7QUFDM0M7QUFDQSxjQUFjLGtFQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsWUFBWTtBQUNaLGFBQWEsT0FBb0MsSUFBSSxDQUFFO0FBQ3ZELGdCQUFnQixNQUF1QztBQUN2RCxDQUFDO0FBQ007QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUIsRUFBRSxFQUUxQjtBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxtQ0FBbUM7QUFDL0M7QUFDQTtBQUNBLHVCQUF1Qiw0RUFBUztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSw2Q0FBNkMsU0FBNkM7QUFDMUYsNENBQTRDLE9BQXdDO0FBQ3BGLGlDQUFpQyxTQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsTUFBdUM7QUFDbkU7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSxnRkFBYztBQUMvRSwrREFBK0QseUNBQXlDO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFFBQVEsRUFBRSxNQUFNO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0Esa0JBQWtCO0FBQ2xCLHVDQUF1QyxRQUFRLEVBQUUsUUFBUTtBQUN6RDtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDViw2RUFBNkUsZ0ZBQWM7QUFDM0YsaUNBQWlDLFFBQVEsRUFBRSxRQUFRO0FBQ25ELDBCQUEwQix1RUFBUTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHFFQUFTO0FBQ2pCLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUMiLCJzb3VyY2VzIjpbIiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9hcGktdXRpbHNcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3JvdXRlLWtpbmRcIjtcbmltcG9ydCB7IFBhZ2VzQVBJUm91dGVNb2R1bGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1tb2R1bGVzL3BhZ2VzLWFwaS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IGhvaXN0IH0gZnJvbSBcIm5leHQvZGlzdC9idWlsZC90ZW1wbGF0ZXMvaGVscGVyc1wiO1xuLy8gSW1wb3J0IHRoZSB1c2VybGFuZCBjb2RlLlxuaW1wb3J0ICogYXMgdXNlcmxhbmQgZnJvbSBcIi4vcGFnZXMvYXBpL2NhcmRzL3NlYXJjaC5qc1wiO1xuaW1wb3J0IHsgZ2V0VHJhY2VyLCBTcGFuS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi90cmFjZS90cmFjZXJcIjtcbmltcG9ydCB7IEJhc2VTZXJ2ZXJTcGFuIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3RyYWNlL2NvbnN0YW50c1wiO1xuLy8gUmUtZXhwb3J0IHRoZSBoYW5kbGVyIChzaG91bGQgYmUgdGhlIGRlZmF1bHQgZXhwb3J0KS5cbmV4cG9ydCBkZWZhdWx0IGhvaXN0KHVzZXJsYW5kLCAnZGVmYXVsdCcpO1xuLy8gUmUtZXhwb3J0IGNvbmZpZy5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBob2lzdCh1c2VybGFuZCwgJ2NvbmZpZycpO1xuLy8gQ3JlYXRlIGFuZCBleHBvcnQgdGhlIHJvdXRlIG1vZHVsZSB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG5jb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBQYWdlc0FQSVJvdXRlTW9kdWxlKHtcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgIGtpbmQ6IFJvdXRlS2luZC5QQUdFU19BUEksXG4gICAgICAgIHBhZ2U6IFwiL2FwaS9jYXJkcy9zZWFyY2hcIixcbiAgICAgICAgcGF0aG5hbWU6IFwiL2FwaS9jYXJkcy9zZWFyY2hcIixcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICAgICAgICBidW5kbGVQYXRoOiAnJyxcbiAgICAgICAgZmlsZW5hbWU6ICcnXG4gICAgfSxcbiAgICB1c2VybGFuZCxcbiAgICBkaXN0RGlyOiBwcm9jZXNzLmVudi5fX05FWFRfUkVMQVRJVkVfRElTVF9ESVIgfHwgJycsXG4gICAgcHJvamVjdERpcjogcHJvY2Vzcy5lbnYuX19ORVhUX1JFTEFUSVZFX1BST0pFQ1RfRElSIHx8ICcnXG59KTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKHJlcSwgcmVzLCBjdHgpIHtcbiAgICBsZXQgc3JjUGFnZSA9IFwiL2FwaS9jYXJkcy9zZWFyY2hcIjtcbiAgICAvLyB0dXJib3BhY2sgZG9lc24ndCBub3JtYWxpemUgYC9pbmRleGAgaW4gdGhlIHBhZ2UgbmFtZVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gdG8gcHJvY2VzcyBkeW5hbWljIHJvdXRlcyBwcm9wZXJseVxuICAgIC8vIFRPRE86IGZpeCB0dXJib3BhY2sgcHJvdmlkaW5nIGRpZmZlcmluZyB2YWx1ZSBmcm9tIHdlYnBhY2tcbiAgICBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgICAgIHNyY1BhZ2UgPSBzcmNQYWdlLnJlcGxhY2UoL1xcL2luZGV4JC8sICcnKSB8fCAnLyc7XG4gICAgfVxuICAgIGNvbnN0IHByZXBhcmVSZXN1bHQgPSBhd2FpdCByb3V0ZU1vZHVsZS5wcmVwYXJlKHJlcSwgcmVzLCB7XG4gICAgICAgIHNyY1BhZ2VcbiAgICB9KTtcbiAgICBpZiAoIXByZXBhcmVSZXN1bHQpIHtcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDA7XG4gICAgICAgIHJlcy5lbmQoJ0JhZCBSZXF1ZXN0Jyk7XG4gICAgICAgIGN0eC53YWl0VW50aWwgPT0gbnVsbCA/IHZvaWQgMCA6IGN0eC53YWl0VW50aWwuY2FsbChjdHgsIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHF1ZXJ5LCBwYXJhbXMsIHByZXJlbmRlck1hbmlmZXN0IH0gPSBwcmVwYXJlUmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICAgIGNvbnN0IHRyYWNlciA9IGdldFRyYWNlcigpO1xuICAgICAgICBjb25zdCBhY3RpdmVTcGFuID0gdHJhY2VyLmdldEFjdGl2ZVNjb3BlU3BhbigpO1xuICAgICAgICBjb25zdCBvblJlcXVlc3RFcnJvciA9IHJvdXRlTW9kdWxlLmluc3RydW1lbnRhdGlvbk9uUmVxdWVzdEVycm9yLmJpbmQocm91dGVNb2R1bGUpO1xuICAgICAgICBjb25zdCBpbnZva2VSb3V0ZU1vZHVsZSA9IGFzeW5jIChzcGFuKT0+cm91dGVNb2R1bGUucmVuZGVyKHJlcSwgcmVzLCB7XG4gICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucXVlcnksXG4gICAgICAgICAgICAgICAgICAgIC4uLnBhcmFtc1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIGFsbG93ZWRSZXZhbGlkYXRlSGVhZGVyS2V5czogcHJvY2Vzcy5lbnYuX19ORVhUX0FMTE9XRURfUkVWQUxJREFURV9IRUFERVJTLFxuICAgICAgICAgICAgICAgIG11bHRpWm9uZURyYWZ0TW9kZTogQm9vbGVhbihwcm9jZXNzLmVudi5fX05FWFRfTVVMVElfWk9ORV9EUkFGVF9NT0RFKSxcbiAgICAgICAgICAgICAgICB0cnVzdEhvc3RIZWFkZXI6IHByb2Nlc3MuZW52Ll9fTkVYVF9UUlVTVF9IT1NUX0hFQURFUixcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgdGhpcyBmcm9tIGZyb20gcnVudGltZSBlbnYgc28gbWFuaWZlc3RcbiAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG5lZWQgdG8gbG9hZFxuICAgICAgICAgICAgICAgIHByZXZpZXdQcm9wczogcHJlcmVuZGVyTWFuaWZlc3QucHJldmlldyxcbiAgICAgICAgICAgICAgICBwcm9wYWdhdGVFcnJvcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGV2OiByb3V0ZU1vZHVsZS5pc0RldixcbiAgICAgICAgICAgICAgICBwYWdlOiBcIi9hcGkvY2FyZHMvc2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgcHJvamVjdERpcjogcHJvY2Vzcy5lbnYuX19ORVhUX1JFTEFUSVZFX1BST0pFQ1RfRElSIHx8ICcnLFxuICAgICAgICAgICAgICAgIG9uRXJyb3I6ICguLi5hcmdzKT0+b25SZXF1ZXN0RXJyb3IocmVxLCAuLi5hcmdzKVxuICAgICAgICAgICAgfSkuZmluYWxseSgoKT0+e1xuICAgICAgICAgICAgICAgIGlmICghc3BhbikgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICdodHRwLnN0YXR1c19jb2RlJzogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICAgICAgICAgICduZXh0LnJzYyc6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdFNwYW5BdHRyaWJ1dGVzID0gdHJhY2VyLmdldFJvb3RTcGFuQXR0cmlidXRlcygpO1xuICAgICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGdldCBhdHRyaWJ1dGVzLCBwcm9iYWJseSBPVEVMIGlzIG5vdCBlbmFibGVkXG4gICAgICAgICAgICAgICAgaWYgKCFyb290U3BhbkF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm9vdFNwYW5BdHRyaWJ1dGVzLmdldCgnbmV4dC5zcGFuX3R5cGUnKSAhPT0gQmFzZVNlcnZlclNwYW4uaGFuZGxlUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVuZXhwZWN0ZWQgcm9vdCBzcGFuIHR5cGUgJyR7cm9vdFNwYW5BdHRyaWJ1dGVzLmdldCgnbmV4dC5zcGFuX3R5cGUnKX0nLiBQbGVhc2UgcmVwb3J0IHRoaXMgTmV4dC5qcyBpc3N1ZSBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanNgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3V0ZSA9IHJvb3RTcGFuQXR0cmlidXRlcy5nZXQoJ25leHQucm91dGUnKTtcbiAgICAgICAgICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGAke21ldGhvZH0gJHtyb3V0ZX1gO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ25leHQucm91dGUnOiByb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdodHRwLnJvdXRlJzogcm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbmV4dC5zcGFuX25hbWUnOiBuYW1lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnVwZGF0ZU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi51cGRhdGVOYW1lKGAke21ldGhvZH0gJHtyZXEudXJsfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAvLyBUT0RPOiBhY3RpdmVTcGFuIGNvZGUgcGF0aCBpcyBmb3Igd2hlbiB3cmFwcGVkIGJ5XG4gICAgICAgIC8vIG5leHQtc2VydmVyIGNhbiBiZSByZW1vdmVkIHdoZW4gdGhpcyBpcyBubyBsb25nZXIgdXNlZFxuICAgICAgICBpZiAoYWN0aXZlU3Bhbikge1xuICAgICAgICAgICAgYXdhaXQgaW52b2tlUm91dGVNb2R1bGUoYWN0aXZlU3Bhbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0cmFjZXIud2l0aFByb3BhZ2F0ZWRDb250ZXh0KHJlcS5oZWFkZXJzLCAoKT0+dHJhY2VyLnRyYWNlKEJhc2VTZXJ2ZXJTcGFuLmhhbmRsZVJlcXVlc3QsIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbk5hbWU6IGAke21ldGhvZH0gJHtyZXEudXJsfWAsXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IFNwYW5LaW5kLlNFUlZFUixcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHAubWV0aG9kJzogbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHAudGFyZ2V0JzogcmVxLnVybFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgaW52b2tlUm91dGVNb2R1bGUpKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyB3ZSByZS10aHJvdyBpbiBkZXYgdG8gc2hvdyB0aGUgZXJyb3Igb3ZlcmxheVxuICAgICAgICBpZiAocm91dGVNb2R1bGUuaXNEZXYpIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzIGlzIHRlY2huaWNhbGx5IGFuIGludmFyaWFudCBhcyBlcnJvciBoYW5kbGluZ1xuICAgICAgICAvLyBzaG91bGQgYmUgZG9uZSBpbnNpZGUgb2YgYXBpLXJlc29sdmVyIG9uRXJyb3JcbiAgICAgICAgc2VuZEVycm9yKHJlcywgNTAwLCAnSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7XG4gICAgfSBmaW5hbGx5e1xuICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyBhbnkgd2FpdFVudGlsIHdvcmsgaW4gcGFnZXMgQVBJIHJvdXRlcyBjdXJyZW50bHlcbiAgICAgICAgLy8gc28gaWYgY2FsbGJhY2sgaXMgcHJlc2VudCByZXR1cm4gd2l0aCByZXNvbHZlZCBwcm9taXNlIHNpbmNlIG5vXG4gICAgICAgIC8vIHBlbmRpbmcgd29ya1xuICAgICAgICBjdHgud2FpdFVudGlsID09IG51bGwgPyB2b2lkIDAgOiBjdHgud2FpdFVudGlsLmNhbGwoY3R4LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfVxufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWdlcy1hcGkuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(api-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fcards%2Fsearch&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fcards%2Fsearch.js&middlewareConfigBase64=e30%3D!\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(api-node)/./pages/api/cards/search.js":
|
|
/*!***********************************!*\
|
|
!*** ./pages/api/cards/search.js ***!
|
|
\***********************************/
|
|
/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval("__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ handler)\n/* harmony export */ });\n/* harmony import */ var _vercel_postgres__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vercel/postgres */ \"@vercel/postgres\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__]);\n_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\nasync function handler(req, res) {\n if (req.method !== 'GET') {\n return res.status(405).json({\n error: 'Method not allowed'\n });\n }\n try {\n const { query = '', game = '', rarity = '', set = '', minPrice = '', maxPrice = '', page = 1, limit = 50 } = req.query;\n // Build WHERE clause based on filters\n let whereConditions = [];\n let queryParams = [];\n if (query && query.trim()) {\n whereConditions.push(`(name ILIKE '%${query.trim()}%' OR oracle_text ILIKE '%${query.trim()}%')`);\n }\n if (game && game !== 'all') {\n whereConditions.push(`game = '${game}'`);\n }\n if (rarity && rarity !== 'all') {\n whereConditions.push(`rarity = '${rarity}'`);\n }\n if (set && set !== 'all') {\n whereConditions.push(`set_name = '${set}'`);\n }\n if (minPrice && minPrice !== '') {\n whereConditions.push(`current_price >= ${parseFloat(minPrice)}`);\n }\n if (maxPrice && maxPrice !== '') {\n whereConditions.push(`current_price <= ${parseFloat(maxPrice)}`);\n }\n const whereClause = whereConditions.length > 0 ? `WHERE ${whereConditions.join(' AND ')}` : '';\n // Get filtered cards\n let result;\n if (whereClause) {\n result = await (0,_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__.sql)`\n SELECT \n id, name, set_name, set_code, card_number, rarity, game,\n mana_cost, cmc, card_type, colors, oracle_text,\n power, toughness, image_url, stock_image_url,\n current_price, market_price, scryfall_id, verified,\n created_at, updated_at\n FROM cards\n WHERE ${whereConditions.join(' AND ')}\n ORDER BY name ASC\n LIMIT ${parseInt(limit)} OFFSET ${(parseInt(page) - 1) * parseInt(limit)}\n `;\n } else {\n result = await (0,_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__.sql)`\n SELECT \n id, name, set_name, set_code, card_number, rarity, game,\n mana_cost, cmc, card_type, colors, oracle_text,\n power, toughness, image_url, stock_image_url,\n current_price, market_price, scryfall_id, verified,\n created_at, updated_at\n FROM cards\n ORDER BY name ASC\n LIMIT ${parseInt(limit)} OFFSET ${(parseInt(page) - 1) * parseInt(limit)}\n `;\n }\n // Get total count with same filters\n let countResult;\n if (whereClause) {\n countResult = await (0,_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__.sql)`\n SELECT COUNT(*) as total FROM cards\n WHERE ${whereConditions.join(' AND ')}\n `;\n } else {\n countResult = await (0,_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__.sql)`\n SELECT COUNT(*) as total FROM cards\n `;\n }\n const total = parseInt(countResult.rows[0]?.total || 0);\n // Get unique values for filters\n const [gamesResult, raritiesResult, setsResult] = await Promise.all([\n (0,_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__.sql)`SELECT DISTINCT game FROM cards WHERE game IS NOT NULL ORDER BY game`,\n (0,_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__.sql)`SELECT DISTINCT rarity FROM cards WHERE rarity IS NOT NULL ORDER BY rarity`,\n (0,_vercel_postgres__WEBPACK_IMPORTED_MODULE_0__.sql)`SELECT DISTINCT set_name FROM cards WHERE set_name IS NOT NULL ORDER BY set_name`\n ]);\n res.status(200).json({\n success: true,\n cards: result.rows || [],\n pagination: {\n page: parseInt(page),\n limit: parseInt(limit),\n total,\n pages: Math.ceil(total / limit)\n },\n filters: {\n games: Array.isArray(gamesResult.rows) ? gamesResult.rows.map((row)=>row.game) : [],\n rarities: Array.isArray(raritiesResult.rows) ? raritiesResult.rows.map((row)=>row.rarity) : [],\n sets: Array.isArray(setsResult.rows) ? setsResult.rows.map((row)=>row.set_name) : []\n }\n });\n } catch (error) {\n console.error('Card search error:', error);\n res.status(500).json({\n error: 'Search failed',\n details: error.message\n });\n }\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwaS1ub2RlKS8uL3BhZ2VzL2FwaS9jYXJkcy9zZWFyY2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBdUM7QUFFeEIsZUFBZUMsUUFBUUMsR0FBRyxFQUFFQyxHQUFHO0lBQzVDLElBQUlELElBQUlFLE1BQU0sS0FBSyxPQUFPO1FBQ3hCLE9BQU9ELElBQUlFLE1BQU0sQ0FBQyxLQUFLQyxJQUFJLENBQUM7WUFBRUMsT0FBTztRQUFxQjtJQUM1RDtJQUVBLElBQUk7UUFDRixNQUFNLEVBQ0pDLFFBQVEsRUFBRSxFQUNWQyxPQUFPLEVBQUUsRUFDVEMsU0FBUyxFQUFFLEVBQ1hDLE1BQU0sRUFBRSxFQUNSQyxXQUFXLEVBQUUsRUFDYkMsV0FBVyxFQUFFLEVBQ2JDLE9BQU8sQ0FBQyxFQUNSQyxRQUFRLEVBQUUsRUFDWCxHQUFHYixJQUFJTSxLQUFLO1FBRWIsc0NBQXNDO1FBQ3RDLElBQUlRLGtCQUFrQixFQUFFO1FBQ3hCLElBQUlDLGNBQWMsRUFBRTtRQUVwQixJQUFJVCxTQUFTQSxNQUFNVSxJQUFJLElBQUk7WUFDekJGLGdCQUFnQkcsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFWCxNQUFNVSxJQUFJLEdBQUcsMEJBQTBCLEVBQUVWLE1BQU1VLElBQUksR0FBRyxHQUFHLENBQUM7UUFDbEc7UUFFQSxJQUFJVCxRQUFRQSxTQUFTLE9BQU87WUFDMUJPLGdCQUFnQkcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFVixLQUFLLENBQUMsQ0FBQztRQUN6QztRQUVBLElBQUlDLFVBQVVBLFdBQVcsT0FBTztZQUM5Qk0sZ0JBQWdCRyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUVULE9BQU8sQ0FBQyxDQUFDO1FBQzdDO1FBRUEsSUFBSUMsT0FBT0EsUUFBUSxPQUFPO1lBQ3hCSyxnQkFBZ0JHLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRVIsSUFBSSxDQUFDLENBQUM7UUFDNUM7UUFFQSxJQUFJQyxZQUFZQSxhQUFhLElBQUk7WUFDL0JJLGdCQUFnQkcsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUVDLFdBQVdSLFdBQVc7UUFDakU7UUFFQSxJQUFJQyxZQUFZQSxhQUFhLElBQUk7WUFDL0JHLGdCQUFnQkcsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUVDLFdBQVdQLFdBQVc7UUFDakU7UUFFQSxNQUFNUSxjQUFjTCxnQkFBZ0JNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFTixnQkFBZ0JPLElBQUksQ0FBQyxVQUFVLEdBQUc7UUFFNUYscUJBQXFCO1FBQ3JCLElBQUlDO1FBQ0osSUFBSUgsYUFBYTtZQUNmRyxTQUFTLE1BQU14QixxREFBRyxDQUFDOzs7Ozs7OztjQVFYLEVBQUVnQixnQkFBZ0JPLElBQUksQ0FBQyxTQUFTOztjQUVoQyxFQUFFRSxTQUFTVixPQUFPLFFBQVEsRUFBRSxDQUFDVSxTQUFTWCxRQUFRLEtBQUtXLFNBQVNWLE9BQU87TUFDM0UsQ0FBQztRQUNILE9BQU87WUFDTFMsU0FBUyxNQUFNeEIscURBQUcsQ0FBQzs7Ozs7Ozs7O2NBU1gsRUFBRXlCLFNBQVNWLE9BQU8sUUFBUSxFQUFFLENBQUNVLFNBQVNYLFFBQVEsS0FBS1csU0FBU1YsT0FBTztNQUMzRSxDQUFDO1FBQ0g7UUFFQSxvQ0FBb0M7UUFDcEMsSUFBSVc7UUFDSixJQUFJTCxhQUFhO1lBQ2ZLLGNBQWMsTUFBTTFCLHFEQUFHLENBQUM7O2NBRWhCLEVBQUVnQixnQkFBZ0JPLElBQUksQ0FBQyxTQUFTO01BQ3hDLENBQUM7UUFDSCxPQUFPO1lBQ0xHLGNBQWMsTUFBTTFCLHFEQUFHLENBQUM7O01BRXhCLENBQUM7UUFDSDtRQUNBLE1BQU0yQixRQUFRRixTQUFTQyxZQUFZRSxJQUFJLENBQUMsRUFBRSxFQUFFRCxTQUFTO1FBRXJELGdDQUFnQztRQUNoQyxNQUFNLENBQUNFLGFBQWFDLGdCQUFnQkMsV0FBVyxHQUFHLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQztZQUNsRWpDLHFEQUFHLENBQUMsb0VBQW9FLENBQUM7WUFDekVBLHFEQUFHLENBQUMsMEVBQTBFLENBQUM7WUFDL0VBLHFEQUFHLENBQUMsZ0ZBQWdGLENBQUM7U0FDdEY7UUFFREcsSUFBSUUsTUFBTSxDQUFDLEtBQUtDLElBQUksQ0FBQztZQUNuQjRCLFNBQVM7WUFDVEMsT0FBT1gsT0FBT0ksSUFBSSxJQUFJLEVBQUU7WUFDeEJRLFlBQVk7Z0JBQ1Z0QixNQUFNVyxTQUFTWDtnQkFDZkMsT0FBT1UsU0FBU1Y7Z0JBQ2hCWTtnQkFDQVUsT0FBT0MsS0FBS0MsSUFBSSxDQUFDWixRQUFRWjtZQUMzQjtZQUNBeUIsU0FBUztnQkFDUEMsT0FBT0MsTUFBTUMsT0FBTyxDQUFDZCxZQUFZRCxJQUFJLElBQUlDLFlBQVlELElBQUksQ0FBQ2dCLEdBQUcsQ0FBQ0MsQ0FBQUEsTUFBT0EsSUFBSXBDLElBQUksSUFBSSxFQUFFO2dCQUNuRnFDLFVBQVVKLE1BQU1DLE9BQU8sQ0FBQ2IsZUFBZUYsSUFBSSxJQUFJRSxlQUFlRixJQUFJLENBQUNnQixHQUFHLENBQUNDLENBQUFBLE1BQU9BLElBQUluQyxNQUFNLElBQUksRUFBRTtnQkFDOUZxQyxNQUFNTCxNQUFNQyxPQUFPLENBQUNaLFdBQVdILElBQUksSUFBSUcsV0FBV0gsSUFBSSxDQUFDZ0IsR0FBRyxDQUFDQyxDQUFBQSxNQUFPQSxJQUFJRyxRQUFRLElBQUksRUFBRTtZQUN0RjtRQUNGO0lBRUYsRUFBRSxPQUFPekMsT0FBTztRQUNkMEMsUUFBUTFDLEtBQUssQ0FBQyxzQkFBc0JBO1FBQ3BDSixJQUFJRSxNQUFNLENBQUMsS0FBS0MsSUFBSSxDQUFDO1lBQ25CQyxPQUFPO1lBQ1AyQyxTQUFTM0MsTUFBTTRDLE9BQU87UUFDeEI7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvVXNlcnMvcnN0aWxsdy9Eb2N1bWVudHMvdGNnLXZhdWx0L3BhZ2VzL2FwaS9jYXJkcy9zZWFyY2guanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3FsIH0gZnJvbSAnQHZlcmNlbC9wb3N0Z3Jlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIocmVxLCByZXMpIHtcbiAgaWYgKHJlcS5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDA1KS5qc29uKHsgZXJyb3I6ICdNZXRob2Qgbm90IGFsbG93ZWQnIH0pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7XG4gICAgICBxdWVyeSA9ICcnLFxuICAgICAgZ2FtZSA9ICcnLFxuICAgICAgcmFyaXR5ID0gJycsXG4gICAgICBzZXQgPSAnJyxcbiAgICAgIG1pblByaWNlID0gJycsXG4gICAgICBtYXhQcmljZSA9ICcnLFxuICAgICAgcGFnZSA9IDEsXG4gICAgICBsaW1pdCA9IDUwXG4gICAgfSA9IHJlcS5xdWVyeTtcblxuICAgIC8vIEJ1aWxkIFdIRVJFIGNsYXVzZSBiYXNlZCBvbiBmaWx0ZXJzXG4gICAgbGV0IHdoZXJlQ29uZGl0aW9ucyA9IFtdO1xuICAgIGxldCBxdWVyeVBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LnRyaW0oKSkge1xuICAgICAgd2hlcmVDb25kaXRpb25zLnB1c2goYChuYW1lIElMSUtFICclJHtxdWVyeS50cmltKCl9JScgT1Igb3JhY2xlX3RleHQgSUxJS0UgJyUke3F1ZXJ5LnRyaW0oKX0lJylgKTtcbiAgICB9XG5cbiAgICBpZiAoZ2FtZSAmJiBnYW1lICE9PSAnYWxsJykge1xuICAgICAgd2hlcmVDb25kaXRpb25zLnB1c2goYGdhbWUgPSAnJHtnYW1lfSdgKTtcbiAgICB9XG5cbiAgICBpZiAocmFyaXR5ICYmIHJhcml0eSAhPT0gJ2FsbCcpIHtcbiAgICAgIHdoZXJlQ29uZGl0aW9ucy5wdXNoKGByYXJpdHkgPSAnJHtyYXJpdHl9J2ApO1xuICAgIH1cblxuICAgIGlmIChzZXQgJiYgc2V0ICE9PSAnYWxsJykge1xuICAgICAgd2hlcmVDb25kaXRpb25zLnB1c2goYHNldF9uYW1lID0gJyR7c2V0fSdgKTtcbiAgICB9XG5cbiAgICBpZiAobWluUHJpY2UgJiYgbWluUHJpY2UgIT09ICcnKSB7XG4gICAgICB3aGVyZUNvbmRpdGlvbnMucHVzaChgY3VycmVudF9wcmljZSA+PSAke3BhcnNlRmxvYXQobWluUHJpY2UpfWApO1xuICAgIH1cblxuICAgIGlmIChtYXhQcmljZSAmJiBtYXhQcmljZSAhPT0gJycpIHtcbiAgICAgIHdoZXJlQ29uZGl0aW9ucy5wdXNoKGBjdXJyZW50X3ByaWNlIDw9ICR7cGFyc2VGbG9hdChtYXhQcmljZSl9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2hlcmVDbGF1c2UgPSB3aGVyZUNvbmRpdGlvbnMubGVuZ3RoID4gMCA/IGBXSEVSRSAke3doZXJlQ29uZGl0aW9ucy5qb2luKCcgQU5EICcpfWAgOiAnJztcblxuICAgIC8vIEdldCBmaWx0ZXJlZCBjYXJkc1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHdoZXJlQ2xhdXNlKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBzcWxgXG4gICAgICAgIFNFTEVDVCBcbiAgICAgICAgICBpZCwgbmFtZSwgc2V0X25hbWUsIHNldF9jb2RlLCBjYXJkX251bWJlciwgcmFyaXR5LCBnYW1lLFxuICAgICAgICAgIG1hbmFfY29zdCwgY21jLCBjYXJkX3R5cGUsIGNvbG9ycywgb3JhY2xlX3RleHQsXG4gICAgICAgICAgcG93ZXIsIHRvdWdobmVzcywgaW1hZ2VfdXJsLCBzdG9ja19pbWFnZV91cmwsXG4gICAgICAgICAgY3VycmVudF9wcmljZSwgbWFya2V0X3ByaWNlLCBzY3J5ZmFsbF9pZCwgdmVyaWZpZWQsXG4gICAgICAgICAgY3JlYXRlZF9hdCwgdXBkYXRlZF9hdFxuICAgICAgICBGUk9NIGNhcmRzXG4gICAgICAgIFdIRVJFICR7d2hlcmVDb25kaXRpb25zLmpvaW4oJyBBTkQgJyl9XG4gICAgICAgIE9SREVSIEJZIG5hbWUgQVNDXG4gICAgICAgIExJTUlUICR7cGFyc2VJbnQobGltaXQpfSBPRkZTRVQgJHsocGFyc2VJbnQocGFnZSkgLSAxKSAqIHBhcnNlSW50KGxpbWl0KX1cbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHNxbGBcbiAgICAgICAgU0VMRUNUIFxuICAgICAgICAgIGlkLCBuYW1lLCBzZXRfbmFtZSwgc2V0X2NvZGUsIGNhcmRfbnVtYmVyLCByYXJpdHksIGdhbWUsXG4gICAgICAgICAgbWFuYV9jb3N0LCBjbWMsIGNhcmRfdHlwZSwgY29sb3JzLCBvcmFjbGVfdGV4dCxcbiAgICAgICAgICBwb3dlciwgdG91Z2huZXNzLCBpbWFnZV91cmwsIHN0b2NrX2ltYWdlX3VybCxcbiAgICAgICAgICBjdXJyZW50X3ByaWNlLCBtYXJrZXRfcHJpY2UsIHNjcnlmYWxsX2lkLCB2ZXJpZmllZCxcbiAgICAgICAgICBjcmVhdGVkX2F0LCB1cGRhdGVkX2F0XG4gICAgICAgIEZST00gY2FyZHNcbiAgICAgICAgT1JERVIgQlkgbmFtZSBBU0NcbiAgICAgICAgTElNSVQgJHtwYXJzZUludChsaW1pdCl9IE9GRlNFVCAkeyhwYXJzZUludChwYWdlKSAtIDEpICogcGFyc2VJbnQobGltaXQpfVxuICAgICAgYDtcbiAgICB9XG5cbiAgICAvLyBHZXQgdG90YWwgY291bnQgd2l0aCBzYW1lIGZpbHRlcnNcbiAgICBsZXQgY291bnRSZXN1bHQ7XG4gICAgaWYgKHdoZXJlQ2xhdXNlKSB7XG4gICAgICBjb3VudFJlc3VsdCA9IGF3YWl0IHNxbGBcbiAgICAgICAgU0VMRUNUIENPVU5UKCopIGFzIHRvdGFsIEZST00gY2FyZHNcbiAgICAgICAgV0hFUkUgJHt3aGVyZUNvbmRpdGlvbnMuam9pbignIEFORCAnKX1cbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50UmVzdWx0ID0gYXdhaXQgc3FsYFxuICAgICAgICBTRUxFQ1QgQ09VTlQoKikgYXMgdG90YWwgRlJPTSBjYXJkc1xuICAgICAgYDtcbiAgICB9XG4gICAgY29uc3QgdG90YWwgPSBwYXJzZUludChjb3VudFJlc3VsdC5yb3dzWzBdPy50b3RhbCB8fCAwKTtcblxuICAgIC8vIEdldCB1bmlxdWUgdmFsdWVzIGZvciBmaWx0ZXJzXG4gICAgY29uc3QgW2dhbWVzUmVzdWx0LCByYXJpdGllc1Jlc3VsdCwgc2V0c1Jlc3VsdF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzcWxgU0VMRUNUIERJU1RJTkNUIGdhbWUgRlJPTSBjYXJkcyBXSEVSRSBnYW1lIElTIE5PVCBOVUxMIE9SREVSIEJZIGdhbWVgLFxuICAgICAgc3FsYFNFTEVDVCBESVNUSU5DVCByYXJpdHkgRlJPTSBjYXJkcyBXSEVSRSByYXJpdHkgSVMgTk9UIE5VTEwgT1JERVIgQlkgcmFyaXR5YCxcbiAgICAgIHNxbGBTRUxFQ1QgRElTVElOQ1Qgc2V0X25hbWUgRlJPTSBjYXJkcyBXSEVSRSBzZXRfbmFtZSBJUyBOT1QgTlVMTCBPUkRFUiBCWSBzZXRfbmFtZWBcbiAgICBdKTtcblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBjYXJkczogcmVzdWx0LnJvd3MgfHwgW10sXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHBhZ2U6IHBhcnNlSW50KHBhZ2UpLFxuICAgICAgICBsaW1pdDogcGFyc2VJbnQobGltaXQpLFxuICAgICAgICB0b3RhbCxcbiAgICAgICAgcGFnZXM6IE1hdGguY2VpbCh0b3RhbCAvIGxpbWl0KVxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgZ2FtZXM6IEFycmF5LmlzQXJyYXkoZ2FtZXNSZXN1bHQucm93cykgPyBnYW1lc1Jlc3VsdC5yb3dzLm1hcChyb3cgPT4gcm93LmdhbWUpIDogW10sXG4gICAgICAgIHJhcml0aWVzOiBBcnJheS5pc0FycmF5KHJhcml0aWVzUmVzdWx0LnJvd3MpID8gcmFyaXRpZXNSZXN1bHQucm93cy5tYXAocm93ID0+IHJvdy5yYXJpdHkpIDogW10sXG4gICAgICAgIHNldHM6IEFycmF5LmlzQXJyYXkoc2V0c1Jlc3VsdC5yb3dzKSA/IHNldHNSZXN1bHQucm93cy5tYXAocm93ID0+IHJvdy5zZXRfbmFtZSkgOiBbXVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignQ2FyZCBzZWFyY2ggZXJyb3I6JywgZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgXG4gICAgICBlcnJvcjogJ1NlYXJjaCBmYWlsZWQnLCBcbiAgICAgIGRldGFpbHM6IGVycm9yLm1lc3NhZ2UgXG4gICAgfSk7XG4gIH1cbn0gIl0sIm5hbWVzIjpbInNxbCIsImhhbmRsZXIiLCJyZXEiLCJyZXMiLCJtZXRob2QiLCJzdGF0dXMiLCJqc29uIiwiZXJyb3IiLCJxdWVyeSIsImdhbWUiLCJyYXJpdHkiLCJzZXQiLCJtaW5QcmljZSIsIm1heFByaWNlIiwicGFnZSIsImxpbWl0Iiwid2hlcmVDb25kaXRpb25zIiwicXVlcnlQYXJhbXMiLCJ0cmltIiwicHVzaCIsInBhcnNlRmxvYXQiLCJ3aGVyZUNsYXVzZSIsImxlbmd0aCIsImpvaW4iLCJyZXN1bHQiLCJwYXJzZUludCIsImNvdW50UmVzdWx0IiwidG90YWwiLCJyb3dzIiwiZ2FtZXNSZXN1bHQiLCJyYXJpdGllc1Jlc3VsdCIsInNldHNSZXN1bHQiLCJQcm9taXNlIiwiYWxsIiwic3VjY2VzcyIsImNhcmRzIiwicGFnaW5hdGlvbiIsInBhZ2VzIiwiTWF0aCIsImNlaWwiLCJmaWx0ZXJzIiwiZ2FtZXMiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJyb3ciLCJyYXJpdGllcyIsInNldHMiLCJzZXRfbmFtZSIsImNvbnNvbGUiLCJkZXRhaWxzIiwibWVzc2FnZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(api-node)/./pages/api/cards/search.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "@vercel/postgres":
|
|
/*!***********************************!*\
|
|
!*** external "@vercel/postgres" ***!
|
|
\***********************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = import("@vercel/postgres");;
|
|
|
|
/***/ }),
|
|
|
|
/***/ "next/dist/compiled/next-server/pages-api.runtime.dev.js":
|
|
/*!**************************************************************************!*\
|
|
!*** external "next/dist/compiled/next-server/pages-api.runtime.dev.js" ***!
|
|
\**************************************************************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = require("next/dist/compiled/next-server/pages-api.runtime.dev.js");
|
|
|
|
/***/ })
|
|
|
|
};
|
|
;
|
|
|
|
// load runtime
|
|
var __webpack_require__ = require("../../../webpack-api-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"], () => (__webpack_exec__("(api-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fcards%2Fsearch&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fcards%2Fsearch.js&middlewareConfigBase64=e30%3D!")));
|
|
module.exports = __webpack_exports__;
|
|
|
|
})(); |