// Execute the actual UTS services and page scripts in memory. No app build, network or storage. const fs = require('node:fs'); const path = require('node:path'); const vm = require('node:vm'); const assert = require('node:assert/strict'); const ts = require('D:/Develop/HBuilderX/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/typescript/lib/typescript.js'); class Json { constructor(values = {}) { Object.assign(this, values); } getString(k) { return typeof this[k] === 'string' ? this[k] : null; } getNumber(k) { return typeof this[k] === 'number' ? this[k] : null; } getBoolean(k) { return typeof this[k] === 'boolean' ? this[k] : null; } getArray(k) { return Array.isArray(this[k]) ? this[k] : null; } } const root = path.join(__dirname, '..'); const modules = {}; const calls = []; const activePages = []; let response = new Json({ assessmentId: '1', revisionId: '2', submissionStatus: 'accepted' }); const session = new Json({ token: 'synthetic-zero-balance-owner' }); const api = { getSession: () => session, requestJson: async (...args) => { calls.push(args); return response; } }; function compile(source, filename, extras = {}) { const exports = {}; const compiled = ts.transpileModule(source, { reportDiagnostics: true, compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 } }); assert.equal((compiled.diagnostics || []).filter(d => d.category === ts.DiagnosticCategory.Error).length, 0, 'UTS transpiles: ' + filename); vm.runInNewContext(compiled.outputText, { exports, UTSJSONObject: Json, Error, Number, Date, Math, Promise, require: p => p.endsWith('.uvue') ? {} : p === '@/services/api.uts' || p === './api.uts' ? api : p === '@/services/layout.uts' ? { usePageLayout: () => ({ pageStyle: () => '', contentStyle: () => '', bottomStyle: () => '' }) } : p === '@/services/documents.uts' ? { fetchOwnedDocuments: async () => [], releaseDocumentTemp: () => {} } : load(p.startsWith('@/') ? p.slice(2) : path.posix.normalize(path.posix.dirname(filename) + '/' + p)), ...extras }, { filename }); return exports; } function load(filename) { if (modules[filename]) return modules[filename]; const result = compile(fs.readFileSync(path.join(root, filename), 'utf8'), filename); modules[filename] = result; return result; } const service = load('services/assessment.uts'); const records = load('packages/finance/services/records.uts'); const flow = load('services/assessment-flow.uts'); function form(overrides = {}) { return Object.assign(service.emptyAssessmentForm(), { name: '合成用户', idCard: '110101199001010000', phone: '19900000009', city: '广东省', maritalStatus: '未婚', occupation: '企业职员', company: '合成单位', monthlyIncome: '1', socialSecurity: '未缴纳', housingFund: '未缴纳', house: '无', car: '无', creditLoanCount: '0', creditCardCount: '0', loanCountScope: 'all_loans' }, overrides); } function save(value) { service.setAssessmentInput('personal', 2, value, [], [], false, false); } function snapshot(value) { return JSON.stringify(value); } function detail(formValues) { return new Json({ assessmentId: '1', revisionId: '2', revisionNo: 1, type: 'personal', status: 'succeeded', moneyUnit: 'yuan', form: new Json(formValues) }); } function page(kind) { const filename = `packages/finance/${kind}/${kind}.uvue`; const hooks = {}; const events = { toasts: [], navigation: [] }; const exposure = kind === 'assessment' ? '{form,step,restore,next,validateStep,confirmLoanCountScope:typeof confirmLoanCountScope === "undefined" ? null : confirmLoanCountScope}' : '{payload,sections,submit,loadInput}'; const source = fs.readFileSync(path.join(root, filename), 'utf8').match(/