import { expectError, expectType } from 'tsd' import envSchema, { EnvSchemaData, EnvSchemaOpt, keywords, envSchema as envSchemaNamed, // eslint-disable-next-line import-x/no-named-default -- Testing default export default as envSchemaDefault, } from '..' import Ajv, { KeywordDefinition, JSONSchemaType } from 'ajv' import { Static, Type } from '@sinclair/typebox' interface EnvData { PORT: number; } const schemaWithType: JSONSchemaType = { type: 'object', required: ['PORT'], properties: { PORT: { type: 'number', default: 3000, }, }, } const schemaTypebox = Type.Object({ PORT: Type.Number({ default: 3000 }), }) type SchemaTypebox = Static const data = { foo: 'bar', } expectType(envSchema()) expectType(envSchemaNamed()) expectType(envSchemaDefault()) const emptyOpt: EnvSchemaOpt = {} expectType(emptyOpt) const optWithSchemaTypebox: EnvSchemaOpt = { schema: schemaTypebox, } expectType(optWithSchemaTypebox) const optWithSchemaWithType: EnvSchemaOpt = { schema: schemaWithType, } expectType>(optWithSchemaWithType) const optWithData: EnvSchemaOpt = { data, } expectType(optWithData) expectError({ data: [], // min 1 item }) const optWithArrayData: EnvSchemaOpt = { data: [{}], } expectType(optWithArrayData) const optWithMultipleItemArrayData: EnvSchemaOpt = { data: [{}, {}], } expectType(optWithMultipleItemArrayData) const optWithDotEnvBoolean: EnvSchemaOpt = { dotenv: true, } expectType(optWithDotEnvBoolean) const optWithDotEnvOpt: EnvSchemaOpt = { dotenv: {}, } expectType(optWithDotEnvOpt) const optWithEnvExpand: EnvSchemaOpt = { expandEnv: true, } expectType(optWithEnvExpand) const optWithAjvInstance: EnvSchemaOpt = { ajv: new Ajv(), } expectType(optWithAjvInstance) expectType(envSchema.keywords.separator) const optWithAjvCustomOptions: EnvSchemaOpt = { ajv: { customOptions (_ajvInstance: Ajv): Ajv { return new Ajv() }, }, } expectType(optWithAjvCustomOptions) expectError({ ajv: { customOptions (_ajvInstance: Ajv) {}, }, }) const envSchemaWithType = envSchema({ schema: schemaWithType }) expectType(envSchemaWithType) const envSchemaTypebox = envSchema({ schema: schemaTypebox }) expectType(envSchemaTypebox) expectType(keywords.separator) expectType(envSchema.keywords.separator)