diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 068d7d0..1403564 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,7 +1,8 @@ +--- version: 2 updates: - - package-ecosystem: "npm" # See documentation for possible values - directory: "/" # Location of package manifests + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests schedule: interval: "monthly" versioning-strategy: increase diff --git a/.github/workflows/authzed-node.yaml b/.github/workflows/authzed-node.yaml index 48fdc64..6118026 100644 --- a/.github/workflows/authzed-node.yaml +++ b/.github/workflows/authzed-node.yaml @@ -1,3 +1,4 @@ +--- name: authzed-node-ci on: push: @@ -29,7 +30,7 @@ jobs: - js-dist/package.json - buf.gen.yaml test: - name: Lint and Test + name: Run Tests runs-on: "buildjet-2vcpu-ubuntu-2204" strategy: matrix: @@ -45,16 +46,26 @@ jobs: - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - uses: bahmutov/npm-install@v1 - with: - install-command: yarn --frozen-lockfile --silent - working-directory: ./ - - name: Run lint - run: CI=true yarn lint - working-directory: ./ + cache: "yarn" + - name: "Yarn install" + run: yarn install --frozen-lockfile - name: Run Yarn tests run: CI=true yarn only-run-tests working-directory: ./ + lint: + name: Lint + runs-on: "ubuntu-latest" + steps: + - uses: "actions/checkout@v4" + - uses: "actions/setup-python@v5" + # NOTE: this is needed for installing and then running tsc, + # which is invoked locally by pre-commit + - uses: "actions/setup-node@v4" + with: + cache: "yarn" + - name: "Yarn install" + run: yarn install --frozen-lockfile + - uses: "pre-commit/action@v3.0.1" publish-npm: name: Publish to NPM needs: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..dfba570 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,21 @@ +--- +repos: + - repo: "https://github.com/adrienverge/yamllint" + rev: "v1.35.1" + hooks: + - id: "yamllint" + - repo: "https://github.com/biomejs/pre-commit" + rev: "v0.4.0" + hooks: + - id: "biome-check" + additional_dependencies: ["@biomejs/biome@1.8.3"] + - repo: "local" + hooks: + - id: "typescript-check" + name: "Check types" + entry: "yarn run tsc --noEmit" + language: "system" + types_or: ["ts"] + # We do this to ensure that type changes in the modified + # files don't change things elsewhere. + pass_filenames: false diff --git a/biome.jsonc b/biome.jsonc new file mode 100644 index 0000000..816c592 --- /dev/null +++ b/biome.jsonc @@ -0,0 +1,22 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "files": { + "ignore": ["src/authzedapi", "dist"] + }, + "linter": { + "rules": { + "complexity": { + "noForEach": "off" + } + } + }, + "formatter": { + "indentWidth": 2, + "indentStyle": "space" + }, + "json": { + "formatter": { + "enabled": false + } + } +} diff --git a/buf.gen.yaml b/buf.gen.yaml index 98b9613..9eb2dbb 100755 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -1,10 +1,18 @@ -#!/usr/bin/env -S buf generate buf.build/authzed/api:v1.35.0 --template +#!/usr/bin/env -S buf generate # To regenerate: # npm install -g grpc-tools # ./buf.gen.yaml -version: "v1beta1" +--- +version: "v2" +inputs: + - module: "buf.build/authzed/api:v1.35.0" plugins: - - name: "ts" + - local: "./node_modules/@protobuf-ts/plugin/bin/protoc-gen-ts" out: "src/authzedapi" - opt: generate_dependencies,long_type_string,client_grpc1 - path: ./node_modules/@protobuf-ts/plugin/bin/protoc-gen-ts + # protobuf-ts expects this to be set to "all" + # https://github.com/timostamm/protobuf-ts/issues/165#issuecomment-931492639 + strategy: "all" + opt: + - "generate_dependencies" + - "long_type_string" + - "client_grpc1" diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index c3410d5..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,40 +0,0 @@ -import typescriptEslint from "@typescript-eslint/eslint-plugin"; -import globals from "globals"; -import tsParser from "@typescript-eslint/parser"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import js from "@eslint/js"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all -}); - -export default [{ - ignores: ["src/authzedapi/**/*", "src/*.test.js"], -}, ...compat.extends( - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", -), { - plugins: { - "@typescript-eslint": typescriptEslint, - }, - - languageOptions: { - globals: { - ...globals.browser, - ...globals.commonjs, - }, - - parser: tsParser, - ecmaVersion: 12, - sourceType: "script", - }, - - rules: {}, -}]; \ No newline at end of file diff --git a/examples/v1/example.js b/examples/v1/example.js index 8008d34..e1167b6 100644 --- a/examples/v1/example.js +++ b/examples/v1/example.js @@ -1,7 +1,7 @@ -import { v1 } from '@authzed/authzed-node'; +import { v1 } from "@authzed/authzed-node"; // set up it on localhost like this: // const client = v1.NewClient('mytokenhere', 'localhost:50051', 1); -const client = v1.NewClient('mytokenhere'); +const client = v1.NewClient("mytokenhere"); const writeRequest = v1.WriteSchemaRequest.create({ schema: `definition test/user {} @@ -15,7 +15,7 @@ const writeRequest = v1.WriteSchemaRequest.create({ // Write a schema. await new Promise((resolve, reject) => { - client.writeSchema(writeRequest, function (err, response) { + client.writeSchema(writeRequest, (err, response) => { if (err) reject(err); resolve(response); }); @@ -27,14 +27,14 @@ const writeRelationshipRequest = v1.WriteRelationshipsRequest.create({ v1.RelationshipUpdate.create({ relationship: v1.Relationship.create({ resource: v1.ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }), - relation: 'viewer', + relation: "viewer", subject: v1.SubjectReference.create({ object: v1.ObjectReference.create({ - objectType: 'test/user', - objectId: 'fred', + objectType: "test/user", + objectId: "fred", }), }), }), @@ -44,7 +44,7 @@ const writeRelationshipRequest = v1.WriteRelationshipsRequest.create({ }); await new Promise((resolve, reject) => { - client.writeRelationships(writeRelationshipRequest, function (err, response) { + client.writeRelationships(writeRelationshipRequest, (err, response) => { if (err) reject(err); resolve(response); }); @@ -53,26 +53,26 @@ await new Promise((resolve, reject) => { // Check a permission. const checkPermissionRequest = v1.CheckPermissionRequest.create({ resource: v1.ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }), - permission: 'view', + permission: "view", subject: v1.SubjectReference.create({ object: v1.ObjectReference.create({ - objectType: 'test/user', - objectId: 'fred', + objectType: "test/user", + objectId: "fred", }), }), consistency: v1.Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), }); const checkResult = await new Promise((resolve, reject) => { - client.checkPermission(checkPermissionRequest, function (err, response) { + client.checkPermission(checkPermissionRequest, (err, response) => { if (err) reject(err); resolve(response); }); @@ -80,5 +80,5 @@ const checkResult = await new Promise((resolve, reject) => { console.log( checkResult.permissionship === - v1.CheckPermissionResponse_Permissionship.HAS_PERMISSION + v1.CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); diff --git a/package.json b/package.json index 7d71e44..fa18bb6 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "test": "./scripts/run-and-test.sh", "only-run-tests": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "buf": "./buf.gen.yaml", - "lint": "./node_modules/.bin/eslint src", + "lint": "biome check .", + "fix": "biome check --write .", "build": "tsc", "prepublish": "yarn build", "build-js-client": "tsc --target es2018 --declaration false --outDir js-dist" @@ -33,14 +34,10 @@ "google-protobuf": "^3.21.4" }, "devDependencies": { - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.9.0", + "@biomejs/biome": "1.8.3", "@protobuf-ts/plugin": "^2.9.4", "@types/jasmine": "^5.1.4", "@types/jest": "^29.5.12", - "@typescript-eslint/eslint-plugin": "^8.1.0", - "@typescript-eslint/parser": "^8.1.0", - "eslint": "^9.9.0", "grpc-tools": "^1.11.2", "jasmine": "^5.2.0", "ts-node": "^10.9.2", diff --git a/src/__utils__/helpers.ts b/src/__utils__/helpers.ts index 063076d..d41ad77 100644 --- a/src/__utils__/helpers.ts +++ b/src/__utils__/helpers.ts @@ -1,9 +1,9 @@ /** * Generates a random token with a prefix to support * unique, idempotent local testing. - * @param prefix - * @returns + * @param prefix + * @returns */ export function generateTestToken(prefix: string): string { - return `${prefix}-${Date.now().toString()}` -} \ No newline at end of file + return `${prefix}-${Date.now().toString()}`; +} diff --git a/src/full-promises.test.ts b/src/full-promises.test.ts index f21deea..b37d68a 100644 --- a/src/full-promises.test.ts +++ b/src/full-promises.test.ts @@ -1,13 +1,17 @@ +import { generateTestToken } from "./__utils__/helpers"; import { ClientSecurity } from "./util"; import * as v1 from "./v1"; import { Consistency } from "./v1"; -import { generateTestToken } from './__utils__/helpers' describe("a check following a write of schema and relationships", () => { it("should succeed", async () => { // Write the schema. - const token = generateTestToken('full-promises') - const { promises: v1client } = v1.NewClient(token, "localhost:50051", ClientSecurity.INSECURE_LOCALHOST_ALLOWED); + const token = generateTestToken("full-promises"); + const { promises: v1client } = v1.NewClient( + token, + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, + ); const writeSchemaRequest = v1.WriteSchemaRequest.create({ schema: ` @@ -20,7 +24,7 @@ describe("a check following a write of schema and relationships", () => { `, }); - await v1client.writeSchema(writeSchemaRequest) + await v1client.writeSchema(writeSchemaRequest); // Create the relationship between the resource and the user. const resource = v1.ObjectReference.create({ objectType: "test/resource", @@ -53,7 +57,7 @@ describe("a check following a write of schema and relationships", () => { updates: [update], }); - const response = await v1client.writeRelationships(writeRequest) + const response = await v1client.writeRelationships(writeRequest); expect(response).toBeTruthy(); const checkPermissionRequest = v1.CheckPermissionRequest.create({ @@ -65,12 +69,14 @@ describe("a check following a write of schema and relationships", () => { oneofKind: "fullyConsistent", fullyConsistent: true, }, - }) + }), }); - const permissionResponse = await v1client.checkPermission(checkPermissionRequest) + const permissionResponse = await v1client.checkPermission( + checkPermissionRequest, + ); expect(permissionResponse?.permissionship).toBe( - v1.CheckPermissionResponse_Permissionship.HAS_PERMISSION + v1.CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); }); }); diff --git a/src/full.test.ts b/src/full.test.ts index 00c36a1..e4e19d3 100644 --- a/src/full.test.ts +++ b/src/full.test.ts @@ -1,13 +1,17 @@ +import { generateTestToken } from "./__utils__/helpers"; import { ClientSecurity } from "./util"; import * as v1 from "./v1"; import { Consistency } from "./v1"; -import { generateTestToken } from './__utils__/helpers' describe("a check following a write of schema and relationships", () => { it("should succeed", (done) => { // Write the schema. - const token = generateTestToken('full-test') - const v1client = v1.NewClient(token, "localhost:50051", ClientSecurity.INSECURE_LOCALHOST_ALLOWED); + const token = generateTestToken("full-test"); + const v1client = v1.NewClient( + token, + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, + ); const writeSchemaRequest = v1.WriteSchemaRequest.create({ schema: ` @@ -20,7 +24,7 @@ describe("a check following a write of schema and relationships", () => { `, }); - v1client.writeSchema(writeSchemaRequest, function (err) { + v1client.writeSchema(writeSchemaRequest, (err) => { expect(err).toBe(null); // Create the relationship between the resource and the user. @@ -55,7 +59,7 @@ describe("a check following a write of schema and relationships", () => { updates: [update], }); - v1client.writeRelationships(writeRequest, function (err, response) { + v1client.writeRelationships(writeRequest, (err, response) => { expect(err).toBe(null); expect(response).toBeTruthy(); @@ -68,13 +72,13 @@ describe("a check following a write of schema and relationships", () => { oneofKind: "fullyConsistent", fullyConsistent: true, }, - }) + }), }); v1client.checkPermission(checkPermissionRequest, (err, response) => { expect(err).toBe(null); expect(response?.permissionship).toBe( - v1.CheckPermissionResponse_Permissionship.HAS_PERMISSION + v1.CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); done(); }); diff --git a/src/index.ts b/src/index.ts index 10e1fc5..cc29345 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,2 @@ -"use strict"; - -export * as protobuf from './protobuf'; -export * as v1 from './v1'; +export * as protobuf from "./protobuf"; +export * as v1 from "./v1"; diff --git a/src/protobuf.ts b/src/protobuf.ts index 2b25de4..7246e8d 100644 --- a/src/protobuf.ts +++ b/src/protobuf.ts @@ -1,4 +1,4 @@ -export * from './authzedapi/google/protobuf/descriptor'; -export * from './authzedapi/google/protobuf/duration'; -export * from './authzedapi/google/protobuf/struct'; -export * from './authzedapi/google/protobuf/timestamp'; +export * from "./authzedapi/google/protobuf/descriptor"; +export * from "./authzedapi/google/protobuf/duration"; +export * from "./authzedapi/google/protobuf/struct"; +export * from "./authzedapi/google/protobuf/timestamp"; diff --git a/src/types.ts b/src/types.ts index b393eb2..9dcc5e1 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import { +import type { CallOptions, Client, ClientReadableStream, @@ -6,7 +6,7 @@ import { ClientWritableStream, Metadata, ServiceError, -} from '@grpc/grpc-js'; +} from "@grpc/grpc-js"; /** * Picks all function properties of a type that except for those with a specific return type @@ -37,7 +37,7 @@ export type OmitBaseMethods = { export type StreamCall = ( request: T, metadata?: Metadata | CallOptions, - options?: CallOptions + options?: CallOptions, ) => ClientReadableStream; /** @@ -54,8 +54,8 @@ export type WritableStreamCall = ( | undefined, callback?: ( err: ServiceError | null, - value?: U | undefined - ) => void | undefined + value?: U | undefined, + ) => void | undefined, ) => ClientWritableStream; /** @@ -65,7 +65,7 @@ export type UnaryCall = ( request: T, metadata: Metadata | CallOptions, options: Partial, - callback: (err: ServiceError | null, res?: U) => void + callback: (err: ServiceError | null, res?: U) => void, ) => ClientUnaryCall; /** @@ -74,7 +74,7 @@ export type UnaryCall = ( export type PromisifiedCall = ( request: T, metadata?: Metadata, - options?: Partial + options?: Partial, ) => Promise; /** diff --git a/src/util.ts b/src/util.ts index 4af24d3..281701a 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,13 +1,13 @@ +import type { ConnectionOptions } from "tls"; import * as grpc from "@grpc/grpc-js"; -import { NextCall } from "@grpc/grpc-js/build/src/client-interceptors"; -import { ConnectionOptions } from "tls"; +import type { NextCall } from "@grpc/grpc-js/build/src/client-interceptors"; // NOTE: Copied from channel-credentials.ts in gRPC Node package because its not exported: // https://github.com/grpc/grpc-node/blob/3106057f5ad8f79a71d2ae411e116ad308a2e835/packages/grpc-js/src/call-credentials.ts#L143 class ComposedChannelCredentials extends grpc.ChannelCredentials { constructor( private channelCredentials: KnownInsecureChannelCredentialsImpl, - callCreds: grpc.CallCredentials + callCreds: grpc.CallCredentials, ) { super(callCreds); } @@ -16,7 +16,7 @@ class ComposedChannelCredentials extends grpc.ChannelCredentials { this.callCredentials.compose(callCredentials); return new ComposedChannelCredentials( this.channelCredentials, - combinedCallCredentials + combinedCallCredentials, ); } @@ -82,10 +82,10 @@ export enum PreconnectServices { function createClientCreds( endpoint: string, token: string, - security: ClientSecurity = ClientSecurity.SECURE + security: ClientSecurity = ClientSecurity.SECURE, ): grpc.ChannelCredentials { const metadata = new grpc.Metadata(); - metadata.set('authorization', 'Bearer ' + token); + metadata.set("authorization", "Bearer " + token); const creds = []; @@ -93,12 +93,12 @@ function createClientCreds( security === ClientSecurity.SECURE || security === ClientSecurity.INSECURE_PLAINTEXT_CREDENTIALS || (security === ClientSecurity.INSECURE_LOCALHOST_ALLOWED && - endpoint.startsWith('localhost:')) + endpoint.startsWith("localhost:")) ) { creds.push( grpc.credentials.createFromMetadataGenerator((_, callback) => { callback(null, metadata); - }) + }), ); } @@ -106,52 +106,48 @@ function createClientCreds( security === ClientSecurity.SECURE ? grpc.credentials.createSsl() : new KnownInsecureChannelCredentialsImpl(), - ...creds + ...creds, ); } function createClientCredsWithCustomCert( token: string, - certificate: Buffer + certificate: Buffer, ): grpc.ChannelCredentials { const metadata = new grpc.Metadata(); - metadata.set('authorization', 'Bearer ' + token); + metadata.set("authorization", "Bearer " + token); const creds = []; creds.push( grpc.credentials.createFromMetadataGenerator((_, callback) => { callback(null, metadata); - }) + }), ); return grpc.credentials.combineChannelCredentials( grpc.credentials.createSsl(certificate), - ...creds + ...creds, ); } function promisifyStream( fn: (req: P1) => grpc.ClientReadableStream, - bind: P3 + bind: P3, ): (req: P1) => Promise { return (req: P1) => { return new Promise((resolve, reject) => { const results: P2[] = []; const stream = fn.bind(bind)(req); - stream.on('data', function (response: P2) { + stream.on("data", (response: P2) => { results.push(response); }); - stream.on('error', function (e) { - return reject(e); - }); + stream.on("error", (e) => reject(e)); - stream.on('end', function () { - return resolve(results); - }); + stream.on("end", () => resolve(results)); - stream.on('status', function (status) { + stream.on("status", (status) => { if (status.code !== grpc.status.OK) { return reject(status); } diff --git a/src/v1-promise.test.ts b/src/v1-promise.test.ts index 8f7113c..f692126 100644 --- a/src/v1-promise.test.ts +++ b/src/v1-promise.test.ts @@ -1,6 +1,6 @@ -import * as grpc from '@grpc/grpc-js'; -import { generateTestToken } from './__utils__/helpers'; -import { Struct } from './authzedapi/google/protobuf/struct'; +import * as grpc from "@grpc/grpc-js"; +import { generateTestToken } from "./__utils__/helpers"; +import { Struct } from "./authzedapi/google/protobuf/struct"; import { BulkExportRelationshipsRequest, BulkImportRelationshipsRequest, @@ -19,46 +19,46 @@ import { SubjectReference, WriteRelationshipsRequest, WriteSchemaRequest, -} from './v1'; +} from "./v1"; -describe('a check with an unknown namespace', () => { - it('should raise a failed precondition', async () => { +describe("a check with an unknown namespace", () => { + it("should raise a failed precondition", async () => { const resource = ObjectReference.create({ - objectType: 'test/somenamespace', - objectId: 'bar', + objectType: "test/somenamespace", + objectId: "bar", }); const testUser = ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser', + objectType: "test/user", + objectId: "someuser", }); const checkPermissionRequest = CheckPermissionRequest.create({ resource, - permission: 'someperm', + permission: "someperm", subject: SubjectReference.create({ object: testUser, }), }); const { promises: client } = NewClient( - generateTestToken('v1-promise-test-unknown'), - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + generateTestToken("v1-promise-test-unknown"), + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); try { await client.checkPermission(checkPermissionRequest); - throw new Error('Error should be thrown'); + throw new Error("Error should be thrown"); } catch (err) { expect((err as grpc.ServiceError)?.code).toBe( - grpc.status.FAILED_PRECONDITION + grpc.status.FAILED_PRECONDITION, ); client.close(); } }); }); -describe('a check with an known namespace', () => { +describe("a check with an known namespace", () => { const schemaRequest = WriteSchemaRequest.create({ schema: `definition test/user {} @@ -70,13 +70,13 @@ describe('a check with an known namespace', () => { }); const resource = ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }); const testUser = ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser', + objectType: "test/user", + objectId: "someuser", }); const writeRequest = WriteRelationshipsRequest.create({ @@ -84,7 +84,7 @@ describe('a check with an known namespace', () => { RelationshipUpdate.create({ relationship: Relationship.create({ resource: resource, - relation: 'viewer', + relation: "viewer", subject: SubjectReference.create({ object: testUser, }), @@ -96,23 +96,23 @@ describe('a check with an known namespace', () => { const checkPermissionRequest = CheckPermissionRequest.create({ resource, - permission: 'view', + permission: "view", subject: SubjectReference.create({ object: testUser, }), consistency: Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), }); - it('should succeed', async () => { + it("should succeed", async () => { const { promises: client } = NewClient( - generateTestToken('v1-promise-namespace'), - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + generateTestToken("v1-promise-namespace"), + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const schemaResponse = await client.writeSchema(schemaRequest); @@ -123,52 +123,52 @@ describe('a check with an known namespace', () => { const checkResponse = await client.checkPermission(checkPermissionRequest); expect(checkResponse?.permissionship).toBe( - CheckPermissionResponse_Permissionship.HAS_PERMISSION + CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); client.close(); }); - it('should succeed with full signatures', async () => { + it("should succeed with full signatures", async () => { const { promises: client } = NewClient( - generateTestToken('v1-promise-namespace'), - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + generateTestToken("v1-promise-namespace"), + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const schemaResponse = await client.writeSchema( schemaRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(schemaResponse).toBeTruthy(); const response = await client.writeRelationships( writeRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(response).toBeTruthy(); const checkResponse = await client.checkPermission( checkPermissionRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(checkResponse?.permissionship).toBe( - CheckPermissionResponse_Permissionship.HAS_PERMISSION + CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); client.close(); }); - describe('with caveated relations', () => { - it('should succeed', async () => { + describe("with caveated relations", () => { + it("should succeed", async () => { // Write some schema. const { promises: client } = NewClient( - generateTestToken('v1-promise-caveats'), - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + generateTestToken("v1-promise-caveats"), + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const schemaRequest = WriteSchemaRequest.create({ @@ -189,19 +189,19 @@ describe('a check with an known namespace', () => { const schemaResponse = await client.writeSchema( schemaRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(schemaResponse).toBeTruthy(); // Write a relationship. const resource = ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }); const testUser = ObjectReference.create({ - objectType: 'test/user', - objectId: 'specialuser', + objectType: "test/user", + objectId: "specialuser", }); const writeRequest = WriteRelationshipsRequest.create({ @@ -209,12 +209,12 @@ describe('a check with an known namespace', () => { RelationshipUpdate.create({ relationship: Relationship.create({ resource: resource, - relation: 'caveated_viewer', + relation: "caveated_viewer", subject: SubjectReference.create({ object: testUser, }), optionalCaveat: ContextualizedCaveat.create({ - caveatName: 'has_special_attribute', + caveatName: "has_special_attribute", }), }), operation: RelationshipUpdate_Operation.CREATE, @@ -225,20 +225,20 @@ describe('a check with an known namespace', () => { const response = await client.writeRelationships( writeRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(response).toBeTruthy(); // Call check when user has special attribute. let checkPermissionRequest = CheckPermissionRequest.create({ resource, - permission: 'view', + permission: "view", subject: SubjectReference.create({ object: testUser, }), consistency: Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), @@ -248,22 +248,22 @@ describe('a check with an known namespace', () => { let checkResponse = await client.checkPermission( checkPermissionRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(checkResponse?.permissionship).toBe( - CheckPermissionResponse_Permissionship.HAS_PERMISSION + CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); // Call check when user does not have the special attribute. checkPermissionRequest = CheckPermissionRequest.create({ resource, - permission: 'view', + permission: "view", subject: SubjectReference.create({ object: testUser, }), consistency: Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), @@ -273,22 +273,22 @@ describe('a check with an known namespace', () => { checkResponse = await client.checkPermission( checkPermissionRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(checkResponse?.permissionship).toBe( - CheckPermissionResponse_Permissionship.NO_PERMISSION + CheckPermissionResponse_Permissionship.NO_PERMISSION, ); // Call check when user's special attribute is unspecified. checkPermissionRequest = CheckPermissionRequest.create({ resource, - permission: 'view', + permission: "view", subject: SubjectReference.create({ object: testUser, }), consistency: Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), @@ -298,10 +298,10 @@ describe('a check with an known namespace', () => { checkResponse = await client.checkPermission( checkPermissionRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); expect(checkResponse?.permissionship).toBe( - CheckPermissionResponse_Permissionship.CONDITIONAL_PERMISSION + CheckPermissionResponse_Permissionship.CONDITIONAL_PERMISSION, ); client.close(); @@ -309,19 +309,19 @@ describe('a check with an known namespace', () => { }); }); -describe('Lookup APIs', () => { +describe("Lookup APIs", () => { let token: string; const lookupSubjectRequest = LookupSubjectsRequest.create({ resource: ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }), - permission: 'view', - subjectObjectType: 'test/user', + permission: "view", + subjectObjectType: "test/user", consistency: Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), @@ -330,26 +330,26 @@ describe('Lookup APIs', () => { const lookupResourceRequest = LookupResourcesRequest.create({ subject: SubjectReference.create({ object: ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser', + objectType: "test/user", + objectId: "someuser", }), }), - permission: 'view', - resourceObjectType: 'test/document', + permission: "view", + resourceObjectType: "test/document", consistency: Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), }); beforeEach(async () => { - token = generateTestToken('v1-promise-lookup'); + token = generateTestToken("v1-promise-lookup"); const { promises: client } = NewClient( token, - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const request = WriteSchemaRequest.create({ @@ -365,8 +365,8 @@ describe('Lookup APIs', () => { await client.writeSchema(request); const resource = ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }); const writeRequest = WriteRelationshipsRequest.create({ @@ -374,11 +374,11 @@ describe('Lookup APIs', () => { RelationshipUpdate.create({ relationship: Relationship.create({ resource: resource, - relation: 'viewer', + relation: "viewer", subject: SubjectReference.create({ object: ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser', + objectType: "test/user", + objectId: "someuser", }), }), }), @@ -387,11 +387,11 @@ describe('Lookup APIs', () => { RelationshipUpdate.create({ relationship: Relationship.create({ resource: resource, - relation: 'viewer', + relation: "viewer", subject: SubjectReference.create({ object: ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser2', + objectType: "test/user", + objectId: "someuser2", }), }), }), @@ -404,65 +404,65 @@ describe('Lookup APIs', () => { client.close(); }); - it('can lookup subjects', async () => { + it("can lookup subjects", async () => { const { promises: client } = NewClient( token, - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const result = await client.lookupSubjects(lookupSubjectRequest); - expect(['someuser', 'someuser2']).toContain(result[0].subjectObjectId); + expect(["someuser", "someuser2"]).toContain(result[0].subjectObjectId); client.close(); }); - it('can lookup resources', async () => { + it("can lookup resources", async () => { const { promises: client } = NewClient( token, - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const resStream = await client.lookupResources(lookupResourceRequest); - expect(resStream[0].resourceObjectId).toEqual('somedocument'); + expect(resStream[0].resourceObjectId).toEqual("somedocument"); client.close(); }); - it('can lookup using full signatures', async () => { + it("can lookup using full signatures", async () => { const { promises: client } = NewClient( token, - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const result = await client.lookupSubjects( lookupSubjectRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); - expect(['someuser', 'someuser2']).toContain(result[0].subjectObjectId); + expect(["someuser", "someuser2"]).toContain(result[0].subjectObjectId); const resStream = await client.lookupResources( lookupResourceRequest, new grpc.Metadata(), - {} as grpc.CallOptions + {} as grpc.CallOptions, ); - expect(resStream[0].resourceObjectId).toEqual('somedocument'); + expect(resStream[0].resourceObjectId).toEqual("somedocument"); client.close(); }); }); -describe('Experimental Service', () => { +describe("Experimental Service", () => { let token: string; beforeEach(async () => { - token = generateTestToken('v1-experimental-service'); + token = generateTestToken("v1-experimental-service"); const { promises: client } = NewClient( token, - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const request = WriteSchemaRequest.create({ @@ -479,11 +479,11 @@ describe('Experimental Service', () => { client.close(); }); - it('can bulk import relationships', (done) => { + it("can bulk import relationships", (done) => { const { promises: client } = NewClient( token, - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const writeStream = client.bulkImportRelationships((err, value) => { @@ -491,59 +491,59 @@ describe('Experimental Service', () => { done.fail(err); } - expect(value?.numLoaded).toEqual('2'); + expect(value?.numLoaded).toEqual("2"); client.close(); done(); }); - writeStream.on('error', (e) => { + writeStream.on("error", (e) => { done.fail(e); }); const resource = ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }); writeStream.write( BulkImportRelationshipsRequest.create({ relationships: [ Relationship.create({ resource: resource, - relation: 'viewer', + relation: "viewer", subject: SubjectReference.create({ object: ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser', + objectType: "test/user", + objectId: "someuser", }), }), }), Relationship.create({ resource: resource, - relation: 'viewer', + relation: "viewer", subject: SubjectReference.create({ object: ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser2', + objectType: "test/user", + objectId: "someuser2", }), }), }), ], - }) + }), ); writeStream.end(); }); - it('can bulk export relationships', async () => { + it("can bulk export relationships", async () => { const { promises: client } = NewClient( token, - 'localhost:50051', - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + "localhost:50051", + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const resource = ObjectReference.create({ - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }); const writeRequest = WriteRelationshipsRequest.create({ @@ -551,11 +551,11 @@ describe('Experimental Service', () => { RelationshipUpdate.create({ relationship: Relationship.create({ resource: resource, - relation: 'viewer', + relation: "viewer", subject: SubjectReference.create({ object: ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser', + objectType: "test/user", + objectId: "someuser", }), }), }), @@ -564,11 +564,11 @@ describe('Experimental Service', () => { RelationshipUpdate.create({ relationship: Relationship.create({ resource: resource, - relation: 'viewer', + relation: "viewer", subject: SubjectReference.create({ object: ObjectReference.create({ - objectType: 'test/user', - objectId: 'someuser2', + objectType: "test/user", + objectId: "someuser2", }), }), }), @@ -583,34 +583,34 @@ describe('Experimental Service', () => { BulkExportRelationshipsRequest.create({ consistency: Consistency.create({ requirement: { - oneofKind: 'fullyConsistent', + oneofKind: "fullyConsistent", fullyConsistent: true, }, }), - }) + }), ); expect(resStream[0].relationships).toEqual([ { - relation: 'viewer', + relation: "viewer", resource: { - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }, subject: { - optionalRelation: '', - object: { objectType: 'test/user', objectId: 'someuser' }, + optionalRelation: "", + object: { objectType: "test/user", objectId: "someuser" }, }, }, { - relation: 'viewer', + relation: "viewer", resource: { - objectType: 'test/document', - objectId: 'somedocument', + objectType: "test/document", + objectId: "somedocument", }, subject: { - optionalRelation: '', - object: { objectType: 'test/user', objectId: 'someuser2' }, + optionalRelation: "", + object: { objectType: "test/user", objectId: "someuser2" }, }, }, ]); diff --git a/src/v1.test.ts b/src/v1.test.ts index 3d681a1..12a086b 100644 --- a/src/v1.test.ts +++ b/src/v1.test.ts @@ -4,18 +4,18 @@ import { Struct } from "./authzedapi/google/protobuf/struct"; import { PreconnectServices, deadlineInterceptor } from "./util"; import { BulkExportRelationshipsRequest, - BulkExportRelationshipsResponse, + type BulkExportRelationshipsResponse, BulkImportRelationshipsRequest, CheckPermissionRequest, - CheckPermissionResponse, + type CheckPermissionResponse, CheckPermissionResponse_Permissionship, ClientSecurity, Consistency, ContextualizedCaveat, LookupResourcesRequest, - LookupResourcesResponse, + type LookupResourcesResponse, LookupSubjectsRequest, - LookupSubjectsResponse, + type LookupSubjectsResponse, NewClient, ObjectReference, Relationship, @@ -23,7 +23,7 @@ import { RelationshipUpdate_Operation, SubjectReference, WriteRelationshipsRequest, - WriteRelationshipsResponse, + type WriteRelationshipsResponse, WriteSchemaRequest, } from "./v1"; @@ -50,9 +50,9 @@ describe("a check with an unknown namespace", () => { const client = NewClient( generateTestToken("v1-test-unknown"), "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); - client.checkPermission(checkPermissionRequest, function (err, response) { + client.checkPermission(checkPermissionRequest, (err, response) => { expect(response).toBe(undefined); expect(err?.code).toBe(grpc.status.FAILED_PRECONDITION); client.close(); @@ -68,7 +68,8 @@ describe("a check with an known namespace", () => { generateTestToken("v1-namespace"), "localhost:50051", ClientSecurity.INSECURE_LOCALHOST_ALLOWED, - PreconnectServices.PERMISSIONS_SERVICE | PreconnectServices.SCHEMA_SERVICE + PreconnectServices.PERMISSIONS_SERVICE | + PreconnectServices.SCHEMA_SERVICE, ); const request = WriteSchemaRequest.create({ @@ -82,7 +83,7 @@ describe("a check with an known namespace", () => { }); new Promise((resolve) => { - client.writeSchema(request, function (err, response) { + client.writeSchema(request, (err, response) => { expect(err).toBe(null); resolve(response); }); @@ -117,7 +118,7 @@ describe("a check with an known namespace", () => { ], }); - client.writeRelationships(writeRequest, function (err, response) { + client.writeRelationships(writeRequest, (err, response) => { expect(err).toBe(null); resolve({ response, resource, testUser }); }); @@ -147,19 +148,16 @@ describe("a check with an known namespace", () => { }), }); - client.checkPermission( - checkPermissionRequest, - function (err, response) { - expect(err).toBe(null); - resolve(response); - } - ); + client.checkPermission(checkPermissionRequest, (err, response) => { + expect(err).toBe(null); + resolve(response); + }); }); }) .then((response) => { const checkResponse = response as CheckPermissionResponse; expect(checkResponse?.permissionship).toBe( - CheckPermissionResponse_Permissionship.HAS_PERMISSION + CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); client.close(); @@ -173,7 +171,7 @@ describe("a check with an known namespace", () => { const client = NewClient( generateTestToken("v1-namespace-caveats"), "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const request = WriteSchemaRequest.create({ @@ -192,7 +190,7 @@ describe("a check with an known namespace", () => { }); new Promise((resolve) => { - client.writeSchema(request, function (err, response) { + client.writeSchema(request, (err, response) => { expect(err).toBe(null); resolve(response); }); @@ -230,7 +228,7 @@ describe("a check with an known namespace", () => { ], }); - client.writeRelationships(writeRequest, function (err, response) { + client.writeRelationships(writeRequest, (err, response) => { expect(err).toBe(null); resolve({ response, resource, testUser }); }); @@ -261,19 +259,16 @@ describe("a check with an known namespace", () => { context: Struct.fromJson({ special: true }), }); - client.checkPermission( - checkPermissionRequest, - function (err, response) { - expect(err).toBe(null); - resolve(response); - } - ); + client.checkPermission(checkPermissionRequest, (err, response) => { + expect(err).toBe(null); + resolve(response); + }); }); }) .then((response) => { const checkResponse = response as CheckPermissionResponse; expect(checkResponse?.permissionship).toBe( - CheckPermissionResponse_Permissionship.HAS_PERMISSION + CheckPermissionResponse_Permissionship.HAS_PERMISSION, ); client.close(); @@ -291,7 +286,7 @@ describe("Lookup APIs", () => { const client = NewClient( token, "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const request = WriteSchemaRequest.create({ @@ -340,10 +335,10 @@ describe("Lookup APIs", () => { ], }); - client.writeSchema(request, function (err) { + client.writeSchema(request, (err) => { expect(err).toBe(null); - client.writeRelationships(writeRequest, function (err) { + client.writeRelationships(writeRequest, (err) => { expect(err).toBe(null); done(); }); @@ -354,7 +349,7 @@ describe("Lookup APIs", () => { const client = NewClient( token, "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const request = LookupSubjectsRequest.create({ @@ -374,21 +369,21 @@ describe("Lookup APIs", () => { const resStream = client.lookupSubjects(request); - resStream.on("data", function (subject: LookupSubjectsResponse) { + resStream.on("data", (subject: LookupSubjectsResponse) => { expect(["someuser", "someuser2"]).toContain(subject.subjectObjectId); }); - resStream.on("end", function () { + resStream.on("end", () => { client.close(); done(); }); - resStream.on("error", function (e) { + resStream.on("error", (e) => { client.close(); done.fail(e); }); - resStream.on("status", function (status) { + resStream.on("status", (status) => { expect(status.code).toEqual(grpc.status.OK); }); }); @@ -397,7 +392,7 @@ describe("Lookup APIs", () => { const client = NewClient( token, "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const request = LookupResourcesRequest.create({ @@ -419,21 +414,21 @@ describe("Lookup APIs", () => { const resStream = client.lookupResources(request); - resStream.on("data", function (response: LookupResourcesResponse) { + resStream.on("data", (response: LookupResourcesResponse) => { expect(response.resourceObjectId).toEqual("somedocument"); }); - resStream.on("end", function () { + resStream.on("end", () => { client.close(); done(); }); - resStream.on("error", function (e) { + resStream.on("error", (e) => { client.close(); done.fail(e); }); - resStream.on("status", function (status) { + resStream.on("status", (status) => { expect(status.code).toEqual(grpc.status.OK); }); }); @@ -466,9 +461,9 @@ describe("a check with a negative timeout", () => { PreconnectServices.NONE, { interceptors: [deadlineInterceptor(-100)], - } + }, ); - client.checkPermission(checkPermissionRequest, function (err, response) { + client.checkPermission(checkPermissionRequest, (err, response) => { expect(response).toBe(undefined); expect(err?.code).toBe(grpc.status.DEADLINE_EXCEEDED); client.close(); @@ -485,7 +480,7 @@ describe("Experimental Service", () => { const client = NewClient( token, "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const request = WriteSchemaRequest.create({ @@ -498,7 +493,7 @@ describe("Experimental Service", () => { `, }); - client.writeSchema(request, function (err) { + client.writeSchema(request, (err) => { expect(err).toBe(null); client.close(); done(); @@ -509,7 +504,7 @@ describe("Experimental Service", () => { const client = NewClient( token, "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const writeStream = client.bulkImportRelationships((err, value) => { @@ -555,7 +550,7 @@ describe("Experimental Service", () => { }), }), ], - }) + }), ); writeStream.end(); @@ -565,7 +560,7 @@ describe("Experimental Service", () => { const client = NewClient( token, "localhost:50051", - ClientSecurity.INSECURE_LOCALHOST_ALLOWED + ClientSecurity.INSECURE_LOCALHOST_ALLOWED, ); const resource = ObjectReference.create({ @@ -604,7 +599,7 @@ describe("Experimental Service", () => { ], }); - client.writeRelationships(writeRequest, function (err) { + client.writeRelationships(writeRequest, (err) => { expect(err).toBe(null); const resStream = client.bulkExportRelationships( @@ -615,50 +610,53 @@ describe("Experimental Service", () => { fullyConsistent: true, }, }), - }) + }), ); - resStream.on( - "data", - function (response: BulkExportRelationshipsResponse) { - expect(response.relationships).toEqual([ - { - relation: "viewer", - resource: { - objectType: "test/document", - objectId: "somedocument", - }, - subject: { - optionalRelation: "", - object: { objectType: "test/user", objectId: "someuser" }, - }, + resStream.on("data", (response: BulkExportRelationshipsResponse) => { + expect(response.relationships).toEqual([ + { + relation: "viewer", + resource: { + objectType: "test/document", + objectId: "somedocument", }, - { - relation: "viewer", - resource: { - objectType: "test/document", - objectId: "somedocument", + subject: { + optionalRelation: "", + object: { + objectType: "test/user", + objectId: "someuser", }, - subject: { - optionalRelation: "", - object: { objectType: "test/user", objectId: "someuser2" }, + }, + }, + { + relation: "viewer", + resource: { + objectType: "test/document", + objectId: "somedocument", + }, + subject: { + optionalRelation: "", + object: { + objectType: "test/user", + objectId: "someuser2", }, }, - ]); - } - ); + }, + ]); + }); - resStream.on("end", function () { + resStream.on("end", () => { client.close(); done(); }); - resStream.on("error", function (e) { + resStream.on("error", (e) => { client.close(); done.fail(e); }); - resStream.on("status", function (status) { + resStream.on("status", (status) => { expect(status.code).toEqual(grpc.status.OK); }); }); diff --git a/src/v1.ts b/src/v1.ts index 02b65bd..6b25b59 100644 --- a/src/v1.ts +++ b/src/v1.ts @@ -1,22 +1,19 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -"use strict"; - import { promisify } from "util"; -import * as grpc from "@grpc/grpc-js"; -import { ExperimentalServiceClient } from './authzedapi/authzed/api/v1/experimental_service.grpc-client'; -import { PermissionsServiceClient } from './authzedapi/authzed/api/v1/permission_service.grpc-client'; -import { SchemaServiceClient } from './authzedapi/authzed/api/v1/schema_service.grpc-client'; -import { WatchServiceClient } from './authzedapi/authzed/api/v1/watch_service.grpc-client'; -import * as util from './util'; +import type * as grpc from "@grpc/grpc-js"; +import { ExperimentalServiceClient } from "./authzedapi/authzed/api/v1/experimental_service.grpc-client"; +import { PermissionsServiceClient } from "./authzedapi/authzed/api/v1/permission_service.grpc-client"; +import { SchemaServiceClient } from "./authzedapi/authzed/api/v1/schema_service.grpc-client"; +import { WatchServiceClient } from "./authzedapi/authzed/api/v1/watch_service.grpc-client"; +import * as util from "./util"; import { ClientSecurity, PreconnectServices, deadlineInterceptor, promisifyStream, -} from './util'; +} from "./util"; -import type { OmitBaseMethods, PromisifiedClient } from './types'; +import type { OmitBaseMethods, PromisifiedClient } from "./types"; // A merge of the three generated gRPC clients, with their base methods omitted export type ZedDefaultClientInterface = OmitBaseMethods< @@ -26,7 +23,7 @@ export type ZedDefaultClientInterface = OmitBaseMethods< OmitBaseMethods & OmitBaseMethods & OmitBaseMethods & - Pick; + Pick; // The promisified version of the interface export type ZedPromiseClientInterface = @@ -34,7 +31,7 @@ export type ZedPromiseClientInterface = PromisifiedClient & PromisifiedClient & PromisifiedClient & - Pick; + Pick; // A combined client containing the root gRPC client methods and a promisified set at a "promises" key export type ZedClientInterface = ZedDefaultClientInterface & { @@ -58,7 +55,7 @@ class ZedClient implements ProxyHandler { private endpoint: string, private creds: grpc.ChannelCredentials, preconnect: PreconnectServices, - options: grpc.ClientOptions | undefined + options: grpc.ClientOptions | undefined, ) { this.options = { ...(options ?? {}), @@ -75,7 +72,7 @@ class ZedClient implements ProxyHandler { this.acl = new PermissionsServiceClient( this.endpoint, this.creds, - options + options, ); } if (preconnect & PreconnectServices.SCHEMA_SERVICE) { @@ -88,7 +85,7 @@ class ZedClient implements ProxyHandler { this.experimental = new ExperimentalServiceClient( this.endpoint, this.creds, - options + options, ); } } @@ -97,34 +94,34 @@ class ZedClient implements ProxyHandler { endpoint: string, creds: grpc.ChannelCredentials, preconnect: PreconnectServices, - options: grpc.ClientOptions | undefined + options: grpc.ClientOptions | undefined, ) { return new Proxy( {} as any, - new ZedClient(endpoint, creds, preconnect, options) + new ZedClient(endpoint, creds, preconnect, options), ); } close = () => { [this.acl, this.ns, this.watch, this.experimental].forEach((client) => - client?.close() + client?.close(), ); }; get(_target: object, name: string | symbol) { - if (name === 'close') { + if (name === "close") { return this.close; } // If the name is a symbol, pass it to the underlying gRPC code. // NOTE: it doesn't really matter to which client we give symbols, so just // pick ACL by default since its the most likely be used. - if (typeof name === 'symbol') { + if (typeof name === "symbol") { if (this.acl === undefined) { this.acl = new PermissionsServiceClient( this.endpoint, this.creds, - this.options + this.options, ); } @@ -137,7 +134,7 @@ class ZedClient implements ProxyHandler { this.acl = new PermissionsServiceClient( this.endpoint, this.creds, - this.options + this.options, ); } @@ -149,7 +146,7 @@ class ZedClient implements ProxyHandler { this.ns = new SchemaServiceClient( this.endpoint, this.creds, - this.options + this.options, ); } @@ -161,7 +158,7 @@ class ZedClient implements ProxyHandler { this.watch = new WatchServiceClient( this.endpoint, this.creds, - this.options + this.options, ); } @@ -173,7 +170,7 @@ class ZedClient implements ProxyHandler { this.experimental = new ExperimentalServiceClient( this.endpoint, this.creds, - this.options + this.options, ); } @@ -197,12 +194,12 @@ class ZedPromiseClient implements ProxyHandler { private client: ZedDefaultClientInterface; private promiseCache: Record = {}; private streamMethods = new Set([ - 'readRelationships', - 'lookupResources', - 'lookupSubjects', - 'bulkExportRelationships', + "readRelationships", + "lookupResources", + "lookupSubjects", + "bulkExportRelationships", ]); - private writableStreamMethods = new Set(['bulkImportRelationships']); + private writableStreamMethods = new Set(["bulkImportRelationships"]); constructor(client: ZedDefaultClientInterface) { this.client = client; @@ -219,13 +216,13 @@ class ZedPromiseClient implements ProxyHandler { if (this.streamMethods.has(name as string)) { this.promiseCache[name as string] = promisifyStream( clientMethod, - this.client + this.client, ); } else if (this.writableStreamMethods.has(name as string)) { this.promiseCache[name as string] = clientMethod.bind(this.client); - } else if (typeof clientMethod === 'function') { + } else if (typeof clientMethod === "function") { this.promiseCache[name as string] = promisify( - (this.client as any)[name as string] + (this.client as any)[name as string], ).bind(this.client); } else { return clientMethod; @@ -250,7 +247,7 @@ class ZedCombinedClient implements ProxyHandler { constructor( client: ZedDefaultClientInterface, - promiseClient: ZedPromiseClientInterface + promiseClient: ZedPromiseClientInterface, ) { this.client = client; this.promiseClient = promiseClient; @@ -260,7 +257,7 @@ class ZedCombinedClient implements ProxyHandler { endpoint: string, creds: grpc.ChannelCredentials, preconnect: util.PreconnectServices, - options: grpc.ClientOptions | undefined + options: grpc.ClientOptions | undefined, ) { const client = ZedClient.create(endpoint, creds, preconnect, options); const promiseClient = ZedPromiseClient.create(client); @@ -268,7 +265,7 @@ class ZedCombinedClient implements ProxyHandler { } get(_target: object, name: string | symbol) { - if (name === 'promises') { + if (name === "promises") { return this.promiseClient; } @@ -290,7 +287,7 @@ export function NewClient( endpoint = util.authzedEndpoint, security: ClientSecurity = ClientSecurity.SECURE, preconnect: PreconnectServices = PreconnectServices.PERMISSIONS_SERVICE, - options: grpc.ClientOptions | undefined = undefined + options: grpc.ClientOptions | undefined = undefined, ) { const creds = util.createClientCreds(endpoint, token, security); return NewClientWithChannelCredentials(endpoint, creds, preconnect, options); @@ -310,7 +307,7 @@ export function NewClientWithCustomCert( endpoint = util.authzedEndpoint, certificate: Buffer, preconnect: PreconnectServices = PreconnectServices.PERMISSIONS_SERVICE, - options: grpc.ClientOptions | undefined = undefined + options: grpc.ClientOptions | undefined = undefined, ) { const creds = util.createClientCredsWithCustomCert(token, certificate); return NewClientWithChannelCredentials(endpoint, creds, preconnect, options); @@ -336,20 +333,20 @@ export function NewClientWithChannelCredentials( endpoint = util.authzedEndpoint, creds: grpc.ChannelCredentials, preconnect: PreconnectServices = PreconnectServices.PERMISSIONS_SERVICE, - options: grpc.ClientOptions | undefined = undefined + options: grpc.ClientOptions | undefined = undefined, ): ZedClientInterface { return ZedCombinedClient.create(endpoint, creds, preconnect, options); } -export * from './authzedapi/authzed/api/v1/core'; -export * from './authzedapi/authzed/api/v1/experimental_service'; -export * from './authzedapi/authzed/api/v1/experimental_service.grpc-client'; -export * from './authzedapi/authzed/api/v1/permission_service'; -export * from './authzedapi/authzed/api/v1/permission_service.grpc-client'; -export * from './authzedapi/authzed/api/v1/schema_service'; -export * from './authzedapi/authzed/api/v1/schema_service.grpc-client'; -export * from './authzedapi/authzed/api/v1/watch_service'; -export * from './authzedapi/authzed/api/v1/watch_service.grpc-client'; +export * from "./authzedapi/authzed/api/v1/core"; +export * from "./authzedapi/authzed/api/v1/experimental_service"; +export * from "./authzedapi/authzed/api/v1/experimental_service.grpc-client"; +export * from "./authzedapi/authzed/api/v1/permission_service"; +export * from "./authzedapi/authzed/api/v1/permission_service.grpc-client"; +export * from "./authzedapi/authzed/api/v1/schema_service"; +export * from "./authzedapi/authzed/api/v1/schema_service.grpc-client"; +export * from "./authzedapi/authzed/api/v1/watch_service"; +export * from "./authzedapi/authzed/api/v1/watch_service.grpc-client"; export { ClientSecurity } from "./util"; export default { diff --git a/yarn.lock b/yarn.lock index 3725194..5b38d48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@babel/code-frame@^7.12.13": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" @@ -30,6 +25,60 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@biomejs/biome@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.8.3.tgz#3b5eecea90d973f71618aae3e6e8be4d2ca23e42" + integrity sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w== + optionalDependencies: + "@biomejs/cli-darwin-arm64" "1.8.3" + "@biomejs/cli-darwin-x64" "1.8.3" + "@biomejs/cli-linux-arm64" "1.8.3" + "@biomejs/cli-linux-arm64-musl" "1.8.3" + "@biomejs/cli-linux-x64" "1.8.3" + "@biomejs/cli-linux-x64-musl" "1.8.3" + "@biomejs/cli-win32-arm64" "1.8.3" + "@biomejs/cli-win32-x64" "1.8.3" + +"@biomejs/cli-darwin-arm64@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.8.3.tgz#be2bfdd445cd2d3cb0ff41a96a72ec761753997c" + integrity sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A== + +"@biomejs/cli-darwin-x64@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.8.3.tgz#47d408edd9f5c04069fbcf8610bacf1db8c6c0d9" + integrity sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw== + +"@biomejs/cli-linux-arm64-musl@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.8.3.tgz#44df284383d57cf4f28daeedd080dad7be05df78" + integrity sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ== + +"@biomejs/cli-linux-arm64@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.8.3.tgz#6a6b1da1dfce0294a028cbb5d6c40d73691dd713" + integrity sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw== + +"@biomejs/cli-linux-x64-musl@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.8.3.tgz#ceef30a8ee1a00d4ad31e32dd31ba2a661f2719d" + integrity sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA== + +"@biomejs/cli-linux-x64@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.8.3.tgz#665df74d19fb8f83001a9d80824d3a1723e2123f" + integrity sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw== + +"@biomejs/cli-win32-arm64@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.8.3.tgz#0fb6f58990f4de0331a6ed22c47c66f5a89133cc" + integrity sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ== + +"@biomejs/cli-win32-x64@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.8.3.tgz#6a9dc5a4e13357277da43c015cd5cdc374035448" + integrity sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg== + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -37,52 +86,6 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== - -"@eslint/config-array@^0.17.1": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.17.1.tgz#d9b8b8b6b946f47388f32bedfd3adf29ca8f8910" - integrity sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA== - dependencies: - "@eslint/object-schema" "^2.1.4" - debug "^4.3.1" - minimatch "^3.1.2" - -"@eslint/eslintrc@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" - integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@9.9.0", "@eslint/js@^9.9.0": - version "9.9.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.0.tgz#d8437adda50b3ed4401964517b64b4f59b0e2638" - integrity sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug== - -"@eslint/object-schema@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" - integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== - "@grpc/grpc-js@^1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.11.1.tgz#a92f33e98f1959feffcd1b25a33b113d2c977b70" @@ -101,16 +104,6 @@ protobufjs "^7.2.5" yargs "^17.7.2" -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/retry@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570" - integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -187,27 +180,6 @@ semver "^7.3.5" tar "^6.1.11" -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -388,107 +360,16 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz#3c020deeaaba82a6f741d00dacf172c53be4911f" - integrity sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/type-utils" "8.1.0" - "@typescript-eslint/utils" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/parser@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.1.0.tgz#b7e77f5fa212df59eba51ecd4986f194bccc2303" - integrity sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA== - dependencies: - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/typescript-estree" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz#dd8987d2efebb71d230a1c71d82e84a7aead5c3d" - integrity sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ== - dependencies: - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" - -"@typescript-eslint/type-utils@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz#dbf5a4308166dfc37a36305390dea04a3a3b5048" - integrity sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA== - dependencies: - "@typescript-eslint/typescript-estree" "8.1.0" - "@typescript-eslint/utils" "8.1.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" - -"@typescript-eslint/types@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.1.0.tgz#fbf1eaa668a7e444ac507732ca9d3c3468e5db9c" - integrity sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog== - -"@typescript-eslint/typescript-estree@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz#c44e5667683c0bb5caa43192e27de6a994f4e4c4" - integrity sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg== - dependencies: - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/utils@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.1.0.tgz#a922985a43d2560ce0d293be79148fa80c1325e0" - integrity sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/typescript-estree" "8.1.0" - -"@typescript-eslint/visitor-keys@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz#ab2b3a9699a8ddebf0c205e133f114c1fed9daad" - integrity sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag== - dependencies: - "@typescript-eslint/types" "8.1.0" - eslint-visitor-keys "^3.4.3" - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.12.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - acorn@^8.4.1: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" @@ -501,16 +382,6 @@ agent-base@6: dependencies: debug "4" -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -563,16 +434,6 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -600,11 +461,6 @@ braces@^3.0.2: dependencies: fill-range "^7.1.1" -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -685,7 +541,7 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -694,18 +550,13 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -726,13 +577,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -763,102 +607,6 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.2.tgz#5cbb33d4384c9136083a71190d548158fe128f94" - integrity sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-visitor-keys@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" - integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== - -eslint@^9.9.0: - version "9.9.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.0.tgz#8d214e69ae4debeca7ae97daebbefe462072d975" - integrity sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.11.0" - "@eslint/config-array" "^0.17.1" - "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.9.0" - "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.3.0" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - escape-string-regexp "^4.0.0" - eslint-scope "^8.0.2" - eslint-visitor-keys "^4.0.0" - espree "^10.1.0" - esquery "^1.5.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^8.0.0" - find-up "^5.0.0" - glob-parent "^6.0.2" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^10.0.1, espree@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.1.0.tgz#8788dae611574c0f070691f522e4116c5a11fc56" - integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA== - dependencies: - acorn "^8.12.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.0.0" - -esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - expect@^29.0.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" @@ -870,46 +618,6 @@ expect@^29.0.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" - integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== - dependencies: - flat-cache "^4.0.0" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -917,27 +625,6 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" - integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.4" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -978,20 +665,6 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - glob@^10.2.2: version "10.3.12" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" @@ -1015,23 +688,6 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - google-protobuf@^3.21.4: version "3.21.4" resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" @@ -1042,11 +698,6 @@ graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - grpc-tools@^1.11.2: version "1.12.4" resolved "https://registry.yarnpkg.com/grpc-tools/-/grpc-tools-1.12.4.tgz#a044c9e8157941033ea7a5f144c2dc9dc4501de4" @@ -1077,24 +728,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1108,33 +741,16 @@ inherits@2, inherits@^2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -1219,60 +835,11 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - long@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f" @@ -1295,11 +862,6 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -1308,14 +870,14 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.1, minimatch@^9.0.4: +minimatch@^9.0.1: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -1357,11 +919,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - node-fetch@^2.6.7: version "2.6.9" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" @@ -1398,44 +955,6 @@ once@^1.3.0: dependencies: wrappy "1" -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -1454,11 +973,6 @@ path-scurry@^1.10.2: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -1469,11 +983,6 @@ picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -1501,16 +1010,6 @@ protobufjs@^7.2.5: "@types/node" ">=13.7.0" long "^5.0.0" -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" @@ -1530,16 +1029,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -1547,13 +1036,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -1569,11 +1051,6 @@ semver@^7.3.5: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== -semver@^7.6.0: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -1613,16 +1090,7 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -1647,14 +1115,7 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -1668,11 +1129,6 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1699,11 +1155,6 @@ tar@^6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -1716,11 +1167,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - ts-node@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" @@ -1740,13 +1186,6 @@ ts-node@^10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - typescript@^3.9: version "3.9.10" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" @@ -1762,13 +1201,6 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -1806,16 +1238,7 @@ wide-align@^1.1.2: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -1870,8 +1293,3 @@ yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==