{
    "src": "/*//////////////////////////////////////////////////////////////////////////////////////\n//////     Autogenerated by JaySvcUtil http://JayData.org for more info        /////////\n//////                      OData  V4  TypeScript                              /////////\n//////////////////////////////////////////////////////////////////////////////////////*/\n\ndeclare module $data{\n    class Geography{}\n    class GeographyLineString{}\n    class GeographyPolygon{}\n    class GeographyMultiPoint{}\n    class GeographyMultiPolygon{}\n    class GeographyMultiLineString{}\n    class GeographyCollection{}\n\n    class Geometry{}\n    class GeometryLineString{}\n    class GeometryPolygon{}\n    class GeometryMultiPoint{}\n    class GeometryMultiPolygon{}\n    class GeometryMultiLineString{}\n    class GeometryCollection{}\n\n    const enum EntityState{\n        Detached = 0,\n        Unchanged = 10,\n        Added = 20,\n        Modified = 30,\n        Deleted = 40\n    }\n\n    interface MemberDefinition{\n        name: string;\n        type: any;\n        dataType: any;\n        elementType: any;\n        originalType: any;\n        kind: string;\n        classMember: boolean;\n        set: (value:any) => void;\n        get: () => any;\n        value: any;\n        initialValue: any;\n        method: Function;\n        enumerable: boolean;\n        configurable: boolean;\n        key: boolean;\n        computed: boolean;\n        storeOnObject: boolean;\n        monitorChanges: boolean;\n    }\n\n    interface Event{\n        attach(eventHandler: (sender: any, event: any) => void ): void;\n        detach(eventHandler: () => void ): void;\n        fire(e: any, sender: any): void;\n    }\n\n    class Base<T>{\n        constructor();\n        getType: () => typeof Base;\n\n        static addProperty(name:string, getterOrType:string | Function, setterOrGetter?:Function, setter?:Function): void;\n        static addMember(name:string, definition:any, isClassMember?:boolean): void;\n        static describeField(name:string, definition:any): void;\n\n        static hasMetadata(key:string, property?:string): boolean;\n        static getAllMetadata(property?:string): any;\n        static getMetadata(key:string, property?:string): any;\n        static setMetadata(key:string, value:any, property?:string): void;\n    }\n\n    class Enum extends Base<Enum>{\n        static extend(name:string, instanceDefinition:any, classDefinition?:any): Base<Enum>;\n    }\n    function createEnum(name:string, enumType:any, enumDefinition?:any): Base<Enum>;\n\n    class Entity extends Base<Entity>{\n        static extend(name:string, instanceDefinition:any, classDefinition?:any): Base<Entity>;\n\n        entityState: EntityState;\n        changedProperties: MemberDefinition[];\n\n        propertyChanging: Event;\n        propertyChanged: Event;\n        propertyValidationError: Event;\n        isValid: boolean;\n    }\n\n    class EntitySet<Ttype extends typeof Entity, T extends Entity> extends Queryable<T>{\n        add(item: T): T;\n        add(initData: {}): T;\n        attach(item: T): void;\n        attach(item: {}): void;\n        attachOrGet(item: T): T;\n        attachOrGet(item: {}): T;\n        detach(item: T): void;\n        detach(item: {}): void;\n        remove(item: T): void;\n        remove(item: {}): void;\n        elementType: Ttype;\n    }\n\n    class EntityContext extends Base<EntityContext>{\n        constructor(config?: any);\n        onReady(): Promise<EntityContext>;\n        saveChanges(): Promise<number>;\n        stateManager: {reset: Function};\n        static extend(name:string, instanceDefinition:any, classDefinition?:any): Base<EntityContext>;\n    }\n\n    class Queryable<T extends Entity | Edm.Primitive>{\n        filter(predicate: (it: T) => boolean, thisArg?: any): Queryable<T>;\n        filter(predicate: string, thisArg?: any): Queryable<T>;\n        map(projection: (it: T) => any): Queryable<any>;\n        map(projection: string): Queryable<any>;\n        orderBy(predicate: (it: T) => void): Queryable<T>;\n        orderBy(predicate: string): Queryable<T>;\n        orderByDescending(predicate: (it: T) => void): Queryable<T>;\n        orderByDescending(predicate: string): Queryable<T>;\n        include(selector: string): Queryable<T>;\n        skip(amount: number): Queryable<T>;\n        take(amount: number): Queryable<T>;\n        forEach(handler: (it: T) => void): Promise<T>;\n        length(): Promise<number>;\n        toArray(): Promise<T[]>;\n        single(predicate: (it: T) => boolean, params?: any): Promise<T>;\n        single(predicate: string, params?: any): Promise<T>;\n        first(predicate?: (it: T) => boolean, params?: any): Promise<T>;\n        first(predicate?: string, params?: any): Promise<T>;\n        removeAll(): Promise<number>;\n        count(): Promise<number>;\n    }\n    class ServiceAction{}\n    class ServiceFunction{}\n\n    function implementation(name:string): typeof Base;\n}\nexport {$data as $data}\n\ndeclare type JSDate = Date;\n\ndeclare module Edm {\n    type Boolean = boolean;\n    type Binary = Uint8Array;\n    type DateTime = JSDate;\n    type DateTimeOffset = JSDate;\n    type Duration = string;\n    type TimeOfDay = string;\n    type Date = string;\n    type Time = string;\n    type Decimal = string;\n    type Single = number;\n    type Float = number;\n    type Double = number;\n    type Guid = string;\n    type Int16 = number;\n    type Int32 = number;\n    type Int64 = string;\n    type Byte = number;\n    type SByte = number;\n    type String = string;\n    type GeographyPoint = $data.Geography;\n    type GeographyLineString = $data.GeographyLineString;\n    type GeographyPolygon = $data.GeographyPolygon;\n    type GeographyMultiPoint = $data.GeographyMultiPoint;\n    type GeographyMultiPolygon = $data.GeographyMultiPolygon;\n    type GeographyMultiLineString = $data.GeographyMultiLineString;\n    type GeographyCollection = $data.GeographyCollection;\n    type GeometryPoint = $data.Geometry;\n    type GeometryLineString = $data.GeometryLineString;\n    type GeometryPolygon = $data.GeometryPolygon;\n    type GeometryMultiPoint = $data.GeometryMultiPoint;\n    type GeometryMultiPolygon = $data.GeometryMultiPolygon;\n    type GeometryMultiLineString = $data.GeometryMultiLineString;\n    type GeometryCollection = $data.GeometryCollection;\n    type Primitive =\n        Boolean | Binary | Guid | DateTime | DateTimeOffset | Duration | TimeOfDay | Date | Time |\n        Decimal | Single | Float | Double | Int16 | Int32 | Int64 | Byte | SByte | String |\n        GeographyPoint | GeographyLineString | GeographyPolygon | GeographyMultiPoint | GeographyMultiLineString | GeographyMultiPolygon | GeographyCollection |\n        GeometryPoint | GeometryLineString | GeometryPolygon | GeometryMultiPoint | GeometryMultiLineString | GeometryMultiPolygon | GeometryCollection;\n}\nexport {Edm as Edm}\n\ndeclare module JayData.Test.CommonItems.Entities {\n\n    export class TestItemType extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Int32; blob?: Edm.Binary; b0?: Edm.Boolean; b1?: Edm.Byte; d0?: Edm.DateTimeOffset; de0?: Edm.Decimal; n0?: Edm.Double; si0?: Edm.Single; g0?: Edm.Guid; i16?: Edm.Int16; i0?: Edm.Int32; i64?: Edm.Int64; s0?: Edm.String });\n\n        Id: Edm.Int32;\n        blob: Edm.Binary;\n        b0: Edm.Boolean;\n        b1: Edm.Byte;\n        d0: Edm.DateTimeOffset;\n        de0: Edm.Decimal;\n        n0: Edm.Double;\n        si0: Edm.Single;\n        g0: Edm.Guid;\n        i16: Edm.Int16;\n        i0: Edm.Int32;\n        i64: Edm.Int64;\n        s0: Edm.String;\n    }\n\n    export class TestItemGroup extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Guid; Name?: Edm.String; Items?: JayData.Test.CommonItems.Entities.TestItemGuid[] });\n\n        Id: Edm.Guid;\n        Name: Edm.String;\n        Items: JayData.Test.CommonItems.Entities.TestItemGuid[];\n    }\n\n    export class TestItemGuid extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Guid; i0?: Edm.Int32; b0?: Edm.Boolean; s0?: Edm.String; time?: Edm.TimeOfDay; date?: Edm.Date; t?: Edm.DateTimeOffset; dur?: Edm.Duration; dtOffset?: Edm.DateTimeOffset; lng?: Edm.Int64; dec?: Edm.Decimal; flt?: Edm.Single; emails?: Edm.String[]; Group?: JayData.Test.CommonItems.Entities.TestItemGroup });\n\n        Id: Edm.Guid;\n        i0: Edm.Int32;\n        b0: Edm.Boolean;\n        s0: Edm.String;\n        time: Edm.TimeOfDay;\n        date: Edm.Date;\n        t: Edm.DateTimeOffset;\n        dur: Edm.Duration;\n        dtOffset: Edm.DateTimeOffset;\n        lng: Edm.Int64;\n        dec: Edm.Decimal;\n        flt: Edm.Single;\n        emails: Edm.String[];\n        Group: JayData.Test.CommonItems.Entities.TestItemGroup;\n    }\n\n    export class TagConnection extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Int32; Article?: JayData.Test.CommonItems.Entities.Article; Tag?: JayData.Test.CommonItems.Entities.Tag });\n\n        Id: Edm.Int32;\n        Article: JayData.Test.CommonItems.Entities.Article;\n        Tag: JayData.Test.CommonItems.Entities.Tag;\n    }\n\n    export class TestItem extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Int32; i0?: Edm.Int32; b0?: Edm.Boolean; s0?: Edm.String; blob?: Edm.Byte[]; n0?: Edm.Double; d0?: Edm.DateTimeOffset; g0?: Edm.Guid; l0?: Edm.Int64; de0?: Edm.Decimal; b1?: Edm.Byte; Tags?: JayData.Test.CommonItems.Entities.Tag[]; User?: JayData.Test.CommonItems.Entities.User });\n\n        Id: Edm.Int32;\n        i0: Edm.Int32;\n        b0: Edm.Boolean;\n        s0: Edm.String;\n        blob: Edm.Byte[];\n        n0: Edm.Double;\n        d0: Edm.DateTimeOffset;\n        g0: Edm.Guid;\n        l0: Edm.Int64;\n        de0: Edm.Decimal;\n        b1: Edm.Byte;\n        Tags: JayData.Test.CommonItems.Entities.Tag[];\n        User: JayData.Test.CommonItems.Entities.User;\n    }\n\n    export class Tag extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Int32; Title?: Edm.String; Articles?: JayData.Test.CommonItems.Entities.TagConnection[] });\n\n        Id: Edm.Int32;\n        Title: Edm.String;\n        Articles: JayData.Test.CommonItems.Entities.TagConnection[];\n    }\n\n    export class Category extends JayData.Test.CommonItems.Entities.MyTClass {\n        constructor();\n        constructor(initData: { RowVersion?: Edm.Binary; Subtitle?: Edm.String; Description?: Edm.String; Articles?: JayData.Test.CommonItems.Entities.Article[]; GetFirstArticleTitle?: $data.ServiceAction; LocationSwipe?: $data.ServiceFunction });\n\n        RowVersion: Edm.Binary;\n        Subtitle: Edm.String;\n        Description: Edm.String;\n        Articles: JayData.Test.CommonItems.Entities.Article[];\n        GetFirstArticleTitle: { (contains: Edm.String): Promise<Edm.String>; };\n        LocationSwipe: { (Loc: Edm.GeographyPoint): Promise<Edm.GeographyPoint>; };\n    }\n\n    export class UserProfile extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Int32; FullName?: Edm.String; Bio?: Edm.String; Avatar?: Edm.Binary; Birthday?: Edm.DateTimeOffset; Location?: JayData.Test.CommonItems.Entities.Location; User?: JayData.Test.CommonItems.Entities.User });\n\n        Id: Edm.Int32;\n        FullName: Edm.String;\n        Bio: Edm.String;\n        Avatar: Edm.Binary;\n        Birthday: Edm.DateTimeOffset;\n        Location: JayData.Test.CommonItems.Entities.Location;\n        User: JayData.Test.CommonItems.Entities.User;\n    }\n\n    export class Article extends JayData.Test.CommonItems.Entities.MyTClass {\n        constructor();\n        constructor(initData: { RowVersion?: Edm.Binary; Lead?: Edm.String; Body?: Edm.String; CreateDate?: Edm.DateTimeOffset; Thumbnail_LowRes?: Edm.Binary; Thumbnail_HighRes?: Edm.Binary; Category?: JayData.Test.CommonItems.Entities.Category; Tags?: JayData.Test.CommonItems.Entities.TagConnection[]; Author?: JayData.Test.CommonItems.Entities.User; Reviewer?: JayData.Test.CommonItems.Entities.User });\n\n        RowVersion: Edm.Binary;\n        Lead: Edm.String;\n        Body: Edm.String;\n        CreateDate: Edm.DateTimeOffset;\n        Thumbnail_LowRes: Edm.Binary;\n        Thumbnail_HighRes: Edm.Binary;\n        Category: JayData.Test.CommonItems.Entities.Category;\n        Tags: JayData.Test.CommonItems.Entities.TagConnection[];\n        Author: JayData.Test.CommonItems.Entities.User;\n        Reviewer: JayData.Test.CommonItems.Entities.User;\n    }\n\n    export class MyTClass extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Int32; Title?: Edm.String });\n\n        Id: Edm.Int32;\n        Title: Edm.String;\n    }\n\n    export class User extends $data.Entity {\n        constructor();\n        constructor(initData: { Id?: Edm.Int32; LoginName?: Edm.String; Email?: Edm.String; UserType?: JayData.Test.CommonItems.Entities.UserType; Articles?: JayData.Test.CommonItems.Entities.Article[]; Profile?: JayData.Test.CommonItems.Entities.UserProfile });\n\n        Id: Edm.Int32;\n        LoginName: Edm.String;\n        Email: Edm.String;\n        UserType: JayData.Test.CommonItems.Entities.UserType;\n        Articles: JayData.Test.CommonItems.Entities.Article[];\n        Profile: JayData.Test.CommonItems.Entities.UserProfile;\n    }\n\n    export class Location extends $data.Entity {\n        constructor();\n        constructor(initData: { Address?: Edm.String; City?: Edm.String; Zip?: Edm.Int32; Country?: Edm.String });\n\n        Address: Edm.String;\n        City: Edm.String;\n        Zip: Edm.Int32;\n        Country: Edm.String;\n    }\n\n    export enum UserType {\n        Admin,\n        Customer,\n        Guest,\n    }\n\n}\n\ndeclare module almafa {\n\n    export class Container extends $data.EntityContext {\n        onReady(): Promise<Container>;\n\n        Users: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.User, JayData.Test.CommonItems.Entities.User>;\n        Articles: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.Article, JayData.Test.CommonItems.Entities.Article>;\n        UserProfiles: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.UserProfile, JayData.Test.CommonItems.Entities.UserProfile>;\n        Categories: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.Category, JayData.Test.CommonItems.Entities.Category>;\n        Tags: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.Tag, JayData.Test.CommonItems.Entities.Tag>;\n        TestTable: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.TestItem, JayData.Test.CommonItems.Entities.TestItem>;\n        TagConnections: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.TagConnection, JayData.Test.CommonItems.Entities.TagConnection>;\n        TestTable2: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.TestItemGuid, JayData.Test.CommonItems.Entities.TestItemGuid>;\n        TestItemGroups: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.TestItemGroup, JayData.Test.CommonItems.Entities.TestItemGroup>;\n        TestItemTypes: $data.EntitySet<typeof JayData.Test.CommonItems.Entities.TestItemType, JayData.Test.CommonItems.Entities.TestItemType>;\n        SAction1: { (number1: Edm.Int32): Promise<Edm.String>; };\n        SAction2: { (count: Edm.Int32): $data.Queryable<JayData.Test.CommonItems.Entities.Article>; };\n        SFunction1: { (number2: Edm.Int32): $data.Queryable<Edm.String>; };\n        SFunction2: { (number3: Edm.Int32): Promise<Edm.String>; };\n    }\n\n}\n\nexport {JayData as JayData}\n\nexport {almafa as almafa}\n\nexport var type: typeof almafa.Container;\nexport var factory: (config:any) => almafa.Container;\nexport var myContext: almafa.Container;"
}