@adonisjs/core 6.1.5-1 → 6.1.5-3
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/build/commands/build.d.ts +3 -0
- package/build/commands/build.d.ts.map +1 -0
- package/build/commands/build.js +22 -2
- package/build/commands/commands.json +1 -1
- package/build/commands/configure.d.ts +1 -0
- package/build/commands/configure.d.ts.map +1 -0
- package/build/commands/configure.js +2 -1
- package/build/commands/eject.d.ts +1 -0
- package/build/commands/eject.d.ts.map +1 -0
- package/build/commands/eject.js +2 -1
- package/build/commands/generate_key.d.ts +1 -0
- package/build/commands/generate_key.d.ts.map +1 -0
- package/build/commands/generate_key.js +2 -1
- package/build/commands/inspect_rcfile.d.ts +7 -0
- package/build/commands/inspect_rcfile.d.ts.map +1 -0
- package/build/commands/inspect_rcfile.js +10 -0
- package/build/commands/list/routes.d.ts +14 -0
- package/build/commands/list/routes.d.ts.map +1 -0
- package/build/commands/list/routes.js +79 -0
- package/build/commands/make/_base.d.ts +23 -1
- package/build/commands/make/_base.d.ts.map +1 -0
- package/build/commands/make/_base.js +11 -2
- package/build/commands/make/command.d.ts +1 -0
- package/build/commands/make/command.d.ts.map +1 -0
- package/build/commands/make/command.js +2 -1
- package/build/commands/make/controller.d.ts +1 -0
- package/build/commands/make/controller.d.ts.map +1 -0
- package/build/commands/make/controller.js +2 -1
- package/build/commands/make/event.d.ts +1 -0
- package/build/commands/make/event.d.ts.map +1 -0
- package/build/commands/make/event.js +2 -1
- package/build/commands/make/listener.d.ts +1 -0
- package/build/commands/make/listener.d.ts.map +1 -0
- package/build/commands/make/listener.js +2 -1
- package/build/commands/make/middleware.d.ts +1 -0
- package/build/commands/make/middleware.d.ts.map +1 -0
- package/build/commands/make/middleware.js +2 -1
- package/build/commands/make/prldfile.d.ts +9 -0
- package/build/commands/make/prldfile.d.ts.map +1 -0
- package/build/commands/make/prldfile.js +28 -0
- package/build/commands/make/provider.d.ts +1 -0
- package/build/commands/make/provider.d.ts.map +1 -0
- package/build/commands/make/provider.js +5 -2
- package/build/commands/make/service.d.ts +9 -0
- package/build/commands/make/service.d.ts.map +1 -0
- package/build/commands/make/service.js +26 -0
- package/build/commands/make/test.d.ts +1 -0
- package/build/commands/make/test.d.ts.map +1 -0
- package/build/commands/make/test.js +2 -1
- package/build/commands/serve.d.ts +3 -0
- package/build/commands/serve.d.ts.map +1 -0
- package/build/commands/serve.js +21 -1
- package/build/commands/test.d.ts +21 -0
- package/build/commands/test.d.ts.map +1 -0
- package/build/commands/test.js +156 -0
- package/build/factories/app.d.ts +1 -0
- package/build/factories/app.d.ts.map +1 -0
- package/build/factories/bodyparser.d.ts +1 -0
- package/build/factories/bodyparser.d.ts.map +1 -0
- package/build/factories/core/ace.d.ts +1 -0
- package/build/factories/core/ace.d.ts.map +1 -0
- package/build/factories/core/ignitor.d.ts +1 -0
- package/build/factories/core/ignitor.d.ts.map +1 -0
- package/build/factories/core/main.d.ts +1 -0
- package/build/factories/core/main.d.ts.map +1 -0
- package/build/factories/core/test_utils.d.ts +1 -0
- package/build/factories/core/test_utils.d.ts.map +1 -0
- package/build/factories/encryption.d.ts +1 -0
- package/build/factories/encryption.d.ts.map +1 -0
- package/build/factories/events.d.ts +1 -0
- package/build/factories/events.d.ts.map +1 -0
- package/build/factories/hash.d.ts +1 -0
- package/build/factories/hash.d.ts.map +1 -0
- package/build/factories/http.d.ts +1 -0
- package/build/factories/http.d.ts.map +1 -0
- package/build/factories/logger.d.ts +1 -0
- package/build/factories/logger.d.ts.map +1 -0
- package/build/factories/stubs.d.ts +1 -0
- package/build/factories/stubs.d.ts.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -0
- package/build/legacy/validator.d.ts +1 -0
- package/build/legacy/validator.d.ts.map +1 -0
- package/build/modules/ace/commands.d.ts +1 -0
- package/build/modules/ace/commands.d.ts.map +1 -0
- package/build/modules/ace/commands.js +4 -2
- package/build/modules/ace/create_kernel.d.ts +1 -0
- package/build/modules/ace/create_kernel.d.ts.map +1 -0
- package/build/modules/ace/kernel.d.ts +1 -0
- package/build/modules/ace/kernel.d.ts.map +1 -0
- package/build/modules/ace/main.d.ts +2 -1
- package/build/modules/ace/main.d.ts.map +1 -0
- package/build/modules/ace/main.js +1 -1
- package/build/modules/ace/shell.d.ts +1 -0
- package/build/modules/ace/shell.d.ts.map +1 -0
- package/build/modules/app.d.ts +1 -0
- package/build/modules/app.d.ts.map +1 -0
- package/build/modules/bodyparser/bodyparser_middleware.d.ts +1 -0
- package/build/modules/bodyparser/bodyparser_middleware.d.ts.map +1 -0
- package/build/modules/bodyparser/main.d.ts +1 -0
- package/build/modules/bodyparser/main.d.ts.map +1 -0
- package/build/modules/config.d.ts +1 -0
- package/build/modules/config.d.ts.map +1 -0
- package/build/modules/container.d.ts +1 -0
- package/build/modules/container.d.ts.map +1 -0
- package/build/modules/encryption.d.ts +1 -0
- package/build/modules/encryption.d.ts.map +1 -0
- package/build/modules/env.d.ts +1 -0
- package/build/modules/env.d.ts.map +1 -0
- package/build/modules/events.d.ts +1 -0
- package/build/modules/events.d.ts.map +1 -0
- package/build/modules/hash/define_config.d.ts +1 -0
- package/build/modules/hash/define_config.d.ts.map +1 -0
- package/build/modules/hash/drivers_collection.d.ts +4 -4
- package/build/modules/hash/drivers_collection.d.ts.map +1 -0
- package/build/modules/hash/drivers_collection.js +2 -8
- package/build/modules/hash/main.d.ts +2 -0
- package/build/modules/hash/main.d.ts.map +1 -0
- package/build/modules/hash/main.js +1 -0
- package/build/modules/http.d.ts +1 -0
- package/build/modules/http.d.ts.map +1 -0
- package/build/modules/logger.d.ts +1 -0
- package/build/modules/logger.d.ts.map +1 -0
- package/build/providers/app_provider.d.ts +1 -0
- package/build/providers/app_provider.d.ts.map +1 -0
- package/build/providers/app_provider.js +5 -7
- package/build/providers/hash_provider.d.ts +1 -0
- package/build/providers/hash_provider.d.ts.map +1 -0
- package/build/providers/hash_provider.js +7 -6
- package/build/providers/http_provider.d.ts +1 -0
- package/build/providers/http_provider.d.ts.map +1 -0
- package/build/services/ace.d.ts +1 -0
- package/build/services/ace.d.ts.map +1 -0
- package/build/services/app.d.ts +1 -0
- package/build/services/app.d.ts.map +1 -0
- package/build/services/config.d.ts +1 -0
- package/build/services/config.d.ts.map +1 -0
- package/build/services/emitter.d.ts +1 -0
- package/build/services/emitter.d.ts.map +1 -0
- package/build/services/emitter.js +1 -2
- package/build/services/encryption.d.ts +1 -0
- package/build/services/encryption.d.ts.map +1 -0
- package/build/services/encryption.js +1 -2
- package/build/services/hash.d.ts +1 -0
- package/build/services/hash.d.ts.map +1 -0
- package/build/services/hash.js +1 -2
- package/build/services/logger.d.ts +1 -0
- package/build/services/logger.d.ts.map +1 -0
- package/build/services/logger.js +1 -2
- package/build/services/router.d.ts +1 -0
- package/build/services/router.d.ts.map +1 -0
- package/build/services/router.js +1 -2
- package/build/services/server.d.ts +1 -0
- package/build/services/server.d.ts.map +1 -0
- package/build/services/server.js +1 -2
- package/build/services/test_utils.d.ts +1 -0
- package/build/services/test_utils.d.ts.map +1 -0
- package/build/src/cli_formatters/routes_list.d.ts +41 -0
- package/build/src/cli_formatters/routes_list.d.ts.map +1 -0
- package/build/src/cli_formatters/routes_list.js +258 -0
- package/build/src/debug.d.ts +1 -0
- package/build/src/debug.d.ts.map +1 -0
- package/build/src/helpers/is.d.ts +1 -0
- package/build/src/helpers/is.d.ts.map +1 -0
- package/build/src/helpers/main.d.ts +3 -0
- package/build/src/helpers/main.d.ts.map +1 -0
- package/build/src/helpers/main.js +2 -0
- package/build/src/helpers/parse_binding_reference.d.ts +6 -0
- package/build/src/helpers/parse_binding_reference.d.ts.map +1 -0
- package/build/src/helpers/parse_binding_reference.js +23 -0
- package/build/src/helpers/string.d.ts +3 -0
- package/build/src/helpers/string.d.ts.map +1 -0
- package/build/src/helpers/string.js +4 -0
- package/build/src/helpers/types.d.ts +1 -0
- package/build/src/helpers/types.d.ts.map +1 -0
- package/build/src/ignitor/ace.d.ts +1 -0
- package/build/src/ignitor/ace.d.ts.map +1 -0
- package/build/src/ignitor/http.d.ts +1 -0
- package/build/src/ignitor/http.d.ts.map +1 -0
- package/build/src/ignitor/main.d.ts +1 -0
- package/build/src/ignitor/main.d.ts.map +1 -0
- package/build/src/ignitor/test.d.ts +1 -0
- package/build/src/ignitor/test.d.ts.map +1 -0
- package/build/src/internal_helpers.d.ts +1 -0
- package/build/src/internal_helpers.d.ts.map +1 -0
- package/build/src/internal_helpers.js +3 -3
- package/build/src/test_utils/http.d.ts +1 -0
- package/build/src/test_utils/http.d.ts.map +1 -0
- package/build/src/test_utils/main.d.ts +2 -1
- package/build/src/test_utils/main.d.ts.map +1 -0
- package/build/src/types.d.ts +3 -2
- package/build/src/types.d.ts.map +1 -0
- package/build/stubs/index.d.ts +1 -0
- package/build/stubs/index.d.ts.map +1 -0
- package/build/stubs/make/preload_file/main.stub +4 -0
- package/build/stubs/make/service/main.stub +4 -0
- package/build/toolkit/commands/index_commands.d.ts +1 -0
- package/build/toolkit/commands/index_commands.d.ts.map +1 -0
- package/build/toolkit/commands/index_commands.js +2 -1
- package/build/toolkit/main.d.ts +1 -0
- package/build/toolkit/main.d.ts.map +1 -0
- package/build/types/ace.d.ts +1 -0
- package/build/types/ace.d.ts.map +1 -0
- package/build/types/app.d.ts +1 -0
- package/build/types/app.d.ts.map +1 -0
- package/build/types/bodyparser.d.ts +1 -0
- package/build/types/bodyparser.d.ts.map +1 -0
- package/build/types/container.d.ts +1 -0
- package/build/types/container.d.ts.map +1 -0
- package/build/types/encryption.d.ts +1 -0
- package/build/types/encryption.d.ts.map +1 -0
- package/build/types/events.d.ts +1 -0
- package/build/types/events.d.ts.map +1 -0
- package/build/types/hash.d.ts +1 -0
- package/build/types/hash.d.ts.map +1 -0
- package/build/types/http.d.ts +1 -0
- package/build/types/http.d.ts.map +1 -0
- package/build/types/logger.d.ts +1 -0
- package/build/types/logger.d.ts.map +1 -0
- package/commands/build.ts +122 -0
- package/commands/configure.ts +179 -0
- package/commands/eject.ts +39 -0
- package/commands/generate_key.ts +53 -0
- package/commands/inspect_rcfile.ts +23 -0
- package/commands/list/routes.ts +121 -0
- package/commands/make/_base.ts +55 -0
- package/commands/make/command.ts +33 -0
- package/commands/make/controller.ts +77 -0
- package/commands/make/event.ts +33 -0
- package/commands/make/listener.ts +63 -0
- package/commands/make/middleware.ts +34 -0
- package/commands/make/prldfile.ts +40 -0
- package/commands/make/provider.ts +40 -0
- package/commands/make/service.ts +33 -0
- package/commands/make/test.ts +115 -0
- package/commands/serve.ts +146 -0
- package/commands/test.ts +189 -0
- package/factories/app.ts +10 -0
- package/factories/bodyparser.ts +10 -0
- package/factories/core/ace.ts +38 -0
- package/factories/core/ignitor.ts +132 -0
- package/factories/core/main.ts +13 -0
- package/factories/core/test_utils.ts +34 -0
- package/factories/encryption.ts +10 -0
- package/factories/events.ts +10 -0
- package/factories/hash.ts +10 -0
- package/factories/http.ts +10 -0
- package/factories/logger.ts +10 -0
- package/factories/stubs.ts +53 -0
- package/index.ts +39 -0
- package/legacy/validator.ts +10 -0
- package/modules/ace/commands.ts +152 -0
- package/modules/ace/create_kernel.ts +73 -0
- package/modules/ace/kernel.ts +28 -0
- package/modules/ace/main.ts +22 -0
- package/modules/ace/shell.ts +49 -0
- package/modules/app.ts +10 -0
- package/modules/bodyparser/bodyparser_middleware.ts +16 -0
- package/modules/bodyparser/main.ts +10 -0
- package/modules/config.ts +10 -0
- package/modules/container.ts +10 -0
- package/modules/encryption.ts +10 -0
- package/modules/env.ts +10 -0
- package/modules/events.ts +10 -0
- package/modules/hash/define_config.ts +64 -0
- package/modules/hash/drivers_collection.ts +61 -0
- package/modules/hash/main.ts +12 -0
- package/modules/http.ts +10 -0
- package/modules/logger.ts +10 -0
- package/package.json +43 -36
- package/providers/app_provider.ts +125 -0
- package/providers/hash_provider.ts +58 -0
- package/providers/http_provider.ts +66 -0
- package/services/ace.ts +26 -0
- package/services/app.ts +26 -0
- package/services/config.ts +22 -0
- package/services/emitter.ts +23 -0
- package/services/encryption.ts +23 -0
- package/services/hash.ts +23 -0
- package/services/logger.ts +23 -0
- package/services/router.ts +23 -0
- package/services/server.ts +23 -0
- package/services/test_utils.ts +26 -0
- package/src/cli_formatters/routes_list.ts +480 -0
- package/src/debug.ts +12 -0
- package/src/helpers/is.ts +11 -0
- package/src/helpers/main.ts +13 -0
- package/src/helpers/parse_binding_reference.ts +93 -0
- package/src/helpers/string.ts +89 -0
- package/src/helpers/types.ts +46 -0
- package/src/ignitor/ace.ts +90 -0
- package/src/ignitor/http.ts +167 -0
- package/src/ignitor/main.ts +118 -0
- package/src/ignitor/test.ts +51 -0
- package/src/internal_helpers.ts +59 -0
- package/src/test_utils/http.ts +79 -0
- package/src/test_utils/main.ts +69 -0
- package/src/types.ts +136 -0
- package/types/ace.ts +15 -0
- package/types/app.ts +10 -0
- package/types/bodyparser.ts +10 -0
- package/types/container.ts +10 -0
- package/types/encryption.ts +10 -0
- package/types/events.ts +10 -0
- package/types/hash.ts +10 -0
- package/types/http.ts +10 -0
- package/types/logger.ts +10 -0
- package/build/src/helpers/string_builder.d.ts +0 -23
- package/build/src/helpers/string_builder.js +0 -86
package/src/debug.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { debuglog } from 'node:util'
|
|
11
|
+
|
|
12
|
+
export default debuglog('adonisjs:core')
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export { default as parseImports } from 'parse-imports'
|
|
11
|
+
export { createId as cuid } from '@paralleldrive/cuid2'
|
|
12
|
+
export { safeEqual, compose, base64, fsImportAll, fsReadAll, slash } from '@poppinss/utils'
|
|
13
|
+
export { parseBindingReference } from './parse_binding_reference.js'
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import parseImports from 'parse-imports'
|
|
11
|
+
import { LazyImport, Constructor } from '../../types/http.js'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The "parseBindingReference" method can be used to parse a binding references
|
|
15
|
+
* similar to route controller binding value or event listener binding value.
|
|
16
|
+
*
|
|
17
|
+
* See the following examples to understand how this function works.
|
|
18
|
+
*
|
|
19
|
+
* ### Magic strings
|
|
20
|
+
* ```ts
|
|
21
|
+
* parseBindingReference('#controllers/home_controller')
|
|
22
|
+
* // returns { moduleNameOrPath: '#controllers/home_controller', method: 'handle' }
|
|
23
|
+
|
|
24
|
+
* parseBindingReference('#controllers/home_controller.index')
|
|
25
|
+
* // returns { moduleNameOrPath: '#controllers/home_controller', method: 'index' }
|
|
26
|
+
|
|
27
|
+
* parseBindingReference('#controllers/home.controller.index')
|
|
28
|
+
* // returns { moduleNameOrPath: '#controllers/home.controller', method: 'index' }
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* ### Class reference
|
|
32
|
+
* ```ts
|
|
33
|
+
* class HomeController {}
|
|
34
|
+
*
|
|
35
|
+
* parseBindingReference([HomeController])
|
|
36
|
+
* // returns { moduleNameOrPath: 'HomeController', method: 'handle' }
|
|
37
|
+
|
|
38
|
+
* parseBindingReference([HomeController, 'index'])
|
|
39
|
+
* // returns { moduleNameOrPath: 'HomeController', method: 'index' }
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* ### Lazy import reference
|
|
43
|
+
* ```ts
|
|
44
|
+
* const HomeController = () => import('#controllers/home_controller')
|
|
45
|
+
*
|
|
46
|
+
* parseBindingReference([HomeController])
|
|
47
|
+
* // returns { moduleNameOrPath: '#controllers/home_controller', method: 'handle' }
|
|
48
|
+
|
|
49
|
+
* parseBindingReference([HomeController, 'index'])
|
|
50
|
+
* // returns { moduleNameOrPath: 'controllers/home_controller', method: 'index' }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export async function parseBindingReference(
|
|
54
|
+
binding: string | [LazyImport<Constructor<any>> | Constructor<any>, any?]
|
|
55
|
+
): Promise<{ moduleNameOrPath: string; method: string }> {
|
|
56
|
+
/**
|
|
57
|
+
* The binding reference is a magic string. It might not have method
|
|
58
|
+
* name attached to it. Therefore we split the string and attempt
|
|
59
|
+
* to find the method or use the default method name "handle".
|
|
60
|
+
*/
|
|
61
|
+
if (typeof binding === 'string') {
|
|
62
|
+
const tokens = binding.split('.')
|
|
63
|
+
if (tokens.length === 1) {
|
|
64
|
+
return { moduleNameOrPath: binding, method: 'handle' }
|
|
65
|
+
}
|
|
66
|
+
return { method: tokens.pop()!, moduleNameOrPath: tokens.join('.') }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const [bindingReference, method] = binding
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Parsing the binding reference for dynamic imports and using its
|
|
73
|
+
* import value.
|
|
74
|
+
*/
|
|
75
|
+
const imports = [...(await parseImports(bindingReference.toString()))]
|
|
76
|
+
const importedModule = imports.find(
|
|
77
|
+
($import) => $import.isDynamicImport && $import.moduleSpecifier.value
|
|
78
|
+
)
|
|
79
|
+
if (importedModule) {
|
|
80
|
+
return {
|
|
81
|
+
moduleNameOrPath: importedModule.moduleSpecifier.value!,
|
|
82
|
+
method: method || 'handle',
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Otherwise using the name of the binding reference.
|
|
88
|
+
*/
|
|
89
|
+
return {
|
|
90
|
+
moduleNameOrPath: bindingReference.name,
|
|
91
|
+
method: method || 'handle',
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import he, { EncodeOptions } from 'he'
|
|
11
|
+
import prettyHrTime from 'pretty-hrtime'
|
|
12
|
+
import string from '@poppinss/utils/string'
|
|
13
|
+
import StringBuilder from '@poppinss/utils/string_builder'
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Collection of string helpers to transform a string value.
|
|
17
|
+
*/
|
|
18
|
+
const stringHelpers: typeof string & {
|
|
19
|
+
/**
|
|
20
|
+
* Creates an instance of the string builder
|
|
21
|
+
*/
|
|
22
|
+
create(value: string | StringBuilder): StringBuilder
|
|
23
|
+
|
|
24
|
+
ordinalize: (typeof string)['ordinal']
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Convert a string to a sentence
|
|
28
|
+
*/
|
|
29
|
+
toSentence: (typeof string)['sentence']
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Generate a random string value of a given length
|
|
33
|
+
*/
|
|
34
|
+
generateRandom: (typeof string)['random']
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Pretty print hrtime diff
|
|
38
|
+
*/
|
|
39
|
+
prettyHrTime(
|
|
40
|
+
time: [number, number],
|
|
41
|
+
options?: { verbose?: boolean | undefined; precise?: boolean | undefined }
|
|
42
|
+
): string
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Check if a string is empty.
|
|
46
|
+
*/
|
|
47
|
+
isEmpty(value: string): boolean
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Escape HTML entities
|
|
51
|
+
*/
|
|
52
|
+
escapeHTML(value: string, options?: { encodeSymbols?: boolean }): string
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Encode symbols to html entities
|
|
56
|
+
*/
|
|
57
|
+
encodeSymbols(value: string, options?: EncodeOptions): string
|
|
58
|
+
} = {
|
|
59
|
+
...string,
|
|
60
|
+
toSentence: string.sentence,
|
|
61
|
+
ordinalize: string.ordinal,
|
|
62
|
+
generateRandom: string.random,
|
|
63
|
+
|
|
64
|
+
create(value: string | StringBuilder): StringBuilder {
|
|
65
|
+
return new StringBuilder(value)
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
prettyHrTime(time, options) {
|
|
69
|
+
return prettyHrTime(time, options)
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
isEmpty(value: string): boolean {
|
|
73
|
+
return value.trim().length === 0
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
escapeHTML(value: string, options?: { encodeSymbols?: boolean }): string {
|
|
77
|
+
value = he.escape(value)
|
|
78
|
+
if (options && options.encodeSymbols) {
|
|
79
|
+
value = this.encodeSymbols(value, { allowUnsafeSymbols: true })
|
|
80
|
+
}
|
|
81
|
+
return value
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
encodeSymbols(value: string, options?: EncodeOptions): string {
|
|
85
|
+
return he.encode(value, options)
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export default stringHelpers
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import is from '@sindresorhus/is'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated
|
|
14
|
+
* Use "is" helpers instead. The types helpers exists
|
|
15
|
+
* for backward compatibility
|
|
16
|
+
*/
|
|
17
|
+
const types = {
|
|
18
|
+
lookup: is,
|
|
19
|
+
isNull: is.null_,
|
|
20
|
+
isBoolean: is.boolean,
|
|
21
|
+
isBuffer: is.buffer,
|
|
22
|
+
isNumber: is.number,
|
|
23
|
+
isString: is.string,
|
|
24
|
+
isArguments: is.arguments,
|
|
25
|
+
isObject: is.object,
|
|
26
|
+
isDate: is.date,
|
|
27
|
+
isArray: is.array,
|
|
28
|
+
isRegexp: is.regExp,
|
|
29
|
+
isError: is.error,
|
|
30
|
+
isFunction: is.function_,
|
|
31
|
+
isClass: is.class_,
|
|
32
|
+
isInteger: is.integer,
|
|
33
|
+
isFloat(value: number): value is number {
|
|
34
|
+
return value !== (value | 0)
|
|
35
|
+
},
|
|
36
|
+
isDecimal(value: string | number, options?: { decimalPlaces?: string }): boolean {
|
|
37
|
+
if (typeof value === 'number') {
|
|
38
|
+
value = value.toString()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const decimalPlaces = (options && options.decimalPlaces) || '1,'
|
|
42
|
+
return new RegExp(`^[-+]?([0-9]+)?(\\.[0-9]{${decimalPlaces}})$`).test(value)
|
|
43
|
+
},
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export default types
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Ignitor } from './main.js'
|
|
11
|
+
import type { ApplicationService } from '../types.js'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The Ace process is used to start the application in the
|
|
15
|
+
* console environment.
|
|
16
|
+
*/
|
|
17
|
+
export class AceProcess {
|
|
18
|
+
/**
|
|
19
|
+
* Ignitor reference
|
|
20
|
+
*/
|
|
21
|
+
#ignitor: Ignitor
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The callback that configures the tests runner. This callback
|
|
25
|
+
* runs at the time of starting the app.
|
|
26
|
+
*/
|
|
27
|
+
#configureCallback: (app: ApplicationService) => Promise<void> | void = () => {}
|
|
28
|
+
|
|
29
|
+
constructor(ignitor: Ignitor) {
|
|
30
|
+
this.#ignitor = ignitor
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Register a callback that runs after booting the AdonisJS app
|
|
35
|
+
* and just before the provider's ready hook
|
|
36
|
+
*/
|
|
37
|
+
configure(callback: (app: ApplicationService) => Promise<void> | void): this {
|
|
38
|
+
this.#configureCallback = callback
|
|
39
|
+
return this
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Handles the command line arguments and executes
|
|
44
|
+
* the matching ace commands
|
|
45
|
+
*/
|
|
46
|
+
async handle(argv: string[]) {
|
|
47
|
+
const app = this.#ignitor.createApp('console')
|
|
48
|
+
await app.init()
|
|
49
|
+
|
|
50
|
+
const { createAceKernel } = await import('../../modules/ace/create_kernel.js')
|
|
51
|
+
|
|
52
|
+
const kernel = createAceKernel(app)
|
|
53
|
+
app.container.bindValue('ace', kernel)
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Hook into kernel and start the app when the
|
|
57
|
+
* command needs the app.
|
|
58
|
+
*
|
|
59
|
+
* Since multiple commands can be executed in a single process,
|
|
60
|
+
* we add a check to only start the app only once.
|
|
61
|
+
*/
|
|
62
|
+
kernel.loading(async (metaData) => {
|
|
63
|
+
if (metaData.options.startApp && !app.isReady) {
|
|
64
|
+
await app.boot()
|
|
65
|
+
await app.start(() => {})
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
await this.#configureCallback(app)
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Handle command line args
|
|
73
|
+
*/
|
|
74
|
+
await kernel.handle(argv)
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Update the process exit code
|
|
78
|
+
*/
|
|
79
|
+
process.exitCode = kernel.exitCode
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Terminate the app when the command does not want to
|
|
83
|
+
* hold a long running process
|
|
84
|
+
*/
|
|
85
|
+
const mainCommand = kernel.getMainCommand()
|
|
86
|
+
if (!mainCommand || !mainCommand.staysAlive) {
|
|
87
|
+
await app.terminate()
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Server as NodeHttpsServer } from 'node:https'
|
|
11
|
+
import { IncomingMessage, ServerResponse, Server as NodeHttpServer, createServer } from 'node:http'
|
|
12
|
+
|
|
13
|
+
import debug from '../debug.js'
|
|
14
|
+
import { Ignitor } from './main.js'
|
|
15
|
+
import type { ApplicationService, EmitterService, LoggerService } from '../types.js'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The HTTP server process is used to start the application in the
|
|
19
|
+
* web environment.
|
|
20
|
+
*/
|
|
21
|
+
export class HttpServerProcess {
|
|
22
|
+
/**
|
|
23
|
+
* Ignitor reference
|
|
24
|
+
*/
|
|
25
|
+
#ignitor: Ignitor
|
|
26
|
+
|
|
27
|
+
constructor(ignitor: Ignitor) {
|
|
28
|
+
this.#ignitor = ignitor
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Calling this method closes the underlying HTTP server
|
|
33
|
+
*/
|
|
34
|
+
#close(nodeHttpServer: NodeHttpsServer | NodeHttpServer): Promise<void> {
|
|
35
|
+
return new Promise((resolve) => {
|
|
36
|
+
debug('closing http server process')
|
|
37
|
+
nodeHttpServer.close(() => resolve())
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Monitors the app and the server to close the HTTP server when
|
|
43
|
+
* either one of them goes down
|
|
44
|
+
*/
|
|
45
|
+
#monitorAppAndServer(
|
|
46
|
+
nodeHttpServer: NodeHttpsServer | NodeHttpServer,
|
|
47
|
+
app: ApplicationService,
|
|
48
|
+
logger: LoggerService
|
|
49
|
+
) {
|
|
50
|
+
/**
|
|
51
|
+
* Close the HTTP server when the application begins to
|
|
52
|
+
* terminate
|
|
53
|
+
*/
|
|
54
|
+
app.terminating(async () => {
|
|
55
|
+
debug('terminating signal received')
|
|
56
|
+
await this.#close(nodeHttpServer)
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Terminate the app when the HTTP server crashes
|
|
61
|
+
*/
|
|
62
|
+
nodeHttpServer.once('error', (error: NodeJS.ErrnoException) => {
|
|
63
|
+
debug('http server crashed with error "%O"', error)
|
|
64
|
+
logger.fatal({ err: error }, error.message)
|
|
65
|
+
process.exitCode = 1
|
|
66
|
+
app.terminate()
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Starts the http server a given host and port
|
|
72
|
+
*/
|
|
73
|
+
#listen(
|
|
74
|
+
nodeHttpServer: NodeHttpsServer | NodeHttpServer
|
|
75
|
+
): Promise<{ port: number; host: string }> {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
const host = process.env.HOST || '0.0.0.0'
|
|
78
|
+
const port = Number(process.env.PORT || '3333')
|
|
79
|
+
|
|
80
|
+
nodeHttpServer.listen(port, host)
|
|
81
|
+
nodeHttpServer.once('listening', () => {
|
|
82
|
+
debug('listening to http server, host :%s, port: %s', host, port)
|
|
83
|
+
resolve({ port, host })
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
nodeHttpServer.once('error', (error: NodeJS.ErrnoException) => {
|
|
87
|
+
reject(error)
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Notifies the app and the parent process that the
|
|
94
|
+
* HTTP server is ready
|
|
95
|
+
*/
|
|
96
|
+
#notifyServerHasStarted(
|
|
97
|
+
app: ApplicationService,
|
|
98
|
+
logger: LoggerService,
|
|
99
|
+
emitter: EmitterService,
|
|
100
|
+
payload: { host: string; port: number }
|
|
101
|
+
) {
|
|
102
|
+
/**
|
|
103
|
+
* Notify parent process
|
|
104
|
+
*/
|
|
105
|
+
app.notify({ isAdonisJS: true, environment: 'web', ...payload })
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Visual notification
|
|
109
|
+
*/
|
|
110
|
+
logger.info('started HTTP server on %s:%s', payload.host, payload.port)
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Notify app
|
|
114
|
+
*/
|
|
115
|
+
emitter.emit('http:server_ready', payload)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Start the HTTP server by wiring up the application
|
|
120
|
+
*/
|
|
121
|
+
async start(
|
|
122
|
+
serverCallback?: (
|
|
123
|
+
handler: (req: IncomingMessage, res: ServerResponse) => any
|
|
124
|
+
) => NodeHttpsServer | NodeHttpServer
|
|
125
|
+
) {
|
|
126
|
+
/**
|
|
127
|
+
* Method to create the HTTP server
|
|
128
|
+
*/
|
|
129
|
+
const createHTTPServer = serverCallback || createServer
|
|
130
|
+
const app = this.#ignitor.createApp('web')
|
|
131
|
+
|
|
132
|
+
await app.init()
|
|
133
|
+
await app.boot()
|
|
134
|
+
await app.start(async () => {
|
|
135
|
+
/**
|
|
136
|
+
* Resolve and boot the AdonisJS HTTP server
|
|
137
|
+
*/
|
|
138
|
+
const server = await app.container.make('server')
|
|
139
|
+
await server.boot()
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Create Node.js HTTP server instance and share it with the
|
|
143
|
+
* AdonisJS HTTP server
|
|
144
|
+
*/
|
|
145
|
+
const httpServer = createHTTPServer(server.handle.bind(server))
|
|
146
|
+
server.setNodeServer(httpServer)
|
|
147
|
+
|
|
148
|
+
const logger = await app.container.make('logger')
|
|
149
|
+
const emitter = await app.container.make('emitter')
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Start the server by listening on a port of host
|
|
153
|
+
*/
|
|
154
|
+
const payload = await this.#listen(httpServer)
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Notify
|
|
158
|
+
*/
|
|
159
|
+
this.#notifyServerHasStarted(app, logger, emitter, payload)
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Monitor app and the server (after the server is listening)
|
|
163
|
+
*/
|
|
164
|
+
this.#monitorAppAndServer(httpServer, app, logger)
|
|
165
|
+
})
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import debug from '../debug.js'
|
|
11
|
+
import { AceProcess } from './ace.js'
|
|
12
|
+
import { TestRunnerProcess } from './test.js'
|
|
13
|
+
import { HttpServerProcess } from './http.js'
|
|
14
|
+
import { setApp } from '../../services/app.js'
|
|
15
|
+
import { Application } from '../../modules/app.js'
|
|
16
|
+
import type { AppEnvironments } from '../../types/app.js'
|
|
17
|
+
import type { ApplicationService, IgnitorOptions } from '../types.js'
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Ignitor is used to instantiate an AdonisJS application in different
|
|
21
|
+
* known environments.
|
|
22
|
+
*/
|
|
23
|
+
export class Ignitor {
|
|
24
|
+
/**
|
|
25
|
+
* Ignitor options
|
|
26
|
+
*/
|
|
27
|
+
#options: IgnitorOptions
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Application root URL
|
|
31
|
+
*/
|
|
32
|
+
#appRoot: URL
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Reference to the application instance created using
|
|
36
|
+
* the "createApp" method.
|
|
37
|
+
*
|
|
38
|
+
* We store the output of the last call made to "createApp" method
|
|
39
|
+
* and assume that in one process only one entrypoint will
|
|
40
|
+
* call this method.
|
|
41
|
+
*/
|
|
42
|
+
#app?: ApplicationService
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Reference to the created application
|
|
46
|
+
*/
|
|
47
|
+
#tapCallbacks: Set<(app: ApplicationService) => void> = new Set()
|
|
48
|
+
|
|
49
|
+
constructor(appRoot: URL, options: IgnitorOptions) {
|
|
50
|
+
this.#appRoot = appRoot
|
|
51
|
+
this.#options = options
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Runs all the tap callbacks
|
|
56
|
+
*/
|
|
57
|
+
#runTapCallbacks(app: ApplicationService) {
|
|
58
|
+
this.#tapCallbacks.forEach((tapCallback) => tapCallback(app))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Get access to the application instance created
|
|
63
|
+
* by either the http server process or the ace
|
|
64
|
+
* process
|
|
65
|
+
*/
|
|
66
|
+
getApp() {
|
|
67
|
+
return this.#app
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Create an instance of AdonisJS application
|
|
72
|
+
*/
|
|
73
|
+
createApp(environment: AppEnvironments) {
|
|
74
|
+
debug('creating application instance')
|
|
75
|
+
this.#app = new Application(this.#appRoot, { environment, importer: this.#options.importer })
|
|
76
|
+
|
|
77
|
+
setApp(this.#app)
|
|
78
|
+
this.#runTapCallbacks(this.#app)
|
|
79
|
+
return this.#app
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Tap to access the application class instance.
|
|
84
|
+
*/
|
|
85
|
+
tap(callback: (app: ApplicationService) => void): this {
|
|
86
|
+
this.#tapCallbacks.add(callback)
|
|
87
|
+
return this
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Get instance of the HTTPServerProcess
|
|
92
|
+
*/
|
|
93
|
+
httpServer() {
|
|
94
|
+
return new HttpServerProcess(this)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get an instance of the AceProcess class
|
|
99
|
+
*/
|
|
100
|
+
ace() {
|
|
101
|
+
return new AceProcess(this)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Get an instance of the TestRunnerProcess class
|
|
106
|
+
*/
|
|
107
|
+
testRunner() {
|
|
108
|
+
return new TestRunnerProcess(this)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Terminates the app by calling the "app.terminate"
|
|
113
|
+
* method
|
|
114
|
+
*/
|
|
115
|
+
async terminate() {
|
|
116
|
+
await this.#app?.terminate()
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @adonisjs/core
|
|
3
|
+
*
|
|
4
|
+
* (c) AdonisJS
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Ignitor } from './main.js'
|
|
11
|
+
import type { ApplicationService } from '../types.js'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The Test runner process is used to start the tests runner process
|
|
15
|
+
*/
|
|
16
|
+
export class TestRunnerProcess {
|
|
17
|
+
/**
|
|
18
|
+
* Ignitor reference
|
|
19
|
+
*/
|
|
20
|
+
#ignitor: Ignitor
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The callback that configures the tests runner. This callback
|
|
24
|
+
* runs at the time of starting the app.
|
|
25
|
+
*/
|
|
26
|
+
#configureCallback: (app: ApplicationService) => Promise<void> | void = () => {}
|
|
27
|
+
|
|
28
|
+
constructor(ignitor: Ignitor) {
|
|
29
|
+
this.#ignitor = ignitor
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Register a callback that runs after booting the AdonisJS app
|
|
34
|
+
* and just before the provider's ready hook
|
|
35
|
+
*/
|
|
36
|
+
configure(callback: (app: ApplicationService) => Promise<void> | void): this {
|
|
37
|
+
this.#configureCallback = callback
|
|
38
|
+
return this
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Runs a callback after starting the app
|
|
43
|
+
*/
|
|
44
|
+
async run(callback: (app: ApplicationService) => Promise<void> | void) {
|
|
45
|
+
const app = this.#ignitor.createApp('test')
|
|
46
|
+
await app.init()
|
|
47
|
+
await app.boot()
|
|
48
|
+
await app.start(this.#configureCallback)
|
|
49
|
+
await callback(app)
|
|
50
|
+
}
|
|
51
|
+
}
|