closure-compiler icon indicating copy to clipboard operation
closure-compiler copied to clipboard

Can't use goog.reflect.object/objectProperty from es6 module.

Open ribrdb opened this issue 1 year ago • 2 comments

I see that objectProperty and object are available in closure-compiler/lib/reflect.js. However I do not see any way to use these from an es6 module. I tried adding these to goog.js and using it like this:

import * as goog from 'goog.js'
const x = goog.reflect.objectProperty(...)

However goog.js only seems to work with properties of goog itself, not two-levels deep. I end up with an ast like (GETPROPERTY objectProperty (NAME goog$reflect)), but the isPropertyRenameFunction method only allows one of these:

(NAME JSCompiler_renameProperty)
(GETPROP objectProperty (GETPROP reflect (NAME goog)))
(NAME goog$reflect$objectProperty)

ribrdb avatar Jul 25 '24 15:07 ribrdb

From our team's triage meeting - we don't have bandwidth to investigate right now but if you can find a solution besides @closurePrimitive would be happy to review

lauraharker avatar Aug 01 '24 17:08 lauraharker

It appears that adding JSCompiler_renameProperty to base.js or to an externs file allows it to work from an es6 module. I think this will be sufficient for our use, but maybe this should be documented somewhere? Perhaps https://github.com/google/closure-compiler/wiki/Type-Based-Property-Renaming

ribrdb avatar Sep 03 '24 16:09 ribrdb