From 07452ecad75a3afae413c69a36b5fcb506ca8835 Mon Sep 17 00:00:00 2001 From: nofurtherinformation Date: Thu, 4 Apr 2024 14:24:33 -0500 Subject: [PATCH] remote msgpack --- app/api/stores/[geoid]/route.ts | 12 +++++++----- components/Map/Map.tsx | 2 ++ package.json | 1 + pnpm-lock.yaml | 21 ++++++++++++++------- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app/api/stores/[geoid]/route.ts b/app/api/stores/[geoid]/route.ts index ee2a032..ba03aa4 100644 --- a/app/api/stores/[geoid]/route.ts +++ b/app/api/stores/[geoid]/route.ts @@ -1,7 +1,8 @@ "use server" import path from "path"; import fs from "fs"; -import { unpack } from 'msgpackr'; +import { unpack, UnpackrStream } from 'msgpackr'; +import nodeFetch from "node-fetch"; export type ReqParams = { params: { @@ -14,15 +15,16 @@ const isochorones: Record> = {} const getIsochrone = async (geoid: string) => { const state = geoid.slice(0, 2) if (isochorones[state] === undefined) { - const isochroneFile = path.join(process.cwd(), "public", "data", "isochrones", `isochrones${state}.msgpack`) - const buffer = fs.readFileSync(isochroneFile) - let data = unpack(buffer); + const r = await nodeFetch(`${process.env.DATA_ENDPOINT}isochrones/isochrones${state}.msgpack`) + const buffer = await r.arrayBuffer() + const dataBuffer = Buffer.from(buffer) + let data = unpack(dataBuffer); isochorones[state] = data } return isochorones[state]![geoid] } -export async function GET(request: Request, reqParams: ReqParams) { +export async function GET(_req: Request, reqParams: ReqParams) { const geoid = reqParams.params.geoid if (!geoid || geoid == 'null') { return new Response("Not found", { status: 404 }); diff --git a/components/Map/Map.tsx b/components/Map/Map.tsx index 15b8422..12de2c5 100644 --- a/components/Map/Map.tsx +++ b/components/Map/Map.tsx @@ -11,6 +11,7 @@ import { GeoJsonLayer, ScatterplotLayer} from "@deck.gl/layers/typed" import DropdownMenuDemo from "components/Dropdown/Dropdown" import * as DropdownMenu from "@radix-ui/react-dropdown-menu" import { useDataService } from "utils/hooks/useDataService" +import { ScaleControl } from "react-map-gl" import "./styles.css" import config from "utils/data/config" import { SelectMenu } from "components/Select/Select" @@ -314,6 +315,7 @@ export const Map = () => { ref={mapRef} reuseMaps={true} > + diff --git a/package.json b/package.json index 7b4140c..4190503 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "next": "^14.0.3", "next-compose-plugins": "^2.2.1", "next-mdx-remote": "^4.4.1", + "node-fetch": "^3.3.2", "node-polyfill-webpack-plugin": "^3.0.0", "papaparse": "^5.4.1", "pmtiles": "^3.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a2ac83d..7daba03 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,6 +200,9 @@ dependencies: next-mdx-remote: specifier: ^4.4.1 version: 4.4.1(react-dom@18.2.0)(react@18.2.0) + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 node-polyfill-webpack-plugin: specifier: ^3.0.0 version: 3.0.0(webpack@5.89.0) @@ -402,7 +405,7 @@ devDependencies: version: 3.14.1(tailwindcss@3.4.1) fetch-mock: specifier: ^9.11.0 - version: 9.11.0 + version: 9.11.0(node-fetch@3.3.2) gzip-size: specifier: '6' version: 6.0.0 @@ -15566,7 +15569,6 @@ packages: /data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - dev: false /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} @@ -17252,9 +17254,8 @@ packages: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - dev: false - /fetch-mock@9.11.0: + /fetch-mock@9.11.0(node-fetch@3.3.2): resolution: {integrity: sha512-PG1XUv+x7iag5p/iNHD4/jdpxL9FtVSqRMUQhPab4hVDt80T1MH5ehzVrL2IdXO9Q2iBggArFvPqjUbHFuI58Q==} engines: {node: '>=4.0.0'} peerDependencies: @@ -17270,6 +17271,7 @@ packages: glob-to-regexp: 0.4.1 is-subset: 0.1.1 lodash.isequal: 4.5.0 + node-fetch: 3.3.2 path-to-regexp: 2.4.0 querystring: 0.2.1 whatwg-url: 6.5.0 @@ -17607,7 +17609,6 @@ packages: engines: {node: '>=12.20.0'} dependencies: fetch-blob: 3.2.0 - dev: false /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -22396,7 +22397,6 @@ packages: /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - dev: false /node-emoji@2.1.3: resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} @@ -22445,6 +22445,14 @@ packages: formdata-polyfill: 4.0.10 dev: false + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + /node-gyp-build-optional-packages@5.0.7: resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} hasBin: true @@ -28099,7 +28107,6 @@ packages: /web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - dev: false /web-worker@1.3.0: resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==}