@marko/translator-default 5.20.2 → 5.20.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,70 +4,27 @@ var _attr = _interopRequireDefault(require("marko/src/runtime/html/helpers/attr"
4
4
  var _util = require("../util");
5
5
 
6
6
  function _default(path, attrs) {
7
- if (!attrs.length) {
8
- return _compiler.types.stringLiteral("");
9
- }
10
-
11
- const quasis = [];
12
- const expressions = [];
13
- let curString = "";
14
-
15
- let attrsObject = _compiler.types.objectExpression([]);
16
- let hasSpread = false;
17
-
18
- for (let i = 0; i < attrs.length; i++) {
19
- const attr = attrs[i];
20
- const {
21
- hub: { file },
22
- node: { name, value } } =
23
- attr;
24
-
25
- if (!name) {
26
- quasis.push(curString);
27
- curString = "";
28
- hasSpread = hasSpread || attr.type === "MarkoSpreadAttribute";
29
- attrsObject.properties.push(_compiler.types.spreadElement(value));
30
- continue;
31
- }
7
+ if (!attrs.length) return _compiler.types.stringLiteral("");
32
8
 
33
- const { confident, computed } = (0, _util.evaluateAttr)(attr);
34
-
35
- if (confident) {
36
- if (computed == null || computed === false) {
37
- continue;
38
- }
9
+ const len = attrs.length;
10
+ if (len === 0) return _compiler.types.stringLiteral("");
39
11
 
40
- const attrString = (0, _attr.default)(name, computed);
41
- curString += attrString;
12
+ if (attrs.some((attr) => !attr.node.name)) {
13
+ const attrsObject = _compiler.types.objectExpression([]);
14
+ for (let i = 0; i < len; i++) {
15
+ const {
16
+ node: { name, value } } =
17
+ attrs[i];
42
18
 
43
- if (attrString) {
19
+ if (name) {
44
20
  attrsObject.properties.push(
45
21
  _compiler.types.objectProperty(_compiler.types.stringLiteral(name), value));
46
22
 
23
+ } else {
24
+ mergeSpread(attrsObject.properties, value);
47
25
  }
48
- } else {
49
- const args = [_compiler.types.stringLiteral(name), value];
50
- quasis.push(curString);
51
- curString = "";
52
-
53
- attrsObject.properties.push(
54
- _compiler.types.objectProperty(_compiler.types.stringLiteral(name), value));
55
-
56
-
57
- expressions.push(
58
- _compiler.types.callExpression(
59
- (0, _babelUtils.importDefault)(
60
- file,
61
- "marko/src/runtime/html/helpers/attr.js",
62
- "marko_attr"),
63
-
64
- args));
65
-
66
-
67
26
  }
68
- }
69
- quasis.push(curString);
70
- if (hasSpread) {
27
+
71
28
  return _compiler.types.callExpression(
72
29
  (0, _babelUtils.importDefault)(
73
30
  path.hub.file,
@@ -75,15 +32,78 @@ function _default(path, attrs) {
75
32
  "marko_attrs"),
76
33
 
77
34
  [
78
- attrsObject.properties.length === 1 ?
35
+ attrsObject.properties.length === 1 &&
36
+ _compiler.types.isSpreadElement(attrsObject.properties[0]) ?
79
37
  attrsObject.properties[0].argument :
80
38
  attrsObject]);
81
39
 
82
40
 
83
- } else if (expressions.length) {
84
- return (0, _babelUtils.normalizeTemplateString)(quasis, ...expressions);
85
41
  } else {
86
- return _compiler.types.stringLiteral(quasis.join(""));
42
+ const file = path.hub.file;
43
+ const quasis = [];
44
+ const expressions = [];
45
+ const attrValues = new Map();
46
+ let curString = "";
47
+
48
+ // Remove duplicate attrs so last one wins.
49
+ for (let i = len; i--;) {
50
+ const attr = attrs[i];
51
+ const { name, value } = attr.node;
52
+ if (attrValues.has(name)) continue;
53
+ const { confident, computed } = (0, _util.evaluateAttr)(attr);
54
+ attrValues.set(name, {
55
+ confident,
56
+ computed,
57
+ value });
58
+
59
+ }
60
+
61
+ for (const [name, { confident, computed, value }] of [
62
+ ...attrValues].
63
+ reverse()) {
64
+ if (confident) {
65
+ if (computed == null || computed === false) {
66
+ continue;
67
+ }
68
+
69
+ curString += (0, _attr.default)(name, computed);
70
+ } else {
71
+ quasis.push(curString);
72
+ curString = "";
73
+ expressions.push(
74
+ _compiler.types.callExpression(
75
+ (0, _babelUtils.importDefault)(
76
+ file,
77
+ "marko/src/runtime/html/helpers/attr.js",
78
+ "marko_attr"),
79
+
80
+ [_compiler.types.stringLiteral(name), value]));
81
+
82
+
83
+ }
84
+ }
85
+
86
+ quasis.push(curString);
87
+
88
+ if (expressions.length) {
89
+ return (0, _babelUtils.normalizeTemplateString)(quasis, ...expressions);
90
+ } else {
91
+ return _compiler.types.stringLiteral(quasis.join(""));
92
+ }
93
+ }
94
+ }
95
+
96
+ function mergeSpread(properties, value) {
97
+ if (_compiler.types.isObjectExpression(value)) {
98
+ for (const prop of value.properties) {
99
+ if (_compiler.types.isSpreadElement(prop)) {
100
+ mergeSpread(properties, prop.argument);
101
+ } else {
102
+ properties.push(prop);
103
+ }
104
+ }
105
+ } else {
106
+ properties.push(_compiler.types.spreadElement(value));
87
107
  }
88
108
  }
89
109
  //# sourceMappingURL=attributes.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tag/native-tag[html]/attributes.js"],"names":["path","attrs","length","t","stringLiteral","quasis","expressions","curString","attrsObject","objectExpression","hasSpread","i","attr","hub","file","node","name","value","push","type","properties","spreadElement","confident","computed","attrString","objectProperty","args","callExpression","argument","join"],"mappings":"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","sourcesContent":["import { types as t } from \"@marko/compiler\";\nimport { normalizeTemplateString, importDefault } from \"@marko/babel-utils\";\nimport attrHelper from \"marko/src/runtime/html/helpers/attr\";\nimport { evaluateAttr } from \"../util\";\n\nexport default function (path, attrs) {\n if (!attrs.length) {\n return t.stringLiteral(\"\");\n }\n\n const quasis = [];\n const expressions = [];\n let curString = \"\";\n\n let attrsObject = t.objectExpression([]);\n let hasSpread = false;\n\n for (let i = 0; i < attrs.length; i++) {\n const attr = attrs[i];\n const {\n hub: { file },\n node: { name, value }\n } = attr;\n\n if (!name) {\n quasis.push(curString);\n curString = \"\";\n hasSpread = hasSpread || attr.type === \"MarkoSpreadAttribute\";\n attrsObject.properties.push(t.spreadElement(value));\n continue;\n }\n\n const { confident, computed } = evaluateAttr(attr);\n\n if (confident) {\n if (computed == null || computed === false) {\n continue;\n }\n\n const attrString = attrHelper(name, computed);\n curString += attrString;\n\n if (attrString) {\n attrsObject.properties.push(\n t.objectProperty(t.stringLiteral(name), value)\n );\n }\n } else {\n const args = [t.stringLiteral(name), value];\n quasis.push(curString);\n curString = \"\";\n\n attrsObject.properties.push(\n t.objectProperty(t.stringLiteral(name), value)\n );\n\n expressions.push(\n t.callExpression(\n importDefault(\n file,\n \"marko/src/runtime/html/helpers/attr.js\",\n \"marko_attr\"\n ),\n args\n )\n );\n }\n }\n quasis.push(curString);\n if (hasSpread) {\n return t.callExpression(\n importDefault(\n path.hub.file,\n \"marko/src/runtime/html/helpers/attrs.js\",\n \"marko_attrs\"\n ),\n [\n attrsObject.properties.length === 1\n ? attrsObject.properties[0].argument\n : attrsObject\n ]\n );\n } else if (expressions.length) {\n return normalizeTemplateString(quasis, ...expressions);\n } else {\n return t.stringLiteral(quasis.join(\"\"));\n }\n}\n"],"file":"attributes.js"}
1
+ {"version":3,"sources":["../../../src/tag/native-tag[html]/attributes.js"],"names":["path","attrs","length","t","stringLiteral","len","some","attr","node","name","attrsObject","objectExpression","i","value","properties","push","objectProperty","mergeSpread","callExpression","hub","file","isSpreadElement","argument","quasis","expressions","attrValues","Map","curString","has","confident","computed","set","reverse","join","isObjectExpression","prop","spreadElement"],"mappings":"uJAAA;AACA;AACA;AACA;;AAEe,kBAAUA,IAAV,EAAgBC,KAAhB,EAAuB;AACpC,MAAI,CAACA,KAAK,CAACC,MAAX,EAAmB,OAAOC,gBAAEC,aAAF,CAAgB,EAAhB,CAAP;;AAEnB,QAAMC,GAAG,GAAGJ,KAAK,CAACC,MAAlB;AACA,MAAIG,GAAG,KAAK,CAAZ,EAAe,OAAOF,gBAAEC,aAAF,CAAgB,EAAhB,CAAP;;AAEf,MAAIH,KAAK,CAACK,IAAN,CAAW,CAAAC,IAAI,KAAI,CAACA,IAAI,CAACC,IAAL,CAAUC,IAA9B,CAAJ,EAAyC;AACvC,UAAMC,WAAW,GAAGP,gBAAEQ,gBAAF,CAAmB,EAAnB,CAApB;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,GAApB,EAAyBO,CAAC,EAA1B,EAA8B;AAC5B,YAAM;AACJJ,QAAAA,IAAI,EAAE,EAAEC,IAAF,EAAQI,KAAR,EADF;AAEFZ,MAAAA,KAAK,CAACW,CAAD,CAFT;;AAIA,UAAIH,IAAJ,EAAU;AACRC,QAAAA,WAAW,CAACI,UAAZ,CAAuBC,IAAvB;AACEZ,wBAAEa,cAAF,CAAiBb,gBAAEC,aAAF,CAAgBK,IAAhB,CAAjB,EAAwCI,KAAxC,CADF;;AAGD,OAJD,MAIO;AACLI,QAAAA,WAAW,CAACP,WAAW,CAACI,UAAb,EAAyBD,KAAzB,CAAX;AACD;AACF;;AAED,WAAOV,gBAAEe,cAAF;AACL;AACElB,IAAAA,IAAI,CAACmB,GAAL,CAASC,IADX;AAEE,6CAFF;AAGE,iBAHF,CADK;;AAML;AACEV,IAAAA,WAAW,CAACI,UAAZ,CAAuBZ,MAAvB,KAAkC,CAAlC;AACAC,oBAAEkB,eAAF,CAAkBX,WAAW,CAACI,UAAZ,CAAuB,CAAvB,CAAlB,CADA;AAEIJ,IAAAA,WAAW,CAACI,UAAZ,CAAuB,CAAvB,EAA0BQ,QAF9B;AAGIZ,IAAAA,WAJN,CANK,CAAP;;;AAaD,GA7BD,MA6BO;AACL,UAAMU,IAAI,GAAGpB,IAAI,CAACmB,GAAL,CAASC,IAAtB;AACA,UAAMG,MAAM,GAAG,EAAf;AACA,UAAMC,WAAW,GAAG,EAApB;AACA,UAAMC,UAAU,GAAG,IAAIC,GAAJ,EAAnB;AACA,QAAIC,SAAS,GAAG,EAAhB;;AAEA;AACA,SAAK,IAAIf,CAAC,GAAGP,GAAb,EAAkBO,CAAC,EAAnB,GAAyB;AACvB,YAAML,IAAI,GAAGN,KAAK,CAACW,CAAD,CAAlB;AACA,YAAM,EAAEH,IAAF,EAAQI,KAAR,KAAkBN,IAAI,CAACC,IAA7B;AACA,UAAIiB,UAAU,CAACG,GAAX,CAAenB,IAAf,CAAJ,EAA0B;AAC1B,YAAM,EAAEoB,SAAF,EAAaC,QAAb,KAA0B,wBAAavB,IAAb,CAAhC;AACAkB,MAAAA,UAAU,CAACM,GAAX,CAAetB,IAAf,EAAqB;AACnBoB,QAAAA,SADmB;AAEnBC,QAAAA,QAFmB;AAGnBjB,QAAAA,KAHmB,EAArB;;AAKD;;AAED,SAAK,MAAM,CAACJ,IAAD,EAAO,EAAEoB,SAAF,EAAaC,QAAb,EAAuBjB,KAAvB,EAAP,CAAX,IAAqD;AACnD,OAAGY,UADgD;AAEnDO,IAAAA,OAFmD,EAArD,EAEa;AACX,UAAIH,SAAJ,EAAe;AACb,YAAIC,QAAQ,IAAI,IAAZ,IAAoBA,QAAQ,KAAK,KAArC,EAA4C;AAC1C;AACD;;AAEDH,QAAAA,SAAS,IAAI,mBAAWlB,IAAX,EAAiBqB,QAAjB,CAAb;AACD,OAND,MAMO;AACLP,QAAAA,MAAM,CAACR,IAAP,CAAYY,SAAZ;AACAA,QAAAA,SAAS,GAAG,EAAZ;AACAH,QAAAA,WAAW,CAACT,IAAZ;AACEZ,wBAAEe,cAAF;AACE;AACEE,QAAAA,IADF;AAEE,gDAFF;AAGE,oBAHF,CADF;;AAME,SAACjB,gBAAEC,aAAF,CAAgBK,IAAhB,CAAD,EAAwBI,KAAxB,CANF,CADF;;;AAUD;AACF;;AAEDU,IAAAA,MAAM,CAACR,IAAP,CAAYY,SAAZ;;AAEA,QAAIH,WAAW,CAACtB,MAAhB,EAAwB;AACtB,aAAO,yCAAwBqB,MAAxB,EAAgC,GAAGC,WAAnC,CAAP;AACD,KAFD,MAEO;AACL,aAAOrB,gBAAEC,aAAF,CAAgBmB,MAAM,CAACU,IAAP,CAAY,EAAZ,CAAhB,CAAP;AACD;AACF;AACF;;AAED,SAAShB,WAAT,CAAqBH,UAArB,EAAiCD,KAAjC,EAAwC;AACtC,MAAIV,gBAAE+B,kBAAF,CAAqBrB,KAArB,CAAJ,EAAiC;AAC/B,SAAK,MAAMsB,IAAX,IAAmBtB,KAAK,CAACC,UAAzB,EAAqC;AACnC,UAAIX,gBAAEkB,eAAF,CAAkBc,IAAlB,CAAJ,EAA6B;AAC3BlB,QAAAA,WAAW,CAACH,UAAD,EAAaqB,IAAI,CAACb,QAAlB,CAAX;AACD,OAFD,MAEO;AACLR,QAAAA,UAAU,CAACC,IAAX,CAAgBoB,IAAhB;AACD;AACF;AACF,GARD,MAQO;AACLrB,IAAAA,UAAU,CAACC,IAAX,CAAgBZ,gBAAEiC,aAAF,CAAgBvB,KAAhB,CAAhB;AACD;AACF","sourcesContent":["import { types as t } from \"@marko/compiler\";\nimport { normalizeTemplateString, importDefault } from \"@marko/babel-utils\";\nimport attrHelper from \"marko/src/runtime/html/helpers/attr\";\nimport { evaluateAttr } from \"../util\";\n\nexport default function (path, attrs) {\n if (!attrs.length) return t.stringLiteral(\"\");\n\n const len = attrs.length;\n if (len === 0) return t.stringLiteral(\"\");\n\n if (attrs.some(attr => !attr.node.name)) {\n const attrsObject = t.objectExpression([]);\n for (let i = 0; i < len; i++) {\n const {\n node: { name, value }\n } = attrs[i];\n\n if (name) {\n attrsObject.properties.push(\n t.objectProperty(t.stringLiteral(name), value)\n );\n } else {\n mergeSpread(attrsObject.properties, value);\n }\n }\n\n return t.callExpression(\n importDefault(\n path.hub.file,\n \"marko/src/runtime/html/helpers/attrs.js\",\n \"marko_attrs\"\n ),\n [\n attrsObject.properties.length === 1 &&\n t.isSpreadElement(attrsObject.properties[0])\n ? attrsObject.properties[0].argument\n : attrsObject\n ]\n );\n } else {\n const file = path.hub.file;\n const quasis = [];\n const expressions = [];\n const attrValues = new Map();\n let curString = \"\";\n\n // Remove duplicate attrs so last one wins.\n for (let i = len; i--; ) {\n const attr = attrs[i];\n const { name, value } = attr.node;\n if (attrValues.has(name)) continue;\n const { confident, computed } = evaluateAttr(attr);\n attrValues.set(name, {\n confident,\n computed,\n value\n });\n }\n\n for (const [name, { confident, computed, value }] of [\n ...attrValues\n ].reverse()) {\n if (confident) {\n if (computed == null || computed === false) {\n continue;\n }\n\n curString += attrHelper(name, computed);\n } else {\n quasis.push(curString);\n curString = \"\";\n expressions.push(\n t.callExpression(\n importDefault(\n file,\n \"marko/src/runtime/html/helpers/attr.js\",\n \"marko_attr\"\n ),\n [t.stringLiteral(name), value]\n )\n );\n }\n }\n\n quasis.push(curString);\n\n if (expressions.length) {\n return normalizeTemplateString(quasis, ...expressions);\n } else {\n return t.stringLiteral(quasis.join(\"\"));\n }\n }\n}\n\nfunction mergeSpread(properties, value) {\n if (t.isObjectExpression(value)) {\n for (const prop of value.properties) {\n if (t.isSpreadElement(prop)) {\n mergeSpread(properties, prop.argument);\n } else {\n properties.push(prop);\n }\n }\n } else {\n properties.push(t.spreadElement(value));\n }\n}\n"],"file":"attributes.js"}
@@ -30,19 +30,30 @@ function tagArguments(path, isStatic) {
30
30
  handlers } =
31
31
  node;
32
32
  const tagProperties = path.node.extra && path.node.extra.properties || [];
33
+ const attrs = path.get("attributes");
34
+ const seen = new Set();
35
+ const len = attrs.length;
36
+ const hasSpread = attrs.some((attr) => !attr.node.name);
33
37
  let runtimeFlags = 0;
34
38
 
35
- path.get("attributes").forEach((attr) => {
39
+ for (let i = len; i--;) {
40
+ const attr = attrs[i];
41
+ const { name } = attr.node;
42
+ if (seen.has(name)) {
43
+ if (!hasSpread) attr.remove();
44
+ }
45
+
46
+ seen.add(name);
36
47
  const { confident, computed } = (0, _util.evaluateAttr)(attr);
37
48
 
38
49
  if (confident) {
39
50
  if (computed == null || computed === false) {
40
- attr.remove();
51
+ if (!hasSpread) attr.remove();
41
52
  } else {
42
53
  attr.set("value", _compiler.types.stringLiteral(computed));
43
54
  }
44
55
  }
45
- });
56
+ }
46
57
 
47
58
  let attrsObj = (0, _util.getAttrs)(path, true, true);
48
59
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tag/native-tag[vdom]/index.js"],"names":["SIMPLE_ATTRS","MAYBE_SVG","a","script","style","title","tagArguments","path","isStatic","hub","file","node","parent","name","key","body","handlers","tagProperties","extra","properties","runtimeFlags","get","forEach","attr","confident","computed","remove","set","t","stringLiteral","attrsObj","isNullLiteral","isObjectExpression","some","isSpreadElement","FLAGS","SPREAD_ATTRS","callExpression","writeArgs","nullLiteral","_componentInstanceIdentifier","numericLiteral","length","preserveAttrs","push","objectProperty","identifier","arrayExpression","map","Object","entries","eventName","arguments","args","once","delegateArgs","booleanLiteral","slice","memberExpression","_componentDefIdentifier","every","n","isPropertyName","HAS_SIMPLE_ATTRS","tagDef","htmlType","IS_CUSTOM_ELEMENT","isMarkoTag","IS_SVG","IS_TEXTAREA","objectExpression","isNullable","isEmpty","writeStartNode","ifStatement","expressionStatement","replaceWith","writeEndNode","needsBlock","childNode","isVariableDeclaration","kind","replaceWithMultiple","concat","blockStatement","names","isStringLiteral","includes","value","isIdentifier"],"mappings":"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","sourcesContent":["import { types as t } from \"@marko/compiler\";\nimport write from \"../../util/vdom-out-write\";\nimport * as FLAGS from \"../../util/runtime-flags\";\nimport { getAttrs, evaluateAttr } from \"../util\";\nimport {\n getTagDef,\n normalizeTemplateString,\n importDefault\n} from \"@marko/babel-utils\";\nimport withPreviousLocation from \"../../util/with-previous-location\";\n\nconst SIMPLE_ATTRS = [\"id\", \"class\", \"style\"];\nconst MAYBE_SVG = {\n a: true,\n script: true,\n style: true,\n title: true\n};\n\nexport function tagArguments(path, isStatic) {\n const {\n hub: { file },\n node,\n parent\n } = path;\n const {\n name,\n key,\n body: { body },\n handlers\n } = node;\n const tagProperties = (path.node.extra && path.node.extra.properties) || [];\n let runtimeFlags = 0;\n\n path.get(\"attributes\").forEach(attr => {\n const { confident, computed } = evaluateAttr(attr);\n\n if (confident) {\n if (computed == null || computed === false) {\n attr.remove();\n } else {\n attr.set(\"value\", t.stringLiteral(computed));\n }\n }\n });\n\n let attrsObj = getAttrs(path, true, true);\n\n if (!t.isNullLiteral(attrsObj)) {\n if (\n !t.isObjectExpression(attrsObj) ||\n attrsObj.properties.some(t.isSpreadElement)\n ) {\n runtimeFlags |= FLAGS.SPREAD_ATTRS;\n attrsObj = t.callExpression(\n importDefault(\n file,\n \"marko/src/runtime/vdom/helpers/attrs.js\",\n \"marko_attrs\"\n ),\n [attrsObj]\n );\n }\n }\n\n const writeArgs = [\n name,\n attrsObj,\n !key && isStatic ? t.nullLiteral() : key,\n isStatic ? t.nullLiteral() : file._componentInstanceIdentifier,\n isStatic\n ? t.numericLiteral(body.length)\n : body.length\n ? t.nullLiteral()\n : t.numericLiteral(0)\n ];\n\n if (node.preserveAttrs) {\n tagProperties.push(\n t.objectProperty(\n t.identifier(\"pa\"),\n t.arrayExpression(node.preserveAttrs.map(name => t.stringLiteral(name)))\n )\n );\n }\n\n if (handlers) {\n Object.entries(handlers).forEach(\n ([eventName, { arguments: args, once }]) => {\n const delegateArgs = [t.stringLiteral(eventName), args[0]];\n\n // TODO: look into only sending this if once is true.\n delegateArgs.push(t.booleanLiteral(once));\n\n if (args.length > 1) {\n delegateArgs.push(t.arrayExpression(args.slice(1)));\n }\n\n // TODO: why do we output eventName twice.\n tagProperties.push(\n t.objectProperty(\n t.stringLiteral(`on${eventName}`),\n t.callExpression(\n t.memberExpression(\n file._componentDefIdentifier,\n t.identifier(\"d\")\n ),\n delegateArgs\n )\n )\n );\n }\n );\n }\n\n if (\n t.isObjectExpression(attrsObj) &&\n attrsObj.properties.every(n => isPropertyName(n, SIMPLE_ATTRS)) &&\n !node.preserveAttrs\n ) {\n runtimeFlags |= FLAGS.HAS_SIMPLE_ATTRS;\n }\n\n const tagDef = getTagDef(path);\n\n if (tagDef) {\n const { htmlType, name } = tagDef;\n if (htmlType === \"custom-element\") {\n runtimeFlags |= FLAGS.IS_CUSTOM_ELEMENT;\n } else if (\n htmlType === \"svg\" ||\n (MAYBE_SVG[name] &&\n t.isMarkoTag(parent) &&\n parent.tagDef &&\n parent.tagDef.htmlType === \"svg\")\n ) {\n runtimeFlags |= FLAGS.IS_SVG;\n } else if (name === \"textarea\") {\n runtimeFlags |= FLAGS.IS_TEXTAREA;\n }\n }\n\n writeArgs.push(t.numericLiteral(runtimeFlags));\n\n if (tagProperties.length) {\n writeArgs.push(t.objectExpression(tagProperties));\n }\n return writeArgs;\n}\n\n/**\n * Translates the html streaming version of a standard html element.\n */\nexport default function (path, isNullable) {\n const { node } = path;\n const {\n name,\n key,\n body: { body }\n } = node;\n\n const isEmpty = !body.length;\n const writeArgs = tagArguments(path, false);\n let writeStartNode = withPreviousLocation(\n write(isEmpty ? \"e\" : \"be\", ...writeArgs),\n node.name\n );\n\n if (isNullable) {\n writeStartNode = t.ifStatement(\n name,\n writeStartNode,\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"out\"), t.identifier(\"bf\")),\n [\n normalizeTemplateString`f_${key}`,\n path.hub.file._componentInstanceIdentifier\n ]\n )\n )\n );\n }\n\n if (isEmpty) {\n path.replaceWith(writeStartNode);\n return;\n }\n\n let writeEndNode = write(\"ee\");\n if (isNullable) {\n writeEndNode = t.ifStatement(\n name,\n writeEndNode,\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"out\"), t.identifier(\"ef\")),\n []\n )\n )\n );\n }\n\n let needsBlock;\n for (const childNode of body) {\n if (t.isVariableDeclaration(childNode)) {\n if (childNode.kind === \"const\" || childNode.kind === \"let\") {\n needsBlock = true;\n break;\n }\n }\n }\n\n path.replaceWithMultiple(\n [writeStartNode]\n .concat(needsBlock ? t.blockStatement(body) : body)\n .concat(writeEndNode)\n );\n}\n\nfunction isPropertyName({ key }, names) {\n if (t.isStringLiteral(key)) {\n return names.includes(key.value);\n } else if (t.isIdentifier(key)) {\n return names.includes(key.name);\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/tag/native-tag[vdom]/index.js"],"names":["SIMPLE_ATTRS","MAYBE_SVG","a","script","style","title","tagArguments","path","isStatic","hub","file","node","parent","name","key","body","handlers","tagProperties","extra","properties","attrs","get","seen","Set","len","length","hasSpread","some","attr","runtimeFlags","i","has","remove","add","confident","computed","set","t","stringLiteral","attrsObj","isNullLiteral","isObjectExpression","isSpreadElement","FLAGS","SPREAD_ATTRS","callExpression","writeArgs","nullLiteral","_componentInstanceIdentifier","numericLiteral","preserveAttrs","push","objectProperty","identifier","arrayExpression","map","Object","entries","forEach","eventName","arguments","args","once","delegateArgs","booleanLiteral","slice","memberExpression","_componentDefIdentifier","every","n","isPropertyName","HAS_SIMPLE_ATTRS","tagDef","htmlType","IS_CUSTOM_ELEMENT","isMarkoTag","IS_SVG","IS_TEXTAREA","objectExpression","isNullable","isEmpty","writeStartNode","ifStatement","expressionStatement","replaceWith","writeEndNode","needsBlock","childNode","isVariableDeclaration","kind","replaceWithMultiple","concat","blockStatement","names","isStringLiteral","includes","value","isIdentifier"],"mappings":"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","sourcesContent":["import { types as t } from \"@marko/compiler\";\nimport write from \"../../util/vdom-out-write\";\nimport * as FLAGS from \"../../util/runtime-flags\";\nimport { getAttrs, evaluateAttr } from \"../util\";\nimport {\n getTagDef,\n normalizeTemplateString,\n importDefault\n} from \"@marko/babel-utils\";\nimport withPreviousLocation from \"../../util/with-previous-location\";\n\nconst SIMPLE_ATTRS = [\"id\", \"class\", \"style\"];\nconst MAYBE_SVG = {\n a: true,\n script: true,\n style: true,\n title: true\n};\n\nexport function tagArguments(path, isStatic) {\n const {\n hub: { file },\n node,\n parent\n } = path;\n const {\n name,\n key,\n body: { body },\n handlers\n } = node;\n const tagProperties = (path.node.extra && path.node.extra.properties) || [];\n const attrs = path.get(\"attributes\");\n const seen = new Set();\n const len = attrs.length;\n const hasSpread = attrs.some(attr => !attr.node.name);\n let runtimeFlags = 0;\n\n for (let i = len; i--; ) {\n const attr = attrs[i];\n const { name } = attr.node;\n if (seen.has(name)) {\n if (!hasSpread) attr.remove();\n }\n\n seen.add(name);\n const { confident, computed } = evaluateAttr(attr);\n\n if (confident) {\n if (computed == null || computed === false) {\n if (!hasSpread) attr.remove();\n } else {\n attr.set(\"value\", t.stringLiteral(computed));\n }\n }\n }\n\n let attrsObj = getAttrs(path, true, true);\n\n if (!t.isNullLiteral(attrsObj)) {\n if (\n !t.isObjectExpression(attrsObj) ||\n attrsObj.properties.some(t.isSpreadElement)\n ) {\n runtimeFlags |= FLAGS.SPREAD_ATTRS;\n attrsObj = t.callExpression(\n importDefault(\n file,\n \"marko/src/runtime/vdom/helpers/attrs.js\",\n \"marko_attrs\"\n ),\n [attrsObj]\n );\n }\n }\n\n const writeArgs = [\n name,\n attrsObj,\n !key && isStatic ? t.nullLiteral() : key,\n isStatic ? t.nullLiteral() : file._componentInstanceIdentifier,\n isStatic\n ? t.numericLiteral(body.length)\n : body.length\n ? t.nullLiteral()\n : t.numericLiteral(0)\n ];\n\n if (node.preserveAttrs) {\n tagProperties.push(\n t.objectProperty(\n t.identifier(\"pa\"),\n t.arrayExpression(node.preserveAttrs.map(name => t.stringLiteral(name)))\n )\n );\n }\n\n if (handlers) {\n Object.entries(handlers).forEach(\n ([eventName, { arguments: args, once }]) => {\n const delegateArgs = [t.stringLiteral(eventName), args[0]];\n\n // TODO: look into only sending this if once is true.\n delegateArgs.push(t.booleanLiteral(once));\n\n if (args.length > 1) {\n delegateArgs.push(t.arrayExpression(args.slice(1)));\n }\n\n // TODO: why do we output eventName twice.\n tagProperties.push(\n t.objectProperty(\n t.stringLiteral(`on${eventName}`),\n t.callExpression(\n t.memberExpression(\n file._componentDefIdentifier,\n t.identifier(\"d\")\n ),\n delegateArgs\n )\n )\n );\n }\n );\n }\n\n if (\n t.isObjectExpression(attrsObj) &&\n attrsObj.properties.every(n => isPropertyName(n, SIMPLE_ATTRS)) &&\n !node.preserveAttrs\n ) {\n runtimeFlags |= FLAGS.HAS_SIMPLE_ATTRS;\n }\n\n const tagDef = getTagDef(path);\n\n if (tagDef) {\n const { htmlType, name } = tagDef;\n if (htmlType === \"custom-element\") {\n runtimeFlags |= FLAGS.IS_CUSTOM_ELEMENT;\n } else if (\n htmlType === \"svg\" ||\n (MAYBE_SVG[name] &&\n t.isMarkoTag(parent) &&\n parent.tagDef &&\n parent.tagDef.htmlType === \"svg\")\n ) {\n runtimeFlags |= FLAGS.IS_SVG;\n } else if (name === \"textarea\") {\n runtimeFlags |= FLAGS.IS_TEXTAREA;\n }\n }\n\n writeArgs.push(t.numericLiteral(runtimeFlags));\n\n if (tagProperties.length) {\n writeArgs.push(t.objectExpression(tagProperties));\n }\n return writeArgs;\n}\n\n/**\n * Translates the html streaming version of a standard html element.\n */\nexport default function (path, isNullable) {\n const { node } = path;\n const {\n name,\n key,\n body: { body }\n } = node;\n\n const isEmpty = !body.length;\n const writeArgs = tagArguments(path, false);\n let writeStartNode = withPreviousLocation(\n write(isEmpty ? \"e\" : \"be\", ...writeArgs),\n node.name\n );\n\n if (isNullable) {\n writeStartNode = t.ifStatement(\n name,\n writeStartNode,\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"out\"), t.identifier(\"bf\")),\n [\n normalizeTemplateString`f_${key}`,\n path.hub.file._componentInstanceIdentifier\n ]\n )\n )\n );\n }\n\n if (isEmpty) {\n path.replaceWith(writeStartNode);\n return;\n }\n\n let writeEndNode = write(\"ee\");\n if (isNullable) {\n writeEndNode = t.ifStatement(\n name,\n writeEndNode,\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(\"out\"), t.identifier(\"ef\")),\n []\n )\n )\n );\n }\n\n let needsBlock;\n for (const childNode of body) {\n if (t.isVariableDeclaration(childNode)) {\n if (childNode.kind === \"const\" || childNode.kind === \"let\") {\n needsBlock = true;\n break;\n }\n }\n }\n\n path.replaceWithMultiple(\n [writeStartNode]\n .concat(needsBlock ? t.blockStatement(body) : body)\n .concat(writeEndNode)\n );\n}\n\nfunction isPropertyName({ key }, names) {\n if (t.isStringLiteral(key)) {\n return names.includes(key.value);\n } else if (t.isIdentifier(key)) {\n return names.includes(key.name);\n }\n}\n"],"file":"index.js"}
package/dist/tag/util.js CHANGED
@@ -63,7 +63,7 @@ function getAttrs(path, preserveNames, skipRenderBody) {
63
63
  _compiler.types.objectProperty(_compiler.types.stringLiteral(targetProperty), value));
64
64
 
65
65
  } else {
66
- properties.push(_compiler.types.spreadElement(value));
66
+ mergeSpread(properties, value);
67
67
  }
68
68
  }
69
69
 
@@ -194,4 +194,18 @@ function findLastIndex(arr, check) {
194
194
  }
195
195
  }
196
196
  }
197
+
198
+ function mergeSpread(properties, value) {
199
+ if (_compiler.types.isObjectExpression(value)) {
200
+ for (const prop of value.properties) {
201
+ if (_compiler.types.isSpreadElement(prop)) {
202
+ mergeSpread(properties, prop.argument);
203
+ } else {
204
+ properties.push(prop);
205
+ }
206
+ }
207
+ } else {
208
+ properties.push(_compiler.types.spreadElement(value));
209
+ }
210
+ }
197
211
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tag/util.js"],"names":["getAttrs","path","preserveNames","skipRenderBody","node","attributes","body","params","hasDynamicAttrTags","attrsLen","length","childLen","properties","targetObjects","tagDef","foundProperties","i","name","value","attrDef","getAttribute","targetProperties","targetProperty","preserveName","key","removeDashes","dynamicAttribute","targetObject","push","t","objectProperty","stringLiteral","objectExpression","camelCase","spreadElement","endDynamicAttrTagsIndex","findLastIndex","insertBefore","slice","map","child","skip","arrowFunctionExpression","identifier","blockStatement","forEachAttribute","attr","defaultValue","undefined","required","get","buildCodeFrameError","nullLiteral","isSpreadElement","argument","buildEventHandlerArray","handlers","arrayExpression","Object","entries","eventName","arguments","args","once","parts","booleanLiteral","evaluateAttr","confident","computed","isRegExpLiteral","evaluated","evaluate","string","replace","_","letter","toUpperCase","arr","check"],"mappings":"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","sourcesContent":["import { types as t } from \"@marko/compiler\";\nimport { getTagDef } from \"@marko/babel-utils\";\n\nexport function getAttrs(path, preserveNames, skipRenderBody) {\n const { node } = path;\n const {\n attributes,\n body: { body, params },\n hasDynamicAttrTags\n } = node;\n const attrsLen = attributes.length;\n const childLen = body.length;\n const properties = [];\n const targetObjects = {};\n const tagDef = getTagDef(path);\n const foundProperties = {};\n\n for (let i = 0; i < attrsLen; i++) {\n const { name, value } = attributes[i];\n\n if (name) {\n const attrDef = tagDef && tagDef.getAttribute(name);\n let targetProperties = properties;\n let targetProperty = name;\n let preserveName = preserveNames;\n\n if (attrDef) {\n if (attrDef.targetProperty) {\n const key = attrDef.targetProperty;\n preserveName =\n attrDef.preserveName !== false && attrDef.removeDashes !== true;\n\n if (attrDef.dynamicAttribute) {\n let targetObject = targetObjects[key];\n\n if (!targetObject) {\n properties.push(\n t.objectProperty(\n t.stringLiteral(key),\n (targetObject = targetObjects[key] = t.objectExpression([]))\n )\n );\n }\n\n targetProperties = targetObject.properties;\n } else {\n targetProperty = key;\n }\n } else if (\n !preserveName &&\n (attrDef.preserveName === true || attrDef.removeDashes === false)\n ) {\n preserveName = true;\n }\n }\n\n if (!preserveName) {\n targetProperty = camelCase(targetProperty);\n }\n\n foundProperties[targetProperty] = true;\n targetProperties.push(\n t.objectProperty(t.stringLiteral(targetProperty), value)\n );\n } else {\n properties.push(t.spreadElement(value));\n }\n }\n\n if (!skipRenderBody && childLen) {\n let endDynamicAttrTagsIndex = -1;\n\n if (hasDynamicAttrTags) {\n endDynamicAttrTagsIndex = findLastIndex(\n body,\n ({ value }) => value === \"END_ATTRIBUTE_TAGS\"\n );\n path\n .insertBefore(body.slice(0, endDynamicAttrTagsIndex))\n .map(child => child.skip());\n }\n\n if (!hasDynamicAttrTags || endDynamicAttrTagsIndex !== childLen - 1) {\n properties.push(\n t.objectProperty(\n t.stringLiteral(\"renderBody\"),\n t.arrowFunctionExpression(\n [t.identifier(\"out\"), ...params],\n t.blockStatement(\n hasDynamicAttrTags\n ? body.slice(endDynamicAttrTagsIndex + 1)\n : body\n )\n )\n )\n );\n }\n }\n\n // Default parameters\n tagDef &&\n tagDef.forEachAttribute &&\n tagDef.forEachAttribute(attr => {\n if (foundProperties[attr.name] || attr.dynamicAttribute) {\n return;\n }\n\n if (attr.defaultValue !== undefined) {\n properties.push(\n t.objectProperty(\n t.stringLiteral(attr.name),\n t.stringLiteral(attr.defaultValue + \"\")\n )\n );\n } else if (attr.required) {\n throw path\n .get(\"name\")\n .buildCodeFrameError(`The \"${attr.name}\" attribute is required.`);\n }\n });\n\n if (properties.length === 0) {\n return t.nullLiteral();\n }\n\n if (properties.length === 1 && t.isSpreadElement(properties[0])) {\n return properties[0].argument;\n }\n\n return t.objectExpression(properties);\n}\n\nexport function buildEventHandlerArray(path) {\n const { handlers } = path.node;\n if (!handlers) {\n return [];\n }\n\n return [\n t.arrayExpression(\n Object.entries(handlers).map(([eventName, { arguments: args, once }]) => {\n const parts = [\n t.stringLiteral(eventName),\n args[0],\n t.booleanLiteral(once)\n ];\n\n if (args.length > 1) {\n parts.push(t.arrayExpression(args.slice(1)));\n }\n\n return t.arrayExpression(parts);\n })\n )\n ];\n}\n\nexport function evaluateAttr(attr) {\n const name = attr.get(\"name\").node;\n const value = attr.get(\"value\");\n let confident = false;\n let computed = undefined;\n\n if (name) {\n if (value.isRegExpLiteral()) {\n confident = true;\n computed = value.get(\"pattern\").node;\n } else {\n const evaluated = value.evaluate();\n ({ confident, value: computed } = evaluated);\n\n if (computed === true) {\n computed = \"\";\n } else if (computed != null && computed !== false) {\n computed = computed + \"\";\n }\n }\n }\n\n return {\n confident,\n computed\n };\n}\n\nfunction camelCase(string) {\n return string.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\nfunction findLastIndex(arr, check) {\n for (let i = arr.length; i--; ) {\n if (check(arr[i])) {\n return i;\n }\n }\n}\n"],"file":"util.js"}
1
+ {"version":3,"sources":["../../src/tag/util.js"],"names":["getAttrs","path","preserveNames","skipRenderBody","node","attributes","body","params","hasDynamicAttrTags","attrsLen","length","childLen","properties","targetObjects","tagDef","foundProperties","i","name","value","attrDef","getAttribute","targetProperties","targetProperty","preserveName","key","removeDashes","dynamicAttribute","targetObject","push","t","objectProperty","stringLiteral","objectExpression","camelCase","mergeSpread","endDynamicAttrTagsIndex","findLastIndex","insertBefore","slice","map","child","skip","arrowFunctionExpression","identifier","blockStatement","forEachAttribute","attr","defaultValue","undefined","required","get","buildCodeFrameError","nullLiteral","isSpreadElement","argument","buildEventHandlerArray","handlers","arrayExpression","Object","entries","eventName","arguments","args","once","parts","booleanLiteral","evaluateAttr","confident","computed","isRegExpLiteral","evaluated","evaluate","string","replace","_","letter","toUpperCase","arr","check","isObjectExpression","prop","spreadElement"],"mappings":"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","sourcesContent":["import { types as t } from \"@marko/compiler\";\nimport { getTagDef } from \"@marko/babel-utils\";\n\nexport function getAttrs(path, preserveNames, skipRenderBody) {\n const { node } = path;\n const {\n attributes,\n body: { body, params },\n hasDynamicAttrTags\n } = node;\n const attrsLen = attributes.length;\n const childLen = body.length;\n const properties = [];\n const targetObjects = {};\n const tagDef = getTagDef(path);\n const foundProperties = {};\n\n for (let i = 0; i < attrsLen; i++) {\n const { name, value } = attributes[i];\n\n if (name) {\n const attrDef = tagDef && tagDef.getAttribute(name);\n let targetProperties = properties;\n let targetProperty = name;\n let preserveName = preserveNames;\n\n if (attrDef) {\n if (attrDef.targetProperty) {\n const key = attrDef.targetProperty;\n preserveName =\n attrDef.preserveName !== false && attrDef.removeDashes !== true;\n\n if (attrDef.dynamicAttribute) {\n let targetObject = targetObjects[key];\n\n if (!targetObject) {\n properties.push(\n t.objectProperty(\n t.stringLiteral(key),\n (targetObject = targetObjects[key] = t.objectExpression([]))\n )\n );\n }\n\n targetProperties = targetObject.properties;\n } else {\n targetProperty = key;\n }\n } else if (\n !preserveName &&\n (attrDef.preserveName === true || attrDef.removeDashes === false)\n ) {\n preserveName = true;\n }\n }\n\n if (!preserveName) {\n targetProperty = camelCase(targetProperty);\n }\n\n foundProperties[targetProperty] = true;\n targetProperties.push(\n t.objectProperty(t.stringLiteral(targetProperty), value)\n );\n } else {\n mergeSpread(properties, value);\n }\n }\n\n if (!skipRenderBody && childLen) {\n let endDynamicAttrTagsIndex = -1;\n\n if (hasDynamicAttrTags) {\n endDynamicAttrTagsIndex = findLastIndex(\n body,\n ({ value }) => value === \"END_ATTRIBUTE_TAGS\"\n );\n path\n .insertBefore(body.slice(0, endDynamicAttrTagsIndex))\n .map(child => child.skip());\n }\n\n if (!hasDynamicAttrTags || endDynamicAttrTagsIndex !== childLen - 1) {\n properties.push(\n t.objectProperty(\n t.stringLiteral(\"renderBody\"),\n t.arrowFunctionExpression(\n [t.identifier(\"out\"), ...params],\n t.blockStatement(\n hasDynamicAttrTags\n ? body.slice(endDynamicAttrTagsIndex + 1)\n : body\n )\n )\n )\n );\n }\n }\n\n // Default parameters\n tagDef &&\n tagDef.forEachAttribute &&\n tagDef.forEachAttribute(attr => {\n if (foundProperties[attr.name] || attr.dynamicAttribute) {\n return;\n }\n\n if (attr.defaultValue !== undefined) {\n properties.push(\n t.objectProperty(\n t.stringLiteral(attr.name),\n t.stringLiteral(attr.defaultValue + \"\")\n )\n );\n } else if (attr.required) {\n throw path\n .get(\"name\")\n .buildCodeFrameError(`The \"${attr.name}\" attribute is required.`);\n }\n });\n\n if (properties.length === 0) {\n return t.nullLiteral();\n }\n\n if (properties.length === 1 && t.isSpreadElement(properties[0])) {\n return properties[0].argument;\n }\n\n return t.objectExpression(properties);\n}\n\nexport function buildEventHandlerArray(path) {\n const { handlers } = path.node;\n if (!handlers) {\n return [];\n }\n\n return [\n t.arrayExpression(\n Object.entries(handlers).map(([eventName, { arguments: args, once }]) => {\n const parts = [\n t.stringLiteral(eventName),\n args[0],\n t.booleanLiteral(once)\n ];\n\n if (args.length > 1) {\n parts.push(t.arrayExpression(args.slice(1)));\n }\n\n return t.arrayExpression(parts);\n })\n )\n ];\n}\n\nexport function evaluateAttr(attr) {\n const name = attr.get(\"name\").node;\n const value = attr.get(\"value\");\n let confident = false;\n let computed = undefined;\n\n if (name) {\n if (value.isRegExpLiteral()) {\n confident = true;\n computed = value.get(\"pattern\").node;\n } else {\n const evaluated = value.evaluate();\n ({ confident, value: computed } = evaluated);\n\n if (computed === true) {\n computed = \"\";\n } else if (computed != null && computed !== false) {\n computed = computed + \"\";\n }\n }\n }\n\n return {\n confident,\n computed\n };\n}\n\nfunction camelCase(string) {\n return string.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\nfunction findLastIndex(arr, check) {\n for (let i = arr.length; i--; ) {\n if (check(arr[i])) {\n return i;\n }\n }\n}\n\nfunction mergeSpread(properties, value) {\n if (t.isObjectExpression(value)) {\n for (const prop of value.properties) {\n if (t.isSpreadElement(prop)) {\n mergeSpread(properties, prop.argument);\n } else {\n properties.push(prop);\n }\n }\n } else {\n properties.push(t.spreadElement(value));\n }\n}\n"],"file":"util.js"}