tutuca 0.9.19 → 0.9.20

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.
@@ -1701,9 +1701,14 @@ class ComponentStack {
1701
1701
  comp.scope = this.enter();
1702
1702
  this.comps.registerComponent(comp);
1703
1703
  this.byName[comp.name] = comp;
1704
- const alias = aliases[comp.name];
1705
- if (alias)
1704
+ }
1705
+ for (const alias in aliases) {
1706
+ const comp = this.byName[aliases[alias]];
1707
+ console.assert(this.byName[alias] === undefined, "alias overrides component", alias);
1708
+ if (comp !== undefined)
1706
1709
  this.byName[alias] = comp;
1710
+ else
1711
+ console.warn("alias", alias, "to inexistent component", aliases[alias]);
1707
1712
  }
1708
1713
  }
1709
1714
  registerMacros(macros) {
@@ -2038,9 +2043,10 @@ class Transactor {
2038
2043
  }
2039
2044
  }
2040
2045
  function mkReq404(name) {
2041
- return () => {
2046
+ const fn = () => {
2042
2047
  throw new Error(`Request not found: ${name}`);
2043
2048
  };
2049
+ return { fn };
2044
2050
  }
2045
2051
  function nullHandler() {
2046
2052
  return this;
@@ -2681,15 +2687,13 @@ class App {
2681
2687
  _dispatchEvent(e) {
2682
2688
  const { type } = e;
2683
2689
  const isDrag = type === "dragover" || type === "dragstart" || type === "dragend";
2684
- const { rootNode: root, maxEventNodeDepth: maxDepth, comps } = this;
2690
+ const { rootNode: root, maxEventNodeDepth: maxDepth, comps, transactor } = this;
2685
2691
  const [path, handlers] = Path.fromEvent(e, root, maxDepth, comps, !isDrag);
2686
2692
  if (isDrag)
2687
2693
  this._handleDragEvent(e, type, path);
2688
- if (path !== null && handlers !== null) {
2689
- for (const handler of handlers) {
2690
- this.transactor.transactInputNow(path, e, handler, this.dragInfo);
2691
- }
2692
- }
2694
+ if (path !== null && handlers !== null)
2695
+ for (const handler of handlers)
2696
+ transactor.transactInputNow(path, e, handler, this.dragInfo);
2693
2697
  }
2694
2698
  _handleTouchEvent(e) {
2695
2699
  const { type } = e;
@@ -7932,7 +7936,7 @@ async function compileClassesToStyleText(app, compileClasses, extraCSSClasses, C
7932
7936
  }
7933
7937
  return await compileClasses(Array.from(classes));
7934
7938
  }
7935
- // src/lint/index.js
7939
+ // tools/core/lint-check.js
7936
7940
  var ALT_HANDLER_NOT_DEFINED = "ALT_HANDLER_NOT_DEFINED";
7937
7941
  var RENDER_IT_OUTSIDE_OF_LOOP = "RENDER_IT_OUTSIDE_OF_LOOP";
7938
7942
  var UNKNOWN_EVENT_MODIFIER = "UNKNOWN_EVENT_MODIFIER";
@@ -8176,6 +8180,232 @@ class LintParseContext extends ParseContext {
8176
8180
  this.attrs.push({ attrs, wrapperAttrs, textChild });
8177
8181
  }
8178
8182
  }
8183
+ // tools/core/results.js
8184
+ class ComponentDocs {
8185
+ constructor({ items }) {
8186
+ this.items = items;
8187
+ }
8188
+ }
8189
+
8190
+ // tools/core/docs.js
8191
+ function getSignature(name, fn) {
8192
+ const s = fn.toString();
8193
+ const m = s.match(/^(?:\w+|function\s*\w*)\s*\(([^)]*)\)/);
8194
+ const params = m ? m[1].trim() : "";
8195
+ return `${name}(${params})`;
8196
+ }
8197
+ function getFieldMethods(field) {
8198
+ const { name, type } = field;
8199
+ const uname = name[0].toUpperCase() + name.slice(1);
8200
+ const methods = [
8201
+ { name: `set${uname}`, sig: `set${uname}(v)`, desc: "Set value" },
8202
+ {
8203
+ name: `update${uname}`,
8204
+ sig: `update${uname}(fn)`,
8205
+ desc: "Update value with function"
8206
+ },
8207
+ {
8208
+ name: `reset${uname}`,
8209
+ sig: `reset${uname}()`,
8210
+ desc: "Reset to default value"
8211
+ },
8212
+ {
8213
+ name: `is${uname}NotSet`,
8214
+ sig: `is${uname}NotSet()`,
8215
+ desc: "Check if null/undefined"
8216
+ },
8217
+ {
8218
+ name: `is${uname}Set`,
8219
+ sig: `is${uname}Set()`,
8220
+ desc: "Check if not null/undefined"
8221
+ }
8222
+ ];
8223
+ switch (type) {
8224
+ case "bool":
8225
+ methods[0].desc = "Set value (coerces to boolean)";
8226
+ methods.push({
8227
+ name: `toggle${uname}`,
8228
+ sig: `toggle${uname}()`,
8229
+ desc: "Toggle boolean value"
8230
+ });
8231
+ break;
8232
+ case "text":
8233
+ methods.push({
8234
+ name: `is${uname}Empty`,
8235
+ sig: `is${uname}Empty()`,
8236
+ desc: "Check if string is empty"
8237
+ }, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get string length" });
8238
+ break;
8239
+ case "list":
8240
+ methods.push({
8241
+ name: `is${uname}Empty`,
8242
+ sig: `is${uname}Empty()`,
8243
+ desc: "Check if list is empty"
8244
+ }, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get list size" }, {
8245
+ name: `setIn${uname}At`,
8246
+ sig: `setIn${uname}At(i, v)`,
8247
+ desc: "Set item at index"
8248
+ }, {
8249
+ name: `getIn${uname}At`,
8250
+ sig: `getIn${uname}At(i, defaultValue)`,
8251
+ desc: "Get item at index"
8252
+ }, {
8253
+ name: `updateIn${uname}At`,
8254
+ sig: `updateIn${uname}At(i, fn)`,
8255
+ desc: "Update item at index with function"
8256
+ }, {
8257
+ name: `deleteIn${uname}At`,
8258
+ sig: `deleteIn${uname}At(i)`,
8259
+ desc: "Delete item at index"
8260
+ }, {
8261
+ name: `removeIn${uname}At`,
8262
+ sig: `removeIn${uname}At(i)`,
8263
+ desc: "Delete item at index (alias)"
8264
+ }, {
8265
+ name: `pushIn${uname}`,
8266
+ sig: `pushIn${uname}(v)`,
8267
+ desc: "Push item to end"
8268
+ }, {
8269
+ name: `insertIn${uname}At`,
8270
+ sig: `insertIn${uname}At(i, v)`,
8271
+ desc: "Insert item at index"
8272
+ });
8273
+ break;
8274
+ case "map":
8275
+ case "omap": {
8276
+ const label = type === "omap" ? "ordered map" : "map";
8277
+ methods.push({
8278
+ name: `is${uname}Empty`,
8279
+ sig: `is${uname}Empty()`,
8280
+ desc: `Check if ${label} is empty`
8281
+ }, {
8282
+ name: `${name}Len`,
8283
+ sig: `${name}Len()`,
8284
+ desc: `Get ${label} size`
8285
+ }, {
8286
+ name: `setIn${uname}At`,
8287
+ sig: `setIn${uname}At(key, v)`,
8288
+ desc: "Set value at key"
8289
+ }, {
8290
+ name: `getIn${uname}At`,
8291
+ sig: `getIn${uname}At(key, defaultValue)`,
8292
+ desc: "Get value at key"
8293
+ }, {
8294
+ name: `updateIn${uname}At`,
8295
+ sig: `updateIn${uname}At(key, fn)`,
8296
+ desc: "Update value at key with function"
8297
+ }, {
8298
+ name: `deleteIn${uname}At`,
8299
+ sig: `deleteIn${uname}At(key)`,
8300
+ desc: "Delete entry at key"
8301
+ }, {
8302
+ name: `removeIn${uname}At`,
8303
+ sig: `removeIn${uname}At(key)`,
8304
+ desc: "Delete entry at key (alias)"
8305
+ });
8306
+ break;
8307
+ }
8308
+ case "set":
8309
+ methods.push({
8310
+ name: `is${uname}Empty`,
8311
+ sig: `is${uname}Empty()`,
8312
+ desc: "Check if set is empty"
8313
+ }, { name: `${name}Len`, sig: `${name}Len()`, desc: "Get set size" }, {
8314
+ name: `addIn${uname}`,
8315
+ sig: `addIn${uname}(v)`,
8316
+ desc: "Add value to set"
8317
+ }, {
8318
+ name: `deleteIn${uname}`,
8319
+ sig: `deleteIn${uname}(v)`,
8320
+ desc: "Remove value from set"
8321
+ }, {
8322
+ name: `removeIn${uname}`,
8323
+ sig: `removeIn${uname}(v)`,
8324
+ desc: "Remove value from set (alias)"
8325
+ }, {
8326
+ name: `hasIn${uname}`,
8327
+ sig: `hasIn${uname}(v)`,
8328
+ desc: "Check if value is in set"
8329
+ }, {
8330
+ name: `toggleIn${uname}`,
8331
+ sig: `toggleIn${uname}(v)`,
8332
+ desc: "Toggle value in set"
8333
+ });
8334
+ break;
8335
+ }
8336
+ return methods;
8337
+ }
8338
+ function serializeDefault(v) {
8339
+ if (v === null || v === undefined)
8340
+ return v;
8341
+ if (v?.toJS)
8342
+ return v.toJS();
8343
+ return v;
8344
+ }
8345
+ function getComponentDoc(comp) {
8346
+ const meta = comp.Class.getMetaClass();
8347
+ const { fields, name, methods } = meta;
8348
+ const userMethods = Object.keys(methods).map((k) => ({
8349
+ name: k,
8350
+ sig: getSignature(k, methods[k])
8351
+ }));
8352
+ const inputHandlers = Object.keys(comp.input).map((k) => ({
8353
+ name: k,
8354
+ sig: getSignature(k, comp.input[k])
8355
+ }));
8356
+ const fieldDocs = [];
8357
+ for (const fieldName in fields) {
8358
+ const field = fields[fieldName];
8359
+ fieldDocs.push({
8360
+ name: fieldName,
8361
+ type: field.type,
8362
+ default: serializeDefault(field.defaultValue),
8363
+ methods: getFieldMethods(field)
8364
+ });
8365
+ }
8366
+ return { name, methods: userMethods, input: inputHandlers, fields: fieldDocs };
8367
+ }
8368
+ function getComponentsDocs(components) {
8369
+ return components.map((comp) => getComponentDoc(comp));
8370
+ }
8371
+ function docComponents(normalized, { name = null } = {}) {
8372
+ const comps = normalized.components;
8373
+ const picked = name === null ? comps : comps.filter((c) => c.name === name);
8374
+ return new ComponentDocs({ items: getComponentsDocs(picked) });
8375
+ }
8376
+ // tools/format/lint.js
8377
+ function lintIdToMessage(id, info) {
8378
+ switch (id) {
8379
+ case "RENDER_IT_OUTSIDE_OF_LOOP":
8380
+ return "render-it used outside of a loop";
8381
+ case "UNKNOWN_EVENT_MODIFIER":
8382
+ return `Unknown modifier '${info.modifier}' on '${info.name}' event`;
8383
+ case "UNKNOWN_HANDLER_ARG_NAME":
8384
+ return `Unknown handler argument '${info.name}'`;
8385
+ case "INPUT_HANDLER_NOT_IMPLEMENTED":
8386
+ return `Input handler '${info.name}' is not implemented`;
8387
+ case "INPUT_HANDLER_METHOD_NOT_IMPLEMENTED":
8388
+ return `Method '.${info.name}' is not implemented`;
8389
+ case "INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD":
8390
+ return `'${info.name}' exists as input handler — use without '.' prefix`;
8391
+ case "INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER":
8392
+ return `'${info.name}' exists as method — use with '.' prefix`;
8393
+ case "FIELD_VAL_NOT_DEFINED":
8394
+ return `Field '.${info.name}' is not defined`;
8395
+ case "COMPUTED_VAL_NOT_DEFINED":
8396
+ return `Computed property '$${info.name}' is not defined`;
8397
+ case "UNKNOWN_REQUEST_NAME":
8398
+ return `Unknown request '!${info.name}'`;
8399
+ case "UNKNOWN_COMPONENT_NAME":
8400
+ return `Unknown component '${info.name}'`;
8401
+ case "ALT_HANDLER_NOT_DEFINED":
8402
+ return `Alter handler '${info.name}' is not defined`;
8403
+ case "LINT_ERROR":
8404
+ return info.message;
8405
+ default:
8406
+ return id;
8407
+ }
8408
+ }
8179
8409
 
8180
8410
  // dev.js
8181
8411
  class LintClassCollectorCtx extends ParseCtxClassSetCollector {
@@ -8211,6 +8441,7 @@ export {
8211
8441
  mergeDeep$1 as mergeDeep,
8212
8442
  merge$1 as merge,
8213
8443
  macro,
8444
+ lintIdToMessage,
8214
8445
  isValueObject,
8215
8446
  isStack,
8216
8447
  isSet,
@@ -8236,9 +8467,11 @@ export {
8236
8467
  hasIn$1 as hasIn,
8237
8468
  has,
8238
8469
  getIn$1 as getIn,
8470
+ getComponentsDocs,
8239
8471
  get,
8240
8472
  fromJS,
8241
8473
  fieldsByClass,
8474
+ docComponents,
8242
8475
  css,
8243
8476
  component,
8244
8477
  compileClassesToStyleText,