@merkur/core 0.33.0 → 0.35.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.cjs CHANGED
@@ -78,18 +78,42 @@ async function callPluginMethod(widget, method, args) {
78
78
  return widget;
79
79
  }
80
80
 
81
- async function createMerkurWidget(widgetDefinition = {}) {
82
- widgetDefinition = setDefaultValueForUndefined(widgetDefinition, [
83
- '$dependencies',
84
- '$external',
85
- ]);
86
- widgetDefinition = setDefaultValueForUndefined(
87
- widgetDefinition,
88
- ['setup', 'create'],
89
- (widget) => widget,
90
- );
81
+ /**
82
+ * Typed helper to make it easier to define widget properties.
83
+ *
84
+ * @type import('@merkur/core').defineWidget
85
+ */
86
+ function defineWidget(widgetDefinition) {
87
+ return widgetDefinition;
88
+ }
89
+
90
+ function setDefinitionDefaults(widgetDefinition) {
91
+ return {
92
+ ...widgetDefinition,
93
+ ...setDefaultValueForUndefined(
94
+ widgetDefinition,
95
+ ['containerSelector'],
96
+ null,
97
+ ),
98
+ ...setDefaultValueForUndefined(widgetDefinition, [
99
+ 'slot',
100
+ '$dependencies',
101
+ '$external',
102
+ ]),
103
+ ...setDefaultValueForUndefined(
104
+ widgetDefinition,
105
+ ['setup', 'create'],
106
+ (widget) => widget,
107
+ ),
108
+ };
109
+ }
91
110
 
92
- const { setup, create } = widgetDefinition;
111
+ /**
112
+ * @type import('@merkur/core').createMerkurWidget
113
+ */
114
+ async function createMerkurWidget(widgetDefinition = {}) {
115
+ const definition = setDefinitionDefaults(widgetDefinition);
116
+ const { setup, create } = definition;
93
117
 
94
118
  let widget = {
95
119
  async setup(widget, ...rest) {
@@ -102,29 +126,29 @@ async function createMerkurWidget(widgetDefinition = {}) {
102
126
 
103
127
  return create(widget, ...rest);
104
128
  },
105
- $plugins: (widgetDefinition.$plugins || []).map((pluginFactory) =>
129
+ $plugins: (definition.$plugins || []).map((pluginFactory) =>
106
130
  pluginFactory(),
107
131
  ),
108
132
  };
109
133
 
110
134
  // TODO refactoring
111
- widget.name = widgetDefinition.name;
112
- widget.version = widgetDefinition.version;
113
- widget.$dependencies = widgetDefinition.$dependencies;
114
- widget.$external = widgetDefinition.$external;
135
+ widget.name = definition.name;
136
+ widget.version = definition.version;
137
+ widget.$dependencies = definition.$dependencies;
138
+ widget.$external = definition.$external;
115
139
  widget.$in = {};
116
140
 
117
- delete widgetDefinition.name;
118
- delete widgetDefinition.version;
119
- delete widgetDefinition.$dependencies;
120
- delete widgetDefinition.$external;
121
- delete widgetDefinition.$plugins;
141
+ delete definition.name;
142
+ delete definition.version;
143
+ delete definition.$dependencies;
144
+ delete definition.$external;
145
+ delete definition.$plugins;
122
146
 
123
- delete widgetDefinition.setup;
124
- delete widgetDefinition.create;
147
+ delete definition.setup;
148
+ delete definition.create;
125
149
 
126
- widget = await widget.setup(widget, widgetDefinition);
127
- widget = await widget.create(widget, widgetDefinition);
150
+ widget = await widget.setup(widget, definition);
151
+ widget = await widget.create(widget, definition);
128
152
 
129
153
  bindWidgetToFunctions(widget);
130
154
  Object.seal(widget);
@@ -223,6 +247,7 @@ exports.assignMissingKeys = assignMissingKeys;
223
247
  exports.bindWidgetToFunctions = bindWidgetToFunctions;
224
248
  exports.createMerkur = createMerkur;
225
249
  exports.createMerkurWidget = createMerkurWidget;
250
+ exports.defineWidget = defineWidget;
226
251
  exports.getMerkur = getMerkur;
227
252
  exports.hookMethod = hookMethod;
228
253
  exports.isFunction = isFunction;
package/lib/index.es9.cjs CHANGED
@@ -67,13 +67,33 @@ async function callPluginMethod(widget, method, args) {
67
67
  }
68
68
  return widget;
69
69
  }
70
+
71
+ /**
72
+ * Typed helper to make it easier to define widget properties.
73
+ *
74
+ * @type import('@merkur/core').defineWidget
75
+ */
76
+ function defineWidget(widgetDefinition) {
77
+ return widgetDefinition;
78
+ }
79
+ function setDefinitionDefaults(widgetDefinition) {
80
+ return {
81
+ ...widgetDefinition,
82
+ ...setDefaultValueForUndefined(widgetDefinition, ['containerSelector'], null),
83
+ ...setDefaultValueForUndefined(widgetDefinition, ['slot', '$dependencies', '$external']),
84
+ ...setDefaultValueForUndefined(widgetDefinition, ['setup', 'create'], widget => widget)
85
+ };
86
+ }
87
+
88
+ /**
89
+ * @type import('@merkur/core').createMerkurWidget
90
+ */
70
91
  async function createMerkurWidget(widgetDefinition = {}) {
71
- widgetDefinition = setDefaultValueForUndefined(widgetDefinition, ['$dependencies', '$external']);
72
- widgetDefinition = setDefaultValueForUndefined(widgetDefinition, ['setup', 'create'], widget => widget);
92
+ const definition = setDefinitionDefaults(widgetDefinition);
73
93
  const {
74
94
  setup,
75
95
  create
76
- } = widgetDefinition;
96
+ } = definition;
77
97
  let widget = {
78
98
  async setup(widget, ...rest) {
79
99
  widget = await callPluginMethod(widget, 'setup', rest);
@@ -83,24 +103,24 @@ async function createMerkurWidget(widgetDefinition = {}) {
83
103
  widget = await callPluginMethod(widget, 'create', rest);
84
104
  return create(widget, ...rest);
85
105
  },
86
- $plugins: (widgetDefinition.$plugins || []).map(pluginFactory => pluginFactory())
106
+ $plugins: (definition.$plugins || []).map(pluginFactory => pluginFactory())
87
107
  };
88
108
 
89
109
  // TODO refactoring
90
- widget.name = widgetDefinition.name;
91
- widget.version = widgetDefinition.version;
92
- widget.$dependencies = widgetDefinition.$dependencies;
93
- widget.$external = widgetDefinition.$external;
110
+ widget.name = definition.name;
111
+ widget.version = definition.version;
112
+ widget.$dependencies = definition.$dependencies;
113
+ widget.$external = definition.$external;
94
114
  widget.$in = {};
95
- delete widgetDefinition.name;
96
- delete widgetDefinition.version;
97
- delete widgetDefinition.$dependencies;
98
- delete widgetDefinition.$external;
99
- delete widgetDefinition.$plugins;
100
- delete widgetDefinition.setup;
101
- delete widgetDefinition.create;
102
- widget = await widget.setup(widget, widgetDefinition);
103
- widget = await widget.create(widget, widgetDefinition);
115
+ delete definition.name;
116
+ delete definition.version;
117
+ delete definition.$dependencies;
118
+ delete definition.$external;
119
+ delete definition.$plugins;
120
+ delete definition.setup;
121
+ delete definition.create;
122
+ widget = await widget.setup(widget, definition);
123
+ widget = await widget.create(widget, definition);
104
124
  bindWidgetToFunctions(widget);
105
125
  Object.seal(widget);
106
126
  return widget;
@@ -180,6 +200,7 @@ exports.assignMissingKeys = assignMissingKeys;
180
200
  exports.bindWidgetToFunctions = bindWidgetToFunctions;
181
201
  exports.createMerkur = createMerkur;
182
202
  exports.createMerkurWidget = createMerkurWidget;
203
+ exports.defineWidget = defineWidget;
183
204
  exports.getMerkur = getMerkur;
184
205
  exports.hookMethod = hookMethod;
185
206
  exports.isFunction = isFunction;
package/lib/index.es9.mjs CHANGED
@@ -65,13 +65,33 @@ async function callPluginMethod(widget, method, args) {
65
65
  }
66
66
  return widget;
67
67
  }
68
+
69
+ /**
70
+ * Typed helper to make it easier to define widget properties.
71
+ *
72
+ * @type import('@merkur/core').defineWidget
73
+ */
74
+ function defineWidget(widgetDefinition) {
75
+ return widgetDefinition;
76
+ }
77
+ function setDefinitionDefaults(widgetDefinition) {
78
+ return {
79
+ ...widgetDefinition,
80
+ ...setDefaultValueForUndefined(widgetDefinition, ['containerSelector'], null),
81
+ ...setDefaultValueForUndefined(widgetDefinition, ['slot', '$dependencies', '$external']),
82
+ ...setDefaultValueForUndefined(widgetDefinition, ['setup', 'create'], widget => widget)
83
+ };
84
+ }
85
+
86
+ /**
87
+ * @type import('@merkur/core').createMerkurWidget
88
+ */
68
89
  async function createMerkurWidget(widgetDefinition = {}) {
69
- widgetDefinition = setDefaultValueForUndefined(widgetDefinition, ['$dependencies', '$external']);
70
- widgetDefinition = setDefaultValueForUndefined(widgetDefinition, ['setup', 'create'], widget => widget);
90
+ const definition = setDefinitionDefaults(widgetDefinition);
71
91
  const {
72
92
  setup,
73
93
  create
74
- } = widgetDefinition;
94
+ } = definition;
75
95
  let widget = {
76
96
  async setup(widget, ...rest) {
77
97
  widget = await callPluginMethod(widget, 'setup', rest);
@@ -81,24 +101,24 @@ async function createMerkurWidget(widgetDefinition = {}) {
81
101
  widget = await callPluginMethod(widget, 'create', rest);
82
102
  return create(widget, ...rest);
83
103
  },
84
- $plugins: (widgetDefinition.$plugins || []).map(pluginFactory => pluginFactory())
104
+ $plugins: (definition.$plugins || []).map(pluginFactory => pluginFactory())
85
105
  };
86
106
 
87
107
  // TODO refactoring
88
- widget.name = widgetDefinition.name;
89
- widget.version = widgetDefinition.version;
90
- widget.$dependencies = widgetDefinition.$dependencies;
91
- widget.$external = widgetDefinition.$external;
108
+ widget.name = definition.name;
109
+ widget.version = definition.version;
110
+ widget.$dependencies = definition.$dependencies;
111
+ widget.$external = definition.$external;
92
112
  widget.$in = {};
93
- delete widgetDefinition.name;
94
- delete widgetDefinition.version;
95
- delete widgetDefinition.$dependencies;
96
- delete widgetDefinition.$external;
97
- delete widgetDefinition.$plugins;
98
- delete widgetDefinition.setup;
99
- delete widgetDefinition.create;
100
- widget = await widget.setup(widget, widgetDefinition);
101
- widget = await widget.create(widget, widgetDefinition);
113
+ delete definition.name;
114
+ delete definition.version;
115
+ delete definition.$dependencies;
116
+ delete definition.$external;
117
+ delete definition.$plugins;
118
+ delete definition.setup;
119
+ delete definition.create;
120
+ widget = await widget.setup(widget, definition);
121
+ widget = await widget.create(widget, definition);
102
122
  bindWidgetToFunctions(widget);
103
123
  Object.seal(widget);
104
124
  return widget;
@@ -174,4 +194,4 @@ function getGlobalContext() {
174
194
  }
175
195
  return {};
176
196
  }
177
- export { assignMissingKeys, bindWidgetToFunctions, createMerkur, createMerkurWidget, getMerkur, hookMethod, isFunction, removeMerkur, setDefaultValueForUndefined };
197
+ export { assignMissingKeys, bindWidgetToFunctions, createMerkur, createMerkurWidget, defineWidget, getMerkur, hookMethod, isFunction, removeMerkur, setDefaultValueForUndefined };
package/lib/index.js CHANGED
@@ -78,18 +78,42 @@ async function callPluginMethod(widget, method, args) {
78
78
  return widget;
79
79
  }
80
80
 
81
- async function createMerkurWidget(widgetDefinition = {}) {
82
- widgetDefinition = setDefaultValueForUndefined(widgetDefinition, [
83
- '$dependencies',
84
- '$external',
85
- ]);
86
- widgetDefinition = setDefaultValueForUndefined(
87
- widgetDefinition,
88
- ['setup', 'create'],
89
- (widget) => widget,
90
- );
81
+ /**
82
+ * Typed helper to make it easier to define widget properties.
83
+ *
84
+ * @type import('@merkur/core').defineWidget
85
+ */
86
+ function defineWidget(widgetDefinition) {
87
+ return widgetDefinition;
88
+ }
89
+
90
+ function setDefinitionDefaults(widgetDefinition) {
91
+ return {
92
+ ...widgetDefinition,
93
+ ...setDefaultValueForUndefined(
94
+ widgetDefinition,
95
+ ['containerSelector'],
96
+ null,
97
+ ),
98
+ ...setDefaultValueForUndefined(widgetDefinition, [
99
+ 'slot',
100
+ '$dependencies',
101
+ '$external',
102
+ ]),
103
+ ...setDefaultValueForUndefined(
104
+ widgetDefinition,
105
+ ['setup', 'create'],
106
+ (widget) => widget,
107
+ ),
108
+ };
109
+ }
91
110
 
92
- const { setup, create } = widgetDefinition;
111
+ /**
112
+ * @type import('@merkur/core').createMerkurWidget
113
+ */
114
+ async function createMerkurWidget(widgetDefinition = {}) {
115
+ const definition = setDefinitionDefaults(widgetDefinition);
116
+ const { setup, create } = definition;
93
117
 
94
118
  let widget = {
95
119
  async setup(widget, ...rest) {
@@ -102,29 +126,29 @@ async function createMerkurWidget(widgetDefinition = {}) {
102
126
 
103
127
  return create(widget, ...rest);
104
128
  },
105
- $plugins: (widgetDefinition.$plugins || []).map((pluginFactory) =>
129
+ $plugins: (definition.$plugins || []).map((pluginFactory) =>
106
130
  pluginFactory(),
107
131
  ),
108
132
  };
109
133
 
110
134
  // TODO refactoring
111
- widget.name = widgetDefinition.name;
112
- widget.version = widgetDefinition.version;
113
- widget.$dependencies = widgetDefinition.$dependencies;
114
- widget.$external = widgetDefinition.$external;
135
+ widget.name = definition.name;
136
+ widget.version = definition.version;
137
+ widget.$dependencies = definition.$dependencies;
138
+ widget.$external = definition.$external;
115
139
  widget.$in = {};
116
140
 
117
- delete widgetDefinition.name;
118
- delete widgetDefinition.version;
119
- delete widgetDefinition.$dependencies;
120
- delete widgetDefinition.$external;
121
- delete widgetDefinition.$plugins;
141
+ delete definition.name;
142
+ delete definition.version;
143
+ delete definition.$dependencies;
144
+ delete definition.$external;
145
+ delete definition.$plugins;
122
146
 
123
- delete widgetDefinition.setup;
124
- delete widgetDefinition.create;
147
+ delete definition.setup;
148
+ delete definition.create;
125
149
 
126
- widget = await widget.setup(widget, widgetDefinition);
127
- widget = await widget.create(widget, widgetDefinition);
150
+ widget = await widget.setup(widget, definition);
151
+ widget = await widget.create(widget, definition);
128
152
 
129
153
  bindWidgetToFunctions(widget);
130
154
  Object.seal(widget);
@@ -223,6 +247,7 @@ exports.assignMissingKeys = assignMissingKeys;
223
247
  exports.bindWidgetToFunctions = bindWidgetToFunctions;
224
248
  exports.createMerkur = createMerkur;
225
249
  exports.createMerkurWidget = createMerkurWidget;
250
+ exports.defineWidget = defineWidget;
226
251
  exports.getMerkur = getMerkur;
227
252
  exports.hookMethod = hookMethod;
228
253
  exports.isFunction = isFunction;
package/lib/index.mjs CHANGED
@@ -76,18 +76,42 @@ async function callPluginMethod(widget, method, args) {
76
76
  return widget;
77
77
  }
78
78
 
79
- async function createMerkurWidget(widgetDefinition = {}) {
80
- widgetDefinition = setDefaultValueForUndefined(widgetDefinition, [
81
- '$dependencies',
82
- '$external',
83
- ]);
84
- widgetDefinition = setDefaultValueForUndefined(
85
- widgetDefinition,
86
- ['setup', 'create'],
87
- (widget) => widget,
88
- );
79
+ /**
80
+ * Typed helper to make it easier to define widget properties.
81
+ *
82
+ * @type import('@merkur/core').defineWidget
83
+ */
84
+ function defineWidget(widgetDefinition) {
85
+ return widgetDefinition;
86
+ }
87
+
88
+ function setDefinitionDefaults(widgetDefinition) {
89
+ return {
90
+ ...widgetDefinition,
91
+ ...setDefaultValueForUndefined(
92
+ widgetDefinition,
93
+ ['containerSelector'],
94
+ null,
95
+ ),
96
+ ...setDefaultValueForUndefined(widgetDefinition, [
97
+ 'slot',
98
+ '$dependencies',
99
+ '$external',
100
+ ]),
101
+ ...setDefaultValueForUndefined(
102
+ widgetDefinition,
103
+ ['setup', 'create'],
104
+ (widget) => widget,
105
+ ),
106
+ };
107
+ }
89
108
 
90
- const { setup, create } = widgetDefinition;
109
+ /**
110
+ * @type import('@merkur/core').createMerkurWidget
111
+ */
112
+ async function createMerkurWidget(widgetDefinition = {}) {
113
+ const definition = setDefinitionDefaults(widgetDefinition);
114
+ const { setup, create } = definition;
91
115
 
92
116
  let widget = {
93
117
  async setup(widget, ...rest) {
@@ -100,29 +124,29 @@ async function createMerkurWidget(widgetDefinition = {}) {
100
124
 
101
125
  return create(widget, ...rest);
102
126
  },
103
- $plugins: (widgetDefinition.$plugins || []).map((pluginFactory) =>
127
+ $plugins: (definition.$plugins || []).map((pluginFactory) =>
104
128
  pluginFactory(),
105
129
  ),
106
130
  };
107
131
 
108
132
  // TODO refactoring
109
- widget.name = widgetDefinition.name;
110
- widget.version = widgetDefinition.version;
111
- widget.$dependencies = widgetDefinition.$dependencies;
112
- widget.$external = widgetDefinition.$external;
133
+ widget.name = definition.name;
134
+ widget.version = definition.version;
135
+ widget.$dependencies = definition.$dependencies;
136
+ widget.$external = definition.$external;
113
137
  widget.$in = {};
114
138
 
115
- delete widgetDefinition.name;
116
- delete widgetDefinition.version;
117
- delete widgetDefinition.$dependencies;
118
- delete widgetDefinition.$external;
119
- delete widgetDefinition.$plugins;
139
+ delete definition.name;
140
+ delete definition.version;
141
+ delete definition.$dependencies;
142
+ delete definition.$external;
143
+ delete definition.$plugins;
120
144
 
121
- delete widgetDefinition.setup;
122
- delete widgetDefinition.create;
145
+ delete definition.setup;
146
+ delete definition.create;
123
147
 
124
- widget = await widget.setup(widget, widgetDefinition);
125
- widget = await widget.create(widget, widgetDefinition);
148
+ widget = await widget.setup(widget, definition);
149
+ widget = await widget.create(widget, definition);
126
150
 
127
151
  bindWidgetToFunctions(widget);
128
152
  Object.seal(widget);
@@ -217,4 +241,4 @@ function getGlobalContext() {
217
241
  return {};
218
242
  }
219
243
 
220
- export { assignMissingKeys, bindWidgetToFunctions, createMerkur, createMerkurWidget, getMerkur, hookMethod, isFunction, removeMerkur, setDefaultValueForUndefined };
244
+ export { assignMissingKeys, bindWidgetToFunctions, createMerkur, createMerkurWidget, defineWidget, getMerkur, hookMethod, isFunction, removeMerkur, setDefaultValueForUndefined };
package/lib/index.umd.js CHANGED
@@ -1 +1 @@
1
- !function(e,n){if("function"==typeof define&&define.amd)define("@merkur/core",["exports"],n);else if("undefined"!=typeof exports)n(exports);else{var t={exports:{}};n(t.exports),e.Merkur=e.Merkur||{},e.Merkur.Core=t.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){function n(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||t(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,n){if(e){if("string"==typeof e)return r(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(e,n):void 0}}function r(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,n,t,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){return void t(e)}a.done?n(c):Promise.resolve(c).then(r,o)}function u(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var u=e.apply(n,t);function a(e){i(u,r,o,a,c,"next",e)}function c(e){i(u,r,o,a,c,"throw",e)}a(void 0)}))}}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e,n,t){return(n=function(e){var n=function(e,n){if("object"!==o(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n||"default");if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"===o(n)?n:String(n)}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function f(e,n){return function(){for(var t=arguments.length,r=new Array(t),o=0;o<t;o++)r[o]=arguments[o];return n.apply(void 0,[e].concat(r))}}function l(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){c(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}({},e);return n.forEach((function(e){r[e]=r[e]||t})),r}function s(e,n){n=n||e,Object.keys(n).forEach((function(t){if(d(n[t])){var r=n[t];n[t]=f(e,r)}}))}function d(e){return"function"==typeof e}function p(e,n,t){return y.apply(this,arguments)}function y(){return(y=u((function*(e,r,o){var i,u=function(e,n){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=t(e))||n&&e&&"number"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u,a=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){c=!0,u=e},f:function(){try{a||null==r.return||r.return()}finally{if(c)throw u}}}}(e.$plugins);try{for(u.s();!(i=u.n()).done;){var a=i.value;d(a[r])&&(e=yield a[r].apply(a,[e].concat(n(o))))}}catch(e){u.e(e)}finally{u.f()}return e}))).apply(this,arguments)}function v(){return v=u((function*(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e=l(e,["$dependencies","$external"]),e=l(e,["setup","create"],(function(e){return e}));var n=e,t=n.setup,r=n.create,o={setup:function(e){var n=arguments;return u((function*(){for(var r=n.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=n[i];return e=yield p(e,"setup",o),t.apply(void 0,[e].concat(o))}))()},create:function(e){var n=arguments;return u((function*(){for(var t=n.length,o=new Array(t>1?t-1:0),i=1;i<t;i++)o[i-1]=n[i];return e=yield p(e,"create",o),r.apply(void 0,[e].concat(o))}))()},$plugins:(e.$plugins||[]).map((function(e){return e()}))};return o.name=e.name,o.version=e.version,o.$dependencies=e.$dependencies,o.$external=e.$external,o.$in={},delete e.name,delete e.version,delete e.$dependencies,delete e.$external,delete e.$plugins,delete e.setup,delete e.create,o=yield o.setup(o,e),s(o=yield o.create(o,e)),Object.seal(o),o})),v.apply(this,arguments)}function b(e){var n=e.name,t=e.version,r=e.createWidget;h().$in.widgetFactory[n+t]=r}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=h(),t=e.name,r=e.version,o=n.$in.widgetFactory[t+r];if(!d(o))throw new Error('The widget with defined name and version "'.concat(t+r,'" is not defined.'));return o(e)}function h(){var e=w();return e.__merkur__||(e.__merkur__={$in:{widgets:[],widgetFactory:{}},$external:{},$dependencies:{},isRegistered:m,register:b,create:g}),e.__merkur__}function m(e){var n=h();return Boolean(Object.keys(n.$in.widgetFactory).find((function(n){return new RegExp("^".concat(e)).test(n)})))}function w(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{}}Object.defineProperty(e,"__esModule",{value:!0}),e.assignMissingKeys=function(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),r=1;r<n;r++)t[r-1]=arguments[r];return t.forEach((function(n){Object.keys(n||{}).forEach((function(t){t in e||(e[t]=n[t])}))})),e},e.bindWidgetToFunctions=s,e.createMerkur=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.$plugins,t=void 0===n?[]:n,r=h();return t.forEach((function(e){e&&d(e.setup)&&e.setup(r)})),r},e.createMerkurWidget=function(){return v.apply(this,arguments)},e.getMerkur=h,e.hookMethod=function(e,n,t){var r=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",t=n.split("."),r=t.pop(),o=t.reduce((function(e,n){return e[n]||{}}),e);if(!d(o[r]))throw new Error("Defined path '".concat(n,"' is incorrect. Check your widget structure."));return{target:o,methodName:r}}(e,n),o=r.target,i=r.methodName,u=f(e,o[i]);return o[i]=function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return t.apply(void 0,[e,u].concat(r))},u},e.isFunction=d,e.removeMerkur=function(){delete w().__merkur__},e.setDefaultValueForUndefined=l}));
1
+ !function(e,n){if("function"==typeof define&&define.amd)define("@merkur/core",["exports"],n);else if("undefined"!=typeof exports)n(exports);else{var t={exports:{}};n(t.exports),e.Merkur=e.Merkur||{},e.Merkur.Core=t.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){function n(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||t(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(e,n){if(e){if("string"==typeof e)return r(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(e,n):void 0}}function r(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,n,t,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){return void t(e)}a.done?n(c):Promise.resolve(c).then(r,o)}function u(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var u=e.apply(n,t);function a(e){i(u,r,o,a,c,"next",e)}function c(e){i(u,r,o,a,c,"throw",e)}a(void 0)}))}}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){f(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function f(e,n,t){var r;return r=function(e,n){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n||"default");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(n,"string"),(n="symbol"==o(r)?r:r+"")in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){return function(){for(var t=arguments.length,r=new Array(t),o=0;o<t;o++)r[o]=arguments[o];return n.apply(void 0,[e].concat(r))}}function s(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=c({},e);return n.forEach((function(e){r[e]=r[e]||t})),r}function d(e,n){n=n||e,Object.keys(n).forEach((function(t){if(p(n[t])){var r=n[t];n[t]=l(e,r)}}))}function p(e){return"function"==typeof e}function y(e,n,t){return v.apply(this,arguments)}function v(){return(v=u((function*(e,r,o){var i,u=function(e,n){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=t(e))||n&&e&&"number"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u,a=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){c=!0,u=e},f:function(){try{a||null==r.return||r.return()}finally{if(c)throw u}}}}(e.$plugins);try{for(u.s();!(i=u.n()).done;){var a=i.value;p(a[r])&&(e=yield a[r].apply(a,[e].concat(n(o))))}}catch(e){u.e(e)}finally{u.f()}return e}))).apply(this,arguments)}function b(){return b=u((function*(){var e=function(e){return c(c(c(c({},e),s(e,["containerSelector"],null)),s(e,["slot","$dependencies","$external"])),s(e,["setup","create"],(function(e){return e})))}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),n=e.setup,t=e.create,r={setup:function(e){var t=arguments;return u((function*(){for(var r=t.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=t[i];return e=yield y(e,"setup",o),n.apply(void 0,[e].concat(o))}))()},create:function(e){var n=arguments;return u((function*(){for(var r=n.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=n[i];return e=yield y(e,"create",o),t.apply(void 0,[e].concat(o))}))()},$plugins:(e.$plugins||[]).map((function(e){return e()}))};return r.name=e.name,r.version=e.version,r.$dependencies=e.$dependencies,r.$external=e.$external,r.$in={},delete e.name,delete e.version,delete e.$dependencies,delete e.$external,delete e.$plugins,delete e.setup,delete e.create,r=yield r.setup(r,e),d(r=yield r.create(r,e)),Object.seal(r),r})),b.apply(this,arguments)}function g(e){var n=e.name,t=e.version,r=e.createWidget;m().$in.widgetFactory[n+t]=r}function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=m(),t=e.name,r=e.version,o=n.$in.widgetFactory[t+r];if(!p(o))throw new Error('The widget with defined name and version "'.concat(t+r,'" is not defined.'));return o(e)}function m(){var e=O();return e.__merkur__||(e.__merkur__={$in:{widgets:[],widgetFactory:{}},$external:{},$dependencies:{},isRegistered:w,register:g,create:h}),e.__merkur__}function w(e){var n=m();return Boolean(Object.keys(n.$in.widgetFactory).find((function(n){return new RegExp("^".concat(e)).test(n)})))}function O(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{}}Object.defineProperty(e,"__esModule",{value:!0}),e.assignMissingKeys=function(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),r=1;r<n;r++)t[r-1]=arguments[r];return t.forEach((function(n){Object.keys(n||{}).forEach((function(t){t in e||(e[t]=n[t])}))})),e},e.bindWidgetToFunctions=d,e.createMerkur=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.$plugins,t=void 0===n?[]:n,r=m();return t.forEach((function(e){e&&p(e.setup)&&e.setup(r)})),r},e.createMerkurWidget=function(){return b.apply(this,arguments)},e.defineWidget=function(e){return e},e.getMerkur=m,e.hookMethod=function(e,n,t){var r=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",t=n.split("."),r=t.pop(),o=t.reduce((function(e,n){return e[n]||{}}),e);if(!p(o[r]))throw new Error("Defined path '".concat(n,"' is incorrect. Check your widget structure."));return{target:o,methodName:r}}(e,n),o=r.target,i=r.methodName,u=l(e,o[i]);return o[i]=function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return t.apply(void 0,[e,u].concat(r))},u},e.isFunction=p,e.removeMerkur=function(){delete O().__merkur__},e.setDefaultValueForUndefined=s}));
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "@merkur/core",
3
- "version": "0.33.0",
3
+ "version": "0.35.0",
4
4
  "description": "Merkur is tiny and extensible library for creating front-end microservices.",
5
5
  "main": "lib/index",
6
6
  "module": "lib/index",
7
+ "types": "./types.d.ts",
7
8
  "unpkg": "lib/index.umd.js",
8
9
  "sideEffects": false,
9
10
  "exports": {
10
11
  ".": {
12
+ "types": "./types.d.ts",
11
13
  "import": "./lib/index.mjs",
12
14
  "require": "./lib/index.cjs"
13
15
  },
@@ -51,5 +53,5 @@
51
53
  "access": "public"
52
54
  },
53
55
  "homepage": "https://merkur.js.org/",
54
- "gitHead": "3e88b57abfad267ac3f3b20b2ae6bf50f93f5375"
56
+ "gitHead": "383f29bdf67a7f4252876867687371a8d26f53f2"
55
57
  }
package/tsconfig.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "lib": [
5
+ "ES2020",
6
+ "DOM",
7
+ "DOM.Iterable"
8
+ ],
9
+ },
10
+ "include": [
11
+ "src"
12
+ ],
13
+ "exclude": [
14
+ "**/__tests__/**"
15
+ ]
16
+ }
package/types.d.ts ADDED
@@ -0,0 +1,98 @@
1
+ export interface BaseWidgetAsset {
2
+ type: 'stylesheet' | 'script' | 'inlineStyle';
3
+ optional?: boolean;
4
+ test?: string;
5
+ attr?: Record<string, string | boolean>;
6
+ }
7
+ export interface WidgetAsset extends BaseWidgetAsset {
8
+ name: string;
9
+ }
10
+
11
+ export interface SourceAsset extends BaseWidgetAsset {
12
+ source: string;
13
+ }
14
+
15
+ export interface WidgetDependencies {}
16
+
17
+ export interface Widget {
18
+ name: string;
19
+ version: string;
20
+ containerSelector?: string;
21
+ $in: WidgetInternal;
22
+ $external: WidgetExternal;
23
+ $dependencies: WidgetDependencies;
24
+ $plugins: WidgetPlugin[];
25
+ }
26
+
27
+ export interface WidgetProperties {
28
+ name: string;
29
+ version: string;
30
+ }
31
+
32
+ export interface WidgetDefinition {
33
+ assets: (WidgetAsset | SourceAsset)[];
34
+ $plugins?: Array<() => WidgetPlugin>;
35
+ $external: WidgetExternal;
36
+ $dependencies: WidgetDependencies;
37
+ create?: WidgetFunction;
38
+ setup?: WidgetFunction;
39
+ }
40
+
41
+ export interface WidgetParams {}
42
+ export interface WidgetInternal {}
43
+ export interface WidgetExternal {}
44
+
45
+ export interface WidgetPlugin {
46
+ create?: WidgetFunction;
47
+ setup?: WidgetFunction;
48
+ }
49
+
50
+ export type WidgetFunction = (
51
+ widget: Partial<Widget>,
52
+ ...rest: unknown[]
53
+ ) => Promise<Partial<Widget>> | Partial<Widget>;
54
+
55
+ export type MerkurCreate = (
56
+ widgetProperties: WidgetProperties,
57
+ ) => Promise<Widget>;
58
+
59
+ export type WidgetCreate = (widgetParams: WidgetParams) => Promise<Widget>;
60
+
61
+ export interface Merkur {
62
+ $in: {
63
+ widgets: []; // TODO
64
+ widgetFactory: Record<string, MerkurCreate>;
65
+ };
66
+ $external: WidgetExternal;
67
+ $dependencies: WidgetDependencies;
68
+ create: MerkurCreate;
69
+ register: ({
70
+ name,
71
+ version,
72
+ createWidget,
73
+ }: {
74
+ name: string;
75
+ version: string;
76
+ createWidget: WidgetCreate;
77
+ }) => void;
78
+ }
79
+
80
+ /**
81
+ * Merkur API types
82
+ */
83
+ export interface CreateMerkurWidgetArgs {}
84
+ export declare function createMerkurWidget<
85
+ T extends WidgetDefinition & CreateMerkurWidgetArgs,
86
+ >(widgetDefinition: T): Widget;
87
+
88
+ export interface DefineWidgetArgs {}
89
+ export declare function defineWidget<
90
+ T extends WidgetDefinition & WidgetProperties & DefineWidgetArgs,
91
+ >(widgetDefinition: T): T;
92
+
93
+ export declare function createMerkur(): Merkur;
94
+ export declare function hookMethod(
95
+ widget: Widget,
96
+ path: string,
97
+ handler: (widget: Widget, originalFunction: any, ...args: any[]) => any,
98
+ ): Promise<void>;