diff --git a/.eslintrc.js b/.eslintrc.js index 9d919dfa58d..77541d87be5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,7 +20,16 @@ module.exports = { "require-atomic-updates": "off", // This rule is so noisy and isn't useful: https://github.com/eslint/eslint/issues/11899 "require-jsdoc": "off", // This rule is deprecated and superseded by jsdoc/require-jsdoc. "valid-jsdoc": "off", // This is deprecated but included in recommended configs. - + "brikke/no-undeclared-imports": [ + "error", + { + excludedFilePatterns: ["**/scripts/**/*", `update-notifier-cjs.d.ts`], + excludedModules: [ + /node:/, + "express-serve-static-core", // We rely on just the types, and the package breaks our build. + ], + }, + ], "no-prototype-builtins": "warn", // TODO(bkendall): remove, allow to error. "no-useless-escape": "warn", // TODO(bkendall): remove, allow to error. "prefer-promise-reject-errors": "warn", // TODO(bkendall): remove, allow to error. @@ -107,7 +116,7 @@ module.exports = { sourceType: "module", warnOnUnsupportedTypeScriptVersion: false, }, - plugins: ["prettier", "@typescript-eslint", "jsdoc"], + plugins: ["prettier", "@typescript-eslint", "jsdoc", "brikke"], settings: { jsdoc: { tagNamePreference: { diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index eaf0c41f133..90d83e18542 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -139,6 +139,7 @@ "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.1.0", + "eslint-plugin-brikke": "^2.2.2", "eslint-plugin-jsdoc": "^48.0.1", "eslint-plugin-prettier": "^5.1.3", "firebase": "^9.16.0", @@ -154,6 +155,7 @@ "nyc": "^15.1.0", "openapi-merge": "^1.0.23", "openapi-typescript": "^4.5.0", + "openapi3-ts": "^3.2.0", "prettier": "^3.2.4", "proxy": "^1.0.2", "puppeteer": "^19.0.0", @@ -8406,6 +8408,19 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-brikke": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-brikke/-/eslint-plugin-brikke-2.2.2.tgz", + "integrity": "sha512-m/nruSg/LxVvyjIZBQ3hJBK2cE4Lxc+klaX+P+yd1FwDDjj+/ul+JJz9fw/zrttcFx7WsA6gtAWdfV5S5yiGSQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4", + "read-pkg-up": "^7.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint-plugin-jsdoc": { "version": "48.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.1.0.tgz", @@ -20799,9 +20814,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "bin": { "yaml": "bin.mjs" }, @@ -27466,6 +27481,16 @@ "dev": true, "requires": {} }, + "eslint-plugin-brikke": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-brikke/-/eslint-plugin-brikke-2.2.2.tgz", + "integrity": "sha512-m/nruSg/LxVvyjIZBQ3hJBK2cE4Lxc+klaX+P+yd1FwDDjj+/ul+JJz9fw/zrttcFx7WsA6gtAWdfV5S5yiGSQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4", + "read-pkg-up": "^7.0.1" + } + }, "eslint-plugin-jsdoc": { "version": "48.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.1.0.tgz", @@ -36513,9 +36538,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==" }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index bc6384c2ef7..23c0e7df5b6 100644 --- a/package.json +++ b/package.json @@ -225,6 +225,7 @@ "eslint": "^8.56.0", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.1.0", + "eslint-plugin-brikke": "^2.2.2", "eslint-plugin-jsdoc": "^48.0.1", "eslint-plugin-prettier": "^5.1.3", "firebase": "^9.16.0", @@ -240,6 +241,7 @@ "nyc": "^15.1.0", "openapi-merge": "^1.0.23", "openapi-typescript": "^4.5.0", + "openapi3-ts": "^3.2.0", "prettier": "^3.2.4", "proxy": "^1.0.2", "puppeteer": "^19.0.0", diff --git a/src/emulator/storage/apis/gcloud.ts b/src/emulator/storage/apis/gcloud.ts index 3a05037c32e..99d9fd45766 100644 --- a/src/emulator/storage/apis/gcloud.ts +++ b/src/emulator/storage/apis/gcloud.ts @@ -16,7 +16,7 @@ import { parseObjectUploadMultipartRequest } from "../multipart"; import { Upload, UploadNotActiveError } from "../upload"; import { ForbiddenError, NotFoundError } from "../errors"; import { reqBodyToBuffer } from "../../shared/request"; -import { Query } from "express-serve-static-core"; +import type { Query } from "express-serve-static-core"; export function createCloudEndpoints(emulator: StorageEmulator): Router { // eslint-disable-next-line new-cap