@verdaccio/core 6.0.0-6-next.5 → 6.0.0-6-next.6

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 (40) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/build/constants.d.ts +15 -0
  3. package/build/constants.js +20 -2
  4. package/build/constants.js.map +1 -1
  5. package/build/error-utils.d.ts +2 -0
  6. package/build/error-utils.js +2 -0
  7. package/build/error-utils.js.map +1 -1
  8. package/build/file-utils.d.ts +13 -0
  9. package/build/file-utils.js +37 -0
  10. package/build/file-utils.js.map +1 -1
  11. package/build/index.d.ts +2 -1
  12. package/build/index.js +4 -1
  13. package/build/index.js.map +1 -1
  14. package/build/path-utils.js.map +1 -1
  15. package/build/pkg-utils.d.ts +11 -3
  16. package/build/pkg-utils.js +18 -0
  17. package/build/pkg-utils.js.map +1 -1
  18. package/build/plugin-utils.js.map +1 -1
  19. package/build/schemes/publish-manifest.d.ts +7 -0
  20. package/build/schemes/publish-manifest.js +49 -0
  21. package/build/schemes/publish-manifest.js.map +1 -0
  22. package/build/search-utils.js.map +1 -1
  23. package/build/stream-utils.js.map +1 -1
  24. package/build/validation-utils.d.ts +5 -3
  25. package/build/validation-utils.js +25 -14
  26. package/build/validation-utils.js.map +1 -1
  27. package/build/warning-utils.d.ts +0 -1
  28. package/build/warning-utils.js +0 -2
  29. package/build/warning-utils.js.map +1 -1
  30. package/package.json +61 -58
  31. package/src/constants.ts +18 -0
  32. package/src/error-utils.ts +2 -0
  33. package/src/file-utils.ts +26 -0
  34. package/src/index.ts +3 -1
  35. package/src/pkg-utils.ts +18 -3
  36. package/src/schemes/publish-manifest.ts +38 -0
  37. package/src/validation-utils.ts +17 -13
  38. package/src/warning-utils.ts +0 -3
  39. package/test/pkg-utils.spec.ts +42 -0
  40. package/test/validation-utilts.spec.ts +96 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,55 @@
1
1
  # @verdaccio/core
2
2
 
3
+ ## 6.0.0-6-next.6
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
+ - a3a209b5: feat: migrate to pino.js 8
30
+
31
+ ### Minor Changes
32
+
33
+ - 00d1d2a1: chore: env variable for launch fastify
34
+
35
+ - Update fastify to major release `v4.3.0`
36
+ - Update CLI launcher
37
+
38
+ via CLI
39
+
40
+ ```
41
+ VERDACCIO_SERVER=fastify verdaccio
42
+ ```
43
+
44
+ with docker
45
+
46
+ ```
47
+ docker run -it --rm --name verdaccio \
48
+ -e "VERDACCIO_SERVER=8080" -p 8080:8080 \
49
+ -e "VERDACCIO_SERVER=fastify" \
50
+ verdaccio/verdaccio
51
+ ```
52
+
3
53
  ## 6.0.0-6-next.5
4
54
 
5
55
  ### Major Changes
@@ -34,6 +34,7 @@ export declare const HEADERS: {
34
34
  CSP: string;
35
35
  CTO: string;
36
36
  XSS: string;
37
+ NONE_MATCH: string;
37
38
  ETAG: string;
38
39
  JSON_CHARSET: string;
39
40
  OCTET_STREAM: string;
@@ -71,8 +72,22 @@ export declare const API_MESSAGE: {
71
72
  TAG_UPDATED: string;
72
73
  TAG_REMOVED: string;
73
74
  TAG_ADDED: string;
75
+ OK: string;
74
76
  LOGGED_OUT: string;
75
77
  };
76
78
  export declare const LOG_STATUS_MESSAGE = "@{status}, user: @{user}(@{remoteIP}), req: '@{request.method} @{request.url}'";
77
79
  export declare const LOG_VERDACCIO_ERROR: string;
78
80
  export declare const LOG_VERDACCIO_BYTES: string;
81
+ export declare const ROLES: {
82
+ $ALL: string;
83
+ ALL: string;
84
+ $AUTH: string;
85
+ $ANONYMOUS: string;
86
+ DEPRECATED_ALL: string;
87
+ DEPRECATED_AUTH: string;
88
+ DEPRECATED_ANONYMOUS: string;
89
+ };
90
+ export declare const PACKAGE_ACCESS: {
91
+ SCOPE: string;
92
+ ALL: string;
93
+ };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.USERS = exports.TOKEN_BEARER = exports.TOKEN_BASIC = exports.TIME_EXPIRATION_7D = exports.TIME_EXPIRATION_24H = exports.LOG_VERDACCIO_ERROR = exports.LOG_VERDACCIO_BYTES = exports.LOG_STATUS_MESSAGE = exports.LATEST = exports.HTTP_STATUS = exports.HEADER_TYPE = exports.HEADERS = exports.ERROR_CODE = exports.DIST_TAGS = exports.DEFAULT_USER = exports.DEFAULT_MIN_LIMIT_PASSWORD = exports.CHARACTER_ENCODING = exports.API_MESSAGE = void 0;
6
+ exports.USERS = exports.TOKEN_BEARER = exports.TOKEN_BASIC = exports.TIME_EXPIRATION_7D = exports.TIME_EXPIRATION_24H = exports.ROLES = exports.PACKAGE_ACCESS = exports.LOG_VERDACCIO_ERROR = exports.LOG_VERDACCIO_BYTES = exports.LOG_STATUS_MESSAGE = exports.LATEST = exports.HTTP_STATUS = exports.HEADER_TYPE = exports.HEADERS = exports.ERROR_CODE = exports.DIST_TAGS = exports.DEFAULT_USER = exports.DEFAULT_MIN_LIMIT_PASSWORD = exports.CHARACTER_ENCODING = exports.API_MESSAGE = void 0;
7
7
 
8
8
  var _httpStatusCodes = _interopRequireDefault(require("http-status-codes"));
9
9
 
@@ -32,7 +32,8 @@ const HEADER_TYPE = {
32
32
  exports.HEADER_TYPE = HEADER_TYPE;
33
33
  const CHARACTER_ENCODING = {
34
34
  UTF8: 'utf8'
35
- };
35
+ }; // @deprecated use Bearer instead
36
+
36
37
  exports.CHARACTER_ENCODING = CHARACTER_ENCODING;
37
38
  const TOKEN_BASIC = 'Basic';
38
39
  exports.TOKEN_BASIC = TOKEN_BASIC;
@@ -58,6 +59,7 @@ const HEADERS = {
58
59
  CSP: 'Content-Security-Policy',
59
60
  CTO: 'X-Content-Type-Options',
60
61
  XSS: 'X-XSS-Protection',
62
+ NONE_MATCH: 'If-None-Match',
61
63
  ETAG: 'ETag',
62
64
  JSON_CHARSET: 'application/json; charset=utf-8',
63
65
  OCTET_STREAM: 'application/octet-stream; charset=utf-8',
@@ -98,6 +100,7 @@ const API_MESSAGE = {
98
100
  TAG_UPDATED: 'tags updated',
99
101
  TAG_REMOVED: 'tag removed',
100
102
  TAG_ADDED: 'package tagged',
103
+ OK: 'ok',
101
104
  LOGGED_OUT: 'Logged out'
102
105
  };
103
106
  exports.API_MESSAGE = API_MESSAGE;
@@ -107,4 +110,19 @@ const LOG_VERDACCIO_ERROR = `${LOG_STATUS_MESSAGE}, error: @{!error}`;
107
110
  exports.LOG_VERDACCIO_ERROR = LOG_VERDACCIO_ERROR;
108
111
  const LOG_VERDACCIO_BYTES = `${LOG_STATUS_MESSAGE}, bytes: @{bytes.in}/@{bytes.out}`;
109
112
  exports.LOG_VERDACCIO_BYTES = LOG_VERDACCIO_BYTES;
113
+ const ROLES = {
114
+ $ALL: '$all',
115
+ ALL: 'all',
116
+ $AUTH: '$authenticated',
117
+ $ANONYMOUS: '$anonymous',
118
+ DEPRECATED_ALL: '@all',
119
+ DEPRECATED_AUTH: '@authenticated',
120
+ DEPRECATED_ANONYMOUS: '@anonymous'
121
+ };
122
+ exports.ROLES = ROLES;
123
+ const PACKAGE_ACCESS = {
124
+ SCOPE: '@*/*',
125
+ ALL: '**'
126
+ };
127
+ exports.PACKAGE_ACCESS = PACKAGE_ACCESS;
110
128
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts"],"names":["DEFAULT_MIN_LIMIT_PASSWORD","TIME_EXPIRATION_24H","TIME_EXPIRATION_7D","DIST_TAGS","LATEST","USERS","DEFAULT_USER","HEADER_TYPE","CONTENT_ENCODING","CONTENT_TYPE","CONTENT_LENGTH","ACCEPT_ENCODING","CHARACTER_ENCODING","UTF8","TOKEN_BASIC","TOKEN_BEARER","HEADERS","ACCEPT","USER_AGENT","JSON","TEXT_PLAIN","TEXT_PLAIN_UTF8","TEXT_HTML_UTF8","TEXT_HTML","AUTHORIZATION","FORWARDED_PROTO","FORWARDED_FOR","FRAMES_OPTIONS","CSP","CTO","XSS","ETAG","JSON_CHARSET","OCTET_STREAM","TEXT_CHARSET","WWW_AUTH","GZIP","HTTP_STATUS","OK","httpCodes","CREATED","MULTIPLE_CHOICES","NOT_MODIFIED","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","CONFLICT","NOT_IMPLEMENTED","UNSUPPORTED_MEDIA","UNSUPPORTED_MEDIA_TYPE","BAD_DATA","UNPROCESSABLE_ENTITY","INTERNAL_ERROR","INTERNAL_SERVER_ERROR","SERVICE_UNAVAILABLE","LOOP_DETECTED","ERROR_CODE","token_required","API_MESSAGE","PKG_CREATED","PKG_CHANGED","PKG_REMOVED","PKG_PUBLISHED","TARBALL_UPLOADED","TARBALL_REMOVED","TAG_UPDATED","TAG_REMOVED","TAG_ADDED","LOGGED_OUT","LOG_STATUS_MESSAGE","LOG_VERDACCIO_ERROR","LOG_VERDACCIO_BYTES"],"mappings":"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","sourcesContent":["import httpCodes from 'http-status-codes';\n\nexport const DEFAULT_MIN_LIMIT_PASSWORD = 3;\nexport const TIME_EXPIRATION_24H = '24h';\nexport const TIME_EXPIRATION_7D = '7d';\nexport const DIST_TAGS = 'dist-tags';\nexport const LATEST = 'latest';\nexport const USERS = 'users';\nexport const DEFAULT_USER = 'Anonymous';\n\nexport const HEADER_TYPE = {\n CONTENT_ENCODING: 'content-encoding',\n CONTENT_TYPE: 'content-type',\n CONTENT_LENGTH: 'content-length',\n ACCEPT_ENCODING: 'accept-encoding',\n};\n\nexport const CHARACTER_ENCODING = {\n UTF8: 'utf8',\n};\n\nexport const TOKEN_BASIC = 'Basic';\nexport const TOKEN_BEARER = 'Bearer';\n\nexport const HEADERS = {\n ACCEPT: 'Accept',\n ACCEPT_ENCODING: 'Accept-Encoding',\n USER_AGENT: 'User-Agent',\n JSON: 'application/json',\n CONTENT_TYPE: 'Content-type',\n CONTENT_LENGTH: 'content-length',\n TEXT_PLAIN: 'text/plain',\n TEXT_PLAIN_UTF8: 'text/plain; charset=utf-8',\n TEXT_HTML_UTF8: 'text/html; charset=utf-8',\n TEXT_HTML: 'text/html',\n AUTHORIZATION: 'authorization',\n // only set with proxy that setup HTTPS\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto\n FORWARDED_PROTO: 'X-Forwarded-Proto',\n FORWARDED_FOR: 'X-Forwarded-For',\n FRAMES_OPTIONS: 'X-Frame-Options',\n CSP: 'Content-Security-Policy',\n CTO: 'X-Content-Type-Options',\n XSS: 'X-XSS-Protection',\n ETAG: 'ETag',\n JSON_CHARSET: 'application/json; charset=utf-8',\n OCTET_STREAM: 'application/octet-stream; charset=utf-8',\n TEXT_CHARSET: 'text/plain; charset=utf-8',\n WWW_AUTH: 'WWW-Authenticate',\n GZIP: 'gzip',\n};\n\nexport const HTTP_STATUS = {\n OK: httpCodes.OK,\n CREATED: httpCodes.CREATED,\n MULTIPLE_CHOICES: httpCodes.MULTIPLE_CHOICES,\n NOT_MODIFIED: httpCodes.NOT_MODIFIED,\n BAD_REQUEST: httpCodes.BAD_REQUEST,\n UNAUTHORIZED: httpCodes.UNAUTHORIZED,\n FORBIDDEN: httpCodes.FORBIDDEN,\n NOT_FOUND: httpCodes.NOT_FOUND,\n CONFLICT: httpCodes.CONFLICT,\n NOT_IMPLEMENTED: httpCodes.NOT_IMPLEMENTED,\n UNSUPPORTED_MEDIA: httpCodes.UNSUPPORTED_MEDIA_TYPE,\n BAD_DATA: httpCodes.UNPROCESSABLE_ENTITY,\n INTERNAL_ERROR: httpCodes.INTERNAL_SERVER_ERROR,\n SERVICE_UNAVAILABLE: httpCodes.SERVICE_UNAVAILABLE,\n LOOP_DETECTED: 508,\n};\n\nexport const ERROR_CODE = {\n token_required: 'token is required',\n};\n\nexport const API_MESSAGE = {\n PKG_CREATED: 'created new package',\n PKG_CHANGED: 'package changed',\n PKG_REMOVED: 'package removed',\n PKG_PUBLISHED: 'package published',\n TARBALL_UPLOADED: 'tarball uploaded successfully',\n TARBALL_REMOVED: 'tarball removed',\n TAG_UPDATED: 'tags updated',\n TAG_REMOVED: 'tag removed',\n TAG_ADDED: 'package tagged',\n LOGGED_OUT: 'Logged out',\n};\n\nexport const LOG_STATUS_MESSAGE =\n \"@{status}, user: @{user}(@{remoteIP}), req: '@{request.method} @{request.url}'\";\nexport const LOG_VERDACCIO_ERROR = `${LOG_STATUS_MESSAGE}, error: @{!error}`;\nexport const LOG_VERDACCIO_BYTES = `${LOG_STATUS_MESSAGE}, bytes: @{bytes.in}/@{bytes.out}`;\n"],"file":"constants.js"}
1
+ {"version":3,"file":"constants.js","names":["DEFAULT_MIN_LIMIT_PASSWORD","TIME_EXPIRATION_24H","TIME_EXPIRATION_7D","DIST_TAGS","LATEST","USERS","DEFAULT_USER","HEADER_TYPE","CONTENT_ENCODING","CONTENT_TYPE","CONTENT_LENGTH","ACCEPT_ENCODING","CHARACTER_ENCODING","UTF8","TOKEN_BASIC","TOKEN_BEARER","HEADERS","ACCEPT","USER_AGENT","JSON","TEXT_PLAIN","TEXT_PLAIN_UTF8","TEXT_HTML_UTF8","TEXT_HTML","AUTHORIZATION","FORWARDED_PROTO","FORWARDED_FOR","FRAMES_OPTIONS","CSP","CTO","XSS","NONE_MATCH","ETAG","JSON_CHARSET","OCTET_STREAM","TEXT_CHARSET","WWW_AUTH","GZIP","HTTP_STATUS","OK","httpCodes","CREATED","MULTIPLE_CHOICES","NOT_MODIFIED","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","CONFLICT","NOT_IMPLEMENTED","UNSUPPORTED_MEDIA","UNSUPPORTED_MEDIA_TYPE","BAD_DATA","UNPROCESSABLE_ENTITY","INTERNAL_ERROR","INTERNAL_SERVER_ERROR","SERVICE_UNAVAILABLE","LOOP_DETECTED","ERROR_CODE","token_required","API_MESSAGE","PKG_CREATED","PKG_CHANGED","PKG_REMOVED","PKG_PUBLISHED","TARBALL_UPLOADED","TARBALL_REMOVED","TAG_UPDATED","TAG_REMOVED","TAG_ADDED","LOGGED_OUT","LOG_STATUS_MESSAGE","LOG_VERDACCIO_ERROR","LOG_VERDACCIO_BYTES","ROLES","$ALL","ALL","$AUTH","$ANONYMOUS","DEPRECATED_ALL","DEPRECATED_AUTH","DEPRECATED_ANONYMOUS","PACKAGE_ACCESS","SCOPE"],"sources":["../src/constants.ts"],"sourcesContent":["import httpCodes from 'http-status-codes';\n\nexport const DEFAULT_MIN_LIMIT_PASSWORD = 3;\nexport const TIME_EXPIRATION_24H = '24h';\nexport const TIME_EXPIRATION_7D = '7d';\nexport const DIST_TAGS = 'dist-tags';\nexport const LATEST = 'latest';\nexport const USERS = 'users';\nexport const DEFAULT_USER = 'Anonymous';\n\nexport const HEADER_TYPE = {\n CONTENT_ENCODING: 'content-encoding',\n CONTENT_TYPE: 'content-type',\n CONTENT_LENGTH: 'content-length',\n ACCEPT_ENCODING: 'accept-encoding',\n};\n\nexport const CHARACTER_ENCODING = {\n UTF8: 'utf8',\n};\n\n// @deprecated use Bearer instead\nexport const TOKEN_BASIC = 'Basic';\nexport const TOKEN_BEARER = 'Bearer';\n\nexport const HEADERS = {\n ACCEPT: 'Accept',\n ACCEPT_ENCODING: 'Accept-Encoding',\n USER_AGENT: 'User-Agent',\n JSON: 'application/json',\n CONTENT_TYPE: 'Content-type',\n CONTENT_LENGTH: 'content-length',\n TEXT_PLAIN: 'text/plain',\n TEXT_PLAIN_UTF8: 'text/plain; charset=utf-8',\n TEXT_HTML_UTF8: 'text/html; charset=utf-8',\n TEXT_HTML: 'text/html',\n AUTHORIZATION: 'authorization',\n // only set with proxy that setup HTTPS\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto\n FORWARDED_PROTO: 'X-Forwarded-Proto',\n FORWARDED_FOR: 'X-Forwarded-For',\n FRAMES_OPTIONS: 'X-Frame-Options',\n CSP: 'Content-Security-Policy',\n CTO: 'X-Content-Type-Options',\n XSS: 'X-XSS-Protection',\n NONE_MATCH: 'If-None-Match',\n ETAG: 'ETag',\n JSON_CHARSET: 'application/json; charset=utf-8',\n OCTET_STREAM: 'application/octet-stream; charset=utf-8',\n TEXT_CHARSET: 'text/plain; charset=utf-8',\n WWW_AUTH: 'WWW-Authenticate',\n GZIP: 'gzip',\n};\n\nexport const HTTP_STATUS = {\n OK: httpCodes.OK,\n CREATED: httpCodes.CREATED,\n MULTIPLE_CHOICES: httpCodes.MULTIPLE_CHOICES,\n NOT_MODIFIED: httpCodes.NOT_MODIFIED,\n BAD_REQUEST: httpCodes.BAD_REQUEST,\n UNAUTHORIZED: httpCodes.UNAUTHORIZED,\n FORBIDDEN: httpCodes.FORBIDDEN,\n NOT_FOUND: httpCodes.NOT_FOUND,\n CONFLICT: httpCodes.CONFLICT,\n NOT_IMPLEMENTED: httpCodes.NOT_IMPLEMENTED,\n UNSUPPORTED_MEDIA: httpCodes.UNSUPPORTED_MEDIA_TYPE,\n BAD_DATA: httpCodes.UNPROCESSABLE_ENTITY,\n INTERNAL_ERROR: httpCodes.INTERNAL_SERVER_ERROR,\n SERVICE_UNAVAILABLE: httpCodes.SERVICE_UNAVAILABLE,\n LOOP_DETECTED: 508,\n};\n\nexport const ERROR_CODE = {\n token_required: 'token is required',\n};\n\nexport const API_MESSAGE = {\n PKG_CREATED: 'created new package',\n PKG_CHANGED: 'package changed',\n PKG_REMOVED: 'package removed',\n PKG_PUBLISHED: 'package published',\n TARBALL_UPLOADED: 'tarball uploaded successfully',\n TARBALL_REMOVED: 'tarball removed',\n TAG_UPDATED: 'tags updated',\n TAG_REMOVED: 'tag removed',\n TAG_ADDED: 'package tagged',\n OK: 'ok',\n LOGGED_OUT: 'Logged out',\n};\n\nexport const LOG_STATUS_MESSAGE =\n \"@{status}, user: @{user}(@{remoteIP}), req: '@{request.method} @{request.url}'\";\nexport const LOG_VERDACCIO_ERROR = `${LOG_STATUS_MESSAGE}, error: @{!error}`;\nexport const LOG_VERDACCIO_BYTES = `${LOG_STATUS_MESSAGE}, bytes: @{bytes.in}/@{bytes.out}`;\n\nexport const ROLES = {\n $ALL: '$all',\n ALL: 'all',\n $AUTH: '$authenticated',\n $ANONYMOUS: '$anonymous',\n DEPRECATED_ALL: '@all',\n DEPRECATED_AUTH: '@authenticated',\n DEPRECATED_ANONYMOUS: '@anonymous',\n};\n\nexport const PACKAGE_ACCESS = {\n SCOPE: '@*/*',\n ALL: '**',\n};\n"],"mappings":"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"}
@@ -15,10 +15,12 @@ export declare const API_ERROR: {
15
15
  NOT_PACKAGE_UPLINK: string;
16
16
  UPLINK_OFFLINE_PUBLISH: string;
17
17
  UPLINK_OFFLINE: string;
18
+ NOT_MODIFIED_NO_DATA: string;
18
19
  CONTENT_MISMATCH: string;
19
20
  NOT_FILE_UPLINK: string;
20
21
  MAX_USERS_REACHED: string;
21
22
  VERSION_NOT_EXIST: string;
23
+ NO_SUCH_FILE: string;
22
24
  UNSUPORTED_REGISTRY_CALL: string;
23
25
  FILE_NOT_FOUND: string;
24
26
  REGISTRATION_DISABLED: string;
@@ -36,10 +36,12 @@ const API_ERROR = {
36
36
  NOT_PACKAGE_UPLINK: 'package does not exist on uplink',
37
37
  UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish',
38
38
  UPLINK_OFFLINE: 'uplink is offline',
39
+ NOT_MODIFIED_NO_DATA: 'no data',
39
40
  CONTENT_MISMATCH: 'content length mismatch',
40
41
  NOT_FILE_UPLINK: "file doesn't exist on uplink",
41
42
  MAX_USERS_REACHED: 'maximum amount of users reached',
42
43
  VERSION_NOT_EXIST: "this version doesn't exist",
44
+ NO_SUCH_FILE: 'no such file available',
43
45
  UNSUPORTED_REGISTRY_CALL: 'unsupported registry call',
44
46
  FILE_NOT_FOUND: 'File not found',
45
47
  REGISTRATION_DISABLED: 'user registration disabled',
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error-utils.ts"],"names":["API_ERROR","PASSWORD_SHORT","passLength","DEFAULT_MIN_LIMIT_PASSWORD","MUST_BE_LOGGED","PLUGIN_ERROR","CONFIG_BAD_FORMAT","BAD_USERNAME_PASSWORD","NO_PACKAGE","PACKAGE_CANNOT_BE_ADDED","BAD_DATA","NOT_ALLOWED","NOT_ALLOWED_PUBLISH","INTERNAL_SERVER_ERROR","UNKNOWN_ERROR","NOT_PACKAGE_UPLINK","UPLINK_OFFLINE_PUBLISH","UPLINK_OFFLINE","CONTENT_MISMATCH","NOT_FILE_UPLINK","MAX_USERS_REACHED","VERSION_NOT_EXIST","UNSUPORTED_REGISTRY_CALL","FILE_NOT_FOUND","REGISTRATION_DISABLED","UNAUTHORIZED_ACCESS","BAD_STATUS_CODE","PACKAGE_EXIST","BAD_AUTH_HEADER","WEB_DISABLED","DEPRECATED_BASIC_HEADER","BAD_FORMAT_USER_GROUP","RESOURCE_UNAVAILABLE","BAD_PACKAGE_DATA","USERNAME_PASSWORD_REQUIRED","USERNAME_ALREADY_REGISTERED","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","TFA_DISABLED","STORAGE_NOT_IMPLEMENT","PARAMETERS_NOT_VALID","APP_ERROR","CONFIG_NOT_VALID","PROFILE_ERROR","PASSWORD_VALIDATION","getError","code","message","httpError","getConflict","HTTP_STATUS","CONFLICT","getBadData","customMessage","getBadRequest","BAD_REQUEST","getInternalError","INTERNAL_ERROR","getUnauthorized","UNAUTHORIZED","getForbidden","FORBIDDEN","getServiceUnavailable","SERVICE_UNAVAILABLE","getNotFound","NOT_FOUND","getCode","statusCode"],"mappings":"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","sourcesContent":["import createError, { HttpError } from 'http-errors';\n\nimport { DEFAULT_MIN_LIMIT_PASSWORD, HTTP_STATUS } from './constants';\n\nexport const API_ERROR = {\n PASSWORD_SHORT: (passLength = DEFAULT_MIN_LIMIT_PASSWORD): string =>\n `The provided password is too short. Please pick a password longer than ` +\n `${passLength} characters.`,\n MUST_BE_LOGGED: 'You must be logged in to publish packages.',\n PLUGIN_ERROR: 'bug in the auth plugin system',\n CONFIG_BAD_FORMAT: 'config file must be an object',\n BAD_USERNAME_PASSWORD: 'bad username/password, access denied',\n NO_PACKAGE: 'no such package available',\n PACKAGE_CANNOT_BE_ADDED: 'this package cannot be added',\n BAD_DATA: 'bad data',\n NOT_ALLOWED: 'not allowed to access package',\n NOT_ALLOWED_PUBLISH: 'not allowed to publish package',\n INTERNAL_SERVER_ERROR: 'internal server error',\n UNKNOWN_ERROR: 'unknown error',\n NOT_PACKAGE_UPLINK: 'package does not exist on uplink',\n UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish',\n UPLINK_OFFLINE: 'uplink is offline',\n CONTENT_MISMATCH: 'content length mismatch',\n NOT_FILE_UPLINK: \"file doesn't exist on uplink\",\n MAX_USERS_REACHED: 'maximum amount of users reached',\n VERSION_NOT_EXIST: \"this version doesn't exist\",\n UNSUPORTED_REGISTRY_CALL: 'unsupported registry call',\n FILE_NOT_FOUND: 'File not found',\n REGISTRATION_DISABLED: 'user registration disabled',\n UNAUTHORIZED_ACCESS: 'unauthorized access',\n BAD_STATUS_CODE: 'bad status code',\n PACKAGE_EXIST: 'this package is already present',\n BAD_AUTH_HEADER: 'bad authorization header',\n WEB_DISABLED: 'Web interface is disabled in the config file',\n DEPRECATED_BASIC_HEADER: 'basic authentication is deprecated, please use JWT instead',\n BAD_FORMAT_USER_GROUP: 'user groups is different than an array',\n RESOURCE_UNAVAILABLE: 'resource unavailable',\n BAD_PACKAGE_DATA: 'bad incoming package data',\n USERNAME_PASSWORD_REQUIRED: 'username and password is required',\n USERNAME_ALREADY_REGISTERED: 'username is already registered',\n};\n\nexport const SUPPORT_ERRORS = {\n PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',\n TFA_DISABLED: 'the two-factor authentication is not yet supported',\n STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',\n PARAMETERS_NOT_VALID: 'the parameters are not valid',\n};\n\nexport const APP_ERROR = {\n CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file',\n PROFILE_ERROR: 'profile unexpected error',\n PASSWORD_VALIDATION: 'not valid password',\n};\n\nexport type VerdaccioError = HttpError & { code: number };\n\nfunction getError(code: number, message: string): VerdaccioError {\n const httpError = createError(code, message);\n\n httpError.code = code;\n\n return httpError as VerdaccioError;\n}\n\nexport function getConflict(message: string = API_ERROR.PACKAGE_EXIST): VerdaccioError {\n return getError(HTTP_STATUS.CONFLICT, message);\n}\n\nexport function getBadData(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_DATA, customMessage || API_ERROR.BAD_DATA);\n}\n\nexport function getBadRequest(customMessage: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_REQUEST, customMessage);\n}\n\nexport function getInternalError(customMessage?: string): VerdaccioError {\n return customMessage\n ? getError(HTTP_STATUS.INTERNAL_ERROR, customMessage)\n : getError(HTTP_STATUS.INTERNAL_ERROR, API_ERROR.UNKNOWN_ERROR);\n}\n\nexport function getUnauthorized(message = 'no credentials provided'): VerdaccioError {\n return getError(HTTP_STATUS.UNAUTHORIZED, message);\n}\n\nexport function getForbidden(message = \"can't use this filename\"): VerdaccioError {\n return getError(HTTP_STATUS.FORBIDDEN, message);\n}\n\nexport function getServiceUnavailable(\n message: string = API_ERROR.RESOURCE_UNAVAILABLE\n): VerdaccioError {\n return getError(HTTP_STATUS.SERVICE_UNAVAILABLE, message);\n}\n\nexport function getNotFound(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.NOT_FOUND, customMessage || API_ERROR.NO_PACKAGE);\n}\n\nexport function getCode(statusCode: number, customMessage: string): VerdaccioError {\n return getError(statusCode, customMessage);\n}\n"],"file":"error-utils.js"}
1
+ {"version":3,"file":"error-utils.js","names":["API_ERROR","PASSWORD_SHORT","passLength","DEFAULT_MIN_LIMIT_PASSWORD","MUST_BE_LOGGED","PLUGIN_ERROR","CONFIG_BAD_FORMAT","BAD_USERNAME_PASSWORD","NO_PACKAGE","PACKAGE_CANNOT_BE_ADDED","BAD_DATA","NOT_ALLOWED","NOT_ALLOWED_PUBLISH","INTERNAL_SERVER_ERROR","UNKNOWN_ERROR","NOT_PACKAGE_UPLINK","UPLINK_OFFLINE_PUBLISH","UPLINK_OFFLINE","NOT_MODIFIED_NO_DATA","CONTENT_MISMATCH","NOT_FILE_UPLINK","MAX_USERS_REACHED","VERSION_NOT_EXIST","NO_SUCH_FILE","UNSUPORTED_REGISTRY_CALL","FILE_NOT_FOUND","REGISTRATION_DISABLED","UNAUTHORIZED_ACCESS","BAD_STATUS_CODE","PACKAGE_EXIST","BAD_AUTH_HEADER","WEB_DISABLED","DEPRECATED_BASIC_HEADER","BAD_FORMAT_USER_GROUP","RESOURCE_UNAVAILABLE","BAD_PACKAGE_DATA","USERNAME_PASSWORD_REQUIRED","USERNAME_ALREADY_REGISTERED","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","TFA_DISABLED","STORAGE_NOT_IMPLEMENT","PARAMETERS_NOT_VALID","APP_ERROR","CONFIG_NOT_VALID","PROFILE_ERROR","PASSWORD_VALIDATION","getError","code","message","httpError","createError","getConflict","HTTP_STATUS","CONFLICT","getBadData","customMessage","getBadRequest","BAD_REQUEST","getInternalError","INTERNAL_ERROR","getUnauthorized","UNAUTHORIZED","getForbidden","FORBIDDEN","getServiceUnavailable","SERVICE_UNAVAILABLE","getNotFound","NOT_FOUND","getCode","statusCode"],"sources":["../src/error-utils.ts"],"sourcesContent":["import createError, { HttpError } from 'http-errors';\n\nimport { DEFAULT_MIN_LIMIT_PASSWORD, HTTP_STATUS } from './constants';\n\nexport const API_ERROR = {\n PASSWORD_SHORT: (passLength = DEFAULT_MIN_LIMIT_PASSWORD): string =>\n `The provided password is too short. Please pick a password longer than ` +\n `${passLength} characters.`,\n MUST_BE_LOGGED: 'You must be logged in to publish packages.',\n PLUGIN_ERROR: 'bug in the auth plugin system',\n CONFIG_BAD_FORMAT: 'config file must be an object',\n BAD_USERNAME_PASSWORD: 'bad username/password, access denied',\n NO_PACKAGE: 'no such package available',\n PACKAGE_CANNOT_BE_ADDED: 'this package cannot be added',\n BAD_DATA: 'bad data',\n NOT_ALLOWED: 'not allowed to access package',\n NOT_ALLOWED_PUBLISH: 'not allowed to publish package',\n INTERNAL_SERVER_ERROR: 'internal server error',\n UNKNOWN_ERROR: 'unknown error',\n NOT_PACKAGE_UPLINK: 'package does not exist on uplink',\n UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish',\n UPLINK_OFFLINE: 'uplink is offline',\n NOT_MODIFIED_NO_DATA: 'no data',\n CONTENT_MISMATCH: 'content length mismatch',\n NOT_FILE_UPLINK: \"file doesn't exist on uplink\",\n MAX_USERS_REACHED: 'maximum amount of users reached',\n VERSION_NOT_EXIST: \"this version doesn't exist\",\n NO_SUCH_FILE: 'no such file available',\n UNSUPORTED_REGISTRY_CALL: 'unsupported registry call',\n FILE_NOT_FOUND: 'File not found',\n REGISTRATION_DISABLED: 'user registration disabled',\n UNAUTHORIZED_ACCESS: 'unauthorized access',\n BAD_STATUS_CODE: 'bad status code',\n PACKAGE_EXIST: 'this package is already present',\n BAD_AUTH_HEADER: 'bad authorization header',\n WEB_DISABLED: 'Web interface is disabled in the config file',\n DEPRECATED_BASIC_HEADER: 'basic authentication is deprecated, please use JWT instead',\n BAD_FORMAT_USER_GROUP: 'user groups is different than an array',\n RESOURCE_UNAVAILABLE: 'resource unavailable',\n BAD_PACKAGE_DATA: 'bad incoming package data',\n USERNAME_PASSWORD_REQUIRED: 'username and password is required',\n USERNAME_ALREADY_REGISTERED: 'username is already registered',\n};\n\nexport const SUPPORT_ERRORS = {\n PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',\n TFA_DISABLED: 'the two-factor authentication is not yet supported',\n STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',\n PARAMETERS_NOT_VALID: 'the parameters are not valid',\n};\n\nexport const APP_ERROR = {\n CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file',\n PROFILE_ERROR: 'profile unexpected error',\n PASSWORD_VALIDATION: 'not valid password',\n};\n\nexport type VerdaccioError = HttpError & { code: number };\n\nfunction getError(code: number, message: string): VerdaccioError {\n const httpError = createError(code, message);\n\n httpError.code = code;\n\n return httpError as VerdaccioError;\n}\n\nexport function getConflict(message: string = API_ERROR.PACKAGE_EXIST): VerdaccioError {\n return getError(HTTP_STATUS.CONFLICT, message);\n}\n\nexport function getBadData(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_DATA, customMessage || API_ERROR.BAD_DATA);\n}\n\nexport function getBadRequest(customMessage: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_REQUEST, customMessage);\n}\n\nexport function getInternalError(customMessage?: string): VerdaccioError {\n return customMessage\n ? getError(HTTP_STATUS.INTERNAL_ERROR, customMessage)\n : getError(HTTP_STATUS.INTERNAL_ERROR, API_ERROR.UNKNOWN_ERROR);\n}\n\nexport function getUnauthorized(message = 'no credentials provided'): VerdaccioError {\n return getError(HTTP_STATUS.UNAUTHORIZED, message);\n}\n\nexport function getForbidden(message = \"can't use this filename\"): VerdaccioError {\n return getError(HTTP_STATUS.FORBIDDEN, message);\n}\n\nexport function getServiceUnavailable(\n message: string = API_ERROR.RESOURCE_UNAVAILABLE\n): VerdaccioError {\n return getError(HTTP_STATUS.SERVICE_UNAVAILABLE, message);\n}\n\nexport function getNotFound(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.NOT_FOUND, customMessage || API_ERROR.NO_PACKAGE);\n}\n\nexport function getCode(statusCode: number, customMessage: string): VerdaccioError {\n return getError(statusCode, customMessage);\n}\n"],"mappings":"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"}
@@ -1,3 +1,16 @@
1
1
  export declare const Files: {
2
2
  DatabaseName: string;
3
3
  };
4
+ /**
5
+ * Create a temporary folder.
6
+ * @param prefix The prefix of the folder name.
7
+ * @returns string
8
+ */
9
+ export declare function createTempFolder(prefix: string): Promise<string>;
10
+ /**
11
+ * Create temporary folder for an asset.
12
+ * @param prefix
13
+ * @param folder name
14
+ * @returns
15
+ */
16
+ export declare function createTempStorageFolder(prefix: string, folder?: string): Promise<string>;
@@ -4,8 +4,45 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Files = void 0;
7
+ exports.createTempFolder = createTempFolder;
8
+ exports.createTempStorageFolder = createTempStorageFolder;
9
+
10
+ var _promises = require("fs/promises");
11
+
12
+ var _os = _interopRequireDefault(require("os"));
13
+
14
+ var _path = _interopRequireDefault(require("path"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
7
18
  const Files = {
8
19
  DatabaseName: '.verdaccio-db.json'
9
20
  };
21
+ /**
22
+ * Create a temporary folder.
23
+ * @param prefix The prefix of the folder name.
24
+ * @returns string
25
+ */
26
+
10
27
  exports.Files = Files;
28
+
29
+ async function createTempFolder(prefix) {
30
+ return await (0, _promises.mkdtemp)(_path.default.join(_os.default.tmpdir(), prefix));
31
+ }
32
+ /**
33
+ * Create temporary folder for an asset.
34
+ * @param prefix
35
+ * @param folder name
36
+ * @returns
37
+ */
38
+
39
+
40
+ async function createTempStorageFolder(prefix, folder = 'storage') {
41
+ const tempFolder = await createTempFolder(prefix);
42
+
43
+ const storageFolder = _path.default.join(tempFolder, folder);
44
+
45
+ await (0, _promises.mkdir)(storageFolder);
46
+ return storageFolder;
47
+ }
11
48
  //# sourceMappingURL=file-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/file-utils.ts"],"names":["Files","DatabaseName"],"mappings":";;;;;;AAAO,MAAMA,KAAK,GAAG;AACnBC,EAAAA,YAAY,EAAE;AADK,CAAd","sourcesContent":["export const Files = {\n DatabaseName: '.verdaccio-db.json',\n};\n"],"file":"file-utils.js"}
1
+ {"version":3,"file":"file-utils.js","names":["Files","DatabaseName","createTempFolder","prefix","mkdtemp","path","join","os","tmpdir","createTempStorageFolder","folder","tempFolder","storageFolder","mkdir"],"sources":["../src/file-utils.ts"],"sourcesContent":["import { mkdir, mkdtemp } from 'fs/promises';\nimport os from 'os';\nimport path from 'path';\n\nexport const Files = {\n DatabaseName: '.verdaccio-db.json',\n};\n\n/**\n * Create a temporary folder.\n * @param prefix The prefix of the folder name.\n * @returns string\n */\nexport async function createTempFolder(prefix: string): Promise<string> {\n return await mkdtemp(path.join(os.tmpdir(), prefix));\n}\n\n/**\n * Create temporary folder for an asset.\n * @param prefix\n * @param folder name\n * @returns\n */\nexport async function createTempStorageFolder(prefix: string, folder = 'storage'): Promise<string> {\n const tempFolder = await createTempFolder(prefix);\n const storageFolder = path.join(tempFolder, folder);\n await mkdir(storageFolder);\n return storageFolder;\n}\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;;;AAEO,MAAMA,KAAK,GAAG;EACnBC,YAAY,EAAE;AADK,CAAd;AAIP;AACA;AACA;AACA;AACA;;;;AACO,eAAeC,gBAAf,CAAgCC,MAAhC,EAAiE;EACtE,OAAO,MAAM,IAAAC,iBAAA,EAAQC,aAAA,CAAKC,IAAL,CAAUC,WAAA,CAAGC,MAAH,EAAV,EAAuBL,MAAvB,CAAR,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,eAAeM,uBAAf,CAAuCN,MAAvC,EAAuDO,MAAM,GAAG,SAAhE,EAA4F;EACjG,MAAMC,UAAU,GAAG,MAAMT,gBAAgB,CAACC,MAAD,CAAzC;;EACA,MAAMS,aAAa,GAAGP,aAAA,CAAKC,IAAL,CAAUK,UAAV,EAAsBD,MAAtB,CAAtB;;EACA,MAAM,IAAAG,eAAA,EAAMD,aAAN,CAAN;EACA,OAAOA,aAAP;AACD"}
package/build/index.d.ts CHANGED
@@ -9,4 +9,5 @@ import * as validatioUtils from './validation-utils';
9
9
  import * as warningUtils from './warning-utils';
10
10
  export { VerdaccioError, API_ERROR, SUPPORT_ERRORS, APP_ERROR } from './error-utils';
11
11
  export { TOKEN_BASIC, TOKEN_BEARER, HTTP_STATUS, API_MESSAGE, HEADERS, DIST_TAGS, CHARACTER_ENCODING, HEADER_TYPE, LATEST, DEFAULT_MIN_LIMIT_PASSWORD, DEFAULT_USER, USERS, } from './constants';
12
- export { fileUtils, pkgUtils, searchUtils, streamUtils, errorUtils, validatioUtils, constants, pluginUtils, warningUtils, };
12
+ declare const validationUtils: typeof validatioUtils;
13
+ export { fileUtils, pkgUtils, searchUtils, streamUtils, errorUtils, validatioUtils, validationUtils, constants, pluginUtils, warningUtils, };
package/build/index.js CHANGED
@@ -99,7 +99,7 @@ Object.defineProperty(exports, "VerdaccioError", {
99
99
  return errorUtils.VerdaccioError;
100
100
  }
101
101
  });
102
- exports.warningUtils = exports.validatioUtils = exports.streamUtils = exports.searchUtils = exports.pluginUtils = exports.pkgUtils = exports.fileUtils = exports.errorUtils = exports.constants = void 0;
102
+ exports.warningUtils = exports.validationUtils = exports.validatioUtils = exports.streamUtils = exports.searchUtils = exports.pluginUtils = exports.pkgUtils = exports.fileUtils = exports.errorUtils = exports.constants = void 0;
103
103
 
104
104
  var constants = _interopRequireWildcard(require("./constants"));
105
105
 
@@ -140,4 +140,7 @@ exports.warningUtils = warningUtils;
140
140
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
141
141
 
142
142
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
143
+
144
+ const validationUtils = validatioUtils;
145
+ exports.validationUtils = validationUtils;
143
146
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA","sourcesContent":["import * as constants from './constants';\nimport * as errorUtils from './error-utils';\nimport * as fileUtils from './file-utils';\nimport * as pkgUtils from './pkg-utils';\nimport * as pluginUtils from './plugin-utils';\nimport * as searchUtils from './search-utils';\nimport * as streamUtils from './stream-utils';\nimport * as validatioUtils from './validation-utils';\nimport * as warningUtils from './warning-utils';\n\nexport { VerdaccioError, API_ERROR, SUPPORT_ERRORS, APP_ERROR } from './error-utils';\nexport {\n TOKEN_BASIC,\n TOKEN_BEARER,\n HTTP_STATUS,\n API_MESSAGE,\n HEADERS,\n DIST_TAGS,\n CHARACTER_ENCODING,\n HEADER_TYPE,\n LATEST,\n DEFAULT_MIN_LIMIT_PASSWORD,\n DEFAULT_USER,\n USERS,\n} from './constants';\n\nexport {\n fileUtils,\n pkgUtils,\n searchUtils,\n streamUtils,\n errorUtils,\n validatioUtils,\n constants,\n pluginUtils,\n warningUtils,\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["validationUtils","validatioUtils"],"sources":["../src/index.ts"],"sourcesContent":["import * as constants from './constants';\nimport * as errorUtils from './error-utils';\nimport * as fileUtils from './file-utils';\nimport * as pkgUtils from './pkg-utils';\nimport * as pluginUtils from './plugin-utils';\nimport * as searchUtils from './search-utils';\nimport * as streamUtils from './stream-utils';\nimport * as validatioUtils from './validation-utils';\nimport * as warningUtils from './warning-utils';\n\nexport { VerdaccioError, API_ERROR, SUPPORT_ERRORS, APP_ERROR } from './error-utils';\nexport {\n TOKEN_BASIC,\n TOKEN_BEARER,\n HTTP_STATUS,\n API_MESSAGE,\n HEADERS,\n DIST_TAGS,\n CHARACTER_ENCODING,\n HEADER_TYPE,\n LATEST,\n DEFAULT_MIN_LIMIT_PASSWORD,\n DEFAULT_USER,\n USERS,\n} from './constants';\nconst validationUtils = validatioUtils;\nexport {\n fileUtils,\n pkgUtils,\n searchUtils,\n streamUtils,\n errorUtils,\n // TODO: remove this typo\n validatioUtils,\n validationUtils,\n constants,\n pluginUtils,\n warningUtils,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;;;AAiBA,MAAMA,eAAe,GAAGC,cAAxB"}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"path-utils.js"}
1
+ {"version":3,"file":"path-utils.js","names":[],"sources":["../src/path-utils.ts"],"sourcesContent":[""],"mappings":""}
@@ -1,4 +1,11 @@
1
- import { Package } from '@verdaccio/types';
1
+ import { Manifest } from '@verdaccio/types';
2
+ /**
3
+ * Extract the tarball name from a registry dist url
4
+ * 'https://registry.npmjs.org/test/-/test-0.0.2.tgz'
5
+ * @param tarball tarball url
6
+ * @returns tarball filename
7
+ */
8
+ export declare function extractTarballName(tarball: string): any;
2
9
  /**
3
10
  * Function filters out bad semver versions and sorts the array.
4
11
  * @return {Array} sorted Array
@@ -8,12 +15,13 @@ export declare function semverSort(listVersions: string[]): string[];
8
15
  * Get the latest publihsed version of a package.
9
16
  * @param package metadata
10
17
  **/
11
- export declare function getLatest(pkg: Package): string;
18
+ export declare function getLatest(pkg: Manifest): string;
12
19
  /**
13
20
  * Function gets a local info and an info from uplinks and tries to merge it
14
21
  exported for unit tests only.
15
22
  * @param {*} local
16
23
  * @param {*} upstream
17
24
  * @param {*} config sds
25
+ * @deprecated use @verdaccio/storage mergeVersions method
18
26
  */
19
- export declare function mergeVersions(local: Package, upstream: Package): void;
27
+ export declare function mergeVersions(local: Manifest, upstream: Manifest): void;
@@ -3,20 +3,36 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.extractTarballName = extractTarballName;
6
7
  exports.getLatest = getLatest;
7
8
  exports.mergeVersions = mergeVersions;
8
9
  exports.semverSort = semverSort;
9
10
 
10
11
  var _semver = _interopRequireDefault(require("semver"));
11
12
 
13
+ var _url = require("url");
14
+
12
15
  var _constants = require("./constants");
13
16
 
14
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
18
 
19
+ /**
20
+ * Extract the tarball name from a registry dist url
21
+ * 'https://registry.npmjs.org/test/-/test-0.0.2.tgz'
22
+ * @param tarball tarball url
23
+ * @returns tarball filename
24
+ */
25
+ function extractTarballName(tarball) {
26
+ const urlObject = new _url.URL(tarball);
27
+ const filename = urlObject.pathname.replace(/^.*\//, '');
28
+ return filename;
29
+ }
16
30
  /**
17
31
  * Function filters out bad semver versions and sorts the array.
18
32
  * @return {Array} sorted Array
19
33
  */
34
+
35
+
20
36
  function semverSort(listVersions) {
21
37
  return listVersions.filter(function (x) {
22
38
  if (!_semver.default.parse(x, true)) {
@@ -51,7 +67,9 @@ function getLatest(pkg) {
51
67
  * @param {*} local
52
68
  * @param {*} upstream
53
69
  * @param {*} config sds
70
+ * @deprecated use @verdaccio/storage mergeVersions method
54
71
  */
72
+ // @deprecated
55
73
 
56
74
 
57
75
  function mergeVersions(local, upstream) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pkg-utils.ts"],"names":["semverSort","listVersions","filter","x","semver","parse","sort","compareLoose","map","String","getLatest","pkg","Object","keys","versions","length","Error","latest","DIST_TAGS","mergeVersions","local","upstream","i","lte","readme"],"mappings":";;;;;;;;;AAAA;;AAIA;;;;AAEA;AACA;AACA;AACA;AACO,SAASA,UAAT,CAAoBC,YAApB,EAAsD;AAC3D,SAAOA,YAAY,CAChBC,MADI,CACG,UAAUC,CAAV,EAAsB;AAC5B,QAAI,CAACC,gBAAOC,KAAP,CAAaF,CAAb,EAAgB,IAAhB,CAAL,EAA4B;AAC1B,aAAO,KAAP;AACD;;AACD,WAAO,IAAP;AACD,GANI,EAOJG,IAPI,CAOCF,gBAAOG,YAPR,EAQJC,GARI,CAQAC,MARA,CAAP;AASD;AAED;AACA;AACA;AACA;;;AACO,SAASC,SAAT,CAAmBC,GAAnB,EAAyC;AAAA;;AAC9C,QAAMV,YAAsB,GAAGW,MAAM,CAACC,IAAP,CAAYF,GAAG,CAACG,QAAhB,CAA/B;;AACA,MAAIb,YAAY,CAACc,MAAb,GAAsB,CAA1B,EAA6B;AAC3B,UAAMC,KAAK,CAAC,oCAAD,CAAX;AACD;;AAED,QAAMF,QAAkB,GAAGd,UAAU,CAACC,YAAD,CAArC;AACA,QAAMgB,MAA0B,GAAG,kBAAAN,GAAG,CAACO,oBAAD,CAAH,0DAAgBD,MAAhB,GAAyBN,GAAG,CAACO,oBAAD,CAAH,CAAeD,MAAxC,GAAiDH,QAAQ,CAAC,CAAD,CAA5F;AAEA,SAAOG,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASE,aAAT,CAAuBC,KAAvB,EAAuCC,QAAvC,EAA0D;AAC/D;AACA;AACA,OAAK,MAAMC,CAAX,IAAgBD,QAAQ,CAACP,QAAzB,EAAmC;AACjC,QAAI,OAAOM,KAAK,CAACN,QAAN,CAAeQ,CAAf,CAAP,KAA6B,WAAjC,EAA8C;AAC5CF,MAAAA,KAAK,CAACN,QAAN,CAAeQ,CAAf,IAAoBD,QAAQ,CAACP,QAAT,CAAkBQ,CAAlB,CAApB;AACD;AACF;;AAED,OAAK,MAAMA,CAAX,IAAgBD,QAAQ,CAACH,oBAAD,CAAxB,EAAqC;AACnC,QAAIE,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,MAAwBD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAA5B,EAAoD;AAClD,UAAI,CAACF,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,CAAD,IAAwBlB,gBAAOmB,GAAP,CAAWH,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,CAAX,EAAgCD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAAhC,CAA5B,EAAqF;AACnFF,QAAAA,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,IAAsBD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAAtB;AACD;;AACD,UAAIA,CAAC,KAAK,QAAN,IAAkBF,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,MAAwBD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAA9C,EAAsE;AACpE;AACAF,QAAAA,KAAK,CAACI,MAAN,GAAeH,QAAQ,CAACG,MAAxB;AACD;AACF;AACF;AACF","sourcesContent":["import semver from 'semver';\n\nimport { Package } from '@verdaccio/types';\n\nimport { DIST_TAGS } from './constants';\n\n/**\n * Function filters out bad semver versions and sorts the array.\n * @return {Array} sorted Array\n */\nexport function semverSort(listVersions: string[]): string[] {\n return listVersions\n .filter(function (x): boolean {\n if (!semver.parse(x, true)) {\n return false;\n }\n return true;\n })\n .sort(semver.compareLoose)\n .map(String);\n}\n\n/**\n * Get the latest publihsed version of a package.\n * @param package metadata\n **/\nexport function getLatest(pkg: Package): string {\n const listVersions: string[] = Object.keys(pkg.versions);\n if (listVersions.length < 1) {\n throw Error('cannot get lastest version of none');\n }\n\n const versions: string[] = semverSort(listVersions);\n const latest: string | undefined = pkg[DIST_TAGS]?.latest ? pkg[DIST_TAGS].latest : versions[0];\n\n return latest;\n}\n\n/**\n * Function gets a local info and an info from uplinks and tries to merge it\n exported for unit tests only.\n * @param {*} local\n * @param {*} upstream\n * @param {*} config sds\n */\nexport function mergeVersions(local: Package, upstream: Package) {\n // copy new versions to a cache\n // NOTE: if a certain version was updated, we can't refresh it reliably\n for (const i in upstream.versions) {\n if (typeof local.versions[i] === 'undefined') {\n local.versions[i] = upstream.versions[i];\n }\n }\n\n for (const i in upstream[DIST_TAGS]) {\n if (local[DIST_TAGS][i] !== upstream[DIST_TAGS][i]) {\n if (!local[DIST_TAGS][i] || semver.lte(local[DIST_TAGS][i], upstream[DIST_TAGS][i])) {\n local[DIST_TAGS][i] = upstream[DIST_TAGS][i];\n }\n if (i === 'latest' && local[DIST_TAGS][i] === upstream[DIST_TAGS][i]) {\n // if remote has more fresh package, we should borrow its readme\n local.readme = upstream.readme;\n }\n }\n }\n}\n"],"file":"pkg-utils.js"}
1
+ {"version":3,"file":"pkg-utils.js","names":["extractTarballName","tarball","urlObject","URL","filename","pathname","replace","semverSort","listVersions","filter","x","semver","parse","sort","compareLoose","map","String","getLatest","pkg","Object","keys","versions","length","Error","latest","DIST_TAGS","mergeVersions","local","upstream","i","lte","readme"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import semver from 'semver';\nimport { URL } from 'url';\n\nimport { Manifest } from '@verdaccio/types';\n\nimport { DIST_TAGS } from './constants';\n\n/**\n * Extract the tarball name from a registry dist url\n * 'https://registry.npmjs.org/test/-/test-0.0.2.tgz'\n * @param tarball tarball url\n * @returns tarball filename\n */\nexport function extractTarballName(tarball: string) {\n const urlObject: any = new URL(tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n return filename;\n}\n\n/**\n * Function filters out bad semver versions and sorts the array.\n * @return {Array} sorted Array\n */\nexport function semverSort(listVersions: string[]): string[] {\n return listVersions\n .filter(function (x): boolean {\n if (!semver.parse(x, true)) {\n return false;\n }\n return true;\n })\n .sort(semver.compareLoose)\n .map(String);\n}\n\n/**\n * Get the latest publihsed version of a package.\n * @param package metadata\n **/\nexport function getLatest(pkg: Manifest): string {\n const listVersions: string[] = Object.keys(pkg.versions);\n if (listVersions.length < 1) {\n throw Error('cannot get lastest version of none');\n }\n\n const versions: string[] = semverSort(listVersions);\n const latest: string | undefined = pkg[DIST_TAGS]?.latest ? pkg[DIST_TAGS].latest : versions[0];\n\n return latest;\n}\n\n/**\n * Function gets a local info and an info from uplinks and tries to merge it\n exported for unit tests only.\n * @param {*} local\n * @param {*} upstream\n * @param {*} config sds\n * @deprecated use @verdaccio/storage mergeVersions method\n */\n// @deprecated\nexport function mergeVersions(local: Manifest, upstream: Manifest) {\n // copy new versions to a cache\n // NOTE: if a certain version was updated, we can't refresh it reliably\n for (const i in upstream.versions) {\n if (typeof local.versions[i] === 'undefined') {\n local.versions[i] = upstream.versions[i];\n }\n }\n\n for (const i in upstream[DIST_TAGS]) {\n if (local[DIST_TAGS][i] !== upstream[DIST_TAGS][i]) {\n if (!local[DIST_TAGS][i] || semver.lte(local[DIST_TAGS][i], upstream[DIST_TAGS][i])) {\n local[DIST_TAGS][i] = upstream[DIST_TAGS][i];\n }\n if (i === 'latest' && local[DIST_TAGS][i] === upstream[DIST_TAGS][i]) {\n // if remote has more fresh package, we should borrow its readme\n local.readme = upstream.readme;\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAAA;;AACA;;AAIA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,kBAAT,CAA4BC,OAA5B,EAA6C;EAClD,MAAMC,SAAc,GAAG,IAAIC,QAAJ,CAAQF,OAAR,CAAvB;EACA,MAAMG,QAAQ,GAAGF,SAAS,CAACG,QAAV,CAAmBC,OAAnB,CAA2B,OAA3B,EAAoC,EAApC,CAAjB;EACA,OAAOF,QAAP;AACD;AAED;AACA;AACA;AACA;;;AACO,SAASG,UAAT,CAAoBC,YAApB,EAAsD;EAC3D,OAAOA,YAAY,CAChBC,MADI,CACG,UAAUC,CAAV,EAAsB;IAC5B,IAAI,CAACC,eAAA,CAAOC,KAAP,CAAaF,CAAb,EAAgB,IAAhB,CAAL,EAA4B;MAC1B,OAAO,KAAP;IACD;;IACD,OAAO,IAAP;EACD,CANI,EAOJG,IAPI,CAOCF,eAAA,CAAOG,YAPR,EAQJC,GARI,CAQAC,MARA,CAAP;AASD;AAED;AACA;AACA;AACA;;;AACO,SAASC,SAAT,CAAmBC,GAAnB,EAA0C;EAAA;;EAC/C,MAAMV,YAAsB,GAAGW,MAAM,CAACC,IAAP,CAAYF,GAAG,CAACG,QAAhB,CAA/B;;EACA,IAAIb,YAAY,CAACc,MAAb,GAAsB,CAA1B,EAA6B;IAC3B,MAAMC,KAAK,CAAC,oCAAD,CAAX;EACD;;EAED,MAAMF,QAAkB,GAAGd,UAAU,CAACC,YAAD,CAArC;EACA,MAAMgB,MAA0B,GAAG,kBAAAN,GAAG,CAACO,oBAAD,CAAH,0DAAgBD,MAAhB,GAAyBN,GAAG,CAACO,oBAAD,CAAH,CAAeD,MAAxC,GAAiDH,QAAQ,CAAC,CAAD,CAA5F;EAEA,OAAOG,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASE,aAAT,CAAuBC,KAAvB,EAAwCC,QAAxC,EAA4D;EACjE;EACA;EACA,KAAK,MAAMC,CAAX,IAAgBD,QAAQ,CAACP,QAAzB,EAAmC;IACjC,IAAI,OAAOM,KAAK,CAACN,QAAN,CAAeQ,CAAf,CAAP,KAA6B,WAAjC,EAA8C;MAC5CF,KAAK,CAACN,QAAN,CAAeQ,CAAf,IAAoBD,QAAQ,CAACP,QAAT,CAAkBQ,CAAlB,CAApB;IACD;EACF;;EAED,KAAK,MAAMA,CAAX,IAAgBD,QAAQ,CAACH,oBAAD,CAAxB,EAAqC;IACnC,IAAIE,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,MAAwBD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAA5B,EAAoD;MAClD,IAAI,CAACF,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,CAAD,IAAwBlB,eAAA,CAAOmB,GAAP,CAAWH,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,CAAX,EAAgCD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAAhC,CAA5B,EAAqF;QACnFF,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,IAAsBD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAAtB;MACD;;MACD,IAAIA,CAAC,KAAK,QAAN,IAAkBF,KAAK,CAACF,oBAAD,CAAL,CAAiBI,CAAjB,MAAwBD,QAAQ,CAACH,oBAAD,CAAR,CAAoBI,CAApB,CAA9C,EAAsE;QACpE;QACAF,KAAK,CAACI,MAAN,GAAeH,QAAQ,CAACG,MAAxB;MACD;IACF;EACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"plugin-utils.js"}
1
+ {"version":3,"file":"plugin-utils.js","names":[],"sources":["../src/plugin-utils.ts"],"sourcesContent":["import { Config, IPackageStorage, Token, TokenFilter } from '@verdaccio/types';\n\nimport { searchUtils } from '.';\n\ninterface IPlugin {\n version?: string;\n // In case a plugin needs to be cleaned up/removed\n close?(): void;\n}\n\nexport interface IPluginStorage<T> extends IPlugin {\n config: T & Config;\n add(name: string): Promise<void>;\n remove(name: string): Promise<void>;\n get(): Promise<any>;\n init(): Promise<void>;\n getSecret(): Promise<string>;\n setSecret(secret: string): Promise<any>;\n getPackageStorage(packageInfo: string): IPackageStorage;\n search(query: searchUtils.SearchQuery): Promise<searchUtils.SearchItem[]>;\n saveToken(token: Token): Promise<any>;\n deleteToken(user: string, tokenKey: string): Promise<any>;\n readTokens(filter: TokenFilter): Promise<Token[]>;\n}\n"],"mappings":""}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Validate if a manifest has the correct structure when a new package
3
+ * is being created. The properties name, versions and _attachments must contain 1 element.
4
+ * @param data a manifest object
5
+ * @returns boolean
6
+ */
7
+ export declare function validatePublishSingleVersion(manifest: any): boolean;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.validatePublishSingleVersion = validatePublishSingleVersion;
7
+
8
+ var _ajv = _interopRequireDefault(require("ajv"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ const ajv = new _ajv.default(); // FIXME: this could extend from @verdaccio/types but we need
13
+ // schemas from @verdaccio/types to be able to validate them
14
+
15
+ const schema = {
16
+ type: 'object',
17
+ properties: {
18
+ name: {
19
+ type: 'string'
20
+ },
21
+ versions: {
22
+ type: 'object',
23
+ maxProperties: 1
24
+ },
25
+ _attachments: {
26
+ type: 'object',
27
+ maxProperties: 1
28
+ }
29
+ },
30
+ required: ['name', 'versions', '_attachments'],
31
+ additionalProperties: true
32
+ }; // validate is a type guard for MyData - type is inferred from schema type
33
+
34
+ const validate = ajv.compile(schema);
35
+ /**
36
+ * Validate if a manifest has the correct structure when a new package
37
+ * is being created. The properties name, versions and _attachments must contain 1 element.
38
+ * @param data a manifest object
39
+ * @returns boolean
40
+ */
41
+
42
+ function validatePublishSingleVersion(manifest) {
43
+ if (!manifest) {
44
+ return false;
45
+ }
46
+
47
+ return validate(manifest);
48
+ }
49
+ //# sourceMappingURL=publish-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-manifest.js","names":["ajv","Ajv","schema","type","properties","name","versions","maxProperties","_attachments","required","additionalProperties","validate","compile","validatePublishSingleVersion","manifest"],"sources":["../../src/schemes/publish-manifest.ts"],"sourcesContent":["import Ajv, { JSONSchemaType } from 'ajv';\n\nconst ajv = new Ajv();\n\n// FIXME: this could extend from @verdaccio/types but we need\n// schemas from @verdaccio/types to be able to validate them\ninterface Manifest {\n name: string;\n versions: object;\n _attachments: object;\n}\n\nconst schema: JSONSchemaType<Manifest> = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n versions: { type: 'object', maxProperties: 1 },\n _attachments: { type: 'object', maxProperties: 1 },\n },\n required: ['name', 'versions', '_attachments'],\n additionalProperties: true,\n};\n\n// validate is a type guard for MyData - type is inferred from schema type\nconst validate = ajv.compile(schema);\n\n/**\n * Validate if a manifest has the correct structure when a new package\n * is being created. The properties name, versions and _attachments must contain 1 element.\n * @param data a manifest object\n * @returns boolean\n */\nexport function validatePublishSingleVersion(manifest: any) {\n if (!manifest) {\n return false;\n }\n return validate(manifest);\n}\n"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,GAAG,GAAG,IAAIC,YAAJ,EAAZ,C,CAEA;AACA;;AAOA,MAAMC,MAAgC,GAAG;EACvCC,IAAI,EAAE,QADiC;EAEvCC,UAAU,EAAE;IACVC,IAAI,EAAE;MAAEF,IAAI,EAAE;IAAR,CADI;IAEVG,QAAQ,EAAE;MAAEH,IAAI,EAAE,QAAR;MAAkBI,aAAa,EAAE;IAAjC,CAFA;IAGVC,YAAY,EAAE;MAAEL,IAAI,EAAE,QAAR;MAAkBI,aAAa,EAAE;IAAjC;EAHJ,CAF2B;EAOvCE,QAAQ,EAAE,CAAC,MAAD,EAAS,UAAT,EAAqB,cAArB,CAP6B;EAQvCC,oBAAoB,EAAE;AARiB,CAAzC,C,CAWA;;AACA,MAAMC,QAAQ,GAAGX,GAAG,CAACY,OAAJ,CAAYV,MAAZ,CAAjB;AAEA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASW,4BAAT,CAAsCC,QAAtC,EAAqD;EAC1D,IAAI,CAACA,QAAL,EAAe;IACb,OAAO,KAAP;EACD;;EACD,OAAOH,QAAQ,CAACG,QAAD,CAAf;AACD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/search-utils.ts"],"names":["UNSCOPED"],"mappings":";;;;;;AA2CA;AAMA;AAyBO,MAAMA,QAAQ,GAAG,UAAjB","sourcesContent":["export type SearchMetrics = {\n quality: number;\n popularity: number;\n maintenance: number;\n};\nexport type UnStable = {\n flags?: {\n // if is false is not be included in search results (majority are stable)\n unstable?: boolean;\n };\n};\nexport type SearchItemPkg = {\n name: string;\n scoped?: string;\n path?: string;\n time?: number | Date;\n};\n\ntype PrivatePackage = {\n // note: prefixed to avoid external conflicts\n\n // the package is published as private\n verdaccioPrivate?: boolean;\n // if the package is not private but is cached\n verdaccioPkgCached?: boolean;\n};\n\nexport interface SearchItem extends UnStable, PrivatePackage {\n package: SearchItemPkg;\n score: Score;\n}\n\nexport type Score = {\n final: number;\n detail: SearchMetrics;\n};\n\nexport type SearchResults = {\n objects: SearchItemPkg[];\n total: number;\n time: string;\n};\n\n// @deprecated use @verdaccio/types\ntype PublisherMaintainer = {\n username: string;\n email: string;\n};\n\n// @deprecated use @verdaccio/types\nexport type SearchPackageBody = {\n name: string;\n scope: string;\n description: string;\n author: string | PublisherMaintainer;\n version: string;\n keywords: string | string[] | undefined;\n date: string;\n links?: {\n npm: string; // only include placeholder for URL eg: {url}/{packageName}\n homepage?: string;\n repository?: string;\n bugs?: string;\n };\n publisher?: any;\n maintainers?: PublisherMaintainer[];\n};\n\nexport interface SearchPackageItem extends UnStable, PrivatePackage {\n package: SearchPackageBody;\n score: Score;\n searchScore?: number;\n}\n\nexport const UNSCOPED = 'unscoped';\n\nexport type SearchQuery = {\n text: string;\n size?: number;\n from?: number;\n} & SearchMetrics;\n"],"file":"search-utils.js"}
1
+ {"version":3,"file":"search-utils.js","names":["UNSCOPED"],"sources":["../src/search-utils.ts"],"sourcesContent":["export type SearchMetrics = {\n quality: number;\n popularity: number;\n maintenance: number;\n};\nexport type UnStable = {\n flags?: {\n // if is false is not be included in search results (majority are stable)\n unstable?: boolean;\n };\n};\nexport type SearchItemPkg = {\n name: string;\n scoped?: string;\n path?: string;\n time?: number | Date;\n};\n\ntype PrivatePackage = {\n // note: prefixed to avoid external conflicts\n\n // the package is published as private\n verdaccioPrivate?: boolean;\n // if the package is not private but is cached\n verdaccioPkgCached?: boolean;\n};\n\nexport interface SearchItem extends UnStable, PrivatePackage {\n package: SearchItemPkg;\n score: Score;\n}\n\nexport type Score = {\n final: number;\n detail: SearchMetrics;\n};\n\nexport type SearchResults = {\n objects: SearchItemPkg[];\n total: number;\n time: string;\n};\n\n// @deprecated use @verdaccio/types\ntype PublisherMaintainer = {\n username: string;\n email: string;\n};\n\n// @deprecated use @verdaccio/types\nexport type SearchPackageBody = {\n name: string;\n scope: string;\n description: string;\n author: string | PublisherMaintainer;\n version: string;\n keywords: string | string[] | undefined;\n date: string;\n links?: {\n npm: string; // only include placeholder for URL eg: {url}/{packageName}\n homepage?: string;\n repository?: string;\n bugs?: string;\n };\n publisher?: any;\n maintainers?: PublisherMaintainer[];\n};\n\nexport interface SearchPackageItem extends UnStable, PrivatePackage {\n package: SearchPackageBody;\n score: Score;\n searchScore?: number;\n}\n\nexport const UNSCOPED = 'unscoped';\n\nexport type SearchQuery = {\n text: string;\n size?: number;\n from?: number;\n} & SearchMetrics;\n"],"mappings":";;;;;;AA2CA;AAMA;AAyBO,MAAMA,QAAQ,GAAG,UAAjB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/stream-utils.ts"],"names":["ReadTarball","PassThrough","constructor","options","addAbstractMethods","abort","UploadTarball","done","self","name","_called_methods","__defineGetter__","__defineSetter__","fn","readableToString","stream","chunks","chunk","push","Buffer","from","buffer","concat","str","toString","transformObjectToString","Transform","objectMode","transform","encoding","callback","JSON","stringify"],"mappings":";;;;;;;AAAA;;AAWA;AACA;AACA;AACA;AACA;AACA,MAAMA,WAAN,SAA0BC,mBAA1B,CAA8D;AAC5D;AACF;AACA;AACA;AACSC,EAAAA,WAAW,CAACC,OAAD,EAA4B;AAC5C,UAAMA,OAAN,EAD4C,CAE5C;;AACAC,IAAAA,kBAAkB,CAAC,IAAD,EAAO,OAAP,CAAlB;AACD;;AAEMC,EAAAA,KAAK,GAAS,CAAE;;AAXqC;AAc9D;AACA;AACA;AACA;AACA;;;;;AACA,MAAMC,aAAN,SAA4BL,mBAA5B,CAAkE;AAChE;AACF;AACA;AACA;AACSC,EAAAA,WAAW,CAACC,OAAD,EAAe;AAC/B,UAAMA,OAAN,EAD+B,CAE/B;;AACAC,IAAAA,kBAAkB,CAAC,IAAD,EAAO,OAAP,CAAlB,CAH+B,CAK/B;;AACAA,IAAAA,kBAAkB,CAAC,IAAD,EAAO,MAAP,CAAlB;AACD;;AAEMC,EAAAA,KAAK,GAAS,CAAE;;AAChBE,EAAAA,IAAI,GAAS,CAAE;;AAf0C;AAkBlE;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACA,SAASH,kBAAT,CAA4BI,IAA5B,EAAuCC,IAAvC,EAAwD;AACtDD,EAAAA,IAAI,CAACE,eAAL,GAAuBF,IAAI,CAACE,eAAL,IAAwB,EAA/C;;AAEAF,EAAAA,IAAI,CAACG,gBAAL,CAAsBF,IAAtB,EAA4B,YAAY;AACtC,WAAO,YAAkB;AACvBD,MAAAA,IAAI,CAACE,eAAL,CAAqBD,IAArB,IAA6B,IAA7B;AACD,KAFD;AAGD,GAJD;;AAMAD,EAAAA,IAAI,CAACI,gBAAL,CAAsBH,IAAtB,EAA4B,UAAUI,EAAV,EAAmB;AAC7C,WAAOL,IAAI,CAACC,IAAD,CAAX;AAEAD,IAAAA,IAAI,CAACC,IAAD,CAAJ,GAAaI,EAAb,CAH6C,CAK7C;;AACA,QAAIL,IAAI,CAACE,eAAL,IAAwBF,IAAI,CAACE,eAAL,CAAqBD,IAArB,CAA5B,EAAwD;AACtD,aAAOD,IAAI,CAACE,eAAL,CAAqBD,IAArB,CAAP;AAEAD,MAAAA,IAAI,CAACC,IAAD,CAAJ;AACD;AACF,GAXD;AAYD;AAED;AACA;AACA;;;AACA,MAAMK,gBAAgB,GAAG,MAAOC,MAAP,IAAkB;AACzC,QAAMC,MAAgB,GAAG,EAAzB;;AACA,aAAW,IAAIC,KAAf,IAAwBF,MAAxB,EAAgC;AAC9BC,IAAAA,MAAM,CAACE,IAAP,CAAYC,MAAM,CAACC,IAAP,CAAYH,KAAZ,CAAZ;AACD;;AACD,QAAMI,MAAM,GAAGF,MAAM,CAACG,MAAP,CAAcN,MAAd,CAAf;AACA,QAAMO,GAAG,GAAGF,MAAM,CAACG,QAAP,CAAgB,OAAhB,CAAZ;AACA,SAAOD,GAAP;AACD,CARD;AAUA;AACA;AACA;;;;;AACA,MAAME,uBAAuB,GAAG,MAAM;AACpC,SAAO,IAAIC,iBAAJ,CAAc;AACnBC,IAAAA,UAAU,EAAE,IADO;AAEnBC,IAAAA,SAAS,EAAE,CAACX,KAAD,EAAQY,QAAR,EAAkBC,QAAlB,KAA+B;AACxCA,MAAAA,QAAQ,CAAC,IAAD,EAAOC,IAAI,CAACC,SAAL,CAAef,KAAf,CAAP,CAAR;AACD;AAJkB,GAAd,CAAP;AAMD,CAPD","sourcesContent":["import { PassThrough, Transform, TransformOptions } from 'stream';\n\nexport interface IReadTarball {\n abort?: () => void;\n}\n\nexport interface IUploadTarball {\n done?: () => void;\n abort?: () => void;\n}\n\n/**\n * This stream is used to read tarballs from repository.\n * @param {*} options\n * @return {Stream}\n */\nclass ReadTarball extends PassThrough implements IReadTarball {\n /**\n *\n * @param {Object} options\n */\n public constructor(options: TransformOptions) {\n super(options);\n // called when data is not needed anymore\n addAbstractMethods(this, 'abort');\n }\n\n public abort(): void {}\n}\n\n/**\n * This stream is used to upload tarballs to a repository.\n * @param {*} options\n * @return {Stream}\n */\nclass UploadTarball extends PassThrough implements IUploadTarball {\n /**\n *\n * @param {Object} options\n */\n public constructor(options: any) {\n super(options);\n // called when user closes connection before upload finishes\n addAbstractMethods(this, 'abort');\n\n // called when upload finishes successfully\n addAbstractMethods(this, 'done');\n }\n\n public abort(): void {}\n public done(): void {}\n}\n\n/**\n * This function intercepts abstract calls and replays them allowing.\n * us to attach those functions after we are ready to do so\n * @param {*} self\n * @param {*} name\n */\n// Perhaps someone knows a better way to write this\nfunction addAbstractMethods(self: any, name: any): void {\n self._called_methods = self._called_methods || {};\n\n self.__defineGetter__(name, function () {\n return function (): void {\n self._called_methods[name] = true;\n };\n });\n\n self.__defineSetter__(name, function (fn: any) {\n delete self[name];\n\n self[name] = fn;\n\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n if (self._called_methods && self._called_methods[name]) {\n delete self._called_methods[name];\n\n self[name]();\n }\n });\n}\n\n/**\n * Converts a buffer stream to a string.\n */\nconst readableToString = async (stream) => {\n const chunks: Buffer[] = [];\n for await (let chunk of stream) {\n chunks.push(Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n const str = buffer.toString('utf-8');\n return str;\n};\n\n/**\n * Transform stream object mode to string\n **/\nconst transformObjectToString = () => {\n return new Transform({\n objectMode: true,\n transform: (chunk, encoding, callback) => {\n callback(null, JSON.stringify(chunk));\n },\n });\n};\n\nexport { ReadTarball, UploadTarball, readableToString, transformObjectToString };\n"],"file":"stream-utils.js"}
1
+ {"version":3,"file":"stream-utils.js","names":["ReadTarball","PassThrough","constructor","options","addAbstractMethods","abort","UploadTarball","done","self","name","_called_methods","__defineGetter__","__defineSetter__","fn","readableToString","stream","chunks","chunk","push","Buffer","from","buffer","concat","str","toString","transformObjectToString","Transform","objectMode","transform","encoding","callback","JSON","stringify"],"sources":["../src/stream-utils.ts"],"sourcesContent":["import { PassThrough, Transform, TransformOptions } from 'stream';\n\nexport interface IReadTarball {\n abort?: () => void;\n}\n\nexport interface IUploadTarball {\n done?: () => void;\n abort?: () => void;\n}\n\n/**\n * This stream is used to read tarballs from repository.\n * @param {*} options\n * @return {Stream}\n */\nclass ReadTarball extends PassThrough implements IReadTarball {\n /**\n *\n * @param {Object} options\n */\n public constructor(options: TransformOptions) {\n super(options);\n // called when data is not needed anymore\n addAbstractMethods(this, 'abort');\n }\n\n public abort(): void {}\n}\n\n/**\n * This stream is used to upload tarballs to a repository.\n * @param {*} options\n * @return {Stream}\n */\nclass UploadTarball extends PassThrough implements IUploadTarball {\n /**\n *\n * @param {Object} options\n */\n public constructor(options: any) {\n super(options);\n // called when user closes connection before upload finishes\n addAbstractMethods(this, 'abort');\n\n // called when upload finishes successfully\n addAbstractMethods(this, 'done');\n }\n\n public abort(): void {}\n public done(): void {}\n}\n\n/**\n * This function intercepts abstract calls and replays them allowing.\n * us to attach those functions after we are ready to do so\n * @param {*} self\n * @param {*} name\n */\n// Perhaps someone knows a better way to write this\nfunction addAbstractMethods(self: any, name: any): void {\n self._called_methods = self._called_methods || {};\n\n self.__defineGetter__(name, function () {\n return function (): void {\n self._called_methods[name] = true;\n };\n });\n\n self.__defineSetter__(name, function (fn: any) {\n delete self[name];\n\n self[name] = fn;\n\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n if (self._called_methods && self._called_methods[name]) {\n delete self._called_methods[name];\n\n self[name]();\n }\n });\n}\n\n/**\n * Converts a buffer stream to a string.\n */\nconst readableToString = async (stream) => {\n const chunks: Buffer[] = [];\n for await (let chunk of stream) {\n chunks.push(Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n const str = buffer.toString('utf-8');\n return str;\n};\n\n/**\n * Transform stream object mode to string\n **/\nconst transformObjectToString = () => {\n return new Transform({\n objectMode: true,\n transform: (chunk, encoding, callback) => {\n callback(null, JSON.stringify(chunk));\n },\n });\n};\n\nexport { ReadTarball, UploadTarball, readableToString, transformObjectToString };\n"],"mappings":";;;;;;;AAAA;;AAWA;AACA;AACA;AACA;AACA;AACA,MAAMA,WAAN,SAA0BC,mBAA1B,CAA8D;EAC5D;AACF;AACA;AACA;EACSC,WAAW,CAACC,OAAD,EAA4B;IAC5C,MAAMA,OAAN,EAD4C,CAE5C;;IACAC,kBAAkB,CAAC,IAAD,EAAO,OAAP,CAAlB;EACD;;EAEMC,KAAK,GAAS,CAAE;;AAXqC;AAc9D;AACA;AACA;AACA;AACA;;;;;AACA,MAAMC,aAAN,SAA4BL,mBAA5B,CAAkE;EAChE;AACF;AACA;AACA;EACSC,WAAW,CAACC,OAAD,EAAe;IAC/B,MAAMA,OAAN,EAD+B,CAE/B;;IACAC,kBAAkB,CAAC,IAAD,EAAO,OAAP,CAAlB,CAH+B,CAK/B;;IACAA,kBAAkB,CAAC,IAAD,EAAO,MAAP,CAAlB;EACD;;EAEMC,KAAK,GAAS,CAAE;;EAChBE,IAAI,GAAS,CAAE;;AAf0C;AAkBlE;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACA,SAASH,kBAAT,CAA4BI,IAA5B,EAAuCC,IAAvC,EAAwD;EACtDD,IAAI,CAACE,eAAL,GAAuBF,IAAI,CAACE,eAAL,IAAwB,EAA/C;;EAEAF,IAAI,CAACG,gBAAL,CAAsBF,IAAtB,EAA4B,YAAY;IACtC,OAAO,YAAkB;MACvBD,IAAI,CAACE,eAAL,CAAqBD,IAArB,IAA6B,IAA7B;IACD,CAFD;EAGD,CAJD;;EAMAD,IAAI,CAACI,gBAAL,CAAsBH,IAAtB,EAA4B,UAAUI,EAAV,EAAmB;IAC7C,OAAOL,IAAI,CAACC,IAAD,CAAX;IAEAD,IAAI,CAACC,IAAD,CAAJ,GAAaI,EAAb,CAH6C,CAK7C;;IACA,IAAIL,IAAI,CAACE,eAAL,IAAwBF,IAAI,CAACE,eAAL,CAAqBD,IAArB,CAA5B,EAAwD;MACtD,OAAOD,IAAI,CAACE,eAAL,CAAqBD,IAArB,CAAP;MAEAD,IAAI,CAACC,IAAD,CAAJ;IACD;EACF,CAXD;AAYD;AAED;AACA;AACA;;;AACA,MAAMK,gBAAgB,GAAG,MAAOC,MAAP,IAAkB;EACzC,MAAMC,MAAgB,GAAG,EAAzB;;EACA,WAAW,IAAIC,KAAf,IAAwBF,MAAxB,EAAgC;IAC9BC,MAAM,CAACE,IAAP,CAAYC,MAAM,CAACC,IAAP,CAAYH,KAAZ,CAAZ;EACD;;EACD,MAAMI,MAAM,GAAGF,MAAM,CAACG,MAAP,CAAcN,MAAd,CAAf;EACA,MAAMO,GAAG,GAAGF,MAAM,CAACG,QAAP,CAAgB,OAAhB,CAAZ;EACA,OAAOD,GAAP;AACD,CARD;AAUA;AACA;AACA;;;;;AACA,MAAME,uBAAuB,GAAG,MAAM;EACpC,OAAO,IAAIC,iBAAJ,CAAc;IACnBC,UAAU,EAAE,IADO;IAEnBC,SAAS,EAAE,CAACX,KAAD,EAAQY,QAAR,EAAkBC,QAAlB,KAA+B;MACxCA,QAAQ,CAAC,IAAD,EAAOC,IAAI,CAACC,SAAL,CAAef,KAAf,CAAP,CAAR;IACD;EAJkB,CAAd,CAAP;AAMD,CAPD"}
@@ -1,4 +1,5 @@
1
- import { Package } from '@verdaccio/types';
1
+ import { Manifest } from '@verdaccio/types';
2
+ export { validatePublishSingleVersion } from './schemes/publish-manifest';
2
3
  export declare function isPackageNameScoped(name: string): boolean;
3
4
  /**
4
5
  * From normalize-package-data/lib/fixer.js
@@ -14,11 +15,12 @@ export declare function validatePackage(name: string): boolean;
14
15
  /**
15
16
  * Validate the package metadata, add additional properties whether are missing within
16
17
  * the metadata properties.
17
- * @param {*} object
18
+ * @param {*} manifest
18
19
  * @param {*} name
19
20
  * @return {Object} the object with additional properties as dist-tags ad versions
21
+ * FUTURE: rename to normalizeMetadata
20
22
  */
21
- export declare function validateMetadata(object: Package, name: string): Package;
23
+ export declare function normalizeMetadata(manifest: Manifest, name: string): Manifest;
22
24
  /**
23
25
  * Check whether an element is an Object
24
26
  * @param {*} obj the element