diff --git a/README.md b/README.md index 1037562..0303061 100644 --- a/README.md +++ b/README.md @@ -215,7 +215,7 @@ const schema: JSONSchemaType = { } } -const config = envSchema({ +const config = envSchema({ schema }) ``` diff --git a/types/index.d.ts b/types/index.d.ts index 9004d84..18f2289 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,5 +1,4 @@ import Ajv, { KeywordDefinition, JSONSchemaType } from 'ajv'; -import { AnySchema } from 'ajv/dist/core'; import { DotenvConfigOptions } from 'dotenv'; type EnvSchema = typeof envSchema @@ -11,8 +10,8 @@ declare namespace envSchema { [key: string]: unknown; }; - export type EnvSchemaOpt = { - schema?: JSONSchemaType | AnySchema; + export type EnvSchemaOpt = { + schema?: object; data?: [EnvSchemaData, ...EnvSchemaData[]] | EnvSchemaData; env?: boolean; dotenv?: boolean | DotenvConfigOptions; @@ -32,5 +31,5 @@ declare namespace envSchema { export { envSchema as default } } -declare function envSchema(_opts?: envSchema.EnvSchemaOpt): T +declare function envSchema(_opts?: envSchema.EnvSchemaOpt): T export = envSchema diff --git a/types/index.test-d.ts b/types/index.test-d.ts index cde6173..aed6970 100644 --- a/types/index.test-d.ts +++ b/types/index.test-d.ts @@ -8,6 +8,7 @@ import envSchema, { } from '..'; import Ajv, { KeywordDefinition, JSONSchemaType } from 'ajv'; import { Static, Type } from '@sinclair/typebox'; +import S from 'fluent-json-schema'; interface EnvData { PORT: number; @@ -24,6 +25,11 @@ const schemaWithType: JSONSchemaType = { }, }; +const schemaFluent = S.object().prop( + 'PORT', + S.number().default(3000).required() +); + const schemaTypebox = Type.Object({ PORT: Type.Number({ default: 3000 }), }); @@ -41,15 +47,20 @@ expectType(envSchemaDefault()); const emptyOpt: EnvSchemaOpt = {}; expectType(emptyOpt); +const optWithSchemaFluent: EnvSchemaOpt = { + schema: schemaFluent, +}; +expectType(optWithSchemaFluent); + const optWithSchemaTypebox: EnvSchemaOpt = { schema: schemaTypebox, }; expectType(optWithSchemaTypebox); -const optWithSchemaWithType: EnvSchemaOpt = { +const optWithSchemaWithType: EnvSchemaOpt = { schema: schemaWithType, }; -expectType>(optWithSchemaWithType); +expectType(optWithSchemaWithType); const optWithData: EnvSchemaOpt = { data, @@ -105,11 +116,11 @@ expectError({ }, }); -const envSchemaWithType = envSchema({ schema: schemaWithType }); +const envSchemaWithType = envSchema({ schema: schemaWithType }); expectType(envSchemaWithType); const envSchemaTypebox = envSchema({ schema: schemaTypebox }); expectType(envSchemaTypebox); -expectType(keywords.separator) -expectType(envSchema.keywords.separator) +expectType(keywords.separator); +expectType(envSchema.keywords.separator);