oc 0.49.7 → 0.49.8

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 (163) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +2 -15
  3. package/dist/cli/domain/clean.d.ts +2 -2
  4. package/dist/cli/domain/clean.js +10 -13
  5. package/dist/cli/domain/get-components-by-dir.d.ts +1 -1
  6. package/dist/cli/domain/get-components-by-dir.js +8 -15
  7. package/dist/cli/domain/get-mocked-plugins.js +8 -6
  8. package/dist/cli/domain/handle-dependencies/ensure-compiler-is-declared-as-devDependency.d.ts +1 -1
  9. package/dist/cli/domain/handle-dependencies/ensure-compiler-is-declared-as-devDependency.js +4 -5
  10. package/dist/cli/domain/handle-dependencies/get-compiler.d.ts +1 -1
  11. package/dist/cli/domain/handle-dependencies/get-compiler.js +3 -3
  12. package/dist/cli/domain/handle-dependencies/index.d.ts +4 -3
  13. package/dist/cli/domain/handle-dependencies/index.js +40 -34
  14. package/dist/cli/domain/handle-dependencies/install-compiler.d.ts +1 -1
  15. package/dist/cli/domain/handle-dependencies/install-compiler.js +14 -7
  16. package/dist/cli/domain/handle-dependencies/install-missing-dependencies.d.ts +1 -1
  17. package/dist/cli/domain/handle-dependencies/install-missing-dependencies.js +13 -9
  18. package/dist/cli/domain/handle-dependencies/link-missing-dependencies.d.ts +1 -1
  19. package/dist/cli/domain/handle-dependencies/link-missing-dependencies.js +4 -8
  20. package/dist/cli/domain/init-template/index.d.ts +2 -2
  21. package/dist/cli/domain/init-template/index.js +6 -8
  22. package/dist/cli/domain/init-template/install-template.d.ts +2 -2
  23. package/dist/cli/domain/init-template/install-template.js +10 -9
  24. package/dist/cli/domain/init-template/scaffold.d.ts +2 -2
  25. package/dist/cli/domain/init-template/scaffold.js +7 -7
  26. package/dist/cli/domain/local.js +11 -10
  27. package/dist/cli/domain/mock.d.ts +1 -1
  28. package/dist/cli/domain/mock.js +21 -21
  29. package/dist/cli/domain/package-components.d.ts +1 -1
  30. package/dist/cli/domain/package-components.js +14 -17
  31. package/dist/cli/domain/registry.js +68 -81
  32. package/dist/cli/domain/watch.js +1 -1
  33. package/dist/cli/facade/clean.d.ts +10 -4
  34. package/dist/cli/facade/clean.js +38 -28
  35. package/dist/cli/facade/dev.d.ts +108 -15
  36. package/dist/cli/facade/dev.js +85 -99
  37. package/dist/cli/facade/init.d.ts +12 -5
  38. package/dist/cli/facade/init.js +22 -20
  39. package/dist/cli/facade/mock.d.ts +12 -5
  40. package/dist/cli/facade/mock.js +5 -6
  41. package/dist/cli/facade/package.d.ts +12 -5
  42. package/dist/cli/facade/package.js +30 -32
  43. package/dist/cli/facade/preview.d.ts +8 -3
  44. package/dist/cli/facade/preview.js +12 -10
  45. package/dist/cli/facade/publish.d.ts +16 -7
  46. package/dist/cli/facade/publish.js +94 -114
  47. package/dist/cli/facade/registry-add.d.ts +8 -3
  48. package/dist/cli/facade/registry-add.js +10 -9
  49. package/dist/cli/facade/registry-ls.d.ts +4 -1
  50. package/dist/cli/facade/registry-ls.js +19 -17
  51. package/dist/cli/facade/registry-remove.d.ts +8 -3
  52. package/dist/cli/facade/registry-remove.js +10 -9
  53. package/dist/cli/facade/registry.d.ts +4 -1
  54. package/dist/cli/facade/registry.js +6 -3
  55. package/dist/cli/index.js +3 -5
  56. package/dist/cli/programmatic-api.d.ts +1 -1
  57. package/dist/components/oc-client/_package/package.json +1 -1
  58. package/dist/components/oc-client/package.json +1 -1
  59. package/dist/registry/app-start.d.ts +2 -2
  60. package/dist/registry/app-start.js +20 -20
  61. package/dist/registry/domain/components-cache/components-list.d.ts +7 -6
  62. package/dist/registry/domain/components-cache/components-list.js +31 -45
  63. package/dist/registry/domain/components-cache/index.d.ts +6 -5
  64. package/dist/registry/domain/components-cache/index.js +47 -50
  65. package/dist/registry/domain/components-details.d.ts +5 -4
  66. package/dist/registry/domain/components-details.js +27 -38
  67. package/dist/registry/domain/extract-package.d.ts +2 -2
  68. package/dist/registry/domain/extract-package.js +9 -12
  69. package/dist/registry/domain/get-package-json-from-temp-dir.d.ts +1 -1
  70. package/dist/registry/domain/get-package-json-from-temp-dir.js +2 -2
  71. package/dist/registry/domain/nested-renderer.d.ts +7 -6
  72. package/dist/registry/domain/nested-renderer.js +36 -72
  73. package/dist/registry/domain/options-sanitiser.js +5 -3
  74. package/dist/registry/domain/plugins-initialiser.d.ts +3 -1
  75. package/dist/registry/domain/plugins-initialiser.js +29 -33
  76. package/dist/registry/domain/repository.js +78 -100
  77. package/dist/registry/domain/require-wrapper.js +1 -2
  78. package/dist/registry/domain/storage-adapter.d.ts +10 -0
  79. package/dist/registry/domain/storage-adapter.js +55 -0
  80. package/dist/registry/index.d.ts +2 -2
  81. package/dist/registry/index.js +15 -28
  82. package/dist/registry/middleware/index.d.ts +6 -2
  83. package/dist/registry/middleware/index.js +5 -1
  84. package/dist/registry/router.d.ts +2 -2
  85. package/dist/registry/router.js +0 -2
  86. package/dist/registry/routes/component-info.js +3 -2
  87. package/dist/registry/routes/component-preview.js +2 -1
  88. package/dist/registry/routes/components.js +1 -1
  89. package/dist/registry/routes/helpers/get-component-fallback.d.ts +2 -7
  90. package/dist/registry/routes/helpers/get-component.d.ts +5 -5
  91. package/dist/registry/routes/helpers/get-component.js +6 -5
  92. package/dist/registry/routes/helpers/is-url-discoverable.d.ts +2 -2
  93. package/dist/registry/routes/helpers/is-url-discoverable.js +15 -9
  94. package/dist/registry/routes/index.js +4 -3
  95. package/dist/registry/routes/publish.d.ts +1 -1
  96. package/dist/registry/routes/publish.js +32 -31
  97. package/dist/resources/settings.js +1 -1
  98. package/dist/types.d.ts +35 -43
  99. package/dist/utils/npm-utils.d.ts +6 -8
  100. package/dist/utils/npm-utils.js +20 -9
  101. package/dist/utils/put.d.ts +2 -1
  102. package/dist/utils/put.js +10 -29
  103. package/logintervals.md +1 -1
  104. package/package.json +6 -1
  105. package/src/cli/domain/clean.ts +10 -20
  106. package/src/cli/domain/get-components-by-dir.ts +12 -26
  107. package/src/cli/domain/get-mocked-plugins.ts +32 -26
  108. package/src/cli/domain/handle-dependencies/ensure-compiler-is-declared-as-devDependency.ts +8 -12
  109. package/src/cli/domain/handle-dependencies/get-compiler.ts +8 -11
  110. package/src/cli/domain/handle-dependencies/index.ts +55 -109
  111. package/src/cli/domain/handle-dependencies/install-compiler.ts +22 -15
  112. package/src/cli/domain/handle-dependencies/install-missing-dependencies.ts +19 -13
  113. package/src/cli/domain/handle-dependencies/link-missing-dependencies.ts +8 -16
  114. package/src/cli/domain/init-template/index.ts +13 -20
  115. package/src/cli/domain/init-template/install-template.ts +11 -12
  116. package/src/cli/domain/init-template/scaffold.ts +9 -12
  117. package/src/cli/domain/local.ts +19 -22
  118. package/src/cli/domain/mock.ts +32 -36
  119. package/src/cli/domain/package-components.ts +14 -25
  120. package/src/cli/domain/registry.ts +80 -116
  121. package/src/cli/domain/watch.ts +1 -1
  122. package/src/cli/facade/clean.ts +37 -37
  123. package/src/cli/facade/dev.ts +159 -182
  124. package/src/cli/facade/init.ts +36 -38
  125. package/src/cli/facade/mock.ts +11 -10
  126. package/src/cli/facade/package.ts +44 -49
  127. package/src/cli/facade/preview.ts +20 -18
  128. package/src/cli/facade/publish.ts +134 -172
  129. package/src/cli/facade/registry-add.ts +16 -15
  130. package/src/cli/facade/registry-ls.ts +27 -22
  131. package/src/cli/facade/registry-remove.ts +16 -15
  132. package/src/cli/facade/registry.ts +7 -5
  133. package/src/cli/index.ts +3 -5
  134. package/src/components/oc-client/_package/package.json +1 -1
  135. package/src/components/oc-client/package.json +1 -1
  136. package/src/globals.d.ts +38 -0
  137. package/src/registry/app-start.ts +27 -31
  138. package/src/registry/domain/components-cache/components-list.ts +45 -67
  139. package/src/registry/domain/components-cache/index.ts +55 -60
  140. package/src/registry/domain/components-details.ts +49 -75
  141. package/src/registry/domain/extract-package.ts +19 -27
  142. package/src/registry/domain/get-package-json-from-temp-dir.ts +3 -4
  143. package/src/registry/domain/nested-renderer.ts +64 -122
  144. package/src/registry/domain/options-sanitiser.ts +6 -3
  145. package/src/registry/domain/plugins-initialiser.ts +45 -49
  146. package/src/registry/domain/repository.ts +129 -235
  147. package/src/registry/domain/require-wrapper.ts +1 -2
  148. package/src/registry/domain/storage-adapter.ts +85 -0
  149. package/src/registry/index.ts +48 -79
  150. package/src/registry/middleware/index.ts +10 -2
  151. package/src/registry/router.ts +2 -10
  152. package/src/registry/routes/component-info.ts +4 -3
  153. package/src/registry/routes/component-preview.ts +3 -2
  154. package/src/registry/routes/components.ts +1 -1
  155. package/src/registry/routes/helpers/get-component-fallback.ts +3 -9
  156. package/src/registry/routes/helpers/get-component.ts +11 -9
  157. package/src/registry/routes/helpers/is-url-discoverable.ts +14 -15
  158. package/src/registry/routes/index.ts +18 -13
  159. package/src/registry/routes/publish.ts +31 -34
  160. package/src/resources/settings.ts +1 -1
  161. package/src/types.ts +63 -136
  162. package/src/utils/npm-utils.ts +38 -37
  163. package/src/utils/put.ts +15 -37
@@ -4,21 +4,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.init = void 0;
7
- const async_1 = __importDefault(require("async"));
7
+ const p_limit_1 = __importDefault(require("p-limit"));
8
8
  const lodash_1 = __importDefault(require("lodash"));
9
9
  const dependency_graph_1 = require("dependency-graph");
10
+ const util_1 = require("util");
10
11
  const resources_1 = __importDefault(require("../../resources"));
11
12
  function validatePlugins(plugins) {
12
- let c = 0;
13
- plugins.forEach(plugin => {
14
- c++;
13
+ for (let idx = 0; idx < plugins.length; idx++) {
14
+ const plugin = plugins[idx];
15
15
  if (!lodash_1.default.isObject(plugin.register) ||
16
16
  typeof plugin.register.register !== 'function' ||
17
17
  typeof plugin.register.execute !== 'function' ||
18
18
  typeof plugin.name !== 'string') {
19
- throw new Error(resources_1.default.errors.registry.PLUGIN_NOT_VALID(plugin.name || String(c)));
19
+ throw new Error(resources_1.default.errors.registry.PLUGIN_NOT_VALID(plugin.name || String(idx + 1)));
20
20
  }
21
- });
21
+ }
22
22
  }
23
23
  function checkDependencies(plugins) {
24
24
  const graph = new dependency_graph_1.DepGraph();
@@ -39,19 +39,10 @@ function checkDependencies(plugins) {
39
39
  return graph.overallOrder();
40
40
  }
41
41
  let deferredLoads = [];
42
- const defer = function (plugin, cb) {
43
- deferredLoads.push(plugin);
44
- return cb();
45
- };
46
- function init(pluginsToRegister, callback) {
42
+ async function init(pluginsToRegister) {
47
43
  const registered = {};
48
- try {
49
- validatePlugins(pluginsToRegister);
50
- checkDependencies(pluginsToRegister);
51
- }
52
- catch (err) {
53
- return callback(err, undefined);
54
- }
44
+ validatePlugins(pluginsToRegister);
45
+ checkDependencies(pluginsToRegister);
55
46
  const dependenciesRegistered = (dependencies) => {
56
47
  if (dependencies.length === 0) {
57
48
  return true;
@@ -64,36 +55,41 @@ function init(pluginsToRegister, callback) {
64
55
  });
65
56
  return present;
66
57
  };
67
- const loadPlugin = (plugin, cb) => {
68
- const done = lodash_1.default.once(cb);
58
+ const loadPlugin = async (plugin) => {
69
59
  if (registered[plugin.name]) {
70
- return done();
60
+ return;
71
61
  }
72
62
  if (!plugin.register.dependencies) {
73
63
  plugin.register.dependencies = [];
74
64
  }
75
65
  if (!dependenciesRegistered(plugin.register.dependencies)) {
76
- return defer(plugin, done);
66
+ deferredLoads.push(plugin);
67
+ return;
77
68
  }
78
69
  const dependencies = lodash_1.default.pick(registered, plugin.register.dependencies);
79
- plugin.register.register(plugin.options || {}, dependencies, (err) => {
80
- const pluginCallback = plugin.callback || lodash_1.default.noop;
70
+ const register = (0, util_1.promisify)(plugin.register.register);
71
+ const pluginCallback = plugin.callback || lodash_1.default.noop;
72
+ await register(plugin.options || {}, dependencies).catch(err => {
81
73
  pluginCallback(err);
82
- // Overriding toString so implementation details of plugins do not
83
- // leak to OC consumers
84
- plugin.register.execute.toString = () => plugin.description || '';
85
- registered[plugin.name] = plugin.register.execute;
86
- done(err);
74
+ throw err;
87
75
  });
76
+ // Overriding toString so implementation details of plugins do not
77
+ // leak to OC consumers
78
+ plugin.register.execute.toString = () => plugin.description || '';
79
+ registered[plugin.name] = plugin.register.execute;
80
+ pluginCallback();
88
81
  };
89
- const terminator = function (err) {
82
+ const terminator = async () => {
90
83
  if (deferredLoads.length > 0) {
91
84
  const deferredPlugins = lodash_1.default.clone(deferredLoads);
92
85
  deferredLoads = [];
93
- return async_1.default.mapSeries(deferredPlugins, loadPlugin, terminator);
86
+ await Promise.all(deferredPlugins.map(plugin => onSeries(() => loadPlugin(plugin))));
87
+ return terminator();
94
88
  }
95
- callback(err, registered);
89
+ return registered;
96
90
  };
97
- async_1.default.mapSeries(pluginsToRegister, loadPlugin, terminator);
91
+ const onSeries = (0, p_limit_1.default)(1);
92
+ await Promise.all(pluginsToRegister.map(plugin => onSeries(() => loadPlugin(plugin))));
93
+ return terminator();
98
94
  }
99
95
  exports.init = init;
@@ -25,18 +25,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
25
25
  const fs_extra_1 = __importDefault(require("fs-extra"));
26
26
  const oc_get_unix_utc_timestamp_1 = __importDefault(require("oc-get-unix-utc-timestamp"));
27
27
  const path_1 = __importDefault(require("path"));
28
- const lodash_1 = __importDefault(require("lodash"));
29
28
  const components_cache_1 = __importDefault(require("./components-cache"));
30
29
  const components_details_1 = __importDefault(require("./components-details"));
31
30
  const register_templates_1 = __importDefault(require("./register-templates"));
32
31
  const settings_1 = __importDefault(require("../../resources/settings"));
33
32
  const resources_1 = __importDefault(require("../../resources"));
34
33
  const validator = __importStar(require("./validators"));
34
+ const storage_adapter_1 = __importDefault(require("./storage-adapter"));
35
35
  const versionHandler = __importStar(require("./version-handler"));
36
36
  const error_to_string_1 = __importDefault(require("../../utils/error-to-string"));
37
37
  const packageInfo = fs_extra_1.default.readJsonSync(path_1.default.join(__dirname, '..', '..', '..', 'package.json'));
38
38
  function repository(conf) {
39
- const cdn = !conf.local && conf.storage.adapter(conf.storage.options);
39
+ const cdn = !conf.local &&
40
+ (0, storage_adapter_1.default)(conf.storage.adapter(conf.storage.options));
40
41
  const options = !conf.local ? conf.storage.options : null;
41
42
  const repositorySource = conf.local
42
43
  ? 'local repository'
@@ -70,18 +71,21 @@ function repository(conf) {
70
71
  validComponents.push('oc-client');
71
72
  return validComponents;
72
73
  },
73
- getComponentVersions(componentName, callback) {
74
+ getComponentVersions(componentName) {
74
75
  if (componentName === 'oc-client') {
75
- return callback(null, [
76
- fs_extra_1.default.readJsonSync(path_1.default.join(__dirname, '../../../package.json')).version
76
+ return Promise.all([
77
+ fs_extra_1.default
78
+ .readJson(path_1.default.join(__dirname, '../../../package.json'))
79
+ .then(x => x.version)
77
80
  ]);
78
81
  }
79
- if (!lodash_1.default.includes(local.getComponents(), componentName)) {
80
- return callback(resources_1.default.errors.registry.COMPONENT_NOT_FOUND(componentName, repositorySource), undefined);
82
+ if (!local.getComponents().includes(componentName)) {
83
+ return Promise.reject(resources_1.default.errors.registry.COMPONENT_NOT_FOUND(componentName, repositorySource));
81
84
  }
82
- callback(null, [
83
- fs_extra_1.default.readJsonSync(path_1.default.join(conf.path, `${componentName}/package.json`))
84
- .version
85
+ return Promise.all([
86
+ fs_extra_1.default
87
+ .readJson(path_1.default.join(conf.path, `${componentName}/package.json`))
88
+ .then(x => x.version)
85
89
  ]);
86
90
  },
87
91
  getDataProvider(componentName) {
@@ -96,39 +100,29 @@ function repository(conf) {
96
100
  }
97
101
  };
98
102
  const repository = {
99
- getCompiledView(componentName, componentVersion, callback) {
103
+ getCompiledView(componentName, componentVersion) {
100
104
  if (conf.local) {
101
- return callback(null, local.getCompiledView(componentName));
105
+ return Promise.resolve(local.getCompiledView(componentName));
102
106
  }
103
- cdn.getFile(getFilePath(componentName, componentVersion, 'template.js'), callback);
107
+ return cdn.getFile(getFilePath(componentName, componentVersion, 'template.js'));
104
108
  },
105
- getComponent(componentName, componentVersionOrCallback, callbackMaybe) {
106
- const componentVersion = typeof componentVersionOrCallback === 'function'
107
- ? undefined
108
- : componentVersionOrCallback;
109
- const callback = typeof componentVersionOrCallback === 'function'
110
- ? componentVersionOrCallback
111
- : callbackMaybe;
112
- repository.getComponentVersions(componentName, (err, allVersions) => {
113
- if (err) {
114
- return callback(err, undefined);
115
- }
116
- if (allVersions.length === 0) {
117
- return callback(resources_1.default.errors.registry.COMPONENT_NOT_FOUND(componentName, repositorySource), undefined);
118
- }
119
- const version = versionHandler.getAvailableVersion(componentVersion, allVersions);
120
- if (!version) {
121
- return callback(resources_1.default.errors.registry.COMPONENT_VERSION_NOT_FOUND(componentName, componentVersion || '', repositorySource), undefined);
122
- }
123
- repository.getComponentInfo(componentName, version, (err, component) => {
124
- if (err) {
125
- return callback(`component not available: ${(0, error_to_string_1.default)(err)}`, null);
126
- }
127
- callback(null, Object.assign(component, { allVersions }));
128
- });
109
+ async getComponent(componentName, componentVersion) {
110
+ const allVersions = await repository.getComponentVersions(componentName);
111
+ if (allVersions.length === 0) {
112
+ throw resources_1.default.errors.registry.COMPONENT_NOT_FOUND(componentName, repositorySource);
113
+ }
114
+ const version = versionHandler.getAvailableVersion(componentVersion, allVersions);
115
+ if (!version) {
116
+ throw resources_1.default.errors.registry.COMPONENT_VERSION_NOT_FOUND(componentName, componentVersion || '', repositorySource);
117
+ }
118
+ const component = await repository
119
+ .getComponentInfo(componentName, version)
120
+ .catch(err => {
121
+ throw `component not available: ${(0, error_to_string_1.default)(err)}`;
129
122
  });
123
+ return Object.assign(component, { allVersions });
130
124
  },
131
- getComponentInfo(componentName, componentVersion, callback) {
125
+ getComponentInfo(componentName, componentVersion) {
132
126
  if (conf.local) {
133
127
  let componentInfo;
134
128
  if (componentName === 'oc-client') {
@@ -138,13 +132,14 @@ function repository(conf) {
138
132
  componentInfo = fs_extra_1.default.readJsonSync(path_1.default.join(conf.path, `${componentName}/_package/package.json`));
139
133
  }
140
134
  if (componentInfo.version === componentVersion) {
141
- return callback(null, componentInfo);
135
+ return Promise.resolve(componentInfo);
142
136
  }
143
137
  else {
144
- return callback('version not available', undefined);
138
+ // eslint-disable-next-line prefer-promise-reject-errors
139
+ return Promise.reject('version not available');
145
140
  }
146
141
  }
147
- cdn.getJson(getFilePath(componentName, componentVersion, 'package.json'), callback);
142
+ return cdn.getJson(getFilePath(componentName, componentVersion, 'package.json'), false);
148
143
  },
149
144
  getComponentPath(componentName, componentVersion) {
150
145
  const prefix = conf.local
@@ -152,106 +147,89 @@ function repository(conf) {
152
147
  : `${options['path']}${options.componentsDir}/`;
153
148
  return `${prefix}${componentName}/${componentVersion}/`;
154
149
  },
155
- getComponents(callback) {
150
+ async getComponents() {
156
151
  if (conf.local) {
157
- return callback(null, local.getComponents());
152
+ return local.getComponents();
158
153
  }
159
- componentsCache.get((err, res) => callback(err, res ? Object.keys(res.components) : null));
154
+ const { components } = await componentsCache.get();
155
+ return Object.keys(components);
160
156
  },
161
- getComponentsDetails(callback) {
157
+ getComponentsDetails() {
162
158
  if (conf.local) {
163
- return callback();
159
+ // when in local this won't get called
160
+ return Promise.resolve(null);
164
161
  }
165
- componentsDetails.get(callback);
162
+ return componentsDetails.get();
166
163
  },
167
- getComponentVersions(componentName, callback) {
164
+ async getComponentVersions(componentName) {
168
165
  if (conf.local) {
169
- return local.getComponentVersions(componentName, callback);
166
+ return local.getComponentVersions(componentName);
170
167
  }
171
- componentsCache.get((err, res) => {
172
- callback(err, !!res && !!lodash_1.default.has(res.components, componentName)
173
- ? res.components[componentName]
174
- : []);
175
- });
168
+ const res = await componentsCache.get();
169
+ return res.components[componentName] ? res.components[componentName] : [];
176
170
  },
177
- getDataProvider(componentName, componentVersion, callback) {
171
+ async getDataProvider(componentName, componentVersion) {
178
172
  if (conf.local) {
179
- return callback(null, local.getDataProvider(componentName));
173
+ return local.getDataProvider(componentName);
180
174
  }
181
175
  const filePath = getFilePath(componentName, componentVersion, 'server.js');
182
- cdn.getFile(filePath, (err, content) => callback(err, content ? { content, filePath } : null));
176
+ const content = await cdn.getFile(filePath);
177
+ return { content, filePath };
183
178
  },
184
179
  getStaticClientPath: () => `${options['path']}${getFilePath('oc-client', packageInfo.version, 'src/oc-client.min.js')}`,
185
180
  getStaticClientMapPath: () => `${options['path']}${getFilePath('oc-client', packageInfo.version, 'src/oc-client.min.map')}`,
186
181
  getStaticFilePath: (componentName, componentVersion, filePath) => `${repository.getComponentPath(componentName, componentVersion)}${conf.local ? settings_1.default.registry.localStaticRedirectorPath : ''}${filePath}`,
187
182
  getTemplatesInfo: () => templatesInfo,
188
183
  getTemplate: (type) => templatesHash[type],
189
- init(callback) {
184
+ async init() {
190
185
  if (conf.local) {
191
- return callback(null, 'ok');
186
+ // when in local this won't get called
187
+ return 'ok';
192
188
  }
193
- componentsCache.load((err, componentsList) => {
194
- if (err) {
195
- return callback(err, undefined);
196
- }
197
- componentsDetails.refresh(componentsList, err => callback(err, componentsList));
198
- });
189
+ const componentsList = await componentsCache.load();
190
+ return componentsDetails.refresh(componentsList);
199
191
  },
200
- publishComponent(pkgDetails, componentName, componentVersion, callback) {
192
+ async publishComponent(pkgDetails, componentName, componentVersion) {
201
193
  if (conf.local) {
202
- return callback({
194
+ throw {
203
195
  code: resources_1.default.errors.registry.LOCAL_PUBLISH_NOT_ALLOWED_CODE,
204
196
  msg: resources_1.default.errors.registry.LOCAL_PUBLISH_NOT_ALLOWED
205
- }, undefined);
197
+ };
206
198
  }
207
199
  if (!validator.validateComponentName(componentName)) {
208
- return callback({
200
+ throw {
209
201
  code: resources_1.default.errors.registry.COMPONENT_NAME_NOT_VALID_CODE,
210
202
  msg: resources_1.default.errors.registry.COMPONENT_NAME_NOT_VALID
211
- }, undefined);
203
+ };
212
204
  }
213
205
  if (!validator.validateVersion(componentVersion)) {
214
- return callback({
206
+ throw {
215
207
  code: resources_1.default.errors.registry.COMPONENT_VERSION_NOT_VALID_CODE,
216
208
  msg: resources_1.default.errors.registry.COMPONENT_VERSION_NOT_VALID(componentVersion)
217
- }, undefined);
209
+ };
218
210
  }
219
211
  const validationResult = validator.validatePackageJson(Object.assign(pkgDetails, {
220
212
  componentName,
221
213
  customValidator: conf.publishValidation
222
214
  }));
223
215
  if (!validationResult.isValid) {
224
- return callback({
216
+ throw {
225
217
  code: resources_1.default.errors.registry.COMPONENT_PUBLISHVALIDATION_FAIL_CODE,
226
218
  msg: resources_1.default.errors.registry.COMPONENT_PUBLISHVALIDATION_FAIL(String(validationResult.error))
227
- }, undefined);
219
+ };
228
220
  }
229
- repository.getComponentVersions(componentName, (_err, componentVersions) => {
230
- if (!versionHandler.validateNewVersion(componentVersion, componentVersions)) {
231
- return callback({
232
- code: resources_1.default.errors.registry
233
- .COMPONENT_VERSION_ALREADY_FOUND_CODE,
234
- msg: resources_1.default.errors.registry.COMPONENT_VERSION_ALREADY_FOUND(componentName, componentVersion, repositorySource)
235
- }, undefined);
236
- }
237
- pkgDetails.packageJson.oc.date = (0, oc_get_unix_utc_timestamp_1.default)();
238
- fs_extra_1.default.writeJSON(path_1.default.join(pkgDetails.outputFolder, 'package.json'), pkgDetails.packageJson, err => {
239
- if (err) {
240
- return callback(err, undefined);
241
- }
242
- cdn.putDir(pkgDetails.outputFolder, `${options.componentsDir}/${componentName}/${componentVersion}`, err => {
243
- if (err) {
244
- return callback(err, undefined);
245
- }
246
- componentsCache.refresh((err, componentsList) => {
247
- if (err) {
248
- return callback(err, undefined);
249
- }
250
- componentsDetails.refresh(componentsList, callback);
251
- });
252
- });
253
- });
254
- });
221
+ const componentVersions = await repository.getComponentVersions(componentName);
222
+ if (!versionHandler.validateNewVersion(componentVersion, componentVersions)) {
223
+ throw {
224
+ code: resources_1.default.errors.registry.COMPONENT_VERSION_ALREADY_FOUND_CODE,
225
+ msg: resources_1.default.errors.registry.COMPONENT_VERSION_ALREADY_FOUND(componentName, componentVersion, repositorySource)
226
+ };
227
+ }
228
+ pkgDetails.packageJson.oc.date = (0, oc_get_unix_utc_timestamp_1.default)();
229
+ await fs_extra_1.default.writeJson(path_1.default.join(pkgDetails.outputFolder, 'package.json'), pkgDetails.packageJson);
230
+ await cdn.putDir(pkgDetails.outputFolder, `${options.componentsDir}/${componentName}/${componentVersion}`);
231
+ const componentsList = await componentsCache.refresh();
232
+ return componentsDetails.refresh(componentsList);
255
233
  }
256
234
  };
257
235
  return repository;
@@ -7,7 +7,6 @@ const builtin_modules_1 = __importDefault(require("builtin-modules"));
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const require_package_name_1 = __importDefault(require("require-package-name"));
9
9
  const try_require_1 = __importDefault(require("try-require"));
10
- const lodash_1 = __importDefault(require("lodash"));
11
10
  const resources_1 = __importDefault(require("../../resources"));
12
11
  const isCoreDependency = (x) => builtin_modules_1.default.includes(x);
13
12
  const requireCoreDependency = (x) => (isCoreDependency(x) && (0, try_require_1.default)(x)) || undefined;
@@ -24,7 +23,7 @@ const throwError = (requirePath) => {
24
23
  };
25
24
  exports.default = (injectedDependencies) => (requirePath) => {
26
25
  const moduleName = (0, require_package_name_1.default)(requirePath);
27
- const isAllowed = lodash_1.default.includes(injectedDependencies, moduleName);
26
+ const isAllowed = injectedDependencies.includes(moduleName);
28
27
  if (!isAllowed) {
29
28
  return throwError(requirePath);
30
29
  }
@@ -0,0 +1,10 @@
1
+ import { StorageAdapter } from 'oc-storage-adapters-utils';
2
+ declare type RemovePromiseOverload<T> = T extends {
3
+ (...args: infer B): void;
4
+ (...args: any[]): Promise<any>;
5
+ } ? (...args: B) => void : T;
6
+ declare type LegacyStorageAdapter = {
7
+ [P in keyof StorageAdapter]: RemovePromiseOverload<StorageAdapter[P]>;
8
+ };
9
+ export default function getPromiseBasedAdapter(adapter: StorageAdapter | LegacyStorageAdapter): StorageAdapter;
10
+ export {};
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const universalify_1 = require("universalify");
4
+ const officialAdapters = {
5
+ s3: { name: 'oc-s3-storage-adapter', firstPromiseBasedVersion: '1.2.0' },
6
+ gs: { name: 'oc-gs-storage-adapter', firstPromiseBasedVersion: '1.1.0' },
7
+ 'azure-blob-storage': {
8
+ name: 'oc-azure-storage-adapter',
9
+ firstPromiseBasedVersion: '0.1.0'
10
+ }
11
+ };
12
+ function isOfficialAdapter(adapter) {
13
+ return Object.keys(officialAdapters).includes(adapter.adapterType);
14
+ }
15
+ function isPromiseBased(tryFunction) {
16
+ try {
17
+ tryFunction().catch(() => {
18
+ // To not throw unhandled promise exceptions
19
+ });
20
+ return true;
21
+ }
22
+ catch (err) {
23
+ return false;
24
+ }
25
+ }
26
+ function isLegacyAdapter(adapter) {
27
+ return !isPromiseBased(() => adapter.getFile(''));
28
+ }
29
+ function convertLegacyAdapter(adapter) {
30
+ return {
31
+ getFile: (0, universalify_1.fromCallback)(adapter.getFile),
32
+ getJson: (0, universalify_1.fromCallback)(adapter.getJson),
33
+ listSubDirectories: (0, universalify_1.fromCallback)(adapter.listSubDirectories),
34
+ putDir: (0, universalify_1.fromCallback)(adapter.putDir),
35
+ putFile: (0, universalify_1.fromCallback)(adapter.putFile),
36
+ putFileContent: (0, universalify_1.fromCallback)(adapter.putFileContent),
37
+ getUrl: adapter.getUrl,
38
+ maxConcurrentRequests: adapter.maxConcurrentRequests,
39
+ adapterType: adapter.adapterType
40
+ };
41
+ }
42
+ function getPromiseBasedAdapter(adapter) {
43
+ if (isLegacyAdapter(adapter)) {
44
+ if (isOfficialAdapter(adapter)) {
45
+ const pkg = officialAdapters[adapter.adapterType];
46
+ process.emitWarning(`Adapters now should work with promises. Consider upgrading your package ${pkg.name} to at least version ${pkg.firstPromiseBasedVersion}`, 'DeprecationWarning');
47
+ }
48
+ else {
49
+ process.emitWarning('Your adapter is using the old interface of working with callbacks. Consider upgrading it to work with promises, as the previous one will be deprecated.', 'DeprecationWarning');
50
+ }
51
+ return convertLegacyAdapter(adapter);
52
+ }
53
+ return adapter;
54
+ }
55
+ exports.default = getPromiseBasedAdapter;
@@ -39,10 +39,10 @@ export default function registry(inputOptions: Input): {
39
39
  };
40
40
  }[T]) => void) => void;
41
41
  register: (plugin: Omit<Plugin, 'callback'>, callback?: ((...args: any[]) => void) | undefined) => void;
42
- start: (callback: (err: Error | null, data: {
42
+ start: (callback: (err: unknown, data: {
43
43
  app: express.Express;
44
44
  server: http.Server;
45
- }) => void) => void;
45
+ }) => void) => Promise<void>;
46
46
  app: express.Express;
47
47
  };
48
48
  export {};
@@ -22,7 +22,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- const async_1 = __importDefault(require("async"));
26
25
  const safe_1 = __importDefault(require("colors/safe"));
27
26
  const express_1 = __importDefault(require("express"));
28
27
  const http_1 = __importDefault(require("http"));
@@ -32,7 +31,7 @@ const events_handler_1 = __importDefault(require("./domain/events-handler"));
32
31
  const middleware = __importStar(require("./middleware"));
33
32
  const pluginsInitialiser = __importStar(require("./domain/plugins-initialiser"));
34
33
  const repository_1 = __importDefault(require("./domain/repository"));
35
- const router = __importStar(require("./router"));
34
+ const router_1 = require("./router");
36
35
  const options_sanitiser_1 = __importDefault(require("./domain/options-sanitiser"));
37
36
  const validator = __importStar(require("./domain/validators"));
38
37
  function registry(inputOptions) {
@@ -42,7 +41,7 @@ function registry(inputOptions) {
42
41
  }
43
42
  const options = (0, options_sanitiser_1.default)(inputOptions);
44
43
  const plugins = [];
45
- const app = middleware.bind((0, express_1.default)(), options);
44
+ const { app, router } = middleware.bind((0, express_1.default)(), options);
46
45
  let server;
47
46
  const repository = (0, repository_1.default)(options);
48
47
  const close = (callback) => {
@@ -54,26 +53,15 @@ function registry(inputOptions) {
54
53
  const register = (plugin, callback) => {
55
54
  plugins.push(Object.assign(plugin, { callback }));
56
55
  };
57
- const start = (callback) => {
56
+ const start = async (callback) => {
57
+ var _a;
58
58
  // eslint-disable-next-line no-console
59
59
  const ok = (msg) => console.log(safe_1.default.green(msg));
60
- if (typeof callback !== 'function') {
61
- callback = lodash_1.default.noop;
62
- }
63
- router.create(app, options, repository);
64
- async_1.default.waterfall([
65
- (cb) => pluginsInitialiser.init(plugins, cb),
66
- (plugins, cb) => {
67
- options.plugins = plugins;
68
- repository.init(cb);
69
- },
70
- (componentsInfo, cb) => {
71
- (0, app_start_1.default)(repository, options, (err) => cb(err ? err.msg : null, componentsInfo));
72
- }
73
- ], (err, componentsInfo) => {
74
- if (err) {
75
- return callback(err, undefined);
76
- }
60
+ (0, router_1.create)(router, options, repository);
61
+ try {
62
+ options.plugins = await pluginsInitialiser.init(plugins);
63
+ const componentsInfo = await repository.init();
64
+ await (0, app_start_1.default)(repository, options);
77
65
  server = http_1.default.createServer(app);
78
66
  server.timeout = options.timeout;
79
67
  if (options.keepAliveTimeout) {
@@ -88,12 +76,8 @@ function registry(inputOptions) {
88
76
  if (options.verbosity) {
89
77
  ok(`Registry started at port ${app.get('port')}`);
90
78
  if (lodash_1.default.isObject(componentsInfo)) {
91
- const componentsNumber = Object.keys(
92
- // @ts-ignore
93
- componentsInfo.components).length;
94
- const componentsReleases = lodash_1.default.reduce(
95
- // @ts-ignore
96
- componentsInfo.components, (memo, component) => parseInt(memo, 10) + component.length);
79
+ const componentsNumber = Object.keys(componentsInfo.components).length;
80
+ const componentsReleases = Object.values(componentsInfo.components).reduce((acc, component) => acc + component.length, 0);
97
81
  ok(`Registry serving ${componentsNumber} components for a total of ${componentsReleases} releases.`);
98
82
  }
99
83
  }
@@ -107,7 +91,10 @@ function registry(inputOptions) {
107
91
  });
108
92
  callback(error, undefined);
109
93
  });
110
- });
94
+ }
95
+ catch (err) {
96
+ callback(((_a = err) === null || _a === void 0 ? void 0 : _a.msg) || err, undefined);
97
+ }
111
98
  };
112
99
  return {
113
100
  close,
@@ -1,3 +1,7 @@
1
- import { Express } from 'express';
1
+ import express, { Express } from 'express';
2
+ import Router from 'express-promise-router';
2
3
  import { Config } from '../../types';
3
- export declare const bind: (app: Express, options: Config) => Express;
4
+ export declare const bind: (app: Express, options: Config) => {
5
+ app: Express;
6
+ router: express.Router;
7
+ };
@@ -7,6 +7,7 @@ exports.bind = void 0;
7
7
  const express_1 = __importDefault(require("express"));
8
8
  const errorhandler_1 = __importDefault(require("errorhandler"));
9
9
  const morgan_1 = __importDefault(require("morgan"));
10
+ const express_promise_router_1 = __importDefault(require("express-promise-router"));
10
11
  const base_url_handler_1 = __importDefault(require("./base-url-handler"));
11
12
  const cors_1 = __importDefault(require("./cors"));
12
13
  const discovery_handler_1 = __importDefault(require("./discovery-handler"));
@@ -21,6 +22,7 @@ const bodyParserUrlEncodedArgument = {
21
22
  const bind = (app, options) => {
22
23
  app.set('port', options.port);
23
24
  app.set('json spaces', 0);
25
+ app.set('etag', 'strong');
24
26
  app.use((_req, res, next) => {
25
27
  res.conf = options;
26
28
  next();
@@ -42,6 +44,8 @@ const bind = (app, options) => {
42
44
  if (options.local) {
43
45
  app.use((0, errorhandler_1.default)());
44
46
  }
45
- return app;
47
+ const router = (0, express_promise_router_1.default)();
48
+ app.use(router);
49
+ return { app, router };
46
50
  };
47
51
  exports.bind = bind;
@@ -1,3 +1,3 @@
1
- import { Express } from 'express';
1
+ import { Router } from 'express';
2
2
  import { Config, Repository } from '../types';
3
- export declare function create(app: Express, conf: Config, repository: Repository): Express;
3
+ export declare function create(app: Router, conf: Config, repository: Repository): void;
@@ -52,7 +52,5 @@ function create(app, conf, repository) {
52
52
  if (conf.routes) {
53
53
  conf.routes.forEach(route => app[route.method.toLowerCase()](route.route, route.handler));
54
54
  }
55
- app.set('etag', 'strong');
56
- return app;
57
55
  }
58
56
  exports.create = create;