| "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 |