@loopback/docs 6.0.6 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/package.json +4 -4
- package/site/apidocs/authentication.authenticate.md +3 -3
- package/site/apidocs/authentication.authenticate.skip.md +5 -1
- package/site/apidocs/authorization.authorize.allow.md +12 -1
- package/site/apidocs/authorization.authorize.allowall.md +5 -1
- package/site/apidocs/authorization.authorize.allowallexcept.md +12 -1
- package/site/apidocs/authorization.authorize.allowauthenticated.md +5 -1
- package/site/apidocs/authorization.authorize.deny.md +12 -1
- package/site/apidocs/authorization.authorize.denyall.md +5 -1
- package/site/apidocs/authorization.authorize.denyallexcept.md +12 -1
- package/site/apidocs/authorization.authorize.denyunauthenticated.md +5 -1
- package/site/apidocs/authorization.authorize.md +13 -13
- package/site/apidocs/authorization.authorize.scope.md +12 -1
- package/site/apidocs/authorization.authorize.skip.md +5 -1
- package/site/apidocs/authorization.authorize.vote.md +12 -1
- package/site/apidocs/context.config.getter.md +13 -1
- package/site/apidocs/context.config.md +4 -4
- package/site/apidocs/context.config.view.md +13 -1
- package/site/apidocs/context.inject.binding.md +12 -1
- package/site/apidocs/context.inject.context.md +4 -1
- package/site/apidocs/context.inject.getter.md +13 -1
- package/site/apidocs/context.inject.md +8 -8
- package/site/apidocs/context.inject.setter.md +13 -1
- package/site/apidocs/context.inject.tag.md +12 -1
- package/site/apidocs/context.inject.view.md +12 -1
- package/site/apidocs/filter.operators.md +1 -1
- package/site/apidocs/openapi-v3.param.array.md +13 -1
- package/site/apidocs/openapi-v3.param.md +1 -1
- package/site/apidocs/openapi-v3.requestbody.array.md +12 -1
- package/site/apidocs/openapi-v3.requestbody.file.md +11 -1
- package/site/apidocs/openapi-v3.requestbody.md +4 -4
- package/site/apidocs/openapi-v3.response.file.md +11 -1
- package/site/apidocs/openapi-v3.response.md +3 -3
- package/site/apidocs/sequelize.sequelizecrudrepository.buildsequelizeorder.md +3 -1
- package/site/apidocs/sequelize.sequelizecrudrepository.md +1 -1
- package/site/apidocs/sequelize.sequelizedatasource.md +1 -0
- package/site/apidocs/sequelize.sequelizedatasource.parsejsoncolumns.md +23 -0
- package/site/apidocs/sequelize.sequelizedatasourceconfig.md +1 -0
- package/site/apidocs/socketio.getnamespacekeyforname.md +12 -1
- package/site/apidocs/socketio.md +1 -1
- package/site/apidocs/testlab.inject.md +13 -1
- package/site/apidocs/testlab.md +1 -1
- package/site/changelogs/bodyparsers/rest-msgpack/CHANGELOG.md +26 -0
- package/site/changelogs/examples/access-control-migration/CHANGELOG.md +26 -0
- package/site/changelogs/examples/binding-resolution/CHANGELOG.md +26 -0
- package/site/changelogs/examples/context/CHANGELOG.md +26 -0
- package/site/changelogs/examples/express-composition/CHANGELOG.md +26 -0
- package/site/changelogs/examples/file-transfer/CHANGELOG.md +26 -0
- package/site/changelogs/examples/graphql/CHANGELOG.md +26 -0
- package/site/changelogs/examples/greeter-extension/CHANGELOG.md +26 -0
- package/site/changelogs/examples/greeting-app/CHANGELOG.md +26 -0
- package/site/changelogs/examples/hello-world/CHANGELOG.md +26 -0
- package/site/changelogs/examples/lb3-application/CHANGELOG.md +26 -0
- package/site/changelogs/examples/log-extension/CHANGELOG.md +26 -0
- package/site/changelogs/examples/metrics-prometheus/CHANGELOG.md +26 -0
- package/site/changelogs/examples/multi-tenancy/CHANGELOG.md +26 -0
- package/site/changelogs/examples/passport-login/CHANGELOG.md +26 -0
- package/site/changelogs/examples/references-many/CHANGELOG.md +26 -0
- package/site/changelogs/examples/rest-crud/CHANGELOG.md +26 -0
- package/site/changelogs/examples/rpc-server/CHANGELOG.md +26 -0
- package/site/changelogs/examples/soap-calculator/CHANGELOG.md +26 -0
- package/site/changelogs/examples/socketio/CHANGELOG.md +26 -0
- package/site/changelogs/examples/todo/CHANGELOG.md +26 -0
- package/site/changelogs/examples/todo-jwt/CHANGELOG.md +26 -0
- package/site/changelogs/examples/todo-list/CHANGELOG.md +26 -0
- package/site/changelogs/examples/validation-app/CHANGELOG.md +26 -0
- package/site/changelogs/examples/webpack/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/apiconnect/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/authentication-jwt/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/authentication-passport/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/context-explorer/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/cron/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/graphql/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/health/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/logging/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/metrics/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/pooling/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/sequelize/CHANGELOG.md +43 -0
- package/site/changelogs/extensions/socketio/CHANGELOG.md +26 -0
- package/site/changelogs/extensions/typeorm/CHANGELOG.md +26 -0
- package/site/changelogs/fixtures/mock-oauth2-provider/CHANGELOG.md +18 -0
- package/site/changelogs/packages/authentication/CHANGELOG.md +26 -0
- package/site/changelogs/packages/authorization/CHANGELOG.md +26 -0
- package/site/changelogs/packages/boot/CHANGELOG.md +26 -0
- package/site/changelogs/packages/booter-lb3app/CHANGELOG.md +26 -0
- package/site/changelogs/packages/build/CHANGELOG.md +26 -0
- package/site/changelogs/packages/cli/CHANGELOG.md +32 -0
- package/site/changelogs/packages/context/CHANGELOG.md +26 -0
- package/site/changelogs/packages/core/CHANGELOG.md +26 -0
- package/site/changelogs/packages/eslint-config/CHANGELOG.md +31 -0
- package/site/changelogs/packages/express/CHANGELOG.md +26 -0
- package/site/changelogs/packages/filter/CHANGELOG.md +31 -0
- package/site/changelogs/packages/http-caching-proxy/CHANGELOG.md +26 -0
- package/site/changelogs/packages/http-server/CHANGELOG.md +26 -0
- package/site/changelogs/packages/metadata/CHANGELOG.md +26 -0
- package/site/changelogs/packages/model-api-builder/CHANGELOG.md +26 -0
- package/site/changelogs/packages/openapi-spec-builder/CHANGELOG.md +26 -0
- package/site/changelogs/packages/openapi-v3/CHANGELOG.md +26 -0
- package/site/changelogs/packages/repository/CHANGELOG.md +26 -0
- package/site/changelogs/packages/repository-json-schema/CHANGELOG.md +26 -0
- package/site/changelogs/packages/repository-tests/CHANGELOG.md +26 -0
- package/site/changelogs/packages/rest/CHANGELOG.md +26 -0
- package/site/changelogs/packages/rest-crud/CHANGELOG.md +26 -0
- package/site/changelogs/packages/rest-explorer/CHANGELOG.md +26 -0
- package/site/changelogs/packages/security/CHANGELOG.md +26 -0
- package/site/changelogs/packages/service-proxy/CHANGELOG.md +26 -0
- package/site/changelogs/packages/testlab/CHANGELOG.md +26 -0
- package/site/changelogs/packages/tsdocs/CHANGELOG.md +26 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,32 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [7.0.1](https://github.com/loopbackio/loopback-next/compare/@loopback/docs@7.0.0...@loopback/docs@7.0.1) (2024-04-09)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @loopback/docs
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [7.0.0](https://github.com/loopbackio/loopback-next/compare/@loopback/docs@6.0.6...@loopback/docs@7.0.0) (2024-03-04)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### chore
|
|
18
|
+
|
|
19
|
+
* drop Node.js 16 support ([b9efcb4](https://github.com/loopbackio/loopback-next/commit/b9efcb477d50507ba3c778ba23ea7acba7692593))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### BREAKING CHANGES
|
|
23
|
+
|
|
24
|
+
* Drop Node.js 16 support in all LB4 modules and extensions
|
|
25
|
+
|
|
26
|
+
Signed-off-by: dhmlau <dhmlau@ca.ibm.com>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
6
32
|
## [6.0.6](https://github.com/loopbackio/loopback-next/compare/@loopback/docs@6.0.5...@loopback/docs@6.0.6) (2024-01-11)
|
|
7
33
|
|
|
8
34
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loopback/docs",
|
|
3
3
|
"description": "Documentation files rendered at [https://loopback.io](https://loopback.io)",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "7.0.1",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"LoopBack",
|
|
7
7
|
"docs"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"directory": "docs"
|
|
17
17
|
},
|
|
18
18
|
"engines": {
|
|
19
|
-
"node": "
|
|
19
|
+
"node": "18 || 20"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"version": "node ./bin/copy-readmes.js && node ./bin/copy-changelogs.js && cd .. && npm run tsdocs",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"tslib": "^2.6.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@loopback/build": "^
|
|
39
|
+
"@loopback/build": "^11.0.1"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "2bdb95fe5122f3664368261c12e3037ee8c71c27"
|
|
42
42
|
}
|
|
@@ -19,10 +19,10 @@ permalink: /doc/en/lb4/apidocs.authentication.authenticate.html
|
|
|
19
19
|
export declare namespace authenticate
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Functions
|
|
23
23
|
|
|
24
|
-
|
|
|
24
|
+
| Function | Description |
|
|
25
25
|
| --- | --- |
|
|
26
|
-
| [skip](./authentication.authenticate.skip.md) | <code>@authenticate.skip()</code> - a sugar decorator to skip authentication |
|
|
26
|
+
| [skip()](./authentication.authenticate.skip.md) | <code>@authenticate.skip()</code> - a sugar decorator to skip authentication |
|
|
27
27
|
|
|
28
28
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authentication.authenticate.skip.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authentication](./authentication.md) > [authenticate](./authentication.authenticate.md) > [skip](./authentication.authenticate.skip.md)
|
|
13
13
|
|
|
14
|
-
## authenticate.skip
|
|
14
|
+
## authenticate.skip() function
|
|
15
15
|
|
|
16
16
|
`@authenticate.skip()` - a sugar decorator to skip authentication
|
|
17
17
|
|
|
@@ -20,4 +20,8 @@ permalink: /doc/en/lb4/apidocs.authentication.authenticate.skip.html
|
|
|
20
20
|
```typescript
|
|
21
21
|
skip: () => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
**Returns:**
|
|
24
|
+
|
|
25
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
26
|
+
|
|
23
27
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.allow.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [allow](./authorization.authorize.allow.md)
|
|
13
13
|
|
|
14
|
-
## authorize.allow
|
|
14
|
+
## authorize.allow() function
|
|
15
15
|
|
|
16
16
|
Shortcut to configure allowed roles
|
|
17
17
|
|
|
@@ -20,4 +20,15 @@ Shortcut to configure allowed roles
|
|
|
20
20
|
```typescript
|
|
21
21
|
allow: (...roles: string[]) => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| roles | string\[\] | |
|
|
29
|
+
|
|
30
|
+
**Returns:**
|
|
31
|
+
|
|
32
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
33
|
+
|
|
23
34
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.allowall.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [allowAll](./authorization.authorize.allowall.md)
|
|
13
13
|
|
|
14
|
-
## authorize.allowAll
|
|
14
|
+
## authorize.allowAll() function
|
|
15
15
|
|
|
16
16
|
Allows all
|
|
17
17
|
|
|
@@ -20,4 +20,8 @@ Allows all
|
|
|
20
20
|
```typescript
|
|
21
21
|
allowAll: () => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
**Returns:**
|
|
24
|
+
|
|
25
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
26
|
+
|
|
23
27
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.allowallexcept.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [allowAllExcept](./authorization.authorize.allowallexcept.md)
|
|
13
13
|
|
|
14
|
-
## authorize.allowAllExcept
|
|
14
|
+
## authorize.allowAllExcept() function
|
|
15
15
|
|
|
16
16
|
Allow all but the given roles
|
|
17
17
|
|
|
@@ -20,4 +20,15 @@ Allow all but the given roles
|
|
|
20
20
|
```typescript
|
|
21
21
|
allowAllExcept: (...roles: string[]) => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| roles | string\[\] | |
|
|
29
|
+
|
|
30
|
+
**Returns:**
|
|
31
|
+
|
|
32
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
33
|
+
|
|
23
34
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.allowauthenticated.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [allowAuthenticated](./authorization.authorize.allowauthenticated.md)
|
|
13
13
|
|
|
14
|
-
## authorize.allowAuthenticated
|
|
14
|
+
## authorize.allowAuthenticated() function
|
|
15
15
|
|
|
16
16
|
Allow authenticated users
|
|
17
17
|
|
|
@@ -20,4 +20,8 @@ Allow authenticated users
|
|
|
20
20
|
```typescript
|
|
21
21
|
allowAuthenticated: () => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
**Returns:**
|
|
24
|
+
|
|
25
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
26
|
+
|
|
23
27
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.deny.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [deny](./authorization.authorize.deny.md)
|
|
13
13
|
|
|
14
|
-
## authorize.deny
|
|
14
|
+
## authorize.deny() function
|
|
15
15
|
|
|
16
16
|
Shortcut to configure denied roles
|
|
17
17
|
|
|
@@ -20,4 +20,15 @@ Shortcut to configure denied roles
|
|
|
20
20
|
```typescript
|
|
21
21
|
deny: (...roles: string[]) => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| roles | string\[\] | |
|
|
29
|
+
|
|
30
|
+
**Returns:**
|
|
31
|
+
|
|
32
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
33
|
+
|
|
23
34
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.denyall.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [denyAll](./authorization.authorize.denyall.md)
|
|
13
13
|
|
|
14
|
-
## authorize.denyAll
|
|
14
|
+
## authorize.denyAll() function
|
|
15
15
|
|
|
16
16
|
Deny all
|
|
17
17
|
|
|
@@ -20,4 +20,8 @@ Deny all
|
|
|
20
20
|
```typescript
|
|
21
21
|
denyAll: () => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
**Returns:**
|
|
24
|
+
|
|
25
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
26
|
+
|
|
23
27
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.denyallexcept.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [denyAllExcept](./authorization.authorize.denyallexcept.md)
|
|
13
13
|
|
|
14
|
-
## authorize.denyAllExcept
|
|
14
|
+
## authorize.denyAllExcept() function
|
|
15
15
|
|
|
16
16
|
Deny all but the given roles
|
|
17
17
|
|
|
@@ -20,4 +20,15 @@ Deny all but the given roles
|
|
|
20
20
|
```typescript
|
|
21
21
|
denyAllExcept: (...roles: string[]) => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| roles | string\[\] | |
|
|
29
|
+
|
|
30
|
+
**Returns:**
|
|
31
|
+
|
|
32
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
33
|
+
|
|
23
34
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.denyunauthenticated.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [denyUnauthenticated](./authorization.authorize.denyunauthenticated.md)
|
|
13
13
|
|
|
14
|
-
## authorize.denyUnauthenticated
|
|
14
|
+
## authorize.denyUnauthenticated() function
|
|
15
15
|
|
|
16
16
|
Deny unauthenticated users
|
|
17
17
|
|
|
@@ -20,4 +20,8 @@ Deny unauthenticated users
|
|
|
20
20
|
```typescript
|
|
21
21
|
denyUnauthenticated: () => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
**Returns:**
|
|
24
|
+
|
|
25
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
26
|
+
|
|
23
27
|
|
|
@@ -19,20 +19,20 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.html
|
|
|
19
19
|
export declare namespace authorize
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Functions
|
|
23
23
|
|
|
24
|
-
|
|
|
24
|
+
| Function | Description |
|
|
25
25
|
| --- | --- |
|
|
26
|
-
| [allow](./authorization.authorize.allow.md) | Shortcut to configure allowed roles |
|
|
27
|
-
| [allowAll](./authorization.authorize.allowall.md) | Allows all |
|
|
28
|
-
| [allowAllExcept](./authorization.authorize.allowallexcept.md) | Allow all but the given roles |
|
|
29
|
-
| [allowAuthenticated](./authorization.authorize.allowauthenticated.md) | Allow authenticated users |
|
|
30
|
-
| [deny](./authorization.authorize.deny.md) | Shortcut to configure denied roles |
|
|
31
|
-
| [denyAll](./authorization.authorize.denyall.md) | Deny all |
|
|
32
|
-
| [denyAllExcept](./authorization.authorize.denyallexcept.md) | Deny all but the given roles |
|
|
33
|
-
| [denyUnauthenticated](./authorization.authorize.denyunauthenticated.md) | Deny unauthenticated users |
|
|
34
|
-
| [scope](./authorization.authorize.scope.md) | Shortcut to specify access scopes |
|
|
35
|
-
| [skip](./authorization.authorize.skip.md) | Skip authorization |
|
|
36
|
-
| [vote](./authorization.authorize.vote.md) | Shortcut to configure voters |
|
|
26
|
+
| [allow(roles)](./authorization.authorize.allow.md) | Shortcut to configure allowed roles |
|
|
27
|
+
| [allowAll()](./authorization.authorize.allowall.md) | Allows all |
|
|
28
|
+
| [allowAllExcept(roles)](./authorization.authorize.allowallexcept.md) | Allow all but the given roles |
|
|
29
|
+
| [allowAuthenticated()](./authorization.authorize.allowauthenticated.md) | Allow authenticated users |
|
|
30
|
+
| [deny(roles)](./authorization.authorize.deny.md) | Shortcut to configure denied roles |
|
|
31
|
+
| [denyAll()](./authorization.authorize.denyall.md) | Deny all |
|
|
32
|
+
| [denyAllExcept(roles)](./authorization.authorize.denyallexcept.md) | Deny all but the given roles |
|
|
33
|
+
| [denyUnauthenticated()](./authorization.authorize.denyunauthenticated.md) | Deny unauthenticated users |
|
|
34
|
+
| [scope(scopes)](./authorization.authorize.scope.md) | Shortcut to specify access scopes |
|
|
35
|
+
| [skip()](./authorization.authorize.skip.md) | Skip authorization |
|
|
36
|
+
| [vote(voters)](./authorization.authorize.vote.md) | Shortcut to configure voters |
|
|
37
37
|
|
|
38
38
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.scope.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [scope](./authorization.authorize.scope.md)
|
|
13
13
|
|
|
14
|
-
## authorize.scope
|
|
14
|
+
## authorize.scope() function
|
|
15
15
|
|
|
16
16
|
Shortcut to specify access scopes
|
|
17
17
|
|
|
@@ -20,4 +20,15 @@ Shortcut to specify access scopes
|
|
|
20
20
|
```typescript
|
|
21
21
|
scope: (...scopes: string[]) => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| scopes | string\[\] | |
|
|
29
|
+
|
|
30
|
+
**Returns:**
|
|
31
|
+
|
|
32
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
33
|
+
|
|
23
34
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.skip.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [skip](./authorization.authorize.skip.md)
|
|
13
13
|
|
|
14
|
-
## authorize.skip
|
|
14
|
+
## authorize.skip() function
|
|
15
15
|
|
|
16
16
|
Skip authorization
|
|
17
17
|
|
|
@@ -20,4 +20,8 @@ Skip authorization
|
|
|
20
20
|
```typescript
|
|
21
21
|
skip: () => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
**Returns:**
|
|
24
|
+
|
|
25
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
26
|
+
|
|
23
27
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.authorization.authorize.vote.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/authorization](./authorization.md) > [authorize](./authorization.authorize.md) > [vote](./authorization.authorize.vote.md)
|
|
13
13
|
|
|
14
|
-
## authorize.vote
|
|
14
|
+
## authorize.vote() function
|
|
15
15
|
|
|
16
16
|
Shortcut to configure voters
|
|
17
17
|
|
|
@@ -20,4 +20,15 @@ Shortcut to configure voters
|
|
|
20
20
|
```typescript
|
|
21
21
|
vote: (...voters: (Authorizer | BindingAddress<Authorizer>)[]) => (target: any, method?: string | undefined, methodDescriptor?: TypedPropertyDescriptor<any> | undefined) => any
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| voters | ([Authorizer](./authorization.authorizer.md) \| [BindingAddress](./context.bindingaddress.md)<!-- --><[Authorizer](./authorization.authorizer.md)<!-- -->>)\[\] | |
|
|
29
|
+
|
|
30
|
+
**Returns:**
|
|
31
|
+
|
|
32
|
+
(target: any, method?: string \| undefined, methodDescriptor?: TypedPropertyDescriptor<any> \| undefined) => any
|
|
33
|
+
|
|
23
34
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.config.getter.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [config](./context.config.md) > [getter](./context.config.getter.md)
|
|
13
13
|
|
|
14
|
-
## config.getter
|
|
14
|
+
## config.getter() function
|
|
15
15
|
|
|
16
16
|
`@inject.getter` decorator to inject a config getter function
|
|
17
17
|
|
|
@@ -20,4 +20,16 @@ permalink: /doc/en/lb4/apidocs.context.config.getter.html
|
|
|
20
20
|
```typescript
|
|
21
21
|
getter: (propertyPath?: string | ConfigInjectionMetadata, metadata?: ConfigInjectionMetadata) => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| propertyPath | string \| [ConfigInjectionMetadata](./context.configinjectionmetadata.md) | _(Optional)_ Optional property path of the config object |
|
|
29
|
+
| metadata | [ConfigInjectionMetadata](./context.configinjectionmetadata.md) | _(Optional)_ Injection metadata |
|
|
30
|
+
|
|
31
|
+
**Returns:**
|
|
32
|
+
|
|
33
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
34
|
+
|
|
23
35
|
|
|
@@ -19,11 +19,11 @@ permalink: /doc/en/lb4/apidocs.context.config.html
|
|
|
19
19
|
export declare namespace config
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Functions
|
|
23
23
|
|
|
24
|
-
|
|
|
24
|
+
| Function | Description |
|
|
25
25
|
| --- | --- |
|
|
26
|
-
| [getter](./context.config.getter.md) | <code>@inject.getter</code> decorator to inject a config getter function |
|
|
27
|
-
| [view](./context.config.view.md) | <code>@inject.view</code> decorator to inject a config context view to allow dynamic changes in configuration |
|
|
26
|
+
| [getter(propertyPath, metadata)](./context.config.getter.md) | <code>@inject.getter</code> decorator to inject a config getter function |
|
|
27
|
+
| [view(propertyPath, metadata)](./context.config.view.md) | <code>@inject.view</code> decorator to inject a config context view to allow dynamic changes in configuration |
|
|
28
28
|
|
|
29
29
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.config.view.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [config](./context.config.md) > [view](./context.config.view.md)
|
|
13
13
|
|
|
14
|
-
## config.view
|
|
14
|
+
## config.view() function
|
|
15
15
|
|
|
16
16
|
`@inject.view` decorator to inject a config context view to allow dynamic changes in configuration
|
|
17
17
|
|
|
@@ -20,4 +20,16 @@ permalink: /doc/en/lb4/apidocs.context.config.view.html
|
|
|
20
20
|
```typescript
|
|
21
21
|
view: (propertyPath?: string | ConfigInjectionMetadata, metadata?: ConfigInjectionMetadata) => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| propertyPath | string \| [ConfigInjectionMetadata](./context.configinjectionmetadata.md) | _(Optional)_ Optional property path of the config object |
|
|
29
|
+
| metadata | [ConfigInjectionMetadata](./context.configinjectionmetadata.md) | _(Optional)_ Injection metadata |
|
|
30
|
+
|
|
31
|
+
**Returns:**
|
|
32
|
+
|
|
33
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
34
|
+
|
|
23
35
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.inject.binding.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [inject](./context.inject.md) > [binding](./context.inject.binding.md)
|
|
13
13
|
|
|
14
|
-
## inject.binding
|
|
14
|
+
## inject.binding() function
|
|
15
15
|
|
|
16
16
|
Inject the binding object for the given key. This is useful if a binding needs to be set up beyond just a constant value allowed by `@inject.setter`<!-- -->. The injected binding is found or created based on the `metadata.bindingCreation` option. See `BindingCreationPolicy` for more details.
|
|
17
17
|
|
|
@@ -21,6 +21,17 @@ Inject the binding object for the given key. This is useful if a binding needs t
|
|
|
21
21
|
binding: (bindingKey?: string | BindingKey<unknown>, metadata?: InjectBindingMetadata) => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| bindingKey | string \| [BindingKey](./context.bindingkey.md)<!-- --><unknown> | _(Optional)_ Binding key |
|
|
29
|
+
| metadata | [InjectBindingMetadata](./context.injectbindingmetadata.md) | _(Optional)_ Metadata for the injection |
|
|
30
|
+
|
|
31
|
+
**Returns:**
|
|
32
|
+
|
|
33
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
34
|
+
|
|
24
35
|
## Example
|
|
25
36
|
|
|
26
37
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.inject.context.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [inject](./context.inject.md) > [context](./context.inject.context.md)
|
|
13
13
|
|
|
14
|
-
## inject.context
|
|
14
|
+
## inject.context() function
|
|
15
15
|
|
|
16
16
|
Inject the context object.
|
|
17
17
|
|
|
@@ -20,6 +20,9 @@ Inject the context object.
|
|
|
20
20
|
```typescript
|
|
21
21
|
context: () => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
22
22
|
```
|
|
23
|
+
**Returns:**
|
|
24
|
+
|
|
25
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
23
26
|
|
|
24
27
|
## Example
|
|
25
28
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.inject.getter.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [inject](./context.inject.md) > [getter](./context.inject.getter.md)
|
|
13
13
|
|
|
14
|
-
## inject.getter
|
|
14
|
+
## inject.getter() function
|
|
15
15
|
|
|
16
16
|
Inject a function for getting the actual bound value.
|
|
17
17
|
|
|
@@ -24,4 +24,16 @@ See also `Getter<T>`<!-- -->.
|
|
|
24
24
|
```typescript
|
|
25
25
|
getter: (bindingSelector: BindingSelector<unknown>, metadata?: InjectionMetadata) => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
26
26
|
```
|
|
27
|
+
|
|
28
|
+
## Parameters
|
|
29
|
+
|
|
30
|
+
| Parameter | Type | Description |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| bindingSelector | [BindingSelector](./context.bindingselector.md)<!-- --><unknown> | The binding key or filter we want to eventually get value(s) from. |
|
|
33
|
+
| metadata | [InjectionMetadata](./context.injectionmetadata.md) | _(Optional)_ Optional metadata to help the injection |
|
|
34
|
+
|
|
35
|
+
**Returns:**
|
|
36
|
+
|
|
37
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
38
|
+
|
|
27
39
|
|
|
@@ -19,15 +19,15 @@ permalink: /doc/en/lb4/apidocs.context.inject.html
|
|
|
19
19
|
export declare namespace inject
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Functions
|
|
23
23
|
|
|
24
|
-
|
|
|
24
|
+
| Function | Description |
|
|
25
25
|
| --- | --- |
|
|
26
|
-
| [binding](./context.inject.binding.md) | Inject the binding object for the given key. This is useful if a binding needs to be set up beyond just a constant value allowed by <code>@inject.setter</code>. The injected binding is found or created based on the <code>metadata.bindingCreation</code> option. See <code>BindingCreationPolicy</code> for more details. |
|
|
27
|
-
| [context](./context.inject.context.md) | Inject the context object. |
|
|
28
|
-
| [getter](./context.inject.getter.md) | <p>Inject a function for getting the actual bound value.</p><p>This is useful when implementing Actions, where the action is instantiated for Sequence constructor, but some of action's dependencies become bound only after other actions have been executed by the sequence.</p><p>See also <code>Getter<T></code>.</p> |
|
|
29
|
-
| [setter](./context.inject.setter.md) | <p>Inject a function for setting (binding) the given key to a given value. (Only static/constant values are supported, it's not possible to bind a key to a class or a provider.)</p><p>This is useful e.g. when implementing Actions that are contributing new Elements.</p><p>See also <code>Setter<T></code>.</p> |
|
|
30
|
-
| [tag](./context.inject.tag.md) | Inject an array of values by a tag pattern string or regexp |
|
|
31
|
-
| [view](./context.inject.view.md) | Inject matching bound values by the filter function |
|
|
26
|
+
| [binding(bindingKey, metadata)](./context.inject.binding.md) | Inject the binding object for the given key. This is useful if a binding needs to be set up beyond just a constant value allowed by <code>@inject.setter</code>. The injected binding is found or created based on the <code>metadata.bindingCreation</code> option. See <code>BindingCreationPolicy</code> for more details. |
|
|
27
|
+
| [context()](./context.inject.context.md) | Inject the context object. |
|
|
28
|
+
| [getter(bindingSelector, metadata)](./context.inject.getter.md) | <p>Inject a function for getting the actual bound value.</p><p>This is useful when implementing Actions, where the action is instantiated for Sequence constructor, but some of action's dependencies become bound only after other actions have been executed by the sequence.</p><p>See also <code>Getter<T></code>.</p> |
|
|
29
|
+
| [setter(bindingKey, metadata)](./context.inject.setter.md) | <p>Inject a function for setting (binding) the given key to a given value. (Only static/constant values are supported, it's not possible to bind a key to a class or a provider.)</p><p>This is useful e.g. when implementing Actions that are contributing new Elements.</p><p>See also <code>Setter<T></code>.</p> |
|
|
30
|
+
| [tag(bindingTag, metadata)](./context.inject.tag.md) | Inject an array of values by a tag pattern string or regexp |
|
|
31
|
+
| [view(bindingFilter, metadata)](./context.inject.view.md) | Inject matching bound values by the filter function |
|
|
32
32
|
|
|
33
33
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.inject.setter.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [inject](./context.inject.md) > [setter](./context.inject.setter.md)
|
|
13
13
|
|
|
14
|
-
## inject.setter
|
|
14
|
+
## inject.setter() function
|
|
15
15
|
|
|
16
16
|
Inject a function for setting (binding) the given key to a given value. (Only static/constant values are supported, it's not possible to bind a key to a class or a provider.)
|
|
17
17
|
|
|
@@ -24,4 +24,16 @@ See also `Setter<T>`<!-- -->.
|
|
|
24
24
|
```typescript
|
|
25
25
|
setter: (bindingKey: BindingAddress, metadata?: InjectBindingMetadata) => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
26
26
|
```
|
|
27
|
+
|
|
28
|
+
## Parameters
|
|
29
|
+
|
|
30
|
+
| Parameter | Type | Description |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| bindingKey | [BindingAddress](./context.bindingaddress.md) | The key of the value we want to set. |
|
|
33
|
+
| metadata | [InjectBindingMetadata](./context.injectbindingmetadata.md) | _(Optional)_ Optional metadata to help the injection |
|
|
34
|
+
|
|
35
|
+
**Returns:**
|
|
36
|
+
|
|
37
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
38
|
+
|
|
27
39
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.inject.tag.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [inject](./context.inject.md) > [tag](./context.inject.tag.md)
|
|
13
13
|
|
|
14
|
-
## inject.tag
|
|
14
|
+
## inject.tag() function
|
|
15
15
|
|
|
16
16
|
Inject an array of values by a tag pattern string or regexp
|
|
17
17
|
|
|
@@ -21,6 +21,17 @@ Inject an array of values by a tag pattern string or regexp
|
|
|
21
21
|
tag: (bindingTag: BindingTag | RegExp, metadata?: InjectionMetadata) => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| bindingTag | [BindingTag](./context.bindingtag.md) \| RegExp | Tag name, regex or object |
|
|
29
|
+
| metadata | [InjectionMetadata](./context.injectionmetadata.md) | _(Optional)_ Optional metadata to help the injection |
|
|
30
|
+
|
|
31
|
+
**Returns:**
|
|
32
|
+
|
|
33
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
34
|
+
|
|
24
35
|
## Example
|
|
25
36
|
|
|
26
37
|
|
|
@@ -11,7 +11,7 @@ permalink: /doc/en/lb4/apidocs.context.inject.view.html
|
|
|
11
11
|
|
|
12
12
|
[Home](./index.md) > [@loopback/context](./context.md) > [inject](./context.inject.md) > [view](./context.inject.view.md)
|
|
13
13
|
|
|
14
|
-
## inject.view
|
|
14
|
+
## inject.view() function
|
|
15
15
|
|
|
16
16
|
Inject matching bound values by the filter function
|
|
17
17
|
|
|
@@ -21,6 +21,17 @@ Inject matching bound values by the filter function
|
|
|
21
21
|
view: (bindingFilter: BindingFilter, metadata?: InjectionMetadata) => (target: Object, member: string | undefined, methodDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
## Parameters
|
|
25
|
+
|
|
26
|
+
| Parameter | Type | Description |
|
|
27
|
+
| --- | --- | --- |
|
|
28
|
+
| bindingFilter | [BindingFilter](./context.bindingfilter.md) | A binding filter function |
|
|
29
|
+
| metadata | [InjectionMetadata](./context.injectionmetadata.md) | _(Optional)_ |
|
|
30
|
+
|
|
31
|
+
**Returns:**
|
|
32
|
+
|
|
33
|
+
(target: Object, member: string \| undefined, methodDescriptorOrParameterIndex?: number \| TypedPropertyDescriptor<any> \| undefined) => void
|
|
34
|
+
|
|
24
35
|
## Example
|
|
25
36
|
|
|
26
37
|
|
|
@@ -18,6 +18,6 @@ Operators for where clauses
|
|
|
18
18
|
**Signature:**
|
|
19
19
|
|
|
20
20
|
```typescript
|
|
21
|
-
export type Operators = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'inq' | 'nin' | 'between' | 'exists' | 'and' | 'or' | 'like' | 'nlike' | 'ilike' | 'nilike' | 'regexp';
|
|
21
|
+
export type Operators = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'inq' | 'nin' | 'between' | 'exists' | 'and' | 'or' | 'like' | 'nlike' | 'ilike' | 'nilike' | 'regexp' | 'match' | 'contains';
|
|
22
22
|
```
|
|
23
23
|
|