import * as ts from 'typescript'; import { getDecorator, getDecoratorName } from '../helpers'; export function transformProperty(members: any[], index: number) { const property = members[index] as ts.PropertyDeclaration, decorator = getDecorator(property), decoratorName = getDecoratorName(decorator); let type: 'cordova' | 'instance'; switch (decoratorName) { case 'CordovaProperty': type = 'cordova'; break; case 'InstanceProperty': type = 'instance'; break; default: return property; } const getter = ts.createGetAccessor( undefined, undefined, property.name, undefined, property.type, ts.createBlock([ ts.createReturn( ts.createCall(ts.createIdentifier(type + 'PropertyGet'), undefined, [ ts.createThis(), ts.createLiteral((property.name as any).text) ]) ) ]) ); const setter = ts.createSetAccessor( undefined, undefined, property.name, [ ts.createParameter( undefined, undefined, undefined, 'value', undefined, property.type ) ], ts.createBlock([ ts.createStatement( ts.createCall(ts.createIdentifier(type + 'PropertySet'), undefined, [ ts.createThis(), ts.createLiteral((property.name as any).text), ts.createIdentifier('value') ]) ) ]) ); return [getter, setter]; }