generated from dellevin/template
1
This commit is contained in:
62
node_modules/ajv-formats/src/index.ts
generated
vendored
Normal file
62
node_modules/ajv-formats/src/index.ts
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
import {
|
||||
DefinedFormats,
|
||||
FormatMode,
|
||||
FormatName,
|
||||
formatNames,
|
||||
fastFormats,
|
||||
fullFormats,
|
||||
} from "./formats"
|
||||
import formatLimit from "./limit"
|
||||
import type Ajv from "ajv"
|
||||
import type {Plugin, Format} from "ajv"
|
||||
import {_, Name} from "ajv/dist/compile/codegen"
|
||||
|
||||
export {FormatMode, FormatName} from "./formats"
|
||||
export {LimitFormatError} from "./limit"
|
||||
export interface FormatOptions {
|
||||
mode?: FormatMode
|
||||
formats?: FormatName[]
|
||||
keywords?: boolean
|
||||
}
|
||||
|
||||
export type FormatsPluginOptions = FormatName[] | FormatOptions
|
||||
|
||||
export interface FormatsPlugin extends Plugin<FormatsPluginOptions> {
|
||||
get: (format: FormatName, mode?: FormatMode) => Format
|
||||
}
|
||||
|
||||
const fullName = new Name("fullFormats")
|
||||
const fastName = new Name("fastFormats")
|
||||
|
||||
const formatsPlugin: FormatsPlugin = (
|
||||
ajv: Ajv,
|
||||
opts: FormatsPluginOptions = {keywords: true}
|
||||
): Ajv => {
|
||||
if (Array.isArray(opts)) {
|
||||
addFormats(ajv, opts, fullFormats, fullName)
|
||||
return ajv
|
||||
}
|
||||
const [formats, exportName] =
|
||||
opts.mode === "fast" ? [fastFormats, fastName] : [fullFormats, fullName]
|
||||
const list = opts.formats || formatNames
|
||||
addFormats(ajv, list, formats, exportName)
|
||||
if (opts.keywords) formatLimit(ajv)
|
||||
return ajv
|
||||
}
|
||||
|
||||
formatsPlugin.get = (name: FormatName, mode: FormatMode = "full"): Format => {
|
||||
const formats = mode === "fast" ? fastFormats : fullFormats
|
||||
const f = formats[name]
|
||||
if (!f) throw new Error(`Unknown format "${name}"`)
|
||||
return f
|
||||
}
|
||||
|
||||
function addFormats(ajv: Ajv, list: FormatName[], fs: DefinedFormats, exportName: Name): void {
|
||||
ajv.opts.code.formats ??= _`require("ajv-formats/dist/formats").${exportName}`
|
||||
for (const f of list) ajv.addFormat(f, fs[f])
|
||||
}
|
||||
|
||||
module.exports = exports = formatsPlugin
|
||||
Object.defineProperty(exports, "__esModule", {value: true})
|
||||
|
||||
export default formatsPlugin
|
||||
Reference in New Issue
Block a user