marko 5.29.2 → 5.30.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.
Files changed (167) hide show
  1. package/README.md +1 -1
  2. package/bin/markoc.js +18 -18
  3. package/dist/core-tags/core/await/renderer.js +5 -1
  4. package/dist/node_modules/@internal/components-beginComponent/index.js +13 -3
  5. package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
  6. package/dist/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
  7. package/dist/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
  8. package/dist/node_modules/@internal/components-entry/index-browser.js +2 -2
  9. package/dist/node_modules/@internal/components-entry/index.js +73 -45
  10. package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
  11. package/dist/node_modules/@internal/components-entry-legacy/index.js +15 -0
  12. package/dist/node_modules/@internal/components-entry-legacy/package.json +11 -0
  13. package/dist/node_modules/@internal/components-registry/index-browser.js +70 -43
  14. package/dist/node_modules/@internal/components-registry/index.js +2 -2
  15. package/dist/node_modules/@internal/components-util/index-browser.js +17 -17
  16. package/dist/node_modules/@internal/components-util/index.js +18 -8
  17. package/dist/node_modules/@internal/create-readable/index-browser.js +1 -1
  18. package/dist/node_modules/@internal/create-readable/index.js +9 -9
  19. package/dist/node_modules/@internal/set-immediate/index-browser.js +1 -1
  20. package/dist/node_modules/@internal/set-immediate/index-worker.js +2 -2
  21. package/dist/node_modules/@internal/set-immediate/index.js +2 -2
  22. package/dist/runtime/RenderResult.js +3 -3
  23. package/dist/runtime/components/Component.js +146 -148
  24. package/dist/runtime/components/ComponentDef.js +41 -27
  25. package/dist/runtime/components/ComponentsContext.js +6 -6
  26. package/dist/runtime/components/GlobalComponentsContext.js +3 -3
  27. package/dist/runtime/components/KeySequence.js +3 -3
  28. package/dist/runtime/components/ServerComponent.js +13 -13
  29. package/dist/runtime/components/State.js +27 -27
  30. package/dist/runtime/components/attach-detach.js +7 -7
  31. package/dist/runtime/components/defineComponent.js +5 -5
  32. package/dist/runtime/components/dom-data.js +6 -6
  33. package/dist/runtime/components/event-delegation.js +10 -10
  34. package/dist/runtime/components/legacy/browser.json +9 -0
  35. package/dist/runtime/components/legacy/defineComponent-legacy.js +32 -0
  36. package/dist/runtime/components/legacy/defineRenderer-legacy.js +171 -0
  37. package/dist/runtime/components/legacy/defineWidget-legacy.js +1 -0
  38. package/dist/runtime/components/legacy/dependencies/html.js +3 -0
  39. package/dist/runtime/components/legacy/dependencies/index.js +178 -0
  40. package/dist/runtime/components/legacy/dependencies/vdom.js +3 -0
  41. package/dist/runtime/components/legacy/index.js +1 -0
  42. package/dist/runtime/components/legacy/jquery.js +51 -0
  43. package/dist/runtime/components/legacy/ready.js +152 -0
  44. package/dist/runtime/components/legacy/renderer-legacy.js +230 -0
  45. package/dist/runtime/components/renderer.js +30 -26
  46. package/dist/runtime/components/update-manager.js +10 -10
  47. package/dist/runtime/createOut.js +1 -1
  48. package/dist/runtime/dom-insert.js +5 -5
  49. package/dist/runtime/helpers/_change-case.js +2 -2
  50. package/dist/runtime/helpers/dynamic-tag.js +7 -9
  51. package/dist/runtime/helpers/style-value.js +7 -2
  52. package/dist/runtime/html/AsyncStream.js +20 -20
  53. package/dist/runtime/html/BufferedWriter.js +2 -2
  54. package/dist/runtime/html/helpers/_dynamic-attr.js +2 -2
  55. package/dist/runtime/html/helpers/attr.js +19 -6
  56. package/dist/runtime/html/helpers/attrs.js +7 -0
  57. package/dist/runtime/html/helpers/data-marko.js +2 -2
  58. package/dist/runtime/html/helpers/escape-quotes.js +1 -1
  59. package/dist/runtime/html/helpers/escape-xml.js +1 -1
  60. package/dist/runtime/html/helpers/merge-attrs.js +38 -7
  61. package/dist/runtime/html/index.js +2 -2
  62. package/dist/runtime/renderable.js +9 -6
  63. package/dist/runtime/vdom/AsyncVDOMBuilder.js +86 -86
  64. package/dist/runtime/vdom/VComponent.js +3 -3
  65. package/dist/runtime/vdom/VDocumentFragment.js +7 -7
  66. package/dist/runtime/vdom/VElement.js +61 -50
  67. package/dist/runtime/vdom/VFragment.js +8 -8
  68. package/dist/runtime/vdom/VNode.js +36 -36
  69. package/dist/runtime/vdom/VText.js +8 -8
  70. package/dist/runtime/vdom/helpers/attrs.js +24 -4
  71. package/dist/runtime/vdom/helpers/merge-attrs.js +16 -0
  72. package/dist/runtime/vdom/helpers/v-element.js +1 -1
  73. package/dist/runtime/vdom/helpers/v-text.js +1 -1
  74. package/dist/runtime/vdom/hot-reload.js +19 -19
  75. package/dist/runtime/vdom/index.js +2 -2
  76. package/dist/runtime/vdom/morphdom/fragment.js +5 -5
  77. package/dist/runtime/vdom/morphdom/helpers.js +5 -5
  78. package/dist/runtime/vdom/morphdom/index.js +56 -56
  79. package/dist/runtime/vdom/morphdom/specialElHandlers.js +7 -7
  80. package/dist/runtime/vdom/preserve-attrs.js +1 -1
  81. package/dist/runtime/vdom/vdom.js +14 -14
  82. package/docs/10-awesome-marko-features.md +1 -1
  83. package/docs/body-content.md +3 -3
  84. package/docs/class-components.md +6 -6
  85. package/docs/cloudflare-workers.md +3 -3
  86. package/docs/compiler.md +5 -5
  87. package/docs/express.md +2 -2
  88. package/docs/http.md +1 -1
  89. package/docs/koa.md +1 -1
  90. package/docs/lasso.md +1 -1
  91. package/docs/marko-vs-react.md +2 -2
  92. package/docs/rendering.md +6 -6
  93. package/docs/rollup.md +30 -30
  94. package/docs/troubleshooting-streaming.md +1 -1
  95. package/docs/typescript.md +1 -1
  96. package/docs/vite.md +3 -3
  97. package/docs/webpack.md +25 -25
  98. package/docs/why-is-marko-fast.md +2 -2
  99. package/index.d.ts +1 -0
  100. package/legacy-components-browser.marko +15 -0
  101. package/legacy-components.js +7 -0
  102. package/package.json +51 -45
  103. package/src/compiler/config.js +1 -1
  104. package/src/compiler/index.js +5 -5
  105. package/src/core-tags/core/__flush_here_and_after__.js +1 -1
  106. package/src/core-tags/core/await/AsyncValue.js +1 -1
  107. package/src/core-tags/core/await/renderer.js +8 -4
  108. package/src/core-tags/core/await/reorderer-renderer.js +1 -1
  109. package/src/node-require/browser-refresh.js +2 -2
  110. package/src/node-require/index.js +2 -2
  111. package/src/node_modules/@internal/components-beginComponent/index.js +16 -6
  112. package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +331 -0
  113. package/src/node_modules/@internal/components-define-widget-legacy/index.js +18 -0
  114. package/src/node_modules/@internal/components-define-widget-legacy/package.json +11 -0
  115. package/src/node_modules/@internal/components-entry/index.js +65 -37
  116. package/src/node_modules/@internal/components-entry-legacy/index-browser.js +74 -0
  117. package/src/node_modules/@internal/components-entry-legacy/index.js +15 -0
  118. package/src/node_modules/@internal/components-entry-legacy/package.json +11 -0
  119. package/src/node_modules/@internal/components-registry/index-browser.js +33 -6
  120. package/src/node_modules/@internal/components-util/index.js +10 -0
  121. package/src/runtime/RenderResult.js +3 -3
  122. package/src/runtime/components/Component.js +16 -18
  123. package/src/runtime/components/ComponentDef.js +22 -8
  124. package/src/runtime/components/ComponentsContext.js +1 -1
  125. package/src/runtime/components/State.js +2 -2
  126. package/src/runtime/components/attach-detach.js +1 -1
  127. package/src/runtime/components/dom-data.js +1 -1
  128. package/src/runtime/components/legacy/browser.json +9 -0
  129. package/src/runtime/components/legacy/defineComponent-legacy.js +32 -0
  130. package/src/runtime/components/legacy/defineRenderer-legacy.js +171 -0
  131. package/src/runtime/components/legacy/defineWidget-legacy.js +1 -0
  132. package/src/runtime/components/legacy/dependencies/html.js +3 -0
  133. package/src/runtime/components/legacy/dependencies/index.js +178 -0
  134. package/src/runtime/components/legacy/dependencies/vdom.js +3 -0
  135. package/src/runtime/components/legacy/index.js +1 -0
  136. package/src/runtime/components/legacy/jquery.js +51 -0
  137. package/src/runtime/components/legacy/ready.js +152 -0
  138. package/src/runtime/components/legacy/renderer-legacy.js +230 -0
  139. package/src/runtime/components/renderer.js +4 -0
  140. package/src/runtime/components/update-manager.js +1 -1
  141. package/src/runtime/dom-insert.js +1 -1
  142. package/src/runtime/helpers/dynamic-tag.js +2 -4
  143. package/src/runtime/helpers/style-value.js +7 -2
  144. package/src/runtime/html/AsyncStream.js +5 -5
  145. package/src/runtime/html/BufferedWriter.js +1 -1
  146. package/src/runtime/html/StringWriter.js +1 -1
  147. package/src/runtime/html/helpers/attr.js +15 -2
  148. package/src/runtime/html/helpers/attrs.js +7 -0
  149. package/src/runtime/html/helpers/merge-attrs.js +38 -7
  150. package/src/runtime/html/hot-reload.js +1 -1
  151. package/src/runtime/html/index.js +2 -2
  152. package/src/runtime/renderable.js +5 -2
  153. package/src/runtime/vdom/AsyncVDOMBuilder.js +2 -2
  154. package/src/runtime/vdom/VComponent.js +1 -1
  155. package/src/runtime/vdom/VDocumentFragment.js +1 -1
  156. package/src/runtime/vdom/VElement.js +17 -6
  157. package/src/runtime/vdom/VFragment.js +1 -1
  158. package/src/runtime/vdom/VNode.js +1 -1
  159. package/src/runtime/vdom/VText.js +1 -1
  160. package/src/runtime/vdom/helpers/attrs.js +26 -6
  161. package/src/runtime/vdom/helpers/merge-attrs.js +16 -0
  162. package/src/runtime/vdom/hot-reload.js +1 -1
  163. package/src/runtime/vdom/index.js +2 -2
  164. package/src/runtime/vdom/morphdom/fragment.js +1 -1
  165. package/src/runtime/vdom/morphdom/specialElHandlers.js +1 -1
  166. package/src/taglib/index.js +1 -1
  167. package/tags-html.d.ts +9 -0
@@ -8,6 +8,7 @@ var createFragmentNode =
8
8
  var ComponentDef = require("../../../runtime/components/ComponentDef");
9
9
  var domData = require("../../../runtime/components/dom-data");
10
10
  var componentsUtil = require("@internal/components-util");
11
+ var loader = require("@internal/loader");
11
12
  var componentLookup = componentsUtil.___componentLookup;
12
13
  var addComponentRootToKeyedElements =
13
14
  componentsUtil.___addComponentRootToKeyedElements;
@@ -72,13 +73,23 @@ function addPendingDef(def, type, meta, host, runtimeId) {
72
73
  ]);
73
74
  }
74
75
 
75
- function load(typeName) {
76
+ function load(typeName, isLegacy) {
76
77
  var target = loaded[typeName];
77
78
  if (!target) {
78
79
  target = registered[typeName];
79
80
 
80
81
  if (target) {
81
82
  target = target();
83
+ } else if (isLegacy) {
84
+ target = exports.___legacy.load(typeName);
85
+ } else {
86
+ target = loader(typeName);
87
+ // eslint-disable-next-line no-constant-condition
88
+ if ("MARKO_DEBUG") {
89
+ complain(
90
+ "Looks like you used `require:` in your browser.json to load a component. This requires that Marko has knowledge of how lasso generates paths and will be removed in a future version. `marko-dependencies:/path/to/template.marko` should be used instead."
91
+ );
92
+ }
82
93
  }
83
94
 
84
95
  if (!target) {
@@ -91,14 +102,14 @@ function load(typeName) {
91
102
  return target;
92
103
  }
93
104
 
94
- function getComponentClass(typeName) {
105
+ function getComponentClass(typeName, isLegacy) {
95
106
  var ComponentClass = componentTypes[typeName];
96
107
 
97
108
  if (ComponentClass) {
98
109
  return ComponentClass;
99
110
  }
100
111
 
101
- ComponentClass = load(typeName);
112
+ ComponentClass = load(typeName, isLegacy);
102
113
 
103
114
  ComponentClass = ComponentClass.Component || ComponentClass;
104
115
 
@@ -124,6 +135,7 @@ function getComponentClass(typeName) {
124
135
  .replace(/^[^a-z$_]/i, "_$&")
125
136
  .replace(/[^0-9a-z$_]+/gi, "_");
126
137
  className = className[0].toUpperCase() + className.slice(1);
138
+ // eslint-disable-next-line no-unused-vars
127
139
  var OldComponentClass = ComponentClass;
128
140
  ComponentClass = {
129
141
  [className]: function (id, doc) {
@@ -138,8 +150,8 @@ function getComponentClass(typeName) {
138
150
  return ComponentClass;
139
151
  }
140
152
 
141
- function createComponent(typeName, id) {
142
- var ComponentClass = getComponentClass(typeName);
153
+ function createComponent(typeName, id, isLegacy) {
154
+ var ComponentClass = getComponentClass(typeName, isLegacy);
143
155
  return new ComponentClass(id);
144
156
  }
145
157
 
@@ -290,6 +302,10 @@ function addDOMEventListeners(
290
302
  function initComponent(componentDef, host) {
291
303
  var component = componentDef.___component;
292
304
 
305
+ if (!component || !component.___isComponent) {
306
+ return; // legacy
307
+ }
308
+
293
309
  component.___reset();
294
310
  component.___host = host;
295
311
 
@@ -479,7 +495,18 @@ function initServerRendered(renderedComponents, host) {
479
495
  .map(function (componentDef) {
480
496
  var typeName = meta.___types[componentDef[1]];
481
497
 
482
- return registered[typeName]
498
+ return (
499
+ registered[typeName] ||
500
+ document.readyState === "complete" ||
501
+ (
502
+ // loader.runtime is only going to exist for lasso apps
503
+ // this code is used to detect if a module was registered
504
+ // via a browser.json but not executed.
505
+ loader.runtime &&
506
+ loader.runtime.resolve &&
507
+ loader.runtime.resolve(typeName)
508
+ )
509
+ )
483
510
  ? tryHydrateComponent(componentDef, meta, host, runtimeId)
484
511
  : addPendingDef(componentDef, typeName, meta, host, runtimeId);
485
512
  })
@@ -5,6 +5,16 @@ function nextComponentIdProvider(out) {
5
5
  var prefix = out.global.componentIdPrefix || out.global.widgetIdPrefix || "s"; // "s" is for server (we use "b" for the browser)
6
6
  var nextId = 0;
7
7
 
8
+ // eslint-disable-next-line no-constant-condition
9
+ if ("MARKO_DEBUG") {
10
+ if (out.global.widgetIdPrefix) {
11
+ require("complain")(
12
+ "$global.widgetIdPrefix is deprecated. use $global.componentIdPrefix instead.",
13
+ { location: false }
14
+ );
15
+ }
16
+ }
17
+
8
18
  return function nextComponentId() {
9
19
  return prefix + nextId++;
10
20
  };
@@ -66,7 +66,7 @@ var proto = (RenderResult.prototype = {
66
66
  toString: function () {
67
67
  return this.___out.toString();
68
68
  },
69
- document: typeof document === "object" && document
69
+ document: typeof document === "object" && document,
70
70
  });
71
71
 
72
72
  Object.defineProperty(proto, "html", {
@@ -78,7 +78,7 @@ Object.defineProperty(proto, "html", {
78
78
  );
79
79
  }
80
80
  return this.toString();
81
- }
81
+ },
82
82
  });
83
83
 
84
84
  Object.defineProperty(proto, "context", {
@@ -90,7 +90,7 @@ Object.defineProperty(proto, "context", {
90
90
  );
91
91
  }
92
92
  return this.___out;
93
- }
93
+ },
94
94
  });
95
95
 
96
96
  // Add all of the following DOM methods to Component.prototype:
@@ -27,7 +27,7 @@ var slice = Array.prototype.slice;
27
27
 
28
28
  var COMPONENT_SUBSCRIBE_TO_OPTIONS;
29
29
  var NON_COMPONENT_SUBSCRIBE_TO_OPTIONS = {
30
- addDestroyListener: false
30
+ addDestroyListener: false,
31
31
  };
32
32
 
33
33
  var emit = EventEmitter.prototype.emit;
@@ -247,19 +247,17 @@ Component.prototype = componentProto = {
247
247
  },
248
248
  getEl: function (key, index) {
249
249
  if (key) {
250
- var keyedElement =
251
- this.___keyedElements["@" + resolveKeyHelper(key, index)];
252
-
253
- // eslint-disable-next-line no-constant-condition
254
- if ("MARKO_DEBUG") {
255
- if (
256
- keyedElement &&
257
- keyedElement.nodeType !== 1 /* Node.ELEMENT_NODE */
258
- ) {
259
- throw new Error(
260
- "Using 'getEl(key)' to get a component instance is not supported, did you mean 'getComponent(key)'?"
250
+ var resolvedKey = resolveKeyHelper(key, index);
251
+ var keyedElement = this.___keyedElements["@" + resolvedKey];
252
+ if (keyedElement && keyedElement.nodeType === 12 /** FRAGMENT_NODE */) {
253
+ // eslint-disable-next-line no-constant-condition
254
+ if ("MARKO_DEBUG") {
255
+ complain(
256
+ "Accessing the elements of a child component using 'component.getEl' is deprecated."
261
257
  );
262
258
  }
259
+
260
+ return walkFragments(keyedElement);
263
261
  }
264
262
 
265
263
  return keyedElement;
@@ -281,15 +279,15 @@ Component.prototype = componentProto = {
281
279
  },
282
280
  getComponent: function (key, index) {
283
281
  var rootNode = this.___keyedElements["@" + resolveKeyHelper(key, index)];
284
- // eslint-disable-next-line no-constant-condition
285
- if ("MARKO_DEBUG") {
286
- if (/\[\]$/.test(key)) {
287
- throw new Error(
282
+ if (/\[\]$/.test(key)) {
283
+ // eslint-disable-next-line no-constant-condition
284
+ if ("MARKO_DEBUG") {
285
+ complain(
288
286
  "A repeated key[] was passed to getComponent. Use a non-repeating key if there is only one of these components."
289
287
  );
290
288
  }
289
+ rootNode = rootNode && rootNode[Object.keys(rootNode)[0]];
291
290
  }
292
-
293
291
  return rootNode && componentsByDOMNode.get(rootNode);
294
292
  },
295
293
  getComponents: function (key) {
@@ -636,7 +634,7 @@ Component.prototype = componentProto = {
636
634
  ___emitDestroy() {
637
635
  this.onDestroy && this.onDestroy();
638
636
  this.___emit("destroy");
639
- }
637
+ },
640
638
  };
641
639
 
642
640
  componentProto.elId = componentProto.getElId;
@@ -11,6 +11,8 @@ var EMPTY_OBJECT = {};
11
11
 
12
12
  var FLAG_WILL_RERENDER_IN_BROWSER = 1;
13
13
  var FLAG_HAS_RENDER_BODY = 2;
14
+ var FLAG_IS_LEGACY = 4;
15
+ var FLAG_OLD_HYDRATE_NO_CREATE = 8;
14
16
 
15
17
  /**
16
18
  * A ComponentDef is used to hold the metadata collected at runtime for
@@ -81,7 +83,7 @@ ComponentDef.prototype = {
81
83
 
82
84
  get ___type() {
83
85
  return this.___component.___type;
84
- }
86
+ },
85
87
  };
86
88
 
87
89
  ComponentDef.prototype.nk = ComponentDef.prototype.___nextKey;
@@ -93,19 +95,31 @@ ComponentDef.___deserialize = function (o, types, global, registry) {
93
95
  var extra = o[3] || EMPTY_OBJECT;
94
96
 
95
97
  var state = extra.s;
96
- var componentProps = extra.w;
98
+ var componentProps = extra.w || EMPTY_OBJECT;
97
99
  var flags = extra.f;
98
- var component = registry.___createComponent(typeName, id);
100
+ var isLegacy = flags & FLAG_IS_LEGACY;
101
+ var renderBody = flags & FLAG_HAS_RENDER_BODY ? w10Noop : extra.r;
102
+
103
+ var component =
104
+ typeName /* legacy */ &&
105
+ registry.___createComponent(typeName, id, isLegacy);
99
106
 
100
107
  // Prevent newly created component from being queued for update since we area
101
108
  // just building it from the server info
102
109
  component.___updateQueued = true;
103
110
 
104
- if (flags & FLAG_HAS_RENDER_BODY) {
105
- (input || (input = {})).renderBody = w10Noop;
111
+ if (isLegacy) {
112
+ component.widgetConfig = componentProps;
113
+ component.___widgetBody = renderBody;
114
+ } else if (renderBody) {
115
+ (input || (input = {})).renderBody = renderBody;
106
116
  }
107
117
 
108
- if (flags & FLAG_WILL_RERENDER_IN_BROWSER) {
118
+ if (
119
+ !isLegacy &&
120
+ flags & FLAG_WILL_RERENDER_IN_BROWSER &&
121
+ !(flags & FLAG_OLD_HYDRATE_NO_CREATE)
122
+ ) {
109
123
  if (component.onCreate) {
110
124
  component.onCreate(input, { global: global });
111
125
  }
@@ -125,7 +139,7 @@ ComponentDef.___deserialize = function (o, types, global, registry) {
125
139
  component.state = state;
126
140
  }
127
141
 
128
- if (componentProps) {
142
+ if (!isLegacy && componentProps) {
129
143
  extend(component, componentProps);
130
144
  }
131
145
  }
@@ -148,7 +162,7 @@ ComponentDef.___deserialize = function (o, types, global, registry) {
148
162
  id: id,
149
163
  ___component: component,
150
164
  ___domEvents: extra.d,
151
- ___flags: extra.f || 0
165
+ ___flags: extra.f || 0,
152
166
  };
153
167
  };
154
168
 
@@ -47,7 +47,7 @@ ComponentsContext.prototype = {
47
47
  this.___out.global.___components = undefined;
48
48
 
49
49
  return componentDefs;
50
- }
50
+ },
51
51
  };
52
52
 
53
53
  function getComponentsContext(out) {
@@ -9,7 +9,7 @@ function ensure(state, propertyName) {
9
9
  },
10
10
  set: function (value) {
11
11
  this.___set(propertyName, value, false /* ensure:false */);
12
- }
12
+ },
13
13
  });
14
14
  }
15
15
  }
@@ -99,7 +99,7 @@ State.prototype = {
99
99
  },
100
100
  toJSON: function () {
101
101
  return this.___raw;
102
- }
102
+ },
103
103
  };
104
104
 
105
105
  module.exports = State;
@@ -48,7 +48,7 @@ function handleNodeDetach(node) {
48
48
  if (parentNode) {
49
49
  parentNode.removeChild(node);
50
50
  }
51
- }
51
+ },
52
52
  });
53
53
 
54
54
  return allowDetach;
@@ -4,5 +4,5 @@ module.exports = {
4
4
  ___componentByDOMNode: new WeakMap(),
5
5
  ___detachedByDOMNode: new WeakMap(),
6
6
  ___keyByDOMNode: new WeakMap(),
7
- ___ssrKeyedElementsByComponentId: {}
7
+ ___ssrKeyedElementsByComponentId: {},
8
8
  };
@@ -0,0 +1,9 @@
1
+ {
2
+ "dependencies": [
3
+ {
4
+ "type": "require",
5
+ "path": "./index",
6
+ "run": true
7
+ }
8
+ ]
9
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Define a new UI component that includes component and renderer.
3
+ *
4
+ * @param {Object} def The definition of the UI component (component methods, component constructor, rendering methods, etc.)
5
+ * @return {Component} The resulting Component with renderer
6
+ */
7
+ var defineRenderer;
8
+ var defineWidget;
9
+
10
+ module.exports = function defineComponent(def) {
11
+ // eslint-disable-next-line no-constant-condition
12
+ if ("MARKO_DEBUG") {
13
+ require("complain")("defineComponent is deprecated");
14
+ }
15
+
16
+ if (def.___isComponent) {
17
+ return def;
18
+ }
19
+
20
+ var renderer;
21
+
22
+ if (def.template || def.renderer) {
23
+ renderer = defineRenderer(def);
24
+ } else {
25
+ throw new Error('Expected "template" or "renderer"');
26
+ }
27
+
28
+ return defineWidget(def, renderer);
29
+ };
30
+
31
+ defineRenderer = require("./defineRenderer-legacy");
32
+ defineWidget = require("./defineWidget-legacy");
@@ -0,0 +1,171 @@
1
+ var complain = "MARKO_DEBUG" && require("complain");
2
+ var makeRenderable = require("../../renderable");
3
+ var getComponentsContext =
4
+ require("../ComponentsContext").___getComponentsContext;
5
+ var componentLookup = require("@internal/components-util").___componentLookup;
6
+ var modernRenderer = require("../renderer");
7
+ var loader = require("@internal/loader");
8
+ var resolveComponentKey = modernRenderer.___resolveComponentKey;
9
+
10
+ module.exports = function defineRenderer(renderingLogic) {
11
+ var renderer = renderingLogic.renderer;
12
+
13
+ // eslint-disable-next-line no-constant-condition
14
+ if ("MARKO_DEBUG") {
15
+ require("complain")("defineRenderer is deprecated");
16
+ }
17
+
18
+ if (renderer && renderer.___isRenderer) {
19
+ return renderer;
20
+ }
21
+
22
+ var template = renderingLogic.template;
23
+
24
+ if (typeof template === "string") {
25
+ template = loader(template);
26
+ }
27
+
28
+ if (!renderer) {
29
+ var getInitialProps;
30
+ var getTemplateData;
31
+ var getInitialState;
32
+ var getWidgetConfig;
33
+ var getInitialBody;
34
+
35
+ if (renderingLogic) {
36
+ getInitialProps = renderingLogic.getInitialProps;
37
+ getTemplateData = renderingLogic.getTemplateData;
38
+ getInitialState = renderingLogic.getInitialState;
39
+ getWidgetConfig = renderingLogic.getWidgetConfig;
40
+ getInitialBody = renderingLogic.getInitialBody;
41
+ }
42
+
43
+ // Create a renderer function that takes care of translating
44
+ // the input properties to a view state. Also, this renderer
45
+ // takes care of re-using existing components.
46
+ renderer = function renderer(input, out) {
47
+ var componentsContext = getComponentsContext(out);
48
+ var globalComponentsContext = componentsContext.___globalContext;
49
+ var component = globalComponentsContext.___rerenderComponent;
50
+ var isReceivingNewInput = !component || component.___isReceivingNewInput;
51
+ var parentComponentDef;
52
+
53
+ if (component) {
54
+ component.___isReceivingNewInput = false;
55
+ }
56
+
57
+ // Render the template associated with the component using the final template
58
+ // data that we constructed
59
+ var newProps = input;
60
+ var widgetConfig;
61
+ var widgetState;
62
+ var widgetBody;
63
+ var id;
64
+
65
+ if (!component && componentLookup) {
66
+ var key = out.___assignedKey;
67
+
68
+ if (
69
+ (parentComponentDef = componentsContext.___componentDef) &&
70
+ key != null
71
+ ) {
72
+ id = resolveComponentKey(key.toString(), parentComponentDef);
73
+ } else if (parentComponentDef) {
74
+ id = parentComponentDef.___nextComponentId();
75
+ } else {
76
+ id = globalComponentsContext.___nextComponentId();
77
+ }
78
+
79
+ component = componentLookup[id];
80
+ }
81
+
82
+ if (isReceivingNewInput) {
83
+ // If we do not have state then we need to go through the process
84
+ // of converting the input to a widget state, or simply normalizing
85
+ // the input using getInitialProps
86
+
87
+ if (getInitialProps) {
88
+ // This optional method is used to normalize input state
89
+ newProps = getInitialProps(newProps, out) || {};
90
+ }
91
+
92
+ if (getInitialState) {
93
+ // This optional method is used to derive the widget state
94
+ // from the input properties
95
+ widgetState = getInitialState(newProps, out);
96
+ }
97
+
98
+ if (getInitialBody) {
99
+ // If we have widget a widget body then pass it to the template
100
+ // so that it is available to the widget tag and can be inserted
101
+ // at the w-body marker
102
+ widgetBody = getInitialBody(newProps, out);
103
+ } else {
104
+ // Default to using the nested content as the widget body
105
+ // getInitialBody was not implemented
106
+ widgetBody = newProps.renderBody;
107
+ }
108
+ } else if (component) {
109
+ newProps = newProps || component.___widgetProps;
110
+ widgetBody = component.___widgetBody;
111
+ widgetState = component.___rawState;
112
+ widgetConfig = component.widgetConfig;
113
+ }
114
+
115
+ // Use getTemplateData(state, props, out) to get the template
116
+ // data. If that method is not provided then just use the
117
+ // the state (if provided) or the input data.
118
+ var templateData = clone(
119
+ getTemplateData
120
+ ? getTemplateData(widgetState, newProps, out)
121
+ : widgetState || newProps
122
+ );
123
+
124
+ if (isReceivingNewInput && getWidgetConfig) {
125
+ // If getWidgetConfig() was implemented then use that to
126
+ // get the widget config. The widget config will be passed
127
+ // to the widget constructor. If rendered on the server the
128
+ // widget config will be serialized.
129
+ widgetConfig = getWidgetConfig(newProps, out);
130
+ }
131
+ // eslint-disable-next-line no-constant-condition
132
+ if ("MARKO_DEBUG") {
133
+ if (widgetState && "widgetState" in templateData) {
134
+ complain("Passing widgetState as input is deprecated.");
135
+ }
136
+
137
+ if (widgetConfig && "widgetConfig" in templateData) {
138
+ complain("Passing widgetConfig as input is deprecated.");
139
+ }
140
+ }
141
+
142
+ templateData.widgetProps = newProps;
143
+ widgetBody && (templateData.renderBody = widgetBody);
144
+ widgetState && (templateData.widgetState = widgetState);
145
+ widgetConfig && (templateData.widgetConfig = widgetConfig);
146
+
147
+ template._(templateData, out, id, renderingLogic);
148
+ };
149
+ }
150
+
151
+ renderer.___isRenderer = true;
152
+ renderer.createOut = template ? template.createOut : renderingLogic.createOut;
153
+ renderer.template = template;
154
+
155
+ makeRenderable(renderer, renderer);
156
+ renderer.render = renderer.render.bind(this);
157
+
158
+ return renderer;
159
+ };
160
+
161
+ function clone(src) {
162
+ var result = {};
163
+
164
+ if (src) {
165
+ for (var key in src) {
166
+ result[key] = src[key];
167
+ }
168
+ }
169
+
170
+ return result;
171
+ }
@@ -0,0 +1 @@
1
+ module.exports = require("@internal/components-define-widget-legacy");
@@ -0,0 +1,3 @@
1
+ var patch = require("./").patch;
2
+ var Template = require("../../../html").Template;
3
+ patch(Template);