diff --git a/apps/api/package.json b/apps/api/package.json index 1b1c207..fe29d51 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -28,6 +28,6 @@ "devDependencies": { "@packages/key-types": "workspace:*", "@types/node": "20.8.3", - "wrangler": "3.88.0" + "wrangler": "3.85.0" } } diff --git a/apps/api/src/graphql/resolvers/index.ts b/apps/api/src/graphql/resolvers/index.ts index 9137c34..25f126f 100644 --- a/apps/api/src/graphql/resolvers/index.ts +++ b/apps/api/src/graphql/resolvers/index.ts @@ -3,6 +3,7 @@ import { coursesResolvers } from "$graphql/resolvers/courses"; import { enrollmentHistoryResolvers } from "$graphql/resolvers/enrollment-history"; import { gradesResolvers } from "$graphql/resolvers/grades"; import { instructorsResolvers } from "$graphql/resolvers/instructors"; +import { studyRoomsResolvers } from "$graphql/resolvers/study-rooms"; import { larcResolvers } from "$graphql/resolvers/larc.ts"; import { searchResolvers } from "$graphql/resolvers/search"; import { websocResolvers } from "$graphql/resolvers/websoc"; @@ -18,5 +19,6 @@ export const resolvers = mergeResolvers([ searchResolvers, websocResolvers, weekResolvers, + studyRoomsResolvers, larcResolvers, ]); diff --git a/apps/api/src/graphql/resolvers/study-rooms.ts b/apps/api/src/graphql/resolvers/study-rooms.ts new file mode 100644 index 0000000..57c5399 --- /dev/null +++ b/apps/api/src/graphql/resolvers/study-rooms.ts @@ -0,0 +1,23 @@ +import type { GraphQLContext } from "$graphql/graphql-context"; +import { studyRoomsQuerySchema } from "$schema"; +import { StudyRoomsService } from "$services"; +import { GraphQLError } from "graphql/error"; + +export const studyRoomsResolvers = { + Query: { + studyRoom: async (_: unknown, { id }: { id: string }, { db }: GraphQLContext) => { + const service = new StudyRoomsService(db); + const res = await service.getStudyRoomById(id); + if (!res) + throw new GraphQLError(`Study room '${id}' not found`, { + extensions: { code: "NOT_FOUND" }, + }); + return res; + }, + studyRooms: async (_: unknown, args: { query?: unknown }, { db }: GraphQLContext) => { + const service = new StudyRoomsService(db); + const validatedQuery = args.query ? studyRoomsQuerySchema.parse(args.query) : {}; + return await service.getStudyRooms(validatedQuery); + }, + }, +}; diff --git a/apps/api/src/graphql/schema/index.ts b/apps/api/src/graphql/schema/index.ts index 96fc2c0..da5bb5b 100644 --- a/apps/api/src/graphql/schema/index.ts +++ b/apps/api/src/graphql/schema/index.ts @@ -5,6 +5,7 @@ import { enrollmentHistorySchema } from "./enrollment-history"; import { enums } from "./enums"; import { gradesSchema } from "./grades"; import { instructorsSchema } from "./instructors"; +import { studyRoomsGraphQLSchema } from "./study-rooms"; import { larcSchema } from "./larc"; import { searchSchema } from "./search"; import { websocSchema } from "./websoc"; @@ -39,5 +40,6 @@ export const typeDefs = mergeTypeDefs([ searchSchema, websocSchema, weekSchema, + studyRoomsGraphQLSchema, larcSchema, ]); diff --git a/apps/api/src/graphql/schema/study-rooms.ts b/apps/api/src/graphql/schema/study-rooms.ts new file mode 100644 index 0000000..42c1abe --- /dev/null +++ b/apps/api/src/graphql/schema/study-rooms.ts @@ -0,0 +1,31 @@ +export const studyRoomsGraphQLSchema = `#graphql + type Slot { + studyRoomId: String! + start: String! + end: String! + isAvailable: Boolean! + } + + type StudyRoom { + id: String! + name: String! + capacity: Int! + location: String! + description: String + directions: String + techEnhanced: Boolean! + slots: [Slot] + } + + input StudyRoomsQuery { + location: String + capacityMin: Int + capacityMax: Int + isTechEnhanced: Boolean + } + + extend type Query { + studyRoom(id: String!): StudyRoom! + studyRooms(query: StudyRoomsQuery): [StudyRoom!]! + } +`; diff --git a/apps/api/src/rest/index.ts b/apps/api/src/rest/index.ts index 7caa0bc..154db40 100644 --- a/apps/api/src/rest/index.ts +++ b/apps/api/src/rest/index.ts @@ -7,6 +7,7 @@ import { gradesRouter } from "./routes/grades"; import { instructorsRouter } from "./routes/instructors"; import { larcRouter } from "./routes/larc.ts"; import { pingRouter } from "./routes/ping"; +import { studyRoomsRouter } from "./routes/study-rooms"; import { searchRouter } from "./routes/search"; import { websocRouter } from "./routes/websoc"; import { weekRouter } from "./routes/week"; @@ -22,6 +23,7 @@ restRouter.route("/ping", pingRouter); restRouter.route("/search", searchRouter); restRouter.route("/websoc", websocRouter); restRouter.route("/week", weekRouter); +restRouter.route("/studyRooms", studyRoomsRouter); restRouter.route("/larc", larcRouter); export { restRouter }; diff --git a/apps/api/src/rest/routes/study-rooms.ts b/apps/api/src/rest/routes/study-rooms.ts new file mode 100644 index 0000000..e714516 --- /dev/null +++ b/apps/api/src/rest/routes/study-rooms.ts @@ -0,0 +1,90 @@ +import { defaultHook } from "$hooks"; +import { + errorSchema, + responseSchema, + studyRoomSchema, + studyRoomsPathSchema, + studyRoomsQuerySchema, +} from "$schema"; +import { StudyRoomsService } from "$services"; +import type { Bindings } from "$types/bindings"; +import { OpenAPIHono, createRoute } from "@hono/zod-openapi"; +import { database } from "@packages/db"; + +const studyRoomsRouter = new OpenAPIHono<{ Bindings: Bindings }>({ defaultHook }); + +const studyRoomByIdRoute = createRoute({ + summary: "Retrieve a study room", + operationId: "studyRoomById", + tags: ["Study Rooms"], + method: "get", + path: "/{id}", + request: { params: studyRoomsPathSchema }, + description: "Retrieves a study room by its ID.", + responses: { + 200: { + content: { "application/json": { schema: responseSchema(studyRoomSchema) } }, + description: "Successful operation", + }, + 404: { + content: { "application/json": { schema: errorSchema } }, + description: "Study room not found", + }, + 422: { + content: { "application/json": { schema: errorSchema } }, + description: "Parameters failed validation", + }, + 500: { + content: { "application/json": { schema: errorSchema } }, + description: "Server error occurred", + }, + }, +}); + +const studyRoomsByFiltersRoute = createRoute({ + summary: "Retrieve study rooms", + operationId: "studyRoomsByFilters", + tags: ["Study Rooms"], + method: "get", + path: "/", + request: { query: studyRoomsQuerySchema }, + description: + "Retrieves study rooms matching the given filters. If no filters are provided, all rooms are returned.", + responses: { + 200: { + content: { + "application/json": { schema: responseSchema(studyRoomSchema.array()) }, + }, + description: "Successful operation", + }, + 500: { + content: { "application/json": { schema: errorSchema } }, + description: "Server error occurred", + }, + }, +}); + +// studyRoomsRouter.get("*"); + +studyRoomsRouter.openapi(studyRoomByIdRoute, async (c) => { + const { id } = c.req.valid("param"); + const service = new StudyRoomsService(database(c.env.DB.connectionString)); + const res = await service.getStudyRoomById(id); + return res + ? c.json({ ok: true, data: studyRoomSchema.parse(res) }, 200) + : c.json({ ok: false, message: `Study room ${id} not found` }, 404); +}); + +studyRoomsRouter.openapi(studyRoomsByFiltersRoute, async (c) => { + const query = c.req.valid("query") || {}; // no filters required + const service = new StudyRoomsService(database(c.env.DB.connectionString)); + return c.json( + { + ok: true, + data: studyRoomSchema.array().parse(await service.getStudyRooms(query)), + }, + 200, + ); +}); + +export { studyRoomsRouter }; diff --git a/apps/api/src/schema/index.ts b/apps/api/src/schema/index.ts index 8613ccf..907dfea 100644 --- a/apps/api/src/schema/index.ts +++ b/apps/api/src/schema/index.ts @@ -7,3 +7,4 @@ export * from "./instructors"; export * from "./search"; export * from "./websoc"; export * from "./week"; +export * from "./study-rooms"; diff --git a/apps/api/src/schema/study-rooms.ts b/apps/api/src/schema/study-rooms.ts new file mode 100644 index 0000000..e199f67 --- /dev/null +++ b/apps/api/src/schema/study-rooms.ts @@ -0,0 +1,30 @@ +import { z } from "@hono/zod-openapi"; + +export const slotSchema = z.object({ + studyRoomId: z.string(), + start: z.string().openapi({ format: "date-time" }), + end: z.string().openapi({ format: "date-time" }), + isAvailable: z.boolean(), +}); + +export const studyRoomSchema = z.object({ + id: z.string(), + name: z.string(), + capacity: z.number().int(), + location: z.string(), + description: z.string().optional(), + directions: z.string().optional(), + techEnhanced: z.boolean(), + slots: z.array(slotSchema).optional(), +}); + +export const studyRoomsPathSchema = z.object({ + id: z.string(), +}); + +export const studyRoomsQuerySchema = z.object({ + location: z.string().optional(), + capacityMin: z.coerce.number().int().optional(), + capacityMax: z.coerce.number().int().optional(), + isTechEnhanced: z.coerce.boolean().optional(), +}); diff --git a/apps/api/src/services/index.ts b/apps/api/src/services/index.ts index b81517b..aaa875e 100644 --- a/apps/api/src/services/index.ts +++ b/apps/api/src/services/index.ts @@ -6,3 +6,4 @@ export * from "./instructors"; export * from "./search"; export * from "./websoc"; export * from "./week"; +export * from "./study-rooms"; diff --git a/apps/api/src/services/study-rooms.ts b/apps/api/src/services/study-rooms.ts new file mode 100644 index 0000000..b3675da --- /dev/null +++ b/apps/api/src/services/study-rooms.ts @@ -0,0 +1,30 @@ +import type { studyRoomsQuerySchema } from "$schema"; +import type { z } from "@hono/zod-openapi"; +import type { database } from "@packages/db"; +import { and, eq, gte, lte } from "@packages/db/drizzle"; +import { studyRoom } from "@packages/db/schema"; + +type StudyRoomsServiceInput = z.infer; + +export class StudyRoomsService { + constructor(private readonly db: ReturnType) {} + + async getStudyRoomById(id: string) { + const [room] = await this.db.select().from(studyRoom).where(eq(studyRoom.id, id)); + return room || null; + } + + async getStudyRooms(input: StudyRoomsServiceInput) { + const conditions = []; + if (input.location) conditions.push(eq(studyRoom.location, input.location)); + if (input.capacityMin) conditions.push(gte(studyRoom.capacity, input.capacityMin)); + if (input.capacityMax) conditions.push(lte(studyRoom.capacity, input.capacityMax)); + if (input.isTechEnhanced !== undefined) + conditions.push(eq(studyRoom.techEnhanced, input.isTechEnhanced)); + + return await this.db + .select() + .from(studyRoom) + .where(conditions.length ? and(...conditions) : undefined); + } +} diff --git a/apps/data-pipeline/larc-scraper/package.json b/apps/data-pipeline/larc-scraper/package.json index 0dfd3ad..65e4c77 100644 --- a/apps/data-pipeline/larc-scraper/package.json +++ b/apps/data-pipeline/larc-scraper/package.json @@ -18,6 +18,6 @@ }, "devDependencies": { "@types/node": "20.8.3", - "wrangler": "3.88.0" + "wrangler": "3.85.0" } } diff --git a/apps/data-pipeline/larc-scraper/worker-configuration.d.ts b/apps/data-pipeline/larc-scraper/worker-configuration.d.ts index ff6ddbd..49e098c 100644 --- a/apps/data-pipeline/larc-scraper/worker-configuration.d.ts +++ b/apps/data-pipeline/larc-scraper/worker-configuration.d.ts @@ -1,5 +1,6 @@ // Generated by Wrangler by running `wrangler types --x-include-runtime` -interface Env { - DB: Hyperdrive; +export {}; +declare global { + const DB: Hyperdrive; } diff --git a/apps/data-pipeline/study-location-scraper/package.json b/apps/data-pipeline/study-location-scraper/package.json index 4a08043..52ba1d0 100644 --- a/apps/data-pipeline/study-location-scraper/package.json +++ b/apps/data-pipeline/study-location-scraper/package.json @@ -19,6 +19,6 @@ "devDependencies": { "@types/node": "20.8.3", "domhandler": "5.0.3", - "wrangler": "3.88.0" + "wrangler": "3.85.0" } } diff --git a/apps/data-pipeline/study-location-scraper/worker-configuration.d.ts b/apps/data-pipeline/study-location-scraper/worker-configuration.d.ts index ff6ddbd..49e098c 100644 --- a/apps/data-pipeline/study-location-scraper/worker-configuration.d.ts +++ b/apps/data-pipeline/study-location-scraper/worker-configuration.d.ts @@ -1,5 +1,6 @@ // Generated by Wrangler by running `wrangler types --x-include-runtime` -interface Env { - DB: Hyperdrive; +export {}; +declare global { + const DB: Hyperdrive; } diff --git a/apps/data-pipeline/websoc-scraper/package.json b/apps/data-pipeline/websoc-scraper/package.json index f9dc62d..3eb77f5 100644 --- a/apps/data-pipeline/websoc-scraper/package.json +++ b/apps/data-pipeline/websoc-scraper/package.json @@ -19,6 +19,6 @@ }, "devDependencies": { "@types/node": "20.8.3", - "wrangler": "3.88.0" + "wrangler": "3.85.0" } } diff --git a/apps/key-manager/package.json b/apps/key-manager/package.json index 522ffa8..ea35379 100644 --- a/apps/key-manager/package.json +++ b/apps/key-manager/package.json @@ -45,6 +45,6 @@ "postcss": "8.4.49", "tailwindcss": "3.4.15", "typescript": "5.6.3", - "wrangler": "3.88.0" + "wrangler": "3.85.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da36e8c..e635c9b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,8 +82,8 @@ importers: specifier: 20.8.3 version: 20.8.3 wrangler: - specifier: 3.88.0 - version: 3.88.0(@cloudflare/workers-types@4.20241106.0) + specifier: 3.85.0 + version: 3.85.0(@cloudflare/workers-types@4.20241106.0) apps/data-pipeline/calendar-scraper: dependencies: @@ -259,8 +259,8 @@ importers: specifier: 20.8.3 version: 20.8.3 wrangler: - specifier: 3.88.0 - version: 3.88.0(@cloudflare/workers-types@4.20241106.0) + specifier: 3.85.0 + version: 3.85.0(@cloudflare/workers-types@4.20241106.0) apps/data-pipeline/study-location-scraper: dependencies: @@ -284,8 +284,8 @@ importers: specifier: 5.0.3 version: 5.0.3 wrangler: - specifier: 3.88.0 - version: 3.88.0(@cloudflare/workers-types@4.20241106.0) + specifier: 3.85.0 + version: 3.85.0(@cloudflare/workers-types@4.20241106.0) apps/data-pipeline/websoc-scraper: dependencies: @@ -309,8 +309,8 @@ importers: specifier: 20.8.3 version: 20.8.3 wrangler: - specifier: 3.88.0 - version: 3.88.0(@cloudflare/workers-types@4.20241106.0) + specifier: 3.85.0 + version: 3.85.0(@cloudflare/workers-types@4.20241106.0) apps/key-manager: dependencies: @@ -415,8 +415,8 @@ importers: specifier: 5.6.3 version: 5.6.3 wrangler: - specifier: 3.88.0 - version: 3.88.0(@cloudflare/workers-types@4.20241106.0) + specifier: 3.85.0 + version: 3.85.0(@cloudflare/workers-types@4.20241106.0) packages/db: dependencies: @@ -629,38 +629,38 @@ packages: resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} - '@cloudflare/workerd-darwin-64@1.20241106.1': - resolution: {integrity: sha512-zxvaToi1m0qzAScrxFt7UvFVqU8DxrCO2CinM1yQkv5no7pA1HolpIrwZ0xOhR3ny64Is2s/J6BrRjpO5dM9Zw==} + '@cloudflare/workerd-darwin-64@1.20241022.0': + resolution: {integrity: sha512-1NNYun37myMTgCUiPQEJ0cMal4mKZVTpkD0b2tx9hV70xji+frVJcSK8YVLeUm1P+Rw1d/ct8DMgQuCpsz3Fsw==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20241106.1': - resolution: {integrity: sha512-j3dg/42D/bPgfNP3cRUBxF+4waCKO/5YKwXNj+lnVOwHxDu+ne5pFw9TIkKYcWTcwn0ZUkbNZNM5rhJqRn4xbg==} + '@cloudflare/workerd-darwin-arm64@1.20241022.0': + resolution: {integrity: sha512-FOO/0P0U82EsTLTdweNVgw+4VOk5nghExLPLSppdOziq6IR5HVgP44Kmq5LdsUeHUhwUmfOh9hzaTpkNzUqKvw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20241106.1': - resolution: {integrity: sha512-Ih+Ye8E1DMBXcKrJktGfGztFqHKaX1CeByqshmTbODnWKHt6O65ax3oTecUwyC0+abuyraOpAtdhHNpFMhUkmw==} + '@cloudflare/workerd-linux-64@1.20241022.0': + resolution: {integrity: sha512-RsNc19BQJG9yd+ngnjuDeG9ywZG+7t1L4JeglgceyY5ViMNMKVO7Zpbsu69kXslU9h6xyQG+lrmclg3cBpnhYA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20241106.1': - resolution: {integrity: sha512-mdQFPk4+14Yywn7n1xIzI+6olWM8Ybz10R7H3h+rk0XulMumCWUCy1CzIDauOx6GyIcSgKIibYMssVHZR30ObA==} + '@cloudflare/workerd-linux-arm64@1.20241022.0': + resolution: {integrity: sha512-x5mUXpKxfsosxcFmcq5DaqLs37PejHYVRsNz1cWI59ma7aC4y4Qn6Tf3i0r9MwQTF/MccP4SjVslMU6m4W7IaA==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20241106.1': - resolution: {integrity: sha512-4rtcss31E/Rb/PeFocZfr+B9i1MdrkhsTBWizh8siNR4KMmkslU2xs2wPaH1z8+ErxkOsHrKRa5EPLh5rIiFeg==} + '@cloudflare/workerd-windows-64@1.20241022.0': + resolution: {integrity: sha512-eBCClx4szCOgKqOlxxbdNszMqQf3MRG1B9BRIqEM/diDfdR9IrZ8l3FaEm+l9gXgPmS6m1NBn40aWuGBl8UTSw==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-shared@0.7.1': - resolution: {integrity: sha512-46cP5FCrl3TrvHeoHLb5SRuiDMKH5kc9Yvo36SAfzt8dqJI/qJRoY1GP3ioHn/gP7v2QIoUOTAzIl7Ml7MnfrA==} + '@cloudflare/workers-shared@0.7.0': + resolution: {integrity: sha512-LLQRTqx7lKC7o2eCYMpyc5FXV8d0pUX6r3A+agzhqS9aoR5A6zCPefwQGcvbKx83ozX22ATZcemwxQXn12UofQ==} engines: {node: '>=16.7.0'} '@cloudflare/workers-types@4.20241106.0': @@ -3347,8 +3347,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - miniflare@3.20241106.0: - resolution: {integrity: sha512-PjOoJKjUUofCueQskfhXlGvvHxZj36UAJAp1DnquMK88MFF50zCULblh0KXMSNM+bXeQYA94Gj06a7kfmBGxPw==} + miniflare@3.20241022.0: + resolution: {integrity: sha512-x9Fbq1Hmz1f0osIT9Qmj78iX4UpCP2EqlZnA/tzj/3+I49vc3Kq0fNqSSKplcdf6HlCHdL3fOBicmreQF4BUUQ==} engines: {node: '>=16.13'} hasBin: true @@ -4105,8 +4105,8 @@ packages: resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} engines: {node: '>=18.17'} - unenv-nightly@2.0.0-20241111-080453-894aa31: - resolution: {integrity: sha512-0W39QQOQ9VE8kVVUpGwEG+pZcsCXk5wqNG6rDPE6Gr+fiA69LR0qERM61hW5KCOkC1/ArCFrfCGjwHyyv/bI0Q==} + unenv-nightly@2.0.0-20241024-111401-d4156ac: + resolution: {integrity: sha512-xJO1hfY+Te+/XnfCYrCbFbRcgu6XEODND1s5wnVbaBCkuQX7JXF7fHEXPrukFE2j8EOH848P8QN19VO47XN8hw==} unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -4202,17 +4202,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20241106.1: - resolution: {integrity: sha512-1GdKl0kDw8rrirr/ThcK66Kbl4/jd4h8uHx5g7YHBrnenY5SX1UPuop2cnCzYUxlg55kPjzIqqYslz1muRFgFw==} + workerd@1.20241022.0: + resolution: {integrity: sha512-jyGXsgO9DRcJyx6Ovv7gUyDPc3UYC2i/E0p9GFUg6GUzpldw4Y93y9kOmdfsOnKZ3+lY53veSiUniiBPE6Q2NQ==} engines: {node: '>=16'} hasBin: true - wrangler@3.88.0: - resolution: {integrity: sha512-1yM5cgerjKkIBL9GOzIWhl8MsyEGNTsN4emJCiLLHJFz52TSNjJJlMbd1x0hX351mfy2MsGgUqKcx8iRL51PcQ==} + wrangler@3.85.0: + resolution: {integrity: sha512-r5YCWUaF4ApLnloNE6jHHgRYdFzYHoajTlC1tns42UzQ2Ls63VAqD3b0cxOqzDUfmlSb3skpmu0B0Ssi3QWPAg==} engines: {node: '>=16.17.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20241106.0 + '@cloudflare/workers-types': ^4.20241022.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -4457,22 +4457,22 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/workerd-darwin-64@1.20241106.1': + '@cloudflare/workerd-darwin-64@1.20241022.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20241106.1': + '@cloudflare/workerd-darwin-arm64@1.20241022.0': optional: true - '@cloudflare/workerd-linux-64@1.20241106.1': + '@cloudflare/workerd-linux-64@1.20241022.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20241106.1': + '@cloudflare/workerd-linux-arm64@1.20241022.0': optional: true - '@cloudflare/workerd-windows-64@1.20241106.1': + '@cloudflare/workerd-windows-64@1.20241022.0': optional: true - '@cloudflare/workers-shared@0.7.1': + '@cloudflare/workers-shared@0.7.0': dependencies: mime: 3.0.0 zod: 3.23.8 @@ -6834,7 +6834,7 @@ snapshots: mime@3.0.0: {} - miniflare@3.20241106.0: + miniflare@3.20241022.0: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -6844,7 +6844,7 @@ snapshots: glob-to-regexp: 0.4.1 stoppable: 1.1.0 undici: 5.28.4 - workerd: 1.20241106.1 + workerd: 1.20241022.0 ws: 8.18.0 youch: 3.3.4 zod: 3.23.8 @@ -7608,7 +7608,7 @@ snapshots: undici@6.20.1: {} - unenv-nightly@2.0.0-20241111-080453-894aa31: + unenv-nightly@2.0.0-20241024-111401-d4156ac: dependencies: defu: 6.1.4 ohash: 1.1.4 @@ -7702,34 +7702,34 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20241106.1: + workerd@1.20241022.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20241106.1 - '@cloudflare/workerd-darwin-arm64': 1.20241106.1 - '@cloudflare/workerd-linux-64': 1.20241106.1 - '@cloudflare/workerd-linux-arm64': 1.20241106.1 - '@cloudflare/workerd-windows-64': 1.20241106.1 + '@cloudflare/workerd-darwin-64': 1.20241022.0 + '@cloudflare/workerd-darwin-arm64': 1.20241022.0 + '@cloudflare/workerd-linux-64': 1.20241022.0 + '@cloudflare/workerd-linux-arm64': 1.20241022.0 + '@cloudflare/workerd-windows-64': 1.20241022.0 - wrangler@3.88.0(@cloudflare/workers-types@4.20241106.0): + wrangler@3.85.0(@cloudflare/workers-types@4.20241106.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/workers-shared': 0.7.1 + '@cloudflare/workers-shared': 0.7.0 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) blake3-wasm: 2.1.5 - chokidar: 4.0.1 + chokidar: 3.6.0 date-fns: 4.1.0 esbuild: 0.17.19 itty-time: 1.0.6 - miniflare: 3.20241106.0 + miniflare: 3.20241022.0 nanoid: 3.3.7 path-to-regexp: 6.3.0 resolve: 1.22.8 resolve.exports: 2.0.2 selfsigned: 2.4.1 source-map: 0.6.1 - unenv: unenv-nightly@2.0.0-20241111-080453-894aa31 - workerd: 1.20241106.1 + unenv: unenv-nightly@2.0.0-20241024-111401-d4156ac + workerd: 1.20241022.0 xxhash-wasm: 1.0.2 optionalDependencies: '@cloudflare/workers-types': 4.20241106.0