Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
K
koishi-decorators
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
1
Merge Requests
1
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-decorators
Commits
eadddc08
Commit
eadddc08
authored
Jun 16, 2022
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix subscribe
parent
bf361ba9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
29 deletions
+34
-29
src/register.ts
src/register.ts
+27
-24
tests/register.spec.ts
tests/register.spec.ts
+7
-5
No files found.
src/register.ts
View file @
eadddc08
...
...
@@ -14,7 +14,7 @@ import {
}
from
'
./utility
'
;
import
{
DoRegister
}
from
'
./registry
'
;
import
_
from
'
lodash
'
;
import
{
isObservable
,
Observable
}
from
'
rxjs
'
;
import
{
isObservable
,
Observable
,
of
}
from
'
rxjs
'
;
export
interface
DoRegisterResult
<
T
>
extends
DoRegister
.
Config
{
key
:
keyof
T
&
string
;
...
...
@@ -82,34 +82,37 @@ export class Registrar<T = any> {
ctx
:
Context
,
cb
:
ContextFunction
<
R
>
,
layers
:
ContextCallbackLayer
[],
)
{
)
:
Observable
<
R
extends
Observable
<
infer
U
>
?
U
:
Awaited
<
R
>>
{
const
rest
=
[...
layers
];
const
layer
=
rest
.
pop
();
return
new
Observable
<
R
extends
Observable
<
infer
U
>
?
U
:
Awaited
<
R
>>
(
(
subscriber
)
=>
{
layer
(
ctx
,
async
(
nextCtx
)
=>
{
if
(
!
rest
.
length
)
{
const
result
=
cb
(
nextCtx
);
if
(
result
instanceof
Promise
)
{
try
{
subscriber
.
next
(
await
result
);
}
catch
(
e
)
{
subscriber
.
error
(
e
);
}
}
else
if
(
isObservable
(
result
))
{
(
result
as
Observable
<
any
>
).
subscribe
({
next
:
(
value
)
=>
subscriber
.
next
(
value
),
error
:
(
error
)
=>
subscriber
.
error
(
error
),
});
}
else
{
subscriber
.
next
(
result
as
any
);
if
(
!
layer
)
{
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
return
of
(
cb
(
ctx
));
}
return
new
Observable
((
subscriber
)
=>
{
layer
(
ctx
,
async
(
nextCtx
)
=>
{
if
(
!
rest
.
length
)
{
const
result
=
cb
(
nextCtx
);
if
(
result
instanceof
Promise
)
{
try
{
subscriber
.
next
(
await
result
);
}
catch
(
e
)
{
subscriber
.
error
(
e
);
}
}
else
if
(
isObservable
(
result
))
{
(
result
as
Observable
<
any
>
).
subscribe
({
next
:
(
value
)
=>
subscriber
.
next
(
value
),
error
:
(
error
)
=>
subscriber
.
error
(
error
),
});
}
else
{
this
.
runLayersWith
(
nextCtx
,
cb
,
rest
).
subscribe
(
subscriber
);
subscriber
.
next
(
result
as
any
);
}
});
},
);
}
else
{
this
.
runLayersWith
(
nextCtx
,
cb
,
rest
).
subscribe
(
subscriber
);
}
});
});
}
runLayers
<
R
>
(
ctx
:
Context
,
cb
:
ContextFunction
<
R
>
,
key
?:
keyof
T
)
{
...
...
tests/register.spec.ts
View file @
eadddc08
...
...
@@ -149,11 +149,13 @@ describe('Register', () => {
});
it
(
'
should work with layers
'
,
()
=>
{
registrar
.
runLayers
(
app
,
(
ctx
)
=>
registrar
.
register
(
app
,
'
unUnderwear
'
),
'
unUnderwear
'
,
);
registrar
.
runLayers
(
app
,
(
ctx
)
=>
registrar
.
register
(
app
,
'
unUnderwear
'
),
'
unUnderwear
'
,
)
.
subscribe
();
expect
(
app
[
'
foo
'
]).
toBe
(
1
);
expect
(
app
[
'
bar
'
]).
toBe
(
2
);
});
...
...
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