estools / escodegen

ECMAScript code generator
BSD 2-Clause "Simplified" License
2.66k stars 334 forks source link

Support static class fields #443

Open pYr0x opened 3 years ago

pYr0x commented 3 years ago

i was playing around with AST by using acorn. Acorn has a plugin to parse code with static class fields. https://github.com/acornjs/acorn-static-class-features Unfortuallity escodegen can't handle this feature. So i wrote a function that generates a static assignment from the AST provided by acorn. if you want this snippet inside your codebase i can contribute and create a PR.

PropertyDefinition: function (expr, precedence, flags) {
          var result;
          if (expr['static']) {
            result = ['static' + space];
          } else {
            result = [];
          }
          result.push(this.generateAssignment(expr.key, expr.value, '=', precedence, flags));
          result.push(this.semicolon(flags));
          return result;
        },
ajvincent commented 3 years ago

Peanut gallery observation: I'm guessing this won't work until at least https://github.com/estools/escodegen/pull/438 lands, and that one I just noticed can't work with the Node versions this project tests for. I'm pretty sure based on Mozilla's documentation this won't work until Node 12+ is the minimum version escodegen supports...

Which is really unfortunate.

sanex3339 commented 3 years ago

This feature just has been implemented in my fork: https://www.npmjs.com/package/@javascript-obfuscator/escodegen

PR: https://github.com/javascript-obfuscator/escodegen/pull/3

imtaotao commented 2 years ago

I have the same problem, but the problem seems to still exist.

stepankuzmin commented 1 year ago

Same problem here, PropertyDefinition is missing.

kevincox commented 7 months ago

I implemented this: https://github.com/estools/escodegen/pull/465