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
f831f1ac
Commit
f831f1ac
authored
Nov 30, 2022
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
workaround for removed prototype thing
parent
e4cd0749
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
76 additions
and
37 deletions
+76
-37
package-lock.json
package-lock.json
+24
-24
package.json
package.json
+3
-3
src/model-workaround.ts
src/model-workaround.ts
+31
-0
src/register.ts
src/register.ts
+14
-8
tests/sample.spec.ts
tests/sample.spec.ts
+4
-2
No files found.
package-lock.json
View file @
f831f1ac
...
@@ -9,12 +9,12 @@
...
@@ -9,12 +9,12 @@
"version"
:
"2.1.1"
,
"version"
:
"2.1.1"
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"dependencies"
:
{
"@minatojs/core"
:
"^
1.3.2
"
,
"@minatojs/core"
:
"^
2.0.1
"
,
"lodash"
:
"^4.17.21"
,
"lodash"
:
"^4.17.21"
,
"typed-reflector"
:
"^1.0.10"
"typed-reflector"
:
"^1.0.10"
},
},
"devDependencies"
:
{
"devDependencies"
:
{
"@minatojs/driver-memory"
:
"^
1.3
.0"
,
"@minatojs/driver-memory"
:
"^
2.0
.0"
,
"@types/jest"
:
"^27.4.1"
,
"@types/jest"
:
"^27.4.1"
,
"@types/lodash"
:
"^4.14.180"
,
"@types/lodash"
:
"^4.14.180"
,
"@types/node"
:
"^17.0.23"
,
"@types/node"
:
"^17.0.23"
,
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
"eslint-config-prettier"
:
"^8.5.0"
,
"eslint-config-prettier"
:
"^8.5.0"
,
"eslint-plugin-prettier"
:
"^3.4.1"
,
"eslint-plugin-prettier"
:
"^3.4.1"
,
"jest"
:
"^27.5.1"
,
"jest"
:
"^27.5.1"
,
"minato"
:
"^
1.3.2
"
,
"minato"
:
"^
2.0.1
"
,
"prettier"
:
"^2.6.1"
,
"prettier"
:
"^2.6.1"
,
"rimraf"
:
"^3.0.2"
,
"rimraf"
:
"^3.0.2"
,
"ts-jest"
:
"^27.1.4"
,
"ts-jest"
:
"^27.1.4"
,
...
@@ -1003,23 +1003,23 @@
...
@@ -1003,23 +1003,23 @@
}
}
},
},
"node_modules/@minatojs/core"
:
{
"node_modules/@minatojs/core"
:
{
"version"
:
"
1.3.2
"
,
"version"
:
"
2.0.1
"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/core/-/core-
1.3.2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/core/-/core-
2.0.1
.tgz"
,
"integrity"
:
"sha512-
hEMzHobEqY8yD3M5lLiUjfsvNV4NTLBZJkKNJ4wTi+zhm4LbDmaJpV0LoUtgzl8v0SE79gBYZGXNhkeMg/cX0
w=="
,
"integrity"
:
"sha512-
li7js0EZGw3PV28VM9B/aBX2QeKwvk32U4Haf4uvq0iBTH7L4JRq4YbOqlO5ZjrExoZS4RHBZtz4wzfW3Ay3j
w=="
,
"dependencies"
:
{
"dependencies"
:
{
"cosmokit"
:
"^1.3.3"
"cosmokit"
:
"^1.3.3"
}
}
},
},
"node_modules/@minatojs/driver-memory"
:
{
"node_modules/@minatojs/driver-memory"
:
{
"version"
:
"
1.3
.0"
,
"version"
:
"
2.0
.0"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/driver-memory/-/driver-memory-
1.3
.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/driver-memory/-/driver-memory-
2.0
.0.tgz"
,
"integrity"
:
"sha512-
yJv22DzUYWbh7N70AKEzqsobs/BIY1VnbvYsccNODBvHlGEND0+rgCMG7vvYkhWdt7HkHM8tu0gKk1VWtO4Hp
g=="
,
"integrity"
:
"sha512-
fxM8nYKDwWqhTWncKAxGJ2HG+GH136kYV6DnI83lRUFetcUIJRlzcT4q8dH6ym8IuD3GIKCVXF67RlvyODpyg
g=="
,
"dev"
:
true
,
"dev"
:
true
,
"dependencies"
:
{
"dependencies"
:
{
"cosmokit"
:
"^1.3.3"
"cosmokit"
:
"^1.3.3"
},
},
"peerDependencies"
:
{
"peerDependencies"
:
{
"@minatojs/core"
:
"^
1.3.2
"
"@minatojs/core"
:
"^
2.0.0
"
}
}
},
},
"node_modules/@nodelib/fs.scandir"
:
{
"node_modules/@nodelib/fs.scandir"
:
{
...
@@ -4027,12 +4027,12 @@
...
@@ -4027,12 +4027,12 @@
}
}
},
},
"node_modules/minato"
:
{
"node_modules/minato"
:
{
"version"
:
"
1.3.2
"
,
"version"
:
"
2.0.1
"
,
"resolved"
:
"https://registry.npmjs.org/minato/-/minato-
1.3.2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/minato/-/minato-
2.0.1
.tgz"
,
"integrity"
:
"sha512-
6dr5p0fOcPzb2Zogl7aIwgv/X/I9EYuSiVBAiTK4dKIyb2HwhHRiI7GrCMDaZJprl0qY+RlyQQ+NVVLR71OB8A
=="
,
"integrity"
:
"sha512-
j/ulChiNyp4eoS1XKavUTsgBSkPoj/d2R3SF27u/195AlnEVewOS/D7iJIEMXNaJIVK9PztNtKaClJGLJ3uNmQ
=="
,
"dev"
:
true
,
"dev"
:
true
,
"dependencies"
:
{
"dependencies"
:
{
"@minatojs/core"
:
"^
1.3.2
"
,
"@minatojs/core"
:
"^
2.0.1
"
,
"ns-require"
:
"^1.1.4"
"ns-require"
:
"^1.1.4"
}
}
},
},
...
@@ -6091,17 +6091,17 @@
...
@@ -6091,17 +6091,17 @@
}
}
},
},
"@minatojs/core"
:
{
"@minatojs/core"
:
{
"version"
:
"
1.3.2
"
,
"version"
:
"
2.0.1
"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/core/-/core-
1.3.2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/core/-/core-
2.0.1
.tgz"
,
"integrity"
:
"sha512-
hEMzHobEqY8yD3M5lLiUjfsvNV4NTLBZJkKNJ4wTi+zhm4LbDmaJpV0LoUtgzl8v0SE79gBYZGXNhkeMg/cX0
w=="
,
"integrity"
:
"sha512-
li7js0EZGw3PV28VM9B/aBX2QeKwvk32U4Haf4uvq0iBTH7L4JRq4YbOqlO5ZjrExoZS4RHBZtz4wzfW3Ay3j
w=="
,
"requires"
:
{
"requires"
:
{
"cosmokit"
:
"^1.3.3"
"cosmokit"
:
"^1.3.3"
}
}
},
},
"@minatojs/driver-memory"
:
{
"@minatojs/driver-memory"
:
{
"version"
:
"
1.3
.0"
,
"version"
:
"
2.0
.0"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/driver-memory/-/driver-memory-
1.3
.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@minatojs/driver-memory/-/driver-memory-
2.0
.0.tgz"
,
"integrity"
:
"sha512-
yJv22DzUYWbh7N70AKEzqsobs/BIY1VnbvYsccNODBvHlGEND0+rgCMG7vvYkhWdt7HkHM8tu0gKk1VWtO4Hp
g=="
,
"integrity"
:
"sha512-
fxM8nYKDwWqhTWncKAxGJ2HG+GH136kYV6DnI83lRUFetcUIJRlzcT4q8dH6ym8IuD3GIKCVXF67RlvyODpyg
g=="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"cosmokit"
:
"^1.3.3"
"cosmokit"
:
"^1.3.3"
...
@@ -8391,12 +8391,12 @@
...
@@ -8391,12 +8391,12 @@
"dev"
:
true
"dev"
:
true
},
},
"minato"
:
{
"minato"
:
{
"version"
:
"
1.3.2
"
,
"version"
:
"
2.0.1
"
,
"resolved"
:
"https://registry.npmjs.org/minato/-/minato-
1.3.2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/minato/-/minato-
2.0.1
.tgz"
,
"integrity"
:
"sha512-
6dr5p0fOcPzb2Zogl7aIwgv/X/I9EYuSiVBAiTK4dKIyb2HwhHRiI7GrCMDaZJprl0qY+RlyQQ+NVVLR71OB8A
=="
,
"integrity"
:
"sha512-
j/ulChiNyp4eoS1XKavUTsgBSkPoj/d2R3SF27u/195AlnEVewOS/D7iJIEMXNaJIVK9PztNtKaClJGLJ3uNmQ
=="
,
"dev"
:
true
,
"dev"
:
true
,
"requires"
:
{
"requires"
:
{
"@minatojs/core"
:
"^
1.3.2
"
,
"@minatojs/core"
:
"^
2.0.1
"
,
"ns-require"
:
"^1.1.4"
"ns-require"
:
"^1.1.4"
}
}
},
},
...
...
package.json
View file @
f831f1ac
...
@@ -39,7 +39,7 @@
...
@@ -39,7 +39,7 @@
"testEnvironment"
:
"node"
"testEnvironment"
:
"node"
},
},
"devDependencies"
:
{
"devDependencies"
:
{
"
@minatojs/driver-memory
"
:
"
^
1.3
.0
"
,
"
@minatojs/driver-memory
"
:
"
^
2.0
.0
"
,
"
@types/jest
"
:
"
^27.4.1
"
,
"
@types/jest
"
:
"
^27.4.1
"
,
"
@types/lodash
"
:
"
^4.14.180
"
,
"
@types/lodash
"
:
"
^4.14.180
"
,
"
@types/node
"
:
"
^17.0.23
"
,
"
@types/node
"
:
"
^17.0.23
"
,
...
@@ -49,14 +49,14 @@
...
@@ -49,14 +49,14 @@
"
eslint-config-prettier
"
:
"
^8.5.0
"
,
"
eslint-config-prettier
"
:
"
^8.5.0
"
,
"
eslint-plugin-prettier
"
:
"
^3.4.1
"
,
"
eslint-plugin-prettier
"
:
"
^3.4.1
"
,
"
jest
"
:
"
^27.5.1
"
,
"
jest
"
:
"
^27.5.1
"
,
"
minato
"
:
"
^
1.3.2
"
,
"
minato
"
:
"
^
2.0.1
"
,
"
prettier
"
:
"
^2.6.1
"
,
"
prettier
"
:
"
^2.6.1
"
,
"
rimraf
"
:
"
^3.0.2
"
,
"
rimraf
"
:
"
^3.0.2
"
,
"
ts-jest
"
:
"
^27.1.4
"
,
"
ts-jest
"
:
"
^27.1.4
"
,
"
typescript
"
:
"
^4.6.3
"
"
typescript
"
:
"
^4.6.3
"
},
},
"dependencies"
:
{
"dependencies"
:
{
"
@minatojs/core
"
:
"
^
1.3.2
"
,
"
@minatojs/core
"
:
"
^
2.0.1
"
,
"
lodash
"
:
"
^4.17.21
"
,
"
lodash
"
:
"
^4.17.21
"
,
"
typed-reflector
"
:
"
^1.0.10
"
"
typed-reflector
"
:
"
^1.0.10
"
}
}
...
...
src/model-workaround.ts
0 → 100644
View file @
f831f1ac
import
{
Model
,
Field
}
from
'
@minatojs/core
'
;
export
type
Internal
<
O
=
any
>
=
{
[
K
in
keyof
O
]?:
O
[
K
]
extends
(...
args
:
any
)
=>
any
?
O
[
K
]
:
never
;
};
declare
module
'
@minatojs/core
'
{
interface
Model
<
S
>
{
internal
:
Internal
<
S
>
;
}
}
// eslint-disable-next-line @typescript-eslint/ban-types
Model
.
prototype
.
parse
=
function
(
this
:
Model
,
source
:
object
)
{
const
result
:
any
=
Object
.
create
(
this
.
internal
?.[
''
]);
for
(
const
key
in
source
)
{
let
node
=
result
;
const
segments
=
key
.
split
(
'
.
'
).
reverse
();
let
prefix
=
''
;
for
(
let
index
=
segments
.
length
-
1
;
index
>
0
;
index
--
)
{
const
segment
=
segments
[
index
];
prefix
+=
segment
+
'
.
'
;
node
=
node
[
segment
]
??
=
Object
.
create
(
this
.
internal
?.[
prefix
]
??
{});
}
if
(
key
in
source
)
{
const
value
=
this
.
resolveValue
(
key
,
source
[
key
]);
node
[
segments
[
0
]]
=
value
;
}
}
return
result
;
};
src/register.ts
View file @
f831f1ac
import
{
Database
,
Field
,
Flatten
,
Keys
,
Model
}
from
'
@minatojs/core
'
;
import
{
Database
,
Field
,
Flatten
,
Keys
,
Model
}
from
'
@minatojs/core
'
;
import
{
ModelClassType
}
from
'
./def
'
;
import
{
ModelClassType
}
from
'
./def
'
;
import
{
reflector
}
from
'
./meta/meta
'
;
import
{
reflector
}
from
'
./meta/meta
'
;
import
'
./model-workaround
'
;
class
TableRegistrar
<
Tables
,
T
=
any
>
{
class
TableRegistrar
<
Tables
,
T
=
any
>
{
constructor
(
private
cls
:
ModelClassType
<
T
>
,
private
prefix
=
''
)
{}
constructor
(
private
cls
:
ModelClassType
<
T
>
,
private
prefix
=
''
)
{}
...
@@ -161,6 +162,13 @@ class TableRegistrar<Tables, T = any> {
...
@@ -161,6 +162,13 @@ class TableRegistrar<Tables, T = any> {
export
class
ModelRegistrar
<
Tables
>
{
export
class
ModelRegistrar
<
Tables
>
{
constructor
(
private
readonly
model
:
Database
<
Tables
>
)
{}
constructor
(
private
readonly
model
:
Database
<
Tables
>
)
{}
private
assignInternal
(
field
:
Model
<
any
>
,
internal
:
any
)
{
if
(
!
field
.
internal
)
{
field
.
internal
=
{
''
:
{}
};
}
Object
.
assign
(
field
.
internal
,
internal
);
}
registerModel
(
cls
:
ModelClassType
<
Flatten
<
Tables
[
Keys
<
Tables
>
]
>>
);
registerModel
(
cls
:
ModelClassType
<
Flatten
<
Tables
[
Keys
<
Tables
>
]
>>
);
registerModel
(
cls
:
ModelClassType
)
{
registerModel
(
cls
:
ModelClassType
)
{
const
registrar
=
new
TableRegistrar
(
cls
);
const
registrar
=
new
TableRegistrar
(
cls
);
...
@@ -171,10 +179,7 @@ export class ModelRegistrar<Tables> {
...
@@ -171,10 +179,7 @@ export class ModelRegistrar<Tables> {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
// @ts-ignore
this
.
model
.
extend
(
tableName
,
...
registrar
.
getModelResult
());
this
.
model
.
extend
(
tableName
,
...
registrar
.
getModelResult
());
Object
.
assign
(
this
.
assignInternal
(
this
.
model
.
tables
[
tableName
],
registrar
.
getInternal
());
this
.
model
.
tables
[
tableName
].
internal
,
registrar
.
getInternal
(),
);
}
}
mixinModel
<
K
extends
Keys
<
Tables
>>
(
mixinModel
<
K
extends
Keys
<
Tables
>>
(
...
@@ -187,10 +192,11 @@ export class ModelRegistrar<Tables> {
...
@@ -187,10 +192,11 @@ export class ModelRegistrar<Tables> {
const
key
=
_key
as
Keys
<
Tables
[
K
]
>
;
const
key
=
_key
as
Keys
<
Tables
[
K
]
>
;
const
cls
=
classDict
[
key
];
const
cls
=
classDict
[
key
];
const
registrar
=
new
TableRegistrar
<
any
>
(
cls
,
key
+
'
.
'
);
const
registrar
=
new
TableRegistrar
<
any
>
(
cls
,
key
+
'
.
'
);
const
result
=
registrar
.
getModelResult
();
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
this
.
model
.
extend
(
tableName
,
...
result
);
// @ts-ignore
Object
.
assign
(
this
.
model
.
extend
(
tableName
,
...
registrar
.
getModelResult
());
this
.
model
.
tables
[
tableName
].
internal
,
this
.
assignInternal
(
this
.
model
.
tables
[
tableName
],
registrar
.
getInternal
(),
registrar
.
getInternal
(),
);
);
}
}
...
...
tests/sample.spec.ts
View file @
f831f1ac
...
@@ -69,8 +69,8 @@ describe('Model test', () => {
...
@@ -69,8 +69,8 @@ describe('Model test', () => {
expect
(
dress
.
primary
[
0
]).
toBe
(
'
id
'
);
expect
(
dress
.
primary
[
0
]).
toBe
(
'
id
'
);
expect
(
dress
.
unique
[
0
][
0
]).
toBe
(
'
name
'
);
expect
(
dress
.
unique
[
0
][
0
]).
toBe
(
'
name
'
);
expect
(
dress
.
foreign
.
parentId
).
toStrictEqual
([
'
dress
'
,
'
id
'
]);
expect
(
dress
.
foreign
.
parentId
).
toStrictEqual
([
'
dress
'
,
'
id
'
]);
expect
(
dress
.
internal
[
''
]).
toEqual
(
Dress
.
prototype
);
//
expect(dress.internal['']).toEqual(Dress.prototype);
expect
(
dress
.
internal
[
'
properties.
'
]).
toEqual
(
DressProperty
.
prototype
);
//
expect(dress.internal['properties.']).toEqual(DressProperty.prototype);
});
});
it
(
'
should make class instance
'
,
async
()
=>
{
it
(
'
should make class instance
'
,
async
()
=>
{
...
@@ -87,6 +87,8 @@ describe('Model test', () => {
...
@@ -87,6 +87,8 @@ describe('Model test', () => {
const
[
dress
]
=
await
model
.
get
(
'
dress
'
,
{
id
:
777
});
const
[
dress
]
=
await
model
.
get
(
'
dress
'
,
{
id
:
777
});
expect
(
dress
).
toBeInstanceOf
(
Dress
);
expect
(
dress
).
toBeInstanceOf
(
Dress
);
expect
(
dress
.
id
).
toBe
(
777
);
expect
(
dress
.
id
).
toBe
(
777
);
expect
(
dress
.
properties
.
color
).
toBe
(
'
red
'
);
expect
(
dress
.
properties
.
size
).
toBe
(
10
);
expect
(
dress
.
getName
()).
toBe
(
'
Dress of Shigma
'
);
expect
(
dress
.
getName
()).
toBe
(
'
Dress of Shigma
'
);
expect
(
dress
.
properties
).
toBeInstanceOf
(
DressProperty
);
expect
(
dress
.
properties
).
toBeInstanceOf
(
DressProperty
);
expect
(
dress
.
properties
.
getProperty
()).
toBe
(
'
red 10
'
);
expect
(
dress
.
properties
.
getProperty
()).
toBe
(
'
red 10
'
);
...
...
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