@marko/translator-default 5.28.3 → 5.29.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,35 +1,17 @@
1
- "use strict";exports.__esModule = true;exports.default = _default;function _default(path) {
2
- const attributes = path.get("attributes");
3
- const nameAttr = attributes.find((attr) => attr.get("name").node === "name");
4
-
5
- if (!nameAttr) {
6
- throw path.
7
- get("name").
8
- buildCodeFrameError('The "name" attribute is required on "macro" tags.');
9
- }
10
-
11
- if (attributes.length > 1) {
12
- throw attributes[attributes[0] === nameAttr ? 1 : 0].buildCodeFrameError(
13
- 'The "macro" tag can only have a "name" attribute.');
14
-
1
+ "use strict";exports.__esModule = true;exports.default = _default;var _compiler = require("@marko/compiler");
2
+ var _babelUtils = require("@marko/babel-utils");
3
+
4
+ function _default(path) {
5
+ const attrs = path.node.attributes;
6
+ if (attrs.length === 1) {
7
+ const [attr] = attrs;
8
+
9
+ if (
10
+ _compiler.types.isMarkoAttribute(attr) &&
11
+ attr.name === "name" &&
12
+ _compiler.types.isStringLiteral(attr.value))
13
+ {
14
+ (0, _babelUtils.registerMacro)(path.get("attributes")[0], attr.value.value);
15
+ }
15
16
  }
16
-
17
- const nameAttrValue = nameAttr.get("value");
18
-
19
- if (!nameAttrValue.isStringLiteral()) {
20
- throw nameAttrValue.buildCodeFrameError(
21
- 'The "name" attribute for "macro" tags must be a string literal.');
22
-
23
- }
24
-
25
- const name = nameAttrValue.node.value;
26
- const { file } = path.hub;
27
-
28
- if (file.metadata.marko.macros[name]) {
29
- throw nameAttr.buildCodeFrameError(
30
- `A macro with the name "${name}" already exists.`);
31
-
32
- }
33
-
34
- file.metadata.marko.macros[name] = file.scope.generateUid(name);
35
17
  }
@@ -1,15 +1,40 @@
1
1
  "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.exit = exit;var _compiler = require("@marko/compiler");
2
2
  var _withPreviousLocation = _interopRequireDefault(require("../../../util/with-previous-location"));
3
+ var _babelUtils = require("@marko/babel-utils");
3
4
 
4
5
  function exit(path) {
5
6
  const { node } = path;
6
- const { body } = node;
7
- const name = node.attributes.find((attr) => attr.name === "name");
7
+ const { attributes, body } = node;
8
+ if (attributes.length === 0) {
9
+ (0, _babelUtils.diagnosticError)(path, {
10
+ label: "The 'macro' tag must have a 'name' attribute."
11
+ });
12
+ path.remove();
13
+ return;
14
+ }
15
+
16
+ if (attributes.length > 1) {
17
+ (0, _babelUtils.diagnosticError)(path, {
18
+ label: "The 'macro' tag can only have a 'name' attribute."
19
+ });
20
+ path.remove();
21
+ return;
22
+ }
23
+
24
+ const [nameAttr] = attributes;
25
+ if (!_compiler.types.isStringLiteral(nameAttr.value)) {
26
+ (0, _babelUtils.diagnosticError)(path, {
27
+ label: "The 'name' attribute for 'macro' tags must be a string literal.",
28
+ loc: nameAttr.loc || node.loc || undefined
29
+ });
30
+ path.remove();
31
+ return;
32
+ }
8
33
 
9
34
  path.replaceWith(
10
35
  (0, _withPreviousLocation.default)(
11
36
  _compiler.types.functionDeclaration(
12
- _compiler.types.identifier(path.hub.file.metadata.marko.macros[name.value.value]),
37
+ (0, _babelUtils.getMacroIdentifierForName)(path, nameAttr.value.value),
13
38
  [_compiler.types.identifier("out"), ...body.params],
14
39
  _compiler.types.blockStatement(body.body)),
15
40
 
@@ -1,5 +1,9 @@
1
1
  "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.default = _default;var _compiler = require("@marko/compiler");
2
2
  var _babelUtils = require("@marko/babel-utils");
3
+
4
+
5
+
6
+
3
7
  var _getComponentFiles = _interopRequireDefault(require("../../util/get-component-files"));
4
8
 
5
9
  function _default(path) {
@@ -13,48 +17,59 @@ function _default(path) {
13
17
  } = node;
14
18
  const meta = file.metadata.marko;
15
19
 
16
- if ((0, _getComponentFiles.default)(path).componentFile) {
17
- throw path.
18
- get("name").
19
- buildCodeFrameError(
20
- 'A Marko file can either have an inline class, or an external "component.js", but not both.');
21
-
20
+ if (meta.hasComponent) {
21
+ (0, _babelUtils.diagnosticError)(path.get("name"), {
22
+ label: "A Marko component can only have one top level class."
23
+ });
24
+ path.remove();
25
+ return;
22
26
  }
23
27
 
24
- if (meta.hasComponent) {
25
- throw path.
26
- get("name").
27
- buildCodeFrameError(
28
- "A Marko component can only have one top level class.");
28
+ meta.hasComponent = true;
29
29
 
30
+ if ((0, _getComponentFiles.default)(path).componentFile) {
31
+ (0, _babelUtils.diagnosticError)(path.get("name"), {
32
+ label:
33
+ 'A Marko file can either have an inline class, or an external "component.js", but not both.'
34
+ });
35
+
36
+ path.remove();
37
+ return;
30
38
  }
31
39
 
32
40
  const parsed = (0, _babelUtils.parseExpression)(file, code.replace(/;\s*$/, ""), start, end);
33
-
34
- if (parsed.id) {
35
- throw file.buildCodeFrameError(
36
- parsed.id,
37
- "Component class cannot have a name.");
38
-
41
+ if (parsed.type === "MarkoParseError") {
42
+ path.replaceWith(_compiler.types.markoClass([_compiler.types.expressionStatement(parsed)]));
43
+ return;
39
44
  }
40
45
 
41
46
  if (parsed.superClass) {
42
- throw file.buildCodeFrameError(
43
- parsed.superClass,
44
- "Component class cannot have a super class.");
45
-
47
+ (0, _babelUtils.diagnosticError)(path, {
48
+ label: "Component class cannot have a super class.",
49
+ loc: parsed.superClass.loc
50
+ });
46
51
  }
47
52
 
48
- const constructorProp = parsed.body.body.find(
53
+ const constructorPropIndex = parsed.body.body.findIndex(
49
54
  (prop) => _compiler.types.isClassMethod(prop) && prop.kind === "constructor");
50
55
 
51
- if (constructorProp) {
52
- throw file.buildCodeFrameError(
53
- constructorProp.key,
54
- "The constructor method should not be used for a component, use onCreate instead.");
56
+ if (constructorPropIndex !== -1) {
57
+ const constructorProp = parsed.body.body[constructorPropIndex];
58
+ (0, _babelUtils.diagnosticError)(path, {
59
+ label:
60
+ "The constructor method should not be used for a component, use onCreate instead.",
61
+ loc: constructorProp.key.loc
62
+ });
55
63
 
64
+ parsed.body.body.splice(constructorProp, 1);
65
+ }
66
+
67
+ if (parsed.id) {
68
+ (0, _babelUtils.diagnosticDeprecate)(path, {
69
+ label: "Component class should not have a name.",
70
+ loc: parsed.id.loc
71
+ });
56
72
  }
57
73
 
58
- meta.hasComponent = true;
59
74
  path.replaceWith(_compiler.types.markoClass(parsed.body));
60
75
  }
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@marko/translator-default",
3
3
  "description": "Translates Marko templates to the default Marko runtime.",
4
- "version": "5.28.3",
4
+ "version": "5.29.1",
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": {
8
8
  "@babel/runtime": "^7.16.0",
9
- "@marko/babel-utils": "^6.1.0",
9
+ "@marko/babel-utils": "^6.2.0",
10
10
  "escape-string-regexp": "^4.0.0",
11
11
  "magic-string": "^0.27.0",
12
12
  "self-closing-tags": "^1.0.1"
13
13
  },
14
14
  "devDependencies": {
15
- "@marko/compiler": "^5.30.3",
16
- "marko": "^5.28.3"
15
+ "@marko/compiler": "^5.31.1",
16
+ "marko": "^5.29.1"
17
17
  },
18
18
  "files": [
19
19
  "dist",