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.
		
		
		
		
		
			
		
			
				
					90 lines
				
				4.4 KiB
			
		
		
			
		
	
	
					90 lines
				
				4.4 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | const scope_1 = require("../compile/codegen/scope"); | ||
|  | const code_1 = require("../compile/codegen/code"); | ||
|  | function standaloneCode(ajv, refsOrFunc) { | ||
|  |     if (!ajv.opts.code.source) { | ||
|  |         throw new Error("moduleCode: ajv instance must have code.source option"); | ||
|  |     } | ||
|  |     const { _n } = ajv.scope.opts; | ||
|  |     return typeof refsOrFunc == "function" | ||
|  |         ? funcExportCode(refsOrFunc.source) | ||
|  |         : refsOrFunc !== undefined | ||
|  |             ? multiExportsCode(refsOrFunc, getValidate) | ||
|  |             : multiExportsCode(ajv.schemas, (sch) => sch.meta ? undefined : ajv.compile(sch.schema)); | ||
|  |     function getValidate(id) { | ||
|  |         const v = ajv.getSchema(id); | ||
|  |         if (!v) | ||
|  |             throw new Error(`moduleCode: no schema with id ${id}`); | ||
|  |         return v; | ||
|  |     } | ||
|  |     function funcExportCode(source) { | ||
|  |         const usedValues = {}; | ||
|  |         const n = source === null || source === void 0 ? void 0 : source.validateName; | ||
|  |         const vCode = validateCode(usedValues, source); | ||
|  |         if (ajv.opts.code.esm) { | ||
|  |             // Always do named export as `validate` rather than the variable `n` which is `validateXX` for known export value
 | ||
|  |             return `"use strict";${_n}export const validate = ${n};${_n}export default ${n};${_n}${vCode}`; | ||
|  |         } | ||
|  |         return `"use strict";${_n}module.exports = ${n};${_n}module.exports.default = ${n};${_n}${vCode}`; | ||
|  |     } | ||
|  |     function multiExportsCode(schemas, getValidateFunc) { | ||
|  |         var _a; | ||
|  |         const usedValues = {}; | ||
|  |         let code = (0, code_1._) `"use strict";`; | ||
|  |         for (const name in schemas) { | ||
|  |             const v = getValidateFunc(schemas[name]); | ||
|  |             if (v) { | ||
|  |                 const vCode = validateCode(usedValues, v.source); | ||
|  |                 const exportSyntax = ajv.opts.code.esm | ||
|  |                     ? (0, code_1._) `export const ${(0, code_1.getEsmExportName)(name)}` | ||
|  |                     : (0, code_1._) `exports${(0, code_1.getProperty)(name)}`; | ||
|  |                 code = (0, code_1._) `${code}${_n}${exportSyntax} = ${(_a = v.source) === null || _a === void 0 ? void 0 : _a.validateName};${_n}${vCode}`; | ||
|  |             } | ||
|  |         } | ||
|  |         return `${code}`; | ||
|  |     } | ||
|  |     function validateCode(usedValues, s) { | ||
|  |         if (!s) | ||
|  |             throw new Error('moduleCode: function does not have "source" property'); | ||
|  |         if (usedState(s.validateName) === scope_1.UsedValueState.Completed) | ||
|  |             return code_1.nil; | ||
|  |         setUsedState(s.validateName, scope_1.UsedValueState.Started); | ||
|  |         const scopeCode = ajv.scope.scopeCode(s.scopeValues, usedValues, refValidateCode); | ||
|  |         const code = new code_1._Code(`${scopeCode}${_n}${s.validateCode}`); | ||
|  |         return s.evaluated ? (0, code_1._) `${code}${s.validateName}.evaluated = ${s.evaluated};${_n}` : code; | ||
|  |         function refValidateCode(n) { | ||
|  |             var _a; | ||
|  |             const vRef = (_a = n.value) === null || _a === void 0 ? void 0 : _a.ref; | ||
|  |             if (n.prefix === "validate" && typeof vRef == "function") { | ||
|  |                 const v = vRef; | ||
|  |                 return validateCode(usedValues, v.source); | ||
|  |             } | ||
|  |             else if ((n.prefix === "root" || n.prefix === "wrapper") && typeof vRef == "object") { | ||
|  |                 const { validate, validateName } = vRef; | ||
|  |                 if (!validateName) | ||
|  |                     throw new Error("ajv internal error"); | ||
|  |                 const def = ajv.opts.code.es5 ? scope_1.varKinds.var : scope_1.varKinds.const; | ||
|  |                 const wrapper = (0, code_1._) `${def} ${n} = {validate: ${validateName}};`; | ||
|  |                 if (usedState(validateName) === scope_1.UsedValueState.Started) | ||
|  |                     return wrapper; | ||
|  |                 const vCode = validateCode(usedValues, validate === null || validate === void 0 ? void 0 : validate.source); | ||
|  |                 return (0, code_1._) `${wrapper}${_n}${vCode}`; | ||
|  |             } | ||
|  |             return undefined; | ||
|  |         } | ||
|  |         function usedState(name) { | ||
|  |             var _a; | ||
|  |             return (_a = usedValues[name.prefix]) === null || _a === void 0 ? void 0 : _a.get(name); | ||
|  |         } | ||
|  |         function setUsedState(name, state) { | ||
|  |             const { prefix } = name; | ||
|  |             const names = (usedValues[prefix] = usedValues[prefix] || new Map()); | ||
|  |             names.set(name, state); | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | module.exports = exports = standaloneCode; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | exports.default = standaloneCode; | ||
|  | //# sourceMappingURL=index.js.map
 |