@strapi/strapi 4.0.0-next.7 → 4.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.
Files changed (157) hide show
  1. package/README.md +14 -14
  2. package/bin/strapi.js +46 -60
  3. package/lib/Strapi.js +193 -98
  4. package/lib/commands/build.js +19 -8
  5. package/lib/commands/console.js +1 -1
  6. package/lib/commands/content-types/list.js +22 -0
  7. package/lib/commands/controllers/list.js +22 -0
  8. package/lib/commands/develop.js +22 -27
  9. package/lib/commands/generate-template.js +4 -5
  10. package/lib/commands/hooks/list.js +22 -0
  11. package/lib/commands/middlewares/list.js +22 -0
  12. package/lib/commands/new.js +3 -1
  13. package/lib/commands/policies/list.js +22 -0
  14. package/lib/commands/routes/list.js +28 -0
  15. package/lib/commands/services/list.js +22 -0
  16. package/lib/commands/watchAdmin.js +18 -9
  17. package/lib/core/app-configuration/index.js +3 -36
  18. package/lib/core/bootstrap.js +25 -0
  19. package/lib/core/domain/content-type/index.js +26 -29
  20. package/lib/core/domain/content-type/validator.js +22 -3
  21. package/lib/core/domain/module/index.js +42 -11
  22. package/lib/core/domain/module/validation.js +16 -19
  23. package/lib/core/loaders/admin.js +16 -0
  24. package/lib/core/loaders/apis.js +159 -0
  25. package/lib/core/loaders/{load-components.js → components.js} +5 -6
  26. package/lib/core/loaders/index.js +11 -0
  27. package/lib/core/loaders/middlewares.js +36 -0
  28. package/lib/core/{load-plugins → loaders/plugins}/get-enabled-plugins.js +55 -19
  29. package/lib/core/loaders/plugins/get-user-plugins-config.js +37 -0
  30. package/lib/core/{load-plugins → loaders/plugins}/index.js +35 -19
  31. package/lib/core/loaders/policies.js +28 -0
  32. package/lib/core/loaders/src-index.js +39 -0
  33. package/lib/core/registries/apis.js +29 -0
  34. package/lib/core/registries/content-types.js +66 -10
  35. package/lib/core/registries/controllers.d.ts +7 -0
  36. package/lib/core/registries/controllers.js +92 -7
  37. package/lib/core/registries/hooks.d.ts +20 -0
  38. package/lib/core/registries/hooks.js +87 -0
  39. package/lib/core/registries/middlewares.d.ts +5 -0
  40. package/lib/core/registries/middlewares.js +65 -5
  41. package/lib/core/registries/modules.js +3 -3
  42. package/lib/core/registries/plugins.js +2 -2
  43. package/lib/core/registries/policies.d.ts +9 -0
  44. package/lib/core/registries/policies.js +65 -5
  45. package/lib/core/registries/services.d.ts +7 -0
  46. package/lib/core/registries/services.js +88 -17
  47. package/lib/core/utils.js +35 -0
  48. package/lib/core-api/controller/collection-type.js +45 -26
  49. package/lib/core-api/controller/index.d.ts +25 -0
  50. package/lib/core-api/controller/index.js +33 -11
  51. package/lib/core-api/controller/single-type.js +29 -15
  52. package/lib/core-api/controller/transform.js +62 -6
  53. package/lib/core-api/routes/index.js +71 -0
  54. package/lib/core-api/service/collection-type.js +43 -21
  55. package/lib/core-api/service/index.d.ts +21 -0
  56. package/lib/core-api/service/index.js +8 -67
  57. package/lib/core-api/service/pagination.js +125 -0
  58. package/lib/core-api/service/single-type.js +17 -19
  59. package/lib/factories.d.ts +48 -0
  60. package/lib/factories.js +84 -0
  61. package/lib/index.d.ts +10 -31
  62. package/lib/index.js +5 -1
  63. package/lib/middlewares/body.js +33 -0
  64. package/lib/middlewares/compression.js +8 -0
  65. package/lib/middlewares/cors.js +58 -0
  66. package/lib/middlewares/errors.js +40 -0
  67. package/lib/middlewares/favicon.js +19 -0
  68. package/lib/middlewares/index.d.ts +5 -0
  69. package/lib/middlewares/index.js +30 -116
  70. package/lib/middlewares/ip.js +8 -0
  71. package/lib/middlewares/logger.js +27 -0
  72. package/lib/middlewares/powered-by.js +20 -0
  73. package/lib/middlewares/public/index.js +72 -77
  74. package/lib/middlewares/query.js +46 -0
  75. package/lib/middlewares/response-time.js +15 -0
  76. package/lib/middlewares/responses.js +19 -0
  77. package/lib/middlewares/security.js +51 -0
  78. package/lib/middlewares/session/index.js +6 -6
  79. package/lib/migrations/draft-publish.js +57 -0
  80. package/lib/services/auth/index.js +87 -0
  81. package/lib/services/core-store.js +64 -51
  82. package/lib/services/cron.js +54 -0
  83. package/lib/services/entity-service/attributes/index.js +31 -0
  84. package/lib/services/entity-service/attributes/transforms.js +20 -0
  85. package/lib/services/entity-service/components.js +39 -15
  86. package/lib/services/entity-service/index.d.ts +91 -0
  87. package/lib/services/entity-service/index.js +120 -59
  88. package/lib/services/entity-service/params.js +52 -94
  89. package/lib/services/entity-validator/index.js +76 -43
  90. package/lib/services/entity-validator/validators.js +131 -43
  91. package/lib/services/errors.js +77 -0
  92. package/lib/{core → services}/fs.js +1 -1
  93. package/lib/services/metrics/index.js +38 -36
  94. package/lib/services/server/admin-api.js +14 -0
  95. package/lib/services/server/api.js +36 -0
  96. package/lib/services/server/compose-endpoint.js +141 -0
  97. package/lib/services/server/content-api.js +16 -0
  98. package/lib/{server.js → services/server/http-server.js} +0 -0
  99. package/lib/services/server/index.js +127 -0
  100. package/lib/services/server/koa.js +64 -0
  101. package/lib/services/server/middleware.js +122 -0
  102. package/lib/services/server/policy.js +32 -0
  103. package/lib/services/server/register-middlewares.js +110 -0
  104. package/lib/services/server/register-routes.js +106 -0
  105. package/lib/services/server/routing.js +120 -0
  106. package/lib/services/webhook-runner.js +1 -1
  107. package/lib/utils/ee.js +3 -3
  108. package/lib/utils/get-dirs.js +17 -0
  109. package/lib/utils/index.js +2 -0
  110. package/lib/utils/is-initialized.js +1 -1
  111. package/lib/utils/signals.js +24 -0
  112. package/lib/utils/startup-logger.js +2 -2
  113. package/lib/utils/update-notifier/index.js +3 -2
  114. package/package.json +94 -97
  115. package/lib/commands/generate.js +0 -76
  116. package/lib/core/loaders/bootstrap.js +0 -176
  117. package/lib/core/loaders/load-apis.js +0 -20
  118. package/lib/core/loaders/load-functions.js +0 -21
  119. package/lib/core/loaders/load-middlewares.js +0 -136
  120. package/lib/core/loaders/load-modules.js +0 -21
  121. package/lib/core/loaders/load-policies.js +0 -36
  122. package/lib/core/loaders/walk.js +0 -27
  123. package/lib/core-api/index.js +0 -39
  124. package/lib/load/check-reserved-filename.js +0 -10
  125. package/lib/load/load-config-files.js +0 -22
  126. package/lib/load/require-file-parse.js +0 -15
  127. package/lib/middlewares/boom/defaults.json +0 -5
  128. package/lib/middlewares/boom/index.js +0 -147
  129. package/lib/middlewares/cors/index.js +0 -66
  130. package/lib/middlewares/cron/defaults.json +0 -5
  131. package/lib/middlewares/cron/index.js +0 -43
  132. package/lib/middlewares/favicon/defaults.json +0 -7
  133. package/lib/middlewares/favicon/index.js +0 -32
  134. package/lib/middlewares/gzip/defaults.json +0 -6
  135. package/lib/middlewares/gzip/index.js +0 -19
  136. package/lib/middlewares/helmet/defaults.json +0 -18
  137. package/lib/middlewares/helmet/index.js +0 -9
  138. package/lib/middlewares/ip/defaults.json +0 -7
  139. package/lib/middlewares/ip/index.js +0 -25
  140. package/lib/middlewares/language/defaults.json +0 -9
  141. package/lib/middlewares/language/index.js +0 -40
  142. package/lib/middlewares/logger/defaults.json +0 -5
  143. package/lib/middlewares/logger/index.js +0 -37
  144. package/lib/middlewares/parser/defaults.json +0 -11
  145. package/lib/middlewares/parser/index.js +0 -71
  146. package/lib/middlewares/poweredBy/defaults.json +0 -5
  147. package/lib/middlewares/poweredBy/index.js +0 -16
  148. package/lib/middlewares/public/defaults.json +0 -8
  149. package/lib/middlewares/responseTime/defaults.json +0 -5
  150. package/lib/middlewares/responseTime/index.js +0 -25
  151. package/lib/middlewares/responses/defaults.json +0 -5
  152. package/lib/middlewares/responses/index.js +0 -18
  153. package/lib/middlewares/router/defaults.json +0 -7
  154. package/lib/middlewares/router/index.js +0 -56
  155. package/lib/middlewares/router/utils/composeEndpoint.js +0 -25
  156. package/lib/middlewares/router/utils/routerChecker.js +0 -96
  157. package/lib/utils/get-prefixed-dependencies.js +0 -7
@@ -1,66 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Module dependencies
5
- */
6
- const cors = require('@koa/cors');
7
-
8
- const defaults = {
9
- origin: '*',
10
- maxAge: 31536000,
11
- credentials: true,
12
- methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
13
- headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],
14
- keepHeadersOnError: false,
15
- };
16
-
17
- module.exports = strapi => {
18
- return {
19
- /**
20
- * Initialize the hook
21
- */
22
- initialize() {
23
- const {
24
- origin,
25
- expose,
26
- maxAge,
27
- credentials,
28
- methods,
29
- headers,
30
- keepHeadersOnError,
31
- } = Object.assign({}, defaults, strapi.config.get('middleware.settings.cors'));
32
-
33
- strapi.app.use(
34
- cors({
35
- origin: async function(ctx) {
36
- let originList;
37
-
38
- if (typeof origin === 'function') {
39
- originList = await origin(ctx);
40
- } else {
41
- originList = origin;
42
- }
43
-
44
- const whitelist = Array.isArray(originList) ? originList : originList.split(/\s*,\s*/);
45
-
46
- const requestOrigin = ctx.accept.headers.origin;
47
- if (whitelist.includes('*')) {
48
- return '*';
49
- }
50
-
51
- if (!whitelist.includes(requestOrigin)) {
52
- return ctx.throw(`${requestOrigin} is not a valid origin`);
53
- }
54
- return requestOrigin;
55
- },
56
- exposeHeaders: expose,
57
- maxAge,
58
- credentials,
59
- allowMethods: methods,
60
- allowHeaders: headers,
61
- keepHeadersOnError,
62
- })
63
- );
64
- },
65
- };
66
- };
@@ -1,5 +0,0 @@
1
- {
2
- "cron": {
3
- "enabled": true
4
- }
5
- }
@@ -1,43 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Module dependencies
5
- */
6
-
7
- // Public node modules.
8
- const _ = require('lodash');
9
- const cron = require('node-schedule');
10
-
11
- /**
12
- * CRON hook
13
- */
14
-
15
- module.exports = strapi => {
16
- return {
17
- /**
18
- * Initialize the hook
19
- */
20
-
21
- initialize() {
22
- if (strapi.config.get('server.cron.enabled', false) === true) {
23
- _.forEach(_.keys(strapi.config.get('functions.cron', {})), taskExpression => {
24
- const taskValue = strapi.config.functions.cron[taskExpression];
25
-
26
- if (_.isFunction(taskValue)) {
27
- return cron.scheduleJob(taskExpression, taskValue);
28
- }
29
-
30
- const options = _.get(taskValue, 'options', {});
31
-
32
- cron.scheduleJob(
33
- {
34
- rule: taskExpression,
35
- ...options,
36
- },
37
- taskValue.task
38
- );
39
- });
40
- }
41
- },
42
- };
43
- };
@@ -1,7 +0,0 @@
1
- {
2
- "favicon": {
3
- "enabled": true,
4
- "path": "favicon.ico",
5
- "maxAge": 86400000
6
- }
7
- }
@@ -1,32 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Module dependencies
5
- */
6
-
7
- // Node.js core.
8
- const { resolve } = require('path');
9
- const favicon = require('koa-favicon');
10
-
11
- /**
12
- * Favicon hook
13
- */
14
-
15
- module.exports = strapi => {
16
- return {
17
- /**
18
- * Initialize the hook
19
- */
20
-
21
- initialize() {
22
- const { dir } = strapi;
23
- const { maxAge, path: faviconPath } = strapi.config.middleware.settings.favicon;
24
-
25
- strapi.app.use(
26
- favicon(resolve(dir, faviconPath), {
27
- maxAge,
28
- })
29
- );
30
- },
31
- };
32
- };
@@ -1,6 +0,0 @@
1
- {
2
- "gzip": {
3
- "enabled": false,
4
- "options": {}
5
- }
6
- }
@@ -1,19 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Gzip hook
5
- */
6
- const compress = require('koa-compress');
7
-
8
- module.exports = strapi => {
9
- return {
10
- /**
11
- * Initialize the hook
12
- */
13
-
14
- initialize() {
15
- const { options = {} } = strapi.config.middleware.settings.gzip;
16
- strapi.app.use(compress(options));
17
- },
18
- };
19
- };
@@ -1,18 +0,0 @@
1
- {
2
- "helmet": {
3
- "enabled": true,
4
- "crossOriginEmbedderPolicy": false,
5
- "crossOriginOpenerPolicy": false,
6
- "crossOriginResourcePolicy": false,
7
- "originAgentCluster": false,
8
- "contentSecurityPolicy": false,
9
- "xssFilter": false,
10
- "hsts": {
11
- "maxAge": 31536000,
12
- "includeSubDomains": true
13
- },
14
- "frameguard": {
15
- "action": "sameorigin"
16
- }
17
- }
18
- }
@@ -1,9 +0,0 @@
1
- 'use strict';
2
-
3
- const helmet = require('koa-helmet');
4
-
5
- module.exports = strapi => ({
6
- initialize() {
7
- strapi.app.use(helmet(strapi.config.middleware.settings.helmet));
8
- },
9
- });
@@ -1,7 +0,0 @@
1
- {
2
- "ip": {
3
- "enabled": false,
4
- "whiteList": [],
5
- "blackList": []
6
- }
7
- }
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- const ip = require('koa-ip');
4
- /**
5
- * IP filter hook
6
- */
7
-
8
- module.exports = strapi => {
9
- return {
10
- /**
11
- * Initialize the hook
12
- */
13
-
14
- initialize() {
15
- const { whiteList, blackList } = strapi.config.middleware.settings.ip;
16
-
17
- strapi.app.use(
18
- ip({
19
- whitelist: whiteList,
20
- blacklist: blackList,
21
- })
22
- );
23
- },
24
- };
25
- };
@@ -1,9 +0,0 @@
1
- {
2
- "language": {
3
- "enabled": false,
4
- "defaultLocale": "en_us",
5
- "locales": ["en_us"],
6
- "modes": ["query", "subdomain", "cookie", "header", "url", "tld"],
7
- "cookieName": "locale"
8
- }
9
- }
@@ -1,40 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Module dependencies
5
- */
6
-
7
- // Node.js core.
8
- const { resolve } = require('path');
9
- const locale = require('koa-locale');
10
- const i18n = require('koa-i18n');
11
- /**
12
- * Language hook
13
- */
14
-
15
- module.exports = strapi => {
16
- return {
17
- /**
18
- * Initialize the hook
19
- */
20
-
21
- initialize() {
22
- locale(strapi.app);
23
-
24
- const { defaultLocale, modes, cookieName } = strapi.config.middleware.settings.language;
25
-
26
- const directory = resolve(strapi.config.appPath, strapi.config.paths.config, 'locales');
27
-
28
- strapi.app.use(
29
- i18n(strapi.app, {
30
- directory,
31
- locales: strapi.config.get('middleware.settings.language.locales', []),
32
- defaultLocale,
33
- modes,
34
- cookieName,
35
- extension: '.json',
36
- })
37
- );
38
- },
39
- };
40
- };
@@ -1,5 +0,0 @@
1
- {
2
- "logger": {
3
- "enabled": true
4
- }
5
- }
@@ -1,37 +0,0 @@
1
- 'use strict';
2
- const chalk = require('chalk');
3
-
4
- const codeToColor = code => {
5
- return code >= 500
6
- ? chalk.red(code)
7
- : code >= 400
8
- ? chalk.yellow(code)
9
- : code >= 300
10
- ? chalk.cyan(code)
11
- : code >= 200
12
- ? chalk.green(code)
13
- : code;
14
- };
15
-
16
- /**
17
- * Logger hook
18
- */
19
-
20
- module.exports = strapi => {
21
- return {
22
- /**
23
- * Initialize the hook
24
- */
25
- initialize() {
26
- strapi.app.context.log = strapi.log;
27
-
28
- strapi.app.use(async (ctx, next) => {
29
- const start = Date.now();
30
- await next();
31
- const delta = Math.ceil(Date.now() - start);
32
-
33
- strapi.log.http(`${ctx.method} ${ctx.url} (${delta} ms) ${codeToColor(ctx.status)}`);
34
- });
35
- },
36
- };
37
- };
@@ -1,11 +0,0 @@
1
- {
2
- "parser": {
3
- "enabled": true,
4
- "multipart": true,
5
- "queryStringParser": {
6
- "strictNullHandling": true,
7
- "arrayLimit": 100,
8
- "depth": 20
9
- }
10
- }
11
- }
@@ -1,71 +0,0 @@
1
- 'use strict';
2
-
3
- const body = require('koa-body');
4
- const qs = require('qs');
5
- const { omit } = require('lodash');
6
-
7
- /**
8
- * Body parser hook
9
- */
10
- const addQsParser = (app, settings) => {
11
- Object.defineProperty(app.request, 'query', {
12
- configurable: false,
13
- enumerable: true,
14
- /*
15
- * Get parsed query-string.
16
- */
17
- get() {
18
- const qstr = this.querystring;
19
- const cache = (this._querycache = this._querycache || {});
20
- return cache[qstr] || (cache[qstr] = qs.parse(qstr, settings));
21
- },
22
-
23
- /*
24
- * Set query-string as an object.
25
- */
26
- set(obj) {
27
- this.querystring = qs.stringify(obj);
28
- },
29
- });
30
-
31
- return app;
32
- };
33
-
34
- module.exports = strapi => {
35
- return {
36
- /**
37
- * Initialize the hook
38
- */
39
- initialize() {
40
- strapi.app.use(async (ctx, next) => {
41
- // disable for graphql
42
- // TODO: find a better way later
43
- if (ctx.url === '/graphql') {
44
- return next();
45
- }
46
-
47
- try {
48
- const res = await body({
49
- patchKoa: true,
50
- ...omit(strapi.config.middleware.settings.parser, 'queryStringParser'),
51
- })(ctx, next);
52
- return res;
53
- } catch (e) {
54
- if ((e || {}).message && e.message.includes('maxFileSize exceeded')) {
55
- throw strapi.errors.entityTooLarge('FileTooBig', {
56
- errors: [
57
- {
58
- id: 'Upload.status.sizeLimit',
59
- message: `file is bigger than the limit size!`,
60
- },
61
- ],
62
- });
63
- }
64
- throw e;
65
- }
66
- });
67
-
68
- addQsParser(strapi.app, strapi.config.get('middleware.settings.parser.queryStringParser'));
69
- },
70
- };
71
- };
@@ -1,5 +0,0 @@
1
- {
2
- "poweredBy": {
3
- "enabled": true
4
- }
5
- }
@@ -1,16 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = strapi => {
4
- return {
5
- initialize() {
6
- strapi.app.use(async (ctx, next) => {
7
- await next();
8
-
9
- ctx.set(
10
- 'X-Powered-By',
11
- strapi.config.get('middleware.settings.poweredBy.value', 'Strapi <strapi.io>')
12
- );
13
- });
14
- },
15
- };
16
- };
@@ -1,8 +0,0 @@
1
- {
2
- "public": {
3
- "enabled": true,
4
- "maxAge": 60000,
5
- "path": "./public",
6
- "defaultIndex": true
7
- }
8
- }
@@ -1,5 +0,0 @@
1
- {
2
- "responseTime": {
3
- "enabled": true
4
- }
5
- }
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * X-Response-Time hook
5
- */
6
-
7
- module.exports = strapi => {
8
- return {
9
- /**
10
- * Initialize the hook
11
- */
12
-
13
- initialize() {
14
- strapi.app.use(async (ctx, next) => {
15
- const start = Date.now();
16
-
17
- await next();
18
-
19
- const delta = Math.ceil(Date.now() - start);
20
-
21
- ctx.set('X-Response-Time', delta + 'ms'); // eslint-disable-line prefer-template
22
- });
23
- },
24
- };
25
- };
@@ -1,5 +0,0 @@
1
- {
2
- "responses": {
3
- "enabled": true
4
- }
5
- }
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash');
4
-
5
- module.exports = strapi => {
6
- return {
7
- initialize() {
8
- strapi.app.use(async (ctx, next) => {
9
- await next();
10
-
11
- const responseFn = strapi.config.get(['functions', 'responses', ctx.status]);
12
- if (_.isFunction(responseFn)) {
13
- await responseFn(ctx);
14
- }
15
- });
16
- },
17
- };
18
- };
@@ -1,7 +0,0 @@
1
- {
2
- "router": {
3
- "enabled": true,
4
- "prefix": "",
5
- "routes": {}
6
- }
7
- }
@@ -1,56 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Module dependencies
5
- */
6
-
7
- // Public node modules.
8
- const _ = require('lodash');
9
- const Router = require('koa-router');
10
- const createEndpointComposer = require('./utils/composeEndpoint');
11
- /**
12
- * Router hook
13
- */
14
-
15
- module.exports = strapi => {
16
- const composeEndpoint = createEndpointComposer(strapi);
17
-
18
- return {
19
- initialize() {
20
- _.forEach(strapi.config.routes, value => {
21
- composeEndpoint(value, { router: strapi.router });
22
- });
23
-
24
- strapi.router.prefix(strapi.config.get('middleware.settings.router.prefix', ''));
25
-
26
- if (_.has(strapi.admin, 'config.routes')) {
27
- const router = new Router({ prefix: '/admin' });
28
-
29
- _.get(strapi.admin, 'config.routes', []).forEach(route => {
30
- composeEndpoint(route, { plugin: 'admin', router });
31
- });
32
-
33
- // Mount admin router on Strapi router
34
- strapi.app.use(router.routes()).use(router.allowedMethods());
35
- }
36
-
37
- if (strapi.plugins) {
38
- // Parse each plugin's routes.
39
- _.forEach(strapi.plugins, (plugin, pluginName) => {
40
- const router = new Router({ prefix: `/${pluginName}` });
41
-
42
- (plugin.routes || []).forEach(route => {
43
- const hasPrefix = _.has(route.config, 'prefix');
44
- composeEndpoint(route, {
45
- plugin: pluginName,
46
- router: hasPrefix ? strapi.router : router,
47
- });
48
- });
49
-
50
- // Mount plugin router
51
- strapi.app.use(router.routes()).use(router.allowedMethods());
52
- });
53
- }
54
- },
55
- };
56
- };
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash');
4
- const compose = require('koa-compose');
5
- const createRouteChecker = require('./routerChecker');
6
-
7
- module.exports = strapi => {
8
- const routerChecker = createRouteChecker(strapi);
9
-
10
- return (value, { plugin, router }) => {
11
- if (_.isEmpty(_.get(value, 'method')) || _.isEmpty(_.get(value, 'path'))) {
12
- return;
13
- }
14
-
15
- const { method, endpoint, policies, action } = routerChecker(value, plugin);
16
-
17
- if (_.isUndefined(action) || !_.isFunction(action)) {
18
- return strapi.log.warn(
19
- `Ignored attempt to bind route '${value.method} ${value.path}' to unknown controller/action.`
20
- );
21
- }
22
-
23
- router[method](endpoint, compose(policies), action);
24
- };
25
- };