@mionjs/run-types 0.8.8 → 0.8.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dist/cjs/src/createRunType.cjs +3 -1
- package/.dist/cjs/src/createRunType.cjs.map +1 -1
- package/.dist/cjs/src/createRunType.d.ts.map +1 -1
- package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs +1 -1
- package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs.map +1 -1
- package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts.map +1 -1
- package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs +1 -1
- package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs.map +1 -1
- package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts.map +1 -1
- package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs +1 -1
- package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs.map +1 -1
- package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts.map +1 -1
- package/.dist/cjs/src/mocking/mockType.cjs +46 -1
- package/.dist/cjs/src/mocking/mockType.cjs.map +1 -1
- package/.dist/cjs/src/nodes/collection/templateLiteral.cjs +73 -0
- package/.dist/cjs/src/nodes/collection/templateLiteral.cjs.map +1 -0
- package/.dist/cjs/src/nodes/collection/templateLiteral.d.ts +16 -0
- package/.dist/cjs/src/nodes/collection/templateLiteral.d.ts.map +1 -0
- package/.dist/cjs/src/nodes/member/indexProperty.cjs +69 -22
- package/.dist/cjs/src/nodes/member/indexProperty.cjs.map +1 -1
- package/.dist/cjs/src/nodes/member/indexProperty.d.ts +1 -0
- package/.dist/cjs/src/nodes/member/indexProperty.d.ts.map +1 -1
- package/.dist/esm/src/createRunType.d.ts.map +1 -1
- package/.dist/esm/src/createRunType.js +3 -1
- package/.dist/esm/src/createRunType.js.map +1 -1
- package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts.map +1 -1
- package/.dist/esm/src/jitCompilers/binary/fromBinary.js +1 -1
- package/.dist/esm/src/jitCompilers/binary/fromBinary.js.map +1 -1
- package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts.map +1 -1
- package/.dist/esm/src/jitCompilers/binary/toBinary.js +1 -1
- package/.dist/esm/src/jitCompilers/binary/toBinary.js.map +1 -1
- package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts.map +1 -1
- package/.dist/esm/src/jitCompilers/json/stringifyJson.js +1 -1
- package/.dist/esm/src/jitCompilers/json/stringifyJson.js.map +1 -1
- package/.dist/esm/src/mocking/mockType.js +47 -2
- package/.dist/esm/src/mocking/mockType.js.map +1 -1
- package/.dist/esm/src/mocking/mockUtils.js +1 -1
- package/.dist/esm/src/nodes/collection/templateLiteral.d.ts +16 -0
- package/.dist/esm/src/nodes/collection/templateLiteral.d.ts.map +1 -0
- package/.dist/esm/src/nodes/collection/templateLiteral.js +73 -0
- package/.dist/esm/src/nodes/collection/templateLiteral.js.map +1 -0
- package/.dist/esm/src/nodes/member/indexProperty.d.ts +1 -0
- package/.dist/esm/src/nodes/member/indexProperty.d.ts.map +1 -1
- package/.dist/esm/src/nodes/member/indexProperty.js +70 -23
- package/.dist/esm/src/nodes/member/indexProperty.js.map +1 -1
- package/package.json +3 -3
- package/src/createRunType.ts +5 -6
- package/src/jitCompilers/binary/fromBinary.ts +2 -1
- package/src/jitCompilers/binary/toBinary.ts +2 -1
- package/src/jitCompilers/json/stringifyJson.ts +2 -1
- package/src/jitCompilers/serialization-suite.ts +52 -0
- package/src/jitCompilers/xyz-Template/fromXYZ.ts +2 -1
- package/src/jitCompilers/xyz-Template/toXYZ.ts +2 -1
- package/src/mocking/mockType.ts +56 -1
- package/src/nodes/collection/templateLiteral.ts +87 -0
- package/src/nodes/member/indexProperty.ts +66 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringifyJson.cjs","sources":["../../../../../src/jitCompilers/json/stringifyJson.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {ReflectionKind} from '@deepkit/type';\nimport {ReflectionSubKind} from '../../constants.kind.ts';\nimport {JitFunctions} from '../../constants.functions.ts';\nimport {JitFnCompiler} from '../../lib/jitFnCompiler.ts';\nimport {createIfElseFn, isSafePropName, parentIs} from '../../lib/utils.ts';\nimport type {IndexSignatureRunType} from '../../nodes/member/indexProperty.ts';\nimport type {JitCode} from '../../types.ts';\nimport type {BaseRunType} from '../../lib/baseRunTypes.ts';\nimport type {ClassRunType} from '../../nodes/collection/class.ts';\nimport type {PropertyRunType} from '../../nodes/member/property.ts';\nimport type {MapRunType} from '../../nodes/native/map.ts';\nimport type {SetRunType} from '../../nodes/native/set.ts';\nimport type {InterfaceRunType} from '../../nodes/collection/interface.ts';\nimport type {TupleRunType} from '../../nodes/collection/tuple.ts';\nimport type {FunctionParamsRunType} from '../../nodes/collection/functionParams.ts';\nimport type {UnionRunType} from '../../nodes/collection/union.ts';\nimport type {ParameterRunType} from '../../nodes/member/param.ts';\nimport type {RestParamsRunType} from '../../nodes/member/restParams.ts';\nimport type {ArrayRunType} from '../../nodes/member/array.ts';\nimport type {MemberRunType} from '../../lib/baseRunTypes.ts';\nimport type {LiteralRunType} from '../../nodes/atomic/literal.ts';\nimport type {IterableRunType} from '../../nodes/native/Iterable.ts';\nimport {cpf_asJSONString} from '../../run-types-pure-fns.ts';\n\ntype Operation = typeof JitFunctions.stringifyJson.id | typeof JitFunctions.toJSCode.id;\n\nexport function createStringifyCompiler(fnID: Operation) {\n const compileStringifyIterable = createStringifyIterable(fnID);\n /** Centralized compile jit function with a switch statement that handles all node types. */\n function compileStringify(runType: BaseRunType, comp: JitFnCompiler): JitCode {\n const src = runType.src;\n const kind = src.kind;\n\n switch (kind) {\n // ###################### ATOMIC RUNTYPES ######################\n // Primitive types and other atomic types that don't contain other types\n case ReflectionKind.unknown:\n case ReflectionKind.any:\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n case ReflectionKind.bigint:\n return {code: `'\"'+${comp.vλl}.toString()+'\"'`, type: 'E'};\n case ReflectionKind.boolean:\n return {code: `(${comp.vλl} ? 'true' : 'false')`, type: 'E'};\n case ReflectionKind.enum:\n if (src.indexType.kind === ReflectionKind.number) return {code: comp.vλl, type: 'E'};\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n case ReflectionKind.enumMember:\n throw new Error('StringifyJson enum member is not supported.');\n case ReflectionKind.literal: {\n const rt = runType as LiteralRunType;\n if (src.literal instanceof RegExp) return compileStringify({src: {kind: ReflectionKind.regexp}} as any, comp);\n const literalRt = runType;\n const originalKind = src.kind;\n let result: JitCode;\n switch (typeof rt.src.literal) {\n case 'number':\n literalRt.src.kind = ReflectionKind.number;\n result = compileStringify(literalRt, comp);\n break;\n case 'string':\n literalRt.src.kind = ReflectionKind.string;\n result = compileStringify(literalRt, comp);\n break;\n case 'boolean':\n literalRt.src.kind = ReflectionKind.boolean;\n result = compileStringify(literalRt, comp);\n break;\n case 'bigint':\n literalRt.src.kind = ReflectionKind.bigint;\n result = compileStringify(literalRt, comp);\n break;\n case 'symbol':\n literalRt.src.kind = ReflectionKind.symbol;\n result = compileStringify(literalRt, comp);\n break;\n default:\n result = {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n break;\n }\n literalRt.src.kind = originalKind;\n return result;\n }\n case ReflectionKind.never:\n throw new Error('Never type cannot be stringified.');\n case ReflectionKind.null: {\n const isRoot = comp.getNestLevel(runType) === 0;\n return {code: isRoot ? `String(${comp.vλl})` : comp.vλl, type: 'E'};\n }\n case ReflectionKind.number: {\n const isRoot = comp.getNestLevel(runType) === 0;\n return {code: isRoot ? `String(${comp.vλl})` : comp.vλl, type: 'E'};\n }\n case ReflectionKind.object:\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n case ReflectionKind.regexp: {\n return {code: `JSON.stringify(${comp.vλl}.toString())`, type: 'E'};\n }\n case ReflectionKind.string: {\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n }\n case ReflectionKind.symbol:\n return {code: `JSON.stringify('Symbol:' + (${comp.vλl}.description || ''))`, type: 'E'};\n case ReflectionKind.templateLiteral:\n throw new Error('Template Literals are not supported.');\n case ReflectionKind.undefined: {\n const isRoot = comp.getNestLevel(runType) === 0;\n if (isRoot) return {code: `undefined`, type: 'E'};\n const parentIsArray = parentIs(runType, ReflectionKind.array);\n if (parentIsArray) return {code: `'null'`, type: 'E'}; // we use array.join(',') to serialize arrays, so we need to return null literal (string)\n return {code: `null`, type: 'E'};\n }\n case ReflectionKind.void:\n return {code: 'undefined', type: 'E'};\n\n // ###################### MEMBER RUNTYPES ######################\n // Types that represent members of collections or other structures\n case ReflectionKind.array: {\n const rt = runType as ArrayRunType;\n rt.checkNonSkipTypes(comp);\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n if (!childJit?.code) return {code: `JSON.stringify(${comp.vλl})`, type: 'RB'};\n const jsonItems = comp.getLocalVarName('ls', rt);\n const resultVal = comp.getLocalVarName('res', rt);\n const index = rt.getChildVarName(comp);\n return {\n code: `\n const ${jsonItems} = [];\n for (let ${index} = ${rt.startIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {\n const ${resultVal} = ${childJit.code};\n ${jsonItems}.push(${resultVal});\n }\n return '[' + ${jsonItems}.join(',') + ']';\n `,\n type: 'RB',\n };\n }\n case ReflectionKind.indexSignature: {\n const rt = runType as IndexSignatureRunType;\n const child = rt.getJitChild(comp);\n const childJit = comp.compile(child, 'E', fnID);\n if (!child || !childJit?.code) return {code: undefined, type: 'RB'};\n const varName = comp.vλl;\n const prop = rt.getChildVarName(comp);\n const arrName = comp.getLocalVarName('ls', rt);\n const sep = rt.skipCommas ? '' : '+\",\"';\n const skipCode = rt.getSkipCode(comp, prop);\n // asJSONString is more optimized for propNames than JSON.stringify\n // in Node, bun is actually slower so we might consider removing this and use native JSON.stringify\n const asJSONStringFn = comp.addPureFunction(cpf_asJSONString);\n return {\n code: `\n const ${arrName} = [];\n for (const ${prop} in ${varName}) {\n ${skipCode}\n if (${prop} !== undefined) ${arrName}.push(${asJSONStringFn}(${prop}) + ':' + ${childJit.code});\n }\n if (!${arrName}.length) return '';\n return ${arrName}.join(',')${sep};\n `,\n type: 'RB',\n };\n }\n case ReflectionKind.function:\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n case ReflectionKind.callSignature:\n if (runType.src.subKind === ReflectionSubKind.params) {\n const rt = runType as FunctionParamsRunType;\n const skip = rt.skipJit(comp);\n if (skip) return {code: '', type: 'E'};\n const params = rt.getParamRunTypes(comp);\n if (params.length === 0) return {code: `'[]'`, type: 'E'};\n const paramsCode = params.map((p) => comp.compile(p, 'E', fnID).code).join('+');\n return {code: `'['+${paramsCode}+']'`, type: 'E'};\n } else {\n throw new Error(\n `Compile function ${getOperationName()} not supported, call compileParams or compileReturn instead.`\n );\n }\n case ReflectionKind.parameter: {\n const rt = runType as ParameterRunType;\n switch (src.subKind) {\n case ReflectionSubKind.mapKey:\n case ReflectionSubKind.mapValue:\n case ReflectionSubKind.setItem:\n return compileStringifyGenericMember(rt, comp);\n default:\n return compileStringifyParameter(rt, comp);\n }\n }\n case ReflectionKind.property:\n case ReflectionKind.propertySignature: {\n const rt = runType as PropertyRunType;\n const child = rt.getJitChild(comp);\n const childJit = comp.compile(child, 'E', fnID);\n if (!child || !childJit?.code) return {code: undefined, type: 'E'};\n // this can´t be processed in the parent as we need to handle the empty string case when value is undefined\n const sep = rt.skipCommas ? '' : '+\",\"';\n // encoding safe property with ':' inside the string saves a little processing\n // when prop is not safe we need to double encode double quotes and escape characters\n const propDef = getPropName(rt, comp);\n if (rt.src.optional) {\n rt.tempChildVλl = comp.getChildVλl();\n // TODO: check if json for an object with first property undefined is valid (maybe the comma must be dynamic too)\n return {code: `(${rt.tempChildVλl} === undefined ? '' : ${propDef}+${childJit.code}${sep})`, type: 'E'};\n }\n return {code: `${propDef}+${childJit.code}${sep}`, type: 'E'};\n }\n case ReflectionKind.rest: {\n const rt = runType as RestParamsRunType;\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n const itemCodeStr = childJit?.code || 'JSON.stringify(' + comp.getChildVλl() + ')';\n const arrName = comp.getLocalVarName('res', rt);\n const itemName = comp.getLocalVarName('its', rt);\n const index = rt.getChildVarName(comp);\n const isFist = rt.getChildIndex(comp) === 0;\n const sep = isFist ? '' : `','+`;\n return {\n code: `\n const ${arrName} = [];\n for (let ${index} = ${rt.getChildIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {\n const ${itemName} = ${itemCodeStr};\n if(${itemName}) ${arrName}.push(${itemName});\n }\n if (!${arrName}.length) {return '';}\n else {return ${sep}${arrName}.join(',')}\n `,\n type: 'RB',\n };\n }\n case ReflectionKind.tupleMember: {\n const rt = runType as ParameterRunType;\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n const childCodeStr = childJit?.code || `null`; // non serializable types are set to null\n if (rt.isRest()) return childJit || {code: `null`, type: 'E'};\n const isFirst = rt.getChildIndex(comp) === 0;\n const sep = isFirst ? '' : `','+`;\n if (rt.isOptional())\n return {code: `(${comp.getChildVλl()} === undefined ? ${sep}'null' : ${sep}${childCodeStr})`, type: 'E'};\n return {code: `${sep}${childCodeStr}`, type: 'E'};\n }\n case ReflectionKind.promise: {\n throw new Error(`Jit compilation disabled for Non Serializable types.`);\n }\n\n // ###################### COLLECTION RUNTYPES ######################\n // Types that contain other types as members\n case ReflectionKind.objectLiteral:\n case ReflectionKind.intersection: {\n if (runType.src.subKind === ReflectionSubKind.nonSerializable) {\n throw new Error(`${getOperationName()} is disabled for Non Serializable types.`);\n } else {\n const rt = runType as InterfaceRunType;\n return compileStringifyInterface(rt, comp);\n }\n }\n case ReflectionKind.class:\n return compileStringifyClass(runType, comp);\n case ReflectionKind.infer:\n throw new Error('Infer is not supported.');\n case ReflectionKind.tuple: {\n const rt = runType as TupleRunType;\n const skip = rt.skipJit(comp);\n if (skip) return {code: '', type: 'E'};\n if (rt.getChildRunTypes().length === 0) return {code: `'[]'`, type: 'E'};\n const paramsCode = rt\n .getChildRunTypes()\n .map((p) => comp.compile(p, 'E', fnID).code)\n .join('+');\n return {code: `'['+${paramsCode}+']'`, type: 'E'};\n }\n case ReflectionKind.typeParameter:\n // Type parameter has been replaced by tuple member internally so this should never be called\n throw new Error('Type parameter not implemented.');\n case ReflectionKind.union: {\n const urt = runType as UnionRunType;\n urt.checkAllowedChildren(comp);\n const {simpleItems, objectTypes, anyItem} = urt.getUnionChildren(comp);\n const errName = comp.getLocalVarName('uErr', urt);\n const fail = `throw new Error(${errName});`;\n comp.setContextItem(\n errName,\n `const ${errName} = \"Can not ${getOperationName()} union: item does not belong to the union\"`\n );\n const ifElse = createIfElseFn();\n // Helper to generate stringify code for a union item\n const getStringifyCode = (unionItem: BaseRunType) => {\n const childJit = comp.compile(unionItem, 'E', fnID);\n const encJit = comp.compilePrepareForJson(unionItem, 'E');\n const decJit = comp.compileRestoreFromJson(unionItem, 'E');\n const needsTupleEncoding = !!encJit?.code || !!decJit?.code;\n const skiEncode = !childJit?.code || childJit.code === comp.vλl;\n const stringifyCode = skiEncode ? comp.vλl : childJit.code;\n const index = urt.getUnionItemIndex(comp, unionItem);\n const toTuple = `'[${index},' + ${stringifyCode} + ']'`;\n const tupleCode = unionItem.getFamily() === 'A' ? `(${toTuple})` : toTuple;\n return needsTupleEncoding ? `return ${tupleCode}` : `return ${stringifyCode}`;\n };\n // Generate code for simple items (atomic types)\n const simpleCode = simpleItems.map((unionItem) => {\n const isTypeCode = urt.getChildIsTypeWithLooseCheck(unionItem, comp);\n return `${ifElse()} (${isTypeCode}) {${getStringifyCode(unionItem)}}`;\n });\n // Generate code for object types (need null guard)\n const objCode = objectTypes.length\n ? objectTypes.map((unionItem) => {\n const isTypeCode = urt.getChildIsTypeWithLooseCheck(unionItem, comp);\n return `${ifElse()} (typeof ${comp.vλl} === 'object' && ${comp.vλl} !== null && ${isTypeCode}) {${getStringifyCode(unionItem)}}`;\n })\n : [];\n // Generate code for anyItem (always matches, checked last as fallback)\n const anyCode = anyItem ? `${ifElse(true)} {${getStringifyCode(anyItem)}}` : `${ifElse(true)} {${fail}}`;\n\n return {code: [...simpleCode, ...objCode, anyCode].join(''), type: 'RB'};\n }\n default:\n throw new Error(`Cant ${getOperationName()} for unsupported RunType: ${runType.getTypeName()}`);\n }\n }\n\n function getOperationName() {\n switch (fnID) {\n case JitFunctions.stringifyJson.id:\n return 'StringifyJson';\n case JitFunctions.toJSCode.id:\n return 'ToCode';\n default:\n throw new Error(`Unknown operation: ${fnID}`);\n }\n }\n\n function getPropName(rt: PropertyRunType, comp: JitFnCompiler): string {\n if (!isSafePropName(rt.src.name)) return `${JSON.stringify(rt.getChildLiteral(comp) as string)}+':'`;\n if (fnID === JitFunctions.toJSCode.id) return `'${rt.getChildVarName(comp)}:'`;\n return `'\"${rt.getChildVarName(comp)}\":'`;\n }\n\n function compileStringifyParameter(rt: ParameterRunType, comp: JitFnCompiler): JitCode {\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n const childCodeStr = childJit?.code || `null`; // non serializable types are set to null\n if (rt.isRest()) return childJit || {code: `null`, type: 'E'};\n const isFirst = rt.getChildIndex(comp) === 0;\n const sep = isFirst ? '' : `','+`;\n if (rt.isOptional())\n return {code: `(${comp.getChildVλl()} === undefined ? ${sep}'null' : ${sep}${childCodeStr})`, type: 'E'};\n return {code: `${sep}${childCodeStr}`, type: 'E'};\n }\n\n function compileStringifyGenericMember(rt: ParameterRunType, comp: JitFnCompiler): JitCode {\n const child = rt.getJitChild(comp);\n const argCode = comp.compile(child, 'E', fnID);\n if (!argCode?.code) return {code: undefined, type: 'E'};\n const isFirst = rt.getChildIndex(comp) === 0;\n const sep = isFirst ? '' : `','+`;\n if (rt.isOptional()) return {code: `(${comp.getChildVλl()} === undefined ? '': ${sep}${argCode.code})`, type: 'E'};\n return {code: `${sep}${argCode.code}`, type: 'E'};\n }\n\n function compileStringifyInterface(rt: InterfaceRunType, comp: JitFnCompiler): JitCode {\n if (rt.isCallable()) return comp.compile(rt.getCallSignature(), 'E', fnID);\n const children = rt.getJsonStringifySortedChildren(comp);\n if (children.length === 0) return {code: `''`, type: 'E'};\n const allOptional = children.every((prop) => (prop as MemberRunType<any>).isOptional());\n // if all properties are optional, we can not optimize and use JSON.stringify\n if (allOptional) return compileInterfaceIntoArray(rt, comp, children);\n const childrenCode = children\n .map((prop, i) => {\n const nexChild = children[i + 1];\n const isLast = !nexChild;\n prop.skipCommas = isLast;\n return comp.compile(prop, 'E', fnID).code;\n })\n .filter(Boolean)\n .join('+');\n return {code: `'{'+${childrenCode}+'}'`, type: 'E'};\n }\n\n function compileInterfaceIntoArray(rt: InterfaceRunType, comp: JitFnCompiler, children: MemberRunType<any>[]): JitCode {\n const arrName = comp.getLocalVarName('ns', rt);\n const childrenCode = children\n .map((prop) => {\n prop.skipCommas = true;\n const childJit = comp.compile(prop, 'E', fnID);\n if (!childJit?.code) return '';\n const code = `${arrName}.push(${childJit.code})`;\n // makes an extra check to avoid pushing empty strings to the array (childJit also makes the same check but is better than having to filter the array after)\n return prop.isOptional() && prop.tempChildVλl ? `if (${prop.tempChildVλl} !== undefined){${code}}` : `${code};`;\n })\n .filter(Boolean)\n .join('');\n\n return {code: `(function(){const ${arrName} = [];${childrenCode};return '{'+${arrName}.join(',')+'}'})()`, type: 'E'};\n }\n\n function compileStringifyClass(runType: BaseRunType, comp: JitFnCompiler): JitCode {\n switch (runType.src.subKind) {\n case ReflectionSubKind.date:\n return {code: `'\"'+${comp.vλl}.toJSON()+'\"'`, type: 'E'};\n case ReflectionSubKind.map: {\n const rt = runType as unknown as MapRunType;\n return compileStringifyIterable(rt as unknown as IterableRunType, comp);\n }\n case ReflectionSubKind.set: {\n const rt = runType as unknown as SetRunType;\n return compileStringifyIterable(rt as unknown as IterableRunType, comp);\n }\n case ReflectionSubKind.nonSerializable:\n throw new Error(`Jit compilation disabled for Non Serializable types.`);\n default: {\n const rt = runType as unknown as ClassRunType;\n if (rt.isCallable()) {\n const callSignature = rt.getCallSignature();\n if (callSignature) return comp.compile(callSignature, 'E', fnID);\n }\n // optional and index properties must be compiled first to prevent trailing commas\n // this is because the last trailing comma is calculated statically\n // maybe we need to move that trailing comma compilation to be dynamic\n // but we would need to create a self invoking function for that\n const children = rt.getJsonStringifySortedChildren(comp);\n if (children.length === 0) return {code: `''`, type: 'E'};\n const childrenCode = children\n .map((prop, i) => {\n const nexChild = children[i + 1];\n const isLast = !nexChild;\n prop.skipCommas = isLast;\n return comp.compile(prop, 'E', fnID).code;\n })\n .filter(Boolean)\n .join('+');\n return {code: `'{'+${childrenCode}+'}'`, type: 'E'};\n }\n }\n }\n\n return compileStringify;\n}\n\nexport function createStringifyIterable(fnID: Operation) {\n return function compileStringifyIterable(\n rt: IterableRunType,\n comp: JitFnCompiler,\n /** prefix characters to add before the generated array, used when generating code instead json */\n codePrefix: string = '',\n /** suffix characters to add after the generated array, used when generating code instead json */\n codeSuffix: string = ''\n ): JitCode {\n const entry = rt.getCustomVλl(comp)?.vλl || comp.vλl;\n const jitChildren = rt.getJitChildren(comp);\n const childrenCode = jitChildren.map((c) => comp.compile(c, 'E', fnID).code).join('+');\n const jsonItems = comp.getLocalVarName('ls', rt);\n const resultVal = comp.getLocalVarName('res', rt);\n const childrenResult = jitChildren.length > 1 ? `'['+${childrenCode}+']'` : childrenCode;\n const earlyReturn = codePrefix && codeSuffix ? `if (!${jsonItems}.length) return '${codePrefix}${codeSuffix}';` : '';\n return {\n code: `\n const ${jsonItems} = [];\n for (const ${entry} of ${comp.vλl}) {\n const ${resultVal} = ${childrenResult};\n ${jsonItems}.push(${resultVal});\n }\n ${earlyReturn}return '${codePrefix}[' + ${jsonItems}.join(',') + ']${codeSuffix}'\n `,\n type: 'RB',\n };\n };\n}\n\nexport const emitJsonStringify = createStringifyCompiler(JitFunctions.stringifyJson.id);\n"],"names":["ReflectionKind","parentIs","cpf_asJSONString","ReflectionSubKind","createIfElseFn","JitFunctions","isSafePropName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stringifyJson.cjs","sources":["../../../../../src/jitCompilers/json/stringifyJson.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {ReflectionKind} from '@deepkit/type';\nimport {ReflectionSubKind} from '../../constants.kind.ts';\nimport {JitFunctions} from '../../constants.functions.ts';\nimport {JitFnCompiler} from '../../lib/jitFnCompiler.ts';\nimport {createIfElseFn, isSafePropName, parentIs} from '../../lib/utils.ts';\nimport type {IndexSignatureRunType} from '../../nodes/member/indexProperty.ts';\nimport type {JitCode} from '../../types.ts';\nimport type {BaseRunType} from '../../lib/baseRunTypes.ts';\nimport type {ClassRunType} from '../../nodes/collection/class.ts';\nimport type {PropertyRunType} from '../../nodes/member/property.ts';\nimport type {MapRunType} from '../../nodes/native/map.ts';\nimport type {SetRunType} from '../../nodes/native/set.ts';\nimport type {InterfaceRunType} from '../../nodes/collection/interface.ts';\nimport type {TupleRunType} from '../../nodes/collection/tuple.ts';\nimport type {FunctionParamsRunType} from '../../nodes/collection/functionParams.ts';\nimport type {UnionRunType} from '../../nodes/collection/union.ts';\nimport type {ParameterRunType} from '../../nodes/member/param.ts';\nimport type {RestParamsRunType} from '../../nodes/member/restParams.ts';\nimport type {ArrayRunType} from '../../nodes/member/array.ts';\nimport type {MemberRunType} from '../../lib/baseRunTypes.ts';\nimport type {LiteralRunType} from '../../nodes/atomic/literal.ts';\nimport type {IterableRunType} from '../../nodes/native/Iterable.ts';\nimport {cpf_asJSONString} from '../../run-types-pure-fns.ts';\n\ntype Operation = typeof JitFunctions.stringifyJson.id | typeof JitFunctions.toJSCode.id;\n\nexport function createStringifyCompiler(fnID: Operation) {\n const compileStringifyIterable = createStringifyIterable(fnID);\n /** Centralized compile jit function with a switch statement that handles all node types. */\n function compileStringify(runType: BaseRunType, comp: JitFnCompiler): JitCode {\n const src = runType.src;\n const kind = src.kind;\n\n switch (kind) {\n // ###################### ATOMIC RUNTYPES ######################\n // Primitive types and other atomic types that don't contain other types\n case ReflectionKind.unknown:\n case ReflectionKind.any:\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n case ReflectionKind.bigint:\n return {code: `'\"'+${comp.vλl}.toString()+'\"'`, type: 'E'};\n case ReflectionKind.boolean:\n return {code: `(${comp.vλl} ? 'true' : 'false')`, type: 'E'};\n case ReflectionKind.enum:\n if (src.indexType.kind === ReflectionKind.number) return {code: comp.vλl, type: 'E'};\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n case ReflectionKind.enumMember:\n throw new Error('StringifyJson enum member is not supported.');\n case ReflectionKind.literal: {\n const rt = runType as LiteralRunType;\n if (src.literal instanceof RegExp) return compileStringify({src: {kind: ReflectionKind.regexp}} as any, comp);\n const literalRt = runType;\n const originalKind = src.kind;\n let result: JitCode;\n switch (typeof rt.src.literal) {\n case 'number':\n literalRt.src.kind = ReflectionKind.number;\n result = compileStringify(literalRt, comp);\n break;\n case 'string':\n literalRt.src.kind = ReflectionKind.string;\n result = compileStringify(literalRt, comp);\n break;\n case 'boolean':\n literalRt.src.kind = ReflectionKind.boolean;\n result = compileStringify(literalRt, comp);\n break;\n case 'bigint':\n literalRt.src.kind = ReflectionKind.bigint;\n result = compileStringify(literalRt, comp);\n break;\n case 'symbol':\n literalRt.src.kind = ReflectionKind.symbol;\n result = compileStringify(literalRt, comp);\n break;\n default:\n result = {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n break;\n }\n literalRt.src.kind = originalKind;\n return result;\n }\n case ReflectionKind.never:\n throw new Error('Never type cannot be stringified.');\n case ReflectionKind.null: {\n const isRoot = comp.getNestLevel(runType) === 0;\n return {code: isRoot ? `String(${comp.vλl})` : comp.vλl, type: 'E'};\n }\n case ReflectionKind.number: {\n const isRoot = comp.getNestLevel(runType) === 0;\n return {code: isRoot ? `String(${comp.vλl})` : comp.vλl, type: 'E'};\n }\n case ReflectionKind.object:\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n case ReflectionKind.regexp: {\n return {code: `JSON.stringify(${comp.vλl}.toString())`, type: 'E'};\n }\n case ReflectionKind.string: {\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n }\n case ReflectionKind.symbol:\n return {code: `JSON.stringify('Symbol:' + (${comp.vλl}.description || ''))`, type: 'E'};\n case ReflectionKind.templateLiteral:\n // runtime value is a plain string\n return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};\n case ReflectionKind.undefined: {\n const isRoot = comp.getNestLevel(runType) === 0;\n if (isRoot) return {code: `undefined`, type: 'E'};\n const parentIsArray = parentIs(runType, ReflectionKind.array);\n if (parentIsArray) return {code: `'null'`, type: 'E'}; // we use array.join(',') to serialize arrays, so we need to return null literal (string)\n return {code: `null`, type: 'E'};\n }\n case ReflectionKind.void:\n return {code: 'undefined', type: 'E'};\n\n // ###################### MEMBER RUNTYPES ######################\n // Types that represent members of collections or other structures\n case ReflectionKind.array: {\n const rt = runType as ArrayRunType;\n rt.checkNonSkipTypes(comp);\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n if (!childJit?.code) return {code: `JSON.stringify(${comp.vλl})`, type: 'RB'};\n const jsonItems = comp.getLocalVarName('ls', rt);\n const resultVal = comp.getLocalVarName('res', rt);\n const index = rt.getChildVarName(comp);\n return {\n code: `\n const ${jsonItems} = [];\n for (let ${index} = ${rt.startIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {\n const ${resultVal} = ${childJit.code};\n ${jsonItems}.push(${resultVal});\n }\n return '[' + ${jsonItems}.join(',') + ']';\n `,\n type: 'RB',\n };\n }\n case ReflectionKind.indexSignature: {\n const rt = runType as IndexSignatureRunType;\n const child = rt.getJitChild(comp);\n const childJit = comp.compile(child, 'E', fnID);\n if (!child || !childJit?.code) return {code: undefined, type: 'RB'};\n const varName = comp.vλl;\n const prop = rt.getChildVarName(comp);\n const arrName = comp.getLocalVarName('ls', rt);\n const sep = rt.skipCommas ? '' : '+\",\"';\n const skipCode = rt.getSkipCode(comp, prop);\n // asJSONString is more optimized for propNames than JSON.stringify\n // in Node, bun is actually slower so we might consider removing this and use native JSON.stringify\n const asJSONStringFn = comp.addPureFunction(cpf_asJSONString);\n return {\n code: `\n const ${arrName} = [];\n for (const ${prop} in ${varName}) {\n ${skipCode}\n if (${prop} !== undefined) ${arrName}.push(${asJSONStringFn}(${prop}) + ':' + ${childJit.code});\n }\n if (!${arrName}.length) return '';\n return ${arrName}.join(',')${sep};\n `,\n type: 'RB',\n };\n }\n case ReflectionKind.function:\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n case ReflectionKind.callSignature:\n if (runType.src.subKind === ReflectionSubKind.params) {\n const rt = runType as FunctionParamsRunType;\n const skip = rt.skipJit(comp);\n if (skip) return {code: '', type: 'E'};\n const params = rt.getParamRunTypes(comp);\n if (params.length === 0) return {code: `'[]'`, type: 'E'};\n const paramsCode = params.map((p) => comp.compile(p, 'E', fnID).code).join('+');\n return {code: `'['+${paramsCode}+']'`, type: 'E'};\n } else {\n throw new Error(\n `Compile function ${getOperationName()} not supported, call compileParams or compileReturn instead.`\n );\n }\n case ReflectionKind.parameter: {\n const rt = runType as ParameterRunType;\n switch (src.subKind) {\n case ReflectionSubKind.mapKey:\n case ReflectionSubKind.mapValue:\n case ReflectionSubKind.setItem:\n return compileStringifyGenericMember(rt, comp);\n default:\n return compileStringifyParameter(rt, comp);\n }\n }\n case ReflectionKind.property:\n case ReflectionKind.propertySignature: {\n const rt = runType as PropertyRunType;\n const child = rt.getJitChild(comp);\n const childJit = comp.compile(child, 'E', fnID);\n if (!child || !childJit?.code) return {code: undefined, type: 'E'};\n // this can´t be processed in the parent as we need to handle the empty string case when value is undefined\n const sep = rt.skipCommas ? '' : '+\",\"';\n // encoding safe property with ':' inside the string saves a little processing\n // when prop is not safe we need to double encode double quotes and escape characters\n const propDef = getPropName(rt, comp);\n if (rt.src.optional) {\n rt.tempChildVλl = comp.getChildVλl();\n // TODO: check if json for an object with first property undefined is valid (maybe the comma must be dynamic too)\n return {code: `(${rt.tempChildVλl} === undefined ? '' : ${propDef}+${childJit.code}${sep})`, type: 'E'};\n }\n return {code: `${propDef}+${childJit.code}${sep}`, type: 'E'};\n }\n case ReflectionKind.rest: {\n const rt = runType as RestParamsRunType;\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n const itemCodeStr = childJit?.code || 'JSON.stringify(' + comp.getChildVλl() + ')';\n const arrName = comp.getLocalVarName('res', rt);\n const itemName = comp.getLocalVarName('its', rt);\n const index = rt.getChildVarName(comp);\n const isFist = rt.getChildIndex(comp) === 0;\n const sep = isFist ? '' : `','+`;\n return {\n code: `\n const ${arrName} = [];\n for (let ${index} = ${rt.getChildIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {\n const ${itemName} = ${itemCodeStr};\n if(${itemName}) ${arrName}.push(${itemName});\n }\n if (!${arrName}.length) {return '';}\n else {return ${sep}${arrName}.join(',')}\n `,\n type: 'RB',\n };\n }\n case ReflectionKind.tupleMember: {\n const rt = runType as ParameterRunType;\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n const childCodeStr = childJit?.code || `null`; // non serializable types are set to null\n if (rt.isRest()) return childJit || {code: `null`, type: 'E'};\n const isFirst = rt.getChildIndex(comp) === 0;\n const sep = isFirst ? '' : `','+`;\n if (rt.isOptional())\n return {code: `(${comp.getChildVλl()} === undefined ? ${sep}'null' : ${sep}${childCodeStr})`, type: 'E'};\n return {code: `${sep}${childCodeStr}`, type: 'E'};\n }\n case ReflectionKind.promise: {\n throw new Error(`Jit compilation disabled for Non Serializable types.`);\n }\n\n // ###################### COLLECTION RUNTYPES ######################\n // Types that contain other types as members\n case ReflectionKind.objectLiteral:\n case ReflectionKind.intersection: {\n if (runType.src.subKind === ReflectionSubKind.nonSerializable) {\n throw new Error(`${getOperationName()} is disabled for Non Serializable types.`);\n } else {\n const rt = runType as InterfaceRunType;\n return compileStringifyInterface(rt, comp);\n }\n }\n case ReflectionKind.class:\n return compileStringifyClass(runType, comp);\n case ReflectionKind.infer:\n throw new Error('Infer is not supported.');\n case ReflectionKind.tuple: {\n const rt = runType as TupleRunType;\n const skip = rt.skipJit(comp);\n if (skip) return {code: '', type: 'E'};\n if (rt.getChildRunTypes().length === 0) return {code: `'[]'`, type: 'E'};\n const paramsCode = rt\n .getChildRunTypes()\n .map((p) => comp.compile(p, 'E', fnID).code)\n .join('+');\n return {code: `'['+${paramsCode}+']'`, type: 'E'};\n }\n case ReflectionKind.typeParameter:\n // Type parameter has been replaced by tuple member internally so this should never be called\n throw new Error('Type parameter not implemented.');\n case ReflectionKind.union: {\n const urt = runType as UnionRunType;\n urt.checkAllowedChildren(comp);\n const {simpleItems, objectTypes, anyItem} = urt.getUnionChildren(comp);\n const errName = comp.getLocalVarName('uErr', urt);\n const fail = `throw new Error(${errName});`;\n comp.setContextItem(\n errName,\n `const ${errName} = \"Can not ${getOperationName()} union: item does not belong to the union\"`\n );\n const ifElse = createIfElseFn();\n // Helper to generate stringify code for a union item\n const getStringifyCode = (unionItem: BaseRunType) => {\n const childJit = comp.compile(unionItem, 'E', fnID);\n const encJit = comp.compilePrepareForJson(unionItem, 'E');\n const decJit = comp.compileRestoreFromJson(unionItem, 'E');\n const needsTupleEncoding = !!encJit?.code || !!decJit?.code;\n const skiEncode = !childJit?.code || childJit.code === comp.vλl;\n const stringifyCode = skiEncode ? comp.vλl : childJit.code;\n const index = urt.getUnionItemIndex(comp, unionItem);\n const toTuple = `'[${index},' + ${stringifyCode} + ']'`;\n const tupleCode = unionItem.getFamily() === 'A' ? `(${toTuple})` : toTuple;\n return needsTupleEncoding ? `return ${tupleCode}` : `return ${stringifyCode}`;\n };\n // Generate code for simple items (atomic types)\n const simpleCode = simpleItems.map((unionItem) => {\n const isTypeCode = urt.getChildIsTypeWithLooseCheck(unionItem, comp);\n return `${ifElse()} (${isTypeCode}) {${getStringifyCode(unionItem)}}`;\n });\n // Generate code for object types (need null guard)\n const objCode = objectTypes.length\n ? objectTypes.map((unionItem) => {\n const isTypeCode = urt.getChildIsTypeWithLooseCheck(unionItem, comp);\n return `${ifElse()} (typeof ${comp.vλl} === 'object' && ${comp.vλl} !== null && ${isTypeCode}) {${getStringifyCode(unionItem)}}`;\n })\n : [];\n // Generate code for anyItem (always matches, checked last as fallback)\n const anyCode = anyItem ? `${ifElse(true)} {${getStringifyCode(anyItem)}}` : `${ifElse(true)} {${fail}}`;\n\n return {code: [...simpleCode, ...objCode, anyCode].join(''), type: 'RB'};\n }\n default:\n throw new Error(`Cant ${getOperationName()} for unsupported RunType: ${runType.getTypeName()}`);\n }\n }\n\n function getOperationName() {\n switch (fnID) {\n case JitFunctions.stringifyJson.id:\n return 'StringifyJson';\n case JitFunctions.toJSCode.id:\n return 'ToCode';\n default:\n throw new Error(`Unknown operation: ${fnID}`);\n }\n }\n\n function getPropName(rt: PropertyRunType, comp: JitFnCompiler): string {\n if (!isSafePropName(rt.src.name)) return `${JSON.stringify(rt.getChildLiteral(comp) as string)}+':'`;\n if (fnID === JitFunctions.toJSCode.id) return `'${rt.getChildVarName(comp)}:'`;\n return `'\"${rt.getChildVarName(comp)}\":'`;\n }\n\n function compileStringifyParameter(rt: ParameterRunType, comp: JitFnCompiler): JitCode {\n const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);\n const childCodeStr = childJit?.code || `null`; // non serializable types are set to null\n if (rt.isRest()) return childJit || {code: `null`, type: 'E'};\n const isFirst = rt.getChildIndex(comp) === 0;\n const sep = isFirst ? '' : `','+`;\n if (rt.isOptional())\n return {code: `(${comp.getChildVλl()} === undefined ? ${sep}'null' : ${sep}${childCodeStr})`, type: 'E'};\n return {code: `${sep}${childCodeStr}`, type: 'E'};\n }\n\n function compileStringifyGenericMember(rt: ParameterRunType, comp: JitFnCompiler): JitCode {\n const child = rt.getJitChild(comp);\n const argCode = comp.compile(child, 'E', fnID);\n if (!argCode?.code) return {code: undefined, type: 'E'};\n const isFirst = rt.getChildIndex(comp) === 0;\n const sep = isFirst ? '' : `','+`;\n if (rt.isOptional()) return {code: `(${comp.getChildVλl()} === undefined ? '': ${sep}${argCode.code})`, type: 'E'};\n return {code: `${sep}${argCode.code}`, type: 'E'};\n }\n\n function compileStringifyInterface(rt: InterfaceRunType, comp: JitFnCompiler): JitCode {\n if (rt.isCallable()) return comp.compile(rt.getCallSignature(), 'E', fnID);\n const children = rt.getJsonStringifySortedChildren(comp);\n if (children.length === 0) return {code: `''`, type: 'E'};\n const allOptional = children.every((prop) => (prop as MemberRunType<any>).isOptional());\n // if all properties are optional, we can not optimize and use JSON.stringify\n if (allOptional) return compileInterfaceIntoArray(rt, comp, children);\n const childrenCode = children\n .map((prop, i) => {\n const nexChild = children[i + 1];\n const isLast = !nexChild;\n prop.skipCommas = isLast;\n return comp.compile(prop, 'E', fnID).code;\n })\n .filter(Boolean)\n .join('+');\n return {code: `'{'+${childrenCode}+'}'`, type: 'E'};\n }\n\n function compileInterfaceIntoArray(rt: InterfaceRunType, comp: JitFnCompiler, children: MemberRunType<any>[]): JitCode {\n const arrName = comp.getLocalVarName('ns', rt);\n const childrenCode = children\n .map((prop) => {\n prop.skipCommas = true;\n const childJit = comp.compile(prop, 'E', fnID);\n if (!childJit?.code) return '';\n const code = `${arrName}.push(${childJit.code})`;\n // makes an extra check to avoid pushing empty strings to the array (childJit also makes the same check but is better than having to filter the array after)\n return prop.isOptional() && prop.tempChildVλl ? `if (${prop.tempChildVλl} !== undefined){${code}}` : `${code};`;\n })\n .filter(Boolean)\n .join('');\n\n return {code: `(function(){const ${arrName} = [];${childrenCode};return '{'+${arrName}.join(',')+'}'})()`, type: 'E'};\n }\n\n function compileStringifyClass(runType: BaseRunType, comp: JitFnCompiler): JitCode {\n switch (runType.src.subKind) {\n case ReflectionSubKind.date:\n return {code: `'\"'+${comp.vλl}.toJSON()+'\"'`, type: 'E'};\n case ReflectionSubKind.map: {\n const rt = runType as unknown as MapRunType;\n return compileStringifyIterable(rt as unknown as IterableRunType, comp);\n }\n case ReflectionSubKind.set: {\n const rt = runType as unknown as SetRunType;\n return compileStringifyIterable(rt as unknown as IterableRunType, comp);\n }\n case ReflectionSubKind.nonSerializable:\n throw new Error(`Jit compilation disabled for Non Serializable types.`);\n default: {\n const rt = runType as unknown as ClassRunType;\n if (rt.isCallable()) {\n const callSignature = rt.getCallSignature();\n if (callSignature) return comp.compile(callSignature, 'E', fnID);\n }\n // optional and index properties must be compiled first to prevent trailing commas\n // this is because the last trailing comma is calculated statically\n // maybe we need to move that trailing comma compilation to be dynamic\n // but we would need to create a self invoking function for that\n const children = rt.getJsonStringifySortedChildren(comp);\n if (children.length === 0) return {code: `''`, type: 'E'};\n const childrenCode = children\n .map((prop, i) => {\n const nexChild = children[i + 1];\n const isLast = !nexChild;\n prop.skipCommas = isLast;\n return comp.compile(prop, 'E', fnID).code;\n })\n .filter(Boolean)\n .join('+');\n return {code: `'{'+${childrenCode}+'}'`, type: 'E'};\n }\n }\n }\n\n return compileStringify;\n}\n\nexport function createStringifyIterable(fnID: Operation) {\n return function compileStringifyIterable(\n rt: IterableRunType,\n comp: JitFnCompiler,\n /** prefix characters to add before the generated array, used when generating code instead json */\n codePrefix: string = '',\n /** suffix characters to add after the generated array, used when generating code instead json */\n codeSuffix: string = ''\n ): JitCode {\n const entry = rt.getCustomVλl(comp)?.vλl || comp.vλl;\n const jitChildren = rt.getJitChildren(comp);\n const childrenCode = jitChildren.map((c) => comp.compile(c, 'E', fnID).code).join('+');\n const jsonItems = comp.getLocalVarName('ls', rt);\n const resultVal = comp.getLocalVarName('res', rt);\n const childrenResult = jitChildren.length > 1 ? `'['+${childrenCode}+']'` : childrenCode;\n const earlyReturn = codePrefix && codeSuffix ? `if (!${jsonItems}.length) return '${codePrefix}${codeSuffix}';` : '';\n return {\n code: `\n const ${jsonItems} = [];\n for (const ${entry} of ${comp.vλl}) {\n const ${resultVal} = ${childrenResult};\n ${jsonItems}.push(${resultVal});\n }\n ${earlyReturn}return '${codePrefix}[' + ${jsonItems}.join(',') + ']${codeSuffix}'\n `,\n type: 'RB',\n };\n };\n}\n\nexport const emitJsonStringify = createStringifyCompiler(JitFunctions.stringifyJson.id);\n"],"names":["ReflectionKind","parentIs","cpf_asJSONString","ReflectionSubKind","createIfElseFn","JitFunctions","isSafePropName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringifyJson.d.ts","sourceRoot":"","sources":["../../../../../src/jitCompilers/json/stringifyJson.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAGzD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAc3D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAGpE,KAAK,SAAS,GAAG,OAAO,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;AAExF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,aAGhB,WAAW,QAAQ,aAAa,KAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"stringifyJson.d.ts","sourceRoot":"","sources":["../../../../../src/jitCompilers/json/stringifyJson.ts"],"names":[],"mappings":"AASA,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAGzD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAc3D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAGpE,KAAK,SAAS,GAAG,OAAO,YAAY,CAAC,aAAa,CAAC,EAAE,GAAG,OAAO,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;AAExF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,aAGhB,WAAW,QAAQ,aAAa,KAAG,OAAO,CAuZhF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,IAE/C,IAAI,eAAe,EACnB,MAAM,aAAa,EAEnB,aAAY,MAAW,EAEvB,aAAY,MAAW,KACxB,OAAO,CAoBb;AAED,eAAO,MAAM,iBAAiB,YAvbS,WAAW,QAAQ,aAAa,KAAG,OAuba,CAAC"}
|
|
@@ -229,6 +229,30 @@ function _mockType(runType, comp, stack) {
|
|
|
229
229
|
case !!(rt.src.index.kind === type.ReflectionKind.symbol):
|
|
230
230
|
propName = /* @__PURE__ */ Symbol.for(`key${i}`);
|
|
231
231
|
break;
|
|
232
|
+
case !!(rt.src.index.kind === type.ReflectionKind.templateLiteral): {
|
|
233
|
+
const tplTypes = rt.src.index.types || [];
|
|
234
|
+
const buildKey = () => tplTypes.map((part) => {
|
|
235
|
+
switch (part.kind) {
|
|
236
|
+
case type.ReflectionKind.literal:
|
|
237
|
+
return String(part.literal);
|
|
238
|
+
case type.ReflectionKind.number:
|
|
239
|
+
return String(src_mocking_mockUtils.mockNumber(mOps.minNumber, mOps.maxNumber));
|
|
240
|
+
case type.ReflectionKind.string:
|
|
241
|
+
case type.ReflectionKind.any:
|
|
242
|
+
case type.ReflectionKind.infer:
|
|
243
|
+
return src_mocking_mockUtils.mockString(
|
|
244
|
+
mOps.stringLength || src_mocking_mockUtils.random(1, mOps.maxRandomStringLength),
|
|
245
|
+
mOps.stringCharSet || src_mocking_constants_mock.stringCharSet
|
|
246
|
+
);
|
|
247
|
+
default:
|
|
248
|
+
throw new Error(`Unsupported template literal span kind: ${part.kind}`);
|
|
249
|
+
}
|
|
250
|
+
}).join("");
|
|
251
|
+
let candidate = buildKey();
|
|
252
|
+
for (let r = 0; r < 5 && candidate in parentObj; r++) candidate = buildKey();
|
|
253
|
+
propName = candidate;
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
232
256
|
default:
|
|
233
257
|
throw new Error("Invalid index signature type.");
|
|
234
258
|
}
|
|
@@ -236,8 +260,29 @@ function _mockType(runType, comp, stack) {
|
|
|
236
260
|
}
|
|
237
261
|
return parentObj;
|
|
238
262
|
}
|
|
263
|
+
case type.ReflectionKind.templateLiteral: {
|
|
264
|
+
const types = src.types;
|
|
265
|
+
return types.map((part) => {
|
|
266
|
+
switch (part.kind) {
|
|
267
|
+
case type.ReflectionKind.literal:
|
|
268
|
+
return String(part.literal);
|
|
269
|
+
case type.ReflectionKind.number:
|
|
270
|
+
return String(src_mocking_mockUtils.mockNumber(mOps.minNumber, mOps.maxNumber));
|
|
271
|
+
case type.ReflectionKind.string:
|
|
272
|
+
case type.ReflectionKind.any:
|
|
273
|
+
case type.ReflectionKind.infer:
|
|
274
|
+
return src_mocking_mockUtils.mockString(
|
|
275
|
+
mOps.stringLength || src_mocking_mockUtils.random(1, mOps.maxRandomStringLength),
|
|
276
|
+
mOps.stringCharSet || src_mocking_constants_mock.stringCharSet
|
|
277
|
+
);
|
|
278
|
+
default:
|
|
279
|
+
throw new Error(
|
|
280
|
+
`Unsupported template literal span kind: ${part.kind}` + printStackTrace(comp, stack)
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
}).join("");
|
|
284
|
+
}
|
|
239
285
|
case type.ReflectionKind.infer:
|
|
240
|
-
case type.ReflectionKind.templateLiteral:
|
|
241
286
|
case type.ReflectionKind.typeParameter:
|
|
242
287
|
default:
|
|
243
288
|
throw new Error(`Cant mock Unsupported RunType: ${runType.getTypeName()}` + printStackTrace(comp, stack));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockType.cjs","sources":["../../../../src/mocking/mockType.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {ReflectionKind} from '@deepkit/type';\nimport type {MockOptions, Mutable, RunTypeOptions} from '../types.ts';\nimport type {BaseRunType} from '../lib/baseRunTypes.ts';\nimport {mockString, mockNumber, mockBoolean, mockBigInt, mockDate, random, mockRegExp, mockSymbol, mockAny} from './mockUtils.ts';\nimport {stringCharSet} from './constants.mock.ts';\nimport {ClassRunType} from '../nodes/collection/class.ts';\nimport type {PropertyRunType} from '../nodes/member/property.ts';\nimport type {MapRunType} from '../nodes/native/map.ts';\nimport type {SetRunType} from '../nodes/native/set.ts';\nimport type {InterfaceRunType} from '../nodes/collection/interface.ts';\nimport type {TupleRunType} from '../nodes/collection/tuple.ts';\nimport type {FunctionParamsRunType} from '../nodes/collection/functionParams.ts';\nimport type {UnionRunType} from '../nodes/collection/union.ts';\nimport type {EnumRunType} from '../nodes/atomic/enum.ts';\nimport type {PromiseRunType} from '../nodes/native/promise.ts';\nimport type {ParameterRunType} from '../nodes/member/param.ts';\nimport type {RestParamsRunType} from '../nodes/member/restParams.ts';\nimport {ReflectionSubKind} from '../constants.kind.ts';\nimport {NonSerializableRunType} from '../nodes/native/nonSerializable.ts';\nimport {IndexSignatureRunType} from '../nodes/member/indexProperty.ts';\nimport {getRunTypeFormat, getRunTypeTransformer} from '../lib/formats.ts';\nimport {JIT_STACK_TRACE_MESSAGE} from '../constants.ts';\nimport {JitFunctions} from '../constants.functions.ts';\nimport type {ArrayRunType} from '../nodes/member/array.ts';\nimport {getJitUtils} from '@mionjs/core';\nimport {MockJitCompiler, type JitFnCompiler} from '../lib/jitFnCompiler.ts';\n\nexport function mockType(runType: BaseRunType, comp: JitFnCompiler, stack: BaseRunType[] = []): any {\n // TODO: we could use JitCompiler functionality here to controls the stack etc\n stack.push(runType);\n const mockNestLevel = stack.filter((rt) => rt === runType).length;\n const rtOpts = comp.opts;\n const updatedOps = mockNestLevel ? getMockOptionsForNestedElements(rtOpts, mockNestLevel) : comp.opts;\n (comp as Mutable<JitFnCompiler>).opts = updatedOps;\n // Just one type validator allowed per type, and is responsible to mock the value,\n // ie: email and uuid should contain the logic to generate a valid value\n const typeValidator = getRunTypeFormat(runType);\n let mocked = typeValidator ? typeValidator.mock(updatedOps, runType) : _mockType(runType, comp, stack);\n (comp as Mutable<JitFnCompiler>).opts = rtOpts;\n // once mocked multiple type transformers can be applied to the mocked value\n const typeTransformer = getRunTypeTransformer(runType);\n if (typeTransformer) {\n const compiledFormatter = runType.createJitCompiledFunction(JitFunctions.format.id);\n mocked = compiledFormatter.isNoop ? mocked : compiledFormatter.fn(mocked);\n }\n stack.pop();\n return mocked;\n}\n\n// reduces all probabilities within the MockOptions to prevent infinite loops\n// each time mocking is a level deeper, the probabilities to generate an optional property should be reduced\n// this does not prevent infinite loops on types with circular references that are non optional,\n// we probably should throw an error in this case but these kind of types are technically not possible in real world so we can ignore them for now\nfunction getMockOptionsForNestedElements(opts: RunTypeOptions, nestLevel: number): RunTypeOptions {\n const mOps = opts.mock as MockOptions;\n const maxDepth = mOps.maxMockRecursion;\n const divisor = nestLevel;\n const {optionalProbability, maxRandomItemsLength: maxRandomArrayLength, optionalPropertyProbability, arrayLength} = mOps;\n const newProv = nestLevel >= maxDepth ? 0 : optionalProbability / divisor;\n const newMaxLength = nestLevel >= maxDepth ? 0 : Math.round(maxRandomArrayLength / divisor);\n // console.log(`divisor: ${divisor} | newMaxLength: ${newMaxLength} | newProv: ${newProv}`);\n const ret = {\n mock: {\n ...mOps,\n optionalProbability: newProv,\n maxRandomItemsLength: newMaxLength,\n },\n } satisfies RunTypeOptions;\n if (optionalPropertyProbability) {\n const entries = Object.entries(optionalPropertyProbability).map(([key, value]) => {\n const newProv = nestLevel > maxDepth ? 0 : value / divisor;\n return [key, value / newProv];\n });\n ret.mock.optionalPropertyProbability = Object.fromEntries(entries);\n }\n if (arrayLength) {\n const newLength = nestLevel >= maxDepth ? 0 : Math.round(arrayLength / divisor);\n ret.mock.arrayLength = newLength;\n }\n if (ret.mock.parentObj) ret.mock.parentObj = {}; // prevents mocking objects with circular references\n return ret;\n}\n\n/**\n * Centralized mock function with a giant switch statement that handles all node types.\n * This function is similar to createRunType in runType.ts but for mocking.\n */\nfunction _mockType(runType: BaseRunType, comp: JitFnCompiler, stack: BaseRunType[]): any {\n // Handle circular references\n const mOps = comp.opts.mock as MockOptions;\n const recursionLevel = stack.filter((rt) => rt === runType).length;\n const src = runType.src;\n const kind = src.kind;\n if (recursionLevel > mOps.maxMockRecursion) return undefined;\n\n switch (kind) {\n case ReflectionKind.never:\n throw new Error('Cannot mock never type.' + printStackTrace(comp, stack));\n case ReflectionKind.any:\n case ReflectionKind.unknown:\n return mockAny(mOps.anyValuesList);\n // Atomic types\n case ReflectionKind.string:\n return mockString(mOps.stringLength || random(1, mOps.maxRandomStringLength), mOps.stringCharSet || stringCharSet);\n case ReflectionKind.number:\n return mockNumber(mOps.minNumber, mOps.maxNumber);\n case ReflectionKind.boolean:\n return mockBoolean();\n case ReflectionKind.bigint:\n return mockBigInt(mOps.minNumber, mOps.maxNumber);\n case ReflectionKind.null:\n return null;\n case ReflectionKind.undefined:\n return undefined;\n case ReflectionKind.void:\n return undefined;\n case ReflectionKind.regexp:\n return mockRegExp(mOps.regexpList);\n case ReflectionKind.symbol:\n return mockSymbol(mOps.symbolName, mOps.symbolLength, mOps.symbolCharSet);\n case ReflectionKind.literal:\n return src.literal;\n case ReflectionKind.object:\n return mOps.objectList[random(0, mOps.objectList.length - 1)];\n case ReflectionKind.enum: {\n const rt = runType as EnumRunType;\n const i = mOps.enumIndex || random(0, rt.src.values.length - 1);\n return rt.src.values[i];\n }\n case ReflectionKind.enumMember:\n throw new Error('Mock enum member is not supported.' + printStackTrace(comp, stack));\n // Collection types\n case ReflectionKind.array: {\n const rt = runType as ArrayRunType;\n const length = mOps.arrayLength ?? random(0, mOps.maxRandomItemsLength);\n if (length === 0) return [];\n return Array.from({length}, () => mockType(rt.getMemberType(), comp, stack));\n }\n\n case ReflectionKind.tuple: {\n const rt = runType as TupleRunType;\n const options = mOps.tupleOptions;\n const params = rt.getChildRunTypes().map((p, i) => mockType(p, getChildOpts(comp, options?.[i]), stack));\n if (rt.hasRestParameter(comp)) {\n return [...params.slice(0, -1), ...params[params.length - 1]];\n }\n return params;\n }\n case ReflectionKind.intersection:\n case ReflectionKind.objectLiteral: {\n if (runType instanceof NonSerializableRunType) {\n throw new Error(`Mock is disabled for Non Serializable types.` + printStackTrace(comp, stack));\n } else {\n const rt = runType as InterfaceRunType;\n if (rt.isCallable()) return mockType(rt.getCallSignature()!, comp, stack);\n let obj: Record<string | number, any> = mOps.parentObj || {};\n rt.getChildRunTypes().forEach((prop) => {\n if (prop instanceof IndexSignatureRunType) {\n obj = {...obj, ...mockType(prop, comp, stack)};\n return;\n }\n const name = (prop as PropertyRunType).getChildVarName(comp);\n const isMethod = prop.src.kind === ReflectionKind.method || prop.src.kind === ReflectionKind.methodSignature;\n if (isMethod) return; // skip mocking methods\n obj[name] = mockType(prop, comp, stack);\n });\n return obj;\n }\n }\n case ReflectionKind.class:\n return _mockClass(runType, comp, stack);\n case ReflectionKind.union: {\n const rt = runType as UnionRunType;\n if (mOps.unionIndex && (mOps.unionIndex < 0 || mOps.unionIndex >= rt.getChildRunTypes().length)) {\n throw new Error(\n 'unionIndex must be between 0 and the number of types in the union.' + printStackTrace(comp, stack)\n );\n }\n const index = mOps?.unionIndex ?? random(0, rt.getChildRunTypes().length - 1);\n return mockType(rt.getChildRunTypes()[index], comp, stack);\n }\n\n case ReflectionKind.function:\n case ReflectionKind.callSignature:\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n if (runType.src.subKind === ReflectionSubKind.params) {\n const rt = runType as FunctionParamsRunType;\n const options = mOps.tupleOptions;\n const params = rt.getParamRunTypes(comp).map((p, i) => mockType(p, getChildOpts(comp, options?.[i]), stack));\n if (rt.hasRestParameter(comp)) {\n return [...params.slice(0, -1), ...params[params.length - 1]];\n }\n return params;\n } else if (runType.src.kind === ReflectionKind.method || runType.src.kind === ReflectionKind.methodSignature) {\n return undefined; // Skip methods silently\n } else {\n throw new Error('Mock is not allowed, call mockParams or mockReturn instead.' + printStackTrace(comp, stack));\n }\n case ReflectionKind.promise: {\n const rt = runType as PromiseRunType;\n const timeOut = mOps.promiseTimeOut || 1;\n return new Promise((resolve, reject) => {\n if (timeOut > 0) {\n setTimeout(() => {\n if (mOps.promiseReject) reject(mOps.promiseReject);\n else resolve(mockType(rt.getMemberType(), comp, stack));\n }, timeOut);\n return;\n }\n if (mOps.promiseReject) reject(mOps.promiseReject);\n else resolve(mockType(rt.getMemberType(), comp, stack));\n });\n }\n // Member types\n case ReflectionKind.tupleMember:\n case ReflectionKind.parameter: {\n const rt = runType as ParameterRunType;\n if (!rt.getJitChild(comp)) return undefined; // non serializable types are set to undefined\n if (rt.isOptional() && !rt.isRest()) {\n const probability = mOps.optionalProbability;\n if (probability < 0 || probability > 1)\n throw new Error('optionalProbability must be between 0 and 1' + printStackTrace(comp, stack));\n if (Math.random() > probability) {\n return undefined;\n }\n }\n return mockType(rt.getMemberType(), comp, stack);\n }\n case ReflectionKind.propertySignature:\n case ReflectionKind.property: {\n const rt = runType as PropertyRunType;\n const probability = mOps.optionalPropertyProbability?.[rt.getChildVarName(comp)] ?? mOps.optionalProbability;\n if (probability < 0 || probability > 1)\n throw new Error('optionalProbability must be between 0 and 1' + printStackTrace(comp, stack));\n if (rt.src.optional && Math.random() > probability) return undefined;\n return mockType(rt.getMemberType(), comp, stack);\n }\n\n case ReflectionKind.rest: {\n const rt = runType as RestParamsRunType;\n const length = random(0, mOps.maxRandomItemsLength);\n const items: any[] = [];\n for (let i = 0; i < length; i++) {\n items.push(mockType(rt.getMemberType(), comp, stack));\n }\n return items;\n }\n case ReflectionKind.indexSignature: {\n const rt = runType as IndexSignatureRunType;\n const length = random(0, mOps.maxRandomItemsLength);\n const parentObj = mOps.parentObj || {};\n for (let i = 0; i < length; i++) {\n let propName: number | string | symbol;\n switch (true) {\n case !!(rt.src.index.kind === ReflectionKind.number):\n propName = i;\n break;\n case !!(rt.src.index.kind === ReflectionKind.string):\n propName = `key${i}`;\n break;\n case !!(rt.src.index.kind === ReflectionKind.symbol):\n propName = Symbol.for(`key${i}`);\n break;\n default:\n throw new Error('Invalid index signature type.');\n }\n parentObj[propName] = mockType(rt.getMemberType(), comp, stack);\n }\n return parentObj;\n }\n\n case ReflectionKind.infer:\n case ReflectionKind.templateLiteral:\n case ReflectionKind.typeParameter:\n default:\n throw new Error(`Cant mock Unsupported RunType: ${runType.getTypeName()}` + printStackTrace(comp, stack));\n }\n}\n\nfunction _mockClass(runType: BaseRunType, comp: JitFnCompiler, stack: BaseRunType[]) {\n const mOps = comp.opts.mock as MockOptions;\n switch (runType.src.subKind) {\n case ReflectionSubKind.date:\n return mockDate(mOps.minDate, mOps.maxDate);\n case ReflectionSubKind.map: {\n const rt = runType as MapRunType;\n const mockMap = new Map();\n const length = mOps.arrayLength ?? random(0, mOps.maxRandomItemsLength);\n for (let i = 0; i < length; i++) {\n const keyType = mockType(rt.keyRT, comp, stack);\n const valueType = mockType(rt.valueRT, comp, stack);\n mockMap.set(keyType, valueType);\n }\n return mockMap;\n }\n case ReflectionSubKind.set: {\n const rt = runType as SetRunType;\n const mockSet = new Set();\n const length = mOps.arrayLength ?? random(0, mOps.maxRandomItemsLength);\n for (let i = 0; i < length; i++) {\n const value = mockType(rt.keyRT, comp, stack);\n mockSet.add(value);\n }\n return mockSet;\n }\n case ReflectionSubKind.nonSerializable:\n throw new Error(`Mock is disabled for Non Serializable types.` + printStackTrace(comp, stack));\n default: {\n if (!(runType instanceof ClassRunType)) {\n throw new Error(`Cant mock Unsupported RunType: ${runType.getTypeName()}` + printStackTrace(comp, stack));\n }\n const rt = runType as ClassRunType;\n const isSerializable = rt.isClassWithEmptyConstructor();\n const deserializeFn = getJitUtils().getDeserializeFn(rt.getClassName());\n if (!deserializeFn && !isSerializable) {\n throw new Error(\n `Class ${rt.getClassName()} can not be mocked. Be sure to register a deserialize function first with jiUtils.${getJitUtils().setDeserializeFn.name}` +\n printStackTrace(comp, stack)\n );\n }\n const instance = deserializeFn ? {} : new rt.src.classType();\n // only properties that are used in jit operations are mocked, there properties should be initialized in the constructor\n rt.getJitChildren(comp).forEach((prop) => {\n const name = (prop as PropertyRunType).getChildVarName(comp);\n if (prop instanceof IndexSignatureRunType) mockType(prop, comp, stack);\n const mocked = mockType(prop, comp, stack);\n if ((prop as PropertyRunType).src.optional && mocked === undefined) return;\n instance[name] = mockType(prop, comp, stack);\n });\n if (deserializeFn) return deserializeFn(instance);\n if (isSerializable) return instance;\n throw new Error(`Class ${rt.getClassName()} can not be mocked.` + printStackTrace(comp, stack));\n }\n }\n}\n\nfunction getChildOpts(comp: JitFnCompiler, mockOpts?: MockOptions): JitFnCompiler {\n if (!mockOpts) return comp;\n const newOpts = {...comp.opts, mock: mockOpts};\n return new MockJitCompiler(comp.rootType, newOpts, comp, comp.jitFnHash, comp.typeID);\n}\n\nfunction printStackTrace(comp: JitFnCompiler, stack: BaseRunType[]) {\n const separator = '.';\n return JIT_STACK_TRACE_MESSAGE + stack.map((rt) => comp.getTypeTraceInfo(rt)).join(separator);\n}\n"],"names":["getRunTypeFormat","getRunTypeTransformer","JitFunctions","newProv","ReflectionKind","mockAny","mockString","random","stringCharSet","mockNumber","mockBoolean","mockBigInt","mockRegExp","mockSymbol","NonSerializableRunType","IndexSignatureRunType","ReflectionSubKind","mockDate","ClassRunType","getJitUtils","MockJitCompiler","JIT_STACK_TRACE_MESSAGE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mockType.cjs","sources":["../../../../src/mocking/mockType.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {ReflectionKind} from '@deepkit/type';\nimport type {MockOptions, Mutable, RunTypeOptions} from '../types.ts';\nimport type {BaseRunType} from '../lib/baseRunTypes.ts';\nimport {mockString, mockNumber, mockBoolean, mockBigInt, mockDate, random, mockRegExp, mockSymbol, mockAny} from './mockUtils.ts';\nimport {stringCharSet} from './constants.mock.ts';\nimport {ClassRunType} from '../nodes/collection/class.ts';\nimport type {PropertyRunType} from '../nodes/member/property.ts';\nimport type {MapRunType} from '../nodes/native/map.ts';\nimport type {SetRunType} from '../nodes/native/set.ts';\nimport type {InterfaceRunType} from '../nodes/collection/interface.ts';\nimport type {TupleRunType} from '../nodes/collection/tuple.ts';\nimport type {FunctionParamsRunType} from '../nodes/collection/functionParams.ts';\nimport type {UnionRunType} from '../nodes/collection/union.ts';\nimport type {EnumRunType} from '../nodes/atomic/enum.ts';\nimport type {PromiseRunType} from '../nodes/native/promise.ts';\nimport type {ParameterRunType} from '../nodes/member/param.ts';\nimport type {RestParamsRunType} from '../nodes/member/restParams.ts';\nimport {ReflectionSubKind} from '../constants.kind.ts';\nimport {NonSerializableRunType} from '../nodes/native/nonSerializable.ts';\nimport {IndexSignatureRunType} from '../nodes/member/indexProperty.ts';\nimport {getRunTypeFormat, getRunTypeTransformer} from '../lib/formats.ts';\nimport {JIT_STACK_TRACE_MESSAGE} from '../constants.ts';\nimport {JitFunctions} from '../constants.functions.ts';\nimport type {ArrayRunType} from '../nodes/member/array.ts';\nimport {getJitUtils} from '@mionjs/core';\nimport {MockJitCompiler, type JitFnCompiler} from '../lib/jitFnCompiler.ts';\n\nexport function mockType(runType: BaseRunType, comp: JitFnCompiler, stack: BaseRunType[] = []): any {\n // TODO: we could use JitCompiler functionality here to controls the stack etc\n stack.push(runType);\n const mockNestLevel = stack.filter((rt) => rt === runType).length;\n const rtOpts = comp.opts;\n const updatedOps = mockNestLevel ? getMockOptionsForNestedElements(rtOpts, mockNestLevel) : comp.opts;\n (comp as Mutable<JitFnCompiler>).opts = updatedOps;\n // Just one type validator allowed per type, and is responsible to mock the value,\n // ie: email and uuid should contain the logic to generate a valid value\n const typeValidator = getRunTypeFormat(runType);\n let mocked = typeValidator ? typeValidator.mock(updatedOps, runType) : _mockType(runType, comp, stack);\n (comp as Mutable<JitFnCompiler>).opts = rtOpts;\n // once mocked multiple type transformers can be applied to the mocked value\n const typeTransformer = getRunTypeTransformer(runType);\n if (typeTransformer) {\n const compiledFormatter = runType.createJitCompiledFunction(JitFunctions.format.id);\n mocked = compiledFormatter.isNoop ? mocked : compiledFormatter.fn(mocked);\n }\n stack.pop();\n return mocked;\n}\n\n// reduces all probabilities within the MockOptions to prevent infinite loops\n// each time mocking is a level deeper, the probabilities to generate an optional property should be reduced\n// this does not prevent infinite loops on types with circular references that are non optional,\n// we probably should throw an error in this case but these kind of types are technically not possible in real world so we can ignore them for now\nfunction getMockOptionsForNestedElements(opts: RunTypeOptions, nestLevel: number): RunTypeOptions {\n const mOps = opts.mock as MockOptions;\n const maxDepth = mOps.maxMockRecursion;\n const divisor = nestLevel;\n const {optionalProbability, maxRandomItemsLength: maxRandomArrayLength, optionalPropertyProbability, arrayLength} = mOps;\n const newProv = nestLevel >= maxDepth ? 0 : optionalProbability / divisor;\n const newMaxLength = nestLevel >= maxDepth ? 0 : Math.round(maxRandomArrayLength / divisor);\n // console.log(`divisor: ${divisor} | newMaxLength: ${newMaxLength} | newProv: ${newProv}`);\n const ret = {\n mock: {\n ...mOps,\n optionalProbability: newProv,\n maxRandomItemsLength: newMaxLength,\n },\n } satisfies RunTypeOptions;\n if (optionalPropertyProbability) {\n const entries = Object.entries(optionalPropertyProbability).map(([key, value]) => {\n const newProv = nestLevel > maxDepth ? 0 : value / divisor;\n return [key, value / newProv];\n });\n ret.mock.optionalPropertyProbability = Object.fromEntries(entries);\n }\n if (arrayLength) {\n const newLength = nestLevel >= maxDepth ? 0 : Math.round(arrayLength / divisor);\n ret.mock.arrayLength = newLength;\n }\n if (ret.mock.parentObj) ret.mock.parentObj = {}; // prevents mocking objects with circular references\n return ret;\n}\n\n/**\n * Centralized mock function with a giant switch statement that handles all node types.\n * This function is similar to createRunType in runType.ts but for mocking.\n */\nfunction _mockType(runType: BaseRunType, comp: JitFnCompiler, stack: BaseRunType[]): any {\n // Handle circular references\n const mOps = comp.opts.mock as MockOptions;\n const recursionLevel = stack.filter((rt) => rt === runType).length;\n const src = runType.src;\n const kind = src.kind;\n if (recursionLevel > mOps.maxMockRecursion) return undefined;\n\n switch (kind) {\n case ReflectionKind.never:\n throw new Error('Cannot mock never type.' + printStackTrace(comp, stack));\n case ReflectionKind.any:\n case ReflectionKind.unknown:\n return mockAny(mOps.anyValuesList);\n // Atomic types\n case ReflectionKind.string:\n return mockString(mOps.stringLength || random(1, mOps.maxRandomStringLength), mOps.stringCharSet || stringCharSet);\n case ReflectionKind.number:\n return mockNumber(mOps.minNumber, mOps.maxNumber);\n case ReflectionKind.boolean:\n return mockBoolean();\n case ReflectionKind.bigint:\n return mockBigInt(mOps.minNumber, mOps.maxNumber);\n case ReflectionKind.null:\n return null;\n case ReflectionKind.undefined:\n return undefined;\n case ReflectionKind.void:\n return undefined;\n case ReflectionKind.regexp:\n return mockRegExp(mOps.regexpList);\n case ReflectionKind.symbol:\n return mockSymbol(mOps.symbolName, mOps.symbolLength, mOps.symbolCharSet);\n case ReflectionKind.literal:\n return src.literal;\n case ReflectionKind.object:\n return mOps.objectList[random(0, mOps.objectList.length - 1)];\n case ReflectionKind.enum: {\n const rt = runType as EnumRunType;\n const i = mOps.enumIndex || random(0, rt.src.values.length - 1);\n return rt.src.values[i];\n }\n case ReflectionKind.enumMember:\n throw new Error('Mock enum member is not supported.' + printStackTrace(comp, stack));\n // Collection types\n case ReflectionKind.array: {\n const rt = runType as ArrayRunType;\n const length = mOps.arrayLength ?? random(0, mOps.maxRandomItemsLength);\n if (length === 0) return [];\n return Array.from({length}, () => mockType(rt.getMemberType(), comp, stack));\n }\n\n case ReflectionKind.tuple: {\n const rt = runType as TupleRunType;\n const options = mOps.tupleOptions;\n const params = rt.getChildRunTypes().map((p, i) => mockType(p, getChildOpts(comp, options?.[i]), stack));\n if (rt.hasRestParameter(comp)) {\n return [...params.slice(0, -1), ...params[params.length - 1]];\n }\n return params;\n }\n case ReflectionKind.intersection:\n case ReflectionKind.objectLiteral: {\n if (runType instanceof NonSerializableRunType) {\n throw new Error(`Mock is disabled for Non Serializable types.` + printStackTrace(comp, stack));\n } else {\n const rt = runType as InterfaceRunType;\n if (rt.isCallable()) return mockType(rt.getCallSignature()!, comp, stack);\n let obj: Record<string | number, any> = mOps.parentObj || {};\n rt.getChildRunTypes().forEach((prop) => {\n if (prop instanceof IndexSignatureRunType) {\n obj = {...obj, ...mockType(prop, comp, stack)};\n return;\n }\n const name = (prop as PropertyRunType).getChildVarName(comp);\n const isMethod = prop.src.kind === ReflectionKind.method || prop.src.kind === ReflectionKind.methodSignature;\n if (isMethod) return; // skip mocking methods\n obj[name] = mockType(prop, comp, stack);\n });\n return obj;\n }\n }\n case ReflectionKind.class:\n return _mockClass(runType, comp, stack);\n case ReflectionKind.union: {\n const rt = runType as UnionRunType;\n if (mOps.unionIndex && (mOps.unionIndex < 0 || mOps.unionIndex >= rt.getChildRunTypes().length)) {\n throw new Error(\n 'unionIndex must be between 0 and the number of types in the union.' + printStackTrace(comp, stack)\n );\n }\n const index = mOps?.unionIndex ?? random(0, rt.getChildRunTypes().length - 1);\n return mockType(rt.getChildRunTypes()[index], comp, stack);\n }\n\n case ReflectionKind.function:\n case ReflectionKind.callSignature:\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n if (runType.src.subKind === ReflectionSubKind.params) {\n const rt = runType as FunctionParamsRunType;\n const options = mOps.tupleOptions;\n const params = rt.getParamRunTypes(comp).map((p, i) => mockType(p, getChildOpts(comp, options?.[i]), stack));\n if (rt.hasRestParameter(comp)) {\n return [...params.slice(0, -1), ...params[params.length - 1]];\n }\n return params;\n } else if (runType.src.kind === ReflectionKind.method || runType.src.kind === ReflectionKind.methodSignature) {\n return undefined; // Skip methods silently\n } else {\n throw new Error('Mock is not allowed, call mockParams or mockReturn instead.' + printStackTrace(comp, stack));\n }\n case ReflectionKind.promise: {\n const rt = runType as PromiseRunType;\n const timeOut = mOps.promiseTimeOut || 1;\n return new Promise((resolve, reject) => {\n if (timeOut > 0) {\n setTimeout(() => {\n if (mOps.promiseReject) reject(mOps.promiseReject);\n else resolve(mockType(rt.getMemberType(), comp, stack));\n }, timeOut);\n return;\n }\n if (mOps.promiseReject) reject(mOps.promiseReject);\n else resolve(mockType(rt.getMemberType(), comp, stack));\n });\n }\n // Member types\n case ReflectionKind.tupleMember:\n case ReflectionKind.parameter: {\n const rt = runType as ParameterRunType;\n if (!rt.getJitChild(comp)) return undefined; // non serializable types are set to undefined\n if (rt.isOptional() && !rt.isRest()) {\n const probability = mOps.optionalProbability;\n if (probability < 0 || probability > 1)\n throw new Error('optionalProbability must be between 0 and 1' + printStackTrace(comp, stack));\n if (Math.random() > probability) {\n return undefined;\n }\n }\n return mockType(rt.getMemberType(), comp, stack);\n }\n case ReflectionKind.propertySignature:\n case ReflectionKind.property: {\n const rt = runType as PropertyRunType;\n const probability = mOps.optionalPropertyProbability?.[rt.getChildVarName(comp)] ?? mOps.optionalProbability;\n if (probability < 0 || probability > 1)\n throw new Error('optionalProbability must be between 0 and 1' + printStackTrace(comp, stack));\n if (rt.src.optional && Math.random() > probability) return undefined;\n return mockType(rt.getMemberType(), comp, stack);\n }\n\n case ReflectionKind.rest: {\n const rt = runType as RestParamsRunType;\n const length = random(0, mOps.maxRandomItemsLength);\n const items: any[] = [];\n for (let i = 0; i < length; i++) {\n items.push(mockType(rt.getMemberType(), comp, stack));\n }\n return items;\n }\n case ReflectionKind.indexSignature: {\n const rt = runType as IndexSignatureRunType;\n const length = random(0, mOps.maxRandomItemsLength);\n const parentObj = mOps.parentObj || {};\n for (let i = 0; i < length; i++) {\n let propName: number | string | symbol;\n switch (true) {\n case !!(rt.src.index.kind === ReflectionKind.number):\n propName = i;\n break;\n case !!(rt.src.index.kind === ReflectionKind.string):\n propName = `key${i}`;\n break;\n case !!(rt.src.index.kind === ReflectionKind.symbol):\n propName = Symbol.for(`key${i}`);\n break;\n case !!(rt.src.index.kind === ReflectionKind.templateLiteral): {\n // walk the template literal spans to produce a key that matches the pattern.\n // retry a few times on collision since narrow patterns (eg `id-${number}`) can repeat.\n const tplTypes = ((rt.src.index as any).types as any[]) || [];\n const buildKey = () =>\n tplTypes\n .map((part: any) => {\n switch (part.kind) {\n case ReflectionKind.literal:\n return String(part.literal);\n case ReflectionKind.number:\n return String(mockNumber(mOps.minNumber, mOps.maxNumber));\n case ReflectionKind.string:\n case ReflectionKind.any:\n case ReflectionKind.infer:\n return mockString(\n mOps.stringLength || random(1, mOps.maxRandomStringLength),\n mOps.stringCharSet || stringCharSet\n );\n default:\n throw new Error(`Unsupported template literal span kind: ${part.kind}`);\n }\n })\n .join('');\n let candidate = buildKey();\n for (let r = 0; r < 5 && candidate in parentObj; r++) candidate = buildKey();\n propName = candidate;\n break;\n }\n default:\n throw new Error('Invalid index signature type.');\n }\n parentObj[propName] = mockType(rt.getMemberType(), comp, stack);\n }\n return parentObj;\n }\n\n case ReflectionKind.templateLiteral: {\n // walk the spans and emit a string for each: literal verbatim, string/any/infer => mockString,\n // number => stringified mockNumber. The concatenated value is, by construction,\n // accepted by the validation regex emitted by TemplateLiteralRunType.\n const types = (src as any).types as any[];\n return types\n .map((part: any) => {\n switch (part.kind) {\n case ReflectionKind.literal:\n return String(part.literal);\n case ReflectionKind.number:\n return String(mockNumber(mOps.minNumber, mOps.maxNumber));\n case ReflectionKind.string:\n case ReflectionKind.any:\n case ReflectionKind.infer:\n return mockString(\n mOps.stringLength || random(1, mOps.maxRandomStringLength),\n mOps.stringCharSet || stringCharSet\n );\n default:\n throw new Error(\n `Unsupported template literal span kind: ${part.kind}` + printStackTrace(comp, stack)\n );\n }\n })\n .join('');\n }\n case ReflectionKind.infer:\n case ReflectionKind.typeParameter:\n default:\n throw new Error(`Cant mock Unsupported RunType: ${runType.getTypeName()}` + printStackTrace(comp, stack));\n }\n}\n\nfunction _mockClass(runType: BaseRunType, comp: JitFnCompiler, stack: BaseRunType[]) {\n const mOps = comp.opts.mock as MockOptions;\n switch (runType.src.subKind) {\n case ReflectionSubKind.date:\n return mockDate(mOps.minDate, mOps.maxDate);\n case ReflectionSubKind.map: {\n const rt = runType as MapRunType;\n const mockMap = new Map();\n const length = mOps.arrayLength ?? random(0, mOps.maxRandomItemsLength);\n for (let i = 0; i < length; i++) {\n const keyType = mockType(rt.keyRT, comp, stack);\n const valueType = mockType(rt.valueRT, comp, stack);\n mockMap.set(keyType, valueType);\n }\n return mockMap;\n }\n case ReflectionSubKind.set: {\n const rt = runType as SetRunType;\n const mockSet = new Set();\n const length = mOps.arrayLength ?? random(0, mOps.maxRandomItemsLength);\n for (let i = 0; i < length; i++) {\n const value = mockType(rt.keyRT, comp, stack);\n mockSet.add(value);\n }\n return mockSet;\n }\n case ReflectionSubKind.nonSerializable:\n throw new Error(`Mock is disabled for Non Serializable types.` + printStackTrace(comp, stack));\n default: {\n if (!(runType instanceof ClassRunType)) {\n throw new Error(`Cant mock Unsupported RunType: ${runType.getTypeName()}` + printStackTrace(comp, stack));\n }\n const rt = runType as ClassRunType;\n const isSerializable = rt.isClassWithEmptyConstructor();\n const deserializeFn = getJitUtils().getDeserializeFn(rt.getClassName());\n if (!deserializeFn && !isSerializable) {\n throw new Error(\n `Class ${rt.getClassName()} can not be mocked. Be sure to register a deserialize function first with jiUtils.${getJitUtils().setDeserializeFn.name}` +\n printStackTrace(comp, stack)\n );\n }\n const instance = deserializeFn ? {} : new rt.src.classType();\n // only properties that are used in jit operations are mocked, there properties should be initialized in the constructor\n rt.getJitChildren(comp).forEach((prop) => {\n const name = (prop as PropertyRunType).getChildVarName(comp);\n if (prop instanceof IndexSignatureRunType) mockType(prop, comp, stack);\n const mocked = mockType(prop, comp, stack);\n if ((prop as PropertyRunType).src.optional && mocked === undefined) return;\n instance[name] = mockType(prop, comp, stack);\n });\n if (deserializeFn) return deserializeFn(instance);\n if (isSerializable) return instance;\n throw new Error(`Class ${rt.getClassName()} can not be mocked.` + printStackTrace(comp, stack));\n }\n }\n}\n\nfunction getChildOpts(comp: JitFnCompiler, mockOpts?: MockOptions): JitFnCompiler {\n if (!mockOpts) return comp;\n const newOpts = {...comp.opts, mock: mockOpts};\n return new MockJitCompiler(comp.rootType, newOpts, comp, comp.jitFnHash, comp.typeID);\n}\n\nfunction printStackTrace(comp: JitFnCompiler, stack: BaseRunType[]) {\n const separator = '.';\n return JIT_STACK_TRACE_MESSAGE + stack.map((rt) => comp.getTypeTraceInfo(rt)).join(separator);\n}\n"],"names":["getRunTypeFormat","getRunTypeTransformer","JitFunctions","newProv","ReflectionKind","mockAny","mockString","random","stringCharSet","mockNumber","mockBoolean","mockBigInt","mockRegExp","mockSymbol","NonSerializableRunType","IndexSignatureRunType","ReflectionSubKind","mockDate","ClassRunType","getJitUtils","MockJitCompiler","JIT_STACK_TRACE_MESSAGE"],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const type = require("@deepkit/type");
|
|
4
|
+
const src_lib_baseRunTypes = require("../../lib/baseRunTypes.cjs");
|
|
5
|
+
function __assignType(fn, args) {
|
|
6
|
+
fn.__type = args;
|
|
7
|
+
return fn;
|
|
8
|
+
}
|
|
9
|
+
class TemplateLiteralRunType extends src_lib_baseRunTypes.CollectionRunType {
|
|
10
|
+
_regexSource;
|
|
11
|
+
/** Builds the anchored regex source from src.types. Memoized. */
|
|
12
|
+
getRegexSource() {
|
|
13
|
+
if (this._regexSource !== void 0)
|
|
14
|
+
return this._regexSource;
|
|
15
|
+
this._regexSource = buildAnchoredTemplateRegexSource(this.src.types || []);
|
|
16
|
+
return this._regexSource;
|
|
17
|
+
}
|
|
18
|
+
/** Returns a context-bound variable name holding the RegExp; emits the const into the compiler context. */
|
|
19
|
+
getRegexVar(comp) {
|
|
20
|
+
const varName = comp.getLocalVarName("reTL", this);
|
|
21
|
+
if (!comp.hasContextItem(varName)) {
|
|
22
|
+
comp.setContextItem(varName, `const ${varName} = new RegExp(${JSON.stringify(this.getRegexSource())})`);
|
|
23
|
+
}
|
|
24
|
+
return varName;
|
|
25
|
+
}
|
|
26
|
+
emitIsType(comp) {
|
|
27
|
+
const re = this.getRegexVar(comp);
|
|
28
|
+
return { code: `(typeof ${comp.vλl} === 'string' && ${re}.test(${comp.vλl}))`, type: "E" };
|
|
29
|
+
}
|
|
30
|
+
emitTypeErrors(comp) {
|
|
31
|
+
const re = this.getRegexVar(comp);
|
|
32
|
+
return {
|
|
33
|
+
code: `if (typeof ${comp.vλl} !== 'string' || !${re}.test(${comp.vλl})) ${comp.callJitErr(this)}`,
|
|
34
|
+
type: "S"
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** value is already a JSON-safe string, no transform required */
|
|
38
|
+
emitPrepareForJson() {
|
|
39
|
+
return { code: void 0, type: "S" };
|
|
40
|
+
}
|
|
41
|
+
/** value is already a JSON-safe string, no transform required */
|
|
42
|
+
emitRestoreFromJson() {
|
|
43
|
+
return { code: void 0, type: "S" };
|
|
44
|
+
}
|
|
45
|
+
static __type = ["TypeTemplateLiteral", () => src_lib_baseRunTypes.CollectionRunType, "_regexSource", "getRegexSource", "JitFnCompiler", "comp", "getRegexVar", "JitCode", "emitIsType", "JitErrorsFnCompiler", "emitTypeErrors", "emitPrepareForJson", "emitRestoreFromJson", "TemplateLiteralRunType", `P"w!7"P&-J3#;P&0$P"w%2&&0';P"w%2&"w(0)P"w*2&"w(0+P"w(0,P"w(0-5"w!6"w.`];
|
|
46
|
+
}
|
|
47
|
+
function buildAnchoredTemplateRegexSource(types) {
|
|
48
|
+
return `^${types.map(__assignType((t) => spanToRegex(t), ["t", "", 'P"2!"/"'])).join("")}$`;
|
|
49
|
+
}
|
|
50
|
+
buildAnchoredTemplateRegexSource.__type = ["TypeTemplateLiteral", "types", "types", "buildAnchoredTemplateRegexSource", 'P"w!."f2#&/$'];
|
|
51
|
+
function spanToRegex(t) {
|
|
52
|
+
switch (t.kind) {
|
|
53
|
+
case type.ReflectionKind.literal:
|
|
54
|
+
return escapeForRegex(String(t.literal));
|
|
55
|
+
case type.ReflectionKind.number:
|
|
56
|
+
return "-?(?:\\d+\\.?\\d*|\\.\\d+)";
|
|
57
|
+
case type.ReflectionKind.string:
|
|
58
|
+
case type.ReflectionKind.any:
|
|
59
|
+
case type.ReflectionKind.infer:
|
|
60
|
+
return "[\\s\\S]*";
|
|
61
|
+
default:
|
|
62
|
+
throw new Error(`Unsupported template literal span kind: ${t.kind}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
spanToRegex.__type = ["TypeTemplateLiteral", "types", "t", "spanToRegex", `P"w!."f'f2#&/$`];
|
|
66
|
+
function escapeForRegex(s) {
|
|
67
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
68
|
+
}
|
|
69
|
+
escapeForRegex.__type = ["s", "escapeForRegex", 'P&2!&/"'];
|
|
70
|
+
exports.TemplateLiteralRunType = TemplateLiteralRunType;
|
|
71
|
+
exports.buildAnchoredTemplateRegexSource = buildAnchoredTemplateRegexSource;
|
|
72
|
+
exports.spanToRegex = spanToRegex;
|
|
73
|
+
//# sourceMappingURL=templateLiteral.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateLiteral.cjs","sources":["../../../../../src/nodes/collection/templateLiteral.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {ReflectionKind, type TypeTemplateLiteral, type TypeLiteral} from '@deepkit/type';\nimport type {JitFnCompiler, JitErrorsFnCompiler} from '../../lib/jitFnCompiler.ts';\nimport type {JitCode} from '../../types.ts';\nimport {CollectionRunType} from '../../lib/baseRunTypes.ts';\n\n/**\n * RunType for TypeScript template literal types, ie: `type T = \\`api/user/${number}\\``.\n * The runtime value is a string. Validation is done by compiling the template literal type\n * to a single anchored regex at JIT-build time and then calling `regex.test(v)` at runtime.\n * Mocking walks the children directly (literal => verbatim, string/any => mockString, number => mockNumber)\n * and concatenates the spans, which guarantees the result satisfies the validation regex.\n */\nexport class TemplateLiteralRunType extends CollectionRunType<TypeTemplateLiteral> {\n private _regexSource: string | undefined;\n\n /** Builds the anchored regex source from src.types. Memoized. */\n getRegexSource(): string {\n if (this._regexSource !== undefined) return this._regexSource;\n this._regexSource = buildAnchoredTemplateRegexSource(this.src.types || []);\n return this._regexSource;\n }\n\n /** Returns a context-bound variable name holding the RegExp; emits the const into the compiler context. */\n private getRegexVar(comp: JitFnCompiler): string {\n const varName = comp.getLocalVarName('reTL', this);\n if (!comp.hasContextItem(varName)) {\n comp.setContextItem(varName, `const ${varName} = new RegExp(${JSON.stringify(this.getRegexSource())})`);\n }\n return varName;\n }\n\n emitIsType(comp: JitFnCompiler): JitCode {\n const re = this.getRegexVar(comp);\n return {code: `(typeof ${comp.vλl} === 'string' && ${re}.test(${comp.vλl}))`, type: 'E'};\n }\n emitTypeErrors(comp: JitErrorsFnCompiler): JitCode {\n const re = this.getRegexVar(comp);\n return {\n code: `if (typeof ${comp.vλl} !== 'string' || !${re}.test(${comp.vλl})) ${comp.callJitErr(this)}`,\n type: 'S',\n };\n }\n /** value is already a JSON-safe string, no transform required */\n emitPrepareForJson(): JitCode {\n return {code: undefined, type: 'S'};\n }\n /** value is already a JSON-safe string, no transform required */\n emitRestoreFromJson(): JitCode {\n return {code: undefined, type: 'S'};\n }\n}\n\n/** Build the full ^...$ regex source for a template literal type's spans */\nexport function buildAnchoredTemplateRegexSource(types: TypeTemplateLiteral['types']): string {\n return `^${types.map((t) => spanToRegex(t)).join('')}$`;\n}\n\n/** Translate a single template-literal span (TypeString | TypeAny | TypeNumber | TypeLiteral | TypeInfer) into regex source */\nexport function spanToRegex(t: TypeTemplateLiteral['types'][number]): string {\n switch (t.kind) {\n case ReflectionKind.literal:\n return escapeForRegex(String((t as TypeLiteral).literal));\n case ReflectionKind.number:\n // matches signed integers and floats (including leading dot like '.5'), mirroring TS's `${number}` semantics\n return '-?(?:\\\\d+\\\\.?\\\\d*|\\\\.\\\\d+)';\n case ReflectionKind.string:\n case ReflectionKind.any:\n case ReflectionKind.infer:\n // `${string}` accepts the empty string, so use * not +\n return '[\\\\s\\\\S]*';\n default:\n // unreachable per deepkit's TypeTemplateLiteral.types definition\n throw new Error(`Unsupported template literal span kind: ${(t as {kind: number}).kind}`);\n }\n}\n\n/** Escape regex metacharacters so a literal substring is matched verbatim */\nfunction escapeForRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n"],"names":["CollectionRunType","ReflectionKind"],"mappings":";;;;;;;;AAmBM,MAAO,+BAA+BA,qBAAAA,kBAAsC;AAAA,EACtE;AAAA;AAAA,EAGR,iBAAc;AACV,QAAI,KAAK,iBAAiB;AAAW,aAAO,KAAK;AACjD,SAAK,eAAe,iCAAiC,KAAK,IAAI,SAAS,EAAE;AACzE,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGQ,YAAY,MAAmB;AACnC,UAAM,UAAU,KAAK,gBAAgB,QAAQ,IAAI;AACjD,QAAI,CAAC,KAAK,eAAe,OAAO,GAAG;AAC/B,WAAK,eAAe,SAAS,SAAS,OAAO,iBAAiB,KAAK,UAAU,KAAK,eAAA,CAAgB,CAAC,GAAG;AAAA,IAC1G;AACA,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,MAAmB;AAC1B,UAAM,KAAK,KAAK,YAAY,IAAI;AAChC,WAAO,EAAC,MAAM,WAAW,KAAK,GAAG,oBAAoB,EAAE,SAAS,KAAK,GAAG,MAAM,MAAM,IAAA;AAAA,EACxF;AAAA,EACA,eAAe,MAAyB;AACpC,UAAM,KAAK,KAAK,YAAY,IAAI;AAChC,WAAO;AAAA,MACH,MAAM,cAAc,KAAK,GAAG,qBAAqB,EAAE,SAAS,KAAK,GAAG,MAAM,KAAK,WAAW,IAAI,CAAC;AAAA,MAC/F,MAAM;AAAA,IAAA;AAAA,EAEd;AAAA;AAAA,EAEA,qBAAkB;AACd,WAAO,EAAC,MAAM,QAAW,MAAM,IAAA;AAAA,EACnC;AAAA;AAAA,EAEA,sBAAmB;AACf,WAAO,EAAC,MAAM,QAAW,MAAM,IAAA;AAAA,EACnC;AAAA;;AAIE,SAAU,iCAAiC,OAAmC;AAChF,SAAO,IAAI,MAAM,iBAAI,CAAC,MAAM,YAAY,CAAC,GAAC,CAAA,KAAA,IAAA,SAAA,CAAA,CAAA,EAAE,KAAK,EAAE,CAAC;AACxD;;AAGM,SAAU,YAAY,GAAuC;AAC/D,UAAQ,EAAE,MAAA;AAAA,IACN,KAAKC,KAAAA,eAAe;AAChB,aAAO,eAAe,OAAQ,EAAkB,OAAO,CAAC;AAAA,IAC5D,KAAKA,KAAAA,eAAe;AAEhB,aAAO;AAAA,IACX,KAAKA,KAAAA,eAAe;AAAA,IACpB,KAAKA,KAAAA,eAAe;AAAA,IACpB,KAAKA,KAAAA,eAAe;AAEhB,aAAO;AAAA,IACX;AAEI,YAAM,IAAI,MAAM,2CAA4C,EAAqB,IAAI,EAAE;AAAA,EAAA;AAEnG;;AAGA,SAAS,eAAe,GAAS;AAC7B,SAAO,EAAE,QAAQ,uBAAuB,MAAM;AAClD;;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TypeTemplateLiteral } from '@deepkit/type';
|
|
2
|
+
import { JitFnCompiler, JitErrorsFnCompiler } from '../../lib/jitFnCompiler.ts';
|
|
3
|
+
import { JitCode } from '../../types.ts';
|
|
4
|
+
import { CollectionRunType } from '../../lib/baseRunTypes.ts';
|
|
5
|
+
export declare class TemplateLiteralRunType extends CollectionRunType<TypeTemplateLiteral> {
|
|
6
|
+
private _regexSource;
|
|
7
|
+
getRegexSource(): string;
|
|
8
|
+
private getRegexVar;
|
|
9
|
+
emitIsType(comp: JitFnCompiler): JitCode;
|
|
10
|
+
emitTypeErrors(comp: JitErrorsFnCompiler): JitCode;
|
|
11
|
+
emitPrepareForJson(): JitCode;
|
|
12
|
+
emitRestoreFromJson(): JitCode;
|
|
13
|
+
}
|
|
14
|
+
export declare function buildAnchoredTemplateRegexSource(types: TypeTemplateLiteral['types']): string;
|
|
15
|
+
export declare function spanToRegex(t: TypeTemplateLiteral['types'][number]): string;
|
|
16
|
+
//# sourceMappingURL=templateLiteral.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateLiteral.d.ts","sourceRoot":"","sources":["../../../../../src/nodes/collection/templateLiteral.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,KAAK,mBAAmB,EAAmB,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAS5D,qBAAa,sBAAuB,SAAQ,iBAAiB,CAAC,mBAAmB,CAAC;IAC9E,OAAO,CAAC,YAAY,CAAqB;IAGzC,cAAc,IAAI,MAAM;IAOxB,OAAO,CAAC,WAAW;IAQnB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;IAIxC,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO;IAQlD,kBAAkB,IAAI,OAAO;IAI7B,mBAAmB,IAAI,OAAO;CAGjC;AAGD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,CAE5F;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAgB3E"}
|