we should use our own `defineProperties` imo