|
1 | | -const fs = require('fs') |
2 | | -const path = require('path') |
3 | | - |
4 | | -function buildStandaloneCode (options, validator, isValidatorUsed, contextFunctionCode) { |
5 | | - const serializerCode = fs.readFileSync(path.join(__dirname, 'serializer.js')).toString() |
6 | | - let buildAjvCode = '' |
7 | | - let ajvSchemasCode = '' |
8 | | - |
9 | | - if (isValidatorUsed) { |
10 | | - let defaultAjvSchema = '' |
11 | | - // we need to export the custom json schema |
12 | | - const defaultMeta = validator.ajv.defaultMeta() |
13 | | - if (typeof defaultMeta === 'string') { |
14 | | - defaultAjvSchema = defaultMeta |
15 | | - } else { |
16 | | - defaultAjvSchema = defaultMeta.$id || defaultMeta.id |
17 | | - } |
18 | | - |
19 | | - ajvSchemasCode += `const validator = new Validator(${JSON.stringify(options.ajv || {})})\n` |
20 | | - for (const [id, schema] of Object.entries(validator.ajv.schemas)) { |
21 | | - // should skip ajv default schema |
22 | | - if (id === defaultAjvSchema) continue |
23 | | - ajvSchemasCode += `validator.ajv.addSchema(${JSON.stringify(schema.schema)}, "${id}")\n` |
24 | | - } |
25 | | - buildAjvCode = fs.readFileSync(path.join(__dirname, 'validator.js')).toString() |
26 | | - buildAjvCode = buildAjvCode.replace("'use strict'", '').replace('module.exports = SchemaValidator', '') |
| 1 | +'use strict' |
| 2 | + |
| 3 | +function buildStandaloneCode (contextFunc, context, serializer, validator) { |
| 4 | + let ajvDependencyCode = '' |
| 5 | + if (context.validatorSchemasIds.size > 0) { |
| 6 | + ajvDependencyCode += `const validatorState = ${JSON.stringify(validator.getState())}\n` |
| 7 | + ajvDependencyCode += 'const validator = Validator.restoreFromState(validatorState)\n' |
| 8 | + } else { |
| 9 | + ajvDependencyCode += 'const validator = null\n' |
27 | 10 | } |
28 | 11 |
|
29 | | - const serializerOptions = options && options.rounding ? JSON.stringify({ options: options.rounding }) : '' |
30 | 12 | return ` |
31 | 13 | 'use strict' |
32 | | - ${serializerCode.replace("'use strict'", '').replace('module.exports = ', '')} |
33 | | - ${buildAjvCode} |
34 | | - const serializer = new Serializer(${serializerOptions}) |
35 | | - ${ajvSchemasCode} |
| 14 | + const { dependencies } = require('fast-json-stringify/lib/standalone') |
| 15 | +
|
| 16 | + const { Serializer, Validator } = dependencies |
| 17 | +
|
| 18 | + const serializerState = ${JSON.stringify(serializer.getState())} |
| 19 | + const serializer = Serializer.restoreFromState(serializerState) |
36 | 20 |
|
37 | | - ${contextFunctionCode.replace('return main', '')} |
| 21 | + ${ajvDependencyCode} |
38 | 22 |
|
39 | | - module.exports = main` |
| 23 | + module.exports = ${contextFunc.toString()}(validator, serializer)` |
40 | 24 | } |
41 | 25 |
|
42 | 26 | module.exports = buildStandaloneCode |
| 27 | + |
| 28 | +module.exports.dependencies = { |
| 29 | + Serializer: require('./serializer'), |
| 30 | + Validator: require('./validator') |
| 31 | +} |
0 commit comments