awesome-cordova-plugins/scripts/build/transformers/properties.ts
2017-12-28 07:28:44 -05:00

54 lines
1.4 KiB
TypeScript

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];
}