@marko/compiler 5.17.3 → 5.18.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.
@@ -37,6 +37,7 @@ _traverse.Scope.prototype.crawl = function () {
37
37
  const path = this.path;
38
38
  const originalTraverse = path.traverse;
39
39
  path.traverse = function (visitor, state) {
40
+ state.hoistableTagVarsByScope = new Map();
40
41
  path.traverse = originalTraverse;
41
42
 
42
43
  if (!patchedVisitors.has(visitor)) {
@@ -49,7 +50,7 @@ _traverse.Scope.prototype.crawl = function () {
49
50
  body.scope.registerBinding("param", param);
50
51
  }
51
52
  },
52
- MarkoTag(tag) {
53
+ MarkoTag(tag, state) {
53
54
  const tagVar = tag.get("var");
54
55
  if (tagVar.node) {
55
56
  tag.scope.registerBinding("local", tagVar, tag);
@@ -58,17 +59,17 @@ _traverse.Scope.prototype.crawl = function () {
58
59
  const binding = curScope.getBinding(name);
59
60
 
60
61
  while (curScope = curScope.parent) {
61
- curScope.hoistableTagVars =
62
- curScope.hoistableTagVars || (
63
- curScope.hoistableTagVars = {});
64
- const existingBinding = curScope.hoistableTagVars[name];
65
-
66
- if (existingBinding) {
67
- if (existingBinding !== binding) {
68
- curScope.hoistableTagVars[name] = true;
69
- }
62
+ const hoistableTagVars =
63
+ state.hoistableTagVarsByScope.get(curScope);
64
+
65
+ if (hoistableTagVars) {
66
+ hoistableTagVars[name] = hoistableTagVars[name] ?
67
+ true :
68
+ binding;
70
69
  } else {
71
- curScope.hoistableTagVars[name] = binding;
70
+ state.hoistableTagVarsByScope.set(curScope, {
71
+ [name]: binding });
72
+
72
73
  }
73
74
  }
74
75
  }
@@ -87,9 +88,10 @@ _traverse.Scope.prototype.crawl = function () {
87
88
  let curScope = ref.scope;
88
89
  if (curScope.hasBinding(name)) continue;
89
90
 
90
- do {
91
- const hoistableBinding =
92
- curScope.hoistableTagVars && curScope.hoistableTagVars[name];
91
+ do {var _state$hoistableTagVa;
92
+ const hoistableBinding = (_state$hoistableTagVa =
93
+ state.hoistableTagVarsByScope.get(curScope)) == null ? void 0 : _state$hoistableTagVa[name];
94
+
93
95
  if (hoistableBinding) {
94
96
  if (hoistableBinding === true) {
95
97
  throw ref.buildCodeFrameError(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/babel-types/traverse/patch.js"],"names":["MARKO_TYPES","forEach","typeName","checkKey","assertKey","checkFn","t","assertFn","NodePath","prototype","opts","node","MARKO_ALIAS_TYPES","aliasName","originalProtoCheck","is","call","originalCrawl","Scope","crawl","patchedVisitors","WeakSet","path","originalTraverse","traverse","visitor","state","has","add","Object","assign","explode","MarkoTagBody","body","param","get","scope","registerBinding","MarkoTag","tag","tagVar","name","getBindingIdentifiers","curScope","binding","getBinding","parent","hoistableTagVars","existingBinding","references","length","movedBindings","Map","ref","hasBinding","hoistableBinding","buildCodeFrameError","movedBinding","getScopeDepth","set","moveBindingTo","identifier","depth","cur"],"mappings":"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","sourcesContent":["import \"../types/patch\";\n\nimport * as t from \"@babel/types\";\nimport traverse, { NodePath, Scope } from \"@babel/traverse\";\nimport { MARKO_TYPES, MARKO_ALIAS_TYPES } from \"../types/definitions\";\n\nMARKO_TYPES.forEach(typeName => {\n const checkKey = `is${typeName}`;\n const assertKey = `assert${typeName}`;\n const checkFn = t[checkKey];\n const assertFn = t[assertKey];\n NodePath.prototype[checkKey] = function (opts) {\n return checkFn(this.node, opts);\n };\n NodePath.prototype[assertKey] = function (opts) {\n assertFn(this.node, opts);\n };\n});\n\nMARKO_ALIAS_TYPES.forEach(aliasName => {\n const checkKey = `is${aliasName}`;\n const originalProtoCheck = NodePath.prototype[checkKey];\n NodePath.prototype[checkKey] = function (opts) {\n return (\n t.is(aliasName, this.node, opts) ||\n originalProtoCheck.call(this, this.node, opts)\n );\n };\n});\n\n// Adds a one time patch to the scope collector visitors to include\n// Marko bindings for params and tag vars.\nconst originalCrawl = Scope.prototype.crawl;\nconst patchedVisitors = new WeakSet();\n\nScope.prototype.crawl = function () {\n const path = this.path;\n const originalTraverse = path.traverse;\n path.traverse = function (visitor, state) {\n path.traverse = originalTraverse;\n\n if (!patchedVisitors.has(visitor)) {\n patchedVisitors.add(visitor);\n Object.assign(\n traverse.explode(visitor),\n traverse.explode({\n MarkoTagBody(body) {\n for (const param of body.get(\"params\")) {\n body.scope.registerBinding(\"param\", param);\n }\n },\n MarkoTag(tag) {\n const tagVar = tag.get(\"var\");\n if (tagVar.node) {\n tag.scope.registerBinding(\"local\", tagVar, tag);\n for (const name in tagVar.getBindingIdentifiers()) {\n let curScope = tag.scope;\n const binding = curScope.getBinding(name);\n\n while ((curScope = curScope.parent)) {\n curScope.hoistableTagVars =\n curScope.hoistableTagVars ||\n (curScope.hoistableTagVars = {});\n const existingBinding = curScope.hoistableTagVars[name];\n\n if (existingBinding) {\n if (existingBinding !== binding) {\n curScope.hoistableTagVars[name] = true;\n }\n } else {\n curScope.hoistableTagVars[name] = binding;\n }\n }\n }\n }\n }\n })\n );\n }\n\n this.traverse(visitor, state);\n\n if (state.references.length) {\n const movedBindings = new Map();\n for (const ref of state.references) {\n const { name } = ref.node;\n let curScope = ref.scope;\n if (curScope.hasBinding(name)) continue;\n\n do {\n const hoistableBinding =\n curScope.hoistableTagVars && curScope.hoistableTagVars[name];\n if (hoistableBinding) {\n if (hoistableBinding === true) {\n throw ref.buildCodeFrameError(\n \"Ambiguous reference, variable was defined in multiple places and was not shadowed.\"\n );\n }\n\n const movedBinding = movedBindings.get(hoistableBinding);\n if (\n !movedBinding ||\n getScopeDepth(movedBinding) < getScopeDepth(curScope)\n ) {\n movedBindings.set(hoistableBinding, curScope);\n }\n }\n } while ((curScope = curScope.parent));\n }\n\n for (const [binding, scope] of movedBindings) {\n binding.scope.moveBindingTo(binding.identifier.name, scope);\n }\n }\n };\n\n originalCrawl.call(this);\n path.traverse = originalTraverse;\n};\n\nfunction getScopeDepth(scope) {\n let depth = 0;\n let cur = scope;\n while ((cur = cur.parent)) depth++;\n return depth;\n}\n"],"file":"patch.js"}
1
+ {"version":3,"sources":["../../../src/babel-types/traverse/patch.js"],"names":["MARKO_TYPES","forEach","typeName","checkKey","assertKey","checkFn","t","assertFn","NodePath","prototype","opts","node","MARKO_ALIAS_TYPES","aliasName","originalProtoCheck","is","call","originalCrawl","Scope","crawl","patchedVisitors","WeakSet","path","originalTraverse","traverse","visitor","state","hoistableTagVarsByScope","Map","has","add","Object","assign","explode","MarkoTagBody","body","param","get","scope","registerBinding","MarkoTag","tag","tagVar","name","getBindingIdentifiers","curScope","binding","getBinding","parent","hoistableTagVars","set","references","length","movedBindings","ref","hasBinding","hoistableBinding","buildCodeFrameError","movedBinding","getScopeDepth","moveBindingTo","identifier","depth","cur"],"mappings":"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","sourcesContent":["import \"../types/patch\";\n\nimport * as t from \"@babel/types\";\nimport traverse, { NodePath, Scope } from \"@babel/traverse\";\nimport { MARKO_TYPES, MARKO_ALIAS_TYPES } from \"../types/definitions\";\n\nMARKO_TYPES.forEach(typeName => {\n const checkKey = `is${typeName}`;\n const assertKey = `assert${typeName}`;\n const checkFn = t[checkKey];\n const assertFn = t[assertKey];\n NodePath.prototype[checkKey] = function (opts) {\n return checkFn(this.node, opts);\n };\n NodePath.prototype[assertKey] = function (opts) {\n assertFn(this.node, opts);\n };\n});\n\nMARKO_ALIAS_TYPES.forEach(aliasName => {\n const checkKey = `is${aliasName}`;\n const originalProtoCheck = NodePath.prototype[checkKey];\n NodePath.prototype[checkKey] = function (opts) {\n return (\n t.is(aliasName, this.node, opts) ||\n originalProtoCheck.call(this, this.node, opts)\n );\n };\n});\n\n// Adds a one time patch to the scope collector visitors to include\n// Marko bindings for params and tag vars.\nconst originalCrawl = Scope.prototype.crawl;\nconst patchedVisitors = new WeakSet();\n\nScope.prototype.crawl = function () {\n const path = this.path;\n const originalTraverse = path.traverse;\n path.traverse = function (visitor, state) {\n state.hoistableTagVarsByScope = new Map();\n path.traverse = originalTraverse;\n\n if (!patchedVisitors.has(visitor)) {\n patchedVisitors.add(visitor);\n Object.assign(\n traverse.explode(visitor),\n traverse.explode({\n MarkoTagBody(body) {\n for (const param of body.get(\"params\")) {\n body.scope.registerBinding(\"param\", param);\n }\n },\n MarkoTag(tag, state) {\n const tagVar = tag.get(\"var\");\n if (tagVar.node) {\n tag.scope.registerBinding(\"local\", tagVar, tag);\n for (const name in tagVar.getBindingIdentifiers()) {\n let curScope = tag.scope;\n const binding = curScope.getBinding(name);\n\n while ((curScope = curScope.parent)) {\n const hoistableTagVars =\n state.hoistableTagVarsByScope.get(curScope);\n\n if (hoistableTagVars) {\n hoistableTagVars[name] = hoistableTagVars[name]\n ? true\n : binding;\n } else {\n state.hoistableTagVarsByScope.set(curScope, {\n [name]: binding\n });\n }\n }\n }\n }\n }\n })\n );\n }\n\n this.traverse(visitor, state);\n\n if (state.references.length) {\n const movedBindings = new Map();\n for (const ref of state.references) {\n const { name } = ref.node;\n let curScope = ref.scope;\n if (curScope.hasBinding(name)) continue;\n\n do {\n const hoistableBinding =\n state.hoistableTagVarsByScope.get(curScope)?.[name];\n\n if (hoistableBinding) {\n if (hoistableBinding === true) {\n throw ref.buildCodeFrameError(\n \"Ambiguous reference, variable was defined in multiple places and was not shadowed.\"\n );\n }\n\n const movedBinding = movedBindings.get(hoistableBinding);\n if (\n !movedBinding ||\n getScopeDepth(movedBinding) < getScopeDepth(curScope)\n ) {\n movedBindings.set(hoistableBinding, curScope);\n }\n }\n } while ((curScope = curScope.parent));\n }\n\n for (const [binding, scope] of movedBindings) {\n binding.scope.moveBindingTo(binding.identifier.name, scope);\n }\n }\n };\n\n originalCrawl.call(this);\n path.traverse = originalTraverse;\n};\n\nfunction getScopeDepth(scope) {\n let depth = 0;\n let cur = scope;\n while ((cur = cur.parent)) depth++;\n return depth;\n}\n"],"file":"patch.js"}
@@ -50,10 +50,14 @@ _definitions.MARKO_ALIAS_TYPES.forEach((aliasName) => {
50
50
 
51
51
  const originalIsReferenced = referencedValidators.default;
52
52
  referencedValidators.default = (node, parent, grandparent) => {
53
- if (parent.type === "MarkoTag" || parent.type === "MarkoTagBody") {
54
- return false;
55
- }
56
- return originalIsReferenced(node, parent, grandparent);
53
+ switch (parent.type) {
54
+ case "MarkoTag":
55
+ return parent.var !== node;
56
+ case "MarkoTagBody":
57
+ return false;
58
+ default:
59
+ return originalIsReferenced(node, parent, grandparent);}
60
+
57
61
  };
58
62
 
59
63
  function assert(typeName, node, opts) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/babel-types/types/patch.js"],"names":["TYPES","VISITOR_KEYS","FLIPPED_ALIAS_KEYS","DEPRECATED_KEYS","is","getBindingIdentifiers","babelTypes","keys","MARKO_TYPES","forEach","typeName","definitions","type","Object","includes","push","lowerName","toLowerCase","slice","checkKey","assertKey","node","opts","assert","builder","apply","arguments","MARKO_ALIAS_TYPES","aliasName","originalCheck","generatedValidators","originalIsReferenced","referencedValidators","default","parent","grandparent","Error","JSON","stringify"],"mappings":"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","sourcesContent":["/* eslint-disable no-import-assign */\nimport * as babelTypes from \"@babel/types\";\nimport builder from \"@babel/types/lib/builders/builder\";\nimport defineType from \"@babel/types/lib/definitions/utils\";\nimport * as generatedValidators from \"@babel/types/lib/validators/generated\";\nimport * as referencedValidators from \"@babel/types/lib/validators/isReferenced\";\nimport definitions, { MARKO_TYPES, MARKO_ALIAS_TYPES } from \"./definitions\";\n\nconst {\n TYPES,\n VISITOR_KEYS,\n FLIPPED_ALIAS_KEYS,\n DEPRECATED_KEYS,\n is,\n getBindingIdentifiers\n} = babelTypes;\n\ngetBindingIdentifiers.keys[\"MarkoTag\"] = [\"var\"];\ngetBindingIdentifiers.keys[\"MarkoTagBody\"] = [\"params\"];\n\nMARKO_TYPES.forEach(typeName => {\n defineType(typeName, definitions[typeName]);\n});\n\nfor (const type of [\n ...Object.keys(VISITOR_KEYS),\n ...Object.keys(FLIPPED_ALIAS_KEYS),\n ...Object.keys(DEPRECATED_KEYS)\n]) {\n if (!TYPES.includes(type)) TYPES.push(type);\n}\n\nMARKO_TYPES.forEach(typeName => {\n const lowerName = typeName[0].toLowerCase() + typeName.slice(1);\n const checkKey = `is${typeName}`;\n const assertKey = `assert${typeName}`;\n babelTypes[checkKey] = (node, opts) => is(typeName, node, opts);\n babelTypes[assertKey] = (node, opts) => assert(typeName, node, opts);\n babelTypes[typeName] = babelTypes[lowerName] = function () {\n return builder.apply(typeName, arguments);\n };\n});\n\nMARKO_ALIAS_TYPES.forEach(aliasName => {\n const checkKey = `is${aliasName}`;\n const originalCheck = generatedValidators[checkKey];\n generatedValidators[checkKey] = (node, opts) =>\n is(aliasName, node, opts) || originalCheck(node, opts);\n});\n\nconst originalIsReferenced = referencedValidators.default;\nreferencedValidators.default = (node, parent, grandparent) => {\n if (parent.type === \"MarkoTag\" || parent.type === \"MarkoTagBody\") {\n return false;\n }\n return originalIsReferenced(node, parent, grandparent);\n};\n\nfunction assert(typeName, node, opts) {\n if (!is(typeName, node, opts)) {\n throw new Error(\n `Expected type \"${typeName}\" with option ${JSON.stringify(\n opts\n )}, but instead got \"${node.type}\".`\n );\n }\n}\n"],"file":"patch.js"}
1
+ {"version":3,"sources":["../../../src/babel-types/types/patch.js"],"names":["TYPES","VISITOR_KEYS","FLIPPED_ALIAS_KEYS","DEPRECATED_KEYS","is","getBindingIdentifiers","babelTypes","keys","MARKO_TYPES","forEach","typeName","definitions","type","Object","includes","push","lowerName","toLowerCase","slice","checkKey","assertKey","node","opts","assert","builder","apply","arguments","MARKO_ALIAS_TYPES","aliasName","originalCheck","generatedValidators","originalIsReferenced","referencedValidators","default","parent","grandparent","var","Error","JSON","stringify"],"mappings":"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","sourcesContent":["/* eslint-disable no-import-assign */\nimport * as babelTypes from \"@babel/types\";\nimport builder from \"@babel/types/lib/builders/builder\";\nimport defineType from \"@babel/types/lib/definitions/utils\";\nimport * as generatedValidators from \"@babel/types/lib/validators/generated\";\nimport * as referencedValidators from \"@babel/types/lib/validators/isReferenced\";\nimport definitions, { MARKO_TYPES, MARKO_ALIAS_TYPES } from \"./definitions\";\n\nconst {\n TYPES,\n VISITOR_KEYS,\n FLIPPED_ALIAS_KEYS,\n DEPRECATED_KEYS,\n is,\n getBindingIdentifiers\n} = babelTypes;\n\ngetBindingIdentifiers.keys[\"MarkoTag\"] = [\"var\"];\ngetBindingIdentifiers.keys[\"MarkoTagBody\"] = [\"params\"];\n\nMARKO_TYPES.forEach(typeName => {\n defineType(typeName, definitions[typeName]);\n});\n\nfor (const type of [\n ...Object.keys(VISITOR_KEYS),\n ...Object.keys(FLIPPED_ALIAS_KEYS),\n ...Object.keys(DEPRECATED_KEYS)\n]) {\n if (!TYPES.includes(type)) TYPES.push(type);\n}\n\nMARKO_TYPES.forEach(typeName => {\n const lowerName = typeName[0].toLowerCase() + typeName.slice(1);\n const checkKey = `is${typeName}`;\n const assertKey = `assert${typeName}`;\n babelTypes[checkKey] = (node, opts) => is(typeName, node, opts);\n babelTypes[assertKey] = (node, opts) => assert(typeName, node, opts);\n babelTypes[typeName] = babelTypes[lowerName] = function () {\n return builder.apply(typeName, arguments);\n };\n});\n\nMARKO_ALIAS_TYPES.forEach(aliasName => {\n const checkKey = `is${aliasName}`;\n const originalCheck = generatedValidators[checkKey];\n generatedValidators[checkKey] = (node, opts) =>\n is(aliasName, node, opts) || originalCheck(node, opts);\n});\n\nconst originalIsReferenced = referencedValidators.default;\nreferencedValidators.default = (node, parent, grandparent) => {\n switch (parent.type) {\n case \"MarkoTag\":\n return parent.var !== node;\n case \"MarkoTagBody\":\n return false;\n default:\n return originalIsReferenced(node, parent, grandparent);\n }\n};\n\nfunction assert(typeName, node, opts) {\n if (!is(typeName, node, opts)) {\n throw new Error(\n `Expected type \"${typeName}\" with option ${JSON.stringify(\n opts\n )}, but instead got \"${node.type}\".`\n );\n }\n}\n"],"file":"patch.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@marko/compiler",
3
3
  "description": "Marko template to JS compiler.",
4
- "version": "5.17.3",
4
+ "version": "5.18.0",
5
5
  "author": "Dylan Piercey <dpiercey@ebay.com>",
6
6
  "bugs": "https://github.com/marko-js/marko/issues/new?template=Bug_report.md",
7
7
  "dependencies": {
@@ -13,7 +13,7 @@
13
13
  "@babel/runtime": "^7.16.0",
14
14
  "@babel/traverse": "^7.16.0",
15
15
  "@babel/types": "^7.16.0",
16
- "@marko/babel-utils": "^5.17.3",
16
+ "@marko/babel-utils": "^5.17.10",
17
17
  "complain": "^1.6.0",
18
18
  "enhanced-resolve": "5.7.0",
19
19
  "he": "^1.2.0",
@@ -29,7 +29,7 @@
29
29
  "strip-json-comments": "^3.1.1"
30
30
  },
31
31
  "devDependencies": {
32
- "@marko/translator-default": "^5.17.3"
32
+ "@marko/translator-default": "^5.18.0"
33
33
  },
34
34
  "files": [
35
35
  "dist",
@@ -60,5 +60,5 @@
60
60
  "url": "https://github.com/marko-js/marko/tree/master/packages/compiler"
61
61
  },
62
62
  "types": "index.d.ts",
63
- "gitHead": "f2bb822be6e9b86c13223fba283f056748fe64c4"
63
+ "gitHead": "daa7b0a1769366a54b6882e176ef6b151628bf57"
64
64
  }