UNPKG

jest-expect-openapi

Version:

Jest/Vitest matcher for asserting valid OpenAPI definitions

1 lines 2.96 kB
{"version":3,"sources":["/Users/erunion/code/readme/oas/packages/jest-expect-openapi/dist/index.cjs","../src/index.ts"],"names":["pass","error"],"mappings":"AAAA;ACEA,uDAAwC;AAyBxC,MAAA,SAAO,2BAAA,CAEL,UAAA,EACA,WAAA,EACmD;AACnD,EAAA,MAAM,EAAE,WAAA,EAAa,cAAc,EAAA,EAAI,IAAA,CAAK,KAAA;AAC5C,EAAA,MAAM,QAAA,EAGwE,CAACA,KAAAA,EAAMC,MAAAA,EAAAA,GAAU,CAAA,EAAA,GAAM;AACnG,IAAA,OACE,CAAA,EAAA;AAA0F;AAAA;AAAA;AAEvF;AAEP,EAAA;AAGI,EAAA;AACA,EAAA;AACF,IAAA;AACF,EAAA;AAEQ,EAAA;AAEI,IAAA;AACN,MAAA;AACF,IAAA;AAEO,IAAA;AAED,EAAA;AAEH,EAAA;AACL,IAAA;AACA,IAAA;AACF,EAAA;AACF;ADtCY;AACA;AACA","file":"/Users/erunion/code/readme/oas/packages/jest-expect-openapi/dist/index.cjs","sourcesContent":[null,"import type { MatcherState, SyncExpectationResult } from '@vitest/expect';\n\nimport { compileErrors, validate } from '@readme/openapi-parser';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n interface Matchers<R> {\n /**\n * Assert that a given OpenAPI definition is valid.\n *\n * @param transformer If you need to downgrade the given spec to test different usecase you\n * can pass a transformer function. It takes a single argument, `spec`, that you should\n * return.\n */\n toBeAValidOpenAPIDefinition(transformer?: (spec: Record<string, unknown>) => Record<string, unknown>): Promise<R>;\n }\n }\n}\n\n/**\n * Assert that a given OpenAPI definition is valid.\n *\n * @param definition\n * @param transformer If you need to transform the given spec to test different usecase you can\n * pass a transformer function. It takes a single argument, `spec`, that you should return.\n */\nexport default async function toBeAValidOpenAPIDefinition(\n this: jest.MatcherUtils | MatcherState,\n definition: Record<string, unknown>,\n transformer?: (spec: Record<string, unknown>) => Record<string, unknown>,\n): Promise<{ message: () => string; pass: boolean }> {\n const { matcherHint, printReceived } = this.utils;\n const message: (\n pass: boolean,\n error: unknown,\n ) => jest.CustomMatcherResult['message'] | SyncExpectationResult['message'] = (pass, error) => () => {\n return (\n `${matcherHint(pass ? '.not.toBeAValidOpenAPIDefinition' : '.toBeAValidOpenAPIDefinition')}\\n\\n` +\n 'Expected OpenAPI definition to be valid.\\n\\n' +\n `${printReceived(error)}`\n );\n };\n\n // eslint-disable-next-line try-catch-failsafe/json-parse\n let cloned = JSON.parse(JSON.stringify(definition));\n if (transformer) {\n cloned = transformer(cloned);\n }\n\n const { pass, error } = await validate(cloned)\n .then(res => {\n if (res.valid) {\n return { pass: true, error: null };\n }\n\n return { pass: false, error: compileErrors(res) };\n })\n .catch((err: Error) => ({ pass: false, error: err.message }));\n\n return {\n pass,\n message: message(pass, error),\n };\n}\n"]}