function genAssignmentCode (value: string, assignment: string): string { const modelRs = parseModel(value) if (modelRs.idx === null) { return `${value}=${assignment}` } else { return `var $$exp = ${modelRs.exp}, $$idx = ${modelRs.idx};` + `if (!Array.isArray($$exp)){` + `${value}=${assignment}}` + `else{$$exp.splice($$idx, 1, ${assignment})}` } }
it('parse string in brackets', () => { const res = parseModel('a["b"][c]') expect(res.exp).toBe('a["b"]') expect(res.idx).toBe('c') })
it('parse object dot notation', () => { const res = parseModel('a.b.c') expect(res.exp).toBe('a.b.c') expect(res.idx).toBe(null) })
it('combined', () => { const res = parseModel('test.xxx.a["asa"][test1[idx]]') expect(res.exp).toBe('test.xxx.a["asa"]') expect(res.idx).toBe('test1[idx]') })
it('parse nested brackets', () => { const res = parseModel('a[i[c]]') expect(res.exp).toBe('a') expect(res.idx).toBe('i[c]') })
it('parse brackets with object dot notation', () => { const res = parseModel('a["b"][c].xxx') expect(res.exp).toBe('a["b"][c].xxx') expect(res.idx).toBe(null) })