Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
K
koishi-entities
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
3rdeye
koishi-entities
Commits
f0aa8206
Commit
f0aa8206
authored
Mar 29, 2022
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix multi extend
parent
0419269e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
69 additions
and
1 deletion
+69
-1
src/register.ts
src/register.ts
+1
-1
tests/sample.spec.ts
tests/sample.spec.ts
+4
-0
tests/user-mixin.spec.ts
tests/user-mixin.spec.ts
+64
-0
No files found.
src/register.ts
View file @
f0aa8206
...
...
@@ -168,5 +168,5 @@ export function registerModel(
throw
new
Error
(
`Model of
${
cls
.
name
}
is not defined`
);
}
ctx
.
model
.
extend
(
tableName
,
...
registrar
.
getModelResult
());
ctx
.
model
.
config
[
tableName
].
internal
=
registrar
.
getInternal
(
);
Object
.
assign
(
ctx
.
model
.
config
[
tableName
].
internal
,
registrar
.
getInternal
()
);
}
tests/sample.spec.ts
View file @
f0aa8206
...
...
@@ -78,6 +78,8 @@ describe('Model test', () => {
expect
(
dress
.
primary
[
0
]).
toBe
(
'
id
'
);
expect
(
dress
.
unique
[
0
][
0
]).
toBe
(
'
name
'
);
expect
(
dress
.
foreign
.
parentId
).
toStrictEqual
([
'
dress
'
,
'
id
'
]);
expect
(
dress
.
internal
[
''
]).
toEqual
(
Dress
.
prototype
);
expect
(
dress
.
internal
[
'
properties.
'
]).
toEqual
(
DressProperty
.
prototype
);
});
it
(
'
should make class instance
'
,
async
()
=>
{
...
...
@@ -92,8 +94,10 @@ describe('Model test', () => {
},
]);
const
[
dress
]
=
await
app
.
database
.
get
(
'
dress
'
,
{
id
:
777
});
expect
(
dress
).
toBeInstanceOf
(
Dress
);
expect
(
dress
.
id
).
toBe
(
777
);
expect
(
dress
.
getName
()).
toBe
(
'
Dress of Shigma
'
);
expect
(
dress
.
properties
).
toBeInstanceOf
(
DressProperty
);
expect
(
dress
.
properties
.
getProperty
()).
toBe
(
'
red 10
'
);
});
});
tests/user-mixin.spec.ts
0 → 100644
View file @
f0aa8206
import
{
ChildModel
,
DefineModel
,
ModelField
}
from
'
../src/decorators
'
;
import
{
App
}
from
'
koishi
'
;
import
{
registerModel
}
from
'
../src/register
'
;
import
MemoryDatabase
from
'
@koishijs/plugin-database-memory
'
;
declare
module
'
koishi
'
{
// eslint-disable-next-line @typescript-eslint/no-empty-interface
interface
User
{
dress
:
Dress
;
shirt
:
Shirt
;
}
}
class
Dress
{
@
ModelField
(
'
string(8)
'
)
color
:
string
;
@
ModelField
(
'
integer(7)
'
)
size
:
string
;
}
class
Shirt
{
@
ModelField
(
'
string(8)
'
)
color
:
string
;
@
ModelField
(
'
integer(7)
'
)
size
:
string
;
}
@
DefineModel
(
'
user
'
)
class
UserMixin1
{
@
ChildModel
()
dress
:
Dress
;
}
@
DefineModel
(
'
user
'
)
class
UserMixin2
{
@
ChildModel
()
shirt
:
Shirt
;
}
describe
(
'
Model test
'
,
()
=>
{
let
app
:
App
;
beforeEach
(
async
()
=>
{
app
=
new
App
();
app
.
plugin
(
MemoryDatabase
);
await
app
.
start
();
});
it
(
'
should register model fields
'
,
()
=>
{
registerModel
(
app
,
UserMixin1
);
registerModel
(
app
,
UserMixin2
);
const
{
user
}
=
app
.
model
.
config
;
expect
(
user
.
fields
[
'
dress.color
'
].
type
).
toBe
(
'
string
'
);
expect
(
user
.
fields
[
'
dress.size
'
].
type
).
toBe
(
'
integer
'
);
expect
(
user
.
fields
[
'
dress.color
'
].
length
).
toBe
(
8
);
expect
(
user
.
fields
[
'
dress.size
'
].
length
).
toBe
(
7
);
expect
(
user
.
fields
[
'
shirt.color
'
].
type
).
toBe
(
'
string
'
);
expect
(
user
.
fields
[
'
shirt.size
'
].
type
).
toBe
(
'
integer
'
);
expect
(
user
.
fields
[
'
shirt.color
'
].
length
).
toBe
(
8
);
expect
(
user
.
fields
[
'
shirt.size
'
].
length
).
toBe
(
7
);
expect
(
user
.
internal
[
'
dress.
'
]).
toEqual
(
Dress
.
prototype
);
expect
(
user
.
internal
[
'
shirt.
'
]).
toEqual
(
Shirt
.
prototype
);
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment