import { readFileSync } from 'fs'; import { parseCurlCommand, extractJsonCandidates } from '../src/utils/parseCurl.ts'; import { buildCurlInterfaceFillPayload } from '../src/utils/curlToInterfaceFill.ts'; import { pickBestJsonBodyText, parseJsonTextToParameterFlatList, defaultResolveParameterType, } from '../src/utils/jsonParameterTree.ts'; import { ContentType } from '../src/constants/itfxEnums.ts'; const curl = readFileSync(new URL('./test-notify-biz.curl', import.meta.url), 'utf8'); const p = parseCurlCommand(curl); console.log('method', p.method); console.log('pathname', p.pathname); console.log('bodyType', p.bodyType); console.log('queryParams', p.queryParams); console.log('formBody', p.formBodyParams); const candidates = extractJsonCandidates(p); console.log('candidates', candidates.length); if (candidates[0]) { const obj = JSON.parse(candidates[0]); console.log('candidate keys', Object.keys(obj)); console.log('eventTime', obj.eventTime, 'ok', obj.eventTime?.includes('+0800')); } const best = pickBestJsonBodyText(candidates, [], { resolveParameterType: defaultResolveParameterType }); if (best) { const flat = parseJsonTextToParameterFlatList(best, { resolveParameterType: defaultResolveParameterType }); console.log('flat nodes', flat.length, 'names', flat.map((n) => n.name)); } const payload = buildCurlInterfaceFillPayload(curl); console.log('contentType', payload.contentType, 'expected Form', ContentType.FormUrlEncoded); console.log('query', payload.queryParams.map((x) => `${x.name}=${x.value}`)); console.log('bodyForm', payload.bodyFormParams.map((x) => `${x.name}=${x.value}`)); console.assert( payload.queryParams.some((x) => x.name === 'notifyBizEventDTO' && x.value === '$FromMappingBody'), 'notifyBizEventDTO should stay in Query', ); console.assert( !payload.bodyFormParams.some((x) => x.name === 'notifyBizEventDTO'), 'notifyBizEventDTO should NOT be in Body form', ); console.log('jsonBodies', payload.jsonBodies.length);