import { Import } from "../../Imports/Import" ; /**
 * Where native operations are called from.
 */ export enum NativeCallScope { /**
     * Called as a member of an array containing the parameters.
     */ Array = "Array" , /**
     * Called as a member of the calling object.
     */ Member = "Member" , /**
     * Called as an operator on or with the calling object.
     */ Operator = "Operator" , /**
     * Called as a global static.
     */ Static = "Static" } /**
 * How native operations are called.
 */ export enum NativeCallType { /**
     * An operator floating to the left of its caller.
     */ FloatingLeft = "FloatingLeft" , /**
     * An operator floating to the right of its caller.
     */ FloatingRight = "FloatingRight" , /**
     * An operation that exists as a function.
     */ Function = "Function" , /**
     * An operation as a single property.
     */ Property = "Property" } /**
 * Metadata on syntax for how to perform a native call, such as Array::push.
 */ export class NativeCallSyntax { /**
     * Default arguments this may add as a function or static.
     */ private static defaultArguments : string [ ] = [ ] ; /**
     * Default imports required for native command use.
     */ private static defaultImports : Import [ ] = [ ] ; /**
     * Default characters between items in the native call.
     */ private static defaultSeparator : string = ", " ; /**
     * Any arguments this may add as a function or static.
     */ public arguments : string [ ] ; /**
     * Any imports required for native command use.
     */ public imports : Import [ ] ; /**
     * What this is called.
     */ public name : string ; /**
     * Where this is called from.
     */ public scope : NativeCallScope ; /**
     * Characters between items in the native call.
     */ public separator : string ; /**
     * How this is called.
     */ public type : NativeCallType ; param name param scope param type public constructor ( name , scope , type ) { this . arguments = NativeCallSyntax . defaultArguments ; this . imports = NativeCallSyntax . defaultImports ; this . separator = NativeCallSyntax . defaultSeparator ; this . name = name ; this . scope = scope ; this . type = type ; } param argument returns public withArguments ( args ) { this . arguments = args ; return this ; } param imports returns public withImports ( imports ) { this . imports = imports ; return this ; } param separator returns public withSeparator ( separator ) { this . separator = separator ; return this ; } }