You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.5 KiB
44 lines
1.5 KiB
const fs = require('fs')
|
|
const path = require('path')
|
|
|
|
function buildStandaloneCode (options, validator, isValidatorUsed, contextFunctionCode) {
|
|
const serializerCode = fs.readFileSync(path.join(__dirname, 'serializer.js')).toString()
|
|
let buildAjvCode = ''
|
|
let ajvSchemasCode = ''
|
|
|
|
if (isValidatorUsed) {
|
|
let defaultAjvSchema = ''
|
|
// we need to export the custom json schema
|
|
const defaultMeta = validator.ajv.defaultMeta()
|
|
if (typeof defaultMeta === 'string') {
|
|
defaultAjvSchema = defaultMeta
|
|
} else {
|
|
defaultAjvSchema = defaultMeta.$id || defaultMeta.id
|
|
}
|
|
|
|
ajvSchemasCode += `const validator = new Validator(${JSON.stringify(options.ajv || {})})\n`
|
|
for (const [id, schema] of Object.entries(validator.ajv.schemas)) {
|
|
// should skip ajv default schema
|
|
if (id === defaultAjvSchema) continue
|
|
ajvSchemasCode += `validator.ajv.addSchema(${JSON.stringify(schema.schema)}, "${id}")\n`
|
|
}
|
|
buildAjvCode = fs.readFileSync(path.join(__dirname, 'validator.js')).toString()
|
|
buildAjvCode = buildAjvCode.replace("'use strict'", '').replace('module.exports = SchemaValidator', '')
|
|
}
|
|
return `
|
|
'use strict'
|
|
|
|
${serializerCode.replace("'use strict'", '').replace('module.exports = ', '')}
|
|
${buildAjvCode}
|
|
|
|
const serializer = new Serializer(${JSON.stringify(options || {})})
|
|
${ajvSchemasCode}
|
|
|
|
${contextFunctionCode.replace('return main', '')}
|
|
|
|
module.exports = main
|
|
`
|
|
}
|
|
|
|
module.exports = buildStandaloneCode
|