diff --git a/.env.example b/.env.example index d098d10..cd3a88a 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ # Description: Example of .env file # MongoDB URI -MONGO_URI=mongodb://localhost:27017/your-database-name +MONGO_URI=mongodb://localhost:27017/example # Auth Plugin AUTH_DISCOVERY_URL=https://login.microsoftonline.com/c917f3e2-9322-4926-9bb3-daca730413ca/v2.0/.well-known/openid-configuration diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 58399c1..f01f698 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -74,14 +74,6 @@ jobs: with: node-version: 24 - - name: Remove existing MongoDB container - run: docker rm -f mongodb-actions || true - - - uses: supercharge/mongodb-github-action@1.12.1 - with: - mongodb-version: 7 - mongodb-container-name: mongodb-actions - - run: | corepack enable corepack install diff --git a/package.json b/package.json index 65b5af8..52691d7 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "private": true, "scripts": { "dev": "fastify start --import=tsx --watch --log-level=debug --pretty-logs --options src/app.ts", - "test": "tsx --test --test-timeout=5000 --experimental-test-coverage test/**/*.test.ts", + "test": "tsx --test --experimental-test-coverage test/**/*.test.ts", "compile": "tsgo --noEmit && tsgo -p test/tsconfig.json --noEmit", "lint": "eslint --fix .", "lint:check": "eslint .", @@ -53,7 +53,7 @@ "devDependencies": { "@commitlint/cli": "^20.4.2", "@commitlint/config-conventional": "^20.4.2", - "@eslint/js": "^10.0.1", + "@eslint/js": "^9.39.2", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/jsonwebtoken": "^9.0.10", "@types/node": "^25.3.0", @@ -62,6 +62,7 @@ "eslint-config-prettier": "^10.1.8", "husky": "^9.1.7", "lint-staged": "^16.2.7", + "mongodb-memory-server": "11.0.1", "prettier": "^3.8.1", "prettier-plugin-jsdoc": "^1.8.0", "rimraf": "^6.1.3", diff --git a/src/app.ts b/src/app.ts index 78224ae..656aa28 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,5 +1,6 @@ import packageJson from "../package.json" with { type: "json" }; import { AuthPluginOptions } from "./plugins/auth.js"; +import { InitMongoPluginOptions } from "./plugins/init-mongo.js"; import AutoLoad, { AutoloadPluginOptions } from "@fastify/autoload"; import { TypeBoxTypeProvider } from "@fastify/type-provider-typebox"; import { @@ -19,10 +20,9 @@ const __dirname = path.dirname(__filename); export type AppOptions = { // Place your custom options for app below here. - // MongoDB URI (Optional) - // mongoUri: string; } & FastifyServerOptions & Partial & + InitMongoPluginOptions & AuthPluginOptions; const missingOptions: string[] = []; @@ -63,7 +63,7 @@ const options: AppOptions = { // This increases the timeout for plugins to 5 minutes. pluginTimeout: 5 * 60 * 1000, - // mongoUri: getOption("MONGO_URI")!, + mongoUri: getOption("MONGO_URI")!, authDiscoveryURL: getOption("AUTH_DISCOVERY_URL")!, authClientID: getOption("AUTH_CLIENT_ID")!, authSkip: getBooleanOption("AUTH_SKIP", false), @@ -138,12 +138,6 @@ const app: FastifyPluginAsync = async ( await fastify.register(import("@fastify/swagger-ui")); await fastify.register(import("@scalar/fastify-api-reference")); - // Register MongoDB (Optional) - // await fastify.register(import("@fastify/mongodb"), { - // url: opts.mongoUri, - // forceClose: true, - // }); - // Do not touch the following lines // This loads all plugins defined in plugins diff --git a/src/plugins/init-mongo.ts b/src/plugins/init-mongo.ts index 8ce7c8c..f909fe1 100644 --- a/src/plugins/init-mongo.ts +++ b/src/plugins/init-mongo.ts @@ -1,24 +1,31 @@ import fp from "fastify-plugin"; +import { Collection, Document } from "mongodb"; -// import { Collection, Document } from "mongodb"; - -export type InitMongoPluginOptions = Record; +export type InitMongoPluginOptions = { + // MongoDB URI + mongoUri: string; +}; // The use of fastify-plugin is required to be able // to export the decorators to the outer scope export default fp(async (fastify, opts) => { + await fastify.register(import("@fastify/mongodb"), { + url: opts.mongoUri, + forceClose: true, + }); fastify.addHook("onReady", async () => { // Initialize the MongoDB database - // await fastify.mongo - // .db!.collection("example") - // .createIndex({ example: 1 }); + fastify.decorate("collections", { + example: fastify.mongo.db!.collection("example"), + }); + await fastify.collections.example.createIndex({ example: 1 }); }); }); -// declare module "fastify" { -// export interface FastifyInstance { -// collections: { -// example: Collection; -// }; -// } -// } +declare module "fastify" { + export interface FastifyInstance { + collections: { + example: Collection; + }; + } +} diff --git a/test/helper.ts b/test/helper.ts index 1966e76..a9c0e26 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -1,6 +1,7 @@ // This file contains code that we reuse between our tests. import app, { AppOptions, options } from "../src/app.js"; import Fastify from "fastify"; +import { MongoMemoryServer } from "mongodb-memory-server"; import * as test from "node:test"; export type TestContext = { @@ -9,9 +10,9 @@ export type TestContext = { // Fill in this config with all the configurations // needed for testing the application -async function config(): Promise { +async function config(mongoUri: string): Promise { return { - // mongoUri: "mongodb://localhost:27017", + mongoUri, authDiscoveryURL: "", authClientID: "", authSkip: true, @@ -20,17 +21,24 @@ async function config(): Promise { // Automatically build and tear down our instance async function build(t: TestContext) { + const mongod = await MongoMemoryServer.create(); const fastify = Fastify({ pluginTimeout: options.pluginTimeout }); - const appConfig = await config(); - await fastify.register(app, appConfig); - await fastify.ready(); - // Tear down our app after we are done - t.after(async () => { + const cleanup = async () => { await fastify.close(); - }); + await mongod.stop(); + }; + t.after(cleanup); - return fastify; + try { + const appConfig = await config(mongod.getUri("example-test")); + await fastify.register(app, appConfig); + await fastify.ready(); + return fastify; + } catch (error) { + await cleanup(); + throw error; + } } export { config, build }; diff --git a/yarn.lock b/yarn.lock index b1d2b07..39fe69c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -562,15 +562,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:^10.0.1": - version: 10.0.1 - resolution: "@eslint/js@npm:10.0.1" - peerDependencies: - eslint: ^10.0.0 - peerDependenciesMeta: - eslint: - optional: true - checksum: 10c0/9f3fcaf71ba7fdf65d82e8faad6ecfe97e11801cc3c362b306a88ea1ed1344ae0d35330dddb0e8ad18f010f6687a70b75491b9e01c8af57acd7987cee6b3ec6c +"@eslint/js@npm:^9.39.2": + version: 9.39.3 + resolution: "@eslint/js@npm:9.39.3" + checksum: 10c0/df1c70d6681c8daf4a3c86dfac159fcd98a73c4620c4fbe2be6caab1f30a34c7de0ad88ab0e81162376d2cde1a2eed1c32eff5f917ca369870930a51f8e818f1 languageName: node linkType: hard @@ -1498,6 +1493,15 @@ __metadata: languageName: node linkType: hard +"async-mutex@npm:^0.5.0": + version: 0.5.0 + resolution: "async-mutex@npm:0.5.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/9096e6ad6b674c894d8ddd5aa4c512b09bb05931b8746ebd634952b05685608b2b0820ed5c406e6569919ff5fe237ab3c491e6f2887d6da6b6ba906db3ee9c32 + languageName: node + linkType: hard + "atomic-sleep@npm:^1.0.0": version: 1.0.0 resolution: "atomic-sleep@npm:1.0.0" @@ -1515,6 +1519,18 @@ __metadata: languageName: node linkType: hard +"b4a@npm:^1.6.4": + version: 1.8.0 + resolution: "b4a@npm:1.8.0" + peerDependencies: + react-native-b4a: "*" + peerDependenciesMeta: + react-native-b4a: + optional: true + checksum: 10c0/27eab5c50ea1f1314f36256f160d2e6d6950f55f02ee4942732ecafd8bcc4b3a2ed209fab532b288770d41df2befa97a2745175c06471875b716eb87abf31519 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -1529,6 +1545,18 @@ __metadata: languageName: node linkType: hard +"bare-events@npm:^2.7.0": + version: 2.8.2 + resolution: "bare-events@npm:2.8.2" + peerDependencies: + bare-abort-controller: "*" + peerDependenciesMeta: + bare-abort-controller: + optional: true + checksum: 10c0/53fef240cf2cdcca62f78b6eead90ddb5a59b0929f414b13a63764c2b4f9de98ea8a578d033b04d64bb7b86dfbc402e937984e69950855cc3754c7b63da7db21 + languageName: node + linkType: hard + "binary-searching@npm:^2.0.5": version: 2.0.5 resolution: "binary-searching@npm:2.0.5" @@ -1580,6 +1608,13 @@ __metadata: languageName: node linkType: hard +"buffer-crc32@npm:~0.2.3": + version: 0.2.13 + resolution: "buffer-crc32@npm:0.2.13" + checksum: 10c0/cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 + languageName: node + linkType: hard + "buffer-equal-constant-time@npm:^1.0.1": version: 1.0.1 resolution: "buffer-equal-constant-time@npm:1.0.1" @@ -1613,6 +1648,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^6.3.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -1727,6 +1769,13 @@ __metadata: languageName: node linkType: hard +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" @@ -2257,6 +2306,15 @@ __metadata: languageName: node linkType: hard +"events-universal@npm:^1.0.0": + version: 1.0.1 + resolution: "events-universal@npm:1.0.1" + dependencies: + bare-events: "npm:^2.7.0" + checksum: 10c0/a1d9a5e9f95843650f8ec240dd1221454c110189a9813f32cdf7185759b43f1f964367ac7dca4ebc69150b59043f2d77c7e122b0d03abf7c25477ea5494785a5 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.3 resolution: "exponential-backoff@npm:3.1.3" @@ -2285,6 +2343,13 @@ __metadata: languageName: node linkType: hard +"fast-fifo@npm:^1.2.0, fast-fifo@npm:^1.3.2": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 10c0/d53f6f786875e8b0529f784b59b4b05d4b5c31c651710496440006a398389a579c8dbcd2081311478b5bf77f4b0b21de69109c5a4eabea9d8e8783d1eb864e4c + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -2467,6 +2532,17 @@ __metadata: languageName: node linkType: hard +"find-cache-dir@npm:^3.3.2": + version: 3.3.2 + resolution: "find-cache-dir@npm:3.3.2" + dependencies: + commondir: "npm:^1.0.1" + make-dir: "npm:^3.0.2" + pkg-dir: "npm:^4.1.0" + checksum: 10c0/92747cda42bff47a0266b06014610981cfbb71f55d60f2c8216bc3108c83d9745507fb0b14ecf6ab71112bed29cd6fb1a137ee7436179ea36e11287e3159e587 + languageName: node + linkType: hard + "find-my-way@npm:^9.0.0": version: 9.1.0 resolution: "find-my-way@npm:9.1.0" @@ -2487,6 +2563,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -2514,6 +2600,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.11": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 + languageName: node + linkType: hard + "forwarded@npm:^0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -2704,7 +2800,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.1": +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" dependencies: @@ -3158,6 +3254,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -3325,6 +3430,15 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^3.0.2": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + "make-fetch-happen@npm:^15.0.0": version: 15.0.3 resolution: "make-fetch-happen@npm:15.0.3" @@ -3824,6 +3938,36 @@ __metadata: languageName: node linkType: hard +"mongodb-memory-server-core@npm:11.0.1": + version: 11.0.1 + resolution: "mongodb-memory-server-core@npm:11.0.1" + dependencies: + async-mutex: "npm:^0.5.0" + camelcase: "npm:^6.3.0" + debug: "npm:^4.4.3" + find-cache-dir: "npm:^3.3.2" + follow-redirects: "npm:^1.15.11" + https-proxy-agent: "npm:^7.0.6" + mongodb: "npm:^7.0.0" + new-find-package-json: "npm:^2.0.0" + semver: "npm:^7.7.3" + tar-stream: "npm:^3.1.7" + tslib: "npm:^2.8.1" + yauzl: "npm:^3.2.0" + checksum: 10c0/9680c11df4b6e1d8439adc7c19fd9abad6f728f4b2840bcb06bf5276ef9333f73b6377e034b7886bbb7dc8eed9537c59cea8cc9b9068beb810b8a51b8b873398 + languageName: node + linkType: hard + +"mongodb-memory-server@npm:11.0.1": + version: 11.0.1 + resolution: "mongodb-memory-server@npm:11.0.1" + dependencies: + mongodb-memory-server-core: "npm:11.0.1" + tslib: "npm:^2.8.1" + checksum: 10c0/0f2967b4285552829481344b6d36dab6b1164cea1f877640439d11a066d4d3ebe3ea9e4470db3bf5d07b1f3a8cd979e4f46cfaecd55fd79434019c9db6179e32 + languageName: node + linkType: hard + "mongodb@npm:^7.0.0": version: 7.1.0 resolution: "mongodb@npm:7.1.0" @@ -3902,6 +4046,15 @@ __metadata: languageName: node linkType: hard +"new-find-package-json@npm:^2.0.0": + version: 2.0.0 + resolution: "new-find-package-json@npm:2.0.0" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/b5265976629894369726c7bb0705493783071a00e202c5d9da1903458823192c25a954e24d387476eae8dfa6c5c3fff61018fd2bb7ea7b66424a27ff11b49606 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 12.2.0 resolution: "node-gyp@npm:12.2.0" @@ -3996,7 +4149,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.0.0": +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -4023,6 +4176,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" @@ -4138,6 +4300,13 @@ __metadata: languageName: node linkType: hard +"pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" + checksum: 10c0/8a87e63f7a4afcfb0f9f77b39bb92374afc723418b9cb716ee4257689224171002e07768eeade4ecd0e86f1fa3d8f022994219fb45634f2dbd78c6803e452458 + languageName: node + linkType: hard + "picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -4228,6 +4397,15 @@ __metadata: languageName: node linkType: hard +"pkg-dir@npm:^4.1.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + "pkg-up@npm:^3.1.0": version: 3.1.0 resolution: "pkg-up@npm:3.1.0" @@ -4475,6 +4653,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.0.0": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + "semver@npm:^7.3.5, semver@npm:^7.6.0": version: 7.6.3 resolution: "semver@npm:7.6.3" @@ -4627,6 +4814,17 @@ __metadata: languageName: node linkType: hard +"streamx@npm:^2.15.0": + version: 2.23.0 + resolution: "streamx@npm:2.23.0" + dependencies: + events-universal: "npm:^1.0.0" + fast-fifo: "npm:^1.3.2" + text-decoder: "npm:^1.1.0" + checksum: 10c0/15708ce37818d588632fe1104e8febde573e33e8c0868bf583fce0703f3faf8d2a063c278e30df2270206811b69997f64eb78792099933a1fe757e786fbcbd44 + languageName: node + linkType: hard + "string-argv@npm:^0.3.2": version: 0.3.2 resolution: "string-argv@npm:0.3.2" @@ -4716,6 +4914,17 @@ __metadata: languageName: node linkType: hard +"tar-stream@npm:^3.1.7": + version: 3.1.7 + resolution: "tar-stream@npm:3.1.7" + dependencies: + b4a: "npm:^1.6.4" + fast-fifo: "npm:^1.2.0" + streamx: "npm:^2.15.0" + checksum: 10c0/a09199d21f8714bd729993ac49b6c8efcb808b544b89f23378ad6ffff6d1cb540878614ba9d4cfec11a64ef39e1a6f009a5398371491eb1fda606ffc7f70f718 + languageName: node + linkType: hard + "tar@npm:^7.5.4": version: 7.5.9 resolution: "tar@npm:7.5.9" @@ -4735,7 +4944,7 @@ __metadata: dependencies: "@commitlint/cli": "npm:^20.4.2" "@commitlint/config-conventional": "npm:^20.4.2" - "@eslint/js": "npm:^10.0.1" + "@eslint/js": "npm:^9.39.2" "@fastify/autoload": "npm:^6.3.1" "@fastify/cors": "npm:^11.2.0" "@fastify/mongodb": "npm:^10.0.0" @@ -4757,6 +4966,7 @@ __metadata: jsonwebtoken: "npm:^9.0.3" jwks-rsa: "npm:^3.2.2" lint-staged: "npm:^16.2.7" + mongodb-memory-server: "npm:11.0.1" openid-client: "npm:^6.8.2" prettier: "npm:^3.8.1" prettier-plugin-jsdoc: "npm:^1.8.0" @@ -4768,6 +4978,15 @@ __metadata: languageName: unknown linkType: soft +"text-decoder@npm:^1.1.0": + version: 1.2.7 + resolution: "text-decoder@npm:1.2.7" + dependencies: + b4a: "npm:^1.6.4" + checksum: 10c0/929938ed154fbadb660a7f3d1aca30b7e53649a731af7583168fcfba0c158046325d35d945926e2a512bb62d1a49a7818151c987ea38b48853f01e1615722fc5 + languageName: node + linkType: hard + "thread-stream@npm:^3.0.0": version: 3.1.0 resolution: "thread-stream@npm:3.1.0" @@ -4842,6 +5061,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.4.0, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + "tsx@npm:^4.21.0": version: 4.21.0 resolution: "tsx@npm:4.21.0" @@ -5145,6 +5371,16 @@ __metadata: languageName: node linkType: hard +"yauzl@npm:^3.2.0": + version: 3.2.0 + resolution: "yauzl@npm:3.2.0" + dependencies: + buffer-crc32: "npm:~0.2.3" + pend: "npm:~1.2.0" + checksum: 10c0/7b40b3dc46b95761a2a764391d257a11f494d365875af73a1b48fe16d4bd103dd178612e60168d12a0e59a8ba4f6411a15a5e8871d5a5f78255d6cc1ce39ee62 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0"