@strapi/strapi 4.0.0-next.6 → 4.0.0

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 (166) hide show
  1. package/README.md +12 -12
  2. package/bin/strapi.js +41 -60
  3. package/lib/Strapi.js +234 -114
  4. package/lib/commands/build.js +16 -6
  5. package/lib/commands/console.js +1 -1
  6. package/lib/commands/content-types/list.js +22 -0
  7. package/lib/commands/develop.js +17 -18
  8. package/lib/commands/generate-template.js +4 -5
  9. package/lib/commands/hooks/list.js +22 -0
  10. package/lib/commands/middlewares/list.js +22 -0
  11. package/lib/commands/new.js +3 -1
  12. package/lib/commands/policies/list.js +22 -0
  13. package/lib/commands/routes/list.js +28 -0
  14. package/lib/commands/services/list.js +22 -0
  15. package/lib/commands/watchAdmin.js +18 -8
  16. package/lib/container.js +6 -6
  17. package/lib/core/app-configuration/config-loader.js +1 -37
  18. package/lib/core/app-configuration/index.js +6 -46
  19. package/lib/core/app-configuration/load-config-file.js +43 -0
  20. package/lib/core/bootstrap.js +5 -117
  21. package/lib/core/domain/component/index.js +24 -0
  22. package/lib/core/domain/component/validator.js +29 -0
  23. package/lib/core/domain/content-type/index.js +140 -0
  24. package/lib/core/domain/content-type/validator.js +64 -0
  25. package/lib/core/domain/module/index.js +108 -0
  26. package/lib/core/domain/module/validation.js +33 -0
  27. package/lib/core/loaders/admin.js +16 -0
  28. package/lib/core/loaders/apis.js +159 -0
  29. package/lib/core/{load-components.js → loaders/components.js} +5 -7
  30. package/lib/core/loaders/index.js +11 -0
  31. package/lib/core/loaders/middlewares.js +36 -0
  32. package/lib/core/loaders/plugins/get-enabled-plugins.js +116 -0
  33. package/lib/core/loaders/plugins/index.js +123 -0
  34. package/lib/core/loaders/policies.js +28 -0
  35. package/lib/core/loaders/src-index.js +39 -0
  36. package/lib/core/registries/apis.js +29 -0
  37. package/lib/core/{app-configuration/config-provider.js → registries/config.js} +4 -11
  38. package/lib/core/registries/content-types.js +97 -0
  39. package/lib/core/registries/controllers.d.ts +7 -0
  40. package/lib/core/registries/controllers.js +114 -0
  41. package/lib/core/registries/hooks.d.ts +20 -0
  42. package/lib/core/registries/hooks.js +87 -0
  43. package/lib/core/registries/middlewares.d.ts +5 -0
  44. package/lib/core/registries/middlewares.js +89 -0
  45. package/lib/core/registries/modules.js +44 -0
  46. package/lib/core/registries/plugins.js +28 -0
  47. package/lib/core/registries/policies.d.ts +9 -0
  48. package/lib/core/registries/policies.js +89 -0
  49. package/lib/core/registries/services.d.ts +7 -0
  50. package/lib/core/registries/services.js +114 -0
  51. package/lib/core/utils.js +35 -0
  52. package/lib/core-api/controller/collection-type.js +45 -26
  53. package/lib/core-api/controller/index.d.ts +25 -0
  54. package/lib/core-api/controller/index.js +33 -11
  55. package/lib/core-api/controller/single-type.js +29 -15
  56. package/lib/core-api/controller/transform.js +62 -6
  57. package/lib/core-api/routes/index.js +71 -0
  58. package/lib/core-api/service/collection-type.js +43 -21
  59. package/lib/core-api/service/index.d.ts +21 -0
  60. package/lib/core-api/service/index.js +8 -67
  61. package/lib/core-api/service/pagination.js +130 -0
  62. package/lib/core-api/service/single-type.js +17 -19
  63. package/lib/factories.d.ts +48 -0
  64. package/lib/factories.js +84 -0
  65. package/lib/index.d.ts +10 -31
  66. package/lib/index.js +5 -1
  67. package/lib/middlewares/body.js +33 -0
  68. package/lib/middlewares/compression.js +8 -0
  69. package/lib/middlewares/cors.js +58 -0
  70. package/lib/middlewares/errors.js +40 -0
  71. package/lib/middlewares/favicon.js +19 -0
  72. package/lib/middlewares/index.d.ts +5 -0
  73. package/lib/middlewares/index.js +30 -117
  74. package/lib/middlewares/ip.js +8 -0
  75. package/lib/middlewares/logger.js +27 -0
  76. package/lib/middlewares/powered-by.js +20 -0
  77. package/lib/middlewares/public/index.js +98 -73
  78. package/lib/middlewares/query.js +46 -0
  79. package/lib/middlewares/response-time.js +15 -0
  80. package/lib/middlewares/responses.js +19 -0
  81. package/lib/middlewares/security.js +51 -0
  82. package/lib/middlewares/session/index.js +6 -6
  83. package/lib/migrations/draft-publish.js +57 -0
  84. package/lib/services/auth/index.js +87 -0
  85. package/lib/services/core-store.js +64 -51
  86. package/lib/services/cron.js +54 -0
  87. package/lib/services/entity-service/attributes/index.js +31 -0
  88. package/lib/services/entity-service/attributes/transforms.js +20 -0
  89. package/lib/services/entity-service/components.js +39 -15
  90. package/lib/services/entity-service/index.d.ts +91 -0
  91. package/lib/services/entity-service/index.js +120 -59
  92. package/lib/services/entity-service/params.js +52 -94
  93. package/lib/services/entity-validator/index.js +76 -43
  94. package/lib/services/entity-validator/validators.js +129 -43
  95. package/lib/services/errors.js +77 -0
  96. package/lib/{core → services}/fs.js +10 -2
  97. package/lib/services/metrics/index.js +41 -38
  98. package/lib/services/metrics/sender.js +2 -2
  99. package/lib/services/server/admin-api.js +14 -0
  100. package/lib/services/server/api.js +36 -0
  101. package/lib/services/server/compose-endpoint.js +141 -0
  102. package/lib/services/server/content-api.js +16 -0
  103. package/lib/{server.js → services/server/http-server.js} +0 -0
  104. package/lib/services/server/index.js +127 -0
  105. package/lib/services/server/koa.js +64 -0
  106. package/lib/services/server/middleware.js +122 -0
  107. package/lib/services/server/policy.js +32 -0
  108. package/lib/services/server/register-middlewares.js +110 -0
  109. package/lib/services/server/register-routes.js +106 -0
  110. package/lib/services/server/routing.js +120 -0
  111. package/lib/services/utils/upload-files.js +1 -1
  112. package/lib/services/webhook-runner.js +1 -1
  113. package/lib/utils/ee.js +3 -3
  114. package/lib/utils/get-dirs.js +17 -0
  115. package/lib/utils/index.js +2 -0
  116. package/lib/utils/is-initialized.js +1 -1
  117. package/lib/utils/run-checks.js +0 -15
  118. package/lib/utils/signals.js +24 -0
  119. package/lib/utils/startup-logger.js +2 -2
  120. package/lib/utils/update-notifier/index.js +3 -2
  121. package/package.json +93 -96
  122. package/lib/commands/generate.js +0 -76
  123. package/lib/core/index.js +0 -17
  124. package/lib/core/load-apis.js +0 -20
  125. package/lib/core/load-extensions.js +0 -71
  126. package/lib/core/load-functions.js +0 -21
  127. package/lib/core/load-middlewares.js +0 -130
  128. package/lib/core/load-modules.js +0 -55
  129. package/lib/core/load-plugins.js +0 -68
  130. package/lib/core/load-policies.js +0 -36
  131. package/lib/core/walk.js +0 -27
  132. package/lib/core-api/index.js +0 -39
  133. package/lib/load/check-reserved-filename.js +0 -10
  134. package/lib/load/load-config-files.js +0 -22
  135. package/lib/load/require-file-parse.js +0 -15
  136. package/lib/middlewares/boom/defaults.json +0 -5
  137. package/lib/middlewares/boom/index.js +0 -147
  138. package/lib/middlewares/cors/index.js +0 -66
  139. package/lib/middlewares/cron/defaults.json +0 -5
  140. package/lib/middlewares/cron/index.js +0 -43
  141. package/lib/middlewares/favicon/defaults.json +0 -7
  142. package/lib/middlewares/favicon/index.js +0 -32
  143. package/lib/middlewares/gzip/defaults.json +0 -6
  144. package/lib/middlewares/gzip/index.js +0 -19
  145. package/lib/middlewares/helmet/defaults.json +0 -18
  146. package/lib/middlewares/helmet/index.js +0 -9
  147. package/lib/middlewares/ip/defaults.json +0 -7
  148. package/lib/middlewares/ip/index.js +0 -25
  149. package/lib/middlewares/language/defaults.json +0 -9
  150. package/lib/middlewares/language/index.js +0 -40
  151. package/lib/middlewares/logger/defaults.json +0 -5
  152. package/lib/middlewares/logger/index.js +0 -37
  153. package/lib/middlewares/parser/defaults.json +0 -11
  154. package/lib/middlewares/parser/index.js +0 -71
  155. package/lib/middlewares/poweredBy/defaults.json +0 -5
  156. package/lib/middlewares/poweredBy/index.js +0 -16
  157. package/lib/middlewares/public/defaults.json +0 -8
  158. package/lib/middlewares/responseTime/defaults.json +0 -5
  159. package/lib/middlewares/responseTime/index.js +0 -25
  160. package/lib/middlewares/responses/defaults.json +0 -5
  161. package/lib/middlewares/responses/index.js +0 -18
  162. package/lib/middlewares/router/defaults.json +0 -7
  163. package/lib/middlewares/router/index.js +0 -64
  164. package/lib/middlewares/router/utils/composeEndpoint.js +0 -25
  165. package/lib/middlewares/router/utils/routerChecker.js +0 -92
  166. package/lib/utils/get-prefixed-dependencies.js +0 -7
@@ -1,36 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const path = require('path');
5
- const _ = require('lodash');
6
- const fse = require('fs-extra');
7
-
8
- module.exports = dir => {
9
- if (!fse.existsSync(dir)) return {};
10
-
11
- const root = {};
12
- const paths = fse.readdirSync(dir, { withFileTypes: true }).filter(fd => fd.isFile());
13
-
14
- for (let fd of paths) {
15
- const { name } = fd;
16
- const fullPath = dir + path.sep + name;
17
-
18
- const ext = path.extname(name);
19
- const key = path.basename(name, ext);
20
- root[_.toLower(key)] = loadPolicy(fullPath);
21
- }
22
-
23
- return root;
24
- };
25
-
26
- const loadPolicy = file => {
27
- try {
28
- const policy = require(file);
29
-
30
- assert(typeof policy === 'function', 'Policy must be a function.');
31
-
32
- return policy;
33
- } catch (error) {
34
- throw `Could not load policy ${file}: ${error.message}`;
35
- }
36
- };
package/lib/core/walk.js DELETED
@@ -1,27 +0,0 @@
1
- 'use strict';
2
-
3
- const assert = require('assert');
4
- const path = require('path');
5
- const fse = require('fs-extra');
6
-
7
- module.exports = function walk(dir, { loader } = {}) {
8
- assert(typeof loader === 'function', 'opts.loader must be a function');
9
-
10
- const root = {};
11
- const paths = fse.readdirSync(dir, { withFileTypes: true });
12
-
13
- for (let fd of paths) {
14
- const { name } = fd;
15
- const fullPath = dir + path.sep + name;
16
-
17
- if (fd.isDirectory()) {
18
- root[name] = walk(fullPath, { loader });
19
- } else {
20
- const ext = path.extname(name);
21
- const key = path.basename(name, ext);
22
- root[key] = loader(fullPath);
23
- }
24
- }
25
-
26
- return root;
27
- };
@@ -1,39 +0,0 @@
1
- /**
2
- * Core API
3
- */
4
- 'use strict';
5
-
6
- const _ = require('lodash');
7
-
8
- const createController = require('./controller');
9
- const { createService } = require('./service');
10
-
11
- /**
12
- * Returns a service and a controller built based on the content type passed
13
- *
14
- * @param {object} opts options
15
- * @param {object} opts.api api
16
- * @param {object} opts.model model
17
- * @param {object} opts.strapi strapi
18
- * @returns {object} controller & service
19
- */
20
- function createCoreApi({ api, model, strapi }) {
21
- const { modelName } = model;
22
-
23
- // find corresponding service and controller
24
- const userService = _.get(api, ['services', modelName], {});
25
- const userController = _.get(api, ['controllers', modelName], {});
26
-
27
- const service = Object.assign(createService({ model, strapi }), userService);
28
-
29
- const controller = Object.assign(createController({ service, model }), userController);
30
-
31
- return {
32
- service,
33
- controller,
34
- };
35
- }
36
-
37
- module.exports = {
38
- createCoreApi,
39
- };
@@ -1,10 +0,0 @@
1
- 'use strict';
2
-
3
- const _ = require('lodash');
4
-
5
- // files to load with filename key
6
- const prefixedPaths = ['functions', 'policies', 'locales', 'middleware', 'language', 'layout'];
7
-
8
- module.exports = function checkReservedFilenames(file) {
9
- return _.some(prefixedPaths, e => file.indexOf(`config/${e}`) >= 0) ? true : false;
10
- };
@@ -1,22 +0,0 @@
1
- 'use strict';
2
-
3
- const loadFiles = require('./load-files');
4
- const requireFileAndParse = require('./require-file-parse');
5
- const checkReservedFilename = require('./check-reserved-filename');
6
-
7
- /**
8
- * @param {string} dir - directory from which to load configs
9
- * @param {string} pattern - glob pattern to search for config files
10
- */
11
- const loadConfigFiles = (dir, pattern = 'config/**/*.+(js|json)') =>
12
- loadFiles(dir, pattern, {
13
- requireFn: requireFileAndParse,
14
- shouldUseFileNameAsKey: checkReservedFilename,
15
- globArgs: {
16
- // used to load .init.json at first startup
17
- dot: true,
18
- ignore: ['config/**/*.test.js'],
19
- },
20
- });
21
-
22
- module.exports = loadConfigFiles;
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- const path = require('path');
4
- const { templateConfiguration } = require('@strapi/utils');
5
-
6
- /**
7
- * Requires a file and eval expression if it is a json
8
- * @param {string} filePath - file path
9
- */
10
- module.exports = filePath => {
11
- if (path.extname(filePath) === '.json') {
12
- return templateConfiguration(require(filePath));
13
- }
14
- return require(filePath);
15
- };
@@ -1,5 +0,0 @@
1
- {
2
- "boom": {
3
- "enabled": true
4
- }
5
- }
@@ -1,147 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Boom hook
5
- */
6
-
7
- // Public node modules.
8
- const _ = require('lodash');
9
- const Boom = require('boom');
10
- const delegate = require('delegates');
11
-
12
- const boomMethods = [
13
- 'badRequest',
14
- 'unauthorized',
15
- 'paymentRequired',
16
- 'forbidden',
17
- 'notFound',
18
- 'methodNotAllowed',
19
- 'notAcceptable',
20
- 'proxyAuthRequired',
21
- 'clientTimeout',
22
- 'conflict',
23
- 'resourceGone',
24
- 'lengthRequired',
25
- 'preconditionFailed',
26
- 'entityTooLarge',
27
- 'uriTooLong',
28
- 'unsupportedMediaType',
29
- 'rangeNotSatisfiable',
30
- 'expectationFailed',
31
- 'teapot',
32
- 'badData',
33
- 'locked',
34
- 'failedDependency',
35
- 'preconditionRequired',
36
- 'tooManyRequests',
37
- 'illegal',
38
- 'badImplementation',
39
- 'notImplemented',
40
- 'badGateway',
41
- 'serverUnavailable',
42
- 'gatewayTimeout',
43
- ];
44
-
45
- const formatBoomPayload = boomError => {
46
- if (!Boom.isBoom(boomError)) {
47
- boomError = Boom.boomify(boomError, {
48
- statusCode: boomError.status || 500,
49
- });
50
- }
51
-
52
- const { output } = boomError;
53
-
54
- if (output.statusCode < 500 && !_.isNil(boomError.data)) {
55
- output.payload.data = boomError.data;
56
- }
57
-
58
- return { status: output.statusCode, body: output.payload };
59
- };
60
-
61
- module.exports = strapi => {
62
- return {
63
- /**
64
- * Initialize the hook
65
- */
66
-
67
- initialize() {
68
- this.delegator = delegate(strapi.app.context, 'response');
69
- this.createResponses();
70
-
71
- strapi.errors = Boom;
72
- strapi.app.use(async (ctx, next) => {
73
- try {
74
- // App logic.
75
- await next();
76
- } catch (error) {
77
- // emit error if configured
78
- if (strapi.config.get('server.emitErrors', false)) {
79
- strapi.app.emit('error', error, ctx);
80
- }
81
-
82
- // Log error.
83
-
84
- const { status, body } = formatBoomPayload(error);
85
-
86
- if (status >= 500) {
87
- strapi.log.error(error);
88
- }
89
-
90
- ctx.body = body;
91
- ctx.status = status;
92
- }
93
- });
94
-
95
- strapi.app.use(async (ctx, next) => {
96
- await next();
97
- // Empty body is considered as `notFound` response.
98
- if (_.isNil(ctx.body) && _.isNil(ctx.status)) {
99
- ctx.notFound();
100
- }
101
- });
102
- },
103
-
104
- // Custom function to avoid ctx.body repeat
105
- createResponses() {
106
- boomMethods.forEach(method => {
107
- strapi.app.response[method] = function(msg, ...rest) {
108
- const boomError = Boom[method](msg, ...rest) || {};
109
-
110
- const { status, body } = formatBoomPayload(boomError);
111
-
112
- // keep retro-compatibility for old error formats
113
- body.message = msg || body.data || body.message;
114
-
115
- this.body = body;
116
- this.status = status;
117
- };
118
-
119
- this.delegator.method(method);
120
- });
121
-
122
- strapi.app.response.send = function(data, status = 200) {
123
- this.status = status;
124
- this.body = data;
125
- };
126
-
127
- strapi.app.response.created = function(data) {
128
- this.status = 201;
129
- this.body = data;
130
- };
131
-
132
- strapi.app.response.deleted = function(data) {
133
- if (_.isNil(data)) {
134
- this.status = 204;
135
- } else {
136
- this.status = 200;
137
- this.body = data;
138
- }
139
- };
140
-
141
- this.delegator
142
- .method('send')
143
- .method('created')
144
- .method('deleted');
145
- },
146
- };
147
- };
@@ -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
- }