Compare commits

..

No commits in common. "websockets" and "main" have entirely different histories.

6 changed files with 53 additions and 285 deletions

View File

@ -59,6 +59,7 @@ export default function DayView({
return (
<div className="flex flex-col gap-3">
<div className="flex justify-between pr-4 flex-col gap-4 md:flex-row">
<div className="flex">
<Link

View File

@ -1,25 +1,7 @@
"use client";
import { createTRPCReact } from "@trpc/react-query";
import { createWSClient, httpBatchLink, splitLink, wsLink } from "@trpc/client";
import { appRouter } from "@lifetracker/trpc/routers/_app";
import SuperJSON from "superjson";
export const api = createTRPCReact<typeof appRouter>();
const wsClient = createWSClient({
url: process.env.NEXT_PUBLIC_WS_URL || 'ws://localhost:3000/api/ws',
});
export const trpcClient = api.createClient({
links: [
splitLink({
condition: (op) => op.type === 'subscription',
true: httpBatchLink({
url: '/api/ws',
transformer: SuperJSON,
}),
false: wsLink({ client: wsClient, transformer: SuperJSON }),
}),
],
});

View File

@ -5,7 +5,7 @@
"private": true,
"type": "module",
"scripts": {
"dev": "tsx server.ts",
"dev": "next dev",
"clean": "git clean -xdf .next .turbo node_modules",
"build": "next build -d",
"start": "next start",
@ -71,7 +71,6 @@
"date-fns": "^4.1.0",
"dayjs": "^1.11.13",
"drizzle-orm": "^0.33.0",
"express": "^4.21.2",
"fastest-levenshtein": "^1.0.16",
"formidable": "^3.5.2",
"lucide-react": "latest",
@ -79,7 +78,6 @@
"next-auth": "^4.24.5",
"next-pwa": "^5.6.0",
"next-themes": "^0.3.0",
"next-ws": "^1.2.0",
"pg-dump-restore": "^1.0.12",
"prettier": "^3.2.5",
"react": "^18.2.0",
@ -105,7 +103,6 @@
"superjson": "^2.2.1",
"tailwind-merge": "^2.2.1",
"title-case": "^4.3.2",
"ws": "^8.18.0",
"zod": "^3.22.4",
"zustand": "^4.5.1"
},
@ -116,13 +113,11 @@
"@lifetracker/typescript-config": "workspace:^0.1.0",
"@types/csv-parse": "^1.2.5",
"@types/emoji-mart": "^3.0.14",
"@types/express": "^5.0.0",
"@types/react": "^18.2.55",
"@types/react-dom": "^18.2.19",
"@types/react-syntax-highlighter": "^15.5.13",
"@types/regression": "^2.0.6",
"@types/request-ip": "^0.0.41",
"@types/ws": "^8.5.14",
"autoprefixer": "^10.4.17",
"postcss": "^8.4.35",
"tailwindcss": "^3.4.1",

View File

@ -1,86 +0,0 @@
// apps/web/server.js
import express from 'express';
import http from 'http';
import next from 'next';
import { WebSocketServer } from 'ws';
import { applyWSSHandler } from '@trpc/server/adapters/ws';
import { appRouter } from '@lifetracker/trpc/routers/_app';
import { createWSContext } from '@/server/api/ws';
import { parse } from 'url';
import { NextRequestHint } from 'next/dist/server/web/adapter';
const dev = process.env.NODE_ENV !== 'production';
// Create an Express app and HTTP server.
const app = express();
const server = http.createServer(app);
const nextApp = next({
dev,
customServer: true,
hostname: process.env.HOSTNAME || "localhost",
port: Number(process.env.PORT) || 3000,
});
const handle = nextApp.getRequestHandler();
nextApp.prepare().then(() => {
// Fallback to NextJS request handling for everything else.
app.all('*', (req: express.Request, res: express.Response) => {
return handle(req, res);
});
// Create a WebSocket server that shares the same HTTP server.
const wss = new WebSocketServer({
noServer: true,
path: '/api/ws',
});
// Attach the TRPC WebSocket handler.
const handler = applyWSSHandler({
wss,
router: appRouter,
createContext: createWSContext,
});
wss.on('connection', (ws) => {
console.log(` Got new websocket connection (now ${wss.clients.size})`);
ws.once('close', () => {
console.log(` Closed websocket connection (now ${wss.clients.size})`);
});
});
wss.on('error', function (error) {
console.log(error);
});
const port = process.env.PORT || 3000;
server.listen(port, () => {
console.log(`> Server listening on http://localhost:${port}`);
console.log(`> TRPC WebSocket server listening at ws://localhost:${port}/api/ws`);
});
app.all('*', (req: express.Request, res: express.Response) => {
return handle(req, res);
});
server.on('upgrade', (request, socket, head) => {
const { pathname } = parse(request.url!);
// Only handle WebSocket upgrades of the specific path(s) your application
// needs to handle
if (pathname === "/api/ws") {
wss.handleUpgrade(request, socket, head, function done(ws) {
console.log("Socket connected");
// At this point, you have the WebSocket in `ws`
// and the original HTTP request in `request` available
ws.send("Hello from Lifetracker!");
});
}
});
// Handle graceful shutdown.
process.on('SIGTERM', () => {
console.log('SIGTERM received, shutting down gracefully.');
handler.broadcastReconnectNotification();
server.close();
});
});

View File

@ -1,31 +0,0 @@
import { inferAsyncReturnType } from '@trpc/server';
import { CreateWSSContextFnOptions } from '@trpc/server/adapters/ws';
import { Session } from 'next-auth';
// Base context - available in all requests
interface CreateContextOptions {
session: Session | null;
req?: Request;
}
// Helper to create base context
const createContextInner = async (opts: CreateContextOptions) => {
return {
session: opts.session,
// Add any other context properties you need
};
};
// Context for WebSocket connections
export const createWSContext = async (opts: CreateWSSContextFnOptions) => {
// Get session from WebSocket connection
// You'll need to implement your session extraction logic here
const session = null; // Replace with actual session extraction
return await createContextInner({
session,
req: opts.req,
});
};
export type Context = inferAsyncReturnType<typeof createWSContext>;

193
pnpm-lock.yaml generated
View File

@ -322,9 +322,6 @@ importers:
drizzle-orm:
specifier: ^0.33.0
version: 0.33.0(@types/better-sqlite3@7.6.11)(@types/pg@8.11.11)(@types/react@18.2.61)(better-sqlite3@11.5.0)(expo-sqlite@14.0.6(expo@51.0.36(@babel/core@7.26.0)(@babel/preset-env@7.25.7(@babel/core@7.26.0))(encoding@0.1.13)))(pg@8.13.1)(react@18.3.1)(sqlite3@5.1.7)
express:
specifier: ^4.21.2
version: 4.21.2
fastest-levenshtein:
specifier: ^1.0.16
version: 1.0.16
@ -346,9 +343,6 @@ importers:
next-themes:
specifier: ^0.3.0
version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-ws:
specifier: ^1.2.0
version: 1.2.0(next@15.1.6(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(ws@8.18.0)
pg-dump-restore:
specifier: ^1.0.12
version: 1.0.12
@ -424,9 +418,6 @@ importers:
title-case:
specifier: ^4.3.2
version: 4.3.2
ws:
specifier: ^8.18.0
version: 8.18.0
zod:
specifier: ^3.22.4
version: 3.23.8
@ -452,9 +443,6 @@ importers:
'@types/emoji-mart':
specifier: ^3.0.14
version: 3.0.14
'@types/express':
specifier: ^5.0.0
version: 5.0.0
'@types/react':
specifier: ^18.2.55
version: 18.2.61
@ -470,9 +458,6 @@ importers:
'@types/request-ip':
specifier: ^0.0.41
version: 0.0.41
'@types/ws':
specifier: ^8.5.14
version: 8.5.14
autoprefixer:
specifier: ^10.4.17
version: 10.4.20(postcss@8.4.47)
@ -4350,9 +4335,6 @@ packages:
'@types/express@4.17.21':
resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
'@types/express@5.0.0':
resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==}
'@types/formidable@3.4.5':
resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==}
@ -4542,9 +4524,6 @@ packages:
'@types/ws@8.5.12':
resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
'@types/ws@8.5.14':
resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==}
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@ -5878,10 +5857,6 @@ packages:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
cookie@0.7.1:
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
engines: {node: '>= 0.6'}
cookie@0.7.2:
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
@ -7045,10 +7020,6 @@ packages:
resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==}
engines: {node: '>= 0.10.0'}
express@4.21.2:
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
engines: {node: '>= 0.10.0'}
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
@ -9290,13 +9261,6 @@ packages:
react: ^16.8 || ^17 || ^18
react-dom: ^16.8 || ^17 || ^18
next-ws@1.2.0:
resolution: {integrity: sha512-cDyMZ4GxpRe3NrZ8fGIet7Q8IcXfU5PUZdYXVlvj9hQqiJlZsby98G8S++icOUfDuEAVyPSwy4de0tFmKBPL9w==}
peerDependencies:
next: '>=13.1.1'
react: '*'
ws: '*'
next@15.1.6:
resolution: {integrity: sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
@ -9747,9 +9711,6 @@ packages:
path-to-regexp@0.1.10:
resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==}
path-to-regexp@0.1.12:
resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
path-to-regexp@1.9.0:
resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==}
@ -16718,7 +16679,7 @@ snapshots:
'@jridgewell/trace-mapping@0.3.9':
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/sourcemap-codec': 1.4.15
'@juggle/resize-observer@3.4.0': {}
@ -18145,13 +18106,6 @@ snapshots:
'@types/qs': 6.9.16
'@types/serve-static': 1.15.7
'@types/express@5.0.0':
dependencies:
'@types/body-parser': 1.19.5
'@types/express-serve-static-core': 5.0.0
'@types/qs': 6.9.16
'@types/serve-static': 1.15.7
'@types/formidable@3.4.5':
dependencies:
'@types/node': 20.11.24
@ -18359,10 +18313,6 @@ snapshots:
dependencies:
'@types/node': 20.11.24
'@types/ws@8.5.14':
dependencies:
'@types/node': 20.11.24
'@types/yargs-parser@21.0.3': {}
'@types/yargs@13.0.12':
@ -18943,9 +18893,9 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
acorn-import-attributes@1.9.5(acorn@8.14.0):
acorn-import-attributes@1.9.5(acorn@8.10.0):
dependencies:
acorn: 8.14.0
acorn: 8.10.0
acorn-jsx@5.3.2(acorn@8.10.0):
dependencies:
@ -19109,7 +19059,7 @@ snapshots:
array-buffer-byte-length@1.0.0:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
is-array-buffer: 3.0.2
array-buffer-byte-length@1.0.1:
@ -19171,10 +19121,10 @@ snapshots:
arraybuffer.prototype.slice@1.0.2:
dependencies:
array-buffer-byte-length: 1.0.0
call-bind: 1.0.7
call-bind: 1.0.5
define-properties: 1.2.1
es-abstract: 1.22.3
get-intrinsic: 1.2.4
get-intrinsic: 1.2.2
is-array-buffer: 3.0.2
is-shared-array-buffer: 1.0.2
@ -20132,8 +20082,6 @@ snapshots:
cookie@0.6.0: {}
cookie@0.7.1: {}
cookie@0.7.2: {}
cookie@1.0.1: {}
@ -20580,7 +20528,7 @@ snapshots:
define-data-property@1.1.1:
dependencies:
get-intrinsic: 1.2.4
get-intrinsic: 1.2.2
gopd: 1.0.1
has-property-descriptors: 1.0.1
@ -21725,42 +21673,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
express@4.21.2:
dependencies:
accepts: 1.3.8
array-flatten: 1.1.1
body-parser: 1.20.3
content-disposition: 0.5.4
content-type: 1.0.5
cookie: 0.7.1
cookie-signature: 1.0.6
debug: 2.6.9
depd: 2.0.0
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
finalhandler: 1.3.1
fresh: 0.5.2
http-errors: 2.0.0
merge-descriptors: 1.0.3
methods: 1.1.2
on-finished: 2.4.1
parseurl: 1.3.3
path-to-regexp: 0.1.12
proxy-addr: 2.0.7
qs: 6.13.0
range-parser: 1.2.1
safe-buffer: 5.2.1
send: 0.19.0
serve-static: 1.16.2
setprototypeof: 1.2.0
statuses: 2.0.1
type-is: 1.6.18
utils-merge: 1.0.1
vary: 1.1.2
transitivePeerDependencies:
- supports-color
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
@ -22093,7 +22005,7 @@ snapshots:
function.prototype.name@1.1.6:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
define-properties: 1.2.1
es-abstract: 1.22.3
functions-have-names: 1.2.3
@ -22129,9 +22041,9 @@ snapshots:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
has-proto: 1.0.3
has-proto: 1.0.1
has-symbols: 1.0.3
hasown: 2.0.2
hasown: 2.0.0
get-nonce@1.0.1: {}
@ -22155,8 +22067,8 @@ snapshots:
get-symbol-description@1.0.0:
dependencies:
call-bind: 1.0.7
get-intrinsic: 1.2.4
call-bind: 1.0.5
get-intrinsic: 1.2.2
get-symbol-description@1.0.2:
dependencies:
@ -22307,7 +22219,7 @@ snapshots:
gopd@1.0.1:
dependencies:
get-intrinsic: 1.2.4
get-intrinsic: 1.2.2
got@12.6.1:
dependencies:
@ -22383,7 +22295,8 @@ snapshots:
has-proto@1.0.1: {}
has-proto@1.0.3: {}
has-proto@1.0.3:
optional: true
has-symbols@1.0.3: {}
@ -22408,6 +22321,7 @@ snapshots:
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
optional: true
hast-util-from-parse5@8.0.1:
dependencies:
@ -22844,7 +22758,7 @@ snapshots:
dependencies:
get-intrinsic: 1.2.2
hasown: 2.0.0
side-channel: 1.0.6
side-channel: 1.0.4
internal-slot@1.0.7:
dependencies:
@ -22888,8 +22802,8 @@ snapshots:
is-array-buffer@3.0.2:
dependencies:
call-bind: 1.0.7
get-intrinsic: 1.2.4
call-bind: 1.0.5
get-intrinsic: 1.2.2
is-typed-array: 1.1.12
is-array-buffer@3.0.4:
@ -22916,7 +22830,7 @@ snapshots:
is-boolean-object@1.1.2:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
has-tostringtag: 1.0.0
is-buffer@1.1.6:
@ -22964,7 +22878,7 @@ snapshots:
is-finalizationregistry@1.0.2:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
is-fullwidth-code-point@3.0.0: {}
@ -23057,7 +22971,7 @@ snapshots:
is-regex@1.1.4:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
has-tostringtag: 1.0.0
is-regexp@1.0.0: {}
@ -23068,7 +22982,7 @@ snapshots:
is-shared-array-buffer@1.0.2:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
is-shared-array-buffer@1.0.3:
dependencies:
@ -23116,12 +23030,12 @@ snapshots:
is-weakref@1.0.2:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
is-weakset@2.0.2:
dependencies:
call-bind: 1.0.7
get-intrinsic: 1.2.4
call-bind: 1.0.5
get-intrinsic: 1.2.2
is-what@4.1.16: {}
@ -24622,12 +24536,6 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
next-ws@1.2.0(next@15.1.6(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(ws@8.18.0):
dependencies:
next: 15.1.6(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
ws: 8.18.0
next@15.1.6(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 15.1.6
@ -24803,7 +24711,8 @@ snapshots:
object-inspect@1.13.1: {}
object-inspect@1.13.2: {}
object-inspect@1.13.2:
optional: true
object-keys@1.1.1: {}
@ -25167,8 +25076,6 @@ snapshots:
path-to-regexp@0.1.10: {}
path-to-regexp@0.1.12: {}
path-to-regexp@1.9.0:
dependencies:
isarray: 0.0.1
@ -26412,10 +26319,10 @@ snapshots:
reflect.getprototypeof@1.0.4:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
define-properties: 1.2.1
es-abstract: 1.22.3
get-intrinsic: 1.2.4
get-intrinsic: 1.2.2
globalthis: 1.0.3
which-builtin-type: 1.1.3
@ -26792,8 +26699,8 @@ snapshots:
safe-regex-test@1.0.0:
dependencies:
call-bind: 1.0.7
get-intrinsic: 1.2.4
call-bind: 1.0.5
get-intrinsic: 1.2.2
is-regex: 1.1.4
safe-regex-test@1.0.3:
@ -26959,7 +26866,7 @@ snapshots:
set-function-length@1.1.1:
dependencies:
define-data-property: 1.1.1
get-intrinsic: 1.2.4
get-intrinsic: 1.2.2
gopd: 1.0.1
has-property-descriptors: 1.0.1
@ -27062,7 +26969,7 @@ snapshots:
call-bind: 1.0.7
es-errors: 1.3.0
get-intrinsic: 1.2.4
object-inspect: 1.13.2
object-inspect: 1.13.1
siginfo@2.0.0: {}
@ -27320,7 +27227,7 @@ snapshots:
string.prototype.trim@1.2.8:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
define-properties: 1.2.1
es-abstract: 1.22.3
@ -27334,7 +27241,7 @@ snapshots:
string.prototype.trimend@1.0.7:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
define-properties: 1.2.1
es-abstract: 1.22.3
@ -27347,7 +27254,7 @@ snapshots:
string.prototype.trimstart@1.0.7:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
define-properties: 1.2.1
es-abstract: 1.22.3
@ -27785,8 +27692,8 @@ snapshots:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.11.24
acorn: 8.14.0
acorn-walk: 8.3.4
acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
@ -27899,8 +27806,8 @@ snapshots:
typed-array-buffer@1.0.0:
dependencies:
call-bind: 1.0.7
get-intrinsic: 1.2.4
call-bind: 1.0.5
get-intrinsic: 1.2.2
is-typed-array: 1.1.12
typed-array-buffer@1.0.2:
@ -27912,7 +27819,7 @@ snapshots:
typed-array-byte-length@1.0.0:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.12
@ -27929,7 +27836,7 @@ snapshots:
typed-array-byte-offset@1.0.0:
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.7
call-bind: 1.0.5
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.12
@ -27946,7 +27853,7 @@ snapshots:
typed-array-length@1.0.4:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
for-each: 0.3.3
is-typed-array: 1.1.12
@ -27987,7 +27894,7 @@ snapshots:
unbox-primitive@1.0.2:
dependencies:
call-bind: 1.0.7
call-bind: 1.0.5
has-bigints: 1.0.2
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
@ -28514,13 +28421,13 @@ snapshots:
webpack@5.95.0:
dependencies:
'@types/estree': 1.0.6
'@types/estree': 1.0.5
'@webassemblyjs/ast': 1.12.1
'@webassemblyjs/wasm-edit': 1.12.1
'@webassemblyjs/wasm-parser': 1.12.1
acorn: 8.14.0
acorn-import-attributes: 1.9.5(acorn@8.14.0)
browserslist: 4.24.2
acorn: 8.10.0
acorn-import-attributes: 1.9.5(acorn@8.10.0)
browserslist: 4.22.1
chrome-trace-event: 1.0.4
enhanced-resolve: 5.17.1
es-module-lexer: 1.5.4
@ -28617,7 +28524,7 @@ snapshots:
which-typed-array@1.1.13:
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.7
call-bind: 1.0.5
for-each: 0.3.3
gopd: 1.0.1
has-tostringtag: 1.0.0