diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..57e4d83
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,48 @@
+module.exports = {
+ env: { browser: true, node: true },
+ root: true,
+ parser: "@typescript-eslint/parser",
+ plugins: [
+ "@typescript-eslint",
+ "import",
+ "simple-import-sort",
+ "unused-imports",
+ ],
+ extends: [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/recommended",
+ "prettier/@typescript-eslint", // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
+ ],
+ rules: {
+ "import/order": 0, // turn off in favor of eslint-plugin-simple-import-sort
+ "import/no-unresolved": 0,
+ "import/no-duplicates": 1,
+
+ /**
+ * eslint-plugin-simple-import-sort @see https://github.com/lydell/eslint-plugin-simple-import-sort
+ */
+ "sort-imports": 0, // we use eslint-plugin-import instead
+ "simple-import-sort/imports": 1,
+ "simple-import-sort/exports": 1,
+
+ /**
+ * @typescript-eslint/eslint-plugin @see https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin
+ */
+ "@typescript-eslint/no-namespace": "off",
+ "@typescript-eslint/explicit-module-boundary-types": "off",
+ "@typescript-eslint/no-explicit-any": "off",
+ "@typescript-eslint/ban-types": "off",
+ "@typescript-eslint/no-unused-vars": "off",
+ "@typescript-eslint/no-empty-function": "off",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "@typescript-eslint/no-non-null-assertion": "off",
+ "@typescript-eslint/no-empty-interface": "off",
+ /**
+ * ESLint core rules @see https://eslint.org/docs/rules/
+ */
+ "no-case-declarations": "off",
+ "no-empty": "off",
+ "no-useless-escape": "off",
+ "no-control-regex": "off",
+ },
+};
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yaml
similarity index 54%
rename from .github/workflows/ci.yml
rename to .github/workflows/ci.yaml
index 155a17b..4be3f94 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yaml
@@ -8,14 +8,12 @@ jobs:
steps:
- uses: actions/checkout@v2
- - uses: actions/setup-node@v1
+ - uses: actions/setup-node@v2
with:
- node-version: 12.x
+ node-version: 14.x
- uses: denolib/setup-deno@v2
with:
deno-version: v1.4.6
- - run: npm ci
- - run: npm run build
- - run: npm run test
- - run: npm run deno_build
- - run: npm run deno_test
\ No newline at end of file
+ - run: yarn install
+ - run: yarn build
+ - run: yarn test
\ No newline at end of file
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
new file mode 100644
index 0000000..ddce823
--- /dev/null
+++ b/.github/workflows/test.yaml
@@ -0,0 +1,65 @@
+name: Test and Lint
+
+on:
+ push:
+ create:
+ pull_request:
+ schedule:
+ - cron: '44 4 * * SAT'
+ workflow_dispatch:
+
+jobs:
+ test-node:
+ runs-on: Ubuntu-20.04
+ strategy:
+ matrix:
+ node: [ '14' ]
+ typescript: [ '4.1', '4.2' ]
+ name: Test with TypeScript ${{ matrix.typescript }} on Node ${{ matrix.node }}
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node }}
+ - run: yarn install
+ - run: yarn add typescript@${{ matrix.typescript }}
+ - run: yarn build
+ - run: yarn test
+
+ test-deno:
+ runs-on: Ubuntu-20.04
+ strategy:
+ matrix:
+ deno: [ "v1.8.1", "v1.x" ]
+ name: Test with Deno ${{ matrix.deno }}
+ steps:
+ - uses: actions/checkout@v2
+ - uses: denolib/setup-deno@v2
+ with:
+ deno-version: ${{ matrix.deno }}
+ - run: deno --version
+ - run: deno test
+ working-directory: ./deno/lib
+ - run: deno run ./index.ts
+ working-directory: ./deno/lib
+ - run: deno run ./mod.ts
+ working-directory: ./deno/lib
+ - run: |
+ deno bundle ./mod.ts ./bundle.js
+ deno run ./bundle.js
+ working-directory: ./deno/lib
+
+ lint:
+ runs-on: Ubuntu-20.04
+ strategy:
+ matrix:
+ node: [ '14' ]
+ name: Lint on Node ${{ matrix.node }}
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node }}
+ - run: yarn install
+ - run: yarn check:format
+ - run: yarn check:lint
diff --git a/README.md b/README.md
index c5d401c..2693614 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
+
+
+
# Zod-endpoints
Contract first strictly typed endpoints. By defining endpoints as a zod schema, all the requests and responses can be checked and parsed at runtime. Moreover, the TypeScript compiler can check the in- and output types of the endpoints.
diff --git a/coverage.svg b/coverage.svg
new file mode 100644
index 0000000..842d114
--- /dev/null
+++ b/coverage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deno/build.mjs b/deno/build.mjs
new file mode 100644
index 0000000..34de5a8
--- /dev/null
+++ b/deno/build.mjs
@@ -0,0 +1,88 @@
+// This script expects to be run via `yarn build:deno`.
+//
+// Although this script generates code for use in Deno, this script itself is
+// written for Node so that contributors do not need to install Deno to build.
+//
+// @ts-check
+
+import {
+ mkdirSync,
+ readdirSync,
+ readFileSync,
+ statSync,
+ writeFileSync,
+} from "fs";
+import { dirname } from "path";
+
+// Node's path.join() normalize explicitly-relative paths like "./index.ts" to
+// paths like "index.ts" which don't work as relative ES imports, so we do this.
+const join = (/** @type string[] */ ...parts) => parts.join("/");
+
+const projectRoot = process.cwd();
+const nodeSrcRoot = join(projectRoot, "src");
+const denoLibRoot = join(projectRoot, "deno", "lib");
+
+const walkAndBuild = (/** @type string */ dir) => {
+ for (const entry of readdirSync(join(nodeSrcRoot, dir), {
+ withFileTypes: true,
+ encoding: "utf-8",
+ })) {
+ if (entry.isDirectory()) {
+ walkAndBuild(join(dir, entry.name));
+ } else if (entry.isFile() && entry.name.endsWith(".ts")) {
+ const nodePath = join(nodeSrcRoot, dir, entry.name);
+ const denoPath = join(denoLibRoot, dir, entry.name);
+
+ const nodeSource = readFileSync(nodePath, { encoding: "utf-8" });
+
+ const denoSource = nodeSource.replace(
+ /^(?:import|export)[\s\S]*?from\s*['"]([^'"]*)['"];$/gm,
+ (line, target) => {
+ if (target === "@jest/globals") {
+ return `import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";\nconst test = Deno.test;`;
+ }
+
+ if (target === "zod") {
+ return `export * from "https://raw.githubusercontent.com/colinhacks/zod/master/deno/lib/mod.ts";`;
+ }
+
+ const targetNodePath = join(dirname(nodePath), target);
+ const targetNodePathIfFile = targetNodePath + ".ts";
+ const targetNodePathIfDir = join(targetNodePath, "index.ts");
+ try {
+
+ if (statSync(targetNodePathIfFile)?.isFile()) {
+ return line.replace(target, target + ".ts");
+ }
+ } catch (error) {
+ if (error?.code !== "ENOENT") {
+ throw error;
+ }
+ }
+
+ try {
+ if (statSync(targetNodePathIfDir)?.isFile()) {
+ return line.replace(target, join(target, "index.ts"));
+ }
+ } catch (error) {
+ if (error?.code !== "ENOENT") {
+ throw error;
+ }
+ }
+
+ console.warn(`Skipping non-resolvable import:\n ${line}`);
+ return line;
+ }
+ );
+
+ mkdirSync(dirname(denoPath), { recursive: true });
+ writeFileSync(denoPath, denoSource, { encoding: "utf-8" });
+ }
+ }
+};
+
+walkAndBuild("");
+
+writeFileSync(join(denoLibRoot, "mod.ts"), `export * from "./index.ts";\n`, {
+ encoding: "utf-8",
+});
\ No newline at end of file
diff --git a/deno/lib/__tests__/match.test.ts b/deno/lib/__tests__/match.test.ts
new file mode 100644
index 0000000..93786f4
--- /dev/null
+++ b/deno/lib/__tests__/match.test.ts
@@ -0,0 +1,71 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import * as z from "../index.ts";
+
+test("match requset", () => {
+ const a = z.endpoint({
+ name: "A",
+ method: "GET",
+ path: [z.literal("a")],
+ query: {
+ next: z.parameter(z.string()),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ });
+
+ const b = z.endpoint({
+ name: "B",
+ method: "POST",
+ path: [z.literal("b")],
+ query: {
+ next: z.parameter(z.string().optional()),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ body: [
+ z.body({
+ type: "application/json",
+ content: z.object({
+ b: z.string(),
+ }),
+ }),
+ z.body({
+ type: "plain/text",
+ content: z.object({
+ c: z.string(),
+ }),
+ }),
+ ],
+ }),
+ ],
+ });
+ const schema = z.union([a, b]);
+
+ const reqA: z.MatchRequest = {
+ method: "GET",
+ path: ["a"],
+ query: {
+ next: "a",
+ },
+ headers: {},
+ };
+
+ const reqB: z.MatchRequest = {
+ method: "POST",
+ path: ["b"],
+ query: {
+ next: undefined,
+ },
+ headers: {},
+ };
+
+ expect(z.matchRequest(schema, reqA)).toEqual(a);
+ expect(z.matchRequest(schema, reqB)).toEqual(b);
+});
diff --git a/deno/lib/__tests__/param.test.ts b/deno/lib/__tests__/param.test.ts
new file mode 100644
index 0000000..750bf55
--- /dev/null
+++ b/deno/lib/__tests__/param.test.ts
@@ -0,0 +1,43 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import * as z from "../index.ts";
+
+test("parameter with number", () => {
+ const n = z
+ .parameter(z.number().max(100))
+ .name("limit")
+ .description("How many items to return at one time (max 100)");
+
+ expect(n.parse(50)).toEqual(50);
+
+ try {
+ n.parse(400);
+ } catch (err) {
+ const zerr: z.ZodError = err;
+ expect(zerr.issues[0].code).toEqual(z.ZodIssueCode.too_big);
+ expect(zerr.issues[0].message).toEqual(
+ `Value should be less than or equal to 100`
+ );
+ }
+});
+
+test("parameter with string", () => {
+ const s = z
+ .parameter(z.string().max(7))
+ .name("limit")
+ .description("How many items to return at one time (max 100)");
+
+ expect(s.parse("123456")).toEqual("123456");
+
+ try {
+ s.parse("12345678");
+ } catch (err) {
+ const zerr: z.ZodError = err;
+ expect(zerr.issues[0].code).toEqual(z.ZodIssueCode.too_big);
+ expect(zerr.issues[0].message).toEqual(
+ `Should be at most 7 characters long`
+ );
+ }
+});
diff --git a/deno/lib/__tests__/parse.test.ts b/deno/lib/__tests__/parse.test.ts
new file mode 100644
index 0000000..735d2a6
--- /dev/null
+++ b/deno/lib/__tests__/parse.test.ts
@@ -0,0 +1,30 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import * as z from "../index.ts";
+
+test("parse bigint", () => {
+ const bigint = z.bigint();
+ const res = bigint.parse(BigInt(2));
+ expect(res).toEqual(BigInt(2));
+});
+
+test("parse pet", () => {
+ const Pet = z.object({
+ id: z.bigint(),
+ name: z.string(),
+ tag: z.string().optional(),
+ });
+ const Pets = z.array(z.reference("Pet", Pet));
+
+ const arr = [
+ { id: BigInt(0), name: "a", tag: "Test" },
+ { id: BigInt(1), name: "b", tag: "Test" },
+ ];
+
+ expect(Pets.parse(arr)).toEqual([
+ { id: BigInt(0), name: "a", tag: "Test" },
+ { id: BigInt(1), name: "b", tag: "Test" },
+ ]);
+});
diff --git a/deno/lib/__tests__/pets_endpoints.test.ts b/deno/lib/__tests__/pets_endpoints.test.ts
new file mode 100644
index 0000000..7ca6fb1
--- /dev/null
+++ b/deno/lib/__tests__/pets_endpoints.test.ts
@@ -0,0 +1,190 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import petApi from "../data/petstore.ts";
+import * as z from "../index.ts";
+import { openApi } from "../openapi.ts";
+
+const Error = z.object({
+ code: z.integer(),
+ message: z.string(),
+});
+
+const Pet = z.object({
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
+});
+
+const Pets = z.array(z.reference("Pet", Pet));
+
+const schema = z.endpoints([
+ z.endpoint({
+ name: "listPets",
+ summary: "List all pets",
+ tags: [z.literal("pets")],
+ method: "GET",
+ path: [z.literal("pets")],
+ query: {
+ limit: z
+ .parameter(z.integer("int32").max(100).optional())
+ .description("How many items to return at one time (max 100)"),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ description: "A paged array of pets",
+ headers: {
+ "x-next": z
+ .parameter(z.string())
+ .name("x-next")
+ .description("A link to the next page of responses"),
+ },
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Pets", Pets),
+ }),
+ }),
+ z.response({
+ status: "default",
+ description: "unexpected error",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
+ }),
+
+ z.endpoint({
+ name: "showPetById",
+ summary: "Info for a specific pet",
+ tags: [z.literal("pets")],
+ method: "GET",
+ path: [
+ z.literal("pets"),
+ z
+ .parameter(z.string().uuid())
+ .name("petId")
+ .description("The id of the pet to retrieve"),
+ ],
+ responses: [
+ z.response({
+ status: 200,
+ description: "Expected response to a valid request",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Pet", Pet),
+ }),
+ }),
+ z.response({
+ status: "default",
+ description: "unexpected error",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
+ }),
+
+ z.endpoint({
+ name: "createPets",
+ summary: "Create a pet",
+ tags: [z.literal("pets")],
+ method: "POST",
+ path: [z.literal("pets")],
+ headers: {
+ accept: z.parameter(z.literal("application/json")),
+ },
+ responses: [
+ z.response({
+ status: 201,
+ description: "Null response",
+ }),
+ z.response({
+ status: "default",
+ description: "unexpected error",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
+ }),
+]);
+
+const server = { url: "http://petstore.swagger.io/v1" };
+const api = openApi(
+ schema,
+ { version: "1.0.0", title: "Swagger Petstore", license: { name: "MIT" } },
+ [server]
+);
+
+test("compare open api schema", () => {
+ function compare(actual: unknown, expected: unknown) {
+ const value = JSON.parse(JSON.stringify(actual));
+ expect(value).toEqual(expected);
+ }
+
+ compare(api.paths["/pets"].get, petApi.paths["/pets"].get);
+ compare(api.paths["/pets/{petId}"].get, petApi.paths["/pets/{petId}"].get);
+ compare(api.paths["/pets"].post, petApi.paths["/pets"].post);
+ compare(api.components?.schemas?.Error, petApi.components?.schemas?.Error);
+ compare(api.components?.schemas?.Pet, petApi.components?.schemas?.Pet);
+ compare(api.components?.schemas?.Pets, petApi.components?.schemas?.Pets);
+ compare(api, petApi);
+});
+
+test("validate example request", () => {
+ type Input = z.input;
+
+ const listPets: Input = {
+ path: ["pets"],
+ method: "GET",
+ query: {
+ limit: 10,
+ },
+ headers: {},
+ responses: {
+ description: "A paged array of pets",
+ status: 200,
+ headers: {
+ "x-next": "?",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 1,
+ name: "Bello",
+ tag: "DOG",
+ },
+ ],
+ },
+ },
+ };
+ expect(schema.parse(listPets).name).toEqual("listPets");
+
+ const showPetById: Input = {
+ path: ["pets", "b945f0a8-022d-11eb-adc1-0242ac120002"],
+ method: "GET",
+ query: {},
+ headers: {},
+ responses: {
+ description: "unexpected error",
+ status: "default",
+ headers: undefined,
+ body: {
+ type: "application/json",
+ content: {
+ code: 50,
+ message: "This is an error",
+ },
+ },
+ },
+ };
+ const res = schema.parse(showPetById);
+ expect(res.name).toEqual("showPetById");
+});
diff --git a/deno/lib/__tests__/pets_raw.test.ts b/deno/lib/__tests__/pets_raw.test.ts
new file mode 100644
index 0000000..5f6ff76
--- /dev/null
+++ b/deno/lib/__tests__/pets_raw.test.ts
@@ -0,0 +1,262 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import petApi from "../data/petstore.ts";
+import * as z from "../index.ts";
+import { openApi } from "../openapi.ts";
+
+const Error = z.object({
+ code: z.integer(),
+ message: z.string(),
+});
+
+const Pet = z.object({
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
+});
+
+const Pets = z.array(z.reference("Pet", Pet));
+
+const schema = z.union([
+ z.object({
+ name: z.literal("listPets").default("listPets"),
+ summary: z.literal("List all pets").default("List all pets"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([z.literal("pets")]),
+ method: z.literal("GET"),
+ query: z.object({
+ limit: z
+ .parameter(z.integer("int32").max(100).optional())
+ .description("How many items to return at one time (max 100)"),
+ }),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(200),
+ description: z.literal("A paged array of pets"),
+ headers: z.object({
+ "x-next": z
+ .parameter(z.string())
+ .name("x-next")
+ .description("A link to the next page of responses"),
+ }),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Pets", Pets),
+ }),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+ z.object({
+ name: z.literal("showPetById").default("showPetById"),
+ summary: z
+ .literal("Info for a specific pet")
+ .default("Info for a specific pet"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([
+ z.literal("pets"),
+ z
+ .parameter(z.string().uuid())
+ .name("petId")
+ .description("The id of the pet to retrieve"),
+ ]),
+ method: z.literal("GET"),
+ query: z.object({}),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(200),
+ description: z.literal("Expected response to a valid request"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Pet", Pet),
+ }),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+ z.object({
+ name: z.literal("createPets").default("createPets"),
+ summary: z.literal("Create a pet").default("Create a pet"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([z.literal("pets")]),
+ method: z.literal("POST"),
+ query: z.object({}),
+ headers: z.object({
+ accept: z.parameter(z.literal("application/json")),
+ }),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(201),
+ description: z.literal("Null response"),
+ headers: z.object({}),
+ body: z.undefined(),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+]);
+
+test("api interface", () => {
+ const api: z.Api = {
+ listPets: () =>
+ Promise.resolve({
+ status: 200,
+ headers: { "x-next": "abc" },
+ body: { type: "application/json", content: [] },
+ }),
+ showPetById: () =>
+ Promise.resolve({
+ status: 200,
+ headers: {},
+ body: { type: "application/json", content: { id: 1, name: "Pet" } },
+ }),
+ createPets: () => Promise.resolve({ status: 201, headers: {} }),
+ };
+
+ expect(api).toBeTruthy();
+});
+
+test("client interface", async () => {
+ // @ts-ignore
+ const client: z.Client = (req) => {
+ const match = z.matchRequest(schema, req);
+ return Promise.resolve({
+ status: 200,
+ headers: {
+ "x-next": "xxx",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 123,
+ name: match?.shape.name.parse(undefined) ?? "",
+ },
+ ],
+ },
+ } as const);
+ };
+
+ const res = await client({
+ method: "GET",
+ path: ["pets"],
+ headers: {},
+ query: {},
+ body: undefined,
+ });
+
+ expect(res.body).toEqual({
+ type: "application/json",
+ content: [{ id: 123, name: "listPets" }],
+ });
+});
+
+test("compare open api schema", async () => {
+ const server = { url: "http://petstore.swagger.io/v1" };
+ const api = openApi(
+ schema,
+ {
+ version: "1.0.0",
+ title: "Swagger Petstore",
+ license: { name: "MIT" },
+ },
+ [server]
+ );
+
+ function compare(actual: unknown, expected: unknown) {
+ const value = JSON.parse(JSON.stringify(actual));
+ expect(value).toEqual(expected);
+ }
+
+ compare(api.paths["/pets"].get, petApi.paths["/pets"].get);
+ compare(api.paths["/pets/{petId}"].get, petApi.paths["/pets/{petId}"].get);
+ compare(api.paths["/pets"].post, petApi.paths["/pets"].post);
+ compare(api.components?.schemas?.Error, petApi.components?.schemas?.Error);
+ compare(api.components?.schemas?.Pet, petApi.components?.schemas?.Pet);
+ compare(api.components?.schemas?.Pets, petApi.components?.schemas?.Pets);
+ compare(api, petApi);
+});
+
+test("validate example request", () => {
+ type Input = z.input;
+
+ const listPets: Input = {
+ path: ["pets"],
+ method: "GET",
+ query: {
+ limit: 10,
+ },
+ headers: {},
+
+ responses: {
+ status: 200,
+ description: "A paged array of pets",
+ headers: {
+ "x-next": "?",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 1,
+ name: "Bello",
+ tag: "DOG",
+ },
+ ],
+ },
+ },
+ };
+ expect(schema.parse(listPets).name).toEqual("listPets");
+
+ const showPetById: Input = {
+ path: ["pets", "b945f0a8-022d-11eb-adc1-0242ac120002"],
+ method: "GET",
+ query: {},
+ headers: {},
+ responses: {
+ status: "default",
+ description: "unexpected error",
+ headers: {},
+ body: {
+ type: "application/json",
+ content: {
+ code: 50,
+ message: "This is an error",
+ },
+ },
+ },
+ };
+ expect(schema.parse(showPetById).name).toEqual("showPetById");
+});
diff --git a/deno/lib/__tests__/project.test.ts b/deno/lib/__tests__/project.test.ts
new file mode 100644
index 0000000..71bdbf2
--- /dev/null
+++ b/deno/lib/__tests__/project.test.ts
@@ -0,0 +1,109 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import * as z from "../index.ts";
+import { component, parameter } from "../index.ts";
+import { openApi } from "../openapi.ts";
+import { OpenAPIObject } from "../utils/openapi3-ts/OpenApi.ts";
+
+test("test project", () => {
+ const route: z.Http = {
+ name: z.literal("GET_USER").default("GET_USER"),
+ method: z.literal("GET"),
+ path: z.tuple([z.literal("user")]),
+ summary: z.undefined(),
+ tags: z.tuple([z.literal("a"), z.literal("b")]).default(["a", "b"]),
+ query: z.object({
+ test: parameter(z.number().max(100).optional()).description(
+ "How many items to return at one time (max 100)"
+ ),
+ }),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ description: z.literal("List of projects"),
+ status: z.literal(200),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: component(
+ z.object({
+ uuid: z.string().uuid(),
+ name: z.string(),
+ })
+ ),
+ }),
+ }),
+ z.object({
+ description: z.literal("Not projects found"),
+ status: z.literal(404),
+ headers: z.object({}),
+ body: z.undefined(),
+ }),
+ ]),
+ };
+
+ const res = openApi(z.object(route));
+
+ const exp: OpenAPIObject = {
+ openapi: "3.0.0",
+ info: {
+ version: "1.0.0",
+ title: "No title",
+ },
+ servers: [],
+ paths: {
+ "/user": {
+ get: {
+ operationId: "GET_USER",
+ parameters: [
+ {
+ description: "How many items to return at one time (max 100)",
+ in: "query",
+ name: "test",
+ required: false,
+ schema: {
+ format: "int32",
+ type: "integer",
+ },
+ },
+ ],
+ summary: undefined,
+ tags: ["a", "b"],
+ requestBody: undefined,
+ responses: {
+ "200": {
+ description: "List of projects",
+ headers: undefined,
+ content: {
+ "application/json": {
+ schema: {
+ properties: {
+ name: {
+ type: "string",
+ },
+ uuid: {
+ type: "string",
+ },
+ },
+ required: ["uuid", "name"],
+ type: "object",
+ },
+ },
+ },
+ },
+ "404": {
+ description: "Not projects found",
+ headers: undefined,
+ content: undefined,
+ },
+ },
+ },
+ },
+ },
+ components: undefined,
+ };
+ expect(res).toEqual(exp);
+});
diff --git a/deno/lib/__tests__/router_body.test.ts b/deno/lib/__tests__/router_body.test.ts
new file mode 100644
index 0000000..5636d71
--- /dev/null
+++ b/deno/lib/__tests__/router_body.test.ts
@@ -0,0 +1,93 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import * as z from "../index.ts";
+import { openApi } from "../openapi.ts";
+
+test("router with body", async () => {
+ const pet = z.reference(
+ "Pets",
+ z.object({
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
+ })
+ );
+
+ const schema = z.endpoints([
+ z.endpoint({
+ name: "C",
+ method: "POST",
+ path: [z.literal("pets")],
+ body: z.body({
+ type: "application/json",
+ content: pet,
+ }),
+ responses: [
+ z.response({
+ status: 201,
+ headers: {},
+ description: "Post with body",
+ }),
+ ],
+ }),
+ ]);
+
+ const api: z.Api = {
+ C: () =>
+ Promise.resolve({
+ status: 201,
+ headers: {},
+ }),
+ };
+
+ const res = await api["C"]({
+ method: "POST",
+ path: ["pets"],
+ query: {},
+ headers: {},
+ body: { type: "application/json", content: { id: 1, name: "Joe" } },
+ });
+ expect(res).toEqual({
+ status: 201,
+ headers: {},
+ });
+
+ const open = openApi(schema);
+ expect(open).toEqual({
+ components: undefined,
+ info: {
+ title: "No title",
+ version: "1.0.0",
+ },
+ openapi: "3.0.0",
+ paths: {
+ "/pets": {
+ post: {
+ operationId: "C",
+ parameters: undefined,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Pets",
+ },
+ },
+ },
+ },
+ responses: {
+ 201: {
+ content: undefined,
+ description: "Post with body",
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
+ },
+ },
+ },
+ servers: [],
+ });
+});
diff --git a/deno/lib/__tests__/router_minimal.test.ts b/deno/lib/__tests__/router_minimal.test.ts
new file mode 100644
index 0000000..6896226
--- /dev/null
+++ b/deno/lib/__tests__/router_minimal.test.ts
@@ -0,0 +1,170 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import * as z from "../index.ts";
+import { openApi } from "../openapi.ts";
+
+test("minimal one endpoint", async () => {
+ const schema = z.endpoints([
+ z.endpoint({
+ name: "A",
+ method: "GET",
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ }),
+ ]);
+
+ const api: z.Api = {
+ A: ({ path }) => {
+ expect(path[0]).toEqual("");
+ return Promise.resolve({
+ status: 200,
+ });
+ },
+ };
+
+ const res = await api["A"]({
+ method: "GET",
+ path: [""],
+ query: {},
+ headers: {},
+ });
+ expect(res).toEqual({ status: 200 });
+});
+
+test("minimal endpoint two endpoints", async () => {
+ const schema = z.union([
+ z.endpoint({
+ name: "A",
+ method: "GET",
+ path: [z.literal("a")],
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ }),
+ z.endpoint({
+ name: "B",
+ method: "POST",
+ path: [z.literal("b")],
+ responses: [
+ z.response({
+ status: 200,
+ body: [
+ z.body({
+ type: "application/json",
+ content: z.object({
+ b: z.string(),
+ }),
+ }),
+ z.body({
+ type: "plain/text",
+ content: z.object({
+ c: z.string(),
+ }),
+ }),
+ ],
+ }),
+ ],
+ }),
+ ]);
+
+ const api: z.Api = {
+ A: () =>
+ Promise.resolve({
+ status: 200,
+ }),
+ B: () =>
+ Promise.resolve({
+ status: 200,
+ body: { type: "application/json", content: { b: "b" } },
+ }),
+ };
+
+ const res = await api["B"]({
+ method: "POST",
+ path: ["b"],
+ query: {},
+ headers: {},
+ });
+ expect(res).toEqual({
+ status: 200,
+ body: {
+ type: "application/json",
+ content: { b: "b" },
+ },
+ });
+
+ const open = openApi(schema);
+ expect(open).toEqual({
+ components: undefined,
+ info: {
+ title: "No title",
+ version: "1.0.0",
+ },
+ openapi: "3.0.0",
+ paths: {
+ "/a": {
+ get: {
+ operationId: "A",
+ parameters: undefined,
+ requestBody: undefined,
+ responses: {
+ 200: {
+ content: undefined,
+ description: undefined,
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
+ },
+ },
+ "/b": {
+ post: {
+ operationId: "B",
+ parameters: undefined,
+ requestBody: undefined,
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ properties: {
+ b: {
+ type: "string",
+ },
+ },
+ required: ["b"],
+ type: "object",
+ },
+ },
+ "plain/text": {
+ schema: {
+ properties: {
+ c: {
+ type: "string",
+ },
+ },
+ required: ["c"],
+ type: "object",
+ },
+ },
+ },
+ description: undefined,
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
+ },
+ },
+ },
+ servers: [],
+ });
+});
diff --git a/deno/lib/__tests__/type.test.ts b/deno/lib/__tests__/type.test.ts
new file mode 100644
index 0000000..daad537
--- /dev/null
+++ b/deno/lib/__tests__/type.test.ts
@@ -0,0 +1,94 @@
+// @ts-ignore TS6133
+import { expect } from "https://deno.land/x/expect@v0.2.6/mod.ts";
+const test = Deno.test;
+
+import * as z from "../index.ts";
+
+test("type string", () => {
+ const zod = z.string();
+ expect(z.createSchema(zod)).toEqual({
+ type: "string",
+ });
+});
+
+test("type object", () => {
+ const zod = z.object({
+ id: z.number(),
+ name: z.string(),
+ tag: z.string().optional(),
+ });
+ expect(z.createSchema(zod)).toEqual({
+ type: "object",
+ required: ["id", "name"],
+ properties: {
+ id: {
+ type: "integer",
+ format: "int32",
+ },
+ name: {
+ type: "string",
+ },
+ tag: {
+ type: "string",
+ },
+ },
+ });
+});
+
+test("type nested object", () => {
+ const zod = z.object({
+ id: z.number(),
+ name: z.string(),
+ obj: z
+ .object({
+ test: z.string(),
+ })
+ .optional(),
+ });
+ expect(z.createSchema(zod)).toEqual({
+ type: "object",
+ required: ["id", "name"],
+ properties: {
+ id: {
+ type: "integer",
+ format: "int32",
+ },
+ name: {
+ type: "string",
+ },
+ obj: {
+ properties: {
+ test: {
+ type: "string",
+ },
+ },
+ required: ["test"],
+ type: "object",
+ },
+ },
+ });
+});
+
+test("type array", () => {
+ const zod = z.array(z.string());
+ expect(z.createSchema(zod)).toEqual({
+ type: "array",
+ items: {
+ type: "string",
+ },
+ });
+});
+
+test("type integer", () => {
+ const int32 = z.integer();
+ expect(z.createSchema(int32)).toEqual({
+ format: "int32",
+ type: "integer",
+ });
+
+ const int64 = z.integer("int64").max(100);
+ expect(z.createSchema(int64)).toEqual({
+ format: "int64",
+ type: "integer",
+ });
+});
diff --git a/deno/lib/api.ts b/deno/lib/api.ts
new file mode 100644
index 0000000..1a978e0
--- /dev/null
+++ b/deno/lib/api.ts
@@ -0,0 +1,43 @@
+import * as z from "./deps.ts";
+import { HttpSchema } from "./model.ts";
+import { PickUnion } from "./utils.ts";
+
+export type ApiNames = z.output extends {
+ name: string;
+}
+ ? z.output["name"]
+ : never;
+
+export type ApiRequestAttributes =
+ | "method"
+ | "path"
+ | "query"
+ | "headers"
+ | "body";
+export type ApiResponseAttributes = "status" | "headers" | "body";
+export type ApiRequest = Extract<
+ z.output,
+ { name: Key }
+>;
+export type ApiResponse = ApiRequest<
+ T,
+ Key
+>["responses"];
+export type ApiFunction = (
+ request: Readonly, ApiRequestAttributes>>
+) => Readonly<
+ Promise<
+ ApiResponseAttributes extends keyof ApiResponse
+ ? PickUnion, ApiResponseAttributes>
+ : undefined
+ >
+>;
+
+export type Api = {
+ [Key in ApiNames]: ApiFunction;
+};
+
+export type ApiFragment> = Pick<
+ Api,
+ Key
+>;
diff --git a/deno/lib/client.ts b/deno/lib/client.ts
new file mode 100644
index 0000000..8953853
--- /dev/null
+++ b/deno/lib/client.ts
@@ -0,0 +1,36 @@
+import * as z from "./deps.ts";
+import { HttpSchema } from "./model.ts";
+import { PickUnion } from "./utils.ts";
+
+type ClientRequestAttributes = "method" | "path" | "query" | "headers" | "body";
+type ClientResponseAttributes = "status" | "headers" | "body";
+type ClientRequest = PickUnion<
+ z.output,
+ ClientRequestAttributes
+>;
+type ClientRequestResponses = PickUnion<
+ z.output,
+ ClientRequestAttributes | "responses"
+>;
+type ClientMapper<
+ T extends HttpSchema,
+ R extends ClientRequest
+> = NonNullable<{
+ method: R["method"];
+ path: R["path"];
+ query: R["query"];
+ headers: R["headers"];
+ body?: R["body"];
+}>;
+type ClientMatch> = Extract<
+ ClientRequestResponses,
+ ClientMapper
+>["responses"];
+
+export type Client = >(
+ req: R
+) => Promise<
+ ClientResponseAttributes extends keyof ClientMatch
+ ? PickUnion, ClientResponseAttributes>
+ : undefined
+>;
diff --git a/deno/lib/component.ts b/deno/lib/component.ts
new file mode 100644
index 0000000..d2fa702
--- /dev/null
+++ b/deno/lib/component.ts
@@ -0,0 +1,29 @@
+import * as z from "./deps.ts";
+
+export class Component extends z.ZodType<
+ T["_output"],
+ T["_def"],
+ T["_input"]
+> {
+ _parse(
+ _ctx: z.ParseContext,
+ _data: any,
+ _parsedType: z.ZodParsedType
+ ): z.ParseReturnType {
+ return this.component._parse(_ctx, _data, _parsedType);
+ }
+ readonly component: z.ZodTypeAny;
+
+ constructor(type: z.ZodTypeAny) {
+ super(type._def);
+ this.component = type;
+ }
+
+ public toJSON = () => this._def;
+
+ static create(type: z.ZodTypeAny) {
+ return new Component(type);
+ }
+}
+
+export const component = Component.create;
diff --git a/deno/lib/data/petstore.ts b/deno/lib/data/petstore.ts
new file mode 100644
index 0000000..8650f78
--- /dev/null
+++ b/deno/lib/data/petstore.ts
@@ -0,0 +1,165 @@
+export default {
+ openapi: "3.0.0",
+ info: {
+ version: "1.0.0",
+ title: "Swagger Petstore",
+ license: {
+ name: "MIT",
+ },
+ },
+ servers: [
+ {
+ url: "http://petstore.swagger.io/v1",
+ },
+ ],
+ paths: {
+ "/pets": {
+ get: {
+ summary: "List all pets",
+ operationId: "listPets",
+ tags: ["pets"],
+ parameters: [
+ {
+ name: "limit",
+ in: "query",
+ description: "How many items to return at one time (max 100)",
+ required: false,
+ schema: {
+ type: "integer",
+ format: "int32",
+ },
+ },
+ ],
+ responses: {
+ "200": {
+ description: "A paged array of pets",
+ headers: {
+ "x-next": {
+ description: "A link to the next page of responses",
+ schema: {
+ type: "string",
+ },
+ },
+ },
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Pets",
+ },
+ },
+ },
+ },
+ default: {
+ description: "unexpected error",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
+ post: {
+ summary: "Create a pet",
+ operationId: "createPets",
+ tags: ["pets"],
+ responses: {
+ "201": {
+ description: "Null response",
+ },
+ default: {
+ description: "unexpected error",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "/pets/{petId}": {
+ get: {
+ summary: "Info for a specific pet",
+ operationId: "showPetById",
+ tags: ["pets"],
+ parameters: [
+ {
+ name: "petId",
+ in: "path",
+ required: true,
+ description: "The id of the pet to retrieve",
+ schema: {
+ type: "string",
+ },
+ },
+ ],
+ responses: {
+ "200": {
+ description: "Expected response to a valid request",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Pet",
+ },
+ },
+ },
+ },
+ default: {
+ description: "unexpected error",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ components: {
+ schemas: {
+ Pet: {
+ type: "object",
+ required: ["id", "name"],
+ properties: {
+ id: {
+ type: "integer",
+ format: "int64",
+ },
+ name: {
+ type: "string",
+ },
+ tag: {
+ type: "string",
+ },
+ },
+ },
+ Pets: {
+ type: "array",
+ items: {
+ $ref: "#/components/schemas/Pet",
+ },
+ },
+ Error: {
+ type: "object",
+ required: ["code", "message"],
+ properties: {
+ code: {
+ type: "integer",
+ format: "int32",
+ },
+ message: {
+ type: "string",
+ },
+ },
+ },
+ },
+ },
+} as const;
diff --git a/deno/lib/deps.ts b/deno/lib/deps.ts
new file mode 100644
index 0000000..779adc2
--- /dev/null
+++ b/deno/lib/deps.ts
@@ -0,0 +1 @@
+export * from "https://raw.githubusercontent.com/colinhacks/zod/master/deno/lib/mod.ts";
diff --git a/deno/lib/dsl.ts b/deno/lib/dsl.ts
new file mode 100644
index 0000000..d2f4557
--- /dev/null
+++ b/deno/lib/dsl.ts
@@ -0,0 +1,192 @@
+import * as z from "./deps.ts";
+import {
+ Content,
+ HttpBodyObject,
+ HttpBodyUnion,
+ HttpObject,
+ HttpResponseObject,
+ Path,
+} from "./model.ts";
+import { Parameter } from "./parameter.ts";
+
+export type Body = {
+ readonly type: string;
+ readonly content: Content;
+};
+
+export type Request = {
+ readonly name: string;
+ readonly summary?: string;
+ readonly tags?: [z.ZodLiteral, ...z.ZodLiteral[]] | [];
+ readonly method: "GET" | "POST" | "PUT" | "DELETE";
+ readonly path?: [Path, ...Path[]];
+ readonly query?: { [key: string]: Parameter };
+ readonly headers?: { [key: string]: Parameter };
+ readonly body?:
+ | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ | [HttpBodyObject]
+ | HttpBodyObject;
+};
+
+export type Response = {
+ readonly description?: string;
+ readonly status: number | string;
+ readonly headers?: { [key: string]: Parameter };
+ readonly body?:
+ | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ | [HttpBodyObject]
+ | HttpBodyObject;
+};
+
+export type Endpoint = Request & {
+ responses?:
+ | [HttpResponseObject, HttpResponseObject, ...HttpResponseObject[]]
+ | [HttpResponseObject];
+};
+
+export function endpoints(types: [T]): T;
+export function endpoints<
+ T1 extends HttpObject,
+ T2 extends HttpObject,
+ T3 extends HttpObject
+>(types: [T1, T2, ...T3[]]): z.ZodUnion<[T1, T2, ...T3[]]>;
+export function endpoints(
+ types: [T] | [T, T, ...T[]]
+): T | z.ZodUnion<[T, T, ...T[]]> {
+ // @ts-ignore
+ return types.length === 1 ? types[0] : z.union<[T, T, ...T[]]>(types);
+}
+
+export type EndpointMapper = z.ZodObject<{
+ name: z.ZodDefault>;
+ summary: T["summary"] extends string
+ ? z.ZodDefault>
+ : z.ZodUndefined;
+ tags: T["tags"] extends [z.ZodTypeAny, ...z.ZodTypeAny[]] | []
+ ? z.ZodDefault>
+ : z.ZodUndefined;
+ method: z.ZodLiteral;
+ path: T["path"] extends [Path, ...Path[]]
+ ? z.ZodTuple
+ : z.ZodTuple<[z.ZodLiteral<"">]>;
+ query: T["query"] extends z.ZodRawShape
+ ? z.ZodObject
+ : z.ZodObject<{}>;
+ headers: T["headers"] extends z.ZodRawShape
+ ? z.ZodObject
+ : z.ZodObject<{}>;
+ body: T["body"] extends [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ ? z.ZodUnion
+ : T["body"] extends [HttpBodyObject]
+ ? T["body"][0]
+ : T["body"] extends HttpBodyObject
+ ? T["body"]
+ : z.ZodUndefined;
+ responses: T["responses"] extends [
+ HttpResponseObject,
+ HttpResponseObject,
+ ...HttpResponseObject[]
+ ]
+ ? z.ZodUnion
+ : T["responses"] extends [HttpResponseObject]
+ ? T["responses"][0]
+ : z.ZodUndefined;
+}>;
+
+export function endpoint(endpoint: T): EndpointMapper {
+ // @ts-ignore
+ return z.object({
+ name: z.literal(endpoint.name).default(endpoint.name),
+ summary:
+ endpoint.summary !== undefined
+ ? z.literal(endpoint.summary).default(endpoint.summary)
+ : z.undefined(),
+ tags:
+ endpoint.tags !== undefined
+ ? // @ts-ignore
+ z.tuple(endpoint.tags).default(endpoint.tags.map((_) => _._def.value))
+ : z.undefined(),
+ method: z.literal(endpoint.method),
+ // @ts-ignore
+ path: endpoint.path !== undefined ? z.tuple(endpoint.path) : [],
+ query:
+ endpoint.query !== undefined
+ ? z.object(endpoint.query as z.ZodRawShape)
+ : z.object({}),
+ headers:
+ endpoint.headers !== undefined
+ ? z.object(endpoint.headers as z.ZodRawShape)
+ : z.object({}),
+ // @ts-ignore
+ body: transformBody(endpoint.body),
+ // @ts-ignore
+ responses:
+ endpoint.responses !== undefined
+ ? // @ts-ignore
+ z.union(endpoint.responses)
+ : z.undefined(),
+ });
+}
+
+export type BodyMapper = z.ZodObject<{
+ type: z.ZodLiteral;
+ content: T["content"];
+}>;
+
+export function body(body: Readonly): BodyMapper {
+ return z.object({
+ type: z.literal(body.type),
+ content: body.content,
+ });
+}
+
+export type ResponseMapper = z.ZodObject<{
+ description: T["description"] extends string
+ ? z.ZodLiteral
+ : z.ZodUndefined;
+ status: z.ZodLiteral;
+ headers: T["headers"] extends z.ZodRawShape
+ ? z.ZodObject
+ : z.ZodUndefined;
+ body: T["body"] extends [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ ? z.ZodUnion
+ : T["body"] extends [HttpBodyObject]
+ ? T["body"][0]
+ : T["body"] extends HttpBodyObject
+ ? T["body"]
+ : z.ZodUndefined;
+}>;
+
+export function response(
+ response: Readonly
+): ResponseMapper {
+ // @ts-ignore
+ return z.object({
+ status: z.literal(response.status),
+ description: z.literal(response.description),
+ headers:
+ response.headers !== undefined
+ ? z.object(response.headers as z.ZodRawShape)
+ : z.undefined(),
+ body: transformBody(response.body),
+ });
+}
+
+function transformBody(
+ body?:
+ | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ | [HttpBodyObject]
+ | HttpBodyObject
+): HttpBodyUnion {
+ if (body === undefined) {
+ return z.undefined();
+ }
+ if (Array.isArray(body)) {
+ if (body.length === 1) {
+ return body[0];
+ }
+ // @ts-ignore
+ return z.union(body);
+ }
+ return body;
+}
diff --git a/deno/lib/index.ts b/deno/lib/index.ts
new file mode 100644
index 0000000..9798c6e
--- /dev/null
+++ b/deno/lib/index.ts
@@ -0,0 +1,11 @@
+export * from "./api.ts";
+export * from "./client.ts";
+export { Component, component } from "./component.ts";
+export * from "./deps.ts";
+export * from "./dsl.ts";
+export { Integer, integer } from "./integer.ts";
+export * from "./match.ts";
+export * from "./model.ts";
+export { createSchema, openApi } from "./openapi.ts";
+export { Parameter, parameter } from "./parameter.ts";
+export { Reference, reference } from "./reference.ts";
diff --git a/deno/lib/integer.ts b/deno/lib/integer.ts
new file mode 100644
index 0000000..b389a2a
--- /dev/null
+++ b/deno/lib/integer.ts
@@ -0,0 +1,22 @@
+import * as z from "./deps.ts";
+
+export interface IntegerDef extends z.ZodNumberDef {
+ format: string;
+}
+
+export class Integer extends z.ZodNumber {
+ public toJSON = () => this._def;
+
+ constructor(def: IntegerDef) {
+ super(def);
+ }
+ static create = (format?: string): Integer => {
+ return new Integer({
+ checks: [],
+ typeName: z.ZodFirstPartyTypeKind.ZodNumber,
+ format: format ?? "int32",
+ });
+ };
+}
+
+export const integer = Integer.create;
diff --git a/deno/lib/match.ts b/deno/lib/match.ts
new file mode 100644
index 0000000..fe556ab
--- /dev/null
+++ b/deno/lib/match.ts
@@ -0,0 +1,63 @@
+import * as z from "./deps.ts";
+import {
+ HttpObject,
+ HttpRequestObject,
+ HttpResponseObject,
+ HttpResponseUnion,
+ HttpUnion,
+} from "./model.ts";
+
+export type MatchRequest = Pick<
+ z.output,
+ "method" | "path" | "query" | "headers" | "body"
+>;
+export type MatchResponse = Pick<
+ z.output,
+ "status" | "headers" | "body"
+>;
+
+const requestPicker = {
+ method: true,
+ path: true,
+ query: true,
+ headers: true,
+ body: true,
+} as const;
+const responsePicker = { status: true, headers: true, body: true } as const;
+
+export function matchRequest(
+ schema: HttpUnion,
+ req: MatchRequest
+): HttpObject | undefined {
+ function check(request: HttpRequestObject) {
+ try {
+ request.pick(requestPicker).parse(req);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+
+ return schema.options.find(check);
+}
+
+export function matchResponse(
+ responses: HttpResponseUnion,
+ req: MatchResponse
+): HttpResponseObject | undefined {
+ function check(response: HttpResponseObject) {
+ try {
+ response.pick(responsePicker).parse(req);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ if ("shape" in responses) {
+ return responses;
+ }
+ if ("options" in responses) {
+ return responses.options.find(check);
+ }
+ return undefined;
+}
diff --git a/deno/lib/mod.ts b/deno/lib/mod.ts
new file mode 100644
index 0000000..a88bebe
--- /dev/null
+++ b/deno/lib/mod.ts
@@ -0,0 +1 @@
+export * from "./index.ts";
diff --git a/deno/lib/model.ts b/deno/lib/model.ts
new file mode 100644
index 0000000..267b424
--- /dev/null
+++ b/deno/lib/model.ts
@@ -0,0 +1,56 @@
+import { Component } from "./component.ts";
+import * as z from "./deps.ts";
+import { Parameter } from "./parameter.ts";
+import { Reference } from "./reference.ts";
+
+export type Path = z.ZodLiteral | z.ZodString | Parameter;
+export type ParameterObject = z.ZodObject<{ [key: string]: Parameter }>;
+export type Content = Reference | Component | z.ZodObject;
+
+export type HttpBody = {
+ type: z.ZodLiteral;
+ content: Content;
+};
+export type HttpBodyObject = z.ZodObject;
+export type HttpBodyUnion =
+ | HttpBodyObject
+ | z.ZodUnion<[HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]>
+ | z.ZodUndefined;
+
+export type HttpRequest = {
+ name: z.ZodDefault> | z.ZodUndefined;
+ method: z.ZodLiteral;
+ path: z.ZodTuple<[Path, ...Path[]]> | z.ZodUndefined;
+ summary: z.ZodDefault> | z.ZodUndefined;
+ tags: z.ZodDefault> | z.ZodUndefined;
+ query: ParameterObject;
+ headers: ParameterObject;
+ body: HttpBodyUnion;
+};
+
+export type HttpRequestObject = z.ZodObject;
+
+export type HttpResponse = {
+ status: z.ZodLiteral;
+ description: z.ZodLiteral | z.ZodUndefined;
+ headers: ParameterObject | z.ZodUndefined;
+ body: HttpBodyUnion;
+};
+
+export type HttpResponseObject = z.ZodObject;
+
+export type HttpResponseUnion =
+ | HttpResponseObject
+ | z.ZodUnion<
+ [HttpResponseObject, HttpResponseObject, ...HttpResponseObject[]]
+ >
+ | z.ZodUndefined;
+
+export type Http = HttpRequest & {
+ responses: HttpResponseUnion;
+};
+
+export type HttpObject = z.ZodObject;
+export type HttpOptions = [HttpObject, HttpObject, ...HttpObject[]];
+export type HttpUnion = z.ZodUnion;
+export type HttpSchema = HttpObject | HttpUnion;
diff --git a/deno/lib/openapi.ts b/deno/lib/openapi.ts
new file mode 100644
index 0000000..a88336d
--- /dev/null
+++ b/deno/lib/openapi.ts
@@ -0,0 +1,346 @@
+import { Component } from "./component.ts";
+import {
+ ZodFirstPartyTypeKind,
+ ZodLiteral,
+ ZodOptional,
+ ZodString,
+ ZodTypeAny,
+} from "./deps.ts";
+import {
+ HttpBodyUnion,
+ HttpObject,
+ HttpResponseObject,
+ HttpResponseUnion,
+ HttpSchema,
+ ParameterObject as ParameterObj,
+} from "./model.ts";
+import { Parameter } from "./parameter.ts";
+import { Reference } from "./reference.ts";
+import {
+ ComponentsObject,
+ ContentObject,
+ HeadersObject,
+ InfoObject,
+ OpenAPIObject,
+ OperationObject,
+ ParameterObject,
+ PathsObject,
+ ReferenceObject,
+ RequestBodyObject,
+ ResponseObject,
+ ResponsesObject,
+ SchemaObject,
+ ServerObject,
+} from "./utils/openapi3-ts/OpenApi.ts";
+
+const base = {
+ openapi: "3.0.0",
+};
+
+function mapSchema(type: ZodTypeAny): SchemaObject | undefined {
+ switch (type._def.typeName) {
+ case ZodFirstPartyTypeKind.ZodNumber:
+ if ("format" in type._def) {
+ return {
+ type: "integer",
+ format: type._def.format,
+ };
+ }
+ return {
+ type: "integer",
+ format: "int32",
+ };
+ case ZodFirstPartyTypeKind.ZodBigInt:
+ return {
+ type: "integer",
+ format: "int32",
+ };
+ case ZodFirstPartyTypeKind.ZodString:
+ return {
+ type: "string",
+ };
+ default:
+ return undefined;
+ }
+}
+
+export function createSchema(
+ obj: ZodTypeAny | Reference | Component
+): SchemaObject | ReferenceObject | undefined {
+ if ("reference" in obj) {
+ return { $ref: `#/components/schemas/${obj.state.name}` };
+ }
+ if ("component" in obj) {
+ return createSchema(obj.component);
+ }
+ if ("innerType" in obj._def) {
+ return createSchema(obj._def.innerType);
+ }
+ if ("type" in obj._def) {
+ return {
+ type: "array",
+ items: createSchema(obj._def.type),
+ };
+ }
+ if ("shape" in obj._def) {
+ const shape = obj._def.shape();
+ return {
+ type: "object",
+ properties: Object.keys(shape).reduce((acc, cur) => {
+ return {
+ ...acc,
+ [cur]: createSchema(shape[cur]),
+ };
+ }, {}),
+ required: Object.keys(shape).reduce((acc, cur) => {
+ if (shape[cur]._def.typeName !== ZodFirstPartyTypeKind.ZodOptional) {
+ return [...acc, cur];
+ }
+ return acc;
+ }, []),
+ };
+ }
+ if ("checks" in obj._def) {
+ return mapSchema(obj);
+ }
+ return undefined;
+}
+
+export function openApi(
+ schema: HttpSchema,
+ info: InfoObject = { title: "No title", version: "1.0.0" },
+ servers: ServerObject[] = []
+): OpenAPIObject {
+ const options = "options" in schema ? schema.options : [schema];
+ const paths = createPaths(options);
+ const components = createComponents(options);
+ return { ...base, info, servers, paths, components };
+}
+
+function createPaths(options: HttpObject[]): PathsObject {
+ return options.reduce((acc, cur) => {
+ const shape = cur._def.shape();
+ const method = shape.method._def.value;
+ const path =
+ shape.path._def !== undefined && "items" in shape.path._def
+ ? "/" +
+ shape.path._def.items
+ .map((p) => {
+ if ("state" in p) {
+ return `{${p.state.name}}`;
+ }
+ if (p._def.typeName === ZodFirstPartyTypeKind.ZodString) {
+ return `{${p._def.typeName}}`;
+ }
+ if (p._def.typeName === ZodFirstPartyTypeKind.ZodLiteral) {
+ return p._def.value;
+ }
+ })
+ .join("/")
+ : "/";
+ return {
+ ...acc,
+ [path]: {
+ ...acc[path],
+ [method.toLowerCase()]: createOperationObject(cur),
+ },
+ };
+ }, {});
+}
+
+function createComponents(options: HttpObject[]): ComponentsObject | undefined {
+ const schemas = options
+ .flatMap((http) => {
+ return mapResponsesObject(http.shape.responses);
+ })
+ .map((response) => {
+ const body = response.shape.body;
+ if ("shape" in body) {
+ return body.shape.content;
+ }
+ if ("options" in body) {
+ body.options.map((it) => it.shape.content);
+ }
+ return undefined;
+ })
+ .reduce((acc, cur) => {
+ if (cur != null && "reference" in cur && cur.state.name) {
+ return { ...acc, [cur.state.name]: createSchema(cur.reference) };
+ } else {
+ return acc;
+ }
+ }, {});
+ return Object.keys(schemas).length > 0
+ ? {
+ schemas: schemas,
+ }
+ : undefined;
+}
+
+function createOperationObject(http: HttpObject): OperationObject {
+ const shape = http._def.shape();
+ return {
+ summary:
+ "defaultValue" in shape.summary._def
+ ? shape.summary._def.defaultValue()
+ : undefined,
+ operationId:
+ "defaultValue" in shape.name._def
+ ? shape.name._def.defaultValue()
+ : undefined,
+ tags:
+ "defaultValue" in shape.tags._def
+ ? (shape.tags._def.defaultValue() as string[])
+ : undefined,
+ requestBody: createRequestBody(http),
+ parameters: createParameterObject(http),
+ responses: createResponsesObject(shape.responses),
+ };
+}
+
+function createRequestBody(
+ http: HttpObject
+): RequestBodyObject | ReferenceObject | undefined {
+ const shape = http._def.shape();
+ const content = createContentObject(shape.body);
+ return content ? { content } : undefined;
+}
+
+function createParameterObject(http: HttpObject) {
+ const shape = http._def.shape();
+ const res = [
+ ...("shape" in shape.query._def
+ ? createQueryParameterObject(shape.query._def.shape())
+ : []),
+ ...(shape.path._def && "items" in shape.path._def
+ ? shape.path._def.items
+ .filter((it) => "state" in it)
+ .map(createPathParameterObject)
+ : []),
+ ];
+ return res.length > 0 ? res : undefined;
+}
+
+function createPathParameterObject(
+ it: ZodLiteral | ZodString | ZodOptional | Parameter
+): ParameterObject {
+ return {
+ name: "state" in it && it.state.name ? it.state.name : "undefined",
+ in: "path",
+ description: "state" in it ? it.state.description : undefined,
+ required: !("innerType" in it._def),
+ schema:
+ "innerType" in it._def ? mapSchema(it._def.innerType) : mapSchema(it),
+ };
+}
+
+function createQueryParameterObject(
+ it: Record
+): ParameterObject[] {
+ return Object.keys(it).map((key) => ({
+ name: key,
+ in: "query",
+ description: "state" in it[key] ? it[key].state.description : undefined,
+ required: !("innerType" in it[key]._def),
+ // @ts-ignore
+ schema:
+ "innerType" in it[key]._def
+ ? // @ts-ignore
+ mapSchema(it[key]._def.innerType)
+ : mapSchema(it[key]),
+ }));
+}
+
+function createResponsesObject(responses: HttpResponseUnion): ResponsesObject {
+ if ("shape" in responses) {
+ return createResponseObject(responses);
+ }
+ if ("options" in responses) {
+ return responses.options.reduce((acc, cur) => {
+ return {
+ ...acc,
+ ...createResponseObject(cur),
+ };
+ }, {});
+ }
+ return {};
+}
+
+function mapResponsesObject(
+ responses: HttpResponseUnion
+): HttpResponseObject[] {
+ if ("options" in responses) {
+ return responses.options.map((it) => it);
+ }
+ if ("shape" in responses) {
+ return [responses];
+ }
+ return [];
+}
+
+function createResponseObject(
+ response: HttpResponseObject
+): Record {
+ const shape = response._def.shape();
+ const name = shape.status._def.value as string;
+ return {
+ [name]: {
+ description:
+ "value" in shape.description._def ? shape.description._def.value : "",
+ headers:
+ "shape" in shape.headers
+ ? createHeadersObject(shape.headers)
+ : undefined,
+ content: createContentObject(shape.body),
+ },
+ };
+}
+function createContentObject(body: HttpBodyUnion): ContentObject | undefined {
+ if ("shape" in body) {
+ return {
+ [body.shape.type._def.value]: {
+ schema: createSchema(body.shape.content),
+ },
+ };
+ }
+ if ("options" in body) {
+ return body.options.reduce(
+ (acc, cur) => ({ ...acc, ...createContentObject(cur) }),
+ {}
+ );
+ }
+ return undefined;
+}
+
+function createHeadersObject(headers: ParameterObj): HeadersObject | undefined {
+ const shape = headers._def.shape();
+
+ if (Object.keys(shape).length === 0) {
+ return undefined;
+ }
+
+ return Object.keys(shape).reduce((acc, cur) => {
+ const obj = shape[cur];
+ if ("value" in obj._def) {
+ return {
+ ...acc,
+ [cur]: {
+ schema: mapSchema(obj),
+ },
+ };
+ }
+ if ("state" in obj) {
+ return {
+ ...acc,
+ [cur]: {
+ description: obj.state.description,
+ schema: mapSchema(obj),
+ },
+ };
+ }
+ return {
+ ...acc,
+ [cur]: {},
+ };
+ }, {});
+}
diff --git a/deno/lib/parameter.ts b/deno/lib/parameter.ts
new file mode 100644
index 0000000..c4c6125
--- /dev/null
+++ b/deno/lib/parameter.ts
@@ -0,0 +1,45 @@
+import * as z from "./deps.ts";
+
+type ParameterState = {
+ name?: string;
+ description?: string;
+};
+
+export class Parameter extends z.ZodType {
+ readonly type: z.ZodType;
+ state: ParameterState;
+
+ _parse(
+ _ctx: z.ParseContext,
+ _data: any,
+ _parsedType: z.ZodParsedType
+ ): z.ParseReturnType {
+ return this.type._parse(_ctx, _data, _parsedType);
+ }
+ constructor(type: z.ZodType) {
+ super(type._def);
+ this.type = type;
+ this.state = {
+ name: undefined,
+ description: undefined,
+ };
+ }
+
+ public toJSON = () => this._def;
+
+ public name(name: string) {
+ this.state = { ...this.state, name };
+ return this;
+ }
+
+ public description(description: string) {
+ this.state = { ...this.state, description };
+ return this;
+ }
+
+ static create(type: z.ZodType) {
+ return new Parameter(type);
+ }
+}
+
+export const parameter = Parameter.create;
diff --git a/deno/lib/playground.ts b/deno/lib/playground.ts
new file mode 100644
index 0000000..77f2ccd
--- /dev/null
+++ b/deno/lib/playground.ts
@@ -0,0 +1,6 @@
+export * from "https://raw.githubusercontent.com/colinhacks/zod/master/deno/lib/mod.ts";
+
+const a = "a";
+const b: z.ZodDefault> = z.literal(a).default(a);
+
+console.log(b);
diff --git a/deno/lib/reference.ts b/deno/lib/reference.ts
new file mode 100644
index 0000000..9a992d0
--- /dev/null
+++ b/deno/lib/reference.ts
@@ -0,0 +1,33 @@
+import * as z from "./deps.ts";
+
+export class Reference extends z.ZodType<
+ T["_output"],
+ T["_def"],
+ T["_input"]
+> {
+ readonly reference: z.ZodTypeAny;
+ state: {
+ name?: string;
+ };
+ _parse(
+ _ctx: z.ParseContext,
+ _data: any,
+ _parsedType: z.ZodParsedType
+ ): z.ParseReturnType {
+ return this.reference._parse(_ctx, _data, _parsedType);
+ }
+
+ constructor(name: string, type: T) {
+ super(type._def);
+ this.reference = type;
+ this.state = { name };
+ }
+
+ public toJSON = () => this._def;
+
+ static create(name: string, type: T) {
+ return new Reference(name, type);
+ }
+}
+
+export const reference = Reference.create;
diff --git a/deno/lib/utils.ts b/deno/lib/utils.ts
new file mode 100644
index 0000000..ecb43f2
--- /dev/null
+++ b/deno/lib/utils.ts
@@ -0,0 +1,3 @@
+export type PickUnion = T extends any
+ ? { [P in K]: T[P] }
+ : never;
diff --git a/deno/lib/utils/openapi3-ts/OpenApi.ts b/deno/lib/utils/openapi3-ts/OpenApi.ts
new file mode 100644
index 0000000..340792f
--- /dev/null
+++ b/deno/lib/utils/openapi3-ts/OpenApi.ts
@@ -0,0 +1,380 @@
+// Typed interfaces for OpenAPI 3.0.0-RC
+// see https://github.com/OAI/OpenAPI-Specification/blob/3.0.0-rc0/versions/3.0.md
+
+import {
+ ISpecificationExtension,
+ SpecificationExtension,
+} from "./SpecificationExtension.ts";
+
+export function getExtension(
+ obj: ISpecificationExtension,
+ extensionName: string
+): any {
+ if (SpecificationExtension.isValidExtension(extensionName)) {
+ return obj[extensionName];
+ }
+ return undefined;
+}
+export function addExtension(
+ obj: ISpecificationExtension,
+ extensionName: string,
+ extension: any
+): void {
+ if (SpecificationExtension.isValidExtension(extensionName)) {
+ obj[extensionName] = extension;
+ }
+}
+
+export interface OpenAPIObject extends ISpecificationExtension {
+ openapi: string;
+ info: InfoObject;
+ servers?: ServerObject[];
+ paths: PathsObject;
+ components?: ComponentsObject;
+ security?: SecurityRequirementObject[];
+ tags?: TagObject[];
+ externalDocs?: ExternalDocumentationObject;
+}
+export interface InfoObject extends ISpecificationExtension {
+ title: string;
+ description?: string;
+ termsOfService?: string;
+ contact?: ContactObject;
+ license?: LicenseObject;
+ version: string;
+}
+export interface ContactObject extends ISpecificationExtension {
+ name?: string;
+ url?: string;
+ email?: string;
+}
+export interface LicenseObject extends ISpecificationExtension {
+ name: string;
+ url?: string;
+}
+export interface ServerObject extends ISpecificationExtension {
+ url: string;
+ description?: string;
+ variables?: { [v: string]: ServerVariableObject };
+}
+export interface ServerVariableObject extends ISpecificationExtension {
+ enum?: string[] | boolean[] | number[];
+ default: string | boolean | number;
+ description?: string;
+}
+export interface ComponentsObject extends ISpecificationExtension {
+ schemas?: { [schema: string]: SchemaObject | ReferenceObject };
+ responses?: { [response: string]: ResponseObject | ReferenceObject };
+ parameters?: { [parameter: string]: ParameterObject | ReferenceObject };
+ examples?: { [example: string]: ExampleObject | ReferenceObject };
+ requestBodies?: { [request: string]: RequestBodyObject | ReferenceObject };
+ headers?: { [header: string]: HeaderObject | ReferenceObject };
+ securitySchemes?: {
+ [securityScheme: string]: SecuritySchemeObject | ReferenceObject;
+ };
+ links?: { [link: string]: LinkObject | ReferenceObject };
+ callbacks?: { [callback: string]: CallbackObject | ReferenceObject };
+}
+
+/**
+ * Rename it to Paths Object to be consistent with the spec
+ * See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#pathsObject
+ */
+export interface PathsObject extends ISpecificationExtension {
+ // [path: string]: PathItemObject;
+ [path: string]: PathItemObject | any; // Hack for allowing ISpecificationExtension
+}
+
+/**
+ * @deprecated
+ * Create a type alias for backward compatibility
+ */
+export type PathObject = PathsObject;
+
+export function getPath(
+ pathsObject: PathsObject,
+ path: string
+): PathItemObject | undefined {
+ if (SpecificationExtension.isValidExtension(path)) {
+ return undefined;
+ }
+ return pathsObject[path] as PathItemObject;
+}
+
+export interface PathItemObject extends ISpecificationExtension {
+ $ref?: string;
+ summary?: string;
+ description?: string;
+ get?: OperationObject;
+ put?: OperationObject;
+ post?: OperationObject;
+ delete?: OperationObject;
+ options?: OperationObject;
+ head?: OperationObject;
+ patch?: OperationObject;
+ trace?: OperationObject;
+ servers?: ServerObject[];
+ parameters?: (ParameterObject | ReferenceObject)[];
+}
+export interface OperationObject extends ISpecificationExtension {
+ tags?: (string | undefined)[];
+ summary?: string;
+ description?: string;
+ externalDocs?: ExternalDocumentationObject;
+ operationId?: string;
+ parameters?: (ParameterObject | ReferenceObject)[];
+ requestBody?: RequestBodyObject | ReferenceObject;
+ responses: ResponsesObject;
+ callbacks?: CallbacksObject;
+ deprecated?: boolean;
+ security?: SecurityRequirementObject[];
+ servers?: ServerObject[];
+}
+export interface ExternalDocumentationObject extends ISpecificationExtension {
+ description?: string;
+ url: string;
+}
+
+/**
+ * The location of a parameter.
+ * Possible values are "query", "header", "path" or "cookie".
+ * Specification:
+ * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#parameter-locations
+ */
+export type ParameterLocation = "query" | "header" | "path" | "cookie";
+
+/**
+ * The style of a parameter.
+ * Describes how the parameter value will be serialized.
+ * (serialization is not implemented yet)
+ * Specification:
+ * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#style-values
+ */
+export type ParameterStyle =
+ | "matrix"
+ | "label"
+ | "form"
+ | "simple"
+ | "spaceDelimited"
+ | "pipeDelimited"
+ | "deepObject";
+
+export interface BaseParameterObject extends ISpecificationExtension {
+ description?: string;
+ required?: boolean;
+ deprecated?: boolean;
+ allowEmptyValue?: boolean;
+
+ style?: ParameterStyle; // "matrix" | "label" | "form" | "simple" | "spaceDelimited" | "pipeDelimited" | "deepObject";
+ explode?: boolean;
+ allowReserved?: boolean;
+ schema?: SchemaObject | ReferenceObject;
+ examples?: { [param: string]: ExampleObject | ReferenceObject };
+ example?: any;
+ content?: ContentObject;
+}
+
+export interface ParameterObject extends BaseParameterObject {
+ name: string;
+ in: ParameterLocation; // "query" | "header" | "path" | "cookie";
+}
+export interface RequestBodyObject extends ISpecificationExtension {
+ description?: string;
+ content: ContentObject;
+ required?: boolean;
+}
+export interface ContentObject {
+ [mediatype: string]: MediaTypeObject;
+}
+export interface MediaTypeObject extends ISpecificationExtension {
+ schema?: SchemaObject | ReferenceObject;
+ examples?: ExamplesObject;
+ example?: any;
+ encoding?: EncodingObject;
+}
+export interface EncodingObject extends ISpecificationExtension {
+ // [property: string]: EncodingPropertyObject;
+ [property: string]: EncodingPropertyObject | any; // Hack for allowing ISpecificationExtension
+}
+export interface EncodingPropertyObject {
+ contentType?: string;
+ headers?: { [key: string]: HeaderObject | ReferenceObject };
+ style?: string;
+ explode?: boolean;
+ allowReserved?: boolean;
+ [key: string]: any; // (any) = Hack for allowing ISpecificationExtension
+}
+export interface ResponsesObject extends ISpecificationExtension {
+ default?: ResponseObject | ReferenceObject;
+
+ // [statuscode: string]: ResponseObject | ReferenceObject;
+ [statuscode: string]: ResponseObject | ReferenceObject | any; // (any) = Hack for allowing ISpecificationExtension
+}
+export interface ResponseObject extends ISpecificationExtension {
+ description: string;
+ headers?: HeadersObject;
+ content?: ContentObject;
+ links?: LinksObject;
+}
+export interface CallbacksObject extends ISpecificationExtension {
+ // [name: string]: CallbackObject | ReferenceObject;
+ [name: string]: CallbackObject | ReferenceObject | any; // Hack for allowing ISpecificationExtension
+}
+export interface CallbackObject extends ISpecificationExtension {
+ // [name: string]: PathItemObject;
+ [name: string]: PathItemObject | any; // Hack for allowing ISpecificationExtension
+}
+export interface HeadersObject {
+ [name: string]: HeaderObject | ReferenceObject;
+}
+export interface ExampleObject {
+ summary?: string;
+ description?: string;
+ value?: any;
+ externalValue?: string;
+ [property: string]: any; // Hack for allowing ISpecificationExtension
+}
+export interface LinksObject {
+ [name: string]: LinkObject | ReferenceObject;
+}
+export interface LinkObject extends ISpecificationExtension {
+ operationRef?: string;
+ operationId?: string;
+ parameters?: LinkParametersObject;
+ requestBody?: any | string;
+ description?: string;
+ server?: ServerObject;
+ [property: string]: any; // Hack for allowing ISpecificationExtension
+}
+export interface LinkParametersObject {
+ [name: string]: any | string;
+}
+export interface HeaderObject extends BaseParameterObject {}
+export interface TagObject extends ISpecificationExtension {
+ name: string;
+ description?: string;
+ externalDocs?: ExternalDocumentationObject;
+ [extension: string]: any; // Hack for allowing ISpecificationExtension
+}
+export interface ExamplesObject {
+ [name: string]: ExampleObject | ReferenceObject;
+}
+
+export interface ReferenceObject {
+ $ref: string;
+}
+
+/**
+ * A type guard to check if the given value is a `ReferenceObject`.
+ * See https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types
+ *
+ * @param obj The value to check.
+ */
+export function isReferenceObject(obj: object): obj is ReferenceObject {
+ /* eslint-disable-next-line no-prototype-builtins */
+ return obj.hasOwnProperty("$ref");
+}
+
+export interface SchemaObject extends ISpecificationExtension {
+ nullable?: boolean;
+ discriminator?: DiscriminatorObject;
+ readOnly?: boolean;
+ writeOnly?: boolean;
+ xml?: XmlObject;
+ externalDocs?: ExternalDocumentationObject;
+ example?: any;
+ examples?: any[];
+ deprecated?: boolean;
+
+ type?: string;
+ allOf?: (SchemaObject | ReferenceObject)[];
+ oneOf?: (SchemaObject | ReferenceObject)[];
+ anyOf?: (SchemaObject | ReferenceObject)[];
+ not?: SchemaObject | ReferenceObject;
+ items?: SchemaObject | ReferenceObject;
+ properties?: { [propertyName: string]: SchemaObject | ReferenceObject };
+ additionalProperties?: SchemaObject | ReferenceObject | boolean;
+ description?: string;
+ format?: string;
+ default?: any;
+
+ title?: string;
+ multipleOf?: number;
+ maximum?: number;
+ exclusiveMaximum?: boolean;
+ minimum?: number;
+ exclusiveMinimum?: boolean;
+ maxLength?: number;
+ minLength?: number;
+ pattern?: string;
+ maxItems?: number;
+ minItems?: number;
+ uniqueItems?: boolean;
+ maxProperties?: number;
+ minProperties?: number;
+ required?: string[];
+ enum?: any[];
+}
+
+/**
+ * A type guard to check if the given object is a `SchemaObject`.
+ * Useful to distinguish from `ReferenceObject` values that can be used
+ * in most places where `SchemaObject` is allowed.
+ *
+ * See https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types
+ *
+ * @param schema The value to check.
+ */
+export function isSchemaObject(
+ schema: SchemaObject | ReferenceObject
+): schema is SchemaObject {
+ /* eslint-disable-next-line no-prototype-builtins */
+ return !schema.hasOwnProperty("$ref");
+}
+
+export interface SchemasObject {
+ [schema: string]: SchemaObject;
+}
+
+export interface DiscriminatorObject {
+ propertyName: string;
+ mapping?: { [key: string]: string };
+}
+
+export interface XmlObject extends ISpecificationExtension {
+ name?: string;
+ namespace?: string;
+ prefix?: string;
+ attribute?: boolean;
+ wrapped?: boolean;
+}
+export type SecuritySchemeType = "apiKey" | "http" | "oauth2" | "openIdConnect";
+
+export interface SecuritySchemeObject extends ISpecificationExtension {
+ type: SecuritySchemeType;
+ description?: string;
+ name?: string; // required only for apiKey
+ in?: string; // required only for apiKey
+ scheme?: string; // required only for http
+ bearerFormat?: string;
+ flows?: OAuthFlowsObject; // required only for oauth2
+ openIdConnectUrl?: string; // required only for openIdConnect
+}
+export interface OAuthFlowsObject extends ISpecificationExtension {
+ implicit?: OAuthFlowObject;
+ password?: OAuthFlowObject;
+ clientCredentials?: OAuthFlowObject;
+ authorizationCode?: OAuthFlowObject;
+}
+export interface OAuthFlowObject extends ISpecificationExtension {
+ authorizationUrl?: string;
+ tokenUrl?: string;
+ refreshUrl?: string;
+ scopes: ScopesObject;
+}
+export interface ScopesObject extends ISpecificationExtension {
+ [scope: string]: any; // Hack for allowing ISpecificationExtension
+}
+export interface SecurityRequirementObject {
+ [name: string]: string[];
+}
diff --git a/deno/lib/utils/openapi3-ts/SpecificationExtension.ts b/deno/lib/utils/openapi3-ts/SpecificationExtension.ts
new file mode 100644
index 0000000..53553b0
--- /dev/null
+++ b/deno/lib/utils/openapi3-ts/SpecificationExtension.ts
@@ -0,0 +1,55 @@
+// Suport for Specification Extensions
+// as described in
+// https://github.com/OAI/OpenAPI-Specification/blob/3.0.0-rc0/versions/3.0.md#specificationExtensions
+
+// Specification Extensions
+// ^x-
+export interface ISpecificationExtension {
+ // Cannot constraint to "^x-" but can filter them later to access to them
+ [extensionName: string]: any;
+}
+
+export class SpecificationExtension implements ISpecificationExtension {
+ // Cannot constraint to "^x-" but can filter them later to access to them
+ [extensionName: string]: any;
+
+ static isValidExtension(extensionName: string) {
+ return /^x\-/.test(extensionName);
+ }
+
+ getExtension(extensionName: string): any {
+ if (!SpecificationExtension.isValidExtension(extensionName)) {
+ throw new Error(
+ "Invalid specification extension: '" +
+ extensionName +
+ "'. Extensions must start with prefix 'x-"
+ );
+ }
+ if (this[extensionName]) {
+ return this[extensionName];
+ }
+ return null;
+ }
+ addExtension(extensionName: string, payload: any): void {
+ if (!SpecificationExtension.isValidExtension(extensionName)) {
+ throw new Error(
+ "Invalid specification extension: '" +
+ extensionName +
+ "'. Extensions must start with prefix 'x-"
+ );
+ }
+ this[extensionName] = payload;
+ }
+ listExtensions(): string[] {
+ const res: string[] = [];
+ for (const propName in this) {
+ /* eslint-disable-next-line no-prototype-builtins */
+ if (this.hasOwnProperty(propName)) {
+ if (SpecificationExtension.isValidExtension(propName)) {
+ res.push(propName);
+ }
+ }
+ }
+ return res;
+ }
+}
diff --git a/deno_scripts/UpdateModTs.js b/deno_scripts/UpdateModTs.js
deleted file mode 100644
index 08f31b6..0000000
--- a/deno_scripts/UpdateModTs.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const path = require("path")
-const fs = require("fs")
-
-const data = `export * from "./index.ts";`
-
-const dir = path.join(__dirname, `/../deno_lib`)
-console.log(dir)
-fs.writeFile(path.join(dir, './mod.ts'), data, (err) => {
- if (err) {return console.log(err)}
-})
\ No newline at end of file
diff --git a/deno_scripts/UpdateTestImports.js b/deno_scripts/UpdateTestImports.js
deleted file mode 100644
index d152930..0000000
--- a/deno_scripts/UpdateTestImports.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const path = require("path")
-const fs = require("fs")
-
-const imp = `
-const test = Deno.test;
-import { expect } from "https://deno.land/x/expect/mod.ts";
-`.trim()
-
-const dir = path.join(__dirname, `/../deno_lib/__tests__`)
-console.log(dir)
-fs.readdir(dir, (err, files) => {
- if (err) {
- return console.log(err)
- }
- files.map(file => {
- fs.readFile(path.join(dir, file), 'utf8', function (err, data) {
- if (err) {
- return console.log(err)
- }
- if (!file.endsWith('.ts')) {
- return console.log(`only convert ts files '${file}'`)
- }
- fs.writeFile(path.join(dir, file), imp + data, (err) => {
- if (err) {
- return console.log(err)
- }
- })
- });
- })
-
-
-})
\ No newline at end of file
diff --git a/jest.config.json b/jest.config.json
index 37e7a67..86293d8 100644
--- a/jest.config.json
+++ b/jest.config.json
@@ -1,9 +1,9 @@
{
- "rootDir": "src",
+ "rootDir": ".",
"transform": {
- "^.+\\.(t|j)sx?$": "ts-jest"
+ "^.+\\.tsx?$": "ts-jest"
},
- "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
+ "testRegex": "src/.*\\.test\\.ts$",
"moduleFileExtensions": [
"ts",
"tsx",
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 7d448e6..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,6254 +0,0 @@
-{
- "name": "zod-endpoints",
- "version": "0.0.16",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/core": {
- "version": "7.12.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
- "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.1",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.1",
- "@babel/parser": "^7.12.3",
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.12.1",
- "@babel/types": "^7.12.1",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
- "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.5",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz",
- "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.1"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
- "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.5"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
- "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.12.1",
- "@babel/helper-replace-supers": "^7.12.1",
- "@babel/helper-simple-access": "^7.12.1",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/helper-validator-identifier": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.12.1",
- "@babel/types": "^7.12.1",
- "lodash": "^4.17.19"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
- "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "@babel/helper-replace-supers": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
- "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.12.1",
- "@babel/helper-optimise-call-expression": "^7.10.4",
- "@babel/traverse": "^7.12.5",
- "@babel/types": "^7.12.5"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
- "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.1"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
- "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.11.0"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
- "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.12.5",
- "@babel/types": "^7.12.5"
- }
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
- "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==",
- "dev": true
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz",
- "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz",
- "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
- "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.11.0",
- "@babel/parser": "^7.12.5",
- "@babel/types": "^7.12.5",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
- }
- },
- "@babel/types": {
- "version": "7.12.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
- "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.19",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
- },
- "@cnakazawa/watch": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
- "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
- "dev": true,
- "requires": {
- "exec-sh": "^0.3.2",
- "minimist": "^1.2.0"
- }
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
- "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
- "dev": true
- },
- "@jest/console": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz",
- "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^26.6.2",
- "jest-util": "^26.6.2",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "@jest/core": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
- "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/reporters": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^26.6.2",
- "jest-config": "^26.6.3",
- "jest-haste-map": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-resolve-dependencies": "^26.6.3",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "jest-watcher": "^26.6.2",
- "micromatch": "^4.0.2",
- "p-each-series": "^2.1.0",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "@jest/create-cache-key-function": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-26.6.2.tgz",
- "integrity": "sha512-LgEuqU1f/7WEIPYqwLPIvvHuc1sB6gMVbT6zWhin3txYUNYK/kGQrC1F2WR4gR34YlI9bBtViTm5z98RqVZAaw==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2"
- },
- "dependencies": {
- "@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- }
- },
- "@types/istanbul-reports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
- "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "@jest/environment": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
- "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
- "dev": true,
- "requires": {
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2"
- }
- },
- "@jest/fake-timers": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
- "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@sinonjs/fake-timers": "^6.0.1",
- "@types/node": "*",
- "jest-message-util": "^26.6.2",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2"
- }
- },
- "@jest/globals": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
- "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.6.2",
- "@jest/types": "^26.6.2",
- "expect": "^26.6.2"
- }
- },
- "@jest/reporters": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
- "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
- "dev": true,
- "requires": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "node-notifier": "^8.0.0",
- "slash": "^3.0.0",
- "source-map": "^0.6.0",
- "string-length": "^4.0.1",
- "terminal-link": "^2.0.0",
- "v8-to-istanbul": "^7.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "@jest/source-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
- "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
- }
- },
- "@jest/test-result": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
- "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- }
- },
- "@jest/test-sequencer": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
- "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^26.6.2",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3"
- }
- },
- "@jest/transform": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
- "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.6.2",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.6.2",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "@octokit/auth-token": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.3.tgz",
- "integrity": "sha512-fdGoOQ3kQJh+hrilc0Plg50xSfaCKOeYN9t6dpJKXN9BxhhfquL0OzoQXg3spLYymL5rm29uPeI3KEXRaZQ9zg==",
- "dev": true,
- "requires": {
- "@octokit/types": "^5.0.0"
- }
- },
- "@octokit/core": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.2.1.tgz",
- "integrity": "sha512-XfFSDDwv6tclUenS0EmB6iA7u+4aOHBT1Lz4PtQNQQg3hBbNaR/+Uv5URU+egeIuuGAiMRiDyY92G4GBOWOqDA==",
- "dev": true,
- "requires": {
- "@octokit/auth-token": "^2.4.0",
- "@octokit/graphql": "^4.3.1",
- "@octokit/request": "^5.4.0",
- "@octokit/types": "^5.0.0",
- "before-after-hook": "^2.1.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "@octokit/endpoint": {
- "version": "6.0.9",
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.9.tgz",
- "integrity": "sha512-3VPLbcCuqji4IFTclNUtGdp9v7g+nspWdiCUbK3+iPMjJCZ6LEhn1ts626bWLOn0GiDb6j+uqGvPpqLnY7pBgw==",
- "dev": true,
- "requires": {
- "@octokit/types": "^5.0.0",
- "is-plain-object": "^5.0.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "@octokit/graphql": {
- "version": "4.5.7",
- "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.7.tgz",
- "integrity": "sha512-Gk0AR+DcwIK/lK/GX+OQ99UqtenQhcbrhHHfOYlrCQe17ADnX3EKAOKRsAZ9qZvpi5MuwWm/Nm+9aO2kTDSdyA==",
- "dev": true,
- "requires": {
- "@octokit/request": "^5.3.0",
- "@octokit/types": "^5.0.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "@octokit/plugin-paginate-rest": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.6.0.tgz",
- "integrity": "sha512-o+O8c1PqsC5++BHXfMZabRRsBIVb34tXPWyQLyp2IXq5MmkxdipS7TXM4Y9ldL1PzY9CTrCsn/lzFFJGM3oRRA==",
- "dev": true,
- "requires": {
- "@octokit/types": "^5.5.0"
- }
- },
- "@octokit/plugin-request-log": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz",
- "integrity": "sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg==",
- "dev": true
- },
- "@octokit/plugin-rest-endpoint-methods": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.2.1.tgz",
- "integrity": "sha512-QyFr4Bv807Pt1DXZOC5a7L5aFdrwz71UHTYoHVajYV5hsqffWm8FUl9+O7nxRu5PDMtB/IKrhFqTmdBTK5cx+A==",
- "dev": true,
- "requires": {
- "@octokit/types": "^5.5.0",
- "deprecation": "^2.3.1"
- }
- },
- "@octokit/request": {
- "version": "5.4.10",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.10.tgz",
- "integrity": "sha512-egA49HkqEORVGDZGav1mh+VD+7uLgOxtn5oODj6guJk0HCy+YBSYapFkSLFgeYj3Fr18ZULKGURkjyhkAChylw==",
- "dev": true,
- "requires": {
- "@octokit/endpoint": "^6.0.1",
- "@octokit/request-error": "^2.0.0",
- "@octokit/types": "^5.0.0",
- "deprecation": "^2.0.0",
- "is-plain-object": "^5.0.0",
- "node-fetch": "^2.6.1",
- "once": "^1.4.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "@octokit/request-error": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.3.tgz",
- "integrity": "sha512-GgD5z8Btm301i2zfvJLk/mkhvGCdjQ7wT8xF9ov5noQY8WbKZDH9cOBqXzoeKd1mLr1xH2FwbtGso135zGBgTA==",
- "dev": true,
- "requires": {
- "@octokit/types": "^5.0.1",
- "deprecation": "^2.0.0",
- "once": "^1.4.0"
- }
- },
- "@octokit/rest": {
- "version": "18.0.9",
- "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.9.tgz",
- "integrity": "sha512-CC5+cIx974Ygx9lQNfUn7/oXDQ9kqGiKUC6j1A9bAVZZ7aoTF8K6yxu0pQhQrLBwSl92J6Z3iVDhGhGFgISCZg==",
- "dev": true,
- "requires": {
- "@octokit/core": "^3.0.0",
- "@octokit/plugin-paginate-rest": "^2.2.0",
- "@octokit/plugin-request-log": "^1.0.0",
- "@octokit/plugin-rest-endpoint-methods": "4.2.1"
- }
- },
- "@octokit/types": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.5.0.tgz",
- "integrity": "sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ==",
- "dev": true,
- "requires": {
- "@types/node": ">= 8"
- }
- },
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
- "dev": true
- },
- "@sinonjs/commons": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz",
- "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "dev": true,
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
- },
- "@types/babel__core": {
- "version": "7.1.12",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz",
- "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "@types/babel__generator": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
- "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__template": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.3.tgz",
- "integrity": "sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__traverse": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz",
- "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0"
- }
- },
- "@types/comment-json": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/comment-json/-/comment-json-1.1.1.tgz",
- "integrity": "sha512-U70oEqvnkeSSp8BIJwJclERtT13rd9ejK7XkIzMCQQePZe3VW1b7iQggXyW4ZvfGtGeXD0pZw24q5iWNe++HqQ==",
- "dev": true
- },
- "@types/graceful-fs": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz",
- "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
- "dev": true
- },
- "@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "@types/istanbul-reports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
- "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "@types/jest": {
- "version": "26.0.15",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz",
- "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==",
- "dev": true,
- "requires": {
- "jest-diff": "^26.0.0",
- "pretty-format": "^26.0.0"
- }
- },
- "@types/node": {
- "version": "14.14.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz",
- "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==",
- "dev": true
- },
- "@types/normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
- "dev": true
- },
- "@types/prettier": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz",
- "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==",
- "dev": true
- },
- "@types/stack-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
- "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
- "dev": true
- },
- "@types/yargs": {
- "version": "15.0.9",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz",
- "integrity": "sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "@types/yargs-parser": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
- "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==",
- "dev": true
- },
- "abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "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-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "dev": true,
- "requires": {
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
- "dev": true
- },
- "babel-jest": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
- "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
- "dev": true,
- "requires": {
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/babel__core": "^7.1.7",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^26.6.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
- "test-exclude": "^6.0.0"
- }
- },
- "babel-plugin-jest-hoist": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
- "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
- }
- },
- "babel-preset-current-node-syntax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz",
- "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==",
- "dev": true,
- "requires": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
- }
- },
- "babel-preset-jest": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
- "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
- "dev": true,
- "requires": {
- "babel-plugin-jest-hoist": "^26.6.2",
- "babel-preset-current-node-syntax": "^1.0.0"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "before-after-hook": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz",
- "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
- "dev": true
- },
- "boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "bs-logger": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
- "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
- "dev": true,
- "requires": {
- "fast-json-stable-stringify": "2.x"
- }
- },
- "bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "requires": {
- "node-int64": "^0.4.0"
- }
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "dev": true,
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "dev": true
- }
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "capture-exit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
- "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
- "dev": true,
- "requires": {
- "rsvp": "^4.8.4"
- }
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true
- },
- "chokidar": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
- "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.1.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
- },
- "dependencies": {
- "fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "dev": true,
- "optional": true
- }
- }
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "cjs-module-lexer": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz",
- "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==",
- "dev": true
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "dev": true
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true
- },
- "comment-json": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-3.0.3.tgz",
- "integrity": "sha512-P7XwYkC3qjIK45EAa9c5Y3lR7SMXhJqwFdWg3niAIAcbk3zlpKDdajV8Hyz/Y3sGNn3l+YNMl8A2N/OubSArHg==",
- "dev": true,
- "requires": {
- "core-util-is": "^1.0.2",
- "esprima": "^4.0.1",
- "has-own-prop": "^2.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dev": true,
- "requires": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- }
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "dev": true
- },
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
- "debug": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
- "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decimal.js": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz",
- "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==",
- "dev": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true
- },
- "defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
- "dev": true
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "denoify": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/denoify/-/denoify-0.6.3.tgz",
- "integrity": "sha512-T9M8pm/ZQ590oqP734SJuNJ+RKNyrNBirId2Rkh/eoS0mFbtjgX0L7kvTlBjBP4EyPyveXX1gFeiL+tj1zSEBQ==",
- "dev": true,
- "requires": {
- "@octokit/rest": "^18.0.0",
- "@types/comment-json": "^1.1.1",
- "commander": "^4.1.1",
- "comment-json": "^3.0.2",
- "evt": "^1.9.2",
- "get-github-default-branch-name": "^0.0.4",
- "gitignore-parser": "0.0.2",
- "glob": "^7.1.6",
- "node-fetch": "^2.6.0",
- "path-depth": "^1.0.0",
- "scripting-tools": "^0.19.13",
- "url-join": "^4.0.1"
- }
- },
- "deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
- "dev": true
- },
- "detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true
- },
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- },
- "diff-sequences": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
- "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
- "dev": true
- },
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
- },
- "dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "dev": true,
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "emittery": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz",
- "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "evt": {
- "version": "1.9.9",
- "resolved": "https://registry.npmjs.org/evt/-/evt-1.9.9.tgz",
- "integrity": "sha512-BuUe/kqC5A2muTluEE0ZVG/F9loKCePm3T5zRgUo9UaHbxeu6bYXhCy9TILV8y4eOEEF7DICUuU0n36pp9wKSQ==",
- "dev": true,
- "requires": {
- "minimal-polyfills": "^2.1.5",
- "run-exclusive": "^2.2.14"
- }
- },
- "exec-sh": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
- "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
- "dev": true
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
- "dev": true
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "expect": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz",
- "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "ansi-styles": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-regex-util": "^26.0.0"
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
- "dev": true,
- "requires": {
- "bser": "2.1.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz",
- "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-github-default-branch-name": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/get-github-default-branch-name/-/get-github-default-branch-name-0.0.4.tgz",
- "integrity": "sha512-ltOGC9Jk0k8boe48Gk7SkJErwxt7MhwXtbNrBUyNCZcwcXSmGRdkKb2u0YO250PGvPsUtdqRjg7lVuIk1VtpCg==",
- "dev": true,
- "requires": {
- "@octokit/rest": "^18.0.0",
- "scripting-tools": "^0.19.12"
- }
- },
- "get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "gitignore-parser": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/gitignore-parser/-/gitignore-parser-0.0.2.tgz",
- "integrity": "sha1-9hJZuYXdkUFLmnFo+u+RccLuxd8=",
- "dev": true
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "global-dirs": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz",
- "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==",
- "dev": true,
- "requires": {
- "ini": "^1.3.5"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
- "dev": true
- },
- "growly": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
- "dev": true,
- "optional": true
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "has-own-prop": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz",
- "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
- "dev": true
- },
- "hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
- "dev": true
- },
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
- }
- },
- "html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
- "dev": true
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "dev": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-by-default": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
- "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
- "dev": true
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "dev": true
- },
- "import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
- },
- "ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-core-module": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
- "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
- "dev": true,
- "optional": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
- "dev": true,
- "requires": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
- }
- },
- "is-npm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
- "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "dev": true
- },
- "is-path-inside": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
- "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
- "dev": true
- },
- "is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "dev": true
- },
- "is-potential-custom-element-name": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
- "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "is-yarn-global": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
- "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- }
- },
- "istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "jest": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz",
- "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==",
- "dev": true,
- "requires": {
- "@jest/core": "^26.6.3",
- "import-local": "^3.0.2",
- "jest-cli": "^26.6.3"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "jest-cli": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
- "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
- "dev": true,
- "requires": {
- "@jest/core": "^26.6.3",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "is-ci": "^2.0.0",
- "jest-config": "^26.6.3",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "prompts": "^2.0.1",
- "yargs": "^15.4.1"
- }
- }
- }
- },
- "jest-changed-files": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
- "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "execa": "^4.0.0",
- "throat": "^5.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- }
- },
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "jest-config": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz",
- "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^26.6.3",
- "@jest/types": "^26.6.2",
- "babel-jest": "^26.6.3",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "jest-environment-jsdom": "^26.6.2",
- "jest-environment-node": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "jest-jasmine2": "^26.6.3",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "micromatch": "^4.0.2",
- "pretty-format": "^26.6.2"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-diff": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
- "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "diff-sequences": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-docblock": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz",
- "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==",
- "dev": true,
- "requires": {
- "detect-newline": "^3.0.0"
- }
- },
- "jest-each": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz",
- "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "jest-util": "^26.6.2",
- "pretty-format": "^26.6.2"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-environment-jsdom": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz",
- "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2",
- "jsdom": "^16.4.0"
- }
- },
- "jest-environment-node": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz",
- "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2"
- }
- },
- "jest-get-type": {
- "version": "26.3.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
- "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
- "dev": true
- },
- "jest-haste-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
- "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/graceful-fs": "^4.1.2",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "fsevents": "^2.1.2",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^26.0.0",
- "jest-serializer": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7"
- }
- },
- "jest-jasmine2": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz",
- "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^26.6.2",
- "@jest/source-map": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^26.6.2",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^26.6.2",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-runtime": "^26.6.3",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "pretty-format": "^26.6.2",
- "throat": "^5.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-leak-detector": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz",
- "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==",
- "dev": true,
- "requires": {
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
- }
- },
- "jest-matcher-utils": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz",
- "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "jest-diff": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-message-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz",
- "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@jest/types": "^26.6.2",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.2",
- "pretty-format": "^26.6.2",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.2"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-mock": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
- "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/node": "*"
- }
- },
- "jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true
- },
- "jest-regex-util": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
- "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
- "dev": true
- },
- "jest-resolve": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
- "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^26.6.2",
- "read-pkg-up": "^7.0.1",
- "resolve": "^1.18.1",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-resolve-dependencies": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz",
- "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-snapshot": "^26.6.2"
- }
- },
- "jest-runner": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz",
- "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/environment": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.7.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.6.3",
- "jest-docblock": "^26.0.0",
- "jest-haste-map": "^26.6.2",
- "jest-leak-detector": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "jest-runtime": "^26.6.3",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "source-map-support": "^0.5.6",
- "throat": "^5.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-runtime": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz",
- "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/globals": "^26.6.2",
- "@jest/source-map": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^0.6.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.6.3",
- "jest-haste-map": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-mock": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^15.4.1"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-serializer": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
- "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
- }
- },
- "jest-snapshot": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz",
- "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0",
- "@jest/types": "^26.6.2",
- "@types/babel__traverse": "^7.0.4",
- "@types/prettier": "^2.0.0",
- "chalk": "^4.0.0",
- "expect": "^26.6.2",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "jest-haste-map": "^26.6.2",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "natural-compare": "^1.4.0",
- "pretty-format": "^26.6.2",
- "semver": "^7.3.2"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- }
- }
- },
- "jest-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
- "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "micromatch": "^4.0.2"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-validate": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
- "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "camelcase": "^6.0.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "leven": "^3.1.0",
- "pretty-format": "^26.6.2"
- },
- "dependencies": {
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-watcher": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz",
- "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^26.6.2",
- "string-length": "^4.0.1"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
- }
- },
- "jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
- "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
- "jsdom": {
- "version": "16.4.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz",
- "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "acorn": "^7.1.1",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.2.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.0",
- "domexception": "^2.0.1",
- "escodegen": "^1.14.1",
- "html-encoding-sniffer": "^2.0.1",
- "is-potential-custom-element-name": "^1.0.0",
- "nwsapi": "^2.2.0",
- "parse5": "5.1.1",
- "request": "^2.88.2",
- "request-promise-native": "^1.0.8",
- "saxes": "^5.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^3.0.1",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0",
- "ws": "^7.2.3",
- "xml-name-validator": "^3.0.0"
- }
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
- "dev": true
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json5": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
- "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
- "latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
- "dev": true,
- "requires": {
- "package-json": "^6.3.0"
- }
- },
- "leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
- "dev": true
- },
- "lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
- "dev": true
- },
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true
- },
- "make-coverage-badge": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/make-coverage-badge/-/make-coverage-badge-1.2.0.tgz",
- "integrity": "sha512-nA1eQZJ9vcY2UoQLVIdzqyRoNtAZHWlXJfrHkaMB/pQgTYBPmbImkykfxWeAtUQuLJXzb6eAhbR7nEgrt+S7FA==",
- "dev": true,
- "requires": {
- "mri": "1.1.4"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
- "dev": true,
- "requires": {
- "tmpl": "1.0.x"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- }
- },
- "mime-db": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
- "dev": true,
- "requires": {
- "mime-db": "1.44.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- },
- "minimal-polyfills": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/minimal-polyfills/-/minimal-polyfills-2.1.5.tgz",
- "integrity": "sha512-VUpTs1DaSA/M90eZ2yhl9WBSsaY0RG5V+Qo+NDd/Z6c0p4JzfHg4Vh5U+9U/8iuGt7S/9m2+LMLBaiaFg5QM5w==",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "mri": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz",
- "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
- "dev": true
- },
- "node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
- },
- "node-notifier": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz",
- "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==",
- "dev": true,
- "optional": true,
- "requires": {
- "growly": "^1.3.0",
- "is-wsl": "^2.2.0",
- "semver": "^7.3.2",
- "shellwords": "^0.1.1",
- "uuid": "^8.3.0",
- "which": "^2.0.2"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true,
- "optional": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "optional": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "nodemon": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz",
- "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==",
- "dev": true,
- "requires": {
- "chokidar": "^3.2.2",
- "debug": "^3.2.6",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.0.4",
- "pstree.remy": "^1.1.7",
- "semver": "^5.7.1",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.3",
- "update-notifier": "^4.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
- "dev": true
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "dev": true
- },
- "p-each-series": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz",
- "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "dev": true,
- "requires": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- }
- },
- "parse-json": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
- "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- },
- "parse5": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
- "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-depth": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/path-depth/-/path-depth-1.0.0.tgz",
- "integrity": "sha512-dEiwdXAQyLvOi6ktLqhFhjVelJiVsdp2xBX3BaUtYCCkMRZTwUiq7cha+A0myvAVXRHbXfjhfTf4mNoAWzm2iA==",
- "dev": true
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "dev": true
- },
- "pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true
- },
- "prettier": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
- "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
- "dev": true
- },
- "pretty-format": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
- "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^4.0.0",
- "react-is": "^17.0.1"
- }
- },
- "prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
- "pstree.remy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
- "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dev": true,
- "requires": {
- "escape-goat": "^2.0.0"
- }
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "react-is": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
- "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==",
- "dev": true
- },
- "read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
- }
- }
- },
- "read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- }
- },
- "readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "registry-auth-token": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
- "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "registry-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- }
- }
- },
- "request-promise-core": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
- "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.19"
- }
- },
- "request-promise-native": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
- "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
- "dev": true,
- "requires": {
- "request-promise-core": "1.1.4",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
- },
- "dependencies": {
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "resolve": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
- "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.0.0",
- "path-parse": "^1.0.6"
- }
- },
- "resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "requires": {
- "resolve-from": "^5.0.0"
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dev": true,
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "dev": true
- },
- "run-exclusive": {
- "version": "2.2.14",
- "resolved": "https://registry.npmjs.org/run-exclusive/-/run-exclusive-2.2.14.tgz",
- "integrity": "sha512-NHaQfB3zPJFx7p4M06AcmoK8xz/h8YDMCdy3jxfyoC9VqIbl1U+DiVjUuAYZBRMwvj5qkQnOUGfsmyUC4k46dg==",
- "dev": true,
- "requires": {
- "minimal-polyfills": "^2.1.5"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "sane": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
- "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
- "dev": true,
- "requires": {
- "@cnakazawa/watch": "^1.0.3",
- "anymatch": "^2.0.0",
- "capture-exit": "^2.0.0",
- "exec-sh": "^0.3.2",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5"
- },
- "dependencies": {
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
- "scripting-tools": {
- "version": "0.19.13",
- "resolved": "https://registry.npmjs.org/scripting-tools/-/scripting-tools-0.19.13.tgz",
- "integrity": "sha512-d09H8vzSVa8p4XUTJqHZDbjKDyl5TG3SyPfNPUUkfyOwjwykStmfK8AXyWq7VRWjcgzTpkTiJ9uMk1NytMQY7w==",
- "dev": true
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
- "dev": true,
- "requires": {
- "semver": "^6.3.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- }
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "shellwords": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
- "dev": true
- },
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz",
- "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "stack-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz",
- "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^2.0.0"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- }
- }
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
- "dev": true
- },
- "string-length": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz",
- "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==",
- "dev": true,
- "requires": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- }
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "supports-hyperlinks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
- "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- }
- },
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true
- },
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- }
- },
- "test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "requires": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- }
- },
- "throat": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
- "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
- "dev": true
- },
- "tmpl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
- "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
- "dev": true
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "touch": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
- "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
- "dev": true,
- "requires": {
- "nopt": "~1.0.10"
- }
- },
- "tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
- "dev": true,
- "requires": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "tr46": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
- "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
- "ts-jest": {
- "version": "26.4.3",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.3.tgz",
- "integrity": "sha512-pFDkOKFGY+nL9v5pkhm+BIFpoAuno96ff7GMnIYr/3L6slFOS365SI0fGEVYx2RKGji5M2elxhWjDMPVcOCdSw==",
- "dev": true,
- "requires": {
- "@jest/create-cache-key-function": "^26.5.0",
- "@types/jest": "26.x",
- "bs-logger": "0.x",
- "buffer-from": "1.x",
- "fast-json-stable-stringify": "2.x",
- "jest-util": "^26.1.0",
- "json5": "2.x",
- "lodash.memoize": "4.x",
- "make-error": "1.x",
- "mkdirp": "1.x",
- "semver": "7.x",
- "yargs-parser": "20.x"
- },
- "dependencies": {
- "@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- }
- },
- "@types/istanbul-reports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
- "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "@types/jest": {
- "version": "26.0.15",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz",
- "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==",
- "dev": true,
- "requires": {
- "jest-diff": "^26.0.0",
- "pretty-format": "^26.0.0"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "diff-sequences": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
- "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
- "dev": true
- },
- "jest-diff": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
- "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "diff-sequences": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
- }
- },
- "jest-get-type": {
- "version": "26.3.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
- "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
- "dev": true
- },
- "jest-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
- "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "micromatch": "^4.0.2"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- },
- "pretty-format": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
- "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^4.0.0",
- "react-is": "^17.0.1"
- }
- },
- "react-is": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
- "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==",
- "dev": true
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- },
- "yargs-parser": {
- "version": "20.2.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz",
- "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==",
- "dev": true
- }
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "tslint": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz",
- "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "builtin-modules": "^1.1.1",
- "chalk": "^2.3.0",
- "commander": "^2.12.1",
- "diff": "^4.0.1",
- "glob": "^7.1.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.3",
- "resolve": "^1.3.2",
- "semver": "^5.3.0",
- "tslib": "^1.13.0",
- "tsutils": "^2.29.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "tslint-config-prettier": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz",
- "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==",
- "dev": true
- },
- "tsutils": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
- "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
- "dev": true,
- "requires": {
- "tslib": "^1.8.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "typescript": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
- "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
- "dev": true
- },
- "undefsafe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
- "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
- "dev": true,
- "requires": {
- "debug": "^2.2.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- }
- },
- "unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dev": true,
- "requires": {
- "crypto-random-string": "^2.0.0"
- }
- },
- "universal-user-agent": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
- "dev": true
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- }
- }
- },
- "update-notifier": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
- "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
- "dev": true,
- "requires": {
- "boxen": "^4.2.0",
- "chalk": "^3.0.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^4.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- }
- },
- "uri-js": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
- "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url-join": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
- "dev": true
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "dev": true,
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "uuid": {
- "version": "8.3.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz",
- "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==",
- "dev": true,
- "optional": true
- },
- "v8-to-istanbul": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz",
- "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
- "walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "requires": {
- "makeerror": "1.0.x"
- }
- },
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz",
- "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==",
- "dev": true,
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^2.0.2",
- "webidl-conversions": "^6.1.0"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "requires": {
- "string-width": "^4.0.0"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "ws": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
- "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==",
- "dev": true
- },
- "xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "dev": true
- },
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "zod": {
- "version": "2.0.0-beta.20",
- "resolved": "https://registry.npmjs.org/zod/-/zod-2.0.0-beta.20.tgz",
- "integrity": "sha512-9CrKzCFzxZE500BcquhOq64q0R6AMfl8r4nD+XxKzzkMFwtx9ssSBD3isU4r64TJ+J8IgJ9rrM1J/VVHJIX4iA=="
- }
- }
-}
diff --git a/package.json b/package.json
index 426a086..8e1306c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "zod-endpoints",
- "version": "0.0.22",
+ "version": "0.1.0",
"description": "Typescript contract first strictly typed endpoints",
"main": "./lib/cjs/index.js",
"types": "./lib/cjs/index.d.ts",
@@ -20,7 +20,7 @@
},
"homepage": "https://github.com/flock-community/zod-endpoints",
"dependencies": {
- "zod": "^2.0.0-beta.20"
+ "zod": "3.5.1"
},
"keywords": [
"openapi",
@@ -29,34 +29,64 @@
"zod"
],
"scripts": {
- "clean": "rm -rf lib/cjs && rm -rf lib/esm",
- "build": "yarn run clean && tsc --p tsconfig.cjs.json && tsc --p tsconfig.esm.json",
- "format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
- "lint": "tslint -p tsconfig.json",
- "test": "jest",
+ "check:format": "prettier --check \"src/**/*.ts\" \"deno/lib/**/*.ts\"",
+ "fix:format": "prettier --write \"src/**/*.ts\" \"deno/lib/**/*.ts\"",
+ "check:lint": "eslint --ext .ts ./src",
+ "fix:lint": "eslint --fix --ext .ts ./src",
+ "check": "yarn check:lint && yarn check:format",
+ "fix": "yarn fix:lint && yarn fix:format",
+ "clean": "rm -rf lib/* deno/lib/*",
+ "build": "yarn run clean && npm run build:cjs && npm run build:esm && npm run build:deno",
+ "build:deno": "node ./deno/build.mjs",
+ "build:esm": "rollup --config rollup.config.js",
+ "build:cjs": "tsc --p tsconfig.cjs.json",
+ "build:types": "tsc --p tsconfig.types.json",
+ "rollup": "rollup --config rollup.config.js",
+ "test": "node --trace-warnings node_modules/.bin/jest --coverage && yarn run badge",
"testone": "jest",
- "badge": "make-coverage-badge --report-path ./src/coverage/coverage-summary.json --output-path ./coverage.svg",
- "deno_clean": "rm -rf deno_lib && rm -rf lib/deno",
- "deno_build": "yarn run deno_clean && denoify && node deno_scripts/UpdateTestImports.js && node deno_scripts/UpdateModTs.js && mv deno_lib lib/deno",
- "deno_test": "deno test lib/deno/__tests__",
- "prepare": "npm run build && npm run deno_build",
- "all": "npm run build && npm run deno_build && npm run test && npm run deno_test"
+ "badge": "make-coverage-badge --output-path ./coverage.svg",
+ "prepublishOnly": "npm run test && npm run build && npm run build:deno",
+ "play": "nodemon -e ts -w . -x ts-node src/playground.ts --project tsconfig.json --trace-warnings",
+ "depcruise": "depcruise -c .dependency-cruiser.js src",
+ "benchmark": "ts-node src/benchmarks/index.ts"
},
"devDependencies": {
- "@types/jest": "^26.0.15",
- "denoify": "0.6.3",
+ "@rollup/plugin-typescript": "^8.2.0",
+ "@types/benchmark": "^2.1.0",
+ "@types/jest": "^26.0.17",
+ "@types/node": "^14.14.10",
+ "@typescript-eslint/eslint-plugin": "^4.11.1",
+ "@typescript-eslint/parser": "^4.11.1",
+ "benchmark": "^2.1.4",
+ "dependency-cruiser": "^9.19.0",
+ "eslint": "^7.15.0",
+ "eslint-config-prettier": "^7.1.0",
+ "eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-simple-import-sort": "^7.0.0",
+ "eslint-plugin-unused-imports": "^1.1.0",
+ "husky": "^4.3.4",
"jest": "^26.6.3",
+ "lint-staged": "^10.5.3",
"make-coverage-badge": "^1.2.0",
"nodemon": "^2.0.2",
- "prettier": "^1.19.1",
- "ts-jest": "^26.4.3",
- "tslint": "^6.1.0",
- "tslint-config-prettier": "^1.18.0",
- "typescript": "4.0"
+ "prettier": "^2.2.1",
+ "rollup": "^2.42.1",
+ "rollup-plugin-uglify": "^6.0.4",
+ "ts-jest": "^26.4.4",
+ "ts-node": "^9.1.0",
+ "tslib": "^2.1.0",
+ "typescript": "^4.3.2"
},
- "denoify": {
- "ports": {
- "zod": "https://raw.githubusercontent.com/flock-community/zod/v2_deno/deno_lib/index.ts"
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged && yarn build:deno && git add .",
+ "pre-push": "lint-staged && yarn build && yarn test"
}
+ },
+ "lint-staged": {
+ "*.ts": [
+ "yarn fix:lint",
+ "yarn fix:format"
+ ]
}
}
diff --git a/rollup.config.js b/rollup.config.js
new file mode 100644
index 0000000..5ee9288
--- /dev/null
+++ b/rollup.config.js
@@ -0,0 +1,23 @@
+// rollup.config.js
+import typescript from "@rollup/plugin-typescript";
+import { uglify } from "rollup-plugin-uglify";
+
+export default [
+ {
+ input: "src/index.ts",
+ output: [
+ {
+ file: "lib/index.mjs",
+ format: "es",
+ sourcemap: true,
+ },
+ ],
+ plugins: [
+ typescript({
+ tsconfig: "tsconfig.esm.json",
+ sourceMap: true,
+ }),
+ uglify(),
+ ],
+ },
+];
diff --git a/src/__tests__/match.test.js b/src/__tests__/match.test.js
new file mode 100644
index 0000000..b93a644
--- /dev/null
+++ b/src/__tests__/match.test.js
@@ -0,0 +1,85 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var z = __importStar(require("../index"));
+globals_1.test("match requset", function () {
+ var a = z.endpoint({
+ name: "A",
+ method: "GET",
+ path: [z.literal("a")],
+ query: {
+ next: z.parameter(z.string()),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ });
+ var b = z.endpoint({
+ name: "B",
+ method: "POST",
+ path: [z.literal("b")],
+ query: {
+ next: z.parameter(z.string().optional()),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ body: [
+ z.body({
+ type: "application/json",
+ content: z.object({
+ b: z.string(),
+ }),
+ }),
+ z.body({
+ type: "plain/text",
+ content: z.object({
+ c: z.string(),
+ }),
+ }),
+ ],
+ }),
+ ],
+ });
+ var schema = z.union([a, b]);
+ var reqA = {
+ method: "GET",
+ path: ["a"],
+ query: {
+ next: "a",
+ },
+ headers: {},
+ };
+ var reqB = {
+ method: "POST",
+ path: ["b"],
+ query: {
+ next: undefined,
+ },
+ headers: {},
+ };
+ globals_1.expect(z.matchRequest(schema, reqA)).toEqual(a);
+ globals_1.expect(z.matchRequest(schema, reqB)).toEqual(b);
+});
diff --git a/src/__tests__/match.test.ts b/src/__tests__/match.test.ts
index 231d6fd..e6eb4fe 100644
--- a/src/__tests__/match.test.ts
+++ b/src/__tests__/match.test.ts
@@ -1,69 +1,70 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import * as z from "../index";
test("match requset", () => {
+ const a = z.endpoint({
+ name: "A",
+ method: "GET",
+ path: [z.literal("a")],
+ query: {
+ next: z.parameter(z.string()),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ });
- const a = z.endpoint({
- name: "A",
- method: "GET",
- path: [z.literal("a")],
- query: {
- next: z.parameter(z.string())
- },
- responses: [
- z.response({
- status: 200
- })
- ]
- })
-
- const b = z.endpoint({
- name: "B",
- method: "POST",
- path: [z.literal("b")],
- query: {
- next: z.parameter(z.string().optional())
- },
- responses: [
- z.response({
- status: 200,
- body: [
- z.body({
- type: "application/json",
- content: z.object({
- b: z.string()
- })
- }),
- z.body({
- type: "plain/text",
- content: z.object({
- c: z.string()
- })
- })
- ]
- })
- ]
- })
- const schema = z.union([a,b]);
-
- const reqA: z.MatchRequest = {
- method: "GET",
- path: ["a"],
- query: {
- next: "a"
- },
- headers:{}
- }
+ const b = z.endpoint({
+ name: "B",
+ method: "POST",
+ path: [z.literal("b")],
+ query: {
+ next: z.parameter(z.string().optional()),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ body: [
+ z.body({
+ type: "application/json",
+ content: z.object({
+ b: z.string(),
+ }),
+ }),
+ z.body({
+ type: "plain/text",
+ content: z.object({
+ c: z.string(),
+ }),
+ }),
+ ],
+ }),
+ ],
+ });
+ const schema = z.union([a, b]);
- const reqB: z.MatchRequest = {
- method: "POST",
- path: ["b"],
- query: {
- next: undefined
- },
- headers:{}
- }
+ const reqA: z.MatchRequest = {
+ method: "GET",
+ path: ["a"],
+ query: {
+ next: "a",
+ },
+ headers: {},
+ };
- expect(z.matchRequest(schema, reqA)).toEqual(a);
- expect(z.matchRequest(schema, reqB)).toEqual(b);
+ const reqB: z.MatchRequest = {
+ method: "POST",
+ path: ["b"],
+ query: {
+ next: undefined,
+ },
+ headers: {},
+ };
+ expect(z.matchRequest(schema, reqA)).toEqual(a);
+ expect(z.matchRequest(schema, reqB)).toEqual(b);
});
diff --git a/src/__tests__/param.test.js b/src/__tests__/param.test.js
new file mode 100644
index 0000000..3dec5ff
--- /dev/null
+++ b/src/__tests__/param.test.js
@@ -0,0 +1,54 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var z = __importStar(require("../index"));
+globals_1.test("parameter with number", function () {
+ var n = z
+ .parameter(z.number().max(100))
+ .name("limit")
+ .description("How many items to return at one time (max 100)");
+ globals_1.expect(n.parse(50)).toEqual(50);
+ try {
+ n.parse(400);
+ }
+ catch (err) {
+ var zerr = err;
+ globals_1.expect(zerr.issues[0].code).toEqual(z.ZodIssueCode.too_big);
+ globals_1.expect(zerr.issues[0].message).toEqual("Value should be less than or equal to 100");
+ }
+});
+globals_1.test("parameter with string", function () {
+ var s = z
+ .parameter(z.string().max(7))
+ .name("limit")
+ .description("How many items to return at one time (max 100)");
+ globals_1.expect(s.parse("123456")).toEqual("123456");
+ try {
+ s.parse("12345678");
+ }
+ catch (err) {
+ var zerr = err;
+ globals_1.expect(zerr.issues[0].code).toEqual(z.ZodIssueCode.too_big);
+ globals_1.expect(zerr.issues[0].message).toEqual("Should be at most 7 characters long");
+ }
+});
diff --git a/src/__tests__/param.test.ts b/src/__tests__/param.test.ts
index ae610f0..aa62559 100644
--- a/src/__tests__/param.test.ts
+++ b/src/__tests__/param.test.ts
@@ -1,3 +1,6 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import * as z from "../index";
test("parameter with number", () => {
@@ -5,8 +8,18 @@ test("parameter with number", () => {
.parameter(z.number().max(100))
.name("limit")
.description("How many items to return at one time (max 100)");
- expect(n.check(50)).toBeTruthy();
- expect(n.check(400)).toBeFalsy();
+
+ expect(n.parse(50)).toEqual(50);
+
+ try {
+ n.parse(400);
+ } catch (err) {
+ const zerr: z.ZodError = err;
+ expect(zerr.issues[0].code).toEqual(z.ZodIssueCode.too_big);
+ expect(zerr.issues[0].message).toEqual(
+ `Value should be less than or equal to 100`
+ );
+ }
});
test("parameter with string", () => {
@@ -14,6 +27,16 @@ test("parameter with string", () => {
.parameter(z.string().max(7))
.name("limit")
.description("How many items to return at one time (max 100)");
- expect(s.check("123456")).toBeTruthy();
- expect(s.check("12345678")).toBeFalsy();
+
+ expect(s.parse("123456")).toEqual("123456");
+
+ try {
+ s.parse("12345678");
+ } catch (err) {
+ const zerr: z.ZodError = err;
+ expect(zerr.issues[0].code).toEqual(z.ZodIssueCode.too_big);
+ expect(zerr.issues[0].message).toEqual(
+ `Should be at most 7 characters long`
+ );
+ }
});
diff --git a/src/__tests__/parse.test.js b/src/__tests__/parse.test.js
new file mode 100644
index 0000000..fe36404
--- /dev/null
+++ b/src/__tests__/parse.test.js
@@ -0,0 +1,45 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var z = __importStar(require("../index"));
+globals_1.test("parse bigint", function () {
+ var bigint = z.bigint();
+ var res = bigint.parse(BigInt(2));
+ globals_1.expect(res).toEqual(BigInt(2));
+});
+globals_1.test("parse pet", function () {
+ var Pet = z.object({
+ id: z.bigint(),
+ name: z.string(),
+ tag: z.string().optional(),
+ });
+ var Pets = z.array(z.reference("Pet", Pet));
+ var arr = [
+ { id: BigInt(0), name: "a", tag: "Test" },
+ { id: BigInt(1), name: "b", tag: "Test" },
+ ];
+ globals_1.expect(Pets.parse(arr)).toEqual([
+ { id: BigInt(0), name: "a", tag: "Test" },
+ { id: BigInt(1), name: "b", tag: "Test" },
+ ]);
+});
diff --git a/src/__tests__/parse.test.ts b/src/__tests__/parse.test.ts
index 5e2b234..8089b11 100644
--- a/src/__tests__/parse.test.ts
+++ b/src/__tests__/parse.test.ts
@@ -1,3 +1,6 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import * as z from "../index";
test("parse bigint", () => {
@@ -10,17 +13,17 @@ test("parse pet", () => {
const Pet = z.object({
id: z.bigint(),
name: z.string(),
- tag: z.string().optional()
+ tag: z.string().optional(),
});
const Pets = z.array(z.reference("Pet", Pet));
const arr = [
{ id: BigInt(0), name: "a", tag: "Test" },
- { id: BigInt(1), name: "b", tag: "Test" }
+ { id: BigInt(1), name: "b", tag: "Test" },
];
expect(Pets.parse(arr)).toEqual([
{ id: BigInt(0), name: "a", tag: "Test" },
- { id: BigInt(1), name: "b", tag: "Test" }
+ { id: BigInt(1), name: "b", tag: "Test" },
]);
});
diff --git a/src/__tests__/pets_endpoints.test.js b/src/__tests__/pets_endpoints.test.js
new file mode 100644
index 0000000..516e369
--- /dev/null
+++ b/src/__tests__/pets_endpoints.test.js
@@ -0,0 +1,196 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var petstore_1 = __importDefault(require("../data/petstore"));
+var z = __importStar(require("../index"));
+var openapi_1 = require("../openapi");
+var Error = z.object({
+ code: z.integer(),
+ message: z.string(),
+});
+var Pet = z.object({
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
+});
+var Pets = z.array(z.reference("Pet", Pet));
+var schema = z.endpoints([
+ z.endpoint({
+ name: "listPets",
+ summary: "List all pets",
+ tags: [z.literal("pets")],
+ method: "GET",
+ path: [z.literal("pets")],
+ query: {
+ limit: z
+ .parameter(z.integer("int32").max(100).optional())
+ .description("How many items to return at one time (max 100)"),
+ },
+ responses: [
+ z.response({
+ status: 200,
+ description: "A paged array of pets",
+ headers: {
+ "x-next": z
+ .parameter(z.string())
+ .name("x-next")
+ .description("A link to the next page of responses"),
+ },
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Pets", Pets),
+ }),
+ }),
+ z.response({
+ status: "default",
+ description: "unexpected error",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
+ }),
+ z.endpoint({
+ name: "showPetById",
+ summary: "Info for a specific pet",
+ tags: [z.literal("pets")],
+ method: "GET",
+ path: [
+ z.literal("pets"),
+ z
+ .parameter(z.string().uuid())
+ .name("petId")
+ .description("The id of the pet to retrieve"),
+ ],
+ responses: [
+ z.response({
+ status: 200,
+ description: "Expected response to a valid request",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Pet", Pet),
+ }),
+ }),
+ z.response({
+ status: "default",
+ description: "unexpected error",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
+ }),
+ z.endpoint({
+ name: "createPets",
+ summary: "Create a pet",
+ tags: [z.literal("pets")],
+ method: "POST",
+ path: [z.literal("pets")],
+ headers: {
+ accept: z.parameter(z.literal("application/json")),
+ },
+ responses: [
+ z.response({
+ status: 201,
+ description: "Null response",
+ }),
+ z.response({
+ status: "default",
+ description: "unexpected error",
+ body: z.body({
+ type: "application/json",
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
+ }),
+]);
+var server = { url: "http://petstore.swagger.io/v1" };
+var api = openapi_1.openApi(schema, { version: "1.0.0", title: "Swagger Petstore", license: { name: "MIT" } }, [server]);
+globals_1.test("compare open api schema", function () {
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
+ function compare(actual, expected) {
+ var value = JSON.parse(JSON.stringify(actual));
+ globals_1.expect(value).toEqual(expected);
+ }
+ compare(api.paths["/pets"].get, petstore_1.default.paths["/pets"].get);
+ compare(api.paths["/pets/{petId}"].get, petstore_1.default.paths["/pets/{petId}"].get);
+ compare(api.paths["/pets"].post, petstore_1.default.paths["/pets"].post);
+ compare((_b = (_a = api.components) === null || _a === void 0 ? void 0 : _a.schemas) === null || _b === void 0 ? void 0 : _b.Error, (_d = (_c = petstore_1.default.components) === null || _c === void 0 ? void 0 : _c.schemas) === null || _d === void 0 ? void 0 : _d.Error);
+ compare((_f = (_e = api.components) === null || _e === void 0 ? void 0 : _e.schemas) === null || _f === void 0 ? void 0 : _f.Pet, (_h = (_g = petstore_1.default.components) === null || _g === void 0 ? void 0 : _g.schemas) === null || _h === void 0 ? void 0 : _h.Pet);
+ compare((_k = (_j = api.components) === null || _j === void 0 ? void 0 : _j.schemas) === null || _k === void 0 ? void 0 : _k.Pets, (_m = (_l = petstore_1.default.components) === null || _l === void 0 ? void 0 : _l.schemas) === null || _m === void 0 ? void 0 : _m.Pets);
+ compare(api, petstore_1.default);
+});
+globals_1.test("validate example request", function () {
+ var listPets = {
+ path: ["pets"],
+ method: "GET",
+ query: {
+ limit: 10,
+ },
+ headers: {},
+ responses: {
+ description: "A paged array of pets",
+ status: 200,
+ headers: {
+ "x-next": "?",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 1,
+ name: "Bello",
+ tag: "DOG",
+ },
+ ],
+ },
+ },
+ };
+ globals_1.expect(schema.parse(listPets).name).toEqual("listPets");
+ var showPetById = {
+ path: ["pets", "b945f0a8-022d-11eb-adc1-0242ac120002"],
+ method: "GET",
+ query: {},
+ headers: {},
+ responses: {
+ description: "unexpected error",
+ status: "default",
+ headers: undefined,
+ body: {
+ type: "application/json",
+ content: {
+ code: 50,
+ message: "This is an error",
+ },
+ },
+ },
+ };
+ var res = schema.parse(showPetById);
+ globals_1.expect(res.name).toEqual("showPetById");
+});
diff --git a/src/__tests__/pets_endpoints.test.ts b/src/__tests__/pets_endpoints.test.ts
index e908da9..90e3680 100644
--- a/src/__tests__/pets_endpoints.test.ts
+++ b/src/__tests__/pets_endpoints.test.ts
@@ -1,16 +1,19 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
+import petApi from "../data/petstore";
import * as z from "../index";
import { openApi } from "../openapi";
-import petApi from "../data/petstore";
const Error = z.object({
code: z.integer(),
- message: z.string()
+ message: z.string(),
});
const Pet = z.object({
id: z.integer("int64"),
name: z.string(),
- tag: z.string().optional()
+ tag: z.string().optional(),
});
const Pets = z.array(z.reference("Pet", Pet));
@@ -25,7 +28,7 @@ const schema = z.endpoints([
query: {
limit: z
.parameter(z.integer("int32").max(100).optional())
- .description("How many items to return at one time (max 100)")
+ .description("How many items to return at one time (max 100)"),
},
responses: [
z.response({
@@ -35,22 +38,22 @@ const schema = z.endpoints([
"x-next": z
.parameter(z.string())
.name("x-next")
- .description("A link to the next page of responses")
+ .description("A link to the next page of responses"),
},
body: z.body({
type: "application/json",
- content: z.reference("Pets", Pets)
- })
+ content: z.reference("Pets", Pets),
+ }),
}),
z.response({
status: "default",
description: "unexpected error",
body: z.body({
type: "application/json",
- content: z.reference("Error", Error)
- })
- })
- ]
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
}),
z.endpoint({
@@ -63,7 +66,7 @@ const schema = z.endpoints([
z
.parameter(z.string().uuid())
.name("petId")
- .description("The id of the pet to retrieve")
+ .description("The id of the pet to retrieve"),
],
responses: [
z.response({
@@ -71,18 +74,18 @@ const schema = z.endpoints([
description: "Expected response to a valid request",
body: z.body({
type: "application/json",
- content: z.reference("Pet", Pet)
- })
+ content: z.reference("Pet", Pet),
+ }),
}),
z.response({
status: "default",
description: "unexpected error",
body: z.body({
type: "application/json",
- content: z.reference("Error", Error)
- })
- })
- ]
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
}),
z.endpoint({
@@ -92,23 +95,23 @@ const schema = z.endpoints([
method: "POST",
path: [z.literal("pets")],
headers: {
- accept: z.parameter(z.literal("application/json"))
+ accept: z.parameter(z.literal("application/json")),
},
responses: [
z.response({
status: 201,
- description: "Null response"
+ description: "Null response",
}),
z.response({
status: "default",
description: "unexpected error",
body: z.body({
type: "application/json",
- content: z.reference("Error", Error)
- })
- })
- ]
- })
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ],
+ }),
]);
const server = { url: "http://petstore.swagger.io/v1" };
@@ -140,14 +143,14 @@ test("validate example request", () => {
path: ["pets"],
method: "GET",
query: {
- limit: 10
+ limit: 10,
},
- headers:{},
+ headers: {},
responses: {
description: "A paged array of pets",
status: 200,
headers: {
- "x-next": "?"
+ "x-next": "?",
},
body: {
type: "application/json",
@@ -155,19 +158,19 @@ test("validate example request", () => {
{
id: 1,
name: "Bello",
- tag: "DOG"
- }
- ]
- }
- }
+ tag: "DOG",
+ },
+ ],
+ },
+ },
};
expect(schema.parse(listPets).name).toEqual("listPets");
const showPetById: Input = {
path: ["pets", "b945f0a8-022d-11eb-adc1-0242ac120002"],
method: "GET",
- query:{},
- headers:{},
+ query: {},
+ headers: {},
responses: {
description: "unexpected error",
status: "default",
@@ -176,10 +179,10 @@ test("validate example request", () => {
type: "application/json",
content: {
code: 50,
- message: "This is an error"
- }
- }
- }
+ message: "This is an error",
+ },
+ },
+ },
};
const res = schema.parse(showPetById);
expect(res.name).toEqual("showPetById");
diff --git a/src/__tests__/pets_raw.test.js b/src/__tests__/pets_raw.test.js
new file mode 100644
index 0000000..5533ea9
--- /dev/null
+++ b/src/__tests__/pets_raw.test.js
@@ -0,0 +1,315 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var petstore_1 = __importDefault(require("../data/petstore"));
+var z = __importStar(require("../index"));
+var openapi_1 = require("../openapi");
+var Error = z.object({
+ code: z.integer(),
+ message: z.string(),
+});
+var Pet = z.object({
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
+});
+var Pets = z.array(z.reference("Pet", Pet));
+var schema = z.union([
+ z.object({
+ name: z.literal("listPets").default("listPets"),
+ summary: z.literal("List all pets").default("List all pets"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([z.literal("pets")]),
+ method: z.literal("GET"),
+ query: z.object({
+ limit: z
+ .parameter(z.integer("int32").max(100).optional())
+ .description("How many items to return at one time (max 100)"),
+ }),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(200),
+ description: z.literal("A paged array of pets"),
+ headers: z.object({
+ "x-next": z
+ .parameter(z.string())
+ .name("x-next")
+ .description("A link to the next page of responses"),
+ }),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Pets", Pets),
+ }),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+ z.object({
+ name: z.literal("showPetById").default("showPetById"),
+ summary: z
+ .literal("Info for a specific pet")
+ .default("Info for a specific pet"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([
+ z.literal("pets"),
+ z
+ .parameter(z.string().uuid())
+ .name("petId")
+ .description("The id of the pet to retrieve"),
+ ]),
+ method: z.literal("GET"),
+ query: z.object({}),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(200),
+ description: z.literal("Expected response to a valid request"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Pet", Pet),
+ }),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+ z.object({
+ name: z.literal("createPets").default("createPets"),
+ summary: z.literal("Create a pet").default("Create a pet"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([z.literal("pets")]),
+ method: z.literal("POST"),
+ query: z.object({}),
+ headers: z.object({
+ accept: z.parameter(z.literal("application/json")),
+ }),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(201),
+ description: z.literal("Null response"),
+ headers: z.object({}),
+ body: z.undefined(),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+]);
+globals_1.test("api interface", function () {
+ var api = {
+ listPets: function () {
+ return Promise.resolve({
+ status: 200,
+ headers: { "x-next": "abc" },
+ body: { type: "application/json", content: [] },
+ });
+ },
+ showPetById: function () {
+ return Promise.resolve({
+ status: 200,
+ headers: {},
+ body: { type: "application/json", content: { id: 1, name: "Pet" } },
+ });
+ },
+ createPets: function () { return Promise.resolve({ status: 201, headers: {} }); },
+ };
+ globals_1.expect(api).toBeTruthy();
+});
+globals_1.test("client interface", function () { return __awaiter(void 0, void 0, void 0, function () {
+ var client, res;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ client = function (req) {
+ var _a;
+ var match = z.matchRequest(schema, req);
+ return Promise.resolve({
+ status: 200,
+ headers: {
+ "x-next": "xxx",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 123,
+ name: (_a = match === null || match === void 0 ? void 0 : match.shape.name.parse(undefined)) !== null && _a !== void 0 ? _a : "",
+ },
+ ],
+ },
+ });
+ };
+ return [4 /*yield*/, client({
+ method: "GET",
+ path: ["pets"],
+ headers: {},
+ query: {},
+ body: undefined,
+ })];
+ case 1:
+ res = _a.sent();
+ globals_1.expect(res.body).toEqual({
+ type: "application/json",
+ content: [{ id: 123, name: "listPets" }],
+ });
+ return [2 /*return*/];
+ }
+ });
+}); });
+globals_1.test("compare open api schema", function () { return __awaiter(void 0, void 0, void 0, function () {
+ function compare(actual, expected) {
+ var value = JSON.parse(JSON.stringify(actual));
+ globals_1.expect(value).toEqual(expected);
+ }
+ var server, api;
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
+ return __generator(this, function (_o) {
+ server = { url: "http://petstore.swagger.io/v1" };
+ api = openapi_1.openApi(schema, {
+ version: "1.0.0",
+ title: "Swagger Petstore",
+ license: { name: "MIT" },
+ }, [server]);
+ compare(api.paths["/pets"].get, petstore_1.default.paths["/pets"].get);
+ compare(api.paths["/pets/{petId}"].get, petstore_1.default.paths["/pets/{petId}"].get);
+ compare(api.paths["/pets"].post, petstore_1.default.paths["/pets"].post);
+ compare((_b = (_a = api.components) === null || _a === void 0 ? void 0 : _a.schemas) === null || _b === void 0 ? void 0 : _b.Error, (_d = (_c = petstore_1.default.components) === null || _c === void 0 ? void 0 : _c.schemas) === null || _d === void 0 ? void 0 : _d.Error);
+ compare((_f = (_e = api.components) === null || _e === void 0 ? void 0 : _e.schemas) === null || _f === void 0 ? void 0 : _f.Pet, (_h = (_g = petstore_1.default.components) === null || _g === void 0 ? void 0 : _g.schemas) === null || _h === void 0 ? void 0 : _h.Pet);
+ compare((_k = (_j = api.components) === null || _j === void 0 ? void 0 : _j.schemas) === null || _k === void 0 ? void 0 : _k.Pets, (_m = (_l = petstore_1.default.components) === null || _l === void 0 ? void 0 : _l.schemas) === null || _m === void 0 ? void 0 : _m.Pets);
+ compare(api, petstore_1.default);
+ return [2 /*return*/];
+ });
+}); });
+globals_1.test("validate example request", function () {
+ var listPets = {
+ path: ["pets"],
+ method: "GET",
+ query: {
+ limit: 10,
+ },
+ headers: {},
+ responses: {
+ status: 200,
+ description: "A paged array of pets",
+ headers: {
+ "x-next": "?",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 1,
+ name: "Bello",
+ tag: "DOG",
+ },
+ ],
+ },
+ },
+ };
+ globals_1.expect(schema.parse(listPets).name).toEqual("listPets");
+ var showPetById = {
+ path: ["pets", "b945f0a8-022d-11eb-adc1-0242ac120002"],
+ method: "GET",
+ query: {},
+ headers: {},
+ responses: {
+ status: "default",
+ description: "unexpected error",
+ headers: {},
+ body: {
+ type: "application/json",
+ content: {
+ code: 50,
+ message: "This is an error",
+ },
+ },
+ },
+ };
+ globals_1.expect(schema.parse(showPetById).name).toEqual("showPetById");
+});
diff --git a/src/__tests__/pets_raw.test.ts b/src/__tests__/pets_raw.test.ts
index c3b20dd..78993c4 100644
--- a/src/__tests__/pets_raw.test.ts
+++ b/src/__tests__/pets_raw.test.ts
@@ -1,256 +1,261 @@
-import * as z from "../index";
-import {openApi} from "../openapi";
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import petApi from "../data/petstore";
+import * as z from "../index";
+import { openApi } from "../openapi";
const Error = z.object({
- code: z.integer(),
- message: z.string()
+ code: z.integer(),
+ message: z.string(),
});
const Pet = z.object({
- id: z.integer("int64"),
- name: z.string(),
- tag: z.string().optional()
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
});
const Pets = z.array(z.reference("Pet", Pet));
const schema = z.union([
- z.object({
- name: z.literal("listPets").default("listPets"),
- summary: z.literal("List all pets").default("List all pets"),
- tags: z.tuple([z.literal("pets")]).default(["pets"]),
- path: z.tuple([z.literal("pets")]),
- method: z.literal("GET"),
- query: z.object({
- limit: z
- .parameter(z.integer("int32").max(100).optional())
- .description("How many items to return at one time (max 100)")
+ z.object({
+ name: z.literal("listPets").default("listPets"),
+ summary: z.literal("List all pets").default("List all pets"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([z.literal("pets")]),
+ method: z.literal("GET"),
+ query: z.object({
+ limit: z
+ .parameter(z.integer("int32").max(100).optional())
+ .description("How many items to return at one time (max 100)"),
+ }),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(200),
+ description: z.literal("A paged array of pets"),
+ headers: z.object({
+ "x-next": z
+ .parameter(z.string())
+ .name("x-next")
+ .description("A link to the next page of responses"),
+ }),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Pets", Pets),
}),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
headers: z.object({}),
- body: z.undefined(),
- responses: z.union([
- z.object({
- status: z.literal(200),
- description: z.literal("A paged array of pets"),
- headers: z.object({
- "x-next": z
- .parameter(z.string())
- .name("x-next")
- .description("A link to the next page of responses")
- }),
- body: z.object({
- type: z.literal("application/json"),
- content: z.reference("Pets", Pets)
- })
- }),
- z.object({
- status: z.literal("default"),
- description: z.literal("unexpected error"),
- headers: z.object({}),
- body: z.object({
- type: z.literal("application/json"),
- content: z.reference("Error", Error)
- })
- })
- ])
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+ z.object({
+ name: z.literal("showPetById").default("showPetById"),
+ summary: z
+ .literal("Info for a specific pet")
+ .default("Info for a specific pet"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([
+ z.literal("pets"),
+ z
+ .parameter(z.string().uuid())
+ .name("petId")
+ .description("The id of the pet to retrieve"),
+ ]),
+ method: z.literal("GET"),
+ query: z.object({}),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(200),
+ description: z.literal("Expected response to a valid request"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Pet", Pet),
+ }),
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
+ }),
+ }),
+ ]),
+ }),
+ z.object({
+ name: z.literal("createPets").default("createPets"),
+ summary: z.literal("Create a pet").default("Create a pet"),
+ tags: z.tuple([z.literal("pets")]).default(["pets"]),
+ path: z.tuple([z.literal("pets")]),
+ method: z.literal("POST"),
+ query: z.object({}),
+ headers: z.object({
+ accept: z.parameter(z.literal("application/json")),
}),
- z.object({
- name: z.literal("showPetById").default("showPetById"),
- summary: z
- .literal("Info for a specific pet")
- .default("Info for a specific pet"),
- tags: z.tuple([z.literal("pets")]).default(["pets"]),
- path: z.tuple([
- z.literal("pets"),
- z
- .parameter(z.string().uuid())
- .name("petId")
- .description("The id of the pet to retrieve")
- ]),
- method: z.literal("GET"),
- query: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ status: z.literal(201),
+ description: z.literal("Null response"),
headers: z.object({}),
body: z.undefined(),
- responses: z.union([
- z.object({
- status: z.literal(200),
- description: z.literal("Expected response to a valid request"),
- headers: z.object({}),
- body: z.object({
- type: z.literal("application/json"),
- content: z.reference("Pet", Pet)
- })
- }),
- z.object({
- status: z.literal("default"),
- description: z.literal("unexpected error"),
- headers: z.object({}),
- body: z.object({
- type: z.literal("application/json"),
- content: z.reference("Error", Error)
- })
- })
- ])
- }),
- z.object({
- name: z.literal("createPets").default("createPets"),
- summary: z.literal("Create a pet").default("Create a pet"),
- tags: z.tuple([z.literal("pets")]).default(["pets"]),
- path: z.tuple([z.literal("pets")]),
- method: z.literal("POST"),
- query: z.object({}),
- headers: z.object({
- accept: z.parameter(z.literal("application/json"))
+ }),
+ z.object({
+ status: z.literal("default"),
+ description: z.literal("unexpected error"),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: z.reference("Error", Error),
}),
- body: z.undefined(),
- responses: z.union([
- z.object({
- status: z.literal(201),
- description: z.literal("Null response"),
- headers: z.object({}),
- body: z.undefined()
- }),
- z.object({
- status: z.literal("default"),
- description: z.literal("unexpected error"),
- headers: z.object({}),
- body: z.object({
- type: z.literal("application/json"),
- content: z.reference("Error", Error)
- })
- })
- ])
- })
+ }),
+ ]),
+ }),
]);
test("api interface", () => {
- const api: z.Api = {
- listPets: () =>
- Promise.resolve({
- status: 200,
- headers: {"x-next": "abc"},
- body: {type: "application/json", content: []}
- }),
- showPetById: () =>
- Promise.resolve({
- status: 200,
- headers: {},
- body: {type: "application/json", content: {id: 1, name: "Pet"}}
- }),
- createPets: () => Promise.resolve({status: 201, headers: {}})
- };
+ const api: z.Api = {
+ listPets: () =>
+ Promise.resolve({
+ status: 200,
+ headers: { "x-next": "abc" },
+ body: { type: "application/json", content: [] },
+ }),
+ showPetById: () =>
+ Promise.resolve({
+ status: 200,
+ headers: {},
+ body: { type: "application/json", content: { id: 1, name: "Pet" } },
+ }),
+ createPets: () => Promise.resolve({ status: 201, headers: {} }),
+ };
- expect(api).toBeTruthy();
+ expect(api).toBeTruthy();
});
test("client interface", async () => {
- const client: z.Client = (req) => {
- const match = z.matchRequest(schema, req)
-
- return Promise.resolve({
- status: "default",
- headers: {
- "x-next": "xxx"
- },
- body: {
- type: 'application/json',
- content: [{
- id: 123,
- name: match && match.shape.name.parse(undefined) || ""
- }]
- }
- })
- };
+ // @ts-ignore
+ const client: z.Client = (req) => {
+ const match = z.matchRequest(schema, req);
+ return Promise.resolve({
+ status: 200,
+ headers: {
+ "x-next": "xxx",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 123,
+ name: match?.shape.name.parse(undefined) ?? "",
+ },
+ ],
+ },
+ } as const);
+ };
- const res = await client({
- method: "GET",
- path: ['pets'],
- headers: {},
- query: {},
- body: undefined
- })
+ const res = await client({
+ method: "GET",
+ path: ["pets"],
+ headers: {},
+ query: {},
+ body: undefined,
+ });
- expect(res.body).toEqual({
- type: 'application/json',
- content: [{id: 123, name: "listPets"}]
- });
+ expect(res.body).toEqual({
+ type: "application/json",
+ content: [{ id: 123, name: "listPets" }],
+ });
});
test("compare open api schema", async () => {
- const server = {url: "http://petstore.swagger.io/v1"};
- const api = openApi(
- schema,
- {
- version: "1.0.0",
- title: "Swagger Petstore",
- license: {name: "MIT"}
- },
- [server]
- );
+ const server = { url: "http://petstore.swagger.io/v1" };
+ const api = openApi(
+ schema,
+ {
+ version: "1.0.0",
+ title: "Swagger Petstore",
+ license: { name: "MIT" },
+ },
+ [server]
+ );
- function compare(actual: unknown, expected: unknown) {
- const value = JSON.parse(JSON.stringify(actual));
- expect(value).toEqual(expected);
- }
+ function compare(actual: unknown, expected: unknown) {
+ const value = JSON.parse(JSON.stringify(actual));
+ expect(value).toEqual(expected);
+ }
- compare(api.paths["/pets"].get, petApi.paths["/pets"].get);
- compare(api.paths["/pets/{petId}"].get, petApi.paths["/pets/{petId}"].get);
- compare(api.paths["/pets"].post, petApi.paths["/pets"].post);
- compare(api.components?.schemas?.Error, petApi.components?.schemas?.Error);
- compare(api.components?.schemas?.Pet, petApi.components?.schemas?.Pet);
- compare(api.components?.schemas?.Pets, petApi.components?.schemas?.Pets);
- compare(api, petApi);
+ compare(api.paths["/pets"].get, petApi.paths["/pets"].get);
+ compare(api.paths["/pets/{petId}"].get, petApi.paths["/pets/{petId}"].get);
+ compare(api.paths["/pets"].post, petApi.paths["/pets"].post);
+ compare(api.components?.schemas?.Error, petApi.components?.schemas?.Error);
+ compare(api.components?.schemas?.Pet, petApi.components?.schemas?.Pet);
+ compare(api.components?.schemas?.Pets, petApi.components?.schemas?.Pets);
+ compare(api, petApi);
});
test("validate example request", () => {
- type Input = z.input;
+ type Input = z.input;
- const listPets: Input = {
- path: ["pets"],
- method: "GET",
- query: {
- limit: 10
- },
- headers: {},
+ const listPets: Input = {
+ path: ["pets"],
+ method: "GET",
+ query: {
+ limit: 10,
+ },
+ headers: {},
- responses: {
- status: 200,
- description: "A paged array of pets",
- headers: {
- "x-next": "?"
- },
- body: {
- type: "application/json",
- content: [
- {
- id: 1,
- name: "Bello",
- tag: "DOG"
- }
- ]
- }
- }
- };
- expect(schema.parse(listPets).name).toEqual("listPets");
+ responses: {
+ status: 200,
+ description: "A paged array of pets",
+ headers: {
+ "x-next": "?",
+ },
+ body: {
+ type: "application/json",
+ content: [
+ {
+ id: 1,
+ name: "Bello",
+ tag: "DOG",
+ },
+ ],
+ },
+ },
+ };
+ expect(schema.parse(listPets).name).toEqual("listPets");
- const showPetById: Input = {
- path: ["pets", "b945f0a8-022d-11eb-adc1-0242ac120002"],
- method: "GET",
- query: {},
- headers: {},
- responses: {
- status: "default",
- description: "unexpected error",
- headers: {},
- body: {
- type: "application/json",
- content: {
- code: 50,
- message: "This is an error"
- }
- }
- }
- };
- expect(schema.parse(showPetById).name).toEqual("showPetById");
+ const showPetById: Input = {
+ path: ["pets", "b945f0a8-022d-11eb-adc1-0242ac120002"],
+ method: "GET",
+ query: {},
+ headers: {},
+ responses: {
+ status: "default",
+ description: "unexpected error",
+ headers: {},
+ body: {
+ type: "application/json",
+ content: {
+ code: 50,
+ message: "This is an error",
+ },
+ },
+ },
+ };
+ expect(schema.parse(showPetById).name).toEqual("showPetById");
});
diff --git a/src/__tests__/project.test.js b/src/__tests__/project.test.js
new file mode 100644
index 0000000..91b75a9
--- /dev/null
+++ b/src/__tests__/project.test.js
@@ -0,0 +1,120 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var z = __importStar(require("../index"));
+var index_1 = require("../index");
+var openapi_1 = require("../openapi");
+globals_1.test("test project", function () {
+ var route = {
+ name: z.literal("GET_USER").default("GET_USER"),
+ method: z.literal("GET"),
+ path: z.tuple([z.literal("user")]),
+ summary: z.undefined(),
+ tags: z.tuple([z.literal("a"), z.literal("b")]).default(["a", "b"]),
+ query: z.object({
+ test: index_1.parameter(z.number().max(100).optional()).description("How many items to return at one time (max 100)"),
+ }),
+ headers: z.object({}),
+ body: z.undefined(),
+ responses: z.union([
+ z.object({
+ description: z.literal("List of projects"),
+ status: z.literal(200),
+ headers: z.object({}),
+ body: z.object({
+ type: z.literal("application/json"),
+ content: index_1.component(z.object({
+ uuid: z.string().uuid(),
+ name: z.string(),
+ })),
+ }),
+ }),
+ z.object({
+ description: z.literal("Not projects found"),
+ status: z.literal(404),
+ headers: z.object({}),
+ body: z.undefined(),
+ }),
+ ]),
+ };
+ var res = openapi_1.openApi(z.object(route));
+ var exp = {
+ openapi: "3.0.0",
+ info: {
+ version: "1.0.0",
+ title: "No title",
+ },
+ servers: [],
+ paths: {
+ "/user": {
+ get: {
+ operationId: "GET_USER",
+ parameters: [
+ {
+ description: "How many items to return at one time (max 100)",
+ in: "query",
+ name: "test",
+ required: false,
+ schema: {
+ format: "int32",
+ type: "integer",
+ },
+ },
+ ],
+ summary: undefined,
+ tags: ["a", "b"],
+ requestBody: undefined,
+ responses: {
+ "200": {
+ description: "List of projects",
+ headers: undefined,
+ content: {
+ "application/json": {
+ schema: {
+ properties: {
+ name: {
+ type: "string",
+ },
+ uuid: {
+ type: "string",
+ },
+ },
+ required: ["uuid", "name"],
+ type: "object",
+ },
+ },
+ },
+ },
+ "404": {
+ description: "Not projects found",
+ headers: undefined,
+ content: undefined,
+ },
+ },
+ },
+ },
+ },
+ components: undefined,
+ };
+ globals_1.expect(res).toEqual(exp);
+});
diff --git a/src/__tests__/project.test.ts b/src/__tests__/project.test.ts
index 8b2f72e..2866270 100644
--- a/src/__tests__/project.test.ts
+++ b/src/__tests__/project.test.ts
@@ -1,6 +1,9 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import * as z from "../index";
-import { openApi } from "../openapi";
import { component, parameter } from "../index";
+import { openApi } from "../openapi";
import { OpenAPIObject } from "../utils/openapi3-ts/OpenApi";
test("test project", () => {
@@ -13,7 +16,7 @@ test("test project", () => {
query: z.object({
test: parameter(z.number().max(100).optional()).description(
"How many items to return at one time (max 100)"
- )
+ ),
}),
headers: z.object({}),
body: z.undefined(),
@@ -27,18 +30,18 @@ test("test project", () => {
content: component(
z.object({
uuid: z.string().uuid(),
- name: z.string()
+ name: z.string(),
})
- )
- })
+ ),
+ }),
}),
z.object({
description: z.literal("Not projects found"),
status: z.literal(404),
headers: z.object({}),
- body: z.undefined()
- })
- ])
+ body: z.undefined(),
+ }),
+ ]),
};
const res = openApi(z.object(route));
@@ -47,7 +50,7 @@ test("test project", () => {
openapi: "3.0.0",
info: {
version: "1.0.0",
- title: "No title"
+ title: "No title",
},
servers: [],
paths: {
@@ -62,9 +65,9 @@ test("test project", () => {
required: false,
schema: {
format: "int32",
- type: "integer"
- }
- }
+ type: "integer",
+ },
+ },
],
summary: undefined,
tags: ["a", "b"],
@@ -78,28 +81,28 @@ test("test project", () => {
schema: {
properties: {
name: {
- type: "string"
+ type: "string",
},
uuid: {
- type: "string"
- }
+ type: "string",
+ },
},
required: ["uuid", "name"],
- type: "object"
- }
- }
- }
+ type: "object",
+ },
+ },
+ },
},
"404": {
description: "Not projects found",
headers: undefined,
- content: undefined
- }
- }
- }
- }
+ content: undefined,
+ },
+ },
+ },
+ },
},
- components: undefined
+ components: undefined,
};
expect(res).toEqual(exp);
});
diff --git a/src/__tests__/router_body.test.js b/src/__tests__/router_body.test.js
new file mode 100644
index 0000000..7d671d4
--- /dev/null
+++ b/src/__tests__/router_body.test.js
@@ -0,0 +1,150 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var z = __importStar(require("../index"));
+var openapi_1 = require("../openapi");
+globals_1.test("router with body", function () { return __awaiter(void 0, void 0, void 0, function () {
+ var pet, schema, api, res, open;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ pet = z.reference("Pets", z.object({
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
+ }));
+ schema = z.endpoints([
+ z.endpoint({
+ name: "C",
+ method: "POST",
+ path: [z.literal("pets")],
+ body: z.body({
+ type: "application/json",
+ content: pet,
+ }),
+ responses: [
+ z.response({
+ status: 201,
+ headers: {},
+ description: "Post with body",
+ }),
+ ],
+ }),
+ ]);
+ api = {
+ C: function () {
+ return Promise.resolve({
+ status: 201,
+ headers: {},
+ });
+ },
+ };
+ return [4 /*yield*/, api["C"]({
+ method: "POST",
+ path: ["pets"],
+ query: {},
+ headers: {},
+ body: { type: "application/json", content: { id: 1, name: "Joe" } },
+ })];
+ case 1:
+ res = _a.sent();
+ globals_1.expect(res).toEqual({
+ status: 201,
+ headers: {},
+ });
+ open = openapi_1.openApi(schema);
+ globals_1.expect(open).toEqual({
+ components: undefined,
+ info: {
+ title: "No title",
+ version: "1.0.0",
+ },
+ openapi: "3.0.0",
+ paths: {
+ "/pets": {
+ post: {
+ operationId: "C",
+ parameters: undefined,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Pets",
+ },
+ },
+ },
+ },
+ responses: {
+ 201: {
+ content: undefined,
+ description: "Post with body",
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
+ },
+ },
+ },
+ servers: [],
+ });
+ return [2 /*return*/];
+ }
+ });
+}); });
diff --git a/src/__tests__/router_body.test.ts b/src/__tests__/router_body.test.ts
index 3c2a395..62fc458 100644
--- a/src/__tests__/router_body.test.ts
+++ b/src/__tests__/router_body.test.ts
@@ -1,89 +1,92 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import * as z from "../index";
-import {openApi} from "../openapi";
+import { openApi } from "../openapi";
test("router with body", async () => {
- const pet = z.reference(
- "Pets",
- z.object({
- id: z.integer("int64"),
- name: z.string(),
- tag: z.string().optional()
- })
- );
-
- const schema = z.endpoints([
- z.endpoint({
- name: "C",
- method: "POST",
- path: [z.literal("pets")],
- body: z.body({
- type: "application/json",
- content: pet
- }),
- responses: [
- z.response({
- status: 201,
- headers:{},
- description: "Post with body"
- })
- ]
- })
- ]);
+ const pet = z.reference(
+ "Pets",
+ z.object({
+ id: z.integer("int64"),
+ name: z.string(),
+ tag: z.string().optional(),
+ })
+ );
- const api: z.Api = {
- C: () => Promise.resolve({
- status: 201,
- headers:{},
- })
- };
+ const schema = z.endpoints([
+ z.endpoint({
+ name: "C",
+ method: "POST",
+ path: [z.literal("pets")],
+ body: z.body({
+ type: "application/json",
+ content: pet,
+ }),
+ responses: [
+ z.response({
+ status: 201,
+ headers: {},
+ description: "Post with body",
+ }),
+ ],
+ }),
+ ]);
- const res = await api["C"]({
- method: "POST",
- path: ["pets"],
- query: {},
+ const api: z.Api = {
+ C: () =>
+ Promise.resolve({
+ status: 201,
headers: {},
- body: {type: "application/json", content: {id: 1, name: "Joe"}}
+ }),
+ };
- });
- expect(res).toEqual({
- status: 201,
- headers:{},
- });
+ const res = await api["C"]({
+ method: "POST",
+ path: ["pets"],
+ query: {},
+ headers: {},
+ body: { type: "application/json", content: { id: 1, name: "Joe" } },
+ });
+ expect(res).toEqual({
+ status: 201,
+ headers: {},
+ });
- const open = openApi(schema);
- expect(open).toEqual({
- components: undefined,
- info: {
- title: "No title",
- version: "1.0.0"
- },
- openapi: "3.0.0",
- paths: {
- "/pets": {
- post: {
- operationId: "C",
- parameters: undefined,
- requestBody: {
- content: {
- "application/json": {
- schema: {
- $ref: "#/components/schemas/Pets"
- }
- }
- }
- },
- responses: {
- 201: {
- content: undefined,
- description: "Post with body",
- headers: undefined
- }
- },
- summary: undefined,
- tags: undefined
- }
- }
+ const open = openApi(schema);
+ expect(open).toEqual({
+ components: undefined,
+ info: {
+ title: "No title",
+ version: "1.0.0",
+ },
+ openapi: "3.0.0",
+ paths: {
+ "/pets": {
+ post: {
+ operationId: "C",
+ parameters: undefined,
+ requestBody: {
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Pets",
+ },
+ },
+ },
+ },
+ responses: {
+ 201: {
+ content: undefined,
+ description: "Post with body",
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
},
- servers: []
- });
+ },
+ },
+ servers: [],
+ });
});
diff --git a/src/__tests__/router_minimal.test.js b/src/__tests__/router_minimal.test.js
new file mode 100644
index 0000000..28edc17
--- /dev/null
+++ b/src/__tests__/router_minimal.test.js
@@ -0,0 +1,239 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var z = __importStar(require("../index"));
+var openapi_1 = require("../openapi");
+globals_1.test("minimal one endpoint", function () { return __awaiter(void 0, void 0, void 0, function () {
+ var schema, api, res;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ schema = z.endpoints([
+ z.endpoint({
+ name: "A",
+ method: "GET",
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ }),
+ ]);
+ api = {
+ A: function (_a) {
+ var path = _a.path;
+ globals_1.expect(path[0]).toEqual("");
+ return Promise.resolve({
+ status: 200,
+ });
+ },
+ };
+ return [4 /*yield*/, api["A"]({
+ method: "GET",
+ path: [""],
+ query: {},
+ headers: {},
+ })];
+ case 1:
+ res = _a.sent();
+ globals_1.expect(res).toEqual({ status: 200 });
+ return [2 /*return*/];
+ }
+ });
+}); });
+globals_1.test("minimal endpoint two endpoints", function () { return __awaiter(void 0, void 0, void 0, function () {
+ var schema, api, res, open;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ schema = z.union([
+ z.endpoint({
+ name: "A",
+ method: "GET",
+ path: [z.literal("a")],
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ }),
+ z.endpoint({
+ name: "B",
+ method: "POST",
+ path: [z.literal("b")],
+ responses: [
+ z.response({
+ status: 200,
+ body: [
+ z.body({
+ type: "application/json",
+ content: z.object({
+ b: z.string(),
+ }),
+ }),
+ z.body({
+ type: "plain/text",
+ content: z.object({
+ c: z.string(),
+ }),
+ }),
+ ],
+ }),
+ ],
+ }),
+ ]);
+ api = {
+ A: function () {
+ return Promise.resolve({
+ status: 200,
+ });
+ },
+ B: function () {
+ return Promise.resolve({
+ status: 200,
+ body: { type: "application/json", content: { b: "b" } },
+ });
+ },
+ };
+ return [4 /*yield*/, api["B"]({
+ method: "POST",
+ path: ["b"],
+ query: {},
+ headers: {},
+ })];
+ case 1:
+ res = _a.sent();
+ globals_1.expect(res).toEqual({
+ status: 200,
+ body: {
+ type: "application/json",
+ content: { b: "b" },
+ },
+ });
+ open = openapi_1.openApi(schema);
+ globals_1.expect(open).toEqual({
+ components: undefined,
+ info: {
+ title: "No title",
+ version: "1.0.0",
+ },
+ openapi: "3.0.0",
+ paths: {
+ "/a": {
+ get: {
+ operationId: "A",
+ parameters: undefined,
+ requestBody: undefined,
+ responses: {
+ 200: {
+ content: undefined,
+ description: undefined,
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
+ },
+ },
+ "/b": {
+ post: {
+ operationId: "B",
+ parameters: undefined,
+ requestBody: undefined,
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ properties: {
+ b: {
+ type: "string",
+ },
+ },
+ required: ["b"],
+ type: "object",
+ },
+ },
+ "plain/text": {
+ schema: {
+ properties: {
+ c: {
+ type: "string",
+ },
+ },
+ required: ["c"],
+ type: "object",
+ },
+ },
+ },
+ description: undefined,
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
+ },
+ },
+ },
+ servers: [],
+ });
+ return [2 /*return*/];
+ }
+ });
+}); });
diff --git a/src/__tests__/router_minimal.test.ts b/src/__tests__/router_minimal.test.ts
index 0744b1e..006283c 100644
--- a/src/__tests__/router_minimal.test.ts
+++ b/src/__tests__/router_minimal.test.ts
@@ -1,164 +1,169 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import * as z from "../index";
-import {openApi} from "../openapi";
+import { openApi } from "../openapi";
test("minimal one endpoint", async () => {
- const schema = z.endpoints([
- z.endpoint({
- name: "A",
- method: "GET",
- responses: [
- z.response({
- status: 200
- })
- ]
- })
- ]);
+ const schema = z.endpoints([
+ z.endpoint({
+ name: "A",
+ method: "GET",
+ responses: [
+ z.response({
+ status: 200,
+ }),
+ ],
+ }),
+ ]);
- const api: z.Api = {
- A: ({path}) => {
- expect(path[0]).toEqual("");
- return Promise.resolve({
- status: 200,
- })
- }
- };
+ const api: z.Api = {
+ A: ({ path }) => {
+ expect(path[0]).toEqual("");
+ return Promise.resolve({
+ status: 200,
+ });
+ },
+ };
- const res = await api["A"]({
- method: "GET",
- path: [""],
- query: {},
- headers: {}
- });
- expect(res).toEqual({status: 200});
+ const res = await api["A"]({
+ method: "GET",
+ path: [""],
+ query: {},
+ headers: {},
+ });
+ expect(res).toEqual({ status: 200 });
});
test("minimal endpoint two endpoints", async () => {
- const schema = z.union([
- z.endpoint({
- name: "A",
- method: "GET",
- path:[z.literal("a")],
- responses: [
- z.response({
- status: 200
- })
- ]
+ const schema = z.union([
+ z.endpoint({
+ name: "A",
+ method: "GET",
+ path: [z.literal("a")],
+ responses: [
+ z.response({
+ status: 200,
}),
- z.endpoint({
- name: "B",
- method: "POST",
- path:[z.literal("b")],
- responses: [
- z.response({
- status: 200,
- body: [
- z.body({
- type: "application/json",
- content: z.object({
- b: z.string()
- })
- }),
- z.body({
- type: "plain/text",
- content: z.object({
- c: z.string()
- })
- })
- ]
- })
- ]
- })
- ]);
-
- const api: z.Api = {
- A: () => Promise.resolve({
- status: 200,
+ ],
+ }),
+ z.endpoint({
+ name: "B",
+ method: "POST",
+ path: [z.literal("b")],
+ responses: [
+ z.response({
+ status: 200,
+ body: [
+ z.body({
+ type: "application/json",
+ content: z.object({
+ b: z.string(),
+ }),
+ }),
+ z.body({
+ type: "plain/text",
+ content: z.object({
+ c: z.string(),
+ }),
+ }),
+ ],
}),
- B: () => Promise.resolve({
- status: 200,
- body: {type: "application/json", content: {b: "b"}}
- })
- };
+ ],
+ }),
+ ]);
- const res = await api["B"]({
- method: "POST",
- path: ["b"],
- query: {},
- headers: {},
- });
- expect(res).toEqual({
+ const api: z.Api = {
+ A: () =>
+ Promise.resolve({
+ status: 200,
+ }),
+ B: () =>
+ Promise.resolve({
status: 200,
- body: {
- type: "application/json",
- content: {b: "b"}
- }
- });
+ body: { type: "application/json", content: { b: "b" } },
+ }),
+ };
- const open = openApi(schema);
- expect(open).toEqual({
- components: undefined,
- info: {
- title: "No title",
- version: "1.0.0"
+ const res = await api["B"]({
+ method: "POST",
+ path: ["b"],
+ query: {},
+ headers: {},
+ });
+ expect(res).toEqual({
+ status: 200,
+ body: {
+ type: "application/json",
+ content: { b: "b" },
+ },
+ });
+
+ const open = openApi(schema);
+ expect(open).toEqual({
+ components: undefined,
+ info: {
+ title: "No title",
+ version: "1.0.0",
+ },
+ openapi: "3.0.0",
+ paths: {
+ "/a": {
+ get: {
+ operationId: "A",
+ parameters: undefined,
+ requestBody: undefined,
+ responses: {
+ 200: {
+ content: undefined,
+ description: undefined,
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
},
- openapi: "3.0.0",
- paths: {
- "/a": {
- get: {
- operationId: "A",
- parameters: undefined,
- requestBody: undefined,
- responses: {
- 200: {
- content: undefined,
- description: undefined,
- headers: undefined
- },
+ },
+ "/b": {
+ post: {
+ operationId: "B",
+ parameters: undefined,
+ requestBody: undefined,
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: {
+ properties: {
+ b: {
+ type: "string",
+ },
},
- summary: undefined,
- tags: undefined,
+ required: ["b"],
+ type: "object",
+ },
},
- },
- "/b": {
- post: {
- operationId: "B",
- parameters: undefined,
- requestBody: undefined,
- responses: {
- 200: {
- content: {
- "application/json": {
- schema: {
- properties: {
- b: {
- type: "string"
- }
- },
- required: ["b"],
- type: "object"
- }
- },
- "plain/text": {
- schema: {
- properties: {
- c: {
- type: "string"
- }
- },
- required: ["c"],
- type: "object"
- }
- }
- },
- description: undefined,
- headers: undefined
- }
+ "plain/text": {
+ schema: {
+ properties: {
+ c: {
+ type: "string",
+ },
},
- summary: undefined,
- tags: undefined
- }
- }
+ required: ["c"],
+ type: "object",
+ },
+ },
+ },
+ description: undefined,
+ headers: undefined,
+ },
+ },
+ summary: undefined,
+ tags: undefined,
},
- servers: []
- });
+ },
+ },
+ servers: [],
+ });
});
diff --git a/src/__tests__/type.test.js b/src/__tests__/type.test.js
new file mode 100644
index 0000000..b9c8e91
--- /dev/null
+++ b/src/__tests__/type.test.js
@@ -0,0 +1,107 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// @ts-ignore TS6133
+var globals_1 = require("@jest/globals");
+var z = __importStar(require("../index"));
+globals_1.test("type string", function () {
+ var zod = z.string();
+ globals_1.expect(z.createSchema(zod)).toEqual({
+ type: "string",
+ });
+});
+globals_1.test("type object", function () {
+ var zod = z.object({
+ id: z.number(),
+ name: z.string(),
+ tag: z.string().optional(),
+ });
+ globals_1.expect(z.createSchema(zod)).toEqual({
+ type: "object",
+ required: ["id", "name"],
+ properties: {
+ id: {
+ type: "integer",
+ format: "int32",
+ },
+ name: {
+ type: "string",
+ },
+ tag: {
+ type: "string",
+ },
+ },
+ });
+});
+globals_1.test("type nested object", function () {
+ var zod = z.object({
+ id: z.number(),
+ name: z.string(),
+ obj: z
+ .object({
+ test: z.string(),
+ })
+ .optional(),
+ });
+ globals_1.expect(z.createSchema(zod)).toEqual({
+ type: "object",
+ required: ["id", "name"],
+ properties: {
+ id: {
+ type: "integer",
+ format: "int32",
+ },
+ name: {
+ type: "string",
+ },
+ obj: {
+ properties: {
+ test: {
+ type: "string",
+ },
+ },
+ required: ["test"],
+ type: "object",
+ },
+ },
+ });
+});
+globals_1.test("type array", function () {
+ var zod = z.array(z.string());
+ globals_1.expect(z.createSchema(zod)).toEqual({
+ type: "array",
+ items: {
+ type: "string",
+ },
+ });
+});
+globals_1.test("type integer", function () {
+ var int32 = z.integer();
+ globals_1.expect(z.createSchema(int32)).toEqual({
+ format: "int32",
+ type: "integer",
+ });
+ var int64 = z.integer("int64").max(100);
+ globals_1.expect(z.createSchema(int64)).toEqual({
+ format: "int64",
+ type: "integer",
+ });
+});
diff --git a/src/__tests__/type.test.ts b/src/__tests__/type.test.ts
index a93c2a0..2a4801e 100644
--- a/src/__tests__/type.test.ts
+++ b/src/__tests__/type.test.ts
@@ -1,9 +1,12 @@
+// @ts-ignore TS6133
+import { expect, test } from "@jest/globals";
+
import * as z from "../index";
test("type string", () => {
const zod = z.string();
expect(z.createSchema(zod)).toEqual({
- type: "string"
+ type: "string",
});
});
@@ -11,7 +14,7 @@ test("type object", () => {
const zod = z.object({
id: z.number(),
name: z.string(),
- tag: z.string().optional()
+ tag: z.string().optional(),
});
expect(z.createSchema(zod)).toEqual({
type: "object",
@@ -19,15 +22,15 @@ test("type object", () => {
properties: {
id: {
type: "integer",
- format: "int32"
+ format: "int32",
},
name: {
- type: "string"
+ type: "string",
},
tag: {
- type: "string"
- }
- }
+ type: "string",
+ },
+ },
});
});
@@ -37,9 +40,9 @@ test("type nested object", () => {
name: z.string(),
obj: z
.object({
- test: z.string()
+ test: z.string(),
})
- .optional()
+ .optional(),
});
expect(z.createSchema(zod)).toEqual({
type: "object",
@@ -47,21 +50,21 @@ test("type nested object", () => {
properties: {
id: {
type: "integer",
- format: "int32"
+ format: "int32",
},
name: {
- type: "string"
+ type: "string",
},
obj: {
properties: {
test: {
- type: "string"
- }
+ type: "string",
+ },
},
required: ["test"],
- type: "object"
- }
- }
+ type: "object",
+ },
+ },
});
});
@@ -70,8 +73,8 @@ test("type array", () => {
expect(z.createSchema(zod)).toEqual({
type: "array",
items: {
- type: "string"
- }
+ type: "string",
+ },
});
});
@@ -79,12 +82,12 @@ test("type integer", () => {
const int32 = z.integer();
expect(z.createSchema(int32)).toEqual({
format: "int32",
- type: "integer"
+ type: "integer",
});
const int64 = z.integer("int64").max(100);
expect(z.createSchema(int64)).toEqual({
format: "int64",
- type: "integer"
+ type: "integer",
});
});
diff --git a/src/api.ts b/src/api.ts
index 35f57a0..fd5e5d4 100644
--- a/src/api.ts
+++ b/src/api.ts
@@ -1,24 +1,43 @@
-import * as z from "./index";
-import {PickUnion} from "./utils";
+import * as z from "./deps";
+import { HttpSchema } from "./model";
+import { PickUnion } from "./utils";
-export type ApiNames = z.output extends {
+export type ApiNames = z.output extends {
name: string;
}
? z.output["name"]
: never;
+export type ApiRequestAttributes =
+ | "method"
+ | "path"
+ | "query"
+ | "headers"
+ | "body";
+export type ApiResponseAttributes = "status" | "headers" | "body";
+export type ApiRequest = Extract<
+ z.output,
+ { name: Key }
+>;
+export type ApiResponse = ApiRequest<
+ T,
+ Key
+>["responses"];
+export type ApiFunction = (
+ request: Readonly, ApiRequestAttributes>>
+) => Readonly<
+ Promise<
+ ApiResponseAttributes extends keyof ApiResponse
+ ? PickUnion, ApiResponseAttributes>
+ : undefined
+ >
+>;
-export type ApiRequest = Extract, { name: Key }>;
-export type ApiResponse = ApiRequest["responses"]
-export type ApiFunction = (
- request: Readonly, "method" | "path" | "query" | "headers" | "body">>
-) => Readonly,"status" | "headers" | "body">>>;
-
-export type Api = {
+export type Api = {
[Key in ApiNames]: ApiFunction;
};
-export type ApiFragment<
- T extends z.HttpSchema,
- Key extends ApiNames
-> = Pick, Key>;
+export type ApiFragment> = Pick<
+ Api,
+ Key
+>;
diff --git a/src/client.ts b/src/client.ts
index 596dbb4..b276c33 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -1,11 +1,36 @@
-import * as z from "./index";
-import {PickUnion} from "./utils";
+import * as z from "./deps";
+import { HttpSchema } from "./model";
+import { PickUnion } from "./utils";
-type ClientRequestAttributes = "method" | "path" | "query" | "headers" | "body"
-type ClientResponseAttributes = "status" | "headers" | "body"
-type ClientRequest = PickUnion, ClientRequestAttributes>
-type ClientRequestResponses = PickUnion, ClientRequestAttributes | "responses">
-type ClientMapper> = NonNullable<{ method: R['method'], path: R['path'], query: R['query'], headers: R['headers'], body?: R['body'] }>
-type ClientMatch> = Pick, ClientMapper>['responses'], ClientResponseAttributes>
+type ClientRequestAttributes = "method" | "path" | "query" | "headers" | "body";
+type ClientResponseAttributes = "status" | "headers" | "body";
+type ClientRequest = PickUnion<
+ z.output,
+ ClientRequestAttributes
+>;
+type ClientRequestResponses = PickUnion<
+ z.output,
+ ClientRequestAttributes | "responses"
+>;
+type ClientMapper<
+ T extends HttpSchema,
+ R extends ClientRequest
+> = NonNullable<{
+ method: R["method"];
+ path: R["path"];
+ query: R["query"];
+ headers: R["headers"];
+ body?: R["body"];
+}>;
+type ClientMatch> = Extract<
+ ClientRequestResponses,
+ ClientMapper
+>["responses"];
-export type Client = >(req: R) => Promise>;
+export type Client = >(
+ req: R
+) => Promise<
+ ClientResponseAttributes extends keyof ClientMatch
+ ? PickUnion, ClientResponseAttributes>
+ : undefined
+>;
diff --git a/src/component.ts b/src/component.ts
index c3c491e..7848e54 100644
--- a/src/component.ts
+++ b/src/component.ts
@@ -1,33 +1,27 @@
import * as z from "./deps";
-import { Integer } from "./integer";
-import { ReferenceType } from "./reference";
-export type ComponentType =
- | z.ZodObject
- | z.ZodArray
- | z.ZodString
- | z.ZodBigInt
- | z.ZodNumber
- | z.ZodBoolean
- | z.ZodOptional
- | z.ZodTypeAny
- | Integer;
-
-export class Component extends z.ZodType<
+export class Component extends z.ZodType<
T["_output"],
T["_def"],
T["_input"]
> {
- readonly component: ComponentType;
+ _parse(
+ _ctx: z.ParseContext,
+ _data: any,
+ _parsedType: z.ZodParsedType
+ ): z.ParseReturnType {
+ return this.component._parse(_ctx, _data, _parsedType);
+ }
+ readonly component: z.ZodTypeAny;
- constructor(type: ComponentType) {
+ constructor(type: z.ZodTypeAny) {
super(type._def);
this.component = type;
}
public toJSON = () => this._def;
- static create(type: ComponentType) {
+ static create(type: z.ZodTypeAny) {
return new Component(type);
}
}
diff --git a/src/data/petstore.js b/src/data/petstore.js
new file mode 100644
index 0000000..a9b9333
--- /dev/null
+++ b/src/data/petstore.js
@@ -0,0 +1,167 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = {
+ openapi: "3.0.0",
+ info: {
+ version: "1.0.0",
+ title: "Swagger Petstore",
+ license: {
+ name: "MIT",
+ },
+ },
+ servers: [
+ {
+ url: "http://petstore.swagger.io/v1",
+ },
+ ],
+ paths: {
+ "/pets": {
+ get: {
+ summary: "List all pets",
+ operationId: "listPets",
+ tags: ["pets"],
+ parameters: [
+ {
+ name: "limit",
+ in: "query",
+ description: "How many items to return at one time (max 100)",
+ required: false,
+ schema: {
+ type: "integer",
+ format: "int32",
+ },
+ },
+ ],
+ responses: {
+ "200": {
+ description: "A paged array of pets",
+ headers: {
+ "x-next": {
+ description: "A link to the next page of responses",
+ schema: {
+ type: "string",
+ },
+ },
+ },
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Pets",
+ },
+ },
+ },
+ },
+ default: {
+ description: "unexpected error",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
+ post: {
+ summary: "Create a pet",
+ operationId: "createPets",
+ tags: ["pets"],
+ responses: {
+ "201": {
+ description: "Null response",
+ },
+ default: {
+ description: "unexpected error",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "/pets/{petId}": {
+ get: {
+ summary: "Info for a specific pet",
+ operationId: "showPetById",
+ tags: ["pets"],
+ parameters: [
+ {
+ name: "petId",
+ in: "path",
+ required: true,
+ description: "The id of the pet to retrieve",
+ schema: {
+ type: "string",
+ },
+ },
+ ],
+ responses: {
+ "200": {
+ description: "Expected response to a valid request",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Pet",
+ },
+ },
+ },
+ },
+ default: {
+ description: "unexpected error",
+ content: {
+ "application/json": {
+ schema: {
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ components: {
+ schemas: {
+ Pet: {
+ type: "object",
+ required: ["id", "name"],
+ properties: {
+ id: {
+ type: "integer",
+ format: "int64",
+ },
+ name: {
+ type: "string",
+ },
+ tag: {
+ type: "string",
+ },
+ },
+ },
+ Pets: {
+ type: "array",
+ items: {
+ $ref: "#/components/schemas/Pet",
+ },
+ },
+ Error: {
+ type: "object",
+ required: ["code", "message"],
+ properties: {
+ code: {
+ type: "integer",
+ format: "int32",
+ },
+ message: {
+ type: "string",
+ },
+ },
+ },
+ },
+ },
+};
diff --git a/src/data/petstore.ts b/src/data/petstore.ts
index 228e965..8650f78 100644
--- a/src/data/petstore.ts
+++ b/src/data/petstore.ts
@@ -4,13 +4,13 @@ export default {
version: "1.0.0",
title: "Swagger Petstore",
license: {
- name: "MIT"
- }
+ name: "MIT",
+ },
},
servers: [
{
- url: "http://petstore.swagger.io/v1"
- }
+ url: "http://petstore.swagger.io/v1",
+ },
],
paths: {
"/pets": {
@@ -26,9 +26,9 @@ export default {
required: false,
schema: {
type: "integer",
- format: "int32"
- }
- }
+ format: "int32",
+ },
+ },
],
responses: {
"200": {
@@ -37,29 +37,29 @@ export default {
"x-next": {
description: "A link to the next page of responses",
schema: {
- type: "string"
- }
- }
+ type: "string",
+ },
+ },
},
content: {
"application/json": {
schema: {
- $ref: "#/components/schemas/Pets"
- }
- }
- }
+ $ref: "#/components/schemas/Pets",
+ },
+ },
+ },
},
default: {
description: "unexpected error",
content: {
"application/json": {
schema: {
- $ref: "#/components/schemas/Error"
- }
- }
- }
- }
- }
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
},
post: {
summary: "Create a pet",
@@ -67,20 +67,20 @@ export default {
tags: ["pets"],
responses: {
"201": {
- description: "Null response"
+ description: "Null response",
},
default: {
description: "unexpected error",
content: {
"application/json": {
schema: {
- $ref: "#/components/schemas/Error"
- }
- }
- }
- }
- }
- }
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
},
"/pets/{petId}": {
get: {
@@ -94,9 +94,9 @@ export default {
required: true,
description: "The id of the pet to retrieve",
schema: {
- type: "string"
- }
- }
+ type: "string",
+ },
+ },
],
responses: {
"200": {
@@ -104,24 +104,24 @@ export default {
content: {
"application/json": {
schema: {
- $ref: "#/components/schemas/Pet"
- }
- }
- }
+ $ref: "#/components/schemas/Pet",
+ },
+ },
+ },
},
default: {
description: "unexpected error",
content: {
"application/json": {
schema: {
- $ref: "#/components/schemas/Error"
- }
- }
- }
- }
- }
- }
- }
+ $ref: "#/components/schemas/Error",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
},
components: {
schemas: {
@@ -131,21 +131,21 @@ export default {
properties: {
id: {
type: "integer",
- format: "int64"
+ format: "int64",
},
name: {
- type: "string"
+ type: "string",
},
tag: {
- type: "string"
- }
- }
+ type: "string",
+ },
+ },
},
Pets: {
type: "array",
items: {
- $ref: "#/components/schemas/Pet"
- }
+ $ref: "#/components/schemas/Pet",
+ },
},
Error: {
type: "object",
@@ -153,13 +153,13 @@ export default {
properties: {
code: {
type: "integer",
- format: "int32"
+ format: "int32",
},
message: {
- type: "string"
- }
- }
- }
- }
- }
+ type: "string",
+ },
+ },
+ },
+ },
+ },
} as const;
diff --git a/src/deps.ts b/src/deps.ts
index 1b56b9a..392f769 100644
--- a/src/deps.ts
+++ b/src/deps.ts
@@ -1,13 +1 @@
-import { ZodTypeAny } from "zod";
-
export * from "zod";
-
-export type ZodRawShape = {
- [k: string]: ZodTypeAny;
-};
-
-export namespace errorUtil {
- export type ErrMessage = string | { message?: string };
- export const errToObj = (message?: ErrMessage) =>
- typeof message === "string" ? { message } : message || {};
-}
diff --git a/src/dsl.ts b/src/dsl.ts
index 46e6781..8c2522b 100644
--- a/src/dsl.ts
+++ b/src/dsl.ts
@@ -1,187 +1,192 @@
import * as z from "./deps";
-import {Content, HttpBodyObject, HttpBodyUnion, HttpObject, HttpResponseObject, Path} from "./model";
-import {Parameter} from "./parameter";
+import {
+ Content,
+ HttpBodyObject,
+ HttpBodyUnion,
+ HttpObject,
+ HttpResponseObject,
+ Path,
+} from "./model";
+import { Parameter } from "./parameter";
export type Body = {
- readonly type: string;
- readonly content: Content;
+ readonly type: string;
+ readonly content: Content;
};
export type Request = {
- readonly name: string;
- readonly summary?: string;
- readonly tags?: [z.ZodLiteral, ...z.ZodLiteral[]] | [];
- readonly method: "GET" | "POST" | "PUT" | "DELETE";
- readonly path?: [Path, ...Path[]];
- readonly query?: { [key: string]: Parameter };
- readonly headers?: { [key: string]: Parameter };
- readonly body?:
- | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
- | [HttpBodyObject]
- | HttpBodyObject;
+ readonly name: string;
+ readonly summary?: string;
+ readonly tags?: [z.ZodLiteral, ...z.ZodLiteral[]] | [];
+ readonly method: "GET" | "POST" | "PUT" | "DELETE";
+ readonly path?: [Path, ...Path[]];
+ readonly query?: { [key: string]: Parameter };
+ readonly headers?: { [key: string]: Parameter };
+ readonly body?:
+ | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ | [HttpBodyObject]
+ | HttpBodyObject;
};
export type Response = {
- readonly description?: string;
- readonly status: number | string;
- readonly headers?: { [key: string]: Parameter };
- readonly body?:
- | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
- | [HttpBodyObject]
- | HttpBodyObject;
+ readonly description?: string;
+ readonly status: number | string;
+ readonly headers?: { [key: string]: Parameter };
+ readonly body?:
+ | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ | [HttpBodyObject]
+ | HttpBodyObject;
};
export type Endpoint = Request & {
- responses?:
- | [HttpResponseObject, HttpResponseObject, ...HttpResponseObject[]]
- | [HttpResponseObject];
+ responses?:
+ | [HttpResponseObject, HttpResponseObject, ...HttpResponseObject[]]
+ | [HttpResponseObject];
};
export function endpoints(types: [T]): T;
-export function endpoints(types: [T1, T2, ...T3[]]): z.ZodUnion<[T1, T2, ...T3[]]>;
+export function endpoints<
+ T1 extends HttpObject,
+ T2 extends HttpObject,
+ T3 extends HttpObject
+>(types: [T1, T2, ...T3[]]): z.ZodUnion<[T1, T2, ...T3[]]>;
export function endpoints(
- types: [T] | [T, T, ...T[]],
+ types: [T] | [T, T, ...T[]]
): T | z.ZodUnion<[T, T, ...T[]]> {
- // @ts-ignore
- return (types.length === 1) ? types[0] : z.union<[T, T, ...T[]]>(types);
+ // @ts-ignore
+ return types.length === 1 ? types[0] : z.union<[T, T, ...T[]]>(types);
}
export type EndpointMapper = z.ZodObject<{
- name: z.ZodTransformer>,
- z.ZodLiteral>;
- summary: T["summary"] extends string
- ? z.ZodTransformer>,
- z.ZodLiteral>
- : z.ZodUndefined;
- tags: T["tags"] extends [z.ZodTypeAny, ...z.ZodTypeAny[]] | []
- ? z.ZodTransformer>,
- z.ZodTuple>
- : z.ZodUndefined;
- method: z.ZodLiteral;
- path: T["path"] extends [Path, ...Path[]]
- ? z.ZodTuple
- : z.ZodTuple<[z.ZodLiteral<"">]>;
- query: T["query"] extends z.ZodRawShape
- ? z.ZodObject
- : z.ZodObject<{}>;
- headers: T["headers"] extends z.ZodRawShape
- ? z.ZodObject
- : z.ZodObject<{}>;
- body: T["body"] extends [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
- ? z.ZodUnion
- : T["body"] extends [HttpBodyObject]
- ? T["body"][0]
- : T["body"] extends HttpBodyObject
- ? T["body"]
- : z.ZodUndefined;
- responses: T["responses"] extends [
- HttpResponseObject,
- HttpResponseObject,
- ...HttpResponseObject[]
- ]
- ? z.ZodUnion
- : T["responses"] extends [HttpResponseObject]
- ? T["responses"][0]
- : z.ZodUndefined;
+ name: z.ZodDefault>;
+ summary: T["summary"] extends string
+ ? z.ZodDefault>
+ : z.ZodUndefined;
+ tags: T["tags"] extends [z.ZodTypeAny, ...z.ZodTypeAny[]] | []
+ ? z.ZodDefault>
+ : z.ZodUndefined;
+ method: z.ZodLiteral;
+ path: T["path"] extends [Path, ...Path[]]
+ ? z.ZodTuple
+ : z.ZodTuple<[z.ZodLiteral<"">]>;
+ query: T["query"] extends z.ZodRawShape
+ ? z.ZodObject
+ : z.ZodObject<{}>;
+ headers: T["headers"] extends z.ZodRawShape
+ ? z.ZodObject
+ : z.ZodObject<{}>;
+ body: T["body"] extends [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ ? z.ZodUnion
+ : T["body"] extends [HttpBodyObject]
+ ? T["body"][0]
+ : T["body"] extends HttpBodyObject
+ ? T["body"]
+ : z.ZodUndefined;
+ responses: T["responses"] extends [
+ HttpResponseObject,
+ HttpResponseObject,
+ ...HttpResponseObject[]
+ ]
+ ? z.ZodUnion
+ : T["responses"] extends [HttpResponseObject]
+ ? T["responses"][0]
+ : z.ZodUndefined;
}>;
-export function endpoint(endpoint: Readonly): EndpointMapper {
+export function endpoint(endpoint: T): EndpointMapper {
+ // @ts-ignore
+ return z.object({
+ name: z.literal(endpoint.name).default(endpoint.name),
+ summary:
+ endpoint.summary !== undefined
+ ? z.literal(endpoint.summary).default(endpoint.summary)
+ : z.undefined(),
+ tags:
+ endpoint.tags !== undefined
+ ? // @ts-ignore
+ z.tuple(endpoint.tags).default(endpoint.tags.map((_) => _._def.value))
+ : z.undefined(),
+ method: z.literal(endpoint.method),
+ // @ts-ignore
+ path: endpoint.path !== undefined ? z.tuple(endpoint.path) : [],
+ query:
+ endpoint.query !== undefined
+ ? z.object(endpoint.query as z.ZodRawShape)
+ : z.object({}),
+ headers:
+ endpoint.headers !== undefined
+ ? z.object(endpoint.headers as z.ZodRawShape)
+ : z.object({}),
+ // @ts-ignore
+ body: transformBody(endpoint.body),
// @ts-ignore
- return z.object({
- name: z.literal(endpoint.name).default(endpoint.name),
- summary:
- endpoint.summary !== undefined
- ? z.literal(endpoint.summary).default(endpoint.summary)
- : z.undefined(),
- tags:
- endpoint.tags !== undefined
- ? // @ts-ignore
- z.tuple(endpoint.tags).default(endpoint.tags.map(_ => _._def.value))
- : z.undefined(),
- method: z.literal(endpoint.method),
- // @ts-ignore
- path: endpoint.path !== undefined ? z.tuple(endpoint.path) : [],
- query:
- endpoint.query !== undefined
- ? z.object(endpoint.query as z.ZodRawShape)
- : z.object({}),
- headers:
- endpoint.headers !== undefined
- ? z.object(endpoint.headers as z.ZodRawShape)
- : z.object({}),
- // @ts-ignore
- body: transformBody(endpoint.body),
- // @ts-ignore
- responses:
- endpoint.responses !== undefined
- ? // @ts-ignore
- z.union(endpoint.responses)
- : z.undefined()
- });
+ responses:
+ endpoint.responses !== undefined
+ ? // @ts-ignore
+ z.union(endpoint.responses)
+ : z.undefined(),
+ });
}
export type BodyMapper = z.ZodObject<{
- type: z.ZodLiteral;
- content: T["content"];
+ type: z.ZodLiteral;
+ content: T["content"];
}>;
export function body(body: Readonly): BodyMapper {
- return z.object({
- type: z.literal(body.type),
- content: body.content
- });
+ return z.object({
+ type: z.literal(body.type),
+ content: body.content,
+ });
}
export type ResponseMapper = z.ZodObject<{
- description: T["description"] extends string
- ? z.ZodLiteral
- : z.ZodUndefined;
- status: z.ZodLiteral;
- headers: T["headers"] extends z.ZodRawShape
- ? z.ZodObject
- : z.ZodUndefined;
- body: T["body"] extends [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
- ? z.ZodUnion
- : T["body"] extends [HttpBodyObject]
- ? T["body"][0]
- : T["body"] extends HttpBodyObject
- ? T["body"]
- : z.ZodUndefined;
+ description: T["description"] extends string
+ ? z.ZodLiteral
+ : z.ZodUndefined;
+ status: z.ZodLiteral;
+ headers: T["headers"] extends z.ZodRawShape
+ ? z.ZodObject
+ : z.ZodUndefined;
+ body: T["body"] extends [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ ? z.ZodUnion
+ : T["body"] extends [HttpBodyObject]
+ ? T["body"][0]
+ : T["body"] extends HttpBodyObject
+ ? T["body"]
+ : z.ZodUndefined;
}>;
export function response(
- response: Readonly
+ response: Readonly
): ResponseMapper {
- // @ts-ignore
- return z.object({
- status: z.literal(response.status),
- description: z.literal(response.description),
- headers:
- response.headers !== undefined
- ? z.object(response.headers as z.ZodRawShape)
- : z.undefined(),
- body: transformBody(response.body)
- });
+ // @ts-ignore
+ return z.object({
+ status: z.literal(response.status),
+ description: z.literal(response.description),
+ headers:
+ response.headers !== undefined
+ ? z.object(response.headers as z.ZodRawShape)
+ : z.undefined(),
+ body: transformBody(response.body),
+ });
}
function transformBody(
- body?:
- | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
- | [HttpBodyObject]
- | HttpBodyObject
+ body?:
+ | [HttpBodyObject, HttpBodyObject, ...HttpBodyObject[]]
+ | [HttpBodyObject]
+ | HttpBodyObject
): HttpBodyUnion {
- if (body === undefined) {
- return z.undefined();
- }
- if (Array.isArray(body)) {
- if (body.length === 1) {
- return body[0];
- }
- // @ts-ignore
- return z.union(body);
+ if (body === undefined) {
+ return z.undefined();
+ }
+ if (Array.isArray(body)) {
+ if (body.length === 1) {
+ return body[0];
}
- return body;
+ // @ts-ignore
+ return z.union(body);
+ }
+ return body;
}
diff --git a/src/index.ts b/src/index.ts
index d223b24..1896d36 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,12 +1,11 @@
-export * from "./deps";
-
-export { Parameter, parameter } from "./parameter";
-export { Reference, reference, ReferenceType } from "./reference";
-export { Component, component, ComponentType } from "./component";
-export { Integer, integer } from "./integer";
-export { openApi, createSchema } from "./openapi";
-export * from "./dsl";
-export * from "./model";
export * from "./api";
export * from "./client";
+export { Component, component } from "./component";
+export * from "./deps";
+export * from "./dsl";
+export { Integer, integer } from "./integer";
export * from "./match";
+export * from "./model";
+export { createSchema, openApi } from "./openapi";
+export { Parameter, parameter } from "./parameter";
+export { Reference, reference } from "./reference";
diff --git a/src/integer.ts b/src/integer.ts
index 8cd0263..6af5edd 100644
--- a/src/integer.ts
+++ b/src/integer.ts
@@ -1,82 +1,22 @@
import * as z from "./deps";
-import { errorUtil } from "./deps";
-export interface IntegerDef extends z.ZodTypeDef {
- t: z.ZodTypes.number;
+export interface IntegerDef extends z.ZodNumberDef {
format: string;
}
-export class Integer extends z.ZodType {
+export class Integer extends z.ZodNumber {
public toJSON = () => this._def;
+ constructor(def: IntegerDef) {
+ super(def);
+ }
static create = (format?: string): Integer => {
return new Integer({
- t: z.ZodTypes.number,
- format: format ?? "int32"
+ checks: [],
+ typeName: z.ZodFirstPartyTypeKind.ZodNumber,
+ format: format ?? "int32",
});
};
-
- min = (minimum: number, message?: errorUtil.ErrMessage) =>
- this.refinement(data => data >= minimum, {
- code: z.ZodIssueCode.too_small,
- minimum,
- type: "number",
- inclusive: true,
- ...errorUtil.errToObj(message)
- });
-
- max = (maximum: number, message?: errorUtil.ErrMessage) =>
- this.refinement(data => data <= maximum, {
- code: z.ZodIssueCode.too_big,
- maximum,
- type: "number",
- inclusive: true,
- ...errorUtil.errToObj(message)
- });
-
- int = (message?: errorUtil.ErrMessage) =>
- this.refinement(data => Number.isInteger(data), {
- code: z.ZodIssueCode.invalid_type,
- expected: "integer",
- received: "number",
- ...errorUtil.errToObj(message)
- });
-
- positive = (message?: errorUtil.ErrMessage) =>
- this.refinement(data => data > 0, {
- code: z.ZodIssueCode.too_small,
- minimum: 0,
- type: "number",
- inclusive: false,
- ...errorUtil.errToObj(message)
- });
-
- negative = (message?: errorUtil.ErrMessage) =>
- this.refinement(data => data < 0, {
- code: z.ZodIssueCode.too_big,
- maximum: 0,
- type: "number",
- inclusive: false,
- ...errorUtil.errToObj(message)
- });
-
- nonpositive = (message?: errorUtil.ErrMessage) =>
- this.refinement(data => data <= 0, {
- code: z.ZodIssueCode.too_big,
- maximum: 0,
- type: "number",
- inclusive: true,
- ...errorUtil.errToObj(message)
- });
-
- nonnegative = (message?: errorUtil.ErrMessage) =>
- this.refinement(data => data >= 0, {
- code: z.ZodIssueCode.too_small,
- minimum: 0,
- type: "number",
- inclusive: true,
- ...errorUtil.errToObj(message)
- });
}
export const integer = Integer.create;
diff --git a/src/match.ts b/src/match.ts
index 4e13ea4..0829254 100644
--- a/src/match.ts
+++ b/src/match.ts
@@ -1,9 +1,63 @@
-import * as z from "./index";
+import * as z from "./deps";
+import {
+ HttpObject,
+ HttpRequestObject,
+ HttpResponseObject,
+ HttpResponseUnion,
+ HttpUnion,
+} from "./model";
-export type MatchRequest = Pick, "method" | "path" | "query" | "headers" | "body">
+export type MatchRequest = Pick<
+ z.output,
+ "method" | "path" | "query" | "headers" | "body"
+>;
+export type MatchResponse = Pick<
+ z.output,
+ "status" | "headers" | "body"
+>;
-const picker = { method: true, path: true, query:true, headers:true, body: true} as const
-export function matchRequest(schema: T, req: MatchRequest): z.HttpObject | undefined {
- return schema.options
- .find(endpoint => endpoint.pick(picker).check(req))
-}
\ No newline at end of file
+const requestPicker = {
+ method: true,
+ path: true,
+ query: true,
+ headers: true,
+ body: true,
+} as const;
+const responsePicker = { status: true, headers: true, body: true } as const;
+
+export function matchRequest(
+ schema: HttpUnion,
+ req: MatchRequest
+): HttpObject | undefined {
+ function check(request: HttpRequestObject) {
+ try {
+ request.pick(requestPicker).parse(req);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+
+ return schema.options.find(check);
+}
+
+export function matchResponse(
+ responses: HttpResponseUnion,
+ req: MatchResponse
+): HttpResponseObject | undefined {
+ function check(response: HttpResponseObject) {
+ try {
+ response.pick(responsePicker).parse(req);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ if ("shape" in responses) {
+ return responses;
+ }
+ if ("options" in responses) {
+ return responses.options.find(check);
+ }
+ return undefined;
+}
diff --git a/src/model.ts b/src/model.ts
index 66ff19a..b8e4076 100644
--- a/src/model.ts
+++ b/src/model.ts
@@ -1,14 +1,11 @@
+import { Component } from "./component";
import * as z from "./deps";
import { Parameter } from "./parameter";
import { Reference } from "./reference";
-import { Component } from "./component";
export type Path = z.ZodLiteral | z.ZodString | Parameter;
export type ParameterObject = z.ZodObject<{ [key: string]: Parameter }>;
-export type Content =
- | Reference
- | Component
- | z.ZodType;
+export type Content = Reference | Component | z.ZodObject;
export type HttpBody = {
type: z.ZodLiteral;
@@ -21,17 +18,11 @@ export type HttpBodyUnion =
| z.ZodUndefined;
export type HttpRequest = {
- name:
- | z.ZodTransformer>, z.ZodLiteral>
- | z.ZodUndefined;
+ name: z.ZodDefault> | z.ZodUndefined;
method: z.ZodLiteral;
path: z.ZodTuple<[Path, ...Path[]]> | z.ZodUndefined;
- summary:
- | z.ZodTransformer>, z.ZodLiteral>
- | z.ZodUndefined;
- tags:
- | z.ZodTransformer>, z.ZodTuple>
- | z.ZodUndefined;
+ summary: z.ZodDefault> | z.ZodUndefined;
+ tags: z.ZodDefault> | z.ZodUndefined;
query: ParameterObject;
headers: ParameterObject;
body: HttpBodyUnion;
@@ -52,7 +43,8 @@ export type HttpResponseUnion =
| HttpResponseObject
| z.ZodUnion<
[HttpResponseObject, HttpResponseObject, ...HttpResponseObject[]]
- >;
+ >
+ | z.ZodUndefined;
export type Http = HttpRequest & {
responses: HttpResponseUnion;
diff --git a/src/openapi.ts b/src/openapi.ts
index 91bcb47..508dcec 100644
--- a/src/openapi.ts
+++ b/src/openapi.ts
@@ -1,12 +1,21 @@
+import { Component } from "./component";
import {
+ ZodFirstPartyTypeKind,
+ ZodLiteral,
+ ZodOptional,
+ ZodString,
+ ZodTypeAny,
+} from "./deps";
+import {
+ HttpBodyUnion,
+ HttpObject,
HttpResponseObject,
HttpResponseUnion,
- HttpObject,
HttpSchema,
- HttpBodyUnion,
- ParameterObject as ParameterObj
+ ParameterObject as ParameterObj,
} from "./model";
-
+import { Parameter } from "./parameter";
+import { Reference } from "./reference";
import {
ComponentsObject,
ContentObject,
@@ -21,44 +30,34 @@ import {
ResponseObject,
ResponsesObject,
SchemaObject,
- ServerObject
+ ServerObject,
} from "./utils/openapi3-ts/OpenApi";
-import {
- Parameter,
- Reference,
- ReferenceType,
- Component,
- ComponentType
-} from "./index";
-
-import * as z from "./deps";
-
const base = {
- openapi: "3.0.0"
+ openapi: "3.0.0",
};
-function mapSchema(type: ComponentType): SchemaObject | undefined {
- switch (type._def.t) {
- case z.ZodTypes.number:
+function mapSchema(type: ZodTypeAny): SchemaObject | undefined {
+ switch (type._def.typeName) {
+ case ZodFirstPartyTypeKind.ZodNumber:
if ("format" in type._def) {
return {
type: "integer",
- format: type._def.format
+ format: type._def.format,
};
}
return {
type: "integer",
- format: "int32"
+ format: "int32",
};
- case z.ZodTypes.bigint:
+ case ZodFirstPartyTypeKind.ZodBigInt:
return {
type: "integer",
- format: "int32"
+ format: "int32",
};
- case z.ZodTypes.string:
+ case ZodFirstPartyTypeKind.ZodString:
return {
- type: "string"
+ type: "string",
};
default:
return undefined;
@@ -66,7 +65,7 @@ function mapSchema(type: ComponentType): SchemaObject | undefined {
}
export function createSchema(
- obj: ReferenceType | Reference | Component
+ obj: ZodTypeAny | Reference | Component
): SchemaObject | ReferenceObject | undefined {
if ("reference" in obj) {
return { $ref: `#/components/schemas/${obj.state.name}` };
@@ -80,7 +79,7 @@ export function createSchema(
if ("type" in obj._def) {
return {
type: "array",
- items: createSchema(obj._def.type)
+ items: createSchema(obj._def.type),
};
}
if ("shape" in obj._def) {
@@ -90,18 +89,18 @@ export function createSchema(
properties: Object.keys(shape).reduce((acc, cur) => {
return {
...acc,
- [cur]: createSchema(shape[cur])
+ [cur]: createSchema(shape[cur]),
};
}, {}),
required: Object.keys(shape).reduce((acc, cur) => {
- if (shape[cur]._def.t !== z.ZodTypes.optional) {
+ if (shape[cur]._def.typeName !== ZodFirstPartyTypeKind.ZodOptional) {
return [...acc, cur];
}
return acc;
- }, [])
+ }, []),
};
}
- if ("t" in obj._def) {
+ if ("checks" in obj._def) {
return mapSchema(obj);
}
return undefined;
@@ -126,14 +125,14 @@ function createPaths(options: HttpObject[]): PathsObject {
shape.path._def !== undefined && "items" in shape.path._def
? "/" +
shape.path._def.items
- .map(p => {
+ .map((p) => {
if ("state" in p) {
return `{${p.state.name}}`;
}
- if (p._def.t === z.ZodTypes.string) {
- return `{${p._def.t}}`;
+ if (p._def.typeName === ZodFirstPartyTypeKind.ZodString) {
+ return `{${p._def.typeName}}`;
}
- if (p._def.t === z.ZodTypes.literal) {
+ if (p._def.typeName === ZodFirstPartyTypeKind.ZodLiteral) {
return p._def.value;
}
})
@@ -143,20 +142,26 @@ function createPaths(options: HttpObject[]): PathsObject {
...acc,
[path]: {
...acc[path],
- [method.toLowerCase()]: createOperationObject(cur)
- }
+ [method.toLowerCase()]: createOperationObject(cur),
+ },
};
}, {});
}
function createComponents(options: HttpObject[]): ComponentsObject | undefined {
const schemas = options
- .flatMap(http => {
+ .flatMap((http) => {
return mapResponsesObject(http.shape.responses);
})
- .map(response => {
+ .map((response) => {
const body = response.shape.body;
- return "shape" in body ? body.shape.content : null;
+ if ("shape" in body) {
+ return body.shape.content;
+ }
+ if ("options" in body) {
+ body.options.map((it) => it.shape.content);
+ }
+ return undefined;
})
.reduce((acc, cur) => {
if (cur != null && "reference" in cur && cur.state.name) {
@@ -167,7 +172,7 @@ function createComponents(options: HttpObject[]): ComponentsObject | undefined {
}, {});
return Object.keys(schemas).length > 0
? {
- schemas: schemas
+ schemas: schemas,
}
: undefined;
}
@@ -176,22 +181,20 @@ function createOperationObject(http: HttpObject): OperationObject {
const shape = http._def.shape();
return {
summary:
- "output" in shape.summary._def
- ? shape.summary._def.output._def.value
+ "defaultValue" in shape.summary._def
+ ? shape.summary._def.defaultValue()
: undefined,
operationId:
- "output" in shape.name._def
- ? shape.name._def.output._def.value
+ "defaultValue" in shape.name._def
+ ? shape.name._def.defaultValue()
: undefined,
tags:
- "output" in shape.tags._def
- ? shape.tags._def.output._def.items.map((x: z.ZodLiteral) =>
- "value" in x._def ? x._def.value : undefined
- )
+ "defaultValue" in shape.tags._def
+ ? (shape.tags._def.defaultValue() as string[])
: undefined,
requestBody: createRequestBody(http),
parameters: createParameterObject(http),
- responses: createResponsesObject(shape.responses)
+ responses: createResponsesObject(shape.responses),
};
}
@@ -211,36 +214,40 @@ function createParameterObject(http: HttpObject) {
: []),
...(shape.path._def && "items" in shape.path._def
? shape.path._def.items
- .filter(it => "state" in it)
+ .filter((it) => "state" in it)
.map(createPathParameterObject)
- : [])
+ : []),
];
return res.length > 0 ? res : undefined;
}
function createPathParameterObject(
- it: z.ZodLiteral | z.ZodString | z.ZodOptional | Parameter
+ it: ZodLiteral