@verdaccio/loaders 7.0.0-next-7.20 → 7.0.0-next-8.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @verdaccio/loaders
2
2
 
3
+ ## 7.0.0-next-8.21
4
+
5
+ ### Patch Changes
6
+
7
+ - 7c9f3cf: chore: improve startup logging
8
+ - @verdaccio/logger@7.0.0-next-8.21
9
+
3
10
  ## 7.0.0-next-7.20
4
11
 
5
12
  ### Patch Changes
@@ -27,5 +27,5 @@ export type Params = {
27
27
  * @param {*} prefix by default is verdaccio but can be override with config.server.pluginPrefix
28
28
  * @return {Array} list of plugins
29
29
  */
30
- export declare function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(pluginConfigs: any, params: Params, sanityCheck: (plugin: PluginType<T>) => boolean, prefix?: string): Promise<PluginType<T>[]>;
30
+ export declare function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(pluginConfigs: any, params: Params, sanityCheck: (plugin: PluginType<T>) => boolean, prefix?: string, pluginCategory?: string): Promise<PluginType<T>[]>;
31
31
  export declare function executePlugin<T>(plugin: PluginType<T>, pluginConfig: unknown, params: Params): PluginType<T>;
@@ -46,7 +46,7 @@ async function isDirectory(pathFolder) {
46
46
  * @param {*} prefix by default is verdaccio but can be override with config.server.pluginPrefix
47
47
  * @return {Array} list of plugins
48
48
  */
49
- async function asyncLoadPlugin(pluginConfigs = {}, params, sanityCheck, prefix = 'verdaccio') {
49
+ async function asyncLoadPlugin(pluginConfigs = {}, params, sanityCheck, prefix = 'verdaccio', pluginCategory = '') {
50
50
  const pluginsIds = Object.keys(pluginConfigs);
51
51
  const {
52
52
  config
@@ -70,7 +70,7 @@ async function asyncLoadPlugin(pluginConfigs = {}, params, sanityCheck, prefix =
70
70
  _logger.logger.debug({
71
71
  path: pluginsPath
72
72
  }, 'plugins folder defined, loading plugins from @{path} ');
73
- // throws if is nto a directory
73
+ // throws if is not a directory
74
74
  try {
75
75
  await isDirectory(pluginsPath);
76
76
  const pluginDir = pluginsPath;
@@ -87,6 +87,11 @@ async function asyncLoadPlugin(pluginConfigs = {}, params, sanityCheck, prefix =
87
87
  continue;
88
88
  }
89
89
  plugins.push(plugin);
90
+ _logger.logger.info({
91
+ prefix,
92
+ pluginId,
93
+ pluginCategory
94
+ }, 'plugin @{prefix}-@{pluginId} successfully loaded (@{pluginCategory})');
90
95
  continue;
91
96
  }
92
97
  } catch (err) {
@@ -114,6 +119,11 @@ async function asyncLoadPlugin(pluginConfigs = {}, params, sanityCheck, prefix =
114
119
  continue;
115
120
  }
116
121
  plugins.push(plugin);
122
+ _logger.logger.info({
123
+ prefix,
124
+ pluginId,
125
+ pluginCategory
126
+ }, 'plugin @{prefix}-@{pluginId} successfully loaded (@{pluginCategory})');
117
127
  continue;
118
128
  } else {
119
129
  _logger.logger.error({
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-async-loader.js","names":["_debug","_interopRequireDefault","require","_fs","_path","_logger","_utils","e","__esModule","default","debug","buildDebug","lstat","fs","promises","isDirectory","pathFolder","stat","asyncLoadPlugin","pluginConfigs","params","sanityCheck","prefix","pluginsIds","Object","keys","config","plugins","pluginId","pluginsPath","isAbsolute","config_path","configPath","logger","error","resolve","join","dirname","path","pluginDir","externalFilePlugin","plugin","tryLoad","a","b","isValid","executePlugin","content","push","err","warn","message","isScoped","startsWith","includes","pluginName","length","pluginConfig","isES6"],"sources":["../src/plugin-async-loader.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport fs from 'fs';\nimport { dirname, isAbsolute, join, resolve } from 'path';\n\nimport { pluginUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Config, Logger } from '@verdaccio/types';\n\nimport { PluginType, isES6, isValid, tryLoad } from './utils';\n\nconst debug = buildDebug('verdaccio:plugin:loader:async');\n\nconst { lstat } = fs.promises ? fs.promises : require('fs/promises');\n\nasync function isDirectory(pathFolder: string) {\n const stat = await lstat(pathFolder);\n return stat.isDirectory();\n}\n\nexport type Params = { config: Config; logger: Logger };\n\n// type Plugins<T> =\n// | pluginUtils.Auth<T>\n// | pluginUtils.Storage<T>\n// | pluginUtils.ExpressMiddleware<T, unknown, unknown>;\n\n/**\n * The plugin loader find recursively plugins, if one plugin fails is ignored and report the error to the logger.\n *\n * The loader follows the order:\n * - If the at the `config.yaml` file the `plugins: ./plugins` is defined\n * - If is absolute will use the provided path\n * - If is relative, will use the base path of the config file. eg: /root/config.yaml the plugins folder should be\n * hosted at /root/plugins\n * - The next step is find at the node_modules or global based on the `require` native algorithm.\n * - If the package is scoped eg: @scope/foo, try to load the package `@scope/foo`\n * - If the package is not scoped, will use the default prefix: verdaccio-foo.\n * - If a custom prefix is provided, the verdaccio- is replaced by the config.server.pluginPrefix.\n *\n * The `sanityCheck` is the validation for the required methods to load the plugin, if the validation fails the plugin won't be loaded.\n * The `params` is an object that contains the global configuration and the logger.\n *\n * @param {*} pluginConfigs the custom plugin section\n * @param {*} params a set of params to initialize the plugin\n * @param {*} sanityCheck callback that check the shape that should fulfill the plugin\n * @param {*} prefix by default is verdaccio but can be override with config.server.pluginPrefix\n * @return {Array} list of plugins\n */\nexport async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(\n pluginConfigs: any = {},\n params: Params,\n sanityCheck: (plugin: PluginType<T>) => boolean,\n prefix: string = 'verdaccio'\n): Promise<PluginType<T>[]> {\n const pluginsIds = Object.keys(pluginConfigs);\n const { config } = params;\n let plugins: PluginType<T>[] = [];\n for (let pluginId of pluginsIds) {\n debug('plugin %s', pluginId);\n if (typeof config.plugins === 'string') {\n let pluginsPath = config.plugins;\n debug('plugin path %s', pluginsPath);\n if (!isAbsolute(pluginsPath)) {\n if (typeof config.config_path === 'string' && !config.configPath) {\n logger.error(\n 'configPath is missing and the legacy config.config_path is not available for loading plugins'\n );\n }\n\n if (!config.configPath) {\n logger.error('config path property is required for loading plugins');\n continue;\n }\n pluginsPath = resolve(join(dirname(config.configPath), pluginsPath));\n }\n\n logger.debug({ path: pluginsPath }, 'plugins folder defined, loading plugins from @{path} ');\n // throws if is nto a directory\n try {\n await isDirectory(pluginsPath);\n const pluginDir = pluginsPath;\n const externalFilePlugin = resolve(pluginDir, `${prefix}-${pluginId}`);\n let plugin = tryLoad<T>(externalFilePlugin, (a: any, b: any) => {\n logger.error(a, b);\n });\n if (plugin && isValid(plugin)) {\n plugin = executePlugin(plugin, pluginConfigs[pluginId], params);\n if (!sanityCheck(plugin)) {\n logger.error(\n { content: externalFilePlugin },\n \"@{content} doesn't look like a valid plugin\"\n );\n continue;\n }\n plugins.push(plugin);\n continue;\n }\n } catch (err: any) {\n logger.warn(\n { err: err.message, pluginsPath, pluginId },\n '@{err} on loading plugins at @{pluginsPath} for @{pluginId}'\n );\n }\n }\n\n if (typeof pluginId === 'string') {\n const isScoped: boolean = pluginId.startsWith('@') && pluginId.includes('/');\n debug('is scoped plugin %s', isScoped);\n const pluginName = isScoped ? pluginId : `${prefix}-${pluginId}`;\n debug('plugin pkg name %s', pluginName);\n let plugin = tryLoad<T>(pluginName, (a: any, b: any) => {\n logger.error(a, b);\n });\n if (plugin && isValid(plugin)) {\n plugin = executePlugin(plugin, pluginConfigs[pluginId], params);\n if (!sanityCheck(plugin)) {\n logger.error({ content: pluginName }, \"@{content} doesn't look like a valid plugin\");\n continue;\n }\n plugins.push(plugin);\n continue;\n } else {\n logger.error(\n { pluginName },\n 'package not found, try to install @{pluginName} with a package manager'\n );\n continue;\n }\n }\n }\n debug('plugin found %s', plugins.length);\n return plugins;\n}\n\nexport function executePlugin<T>(\n plugin: PluginType<T>,\n pluginConfig: unknown,\n params: Params\n): PluginType<T> {\n if (isES6(plugin)) {\n debug('plugin is ES6');\n // @ts-expect-error no relevant for the code\n // eslint-disable-next-line new-cap\n return new plugin.default(pluginConfig, params) as Plugin;\n } else {\n debug('plugin is commonJS');\n // @ts-expect-error improve this type\n return plugin(pluginConfig, params) as PluginType<T>;\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,GAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAGA,IAAAG,OAAA,GAAAH,OAAA;AAGA,IAAAI,MAAA,GAAAJ,OAAA;AAA8D,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9D,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,+BAA+B,CAAC;AAEzD,MAAM;EAAEC;AAAM,CAAC,GAAGC,WAAE,CAACC,QAAQ,GAAGD,WAAE,CAACC,QAAQ,GAAGZ,OAAO,CAAC,aAAa,CAAC;AAEpE,eAAea,WAAWA,CAACC,UAAkB,EAAE;EAC7C,MAAMC,IAAI,GAAG,MAAML,KAAK,CAACI,UAAU,CAAC;EACpC,OAAOC,IAAI,CAACF,WAAW,CAAC,CAAC;AAC3B;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeG,eAAeA,CACnCC,aAAkB,GAAG,CAAC,CAAC,EACvBC,MAAc,EACdC,WAA+C,EAC/CC,MAAc,GAAG,WAAW,EACF;EAC1B,MAAMC,UAAU,GAAGC,MAAM,CAACC,IAAI,CAACN,aAAa,CAAC;EAC7C,MAAM;IAAEO;EAAO,CAAC,GAAGN,MAAM;EACzB,IAAIO,OAAwB,GAAG,EAAE;EACjC,KAAK,IAAIC,QAAQ,IAAIL,UAAU,EAAE;IAC/Bb,KAAK,CAAC,WAAW,EAAEkB,QAAQ,CAAC;IAC5B,IAAI,OAAOF,MAAM,CAACC,OAAO,KAAK,QAAQ,EAAE;MACtC,IAAIE,WAAW,GAAGH,MAAM,CAACC,OAAO;MAChCjB,KAAK,CAAC,gBAAgB,EAAEmB,WAAW,CAAC;MACpC,IAAI,CAAC,IAAAC,gBAAU,EAACD,WAAW,CAAC,EAAE;QAC5B,IAAI,OAAOH,MAAM,CAACK,WAAW,KAAK,QAAQ,IAAI,CAACL,MAAM,CAACM,UAAU,EAAE;UAChEC,cAAM,CAACC,KAAK,CACV,8FACF,CAAC;QACH;QAEA,IAAI,CAACR,MAAM,CAACM,UAAU,EAAE;UACtBC,cAAM,CAACC,KAAK,CAAC,sDAAsD,CAAC;UACpE;QACF;QACAL,WAAW,GAAG,IAAAM,aAAO,EAAC,IAAAC,UAAI,EAAC,IAAAC,aAAO,EAACX,MAAM,CAACM,UAAU,CAAC,EAAEH,WAAW,CAAC,CAAC;MACtE;MAEAI,cAAM,CAACvB,KAAK,CAAC;QAAE4B,IAAI,EAAET;MAAY,CAAC,EAAE,uDAAuD,CAAC;MAC5F;MACA,IAAI;QACF,MAAMd,WAAW,CAACc,WAAW,CAAC;QAC9B,MAAMU,SAAS,GAAGV,WAAW;QAC7B,MAAMW,kBAAkB,GAAG,IAAAL,aAAO,EAACI,SAAS,EAAE,GAAGjB,MAAM,IAAIM,QAAQ,EAAE,CAAC;QACtE,IAAIa,MAAM,GAAG,IAAAC,cAAO,EAAIF,kBAAkB,EAAE,CAACG,CAAM,EAAEC,CAAM,KAAK;UAC9DX,cAAM,CAACC,KAAK,CAACS,CAAC,EAAEC,CAAC,CAAC;QACpB,CAAC,CAAC;QACF,IAAIH,MAAM,IAAI,IAAAI,cAAO,EAACJ,MAAM,CAAC,EAAE;UAC7BA,MAAM,GAAGK,aAAa,CAACL,MAAM,EAAEtB,aAAa,CAACS,QAAQ,CAAC,EAAER,MAAM,CAAC;UAC/D,IAAI,CAACC,WAAW,CAACoB,MAAM,CAAC,EAAE;YACxBR,cAAM,CAACC,KAAK,CACV;cAAEa,OAAO,EAAEP;YAAmB,CAAC,EAC/B,6CACF,CAAC;YACD;UACF;UACAb,OAAO,CAACqB,IAAI,CAACP,MAAM,CAAC;UACpB;QACF;MACF,CAAC,CAAC,OAAOQ,GAAQ,EAAE;QACjBhB,cAAM,CAACiB,IAAI,CACT;UAAED,GAAG,EAAEA,GAAG,CAACE,OAAO;UAAEtB,WAAW;UAAED;QAAS,CAAC,EAC3C,6DACF,CAAC;MACH;IACF;IAEA,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;MAChC,MAAMwB,QAAiB,GAAGxB,QAAQ,CAACyB,UAAU,CAAC,GAAG,CAAC,IAAIzB,QAAQ,CAAC0B,QAAQ,CAAC,GAAG,CAAC;MAC5E5C,KAAK,CAAC,qBAAqB,EAAE0C,QAAQ,CAAC;MACtC,MAAMG,UAAU,GAAGH,QAAQ,GAAGxB,QAAQ,GAAG,GAAGN,MAAM,IAAIM,QAAQ,EAAE;MAChElB,KAAK,CAAC,oBAAoB,EAAE6C,UAAU,CAAC;MACvC,IAAId,MAAM,GAAG,IAAAC,cAAO,EAAIa,UAAU,EAAE,CAACZ,CAAM,EAAEC,CAAM,KAAK;QACtDX,cAAM,CAACC,KAAK,CAACS,CAAC,EAAEC,CAAC,CAAC;MACpB,CAAC,CAAC;MACF,IAAIH,MAAM,IAAI,IAAAI,cAAO,EAACJ,MAAM,CAAC,EAAE;QAC7BA,MAAM,GAAGK,aAAa,CAACL,MAAM,EAAEtB,aAAa,CAACS,QAAQ,CAAC,EAAER,MAAM,CAAC;QAC/D,IAAI,CAACC,WAAW,CAACoB,MAAM,CAAC,EAAE;UACxBR,cAAM,CAACC,KAAK,CAAC;YAAEa,OAAO,EAAEQ;UAAW,CAAC,EAAE,6CAA6C,CAAC;UACpF;QACF;QACA5B,OAAO,CAACqB,IAAI,CAACP,MAAM,CAAC;QACpB;MACF,CAAC,MAAM;QACLR,cAAM,CAACC,KAAK,CACV;UAAEqB;QAAW,CAAC,EACd,wEACF,CAAC;QACD;MACF;IACF;EACF;EACA7C,KAAK,CAAC,iBAAiB,EAAEiB,OAAO,CAAC6B,MAAM,CAAC;EACxC,OAAO7B,OAAO;AAChB;AAEO,SAASmB,aAAaA,CAC3BL,MAAqB,EACrBgB,YAAqB,EACrBrC,MAAc,EACC;EACf,IAAI,IAAAsC,YAAK,EAACjB,MAAM,CAAC,EAAE;IACjB/B,KAAK,CAAC,eAAe,CAAC;IACtB;IACA;IACA,OAAO,IAAI+B,MAAM,CAAChC,OAAO,CAACgD,YAAY,EAAErC,MAAM,CAAC;EACjD,CAAC,MAAM;IACLV,KAAK,CAAC,oBAAoB,CAAC;IAC3B;IACA,OAAO+B,MAAM,CAACgB,YAAY,EAAErC,MAAM,CAAC;EACrC;AACF","ignoreList":[]}
1
+ {"version":3,"file":"plugin-async-loader.js","names":["_debug","_interopRequireDefault","require","_fs","_path","_logger","_utils","e","__esModule","default","debug","buildDebug","lstat","fs","promises","isDirectory","pathFolder","stat","asyncLoadPlugin","pluginConfigs","params","sanityCheck","prefix","pluginCategory","pluginsIds","Object","keys","config","plugins","pluginId","pluginsPath","isAbsolute","config_path","configPath","logger","error","resolve","join","dirname","path","pluginDir","externalFilePlugin","plugin","tryLoad","a","b","isValid","executePlugin","content","push","info","err","warn","message","isScoped","startsWith","includes","pluginName","length","pluginConfig","isES6"],"sources":["../src/plugin-async-loader.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport fs from 'fs';\nimport { dirname, isAbsolute, join, resolve } from 'path';\n\nimport { pluginUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { Config, Logger } from '@verdaccio/types';\n\nimport { PluginType, isES6, isValid, tryLoad } from './utils';\n\nconst debug = buildDebug('verdaccio:plugin:loader:async');\n\nconst { lstat } = fs.promises ? fs.promises : require('fs/promises');\n\nasync function isDirectory(pathFolder: string) {\n const stat = await lstat(pathFolder);\n return stat.isDirectory();\n}\n\nexport type Params = { config: Config; logger: Logger };\n\n// type Plugins<T> =\n// | pluginUtils.Auth<T>\n// | pluginUtils.Storage<T>\n// | pluginUtils.ExpressMiddleware<T, unknown, unknown>;\n\n/**\n * The plugin loader find recursively plugins, if one plugin fails is ignored and report the error to the logger.\n *\n * The loader follows the order:\n * - If the at the `config.yaml` file the `plugins: ./plugins` is defined\n * - If is absolute will use the provided path\n * - If is relative, will use the base path of the config file. eg: /root/config.yaml the plugins folder should be\n * hosted at /root/plugins\n * - The next step is find at the node_modules or global based on the `require` native algorithm.\n * - If the package is scoped eg: @scope/foo, try to load the package `@scope/foo`\n * - If the package is not scoped, will use the default prefix: verdaccio-foo.\n * - If a custom prefix is provided, the verdaccio- is replaced by the config.server.pluginPrefix.\n *\n * The `sanityCheck` is the validation for the required methods to load the plugin, if the validation fails the plugin won't be loaded.\n * The `params` is an object that contains the global configuration and the logger.\n *\n * @param {*} pluginConfigs the custom plugin section\n * @param {*} params a set of params to initialize the plugin\n * @param {*} sanityCheck callback that check the shape that should fulfill the plugin\n * @param {*} prefix by default is verdaccio but can be override with config.server.pluginPrefix\n * @return {Array} list of plugins\n */\nexport async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(\n pluginConfigs: any = {},\n params: Params,\n sanityCheck: (plugin: PluginType<T>) => boolean,\n prefix: string = 'verdaccio',\n pluginCategory: string = ''\n): Promise<PluginType<T>[]> {\n const pluginsIds = Object.keys(pluginConfigs);\n const { config } = params;\n let plugins: PluginType<T>[] = [];\n for (let pluginId of pluginsIds) {\n debug('plugin %s', pluginId);\n if (typeof config.plugins === 'string') {\n let pluginsPath = config.plugins;\n debug('plugin path %s', pluginsPath);\n if (!isAbsolute(pluginsPath)) {\n if (typeof config.config_path === 'string' && !config.configPath) {\n logger.error(\n 'configPath is missing and the legacy config.config_path is not available for loading plugins'\n );\n }\n\n if (!config.configPath) {\n logger.error('config path property is required for loading plugins');\n continue;\n }\n pluginsPath = resolve(join(dirname(config.configPath), pluginsPath));\n }\n\n logger.debug({ path: pluginsPath }, 'plugins folder defined, loading plugins from @{path} ');\n // throws if is not a directory\n try {\n await isDirectory(pluginsPath);\n const pluginDir = pluginsPath;\n const externalFilePlugin = resolve(pluginDir, `${prefix}-${pluginId}`);\n let plugin = tryLoad<T>(externalFilePlugin, (a: any, b: any) => {\n logger.error(a, b);\n });\n if (plugin && isValid(plugin)) {\n plugin = executePlugin(plugin, pluginConfigs[pluginId], params);\n if (!sanityCheck(plugin)) {\n logger.error(\n { content: externalFilePlugin },\n \"@{content} doesn't look like a valid plugin\"\n );\n continue;\n }\n plugins.push(plugin);\n logger.info(\n { prefix, pluginId, pluginCategory },\n 'plugin @{prefix}-@{pluginId} successfully loaded (@{pluginCategory})'\n );\n continue;\n }\n } catch (err: any) {\n logger.warn(\n { err: err.message, pluginsPath, pluginId },\n '@{err} on loading plugins at @{pluginsPath} for @{pluginId}'\n );\n }\n }\n\n if (typeof pluginId === 'string') {\n const isScoped: boolean = pluginId.startsWith('@') && pluginId.includes('/');\n debug('is scoped plugin %s', isScoped);\n const pluginName = isScoped ? pluginId : `${prefix}-${pluginId}`;\n debug('plugin pkg name %s', pluginName);\n let plugin = tryLoad<T>(pluginName, (a: any, b: any) => {\n logger.error(a, b);\n });\n if (plugin && isValid(plugin)) {\n plugin = executePlugin(plugin, pluginConfigs[pluginId], params);\n if (!sanityCheck(plugin)) {\n logger.error({ content: pluginName }, \"@{content} doesn't look like a valid plugin\");\n continue;\n }\n plugins.push(plugin);\n logger.info(\n { prefix, pluginId, pluginCategory },\n 'plugin @{prefix}-@{pluginId} successfully loaded (@{pluginCategory})'\n );\n continue;\n } else {\n logger.error(\n { pluginName },\n 'package not found, try to install @{pluginName} with a package manager'\n );\n continue;\n }\n }\n }\n debug('plugin found %s', plugins.length);\n return plugins;\n}\n\nexport function executePlugin<T>(\n plugin: PluginType<T>,\n pluginConfig: unknown,\n params: Params\n): PluginType<T> {\n if (isES6(plugin)) {\n debug('plugin is ES6');\n // @ts-expect-error no relevant for the code\n // eslint-disable-next-line new-cap\n return new plugin.default(pluginConfig, params) as Plugin;\n } else {\n debug('plugin is commonJS');\n // @ts-expect-error improve this type\n return plugin(pluginConfig, params) as PluginType<T>;\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/loaders",
3
- "version": "7.0.0-next-7.20",
3
+ "version": "7.0.0-next-8.21",
4
4
  "description": "loaders logic",
5
5
  "main": "./build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -13,17 +13,17 @@
13
13
  "url": "https://github.com/verdaccio/verdaccio"
14
14
  },
15
15
  "dependencies": {
16
- "@verdaccio/logger": "7.0.0-next-7.20",
17
- "debug": "4.3.4",
16
+ "@verdaccio/logger": "7.0.0-next-8.21",
17
+ "debug": "4.3.6",
18
18
  "lodash": "4.17.21"
19
19
  },
20
20
  "devDependencies": {
21
- "@verdaccio/core": "7.0.0-next-7.20",
22
- "@verdaccio/config": "7.0.0-next-7.20",
21
+ "@verdaccio/core": "7.0.0-next-8.21",
22
+ "@verdaccio/config": "7.0.0-next-8.21",
23
23
  "@verdaccio/types": "12.0.0-next-7.5",
24
24
  "@verdaccio-scope/verdaccio-auth-foo": "0.0.2",
25
25
  "customprefix-auth": "2.0.0-next.0",
26
- "verdaccio-auth-memory": "12.0.0-next-7.20"
26
+ "verdaccio-auth-memory": "12.0.0-next-8.21"
27
27
  },
28
28
  "homepage": "https://verdaccio.org",
29
29
  "keywords": [
@@ -47,7 +47,7 @@
47
47
  },
48
48
  "scripts": {
49
49
  "clean": "rimraf ./build",
50
- "test": "jest",
50
+ "test": "vitest run",
51
51
  "type-check": "tsc --noEmit -p tsconfig.build.json",
52
52
  "build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
53
53
  "build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
@@ -50,7 +50,8 @@ export async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(
50
50
  pluginConfigs: any = {},
51
51
  params: Params,
52
52
  sanityCheck: (plugin: PluginType<T>) => boolean,
53
- prefix: string = 'verdaccio'
53
+ prefix: string = 'verdaccio',
54
+ pluginCategory: string = ''
54
55
  ): Promise<PluginType<T>[]> {
55
56
  const pluginsIds = Object.keys(pluginConfigs);
56
57
  const { config } = params;
@@ -75,7 +76,7 @@ export async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(
75
76
  }
76
77
 
77
78
  logger.debug({ path: pluginsPath }, 'plugins folder defined, loading plugins from @{path} ');
78
- // throws if is nto a directory
79
+ // throws if is not a directory
79
80
  try {
80
81
  await isDirectory(pluginsPath);
81
82
  const pluginDir = pluginsPath;
@@ -93,6 +94,10 @@ export async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(
93
94
  continue;
94
95
  }
95
96
  plugins.push(plugin);
97
+ logger.info(
98
+ { prefix, pluginId, pluginCategory },
99
+ 'plugin @{prefix}-@{pluginId} successfully loaded (@{pluginCategory})'
100
+ );
96
101
  continue;
97
102
  }
98
103
  } catch (err: any) {
@@ -118,6 +123,10 @@ export async function asyncLoadPlugin<T extends pluginUtils.Plugin<T>>(
118
123
  continue;
119
124
  }
120
125
  plugins.push(plugin);
126
+ logger.info(
127
+ { prefix, pluginId, pluginCategory },
128
+ 'plugin @{prefix}-@{pluginId} successfully loaded (@{pluginCategory})'
129
+ );
121
130
  continue;
122
131
  } else {
123
132
  logger.error(
@@ -1,4 +1,5 @@
1
1
  import path from 'path';
2
+ import { describe, expect, test } from 'vitest';
2
3
 
3
4
  import { Config, parseConfigFile } from '@verdaccio/config';
4
5
  import { pluginUtils } from '@verdaccio/core';
package/jest.config.js DELETED
@@ -1,10 +0,0 @@
1
- const config = require('../../jest/config');
2
-
3
- module.exports = Object.assign({}, config, {
4
- coverageThreshold: {
5
- global: {
6
- // FIXME: increase to 90
7
- lines: 68,
8
- },
9
- },
10
- });