odata-v4-server
Version:
OData V4 Server
1,220 lines (1,017 loc) • 30.6 kB
text/typescript
/// <reference types="mocha" />
import { ODataController, ODataServer, ODataProcessor, Edm, odata, ODataStream, createODataServer, ODataQuery } from "../lib/index";
import { createFilter } from "odata-v4-mongodb";
import { PassThrough } from "stream";
import { ObjectID } from "mongodb";
import * as fs from "fs";
import * as path from "path";
const { expect } = require("chai");
const beautify = require("xml-beautifier");
const serverCache = [];
if (typeof after == "function"){
after(function(){
serverCache.forEach(server => server.close());
});
}
const toObjectID = _id => _id && !(_id instanceof ObjectID) ? ObjectID.createFromHexString(_id) : _id;
let schemaJson = {
version: "4.0",
dataServices: {
schema: [{
namespace: "SchemJsonTest",
entityType: [{
name: "Index",
key: [{
propertyRef: [{
name: "id"
}]
}],
property: [{
name: "id",
type: "Edm.Int64",
nullable: false
}]
}],
entityContainer: {
name: "SchemJsonTestContext",
entitySet: [{
name: "SchemJsonTest",
entityType: "SchemJsonTest.Index"
}]
}
}]
}
};
let defineEntities = {
namespace: 'Default',
containerName: 'Container',
entities: [
{
name: 'Kitten',
collectionName: 'Kittens',
keys: ['Id'],
computedKey: true,
properties: {
Id: 'Edm.String',
Name: 'Edm.String',
Age: 'Edm.Int32',
Lives: 'Edm.Int32',
Owner: 'Edm.String'
},
annotations:[
{ name: 'UI.DisplayName', value: 'Meww' },
{ property: 'Id', name: 'UI.ReadOnly', value: 'true' },
{ property: 'Title', name: 'UI.DisplayName', value: 'Meww Meww' },
]
}
]
};
export enum Genre {
Unknown,
Pop,
Rock,
Metal,
Classic
}
Edm.Annotate({
term: "foo",
string: "bar"
})(Genre)
Edm.Annotate({
term: "foo",
string: "bar"
})(Genre, "Rock")
.OpenType
class Index {
.Int64
id: number
}
.namespace("Media")
.Annotate({
term: "UI.DisplayName",
string: "Media"
})
.MediaEntity("audio/mp3")
export class Media extends PassThrough {
.Key
.Computed
.Int32
Id: number
.Key
.String
StringId: String
.EntityType(Edm.ForwardRef(() => Meta))
.Partner("MediaList")
Meta: Meta
}
export class CompoundKey {
.Decimal
.Key
bc0: number
.Binary
.Key
bc1: number
.Boolean
.Key
bc2: boolean
.Byte
.Key
bc3: number
.Guid
.Key
bc4: string
.Double
.Key
bc5: number
}
export class BaseComplex {
.String
bc0: string
.EnumType(Genre)
Genre: Genre
}
export class SubComplex extends BaseComplex {
.String
sc0: string
}
export class Complex extends SubComplex {
.String
c0: string
}
.String
export class SimpleObjectID extends ObjectID{
static "@odata.type" = "Simple.ObjectID"
}
export class SimpleEntity {
.Key
.Computed
.TypeDefinition(SimpleObjectID)
MongoId: SimpleObjectID
}
.String
export class MyType {
static "@odata.type" = "Server.MyType"
}
export enum Color {
Red,
Green,
Blue,
"@odata.type" = <any>"Color2"
}
export class BaseMeta {
.Key
.Computed
.TypeDefinition(ObjectID)
.Deserialize(toObjectID)
MongoId: ObjectID
.String
b0: string
constructor() {
this.b0 = 'b0';
}
}
.namespace("Meta")
export class Meta extends BaseMeta {
.Key
.Computed
.Required
.Int32
.Annotate({
term: "UI.DisplayName",
string: "Identifier"
},
{
term: "UI.ControlHint",
string: "ReadOnly"
})
Id: number
.TypeDefinition(ObjectID)
MongoId: ObjectID
.TypeDefinition(MyType)
myType: MyType
.Binary
.Nullable
p0: number
.Boolean
p1: boolean
.Byte
p2: number
.Date
p3: Date
.DateTimeOffset
p4: number
.Decimal
.Precision(13)
.Scale(2)
p5: number
.Double
p6: number
.Duration
p7: number
.Guid
.ConcurrencyMode("custom")
p8: string
.Int16
.Key
p9: number
.Int32
.Key
p10: number
.Int64
.DefaultValue(256)
p11: number
.SByte
p12: number
.Single
p13: number
.Stream("test")
p14: ODataStream
.String
.ForeignKey('c0')
.Unicode
p15: string
.TimeOfDay
p16: number
.Geography
p17: any
.GeographyPoint
p18: any
.GeographyLineString
p19: any
.GeographyPolygon
p20: any
.GeographyMultiPoint
p21: any
.GeographyMultiLineString
p22: any
.GeographyMultiPolygon
p23: any
.GeographyCollection
p24: any
.Geometry
p25: any
.GeometryPoint
.SRID(123)
p26: any
.GeometryLineString
p27: any
.GeometryPolygon
p28: any
.GeometryMultiPoint
p29: any
.GeometryMultiLineString
p30: any
.GeometryMultiPolygon
p31: any
.GeometryCollection
p32: any
.Collection(Edm.Binary)
.Nullable
p33: number[]
.Collection(Edm.Boolean)
p34: boolean[]
.Collection(Edm.Byte)
p35: number[]
.Collection(Edm.Date)
p36: Date[]
.Collection(Edm.DateTimeOffset)
p37: number[]
.Collection(Edm.Decimal)
p38: number[]
.Collection(Edm.Double)
p39: number[]
.Collection(Edm.Duration)
p40: number[]
.Collection(Edm.Guid)
p41: string[]
.Collection(Edm.Int16)
p42: number[]
.Collection(Edm.Int32)
p43: number[]
.Collection(Edm.Int64)
p44: number[]
.Collection(Edm.SByte)
p45: number[]
.Collection(Edm.Single)
p46: number[]
.Collection(Edm.Stream("test"))
p47: ODataStream[]
.Collection(Edm.String)
p48: string[]
.Collection(Edm.TimeOfDay)
p49: number[]
.Collection(Edm.Geography)
p50: any[]
.Collection(Edm.GeographyPoint)
p51: any[]
.Collection(Edm.GeographyLineString)
p52: any[]
.Collection(Edm.GeographyPolygon)
p53: any[]
.Collection(Edm.GeographyMultiPoint)
p54: any[]
.Collection(Edm.GeographyMultiLineString)
p55: any[]
.Collection(Edm.GeographyMultiPolygon)
p56: any[]
.Collection(Edm.GeographyCollection)
p57: any[]
.Collection(Edm.Geometry)
p58: any[]
.Collection(Edm.GeometryPoint)
p59: any[]
.Collection(Edm.GeometryLineString)
p60: any[]
.Collection(Edm.GeometryPolygon)
p61: any[]
.Collection(Edm.GeometryMultiPoint)
p62: any[]
.Collection(Edm.GeometryMultiLineString)
p63: any[]
.Collection(Edm.GeometryMultiPolygon)
p64: any[]
.Collection(Edm.GeometryCollection)
p65: any[]
.Stream
p66: ODataStream
// TODO: not implemented
// @Edm.Collection(Edm.Collection(Edm.String))
// p67: string[][]
.ComplexType(Edm.ForwardRef(() => Complex))
Complex: Complex
.Collection(Edm.ComplexType(Edm.ForwardRef(() => Complex)))
ComplexList: Complex[]
.Action
a0() { }
.namespace("Functions")
.Function(Edm.String)
f0() {
return "f";
}
.namespace("Functions")
.Function(Edm.String)
f2( .String message) {
return message;
}
.Collection(Edm.EntityType(Media))
.Partner("Meta")
MediaList: Media[]
.EnumType(Genre)
Genre: Genre
.EnumType(Color)
Color: Color
}
export class TestEntity {
.Int32
.Key
.Required
test: number
.EnumType(Genre)
Genre: Genre
}
export class EmptyEntity {
.Action
enumTypeAction( .EnumType(Genre) value: Genre, .type type: any) {
// console.log(type, value);
}
.Function(Edm.EnumType(Genre))
enumTypeFunction( .EnumType(Genre) value: Genre, .type type: any) {
return value;
}
}
export class EmptyEntity2 {
}
export class EmptyEntity3 {
}
export class EmptyEntity4 {
}
export class EmptyEntity5 {
}
export class EmptyEntity6 {
}
export class EmptyEntity7 {
}
export class HiddenEmptyEntity {
}
export class TestContainerBase extends Edm.ContainerBase {
Test2 = TestEntity
}
export enum FuncEnum {
Default = 42
}
export enum FuncEnum2 {
Default = 13
}
export enum FuncEnum3 {
ActionEnumMemberName = 42
}
export enum FuncEnum4 {
FunctionEnumMemberName = 42
}
export class Foobar {
toString() {
return "foobar";
}
}
export class TestContainer extends TestContainerBase {
.Flags
.Int64
.URLSerialize((value: Genre) => `EnumSchema.Genre2'${value || 0}'`)
.Serialize(value => `EnumSchema.Genre2'${value || 0}'`)
.namespace("EnumSchema")
Genre2 = Genre
.String
.URLSerialize((value: ObjectID) => `'${value.toHexString()}'`)
.URLDeserialize((value: string) => new ObjectID(value))
.Deserialize(value => new ObjectID(value))
ObjectID2 = ObjectID
.Int64
.namespace("FuncEnumSchema")
FuncEnum = FuncEnum
.Int64
.namespace("FuncEnumSchema")
FuncEnum2 = FuncEnum2
.Int64
.namespace("FuncEnumSchema")
FuncEnum3 = FuncEnum3
.Int64
.namespace("FuncEnumSchema")
FuncEnum4 = FuncEnum4
.String
"Foo.Bar" = Foobar
}
.namespace("Container")
export class TypeDefContainer extends Edm.ContainerBase {
.String
.URLSerialize((value: ObjectID) => `'${value.toHexString()}'`)
.URLDeserialize((value: string) => new ObjectID(value))
.Deserialize(value => new ObjectID(value))
'Object.ID2' = ObjectID
}
.namespace("Container")
export class EnumContainer {
.Flags
.Int64
.URLSerialize((value: Genre) => `Server.Genre2'${value || 0}'`)
.Serialize(value => `Server.Genre2'${value || 0}'`)
'Server.Genre2' = Genre
}
.namespace("Controller")
.type(BaseMeta)
// @odata.type(Meta)
export class MetaController extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
return [
{ MongoId: new ObjectID('5968aad95eb7eb3a94a264f7'), b0: "basemeta", "@odata.type": BaseMeta },
{ Id: 1, p0: 1, p1: true, p9: 9, p10: 10, MongoId: new ObjectID('5968aad95eb7eb3a94a264f6'), "@odata.type": Meta }
];
}
.method("GET")
findOneByKeys( .query query:ODataQuery, .key('Id') key1: number, .key('p10') key2: number, .key('p9') key3: number, .key('MongoId') key4: string) {
let meta = new Meta();
meta.Id = key1;
meta.p9 = key3;
meta.p10 = key2;
meta.MongoId = new ObjectID(key4);
return meta;
}
.POST
insert( .body body: Meta ) {
return body;
}
.GET("MediaList")
getMedia( .result result: Meta) {
let media = new Media();
media.Id = 1;
media.StringId = 'two';
return [media];
}
.GET("MediaList")
getMediaByKey( .key('Id') key1: number, .key('StringId') key2: string, .result result: Meta) {
let media = new Media();
media.Id = key1;
media.StringId = key2;
return media;
}
.GET("MediaList").$ref
getMediaRef( .link('Id') link1: number, .link('StringId') link2: number, .key('MongoId') k1: string, .key('p9') k2: number, .key('p10') k3: number, .key('Id') k4: number, .result result: any) {
let meta = new Meta();
meta.Id = k4;
meta.p9 = k2;
meta.p10 = k3;
meta.MongoId = new ObjectID(k1);
return meta;
}
.Action
ControllerAction() {
// console.log('ControllerAction');
}
.namespace("Functions")
.Function(Edm.String)
ControllerFunction( .String str: string) {
return str;
}
.Function(Edm.EntityType(BaseMeta))
useOdataType( .type type: any) {
return [
{ MongoId: new ObjectID('5968aad95eb7eb3a94a264f7'), b0: "basemeta", "@odata.type": BaseMeta },
{ Id: 1, p0: 1, p1: true, p9: 9, p10: 10, MongoId: new ObjectID('5968aad95eb7eb3a94a264f6'), "@odata.type": Meta },
type.namespace
];
}
}
.namespace("Controller")
.type(Media)
export class MediaController extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
let media = new Media();
media.Id = 1;
media.StringId = 'two';
return [media];
}
.GET()
findOne( .key('Id') key1: number, .key('StringId') key2: string) {
let media = new Media();
media.Id = key1;
media.StringId = key2;
return media;
}
.Action
ControllerAction( .Int32 value: number) {
value += 1;
}
.namespace("Functions")
.Function()
.String
ControllerFunction() {
return 'ControllerFunction';
}
}
.namespace("Controller")
.type(CompoundKey)
export class CompoundKeyController extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
let ck = new CompoundKey();
ck.bc0 = 1;
ck.bc1 = 2;
ck.bc2 = true;
ck.bc3 = 4;
ck.bc4 = '5';
ck.bc5 = 6;
return [ck];
}
.method("GET")
findOneByKeys( .key('bc0') key1: number, .key('bc1') key2: number, .key('bc2') key3: boolean, .key('bc3') key4: number, .key('bc4') key5: string, .key('bc5') key6: number) {
let ck = new CompoundKey();
ck.bc0 = key1;
ck.bc1 = key2;
ck.bc2 = key3;
ck.bc3 = key4;
ck.bc4 = key5;
ck.bc5 = key6;
return ck;
}
}
.namespace("Controller")
.type(TestEntity)
export class BaseTestEntityController extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
let te = new TestEntity();
te.test = 10;
return [te];
}
.POST
insert( .body body: TestEntity) {
return body;
}
}
.namespace("Controller")
.type(TestEntity)
export class TestEntityController extends BaseTestEntityController {
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor, .filter $filter?:ODataQuery) {
// console.log($filter, createFilter($filter));
let te = new TestEntity();
te.test = 1;
return [te];
}
findOneByKeys( .id id: number) {
let te = new TestEntity();
te.test = id;
return te;
}
}
TestEntityController.on('GET', 'findAll', 'findOneByKeys');
.namespace("Controller")
.type(EmptyEntity)
export class EmptyEntityController extends ODataController {
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
let ee = new EmptyEntity();
return [ee];
}
.Action
emptyEntityAction( .EnumType(Genre) value: Genre, .type type: any) {
// console.log(type, value);
}
.Function(Edm.EnumType(Genre))
emptyEntityFunction( .EnumType(Genre) value: Genre, .type type: any) {
return value;
}
}
EmptyEntityController.on('GET', 'findAll')
.namespace("Controller")
.type(EmptyEntity2)
export class EmptyEntity2Controller extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
return [];
}
}
.namespace("Controller")
.type(EmptyEntity3)
export class EmptyEntity3Controller extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
return 'test';
}
}
.namespace("Controller")
.type(EmptyEntity4)
export class EmptyEntity4Controller extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
return '';
}
}
.namespace("Controller")
.type(EmptyEntity5)
export class EmptyEntity5Controller extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
return true;
}
}
.namespace("Controller")
.type(EmptyEntity6)
export class EmptyEntity6Controller extends ODataController {
.GET
findAll( .context __: any, .result ___: any, .stream ____: ODataProcessor) {
return 42;
}
}
.namespace("Controller")
.type(SimpleEntity)
export class SimpleEntityController extends ODataController {
.GET
findAll( .key key: string) {
let simple = new SimpleEntity()
simple.MongoId = new ObjectID('5968aad95eb7eb6b94a354g7')
return [simple];
}
.GET
find( .key key: string) {
let simple = new SimpleEntity()
simple.MongoId = new ObjectID(key)
return simple;
}
}
.namespace("Controller")
.type(HiddenEmptyEntity)
export class HiddenEmptyController extends ODataController { }
.type(Index)
class SchemaJsonTestController extends ODataController { }
.namespace("SchemaJsonTest")
.controller(SchemaJsonTestController, true)
class SchemaJsonServer extends ODataServer { }
SchemaJsonServer.$metadata(schemaJson);
serverCache.push(SchemaJsonServer.create("/schemaJsonTest", 4004));
class DefineEntitiesServer extends ODataServer{}
DefineEntitiesServer.$metadata(defineEntities);
serverCache.push(DefineEntitiesServer.create("/defineEntitiesTest", 4005));
.Container(TestContainer)
.namespace("Server")
.container("MetadataContainer")
.cors
.controller(MetaController, "Meta")
.controller(MediaController, "Media")
.controller(CompoundKeyController, 'CompoundKey')
.controller(TestEntityController, 'TestEntity')
.controller(EmptyEntityController, 'EmptyEntity')
.controller(EmptyEntity2Controller, 'EmptyEntity2')
.controller(EmptyEntity3Controller, 'EmptyEntity3')
.controller(SimpleEntityController, "SimpleEntity")
export class MetaTestServer extends ODataServer {
.container("ActionImportContainer")
.ActionImport
ActionImport() {
// console.log('Server ActionImport')
}
.ActionImport
ActionImportParams( .Collection(Edm.Int32) value: number[]) {
// console.log(`Server ActionImport ${value.length}`)
}
.namespace("Functions")
.FunctionImport(Edm.String)
FunctionImport(
.String
.Required
message: string,
.Collection(Edm.Int32)
.Required
.Nullable
value: number[]) {
return `Server FunctionImport ${message}`;
}
.namespace("Functions")
.FunctionImport
.String
FunctionImport2(
.String
.Nullable
.Required
message: string) {
return `Server FunctionImport ${message}`;
}
.namespace("Functions")
.FunctionImport(Edm.String)
FunctionImport3(
.String
.MaxLength(8)
.Unicode
message: string,
.Decimal
.Required
.Nullable
.Precision(13)
.Scale(2)
value: number[],
.GeometryPoint
.SRID(1)
geo: any) {
return `Server FunctionImport ${message}`;
}
.TypeDefinition(ObjectID)
.FunctionImport
ObjId( .TypeDefinition(ObjectID) v: ObjectID) {
return v.toHexString();
}
.ActionImport
ServerEnumTypeActionImport( .EnumType(Genre) value: Genre, .type type: any) {
// console.log(type, value);
}
.FunctionImport(Edm.EnumType(Genre))
ServerEnumTypeFunctionImport( .EnumType(Genre) value: Genre, .type type: any) {
// console.log(type, value);
return value;
}
}
.Container(TypeDefContainer)
.cors
.controller(SimpleEntityController, "SimpleEntity")
export class TypeDefServer extends ODataServer {
}
serverCache.push(TypeDefServer.create(4010));
.Container(EnumContainer)
.cors
.controller(SimpleEntityController, "SimpleEntity")
export class EnumServer extends ODataServer {
}
serverCache.push(EnumServer.create(4011));
MetaTestServer.addController(HiddenEmptyController);
MetaTestServer.addController(EmptyEntity4Controller, true);
MetaTestServer.addController(EmptyEntity5Controller, true, EmptyEntity5);
MetaTestServer.addController(EmptyEntity6Controller, 'EmptyEntity6', EmptyEntity6);
MetaTestServer.create();
serverCache.push(MetaTestServer.create(4001));
serverCache.push(MetaTestServer.create('/test', 4002));
serverCache.push(createODataServer(MetaTestServer, "/test", 4003));
.OpenType
export class Executor {
.Action
.String
action() {
return "foobar";
}
.Action(Edm.String)
action2() {
return "foobar";
}
.Function
.ComplexType(Complex)
func(.ComplexType(Complex) complex: Complex) {
return complex.c0;
}
.Function
.EntityType(Meta)
func2(.EntityType(Meta) meta: Meta) {
return meta.b0;
}
}
.type(Executor)
export class ActionFunctionController extends ODataController {
.Action
.String
action() {
return "foobar";
}
.Action(Edm.String)
action2() {
return "foobar";
}
.Function
.String
func(.ComplexType(Complex) complex: Complex) {
return complex.c0;
}
.Function
.String
func2(.EntityType(Meta) meta: Meta) {
return meta.b0;
}
}
export class FuncComplex{}
export class FuncComplex2{}
export class FuncEntity{}
export class FuncEntity2{}
.Container(TestContainer)
.controller(ActionFunctionController, "Execute")
export class ActionFunctionServer extends ODataServer {
.ActionImport
.String
action() {
return "foobar";
}
.ActionImport(Edm.String)
action2() {
return "foobar";
}
.ActionImport
.EnumType(FuncEnum)
action3() {
return FuncEnum.Default;
}
.ActionImport
.ComplexType(FuncComplex)
action4() {
return new FuncComplex();
}
.ActionImport
.EntityType(FuncEntity)
action5() {
return new FuncEntity();
}
.ActionImport
.String
action6(
.EnumType(FuncEnum3)
enumValue:FuncEnum3
) {
return FuncEnum3[enumValue];
}
.FunctionImport
.String
func(.ComplexType(Complex) complex: Complex) {
return complex.c0;
}
.FunctionImport
.String
func2(.EntityType(Meta) meta: Meta) {
return meta.b0;
}
.FunctionImport
.EnumType(FuncEnum2)
func3() {
return FuncEnum2.Default;
}
.FunctionImport
.ComplexType(FuncComplex2)
func4() {
return new FuncComplex2();
}
.FunctionImport
.EntityType(FuncEntity2)
func5() {
return new FuncEntity2();
}
.FunctionImport
.String
func6(
.EnumType(FuncEnum4)
enumValue:FuncEnum4
) {
return FuncEnum4[enumValue];
}
.FunctionImport
.String
func7(
.TypeDefinition(Foobar)
foobar:Foobar
) {
return foobar;
}
}
if (typeof describe == "function") {
describe("Metadata test", () => {
it("should return metadata xml", () => {
expect(beautify(MetaTestServer.$metadata().document())).to.equal(
beautify(fs.readFileSync(path.join(__dirname, "metadata", "$metadata.xml"), "utf8").replace(/" \/>/gi, "\"/>"))
);
});
it("should return SchemaJsonServer metadata xml", () => {
expect(beautify(SchemaJsonServer.$metadata().document())).to.equal(
beautify(fs.readFileSync(path.join(__dirname, "metadata", "$schemajson.xml"), "utf8").replace(/" \/>/gi, "\"/>"))
);
});
it("should return DefineEntitiesServer metadata xml", () => {
expect(beautify(DefineEntitiesServer.$metadata().document())).to.equal(
beautify(fs.readFileSync(path.join(__dirname, "metadata", "$defineentities.xml"), "utf8").replace(/" \/>/gi, "\"/>"))
);
});
it("should return TypeDefServer metadata xml", () => {
expect(beautify(TypeDefServer.$metadata().document())).to.equal(
beautify(fs.readFileSync(path.join(__dirname, "metadata", "$typedefserver.xml"), "utf8").replace(/" \/>/gi, "\"/>"))
);
});
it("should return EnumServer metadata xml", () => {
expect(beautify(EnumServer.$metadata().document())).to.equal(
beautify(fs.readFileSync(path.join(__dirname, "metadata", "$enumserver.xml"), "utf8").replace(/" \/>/gi, "\"/>"))
);
});
it("should return ActionFunctionServer metadata xml", () => {
expect(beautify(ActionFunctionServer.$metadata().document())).to.equal(
beautify(fs.readFileSync(path.join(__dirname, "metadata", "$actionfunction.xml"), "utf8").replace(/" \/>/gi, "\"/>"))
);
});
});
describe("Root", () => {
it("should return root result", () => {
expect(MetaTestServer.document().document()).to.deep.equal({
// "@odata.context": "http://localhost:3001/$metadata",
"@odata.context": undefined,
"value": [
{
"name": "SimpleEntity",
"kind": "EntitySet",
"url": "SimpleEntity"
},
{
"name": "EmptyEntity3",
"kind": "EntitySet",
"url": "EmptyEntity3"
},
{
"name": "EmptyEntity2",
"kind": "EntitySet",
"url": "EmptyEntity2"
},
{
"name": "EmptyEntity",
"kind": "EntitySet",
"url": "EmptyEntity"
},
{
"name": "TestEntity",
"kind": "EntitySet",
"url": "TestEntity"
},
{
"name": "CompoundKey",
"kind": "EntitySet",
"url": "CompoundKey"
},
{
"name": "Media",
"kind": "EntitySet",
"url": "Media"
},
{
"name": "Meta",
"kind": "EntitySet",
"url": "Meta"
},
{
"name": "EmptyEntity4",
"kind": "EntitySet",
"url": "EmptyEntity4"
},
{
"name": "EmptyEntity5",
"kind": "EntitySet",
"url": "EmptyEntity5"
},
{
"name": "EmptyEntity6",
"kind": "EntitySet",
"url": "EmptyEntity6"
}
]
});
});
});
}
process.on("warning", warning => {
console.log(warning.stack);
});