verdaccio-memory 10.4.6 → 10.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { default as LocalMemory } from './local-memory';
1
+ import LocalMemory from './local-memory';
2
2
  export { LocalMemory };
3
3
  export default LocalMemory;
package/lib/index.mjs ADDED
@@ -0,0 +1,7 @@
1
+ import LocalMemory from "./local-memory.mjs";
2
+ //#region src/index.ts
3
+ var src_default = LocalMemory;
4
+ //#endregion
5
+ export { LocalMemory, src_default as default };
6
+
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import LocalMemory from './local-memory';\n\nexport { LocalMemory };\n\nexport default LocalMemory;\n"],"mappings":";;AAIA,IAAA,cAAe"}
@@ -0,0 +1,47 @@
1
+ import type { ReadTarball, UploadTarball } from '@verdaccio/streams';
2
+ import type { Callback, CallbackAction, Config, Logger, Package, PackageTransformer, ReadPackageCallback, StorageUpdateCallback, StorageWriteCallback, Token, TokenFilter } from '@verdaccio/types';
3
+ /**
4
+ * Legacy storage plugin API, previously provided by the removed
5
+ * @verdaccio/legacy-types package. This plugin still implements the legacy
6
+ * storage contract, so the interfaces live here now.
7
+ */
8
+ export interface PluginOptions<T> {
9
+ config: T & Config;
10
+ logger: Logger;
11
+ }
12
+ export interface IPlugin<_T> {
13
+ version?: string;
14
+ }
15
+ export interface ITokenActions {
16
+ saveToken(token: Token): Promise<any>;
17
+ deleteToken(user: string, tokenKey: string): Promise<any>;
18
+ readTokens(filter: TokenFilter): Promise<Token[]>;
19
+ }
20
+ export type onSearchPackage = (item: Package, cb: CallbackAction) => void;
21
+ export type onEndSearchPackage = (error?: any) => void;
22
+ export type onValidatePackage = (name: string) => boolean;
23
+ export interface ILocalPackageManager {
24
+ logger: Logger;
25
+ writeTarball(pkgName: string): UploadTarball;
26
+ readTarball(pkgName: string): ReadTarball;
27
+ readPackage(fileName: string, callback: ReadPackageCallback): void;
28
+ createPackage(pkgName: string, value: Package, cb: CallbackAction): void;
29
+ deletePackage(fileName: string, callback: CallbackAction): void;
30
+ removePackage(callback: CallbackAction): void;
31
+ updatePackage(pkgFileName: string, updateHandler: StorageUpdateCallback, onWrite: StorageWriteCallback, transformPackage: PackageTransformer, onEnd: CallbackAction): void;
32
+ savePackage(fileName: string, json: Package, callback: CallbackAction): void;
33
+ }
34
+ export type IPackageStorage = ILocalPackageManager | void;
35
+ export type IPackageStorageManager = ILocalPackageManager;
36
+ export interface ILocalData<T> extends IPlugin<T>, ITokenActions {
37
+ logger: Logger;
38
+ config: T & Config;
39
+ add(name: string, callback: Callback): void;
40
+ remove(name: string, callback: Callback): void;
41
+ get(callback: Callback): void;
42
+ getSecret(): Promise<string>;
43
+ setSecret(secret: string): Promise<any>;
44
+ getPackageStorage(packageInfo: string): IPackageStorage;
45
+ search(onPackage: onSearchPackage, onEnd: onEndSearchPackage, validateName: onValidatePackage): void;
46
+ }
47
+ export type IPluginStorage<T> = ILocalData<T>;
@@ -1,5 +1,7 @@
1
- import { Callback, Config, IPluginStorage, Logger, PluginOptions, Token, TokenFilter } from '@verdaccio/legacy-types';
2
- import { DataHandler, default as MemoryHandler } from './memory-handler';
1
+ import type { Callback, Config, Logger, Token, TokenFilter } from '@verdaccio/types';
2
+ import type { IPluginStorage, PluginOptions } from './legacy-plugin-api';
3
+ import type { DataHandler } from './memory-handler';
4
+ import MemoryHandler from './memory-handler';
3
5
  export type ConfigMemory = Config & {
4
6
  limit?: number;
5
7
  };
@@ -23,8 +25,8 @@ declare class LocalMemory implements IPluginStorage<ConfigMemory> {
23
25
  get(cb: Callback): void;
24
26
  getPackageStorage(packageInfo: string): MemoryHandler;
25
27
  private _createEmtpyDatabase;
26
- saveToken(token: Token): Promise<void>;
28
+ saveToken(_token: Token): Promise<void>;
27
29
  deleteToken(user: string, tokenKey: string): Promise<void>;
28
- readTokens(filter: TokenFilter): Promise<Token[]>;
30
+ readTokens(_filter: TokenFilter): Promise<Token[]>;
29
31
  }
30
32
  export default LocalMemory;
@@ -1,4 +1,3 @@
1
- require("./_virtual/_rolldown/runtime.js");
2
1
  const require_memory_handler = require("./memory-handler.js");
3
2
  let _verdaccio_core = require("@verdaccio/core");
4
3
  //#region src/local-memory.ts
@@ -58,7 +57,7 @@ var LocalMemory = class {
58
57
  secret: ""
59
58
  };
60
59
  }
61
- saveToken(token) {
60
+ saveToken(_token) {
62
61
  this.logger.warn("[verdaccio/memory][saveToken] save token has not been implemented yet");
63
62
  return Promise.reject(_verdaccio_core.errorUtils.getServiceUnavailable("method not implemented"));
64
63
  }
@@ -69,7 +68,7 @@ var LocalMemory = class {
69
68
  }, "[verdaccio/memory][deleteToken] delete token has not been implemented yet @{user}");
70
69
  return Promise.reject(_verdaccio_core.errorUtils.getServiceUnavailable("method not implemented"));
71
70
  }
72
- readTokens(filter) {
71
+ readTokens(_filter) {
73
72
  this.logger.warn("[verdaccio/memory][readTokens] read tokens has not been implemented yet ");
74
73
  return Promise.reject(_verdaccio_core.errorUtils.getServiceUnavailable("method not implemented"));
75
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local-memory.js","names":[],"sources":["../src/local-memory.ts"],"sourcesContent":["import { errorUtils } from '@verdaccio/core';\nimport type {\n Callback,\n Config,\n IPluginStorage,\n Logger,\n PluginOptions,\n Token,\n TokenFilter,\n} from '@verdaccio/legacy-types';\n\nimport type { DataHandler } from './memory-handler';\nimport MemoryHandler from './memory-handler';\n\nexport type ConfigMemory = Config & { limit?: number };\nexport interface MemoryLocalStorage {\n secret: string;\n list: string[];\n files: DataHandler;\n}\n\nconst DEFAULT_LIMIT = 1000;\nclass LocalMemory implements IPluginStorage<ConfigMemory> {\n private path: string;\n private limit: number;\n public logger: Logger;\n private data: MemoryLocalStorage;\n public config: ConfigMemory;\n\n public constructor(config: ConfigMemory, options: PluginOptions<ConfigMemory>) {\n this.config = config;\n this.limit = config.limit || DEFAULT_LIMIT;\n this.logger = options.logger;\n this.data = this._createEmtpyDatabase();\n this.path = '/';\n }\n\n public getSecret(): Promise<string> {\n return Promise.resolve(this.data.secret);\n }\n\n public setSecret(secret: string): Promise<string | null> {\n return new Promise((resolve): void => {\n this.data.secret = secret;\n resolve(null);\n });\n }\n\n public add(name: string, cb: Callback): void {\n const { list } = this.data;\n\n if (list.length < this.limit) {\n if (list.indexOf(name) === -1) {\n list.push(name);\n }\n cb(null);\n } else {\n this.logger.info(\n { limit: this.limit },\n 'Storage memory has reached limit of @{limit} packages'\n );\n cb(new Error('Storage memory has reached limit of limit packages'));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public search(onPackage: Callback, onEnd: Callback, validateName: Function): void {\n this.logger.warn('[verdaccio/memory]: search method not implemented, PR is welcome');\n onEnd();\n }\n\n public remove(name: string, cb: Callback): void {\n const { list } = this.data;\n const item = list.indexOf(name);\n\n if (item !== -1) {\n list.splice(item, 1);\n }\n\n cb(null);\n }\n\n public get(cb: Callback): void {\n cb(null, this.data.list);\n }\n\n public getPackageStorage(packageInfo: string): MemoryHandler {\n return new MemoryHandler(packageInfo, this.data.files, this.logger);\n }\n\n private _createEmtpyDatabase(): MemoryLocalStorage {\n const list: string[] = [];\n const files = {};\n const emptyDatabase = {\n list,\n files,\n secret: '',\n };\n\n return emptyDatabase;\n }\n\n public saveToken(token: Token): Promise<void> {\n this.logger.warn('[verdaccio/memory][saveToken] save token has not been implemented yet');\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<void> {\n this.logger.warn(\n { tokenKey, user },\n '[verdaccio/memory][deleteToken] delete token has not been implemented yet @{user}'\n );\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n this.logger.warn('[verdaccio/memory][readTokens] read tokens has not been implemented yet ');\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n}\n\nexport default LocalMemory;\n"],"mappings":";;;;AAqBA,IAAM,gBAAgB;AACtB,IAAM,cAAN,MAA0D;CACxD;CACA;CACA;CACA;CACA;CAEA,YAAmB,QAAsB,SAAsC;AAC7E,OAAK,SAAS;AACd,OAAK,QAAQ,OAAO,SAAS;AAC7B,OAAK,SAAS,QAAQ;AACtB,OAAK,OAAO,KAAK,sBAAsB;AACvC,OAAK,OAAO;;CAGd,YAAoC;AAClC,SAAO,QAAQ,QAAQ,KAAK,KAAK,OAAO;;CAG1C,UAAiB,QAAwC;AACvD,SAAO,IAAI,SAAS,YAAkB;AACpC,QAAK,KAAK,SAAS;AACnB,WAAQ,KAAK;IACb;;CAGJ,IAAW,MAAc,IAAoB;EAC3C,MAAM,EAAE,SAAS,KAAK;AAEtB,MAAI,KAAK,SAAS,KAAK,OAAO;AAC5B,OAAI,KAAK,QAAQ,KAAK,KAAK,GACzB,MAAK,KAAK,KAAK;AAEjB,MAAG,KAAK;SACH;AACL,QAAK,OAAO,KACV,EAAE,OAAO,KAAK,OAAO,EACrB,wDACD;AACD,sBAAG,IAAI,MAAM,qDAAqD,CAAC;;;CAKvE,OAAc,WAAqB,OAAiB,cAA8B;AAChF,OAAK,OAAO,KAAK,mEAAmE;AACpF,SAAO;;CAGT,OAAc,MAAc,IAAoB;EAC9C,MAAM,EAAE,SAAS,KAAK;EACtB,MAAM,OAAO,KAAK,QAAQ,KAAK;AAE/B,MAAI,SAAS,GACX,MAAK,OAAO,MAAM,EAAE;AAGtB,KAAG,KAAK;;CAGV,IAAW,IAAoB;AAC7B,KAAG,MAAM,KAAK,KAAK,KAAK;;CAG1B,kBAAyB,aAAoC;AAC3D,SAAO,IAAI,uBAAA,QAAc,aAAa,KAAK,KAAK,OAAO,KAAK,OAAO;;CAGrE,uBAAmD;AASjD,SANsB;GACpB,MAHqB,EAAE;GAIvB,OAHY,EAAE;GAId,QAAQ;GACT;;CAKH,UAAiB,OAA6B;AAC5C,OAAK,OAAO,KAAK,wEAAwE;AAEzF,SAAO,QAAQ,OAAO,gBAAA,WAAW,sBAAsB,yBAAyB,CAAC;;CAGnF,YAAmB,MAAc,UAAiC;AAChE,OAAK,OAAO,KACV;GAAE;GAAU;GAAM,EAClB,oFACD;AAED,SAAO,QAAQ,OAAO,gBAAA,WAAW,sBAAsB,yBAAyB,CAAC;;CAGnF,WAAkB,QAAuC;AACvD,OAAK,OAAO,KAAK,2EAA2E;AAE5F,SAAO,QAAQ,OAAO,gBAAA,WAAW,sBAAsB,yBAAyB,CAAC"}
1
+ {"version":3,"file":"local-memory.js","names":[],"sources":["../src/local-memory.ts"],"sourcesContent":["import { errorUtils } from '@verdaccio/core';\nimport type { Callback, Config, Logger, Token, TokenFilter } from '@verdaccio/types';\n\nimport type { IPluginStorage, PluginOptions } from './legacy-plugin-api';\n\nimport type { DataHandler } from './memory-handler';\nimport MemoryHandler from './memory-handler';\n\nexport type ConfigMemory = Config & { limit?: number };\nexport interface MemoryLocalStorage {\n secret: string;\n list: string[];\n files: DataHandler;\n}\n\nconst DEFAULT_LIMIT = 1000;\nclass LocalMemory implements IPluginStorage<ConfigMemory> {\n private path: string;\n private limit: number;\n public logger: Logger;\n private data: MemoryLocalStorage;\n public config: ConfigMemory;\n\n public constructor(config: ConfigMemory, options: PluginOptions<ConfigMemory>) {\n this.config = config;\n this.limit = config.limit || DEFAULT_LIMIT;\n this.logger = options.logger;\n this.data = this._createEmtpyDatabase();\n this.path = '/';\n }\n\n public getSecret(): Promise<string> {\n return Promise.resolve(this.data.secret);\n }\n\n public setSecret(secret: string): Promise<string | null> {\n return new Promise((resolve): void => {\n this.data.secret = secret;\n resolve(null);\n });\n }\n\n public add(name: string, cb: Callback): void {\n const { list } = this.data;\n\n if (list.length < this.limit) {\n if (list.indexOf(name) === -1) {\n list.push(name);\n }\n cb(null);\n } else {\n this.logger.info(\n { limit: this.limit },\n 'Storage memory has reached limit of @{limit} packages'\n );\n cb(new Error('Storage memory has reached limit of limit packages'));\n }\n }\n\n public search(onPackage: Callback, onEnd: Callback, validateName: Function): void {\n void onPackage;\n void validateName;\n\n this.logger.warn('[verdaccio/memory]: search method not implemented, PR is welcome');\n onEnd();\n }\n\n public remove(name: string, cb: Callback): void {\n const { list } = this.data;\n const item = list.indexOf(name);\n\n if (item !== -1) {\n list.splice(item, 1);\n }\n\n cb(null);\n }\n\n public get(cb: Callback): void {\n cb(null, this.data.list);\n }\n\n public getPackageStorage(packageInfo: string): MemoryHandler {\n return new MemoryHandler(packageInfo, this.data.files, this.logger);\n }\n\n private _createEmtpyDatabase(): MemoryLocalStorage {\n const list: string[] = [];\n const files = {};\n const emptyDatabase = {\n list,\n files,\n secret: '',\n };\n\n return emptyDatabase;\n }\n\n public saveToken(_token: Token): Promise<void> {\n this.logger.warn('[verdaccio/memory][saveToken] save token has not been implemented yet');\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<void> {\n this.logger.warn(\n { tokenKey, user },\n '[verdaccio/memory][deleteToken] delete token has not been implemented yet @{user}'\n );\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n\n public readTokens(_filter: TokenFilter): Promise<Token[]> {\n this.logger.warn('[verdaccio/memory][readTokens] read tokens has not been implemented yet ');\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n}\n\nexport default LocalMemory;\n"],"mappings":";;;AAeA,IAAM,gBAAgB;AACtB,IAAM,cAAN,MAA0D;CACxD;CACA;CACA;CACA;CACA;CAEA,YAAmB,QAAsB,SAAsC;EAC7E,KAAK,SAAS;EACd,KAAK,QAAQ,OAAO,SAAS;EAC7B,KAAK,SAAS,QAAQ;EACtB,KAAK,OAAO,KAAK,qBAAqB;EACtC,KAAK,OAAO;CACd;CAEA,YAAoC;EAClC,OAAO,QAAQ,QAAQ,KAAK,KAAK,MAAM;CACzC;CAEA,UAAiB,QAAwC;EACvD,OAAO,IAAI,SAAS,YAAkB;GACpC,KAAK,KAAK,SAAS;GACnB,QAAQ,IAAI;EACd,CAAC;CACH;CAEA,IAAW,MAAc,IAAoB;EAC3C,MAAM,EAAE,SAAS,KAAK;EAEtB,IAAI,KAAK,SAAS,KAAK,OAAO;GAC5B,IAAI,KAAK,QAAQ,IAAI,MAAM,IACzB,KAAK,KAAK,IAAI;GAEhB,GAAG,IAAI;EACT,OAAO;GACL,KAAK,OAAO,KACV,EAAE,OAAO,KAAK,MAAM,GACpB,uDACF;GACA,mBAAG,IAAI,MAAM,oDAAoD,CAAC;EACpE;CACF;CAEA,OAAc,WAAqB,OAAiB,cAA8B;EAIhF,KAAK,OAAO,KAAK,kEAAkE;EACnF,MAAM;CACR;CAEA,OAAc,MAAc,IAAoB;EAC9C,MAAM,EAAE,SAAS,KAAK;EACtB,MAAM,OAAO,KAAK,QAAQ,IAAI;EAE9B,IAAI,SAAS,IACX,KAAK,OAAO,MAAM,CAAC;EAGrB,GAAG,IAAI;CACT;CAEA,IAAW,IAAoB;EAC7B,GAAG,MAAM,KAAK,KAAK,IAAI;CACzB;CAEA,kBAAyB,aAAoC;EAC3D,OAAO,IAAI,uBAAA,QAAc,aAAa,KAAK,KAAK,OAAO,KAAK,MAAM;CACpE;CAEA,uBAAmD;EASjD,OAAO;GALL,MAAA,CAAA;GACA,OAAA,CAAA;GACA,QAAQ;EAGH;CACT;CAEA,UAAiB,QAA8B;EAC7C,KAAK,OAAO,KAAK,uEAAuE;EAExF,OAAO,QAAQ,OAAO,gBAAA,WAAW,sBAAsB,wBAAwB,CAAC;CAClF;CAEA,YAAmB,MAAc,UAAiC;EAChE,KAAK,OAAO,KACV;GAAE;GAAU;EAAK,GACjB,mFACF;EAEA,OAAO,QAAQ,OAAO,gBAAA,WAAW,sBAAsB,wBAAwB,CAAC;CAClF;CAEA,WAAkB,SAAwC;EACxD,KAAK,OAAO,KAAK,0EAA0E;EAE3F,OAAO,QAAQ,OAAO,gBAAA,WAAW,sBAAsB,wBAAwB,CAAC;CAClF;AACF"}
@@ -0,0 +1,79 @@
1
+ import MemoryHandler from "./memory-handler.mjs";
2
+ import { errorUtils } from "@verdaccio/core";
3
+ //#region src/local-memory.ts
4
+ var DEFAULT_LIMIT = 1e3;
5
+ var LocalMemory = class {
6
+ path;
7
+ limit;
8
+ logger;
9
+ data;
10
+ config;
11
+ constructor(config, options) {
12
+ this.config = config;
13
+ this.limit = config.limit || DEFAULT_LIMIT;
14
+ this.logger = options.logger;
15
+ this.data = this._createEmtpyDatabase();
16
+ this.path = "/";
17
+ }
18
+ getSecret() {
19
+ return Promise.resolve(this.data.secret);
20
+ }
21
+ setSecret(secret) {
22
+ return new Promise((resolve) => {
23
+ this.data.secret = secret;
24
+ resolve(null);
25
+ });
26
+ }
27
+ add(name, cb) {
28
+ const { list } = this.data;
29
+ if (list.length < this.limit) {
30
+ if (list.indexOf(name) === -1) list.push(name);
31
+ cb(null);
32
+ } else {
33
+ this.logger.info({ limit: this.limit }, "Storage memory has reached limit of @{limit} packages");
34
+ cb(/* @__PURE__ */ new Error("Storage memory has reached limit of limit packages"));
35
+ }
36
+ }
37
+ search(onPackage, onEnd, validateName) {
38
+ this.logger.warn("[verdaccio/memory]: search method not implemented, PR is welcome");
39
+ onEnd();
40
+ }
41
+ remove(name, cb) {
42
+ const { list } = this.data;
43
+ const item = list.indexOf(name);
44
+ if (item !== -1) list.splice(item, 1);
45
+ cb(null);
46
+ }
47
+ get(cb) {
48
+ cb(null, this.data.list);
49
+ }
50
+ getPackageStorage(packageInfo) {
51
+ return new MemoryHandler(packageInfo, this.data.files, this.logger);
52
+ }
53
+ _createEmtpyDatabase() {
54
+ return {
55
+ list: [],
56
+ files: {},
57
+ secret: ""
58
+ };
59
+ }
60
+ saveToken(_token) {
61
+ this.logger.warn("[verdaccio/memory][saveToken] save token has not been implemented yet");
62
+ return Promise.reject(errorUtils.getServiceUnavailable("method not implemented"));
63
+ }
64
+ deleteToken(user, tokenKey) {
65
+ this.logger.warn({
66
+ tokenKey,
67
+ user
68
+ }, "[verdaccio/memory][deleteToken] delete token has not been implemented yet @{user}");
69
+ return Promise.reject(errorUtils.getServiceUnavailable("method not implemented"));
70
+ }
71
+ readTokens(_filter) {
72
+ this.logger.warn("[verdaccio/memory][readTokens] read tokens has not been implemented yet ");
73
+ return Promise.reject(errorUtils.getServiceUnavailable("method not implemented"));
74
+ }
75
+ };
76
+ //#endregion
77
+ export { LocalMemory as default };
78
+
79
+ //# sourceMappingURL=local-memory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-memory.mjs","names":[],"sources":["../src/local-memory.ts"],"sourcesContent":["import { errorUtils } from '@verdaccio/core';\nimport type { Callback, Config, Logger, Token, TokenFilter } from '@verdaccio/types';\n\nimport type { IPluginStorage, PluginOptions } from './legacy-plugin-api';\n\nimport type { DataHandler } from './memory-handler';\nimport MemoryHandler from './memory-handler';\n\nexport type ConfigMemory = Config & { limit?: number };\nexport interface MemoryLocalStorage {\n secret: string;\n list: string[];\n files: DataHandler;\n}\n\nconst DEFAULT_LIMIT = 1000;\nclass LocalMemory implements IPluginStorage<ConfigMemory> {\n private path: string;\n private limit: number;\n public logger: Logger;\n private data: MemoryLocalStorage;\n public config: ConfigMemory;\n\n public constructor(config: ConfigMemory, options: PluginOptions<ConfigMemory>) {\n this.config = config;\n this.limit = config.limit || DEFAULT_LIMIT;\n this.logger = options.logger;\n this.data = this._createEmtpyDatabase();\n this.path = '/';\n }\n\n public getSecret(): Promise<string> {\n return Promise.resolve(this.data.secret);\n }\n\n public setSecret(secret: string): Promise<string | null> {\n return new Promise((resolve): void => {\n this.data.secret = secret;\n resolve(null);\n });\n }\n\n public add(name: string, cb: Callback): void {\n const { list } = this.data;\n\n if (list.length < this.limit) {\n if (list.indexOf(name) === -1) {\n list.push(name);\n }\n cb(null);\n } else {\n this.logger.info(\n { limit: this.limit },\n 'Storage memory has reached limit of @{limit} packages'\n );\n cb(new Error('Storage memory has reached limit of limit packages'));\n }\n }\n\n public search(onPackage: Callback, onEnd: Callback, validateName: Function): void {\n void onPackage;\n void validateName;\n\n this.logger.warn('[verdaccio/memory]: search method not implemented, PR is welcome');\n onEnd();\n }\n\n public remove(name: string, cb: Callback): void {\n const { list } = this.data;\n const item = list.indexOf(name);\n\n if (item !== -1) {\n list.splice(item, 1);\n }\n\n cb(null);\n }\n\n public get(cb: Callback): void {\n cb(null, this.data.list);\n }\n\n public getPackageStorage(packageInfo: string): MemoryHandler {\n return new MemoryHandler(packageInfo, this.data.files, this.logger);\n }\n\n private _createEmtpyDatabase(): MemoryLocalStorage {\n const list: string[] = [];\n const files = {};\n const emptyDatabase = {\n list,\n files,\n secret: '',\n };\n\n return emptyDatabase;\n }\n\n public saveToken(_token: Token): Promise<void> {\n this.logger.warn('[verdaccio/memory][saveToken] save token has not been implemented yet');\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<void> {\n this.logger.warn(\n { tokenKey, user },\n '[verdaccio/memory][deleteToken] delete token has not been implemented yet @{user}'\n );\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n\n public readTokens(_filter: TokenFilter): Promise<Token[]> {\n this.logger.warn('[verdaccio/memory][readTokens] read tokens has not been implemented yet ');\n\n return Promise.reject(errorUtils.getServiceUnavailable('method not implemented'));\n }\n}\n\nexport default LocalMemory;\n"],"mappings":";;;AAeA,IAAM,gBAAgB;AACtB,IAAM,cAAN,MAA0D;CACxD;CACA;CACA;CACA;CACA;CAEA,YAAmB,QAAsB,SAAsC;EAC7E,KAAK,SAAS;EACd,KAAK,QAAQ,OAAO,SAAS;EAC7B,KAAK,SAAS,QAAQ;EACtB,KAAK,OAAO,KAAK,qBAAqB;EACtC,KAAK,OAAO;CACd;CAEA,YAAoC;EAClC,OAAO,QAAQ,QAAQ,KAAK,KAAK,MAAM;CACzC;CAEA,UAAiB,QAAwC;EACvD,OAAO,IAAI,SAAS,YAAkB;GACpC,KAAK,KAAK,SAAS;GACnB,QAAQ,IAAI;EACd,CAAC;CACH;CAEA,IAAW,MAAc,IAAoB;EAC3C,MAAM,EAAE,SAAS,KAAK;EAEtB,IAAI,KAAK,SAAS,KAAK,OAAO;GAC5B,IAAI,KAAK,QAAQ,IAAI,MAAM,IACzB,KAAK,KAAK,IAAI;GAEhB,GAAG,IAAI;EACT,OAAO;GACL,KAAK,OAAO,KACV,EAAE,OAAO,KAAK,MAAM,GACpB,uDACF;GACA,mBAAG,IAAI,MAAM,oDAAoD,CAAC;EACpE;CACF;CAEA,OAAc,WAAqB,OAAiB,cAA8B;EAIhF,KAAK,OAAO,KAAK,kEAAkE;EACnF,MAAM;CACR;CAEA,OAAc,MAAc,IAAoB;EAC9C,MAAM,EAAE,SAAS,KAAK;EACtB,MAAM,OAAO,KAAK,QAAQ,IAAI;EAE9B,IAAI,SAAS,IACX,KAAK,OAAO,MAAM,CAAC;EAGrB,GAAG,IAAI;CACT;CAEA,IAAW,IAAoB;EAC7B,GAAG,MAAM,KAAK,KAAK,IAAI;CACzB;CAEA,kBAAyB,aAAoC;EAC3D,OAAO,IAAI,cAAc,aAAa,KAAK,KAAK,OAAO,KAAK,MAAM;CACpE;CAEA,uBAAmD;EASjD,OAAO;GALL,MAAA,CAAA;GACA,OAAA,CAAA;GACA,QAAQ;EAGH;CACT;CAEA,UAAiB,QAA8B;EAC7C,KAAK,OAAO,KAAK,uEAAuE;EAExF,OAAO,QAAQ,OAAO,WAAW,sBAAsB,wBAAwB,CAAC;CAClF;CAEA,YAAmB,MAAc,UAAiC;EAChE,KAAK,OAAO,KACV;GAAE;GAAU;EAAK,GACjB,mFACF;EAEA,OAAO,QAAQ,OAAO,WAAW,sBAAsB,wBAAwB,CAAC;CAClF;CAEA,WAAkB,SAAwC;EACxD,KAAK,OAAO,KAAK,0EAA0E;EAE3F,OAAO,QAAQ,OAAO,WAAW,sBAAsB,wBAAwB,CAAC;CAClF;AACF"}
@@ -1,4 +1,6 @@
1
- import { Callback, CallbackAction, IPackageStorageManager, IReadTarball, IUploadTarball, Logger, Package, PackageTransformer, ReadPackageCallback, StorageUpdateCallback, StorageWriteCallback } from '@verdaccio/legacy-types';
1
+ import { ReadTarball, UploadTarball } from '@verdaccio/streams';
2
+ import type { Callback, CallbackAction, Logger, Package, PackageTransformer, ReadPackageCallback, StorageUpdateCallback, StorageWriteCallback } from '@verdaccio/types';
3
+ import type { IPackageStorageManager } from './legacy-plugin-api';
2
4
  export type DataHandler = {
3
5
  [key: string]: string;
4
6
  };
@@ -14,8 +16,8 @@ declare class MemoryHandler implements IPackageStorageManager {
14
16
  createPackage(name: string, value: Package, cb: CallbackAction): void;
15
17
  savePackage(name: string, value: Package, cb: CallbackAction): void;
16
18
  readPackage(name: string, cb: ReadPackageCallback): void;
17
- writeTarball(name: string): IUploadTarball;
18
- readTarball(name: string): IReadTarball;
19
+ writeTarball(name: string): UploadTarball;
20
+ readTarball(name: string): ReadTarball;
19
21
  private _getStorage;
20
22
  }
21
23
  export default MemoryHandler;
@@ -32,7 +32,7 @@ var MemoryHandler = class {
32
32
  if (err) return onEnd(err);
33
33
  try {
34
34
  onWrite(pkgFileName, transformPackage(pkg), onEnd);
35
- } catch (err) {
35
+ } catch {
36
36
  return onEnd(getInternalError("error on parse the metadata"));
37
37
  }
38
38
  });
@@ -61,7 +61,7 @@ var MemoryHandler = class {
61
61
  const isJson = typeof json === "undefined";
62
62
  try {
63
63
  return cb(isJson ? getNotFound() : null, require_utils.parsePackage(json));
64
- } catch (err) {
64
+ } catch {
65
65
  return cb(getNotFound());
66
66
  }
67
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory-handler.js","names":[],"sources":["../src/memory-handler.ts"],"sourcesContent":["import MemoryFileSystem from 'memory-fs';\nimport path from 'node:path';\n\nimport type { VerdaccioError } from '@verdaccio/core';\nimport { errorUtils } from '@verdaccio/core';\nimport type {\n Callback,\n CallbackAction,\n IPackageStorageManager,\n IReadTarball,\n IUploadTarball,\n Logger,\n Package,\n PackageTransformer,\n ReadPackageCallback,\n StorageUpdateCallback,\n StorageWriteCallback,\n} from '@verdaccio/legacy-types';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\n\nimport { parsePackage, stringifyPackage } from './utils';\n\nconst fs = new MemoryFileSystem();\nconst { getBadRequest, getInternalError, getConflict, getNotFound } = errorUtils;\n\nexport type DataHandler = {\n [key: string]: string;\n};\n\nclass MemoryHandler implements IPackageStorageManager {\n private data: DataHandler;\n private name: string;\n private path: string;\n public logger: Logger;\n\n public constructor(packageName: string, data: DataHandler, logger: Logger) {\n // this is not need it\n this.data = data;\n this.name = packageName;\n this.logger = logger;\n this.path = `/${packageName}`;\n }\n\n public updatePackage(\n pkgFileName: string,\n updateHandler: StorageUpdateCallback,\n onWrite: StorageWriteCallback,\n transformPackage: PackageTransformer,\n onEnd: CallbackAction\n ): void {\n const json: string = this._getStorage(pkgFileName);\n let pkg: Package;\n\n try {\n pkg = parsePackage(json) as Package;\n } catch (err) {\n return onEnd(err);\n }\n\n updateHandler(pkg, (err: VerdaccioError) => {\n if (err) {\n return onEnd(err);\n }\n try {\n onWrite(pkgFileName, transformPackage(pkg), onEnd);\n } catch (err) {\n return onEnd(getInternalError('error on parse the metadata'));\n }\n });\n }\n\n public deletePackage(pkgName: string, callback: Callback): void {\n delete this.data[pkgName];\n return callback(null);\n }\n\n public removePackage(callback: CallbackAction): void {\n return callback(null);\n }\n\n public createPackage(name: string, value: Package, cb: CallbackAction): void {\n this.savePackage(name, value, cb);\n }\n\n public savePackage(name: string, value: Package, cb: CallbackAction): void {\n try {\n const json: string = stringifyPackage(value);\n\n this.data[name] = json;\n return cb(null);\n } catch (err: any) {\n return cb(getInternalError(err.message));\n }\n }\n\n public readPackage(name: string, cb: ReadPackageCallback): void {\n const json = this._getStorage(name);\n const isJson = typeof json === 'undefined';\n\n try {\n return cb(isJson ? getNotFound() : null, parsePackage(json));\n } catch (err) {\n return cb(getNotFound());\n }\n }\n\n public writeTarball(name: string): IUploadTarball {\n const uploadStream: IUploadTarball = new UploadTarball({});\n const temporalName = `${this.path}/${name}`;\n\n process.nextTick(function () {\n fs.mkdirp(path.dirname(temporalName), function (mkdirpError) {\n if (mkdirpError) {\n return uploadStream.emit('error', mkdirpError);\n }\n fs.stat(temporalName, function (fileError, stats) {\n if (!fileError && stats) {\n return uploadStream.emit('error', getConflict());\n }\n\n try {\n const file = fs.createWriteStream(temporalName);\n\n uploadStream.pipe(file);\n\n uploadStream.done = function (): void {\n const onEnd = function (): void {\n uploadStream.emit('success');\n };\n\n uploadStream.on('end', onEnd);\n };\n\n uploadStream.abort = function (): void {\n uploadStream.emit('error', getBadRequest('transmision aborted'));\n file.end();\n };\n\n uploadStream.emit('open');\n return;\n } catch (err) {\n uploadStream.emit('error', err);\n return;\n }\n });\n });\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): IReadTarball {\n const pathName = `${this.path}/${name}`;\n\n const readTarballStream: IReadTarball = new ReadTarball({});\n\n process.nextTick(function () {\n fs.stat(pathName, function (fileError, stats) {\n if (fileError && !stats) {\n return readTarballStream.emit('error', getNotFound());\n }\n\n try {\n const readStream = fs.createReadStream(pathName);\n\n const pathMeta = fs.meta(pathName);\n const contentLength: number = (pathMeta && pathMeta.length) || 0;\n readTarballStream.emit('content-length', contentLength);\n readTarballStream.emit('open');\n readStream.pipe(readTarballStream);\n readStream.on('error', (error: VerdaccioError) => {\n readTarballStream.emit('error', error);\n });\n\n readTarballStream.abort = function (): void {\n readStream.destroy(getBadRequest('read has been aborted'));\n };\n return;\n } catch (err) {\n readTarballStream.emit('error', err);\n return;\n }\n });\n });\n\n return readTarballStream;\n }\n\n private _getStorage(name = ''): string {\n return this.data[name];\n }\n}\n\nexport default MemoryHandler;\n"],"mappings":"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"}
1
+ {"version":3,"file":"memory-handler.js","names":[],"sources":["../src/memory-handler.ts"],"sourcesContent":["import MemoryFileSystem from 'memory-fs';\nimport path from 'node:path';\n\nimport type { VerdaccioError } from '@verdaccio/core';\nimport { errorUtils } from '@verdaccio/core';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\nimport type {\n Callback,\n CallbackAction,\n Logger,\n Package,\n PackageTransformer,\n ReadPackageCallback,\n StorageUpdateCallback,\n StorageWriteCallback,\n} from '@verdaccio/types';\n\nimport type { IPackageStorageManager } from './legacy-plugin-api';\n\nimport { parsePackage, stringifyPackage } from './utils';\n\nconst fs = new MemoryFileSystem();\nconst { getBadRequest, getInternalError, getConflict, getNotFound } = errorUtils;\n\nexport type DataHandler = {\n [key: string]: string;\n};\n\nclass MemoryHandler implements IPackageStorageManager {\n private data: DataHandler;\n private name: string;\n private path: string;\n public logger: Logger;\n\n public constructor(packageName: string, data: DataHandler, logger: Logger) {\n // this is not need it\n this.data = data;\n this.name = packageName;\n this.logger = logger;\n this.path = `/${packageName}`;\n }\n\n public updatePackage(\n pkgFileName: string,\n updateHandler: StorageUpdateCallback,\n onWrite: StorageWriteCallback,\n transformPackage: PackageTransformer,\n onEnd: CallbackAction\n ): void {\n const json: string = this._getStorage(pkgFileName);\n let pkg: Package;\n\n try {\n pkg = parsePackage(json) as Package;\n } catch (err) {\n return onEnd(err);\n }\n\n updateHandler(pkg, (err: VerdaccioError) => {\n if (err) {\n return onEnd(err);\n }\n try {\n onWrite(pkgFileName, transformPackage(pkg), onEnd);\n } catch {\n return onEnd(getInternalError('error on parse the metadata'));\n }\n });\n }\n\n public deletePackage(pkgName: string, callback: Callback): void {\n delete this.data[pkgName];\n return callback(null);\n }\n\n public removePackage(callback: CallbackAction): void {\n return callback(null);\n }\n\n public createPackage(name: string, value: Package, cb: CallbackAction): void {\n this.savePackage(name, value, cb);\n }\n\n public savePackage(name: string, value: Package, cb: CallbackAction): void {\n try {\n const json: string = stringifyPackage(value);\n\n this.data[name] = json;\n return cb(null);\n } catch (err: any) {\n return cb(getInternalError(err.message));\n }\n }\n\n public readPackage(name: string, cb: ReadPackageCallback): void {\n const json = this._getStorage(name);\n const isJson = typeof json === 'undefined';\n\n try {\n return cb(isJson ? getNotFound() : null, parsePackage(json));\n } catch {\n return cb(getNotFound());\n }\n }\n\n public writeTarball(name: string): UploadTarball {\n const uploadStream: UploadTarball = new UploadTarball({});\n const temporalName = `${this.path}/${name}`;\n\n process.nextTick(function () {\n fs.mkdirp(path.dirname(temporalName), function (mkdirpError) {\n if (mkdirpError) {\n return uploadStream.emit('error', mkdirpError);\n }\n fs.stat(temporalName, function (fileError, stats) {\n if (!fileError && stats) {\n return uploadStream.emit('error', getConflict());\n }\n\n try {\n const file = fs.createWriteStream(temporalName);\n\n uploadStream.pipe(file);\n\n uploadStream.done = function (): void {\n const onEnd = function (): void {\n uploadStream.emit('success');\n };\n\n uploadStream.on('end', onEnd);\n };\n\n uploadStream.abort = function (): void {\n uploadStream.emit('error', getBadRequest('transmision aborted'));\n file.end();\n };\n\n uploadStream.emit('open');\n return;\n } catch (err) {\n uploadStream.emit('error', err);\n return;\n }\n });\n });\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): ReadTarball {\n const pathName = `${this.path}/${name}`;\n\n const readTarballStream: ReadTarball = new ReadTarball({});\n\n process.nextTick(function () {\n fs.stat(pathName, function (fileError, stats) {\n if (fileError && !stats) {\n return readTarballStream.emit('error', getNotFound());\n }\n\n try {\n const readStream = fs.createReadStream(pathName);\n\n const pathMeta = fs.meta(pathName);\n const contentLength: number = (pathMeta && pathMeta.length) || 0;\n readTarballStream.emit('content-length', contentLength);\n readTarballStream.emit('open');\n readStream.pipe(readTarballStream);\n readStream.on('error', (error: VerdaccioError) => {\n readTarballStream.emit('error', error);\n });\n\n readTarballStream.abort = function (): void {\n readStream.destroy(getBadRequest('read has been aborted'));\n };\n return;\n } catch (err) {\n readTarballStream.emit('error', err);\n return;\n }\n });\n });\n\n return readTarballStream;\n }\n\n private _getStorage(name = ''): string {\n return this.data[name];\n }\n}\n\nexport default MemoryHandler;\n"],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import { parsePackage, stringifyPackage } from "./utils.mjs";
2
+ import { errorUtils } from "@verdaccio/core";
3
+ import MemoryFileSystem from "memory-fs";
4
+ import path from "node:path";
5
+ import { ReadTarball, UploadTarball } from "@verdaccio/streams";
6
+ //#region src/memory-handler.ts
7
+ var fs = new MemoryFileSystem();
8
+ var { getBadRequest, getInternalError, getConflict, getNotFound } = errorUtils;
9
+ var MemoryHandler = class {
10
+ data;
11
+ name;
12
+ path;
13
+ logger;
14
+ constructor(packageName, data, logger) {
15
+ this.data = data;
16
+ this.name = packageName;
17
+ this.logger = logger;
18
+ this.path = `/${packageName}`;
19
+ }
20
+ updatePackage(pkgFileName, updateHandler, onWrite, transformPackage, onEnd) {
21
+ const json = this._getStorage(pkgFileName);
22
+ let pkg;
23
+ try {
24
+ pkg = parsePackage(json);
25
+ } catch (err) {
26
+ return onEnd(err);
27
+ }
28
+ updateHandler(pkg, (err) => {
29
+ if (err) return onEnd(err);
30
+ try {
31
+ onWrite(pkgFileName, transformPackage(pkg), onEnd);
32
+ } catch {
33
+ return onEnd(getInternalError("error on parse the metadata"));
34
+ }
35
+ });
36
+ }
37
+ deletePackage(pkgName, callback) {
38
+ delete this.data[pkgName];
39
+ return callback(null);
40
+ }
41
+ removePackage(callback) {
42
+ return callback(null);
43
+ }
44
+ createPackage(name, value, cb) {
45
+ this.savePackage(name, value, cb);
46
+ }
47
+ savePackage(name, value, cb) {
48
+ try {
49
+ const json = stringifyPackage(value);
50
+ this.data[name] = json;
51
+ return cb(null);
52
+ } catch (err) {
53
+ return cb(getInternalError(err.message));
54
+ }
55
+ }
56
+ readPackage(name, cb) {
57
+ const json = this._getStorage(name);
58
+ const isJson = typeof json === "undefined";
59
+ try {
60
+ return cb(isJson ? getNotFound() : null, parsePackage(json));
61
+ } catch {
62
+ return cb(getNotFound());
63
+ }
64
+ }
65
+ writeTarball(name) {
66
+ const uploadStream = new UploadTarball({});
67
+ const temporalName = `${this.path}/${name}`;
68
+ process.nextTick(function() {
69
+ fs.mkdirp(path.dirname(temporalName), function(mkdirpError) {
70
+ if (mkdirpError) return uploadStream.emit("error", mkdirpError);
71
+ fs.stat(temporalName, function(fileError, stats) {
72
+ if (!fileError && stats) return uploadStream.emit("error", getConflict());
73
+ try {
74
+ const file = fs.createWriteStream(temporalName);
75
+ uploadStream.pipe(file);
76
+ uploadStream.done = function() {
77
+ const onEnd = function() {
78
+ uploadStream.emit("success");
79
+ };
80
+ uploadStream.on("end", onEnd);
81
+ };
82
+ uploadStream.abort = function() {
83
+ uploadStream.emit("error", getBadRequest("transmision aborted"));
84
+ file.end();
85
+ };
86
+ uploadStream.emit("open");
87
+ return;
88
+ } catch (err) {
89
+ uploadStream.emit("error", err);
90
+ return;
91
+ }
92
+ });
93
+ });
94
+ });
95
+ return uploadStream;
96
+ }
97
+ readTarball(name) {
98
+ const pathName = `${this.path}/${name}`;
99
+ const readTarballStream = new ReadTarball({});
100
+ process.nextTick(function() {
101
+ fs.stat(pathName, function(fileError, stats) {
102
+ if (fileError && !stats) return readTarballStream.emit("error", getNotFound());
103
+ try {
104
+ const readStream = fs.createReadStream(pathName);
105
+ const pathMeta = fs.meta(pathName);
106
+ const contentLength = pathMeta && pathMeta.length || 0;
107
+ readTarballStream.emit("content-length", contentLength);
108
+ readTarballStream.emit("open");
109
+ readStream.pipe(readTarballStream);
110
+ readStream.on("error", (error) => {
111
+ readTarballStream.emit("error", error);
112
+ });
113
+ readTarballStream.abort = function() {
114
+ readStream.destroy(getBadRequest("read has been aborted"));
115
+ };
116
+ return;
117
+ } catch (err) {
118
+ readTarballStream.emit("error", err);
119
+ return;
120
+ }
121
+ });
122
+ });
123
+ return readTarballStream;
124
+ }
125
+ _getStorage(name = "") {
126
+ return this.data[name];
127
+ }
128
+ };
129
+ //#endregion
130
+ export { MemoryHandler as default };
131
+
132
+ //# sourceMappingURL=memory-handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-handler.mjs","names":[],"sources":["../src/memory-handler.ts"],"sourcesContent":["import MemoryFileSystem from 'memory-fs';\nimport path from 'node:path';\n\nimport type { VerdaccioError } from '@verdaccio/core';\nimport { errorUtils } from '@verdaccio/core';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\nimport type {\n Callback,\n CallbackAction,\n Logger,\n Package,\n PackageTransformer,\n ReadPackageCallback,\n StorageUpdateCallback,\n StorageWriteCallback,\n} from '@verdaccio/types';\n\nimport type { IPackageStorageManager } from './legacy-plugin-api';\n\nimport { parsePackage, stringifyPackage } from './utils';\n\nconst fs = new MemoryFileSystem();\nconst { getBadRequest, getInternalError, getConflict, getNotFound } = errorUtils;\n\nexport type DataHandler = {\n [key: string]: string;\n};\n\nclass MemoryHandler implements IPackageStorageManager {\n private data: DataHandler;\n private name: string;\n private path: string;\n public logger: Logger;\n\n public constructor(packageName: string, data: DataHandler, logger: Logger) {\n // this is not need it\n this.data = data;\n this.name = packageName;\n this.logger = logger;\n this.path = `/${packageName}`;\n }\n\n public updatePackage(\n pkgFileName: string,\n updateHandler: StorageUpdateCallback,\n onWrite: StorageWriteCallback,\n transformPackage: PackageTransformer,\n onEnd: CallbackAction\n ): void {\n const json: string = this._getStorage(pkgFileName);\n let pkg: Package;\n\n try {\n pkg = parsePackage(json) as Package;\n } catch (err) {\n return onEnd(err);\n }\n\n updateHandler(pkg, (err: VerdaccioError) => {\n if (err) {\n return onEnd(err);\n }\n try {\n onWrite(pkgFileName, transformPackage(pkg), onEnd);\n } catch {\n return onEnd(getInternalError('error on parse the metadata'));\n }\n });\n }\n\n public deletePackage(pkgName: string, callback: Callback): void {\n delete this.data[pkgName];\n return callback(null);\n }\n\n public removePackage(callback: CallbackAction): void {\n return callback(null);\n }\n\n public createPackage(name: string, value: Package, cb: CallbackAction): void {\n this.savePackage(name, value, cb);\n }\n\n public savePackage(name: string, value: Package, cb: CallbackAction): void {\n try {\n const json: string = stringifyPackage(value);\n\n this.data[name] = json;\n return cb(null);\n } catch (err: any) {\n return cb(getInternalError(err.message));\n }\n }\n\n public readPackage(name: string, cb: ReadPackageCallback): void {\n const json = this._getStorage(name);\n const isJson = typeof json === 'undefined';\n\n try {\n return cb(isJson ? getNotFound() : null, parsePackage(json));\n } catch {\n return cb(getNotFound());\n }\n }\n\n public writeTarball(name: string): UploadTarball {\n const uploadStream: UploadTarball = new UploadTarball({});\n const temporalName = `${this.path}/${name}`;\n\n process.nextTick(function () {\n fs.mkdirp(path.dirname(temporalName), function (mkdirpError) {\n if (mkdirpError) {\n return uploadStream.emit('error', mkdirpError);\n }\n fs.stat(temporalName, function (fileError, stats) {\n if (!fileError && stats) {\n return uploadStream.emit('error', getConflict());\n }\n\n try {\n const file = fs.createWriteStream(temporalName);\n\n uploadStream.pipe(file);\n\n uploadStream.done = function (): void {\n const onEnd = function (): void {\n uploadStream.emit('success');\n };\n\n uploadStream.on('end', onEnd);\n };\n\n uploadStream.abort = function (): void {\n uploadStream.emit('error', getBadRequest('transmision aborted'));\n file.end();\n };\n\n uploadStream.emit('open');\n return;\n } catch (err) {\n uploadStream.emit('error', err);\n return;\n }\n });\n });\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): ReadTarball {\n const pathName = `${this.path}/${name}`;\n\n const readTarballStream: ReadTarball = new ReadTarball({});\n\n process.nextTick(function () {\n fs.stat(pathName, function (fileError, stats) {\n if (fileError && !stats) {\n return readTarballStream.emit('error', getNotFound());\n }\n\n try {\n const readStream = fs.createReadStream(pathName);\n\n const pathMeta = fs.meta(pathName);\n const contentLength: number = (pathMeta && pathMeta.length) || 0;\n readTarballStream.emit('content-length', contentLength);\n readTarballStream.emit('open');\n readStream.pipe(readTarballStream);\n readStream.on('error', (error: VerdaccioError) => {\n readTarballStream.emit('error', error);\n });\n\n readTarballStream.abort = function (): void {\n readStream.destroy(getBadRequest('read has been aborted'));\n };\n return;\n } catch (err) {\n readTarballStream.emit('error', err);\n return;\n }\n });\n });\n\n return readTarballStream;\n }\n\n private _getStorage(name = ''): string {\n return this.data[name];\n }\n}\n\nexport default MemoryHandler;\n"],"mappings":"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"}
package/lib/utils.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { Package } from '@verdaccio/legacy-types';
1
+ import type { Package } from '@verdaccio/types';
2
2
  export declare function stringifyPackage(pkg: Package): string;
3
3
  export declare function parsePackage(pkg: string): any;
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Package } from '@verdaccio/legacy-types';\n\nexport function stringifyPackage(pkg: Package) {\n return JSON.stringify(pkg, null, '\\t');\n}\n\nexport function parsePackage(pkg: string) {\n return JSON.parse(pkg);\n}\n"],"mappings":";AAEA,SAAgB,iBAAiB,KAAc;AAC7C,QAAO,KAAK,UAAU,KAAK,MAAM,IAAK;;AAGxC,SAAgB,aAAa,KAAa;AACxC,QAAO,KAAK,MAAM,IAAI"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Package } from '@verdaccio/types';\n\nexport function stringifyPackage(pkg: Package) {\n return JSON.stringify(pkg, null, '\\t');\n}\n\nexport function parsePackage(pkg: string) {\n return JSON.parse(pkg);\n}\n"],"mappings":";AAEA,SAAgB,iBAAiB,KAAc;CAC7C,OAAO,KAAK,UAAU,KAAK,MAAM,GAAI;AACvC;AAEA,SAAgB,aAAa,KAAa;CACxC,OAAO,KAAK,MAAM,GAAG;AACvB"}
package/lib/utils.mjs ADDED
@@ -0,0 +1,11 @@
1
+ //#region src/utils.ts
2
+ function stringifyPackage(pkg) {
3
+ return JSON.stringify(pkg, null, " ");
4
+ }
5
+ function parsePackage(pkg) {
6
+ return JSON.parse(pkg);
7
+ }
8
+ //#endregion
9
+ export { parsePackage, stringifyPackage };
10
+
11
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { Package } from '@verdaccio/types';\n\nexport function stringifyPackage(pkg: Package) {\n return JSON.stringify(pkg, null, '\\t');\n}\n\nexport function parsePackage(pkg: string) {\n return JSON.parse(pkg);\n}\n"],"mappings":";AAEA,SAAgB,iBAAiB,KAAc;CAC7C,OAAO,KAAK,UAAU,KAAK,MAAM,GAAI;AACvC;AAEA,SAAgB,aAAa,KAAa;CACxC,OAAO,KAAK,MAAM,GAAG;AACvB"}
package/package.json CHANGED
@@ -1,50 +1,65 @@
1
1
  {
2
2
  "name": "verdaccio-memory",
3
- "version": "10.4.6",
3
+ "version": "10.5.0",
4
4
  "description": "Storage implementation in memory",
5
5
  "keywords": [
6
- "verdaccio",
6
+ "memory",
7
7
  "plugin",
8
8
  "storage",
9
- "memory"
9
+ "verdaccio"
10
10
  ],
11
- "author": "Juan Picado <juanpicado19@gmail.com>",
12
- "license": "MIT",
13
11
  "homepage": "https://verdaccio.org",
12
+ "bugs": {
13
+ "url": "https://github.com/verdaccio/verdaccio/issues"
14
+ },
15
+ "license": "MIT",
16
+ "author": "Juan Picado <juanpicado19@gmail.com>",
14
17
  "repository": {
15
18
  "type": "https",
16
19
  "url": "https://github.com/verdaccio/verdaccio",
17
20
  "directory": "packages/plugins/memory"
18
21
  },
19
- "bugs": {
20
- "url": "https://github.com/verdaccio/verdaccio/issues"
22
+ "funding": {
23
+ "type": "opencollective",
24
+ "url": "https://opencollective.com/verdaccio"
21
25
  },
22
- "main": "lib/index.js",
23
- "types": "lib/index.d.ts",
24
26
  "files": [
25
27
  "lib/"
26
28
  ],
27
- "engines": {
28
- "node": ">=18"
29
+ "main": "./lib/index.js",
30
+ "module": "./lib/index.mjs",
31
+ "types": "./lib/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "import": {
35
+ "types": "./lib/index.d.ts",
36
+ "default": "./lib/index.mjs"
37
+ },
38
+ "require": {
39
+ "types": "./lib/index.d.ts",
40
+ "default": "./lib/index.js"
41
+ }
42
+ },
43
+ "./lib/*": "./lib/*"
29
44
  },
30
45
  "dependencies": {
31
46
  "memory-fs": "0.5.0",
32
- "@verdaccio/core": "8.1.2",
33
- "@verdaccio/streams": "10.2.5"
47
+ "@verdaccio/core": "8.2.0",
48
+ "@verdaccio/streams": "10.3.0"
34
49
  },
35
50
  "devDependencies": {
36
- "vite": "8.0.8",
37
- "vite-plugin-dts": "4.5.4",
51
+ "vite": "8.0.16",
38
52
  "vitest": "4.1.4",
39
- "@verdaccio/legacy-types": "1.0.5"
53
+ "@verdaccio/types": "13.0.5"
40
54
  },
41
- "funding": {
42
- "type": "opencollective",
43
- "url": "https://opencollective.com/verdaccio"
55
+ "engines": {
56
+ "node": ">=22"
44
57
  },
45
58
  "scripts": {
46
59
  "clean": "rimraf ./lib",
47
60
  "test": "vitest run",
48
- "build": "vite build"
61
+ "build": "vite build && tsc --emitDeclarationOnly -p tsconfig.build.json",
62
+ "type-check": "tsc --noEmit -p tsconfig.build.json",
63
+ "watch": "vite build --watch"
49
64
  }
50
65
  }