@verdaccio/node-api 6.0.0-6-next.32 → 6.0.0-6-next.33

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 CHANGED
@@ -1,5 +1,64 @@
1
1
  # @verdaccio/node-api
2
2
 
3
+ ## 6.0.0-6-next.33
4
+
5
+ ### Major Changes
6
+
7
+ - 292c0a37: feat!: replace deprecated request dependency by got
8
+
9
+ This is a big refactoring of the core, fetching dependencies, improve code, more tests and better stability. This is essential for the next release, will take some time but would allow modularize more the core.
10
+
11
+ ## Notes
12
+
13
+ - Remove deprecated `request` by other `got`, retry improved, custom Agent ( got does not include it built-in)
14
+ - Remove `async` dependency from storage (used by core) it was linked with proxy somehow safe to remove now
15
+ - Refactor with promises instead callback wherever is possible
16
+ - ~Document the API~
17
+ - Improve testing, integration tests
18
+ - Bugfix
19
+ - Clean up old validations
20
+ - Improve performance
21
+
22
+ ## 💥 Breaking changes
23
+
24
+ - Plugin API methods were callbacks based are returning promises, this will break current storage plugins, check documentation for upgrade.
25
+ - Write Tarball, Read Tarball methods parameters change, a new set of options like `AbortController` signals are being provided to the `addAbortSignal` can be internally used with Streams when a request is aborted. eg: `addAbortSignal(signal, fs.createReadStream(pathName));`
26
+ - `@verdaccio/streams` stream abort support is legacy is being deprecated removed
27
+ - Remove AWS and Google Cloud packages for future refactoring [#2574](https://github.com/verdaccio/verdaccio/pull/2574).
28
+
29
+ ### Minor Changes
30
+
31
+ - 00d1d2a1: chore: env variable for launch fastify
32
+
33
+ - Update fastify to major release `v4.3.0`
34
+ - Update CLI launcher
35
+
36
+ via CLI
37
+
38
+ ```
39
+ VERDACCIO_SERVER=fastify verdaccio
40
+ ```
41
+
42
+ with docker
43
+
44
+ ```
45
+ docker run -it --rm --name verdaccio \
46
+ -e "VERDACCIO_SERVER=8080" -p 8080:8080 \
47
+ -e "VERDACCIO_SERVER=fastify" \
48
+ verdaccio/verdaccio
49
+ ```
50
+
51
+ ### Patch Changes
52
+
53
+ - Updated dependencies [292c0a37]
54
+ - Updated dependencies [a3a209b5]
55
+ - Updated dependencies [00d1d2a1]
56
+ - @verdaccio/config@6.0.0-6-next.15
57
+ - @verdaccio/core@6.0.0-6-next.6
58
+ - @verdaccio/logger@6.0.0-6-next.12
59
+ - @verdaccio/server@6.0.0-6-next.32
60
+ - @verdaccio/server-fastify@6.0.0-6-next.24
61
+
3
62
  ## 6.0.0-6-next.32
4
63
 
5
64
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli-utils.ts"],"names":["DEFAULT_PORT","DEFAULT_PROTOCOL","DEFAULT_DOMAIN","parseAddress","urlAddress","urlPattern","exec","proto","host","port","path","getListListenAddresses","argListen","configListen","addresses","Array","isArray","process","emitWarning","map","addr","parsedAddr","warningUtils","emit","Codes","VERWAR004","filter","Boolean"],"mappings":";;;;;;;;;AAAA;;AAEO,MAAMA,YAAY,GAAG,MAArB;;AACA,MAAMC,gBAAgB,GAAG,MAAzB;;AACA,MAAMC,cAAc,GAAG,WAAvB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AACO,SAASC,YAAT,CAAsBC,UAAtB,EAA4C;AACjD;AACA;AACA;AACA;AACA,MAAIC,UAAU,GAAG,8DAA8DC,IAA9D,CAAmEF,UAAnE,CAAjB;;AAEA,MAAIC,UAAJ,EAAgB;AACd,WAAO;AACLE,MAAAA,KAAK,EAAEF,UAAU,CAAC,CAAD,CAAV,IAAiBJ,gBADnB;AAELO,MAAAA,IAAI,EAAEH,UAAU,CAAC,CAAD,CAAV,IAAiBA,UAAU,CAAC,CAAD,CAA3B,IAAkCH,cAFnC;AAGLO,MAAAA,IAAI,EAAEJ,UAAU,CAAC,CAAD,CAAV,IAAiBL;AAHlB,KAAP;AAKD;;AAEDK,EAAAA,UAAU,GAAG,iCAAiCC,IAAjC,CAAsCF,UAAtC,CAAb;;AAEA,MAAIC,UAAJ,EAAgB;AACd,WAAO;AACLE,MAAAA,KAAK,EAAEF,UAAU,CAAC,CAAD,CAAV,IAAiBJ,gBADnB;AAELS,MAAAA,IAAI,EAAEL,UAAU,CAAC,CAAD;AAFX,KAAP;AAID;;AAED,SAAO,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASM,sBAAT,CAAgCC,SAAhC,EAA0DC,YAA1D,EAAkF;AACvF;AACA,MAAIC,SAAJ;;AACA,MAAIF,SAAJ,EAAe;AACbE,IAAAA,SAAS,GAAG,CAACF,SAAD,CAAZ;AACD,GAFD,MAEO,IAAIG,KAAK,CAACC,OAAN,CAAcH,YAAd,CAAJ,EAAiC;AACtCC,IAAAA,SAAS,GAAGD,YAAZ;AACAI,IAAAA,OAAO,CAACC,WAAR,CAAoB,uEAApB;AACD,GAHM,MAGA,IAAIL,YAAJ,EAAkB;AACvBC,IAAAA,SAAS,GAAG,CAACD,YAAD,CAAZ;AACD,GAFM,MAEA;AACLC,IAAAA,SAAS,GAAG,CAACd,YAAD,CAAZ;AACD;;AACDc,EAAAA,SAAS,GAAGA,SAAS,CAClBK,GADS,CACL,UAAUC,IAAV,EAAwB;AAC3B,UAAMC,UAAU,GAAGlB,YAAY,CAACiB,IAAD,CAA/B;;AAEA,QAAI,CAACC,UAAL,EAAiB;AACfC,yBAAaC,IAAb,CAAkBD,mBAAaE,KAAb,CAAmBC,SAArC,EAAgDL,IAAhD;AACD;;AAED,WAAOC,UAAP;AACD,GATS,EAUTK,MAVS,CAUFC,OAVE,CAAZ;AAYA,SAAOb,SAAP;AACD","sourcesContent":["import { warningUtils } from '@verdaccio/core';\n\nexport const DEFAULT_PORT = '4873';\nexport const DEFAULT_PROTOCOL = 'http';\nexport const DEFAULT_DOMAIN = 'localhost';\n/**\n * Parse an internet address\n * Allow:\n - https:localhost:1234 - protocol + host + port\n - localhost:1234 - host + port\n - 1234 - port\n - http::1234 - protocol + port\n - https://localhost:443/ - full url + https\n - http://[::1]:443/ - ipv6\n - unix:/tmp/http.sock - unix sockets\n - https://unix:/tmp/http.sock - unix sockets (https)\n * @param {*} urlAddress the internet address definition\n * @return {Object|Null} literal object that represent the address parsed\n */\nexport function parseAddress(urlAddress: any): any {\n //\n // TODO: refactor it to something more reasonable?\n //\n // protocol : // ( host )|( ipv6 ): port /\n let urlPattern = /^((https?):(\\/\\/)?)?((([^\\/:]*)|\\[([^\\[\\]]+)\\]):)?(\\d+)\\/?$/.exec(urlAddress);\n\n if (urlPattern) {\n return {\n proto: urlPattern[2] || DEFAULT_PROTOCOL,\n host: urlPattern[6] || urlPattern[7] || DEFAULT_DOMAIN,\n port: urlPattern[8] || DEFAULT_PORT,\n };\n }\n\n urlPattern = /^((https?):(\\/\\/)?)?unix:(.*)$/.exec(urlAddress);\n\n if (urlPattern) {\n return {\n proto: urlPattern[2] || DEFAULT_PROTOCOL,\n path: urlPattern[4],\n };\n }\n\n return null;\n}\n\n/**\n * Retrieve all addresses defined in the config file.\n * Verdaccio is able to listen multiple ports\n * @param {String} argListen\n * @param {String} configListen\n * eg:\n * listen:\n - localhost:5555\n - localhost:5557\n @return {Array}\n */\nexport function getListListenAddresses(argListen: string | void, configListen: any): any {\n // command line || config file || default\n let addresses;\n if (argListen) {\n addresses = [argListen];\n } else if (Array.isArray(configListen)) {\n addresses = configListen;\n process.emitWarning('multiple addresses will be deprecated in the next major, only use one');\n } else if (configListen) {\n addresses = [configListen];\n } else {\n addresses = [DEFAULT_PORT];\n }\n addresses = addresses\n .map(function (addr): string {\n const parsedAddr = parseAddress(addr);\n\n if (!parsedAddr) {\n warningUtils.emit(warningUtils.Codes.VERWAR004, addr);\n }\n\n return parsedAddr;\n })\n .filter(Boolean);\n\n return addresses;\n}\n"],"file":"cli-utils.js"}
1
+ {"version":3,"file":"cli-utils.js","names":["DEFAULT_PORT","DEFAULT_PROTOCOL","DEFAULT_DOMAIN","parseAddress","urlAddress","urlPattern","exec","proto","host","port","path","getListListenAddresses","argListen","configListen","addresses","Array","isArray","process","emitWarning","map","addr","parsedAddr","warningUtils","emit","Codes","VERWAR004","filter","Boolean"],"sources":["../src/cli-utils.ts"],"sourcesContent":["import { warningUtils } from '@verdaccio/core';\n\nexport const DEFAULT_PORT = '4873';\nexport const DEFAULT_PROTOCOL = 'http';\nexport const DEFAULT_DOMAIN = 'localhost';\n/**\n * Parse an internet address\n * Allow:\n - https:localhost:1234 - protocol + host + port\n - localhost:1234 - host + port\n - 1234 - port\n - http::1234 - protocol + port\n - https://localhost:443/ - full url + https\n - http://[::1]:443/ - ipv6\n - unix:/tmp/http.sock - unix sockets\n - https://unix:/tmp/http.sock - unix sockets (https)\n * @param {*} urlAddress the internet address definition\n * @return {Object|Null} literal object that represent the address parsed\n */\nexport function parseAddress(urlAddress: any): any {\n //\n // TODO: refactor it to something more reasonable?\n //\n // protocol : // ( host )|( ipv6 ): port /\n let urlPattern = /^((https?):(\\/\\/)?)?((([^\\/:]*)|\\[([^\\[\\]]+)\\]):)?(\\d+)\\/?$/.exec(urlAddress);\n\n if (urlPattern) {\n return {\n proto: urlPattern[2] || DEFAULT_PROTOCOL,\n host: urlPattern[6] || urlPattern[7] || DEFAULT_DOMAIN,\n port: urlPattern[8] || DEFAULT_PORT,\n };\n }\n\n urlPattern = /^((https?):(\\/\\/)?)?unix:(.*)$/.exec(urlAddress);\n\n if (urlPattern) {\n return {\n proto: urlPattern[2] || DEFAULT_PROTOCOL,\n path: urlPattern[4],\n };\n }\n\n return null;\n}\n\n/**\n * Retrieve all addresses defined in the config file.\n * Verdaccio is able to listen multiple ports\n * @param {String} argListen\n * @param {String} configListen\n * eg:\n * listen:\n - localhost:5555\n - localhost:5557\n @return {Array}\n */\nexport function getListListenAddresses(argListen: string | void, configListen: any): any {\n // command line || config file || default\n let addresses;\n if (argListen) {\n addresses = [argListen];\n } else if (Array.isArray(configListen)) {\n addresses = configListen;\n process.emitWarning('multiple addresses will be deprecated in the next major, only use one');\n } else if (configListen) {\n addresses = [configListen];\n } else {\n addresses = [DEFAULT_PORT];\n }\n addresses = addresses\n .map(function (addr): string {\n const parsedAddr = parseAddress(addr);\n\n if (!parsedAddr) {\n warningUtils.emit(warningUtils.Codes.VERWAR004, addr);\n }\n\n return parsedAddr;\n })\n .filter(Boolean);\n\n return addresses;\n}\n"],"mappings":";;;;;;;;;AAAA;;AAEO,MAAMA,YAAY,GAAG,MAArB;;AACA,MAAMC,gBAAgB,GAAG,MAAzB;;AACA,MAAMC,cAAc,GAAG,WAAvB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AACO,SAASC,YAAT,CAAsBC,UAAtB,EAA4C;EACjD;EACA;EACA;EACA;EACA,IAAIC,UAAU,GAAG,8DAA8DC,IAA9D,CAAmEF,UAAnE,CAAjB;;EAEA,IAAIC,UAAJ,EAAgB;IACd,OAAO;MACLE,KAAK,EAAEF,UAAU,CAAC,CAAD,CAAV,IAAiBJ,gBADnB;MAELO,IAAI,EAAEH,UAAU,CAAC,CAAD,CAAV,IAAiBA,UAAU,CAAC,CAAD,CAA3B,IAAkCH,cAFnC;MAGLO,IAAI,EAAEJ,UAAU,CAAC,CAAD,CAAV,IAAiBL;IAHlB,CAAP;EAKD;;EAEDK,UAAU,GAAG,iCAAiCC,IAAjC,CAAsCF,UAAtC,CAAb;;EAEA,IAAIC,UAAJ,EAAgB;IACd,OAAO;MACLE,KAAK,EAAEF,UAAU,CAAC,CAAD,CAAV,IAAiBJ,gBADnB;MAELS,IAAI,EAAEL,UAAU,CAAC,CAAD;IAFX,CAAP;EAID;;EAED,OAAO,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASM,sBAAT,CAAgCC,SAAhC,EAA0DC,YAA1D,EAAkF;EACvF;EACA,IAAIC,SAAJ;;EACA,IAAIF,SAAJ,EAAe;IACbE,SAAS,GAAG,CAACF,SAAD,CAAZ;EACD,CAFD,MAEO,IAAIG,KAAK,CAACC,OAAN,CAAcH,YAAd,CAAJ,EAAiC;IACtCC,SAAS,GAAGD,YAAZ;IACAI,OAAO,CAACC,WAAR,CAAoB,uEAApB;EACD,CAHM,MAGA,IAAIL,YAAJ,EAAkB;IACvBC,SAAS,GAAG,CAACD,YAAD,CAAZ;EACD,CAFM,MAEA;IACLC,SAAS,GAAG,CAACd,YAAD,CAAZ;EACD;;EACDc,SAAS,GAAGA,SAAS,CAClBK,GADS,CACL,UAAUC,IAAV,EAAwB;IAC3B,MAAMC,UAAU,GAAGlB,YAAY,CAACiB,IAAD,CAA/B;;IAEA,IAAI,CAACC,UAAL,EAAiB;MACfC,kBAAA,CAAaC,IAAb,CAAkBD,kBAAA,CAAaE,KAAb,CAAmBC,SAArC,EAAgDL,IAAhD;IACD;;IAED,OAAOC,UAAP;EACD,CATS,EAUTK,MAVS,CAUFC,OAVE,CAAZ;EAYA,OAAOb,SAAP;AACD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/experiments.ts"],"names":["displayExperimentsInfoBox","flags","experimentList","Object","keys","length","logger","warn","forEach","experiment","info"],"mappings":";;;;;;;AAAA;;AAEO,SAASA,yBAAT,CAAmCC,KAAnC,EAA0C;AAC/C,MAAI,CAACA,KAAL,EAAY;AACV;AACD;;AAED,QAAMC,cAAc,GAAGC,MAAM,CAACC,IAAP,CAAYH,KAAZ,CAAvB;;AACA,MAAIC,cAAc,CAACG,MAAf,IAAyB,CAA7B,EAAgC;AAC9BC,mBAAOC,IAAP,EACE;AACC,4HAFH;;AAIAL,IAAAA,cAAc,CAACM,OAAf,CAAwBC,UAAD,IAAgB;AACrC;AACAH,qBAAOI,IAAP,CACG,2BAA0BD,UAAW,KACpCR,KAAK,CAACQ,UAAD,CAAL,GAAoB,YAApB,GAAmC,cACpC,EAHH;AAKD,KAPD;AAQD;AACF","sourcesContent":["import { logger } from '@verdaccio/logger';\n\nexport function displayExperimentsInfoBox(flags) {\n if (!flags) {\n return;\n }\n\n const experimentList = Object.keys(flags);\n if (experimentList.length >= 1) {\n logger.warn(\n // eslint-disable-next-line max-len\n `experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it`\n );\n experimentList.forEach((experiment) => {\n // eslint-disable-next-line max-len\n logger.info(\n `support for experiment [${experiment}] ${\n flags[experiment] ? 'is enabled' : ' is disabled'\n }`\n );\n });\n }\n}\n"],"file":"experiments.js"}
1
+ {"version":3,"file":"experiments.js","names":["displayExperimentsInfoBox","flags","experimentList","Object","keys","length","logger","warn","forEach","experiment","info"],"sources":["../src/experiments.ts"],"sourcesContent":["import { logger } from '@verdaccio/logger';\n\nexport function displayExperimentsInfoBox(flags) {\n if (!flags) {\n return;\n }\n\n const experimentList = Object.keys(flags);\n if (experimentList.length >= 1) {\n logger.warn(\n // eslint-disable-next-line max-len\n `experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it`\n );\n experimentList.forEach((experiment) => {\n // eslint-disable-next-line max-len\n logger.info(\n `support for experiment [${experiment}] ${\n flags[experiment] ? 'is enabled' : ' is disabled'\n }`\n );\n });\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAEO,SAASA,yBAAT,CAAmCC,KAAnC,EAA0C;EAC/C,IAAI,CAACA,KAAL,EAAY;IACV;EACD;;EAED,MAAMC,cAAc,GAAGC,MAAM,CAACC,IAAP,CAAYH,KAAZ,CAAvB;;EACA,IAAIC,cAAc,CAACG,MAAf,IAAyB,CAA7B,EAAgC;IAC9BC,cAAA,CAAOC,IAAP,EACE;IACC,wHAFH;;IAIAL,cAAc,CAACM,OAAf,CAAwBC,UAAD,IAAgB;MACrC;MACAH,cAAA,CAAOI,IAAP,CACG,2BAA0BD,UAAW,KACpCR,KAAK,CAACQ,UAAD,CAAL,GAAoB,YAApB,GAAmC,cACpC,EAHH;IAKD,CAPD;EAQD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA","sourcesContent":["export { initServer, runServer } from './server';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export { initServer, runServer } from './server';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA"}
package/build/server.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { ConfigRuntime } from '@verdaccio/types';
1
+ import { ConfigYaml } from '@verdaccio/types';
2
2
  /**
3
3
  * Return a native HTTP/HTTPS server instance
4
4
  * @param config
5
5
  * @param addr
6
6
  * @param app
7
7
  */
8
- export declare function createServerFactory(config: ConfigRuntime, addr: any, app: any): any;
8
+ export declare function createServerFactory(config: ConfigYaml, addr: any, app: any): any;
9
9
  /**
10
10
  * Start the server on the port defined
11
11
  * @param config
@@ -13,7 +13,7 @@ export declare function createServerFactory(config: ConfigRuntime, addr: any, ap
13
13
  * @param version
14
14
  * @param pkgName
15
15
  */
16
- export declare function initServer(config: ConfigRuntime, port: string | void, version: string, pkgName: string): Promise<void>;
16
+ export declare function initServer(config: ConfigYaml, port: string | void, version: string, pkgName: string): Promise<void>;
17
17
  /**
18
18
  * Exposes a server factory to be instantiated programmatically.
19
19
  *
@@ -25,4 +25,4 @@ export declare function initServer(config: ConfigRuntime, port: string | void, v
25
25
  });
26
26
  * @param config
27
27
  */
28
- export declare function runServer(config?: string | ConfigRuntime): Promise<any>;
28
+ export declare function runServer(config?: string | ConfigYaml): Promise<any>;
package/build/server.js CHANGED
@@ -29,6 +29,8 @@ var _logger = require("@verdaccio/logger");
29
29
 
30
30
  var _server = _interopRequireDefault(require("@verdaccio/server"));
31
31
 
32
+ var _serverFastify = _interopRequireDefault(require("@verdaccio/server-fastify"));
33
+
32
34
  var _cliUtils = require("./cli-utils");
33
35
 
34
36
  var _experiments = require("./experiments");
@@ -135,44 +137,60 @@ async function initServer(config, port, version, pkgName) {
135
137
  const [addr] = (0, _cliUtils.getListListenAddresses)(port, config.listen);
136
138
  const logger = (0, _logger.setup)(config === null || config === void 0 ? void 0 : config.log);
137
139
  (0, _experiments.displayExperimentsInfoBox)(config.flags);
138
- const app = await (0, _server.default)(config);
139
- const serverFactory = createServerFactory(config, addr, app);
140
- serverFactory.listen(addr.port || addr.path, addr.host, () => {
141
- // send a message for test
142
- if ((0, _lodash.isFunction)(process.send)) {
143
- process.send({
144
- verdaccio_started: true
145
- });
146
- }
140
+ let app;
147
141
 
148
- const addressServer = `${addr.path ? _url.default.format({
149
- protocol: 'unix',
150
- pathname: addr.path
151
- }) : _url.default.format({
152
- protocol: addr.proto,
153
- hostname: addr.host,
142
+ if (process.env.VERDACCIO_SERVER === 'fastify') {
143
+ app = await (0, _serverFastify.default)(config);
144
+ app.listen({
154
145
  port: addr.port,
155
- pathname: '/'
156
- })}`;
157
- logger.info(`http address ${addressServer}`);
158
- logger.info(`version: ${version}`);
159
- resolve();
160
- }).on('error', function (err) {
161
- reject(err);
162
- process.exitCode = 1;
163
- });
164
-
165
- function handleShutdownGracefully() {
166
- logger.fatal('received shutdown signal - closing server gracefully...');
167
- serverFactory.close(() => {
168
- logger.info('server closed.');
169
- process.exit(0);
146
+ host: addr.host
147
+ }, err => {
148
+ if (err) {
149
+ reject(err);
150
+ } else {
151
+ resolve();
152
+ }
153
+ });
154
+ } else {
155
+ app = await (0, _server.default)(config);
156
+ const serverFactory = createServerFactory(config, addr, app);
157
+ serverFactory.listen(addr.port || addr.path, addr.host, () => {
158
+ // send a message for test
159
+ if ((0, _lodash.isFunction)(process.send)) {
160
+ process.send({
161
+ verdaccio_started: true
162
+ });
163
+ }
164
+
165
+ const addressServer = `${addr.path ? _url.default.format({
166
+ protocol: 'unix',
167
+ pathname: addr.path
168
+ }) : _url.default.format({
169
+ protocol: addr.proto,
170
+ hostname: addr.host,
171
+ port: addr.port,
172
+ pathname: '/'
173
+ })}`;
174
+ logger.info(`http address ${addressServer}`);
175
+ logger.info(`version: ${version}`);
176
+ resolve();
177
+ }).on('error', function (err) {
178
+ reject(err);
179
+ process.exitCode = 1;
170
180
  });
171
- }
172
181
 
173
- for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
174
- // Use once() so that receiving double signals exit the app.
175
- process.once(signal, handleShutdownGracefully);
182
+ function handleShutdownGracefully() {
183
+ logger.warn('received shutdown signal - closing server gracefully...');
184
+ serverFactory.close(() => {
185
+ logger.info('server closed.');
186
+ process.exit(0);
187
+ });
188
+ }
189
+
190
+ for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
191
+ // Use once() so that receiving double signals exit the app.
192
+ process.once(signal, handleShutdownGracefully);
193
+ }
176
194
  }
177
195
  });
178
196
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server.ts"],"names":["debug","unlinkAddressPath","addr","path","fs","existsSync","unlinkSync","createServerFactory","config","app","serverFactory","proto","httpsOptions","secureOptions","constants","SSL_OP_NO_SSLv2","SSL_OP_NO_SSLv3","keyCertConfig","https","pfxConfig","key","cert","pfx","Error","passphrase","readFileSync","ca","createServer","err","message","http","server","keepAliveTimeout","initServer","port","version","pkgName","Promise","resolve","reject","listen","logger","log","flags","host","process","send","verdaccio_started","addressServer","url","format","protocol","pathname","hostname","info","on","exitCode","handleShutdownGracefully","fatal","close","exit","signal","once","runServer","configurationParsed","undefined","configPathLocation","_","isObject","API_ERROR","CONFIG_BAD_FORMAT"],"mappings":"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","sourcesContent":["/* eslint-disable */\nimport constants from 'constants';\nimport buildDebug from 'debug';\nimport fs from 'fs';\nimport http from 'http';\nimport https from 'https';\nimport _, { assign, isFunction } from 'lodash';\nimport url from 'url';\n\nimport { findConfigFile, parseConfigFile } from '@verdaccio/config';\nimport { API_ERROR } from '@verdaccio/core';\nimport { setup } from '@verdaccio/logger';\nimport { LoggerConfigItem } from '@verdaccio/logger/src/logger';\nimport server from '@verdaccio/server';\nimport { ConfigRuntime, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';\n\nimport { getListListenAddresses } from './cli-utils';\nimport { displayExperimentsInfoBox } from './experiments';\n\nconst debug = buildDebug('verdaccio:node-api');\n\nfunction unlinkAddressPath(addr) {\n if (addr.path && fs.existsSync(addr.path)) {\n fs.unlinkSync(addr.path);\n }\n}\n\n/**\n * Return a native HTTP/HTTPS server instance\n * @param config\n * @param addr\n * @param app\n */\nexport function createServerFactory(config: ConfigRuntime, addr, app) {\n let serverFactory;\n if (addr.proto === 'https') {\n debug('https enabled');\n try {\n let httpsOptions = {\n // disable insecure SSLv2 and SSLv3\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3,\n };\n\n const keyCertConfig = config.https as HttpsConfKeyCert;\n const pfxConfig = config.https as HttpsConfPfx;\n\n // https must either have key and cert or a pfx and (optionally) a passphrase\n if (!((keyCertConfig.key && keyCertConfig.cert) || pfxConfig.pfx)) {\n // logHTTPSError(configPath);\n throw Error('bad format https configuration');\n }\n\n if (pfxConfig.pfx) {\n const { pfx, passphrase } = pfxConfig;\n httpsOptions = assign(httpsOptions, {\n pfx: fs.readFileSync(pfx),\n passphrase: passphrase || '',\n });\n } else {\n const { key, cert, ca } = keyCertConfig;\n httpsOptions = assign(httpsOptions, {\n key: fs.readFileSync(key),\n cert: fs.readFileSync(cert),\n ...(ca && {\n ca: fs.readFileSync(ca),\n }),\n });\n }\n // TODO: enable http2 as feature\n // if (config.server.http2) <-- check if force http2\n serverFactory = https.createServer(httpsOptions, app);\n } catch (err: any) {\n throw new Error(`cannot create https server: ${err.message}`);\n }\n } else {\n // http\n debug('http enabled');\n serverFactory = http.createServer(app);\n }\n\n if (\n config.server &&\n typeof config.server.keepAliveTimeout !== 'undefined' &&\n // @ts-ignore\n config.server.keepAliveTimeout !== 'null'\n ) {\n // library definition for node is not up to date (doesn't contain recent 8.0 changes)\n serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1000;\n }\n // FIXE: I could not find the reason of this code.\n unlinkAddressPath(addr);\n\n return serverFactory;\n}\n\n/**\n * Start the server on the port defined\n * @param config\n * @param port\n * @param version\n * @param pkgName\n */\nexport async function initServer(\n config: ConfigRuntime,\n port: string | void,\n version: string,\n pkgName: string\n): Promise<void> {\n return new Promise(async (resolve, reject) => {\n // FIXME: get only the first match, the multiple address will be removed\n const [addr] = getListListenAddresses(port, config.listen);\n const logger = setup(config?.log as LoggerConfigItem);\n displayExperimentsInfoBox(config.flags);\n const app = await server(config);\n const serverFactory = createServerFactory(config, addr, app);\n serverFactory\n .listen(addr.port || addr.path, addr.host, (): void => {\n // send a message for test\n if (isFunction(process.send)) {\n process.send({\n verdaccio_started: true,\n });\n }\n const addressServer = `${\n addr.path\n ? url.format({\n protocol: 'unix',\n pathname: addr.path,\n })\n : url.format({\n protocol: addr.proto,\n hostname: addr.host,\n port: addr.port,\n pathname: '/',\n })\n }`;\n logger.info(`http address ${addressServer}`);\n logger.info(`version: ${version}`);\n resolve();\n })\n .on('error', function (err): void {\n reject(err);\n process.exitCode = 1;\n });\n\n function handleShutdownGracefully() {\n logger.fatal('received shutdown signal - closing server gracefully...');\n serverFactory.close(() => {\n logger.info('server closed.');\n process.exit(0);\n });\n }\n\n for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {\n // Use once() so that receiving double signals exit the app.\n process.once(signal, handleShutdownGracefully);\n }\n });\n}\n\n/**\n * Exposes a server factory to be instantiated programmatically.\n *\n const app = await runServer(); // default configuration\n const app = await runServer('./config/config.yaml');\n const app = await runServer({ configuration });\n app.listen(4000, (event) => {\n // do something\n });\n * @param config\n */\nexport async function runServer(config?: string | ConfigRuntime): Promise<any> {\n let configurationParsed: ConfigRuntime;\n if (config === undefined || typeof config === 'string') {\n const configPathLocation = findConfigFile(config);\n configurationParsed = parseConfigFile(configPathLocation) as ConfigRuntime;\n } else if (_.isObject(config)) {\n configurationParsed = config;\n } else {\n throw new Error(API_ERROR.CONFIG_BAD_FORMAT);\n }\n\n setup(configurationParsed.log as LoggerConfigItem);\n displayExperimentsInfoBox(configurationParsed.flags);\n // FIXME: get only the first match, the multiple address will be removed\n const [addr] = getListListenAddresses(undefined, configurationParsed.listen);\n const app = await server(configurationParsed);\n return createServerFactory(configurationParsed, addr, app);\n}\n"],"file":"server.js"}
1
+ {"version":3,"file":"server.js","names":["debug","buildDebug","unlinkAddressPath","addr","path","fs","existsSync","unlinkSync","createServerFactory","config","app","serverFactory","proto","httpsOptions","secureOptions","constants","SSL_OP_NO_SSLv2","SSL_OP_NO_SSLv3","keyCertConfig","https","pfxConfig","key","cert","pfx","Error","passphrase","assign","readFileSync","ca","createServer","err","message","http","server","keepAliveTimeout","initServer","port","version","pkgName","Promise","resolve","reject","getListListenAddresses","listen","logger","setup","log","displayExperimentsInfoBox","flags","process","env","VERDACCIO_SERVER","fastifyServer","host","isFunction","send","verdaccio_started","addressServer","url","format","protocol","pathname","hostname","info","on","exitCode","handleShutdownGracefully","warn","close","exit","signal","once","runServer","configurationParsed","undefined","configPathLocation","findConfigFile","parseConfigFile","_","isObject","API_ERROR","CONFIG_BAD_FORMAT"],"sources":["../src/server.ts"],"sourcesContent":["/* eslint-disable */\nimport constants from 'constants';\nimport buildDebug from 'debug';\nimport fs from 'fs';\nimport http from 'http';\nimport https from 'https';\nimport _, { assign, isFunction } from 'lodash';\nimport url from 'url';\n\nimport { findConfigFile, parseConfigFile } from '@verdaccio/config';\nimport { API_ERROR } from '@verdaccio/core';\nimport { setup } from '@verdaccio/logger';\nimport server from '@verdaccio/server';\nimport fastifyServer from '@verdaccio/server-fastify';\nimport { ConfigYaml, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';\n\nimport { getListListenAddresses } from './cli-utils';\nimport { displayExperimentsInfoBox } from './experiments';\n\nconst debug = buildDebug('verdaccio:node-api');\n\nfunction unlinkAddressPath(addr) {\n if (addr.path && fs.existsSync(addr.path)) {\n fs.unlinkSync(addr.path);\n }\n}\n\n/**\n * Return a native HTTP/HTTPS server instance\n * @param config\n * @param addr\n * @param app\n */\nexport function createServerFactory(config: ConfigYaml, addr, app) {\n let serverFactory;\n if (addr.proto === 'https') {\n debug('https enabled');\n try {\n let httpsOptions = {\n // disable insecure SSLv2 and SSLv3\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3,\n };\n\n const keyCertConfig = config.https as HttpsConfKeyCert;\n const pfxConfig = config.https as HttpsConfPfx;\n\n // https must either have key and cert or a pfx and (optionally) a passphrase\n if (!((keyCertConfig.key && keyCertConfig.cert) || pfxConfig.pfx)) {\n // logHTTPSError(configPath);\n throw Error('bad format https configuration');\n }\n\n if (pfxConfig.pfx) {\n const { pfx, passphrase } = pfxConfig;\n httpsOptions = assign(httpsOptions, {\n pfx: fs.readFileSync(pfx),\n passphrase: passphrase || '',\n });\n } else {\n const { key, cert, ca } = keyCertConfig;\n httpsOptions = assign(httpsOptions, {\n key: fs.readFileSync(key),\n cert: fs.readFileSync(cert),\n ...(ca && {\n ca: fs.readFileSync(ca),\n }),\n });\n }\n // TODO: enable http2 as feature\n // if (config.server.http2) <-- check if force http2\n serverFactory = https.createServer(httpsOptions, app);\n } catch (err: any) {\n throw new Error(`cannot create https server: ${err.message}`);\n }\n } else {\n // http\n debug('http enabled');\n serverFactory = http.createServer(app);\n }\n\n if (\n config.server &&\n typeof config.server.keepAliveTimeout !== 'undefined' &&\n // @ts-ignore\n config.server.keepAliveTimeout !== 'null'\n ) {\n // library definition for node is not up to date (doesn't contain recent 8.0 changes)\n serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1000;\n }\n // FIXE: I could not find the reason of this code.\n unlinkAddressPath(addr);\n\n return serverFactory;\n}\n\n/**\n * Start the server on the port defined\n * @param config\n * @param port\n * @param version\n * @param pkgName\n */\nexport async function initServer(\n config: ConfigYaml,\n port: string | void,\n version: string,\n pkgName: string\n): Promise<void> {\n return new Promise(async (resolve, reject) => {\n // FIXME: get only the first match, the multiple address will be removed\n const [addr] = getListListenAddresses(port, config.listen);\n const logger = setup(config?.log as any);\n displayExperimentsInfoBox(config.flags);\n\n let app;\n if (process.env.VERDACCIO_SERVER === 'fastify') {\n app = await fastifyServer(config);\n app.listen({ port: addr.port, host: addr.host }, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n } else {\n app = await server(config);\n const serverFactory = createServerFactory(config, addr, app);\n serverFactory\n .listen(addr.port || addr.path, addr.host, (): void => {\n // send a message for test\n if (isFunction(process.send)) {\n process.send({\n verdaccio_started: true,\n });\n }\n const addressServer = `${\n addr.path\n ? url.format({\n protocol: 'unix',\n pathname: addr.path,\n })\n : url.format({\n protocol: addr.proto,\n hostname: addr.host,\n port: addr.port,\n pathname: '/',\n })\n }`;\n logger.info(`http address ${addressServer}`);\n logger.info(`version: ${version}`);\n resolve();\n })\n .on('error', function (err): void {\n reject(err);\n process.exitCode = 1;\n });\n function handleShutdownGracefully() {\n logger.warn('received shutdown signal - closing server gracefully...');\n serverFactory.close(() => {\n logger.info('server closed.');\n process.exit(0);\n });\n }\n\n for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {\n // Use once() so that receiving double signals exit the app.\n process.once(signal, handleShutdownGracefully);\n }\n }\n });\n}\n\n/**\n * Exposes a server factory to be instantiated programmatically.\n *\n const app = await runServer(); // default configuration\n const app = await runServer('./config/config.yaml');\n const app = await runServer({ configuration });\n app.listen(4000, (event) => {\n // do something\n });\n * @param config\n */\nexport async function runServer(config?: string | ConfigYaml): Promise<any> {\n let configurationParsed: ConfigYaml;\n if (config === undefined || typeof config === 'string') {\n const configPathLocation = findConfigFile(config);\n configurationParsed = parseConfigFile(configPathLocation);\n } else if (_.isObject(config)) {\n configurationParsed = config;\n } else {\n throw new Error(API_ERROR.CONFIG_BAD_FORMAT);\n }\n\n setup(configurationParsed.log as any);\n displayExperimentsInfoBox(configurationParsed.flags);\n // FIXME: get only the first match, the multiple address will be removed\n const [addr] = getListListenAddresses(undefined, configurationParsed.listen);\n const app = await server(configurationParsed);\n return createServerFactory(configurationParsed, addr, app);\n}\n"],"mappings":"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"}
package/jest.config.js CHANGED
@@ -1,3 +1,10 @@
1
1
  const config = require('../../jest/config');
2
2
 
3
- module.exports = Object.assign({}, config, {});
3
+ module.exports = Object.assign({}, config, {
4
+ coverageThreshold: {
5
+ global: {
6
+ // FIXME: increase to 90
7
+ lines: 40,
8
+ },
9
+ },
10
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/node-api",
3
- "version": "6.0.0-6-next.32",
3
+ "version": "6.0.0-6-next.33",
4
4
  "description": "node API",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -30,21 +30,21 @@
30
30
  },
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
- "@verdaccio/core": "6.0.0-6-next.5",
34
- "@verdaccio/config": "6.0.0-6-next.14",
35
- "@verdaccio/logger": "6.0.0-6-next.11",
36
- "@verdaccio/server": "6.0.0-6-next.31",
37
- "core-js": "3.20.3",
38
- "debug": "4.3.3",
33
+ "@verdaccio/core": "6.0.0-6-next.6",
34
+ "@verdaccio/config": "6.0.0-6-next.15",
35
+ "@verdaccio/logger": "6.0.0-6-next.12",
36
+ "@verdaccio/server": "6.0.0-6-next.32",
37
+ "@verdaccio/server-fastify": "6.0.0-6-next.24",
38
+ "core-js": "3.24.1",
39
+ "debug": "4.3.4",
39
40
  "lodash": "4.17.21"
40
41
  },
41
42
  "devDependencies": {
42
- "@types/node": "16.11.21",
43
- "@verdaccio/mock": "6.0.0-6-next.15",
44
- "@verdaccio/types": "11.0.0-6-next.12",
45
- "jest-mock-process": "1.4.1",
43
+ "@types/node": "16.11.47",
44
+ "@verdaccio/types": "11.0.0-6-next.13",
45
+ "jest-mock-process": "1.5.1",
46
46
  "selfsigned": "1.10.14",
47
- "supertest": "6.2.2"
47
+ "supertest": "6.2.4"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public"
@@ -60,7 +60,7 @@
60
60
  "build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
61
61
  "watch": "pnpm build:js -- --watch",
62
62
  "build": "pnpm run build:js && pnpm run build:types",
63
- "test": "cross-env NODE_ENV=test BABEL_ENV=test jest"
63
+ "test": "jest"
64
64
  },
65
65
  "readme": "# @verdaccio/node-api\n\n[![backers](https://opencollective.com/verdaccio/tiers/backer/badge.svg?label=Backer&color=brightgreen)](https://opencollective.com/verdaccio)\n[![stackshare](https://img.shields.io/badge/Follow%20on-StackShare-blue.svg?logo=stackshare&style=flat)](https://stackshare.io/verdaccio)\n[![MIT](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)\n[![Crowdin](https://d322cqt584bo4o.cloudfront.net/verdaccio/localized.svg)](https://crowdin.com/project/verdaccio)\n[![TODOs](https://badgen.net/https/api.tickgit.com/badgen/github.com/verdaccio/verdaccio)](https://www.tickgit.com/browse?repo=github.com/verdaccio/verdaccio)\n\n[![Twitter followers](https://img.shields.io/twitter/follow/verdaccio_npm.svg?style=social&label=Follow)](https://twitter.com/verdaccio_npm)\n[![Github](https://img.shields.io/github/stars/verdaccio/verdaccio.svg?style=social&label=Stars)](https://github.com/verdaccio/verdaccio/stargazers)\n\n## Donations\n\nVerdaccio is run by **volunteers**; nobody is working full-time on it. If you find this project to be useful and would like to support its development, consider making a donation - **your logo might end up in this readme.** 😉\n\n**[Donate](https://opencollective.com/verdaccio)** 💵👍🏻 starting from _\\$1/month_ or just one single contribution.\n\n## Report a vulnerability\n\nIf you want to report a security vulnerability, please follow the steps which we have defined for you in our [security policy](https://github.com/verdaccio/verdaccio/security/policy).\n\n## Open Collective Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/verdaccio#sponsor)]\n\n[![sponsor](https://opencollective.com/verdaccio/sponsor/0/avatar.svg)](https://opencollective.com/verdaccio/sponsor/0/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/1/avatar.svg)](https://opencollective.com/verdaccio/sponsor/1/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/2/avatar.svg)](https://opencollective.com/verdaccio/sponsor/2/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/3/avatar.svg)](https://opencollective.com/verdaccio/sponsor/3/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/4/avatar.svg)](https://opencollective.com/verdaccio/sponsor/4/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/5/avatar.svg)](https://opencollective.com/verdaccio/sponsor/5/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/6/avatar.svg)](https://opencollective.com/verdaccio/sponsor/6/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/7/avatar.svg)](https://opencollective.com/verdaccio/sponsor/7/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/8/avatar.svg)](https://opencollective.com/verdaccio/sponsor/8/website)\n[![sponsor](https://opencollective.com/verdaccio/sponsor/9/avatar.svg)](https://opencollective.com/verdaccio/sponsor/9/website)\n\n## Open Collective Backers\n\nThank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/verdaccio#backer)]\n\n[![backers](https://opencollective.com/verdaccio/backers.svg?width=890)](https://opencollective.com/verdaccio#backers)\n\n## Special Thanks\n\nThanks to the following companies to help us to achieve our goals providing free open source licenses.\n\n[![jetbrain](assets/thanks/jetbrains/logo.png)](https://www.jetbrains.com/)\n[![crowdin](assets/thanks/crowdin/logo.png)](https://crowdin.com/)\n[![balsamiq](assets/thanks/balsamiq/logo.jpg)](https://balsamiq.com/)\n\n## Contributors\n\nThis project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].\n\n[![contributors](https://opencollective.com/verdaccio/contributors.svg?width=890&button=true)](../../graphs/contributors)\n\n### FAQ / Contact / Troubleshoot\n\nIf you have any issue you can try the following options, do no desist to ask or check our issues database, perhaps someone has asked already what you are looking for.\n\n- [Blog](https://verdaccio.org/blog/)\n- [Donations](https://opencollective.com/verdaccio)\n- [Reporting an issue](https://github.com/verdaccio/verdaccio/blob/master/CONTRIBUTING.md#reporting-a-bug)\n- [Running discussions](https://github.com/verdaccio/verdaccio/issues?q=is%3Aissue+is%3Aopen+label%3Adiscuss)\n- [Chat](http://chat.verdaccio.org/)\n- [Logos](https://verdaccio.org/docs/en/logo)\n- [Docker Examples](https://github.com/verdaccio/docker-examples)\n- [FAQ](https://github.com/verdaccio/verdaccio/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20)\n\n### License\n\nVerdaccio is [MIT licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)\n\nThe Verdaccio documentation and logos (excluding /thanks, e.g., .md, .png, .sketch) files within the /assets folder) is\n[Creative Commons licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE-docs).\n"
66
66
  }
package/src/server.ts CHANGED
@@ -10,9 +10,9 @@ import url from 'url';
10
10
  import { findConfigFile, parseConfigFile } from '@verdaccio/config';
11
11
  import { API_ERROR } from '@verdaccio/core';
12
12
  import { setup } from '@verdaccio/logger';
13
- import { LoggerConfigItem } from '@verdaccio/logger/src/logger';
14
13
  import server from '@verdaccio/server';
15
- import { ConfigRuntime, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';
14
+ import fastifyServer from '@verdaccio/server-fastify';
15
+ import { ConfigYaml, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';
16
16
 
17
17
  import { getListListenAddresses } from './cli-utils';
18
18
  import { displayExperimentsInfoBox } from './experiments';
@@ -31,7 +31,7 @@ function unlinkAddressPath(addr) {
31
31
  * @param addr
32
32
  * @param app
33
33
  */
34
- export function createServerFactory(config: ConfigRuntime, addr, app) {
34
+ export function createServerFactory(config: ConfigYaml, addr, app) {
35
35
  let serverFactory;
36
36
  if (addr.proto === 'https') {
37
37
  debug('https enabled');
@@ -101,7 +101,7 @@ export function createServerFactory(config: ConfigRuntime, addr, app) {
101
101
  * @param pkgName
102
102
  */
103
103
  export async function initServer(
104
- config: ConfigRuntime,
104
+ config: ConfigYaml,
105
105
  port: string | void,
106
106
  version: string,
107
107
  pkgName: string
@@ -109,51 +109,63 @@ export async function initServer(
109
109
  return new Promise(async (resolve, reject) => {
110
110
  // FIXME: get only the first match, the multiple address will be removed
111
111
  const [addr] = getListListenAddresses(port, config.listen);
112
- const logger = setup(config?.log as LoggerConfigItem);
112
+ const logger = setup(config?.log as any);
113
113
  displayExperimentsInfoBox(config.flags);
114
- const app = await server(config);
115
- const serverFactory = createServerFactory(config, addr, app);
116
- serverFactory
117
- .listen(addr.port || addr.path, addr.host, (): void => {
118
- // send a message for test
119
- if (isFunction(process.send)) {
120
- process.send({
121
- verdaccio_started: true,
122
- });
123
- }
124
- const addressServer = `${
125
- addr.path
126
- ? url.format({
127
- protocol: 'unix',
128
- pathname: addr.path,
129
- })
130
- : url.format({
131
- protocol: addr.proto,
132
- hostname: addr.host,
133
- port: addr.port,
134
- pathname: '/',
135
- })
136
- }`;
137
- logger.info(`http address ${addressServer}`);
138
- logger.info(`version: ${version}`);
139
- resolve();
140
- })
141
- .on('error', function (err): void {
142
- reject(err);
143
- process.exitCode = 1;
144
- });
145
114
 
146
- function handleShutdownGracefully() {
147
- logger.fatal('received shutdown signal - closing server gracefully...');
148
- serverFactory.close(() => {
149
- logger.info('server closed.');
150
- process.exit(0);
115
+ let app;
116
+ if (process.env.VERDACCIO_SERVER === 'fastify') {
117
+ app = await fastifyServer(config);
118
+ app.listen({ port: addr.port, host: addr.host }, (err) => {
119
+ if (err) {
120
+ reject(err);
121
+ } else {
122
+ resolve();
123
+ }
151
124
  });
152
- }
125
+ } else {
126
+ app = await server(config);
127
+ const serverFactory = createServerFactory(config, addr, app);
128
+ serverFactory
129
+ .listen(addr.port || addr.path, addr.host, (): void => {
130
+ // send a message for test
131
+ if (isFunction(process.send)) {
132
+ process.send({
133
+ verdaccio_started: true,
134
+ });
135
+ }
136
+ const addressServer = `${
137
+ addr.path
138
+ ? url.format({
139
+ protocol: 'unix',
140
+ pathname: addr.path,
141
+ })
142
+ : url.format({
143
+ protocol: addr.proto,
144
+ hostname: addr.host,
145
+ port: addr.port,
146
+ pathname: '/',
147
+ })
148
+ }`;
149
+ logger.info(`http address ${addressServer}`);
150
+ logger.info(`version: ${version}`);
151
+ resolve();
152
+ })
153
+ .on('error', function (err): void {
154
+ reject(err);
155
+ process.exitCode = 1;
156
+ });
157
+ function handleShutdownGracefully() {
158
+ logger.warn('received shutdown signal - closing server gracefully...');
159
+ serverFactory.close(() => {
160
+ logger.info('server closed.');
161
+ process.exit(0);
162
+ });
163
+ }
153
164
 
154
- for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
155
- // Use once() so that receiving double signals exit the app.
156
- process.once(signal, handleShutdownGracefully);
165
+ for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
166
+ // Use once() so that receiving double signals exit the app.
167
+ process.once(signal, handleShutdownGracefully);
168
+ }
157
169
  }
158
170
  });
159
171
  }
@@ -169,18 +181,18 @@ export async function initServer(
169
181
  });
170
182
  * @param config
171
183
  */
172
- export async function runServer(config?: string | ConfigRuntime): Promise<any> {
173
- let configurationParsed: ConfigRuntime;
184
+ export async function runServer(config?: string | ConfigYaml): Promise<any> {
185
+ let configurationParsed: ConfigYaml;
174
186
  if (config === undefined || typeof config === 'string') {
175
187
  const configPathLocation = findConfigFile(config);
176
- configurationParsed = parseConfigFile(configPathLocation) as ConfigRuntime;
188
+ configurationParsed = parseConfigFile(configPathLocation);
177
189
  } else if (_.isObject(config)) {
178
190
  configurationParsed = config;
179
191
  } else {
180
192
  throw new Error(API_ERROR.CONFIG_BAD_FORMAT);
181
193
  }
182
194
 
183
- setup(configurationParsed.log as LoggerConfigItem);
195
+ setup(configurationParsed.log as any);
184
196
  displayExperimentsInfoBox(configurationParsed.flags);
185
197
  // FIXME: get only the first match, the multiple address will be removed
186
198
  const [addr] = getListListenAddresses(undefined, configurationParsed.listen);
@@ -11,12 +11,11 @@ describe('startServer via API', () => {
11
11
 
12
12
  test('should fail on start with empty configuration', async () => {
13
13
  // @ts-expect-error
14
- await expect(runServer({})).rejects.toThrow(
15
- 'AssertionError [ERR_ASSERTION]: CONFIG: storage path not defined'
16
- );
14
+ await expect(runServer({})).rejects.toThrow('config_path is required');
17
15
  });
18
16
 
19
17
  test('should fail on start with null as entry', async () => {
20
- await expect(runServer(null)).rejects.toThrow('config file must be an object');
18
+ // @ts-expected-error
19
+ await expect(runServer(null)).rejects.toThrow();
21
20
  });
22
21
  });
package/tsconfig.json CHANGED
@@ -13,9 +13,6 @@
13
13
  {
14
14
  "path": "../core/cli-ui"
15
15
  },
16
- {
17
- "path": "../core/commons-api"
18
- },
19
16
  {
20
17
  "path": "../logger"
21
18
  },
@@ -23,7 +20,10 @@
23
20
  "path": "../mock"
24
21
  },
25
22
  {
26
- "path": "../server"
23
+ "path": "../server/express"
24
+ },
25
+ {
26
+ "path": "../server/fastify"
27
27
  }
28
28
  ]
29
29
  }