Jss: Flow Errors

Created on 1 Feb 2017  ยท  30Comments  ยท  Source: cssinjs/jss

Getting this with flow:

image

in types.js.flow

enhancement important

Most helpful comment

Same problem.

Flow doesn't include node_modules/jss/flow-typed automatically.

If i include this into .flowconfig, all works fine:

[libs]
node_modules/jss/flow-typed

@kof

Your local declaration of CSSStyleRule is workaround. May be make pr into https://github.com/facebook/flow/blob/master/lib/cssom.js ? Or write some installation notes in readme for it?

All 30 comments

More full errors:

packages/gloss/node_modules/jss/lib/RulesContainer.js.flow:96
 96:     if (rule.className && rule.name) this.classes[rule.name] = rule.className
                  ^^^^^^^^^ property `className`. Property not found in
 96:     if (rule.className && rule.name) this.classes[rule.name] = rule.className
             ^^^^ Rule

packages/gloss/node_modules/jss/lib/backends/DomRenderer.js.flow:10
 10: function getStyle(rule: HTMLElement|CSSStyleRule, prop: string): string {
                                         ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

packages/gloss/node_modules/jss/lib/plugins/RegularRule.js.flow:26
 26:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

packages/gloss/node_modules/jss/lib/types.js.flow:37
 37:   renderable: ?CSSStyleRule;
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

image

CSSStyleRule is declared here. Why can't flow find it? It should be actually part of flow cssom

Not following, so is this local error or are you saying flow needs to update to fix?

Both, right now it should work because I have a type for CSSStyleRule.

Same problem.

Flow doesn't include node_modules/jss/flow-typed automatically.

If i include this into .flowconfig, all works fine:

[libs]
node_modules/jss/flow-typed

@kof

Your local declaration of CSSStyleRule is workaround. May be make pr into https://github.com/facebook/flow/blob/master/lib/cssom.js ? Or write some installation notes in readme for it?

I was planing to make it into cssom โ€ฆ but if you got time I am happy if someone else does it!

flow is an awesome project to contribute to!

so @natew are u interested to bring those defs to flow?

cc @lttb

I had a similar error, which has now disappeared. Maybe a new version of Flow fixed it?

thats possible

@natew I am closing this one, please reopen if the issue is still there.

Hello! I'm running into these errors still.

Versions:

[email protected]
[email protected]

Console output:

Error: node_modules/jss/lib/renderers/DomRenderer.js.flow:15
 15: function getStyle(rule: HTMLElement|CSSStyleRule, prop: string): string {
                                         ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/renderers/DomRenderer.js.flow:51
 51: function getSelector(rule: CSSOMRule): string {
                                ^^^^^^^^^ identifier `CSSOMRule`. Could not resolve name

Error: node_modules/jss/lib/renderers/DomRenderer.js.flow:128
128:       return node
                  ^^^^ Node. This type is incompatible with
123: function findCommentNode(text: string): Comment|null {
                                             ^^^^^^^^^^^^ union: Comment | null
  Member 1:
  123: function findCommentNode(text: string): Comment|null {
                                               ^^^^^^^ Comment
  Error:
  128:       return node
                    ^^^^ Node. This type is incompatible with
  123: function findCommentNode(text: string): Comment|null {
                                               ^^^^^^^ Comment
  Member 2:
  123: function findCommentNode(text: string): Comment|null {
                                                       ^^^^ null
  Error:
  128:       return node
                    ^^^^ Node. This type is incompatible with
  123: function findCommentNode(text: string): Comment|null {
                                                       ^^^^ null

Error: node_modules/jss/lib/rules/ConditionalRule.js.flow:19
 19:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/FontFaceRule.js.flow:16
 16:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/KeyframesRule.js.flow:19
 19:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/SimpleRule.js.flow:15
 15:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/StyleRule.js.flow:19
 19:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/ViewportRule.js.flow:16
 16:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/types.js.flow:26
 26:   setStyle(rule: HTMLElement|CSSStyleRule, prop: string, value: string): boolean;
                                  ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Adding these lines to my .flowconfig fixes the issue, but it seems like they could be fixed at the root rather:

[ignore]
<PROJECT_ROOT>/node_modules/jss/lib/renderers/DomRenderer.js.flow
<PROJECT_ROOT>/node_modules/jss/lib/rules/ConditionalRule.js.flow
<PROJECT_ROOT>/node_modules/jss/lib/rules/FontFaceRule.js.flow
<PROJECT_ROOT>/node_modules/jss/lib/rules/KeyframesRule.js.flow
<PROJECT_ROOT>/node_modules/jss/lib/rules/StyleRule.js.flow
<PROJECT_ROOT>/node_modules/jss/lib/rules/ViewportRule.js.flow
<PROJECT_ROOT>/node_modules/jss/lib/rules/SimpleRule.js.flow
<PROJECT_ROOT>/node_modules/jss/lib/types.js.flow

Just to chime in I am also getting errors. Using latest create-react-app with styled-components. I am assuming it is styled-components that has jss as a dependency but I am not sure (I am not using it directly).

flow-bin v 0.54.1

Error: node_modules/jss/lib/rules/ConditionalRule.js.flow:19
 19:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/FontFaceRule.js.flow:16
 16:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/KeyframesRule.js.flow:19
 19:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/SimpleRule.js.flow:15
 15:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/StyleRule.js.flow:19
 19:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/rules/StyleRule.js.flow:38
       v-------------------------------------
 38:   set selector(selector: string): void {
 39:     const {sheet} = this.options
 40: 
...:
 69:   }
       ^ Potentially unsafe get/set usage. Getters and setters with side effects are potentially unsafe and disabled by default. You may opt-in to using them anyway by putting `unsafe.enable_getters_and_setters=true` into the [options] section of your .flowconfig.

Error: node_modules/jss/lib/rules/StyleRule.js.flow:74
       v-----------------------
 74:   get selector(): string {
 75:     if (this.renderable) {
 76:       return this.renderer.getSelector(this.renderable)
...:
 80:   }
       ^ Potentially unsafe get/set usage. Getters and setters with side effects are potentially unsafe and disabled by default. You may opt-in to using them anyway by putting `unsafe.enable_getters_and_setters=true` into the [options] section of your .flowconfig.

Error: node_modules/jss/lib/rules/ViewportRule.js.flow:16
 16:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

Error: node_modules/jss/lib/types.js.flow:26
 26:   setStyle(rule: HTMLElement|CSSStyleRule, prop: string, value: string): boolean;
                                  ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name

I get a slightly different set of errors from @zachwolf and @garytokyo

Error: node_modules/jss/lib/renderers/DomRenderer.js.flow:128
128:       return node
                  ^^^^ Node. This type is incompatible with the expected return type of
123: function findCommentNode(text: string): Comment|null {
                                             ^^^^^^^^^^^^ union: Comment | null
  Member 1:
  123: function findCommentNode(text: string): Comment|null {
                                               ^^^^^^^ Comment
  Error:
  128:       return node
                    ^^^^ Node. This type is incompatible with
  123: function findCommentNode(text: string): Comment|null {
                                               ^^^^^^^ Comment
  Member 2:
  123: function findCommentNode(text: string): Comment|null {
                                                       ^^^^ null
  Error:
  128:       return node
                    ^^^^ Node. This type is incompatible with
  123: function findCommentNode(text: string): Comment|null {
                                                       ^^^^ null
Error: node_modules/jss/lib/utils/findRenderer.js.flow:15
 15:   return useVirtual ? VirtualRenderer : DomRenderer
                                             ^^^^^^^^^^^ DomRenderer. This type is incompatible with the expected return type of
 12: export default function findRenderer(options: JssOptions = {}): Class<Renderer> {
                                                                           ^^^^^^^^ Renderer
  Property `constructor` is incompatible:
           v--------------------------------
    205:   constructor(sheet?: StyleSheet) {
    206:     // There is no sheet when the renderer is used from a standalone StyleRule.
    207:     if (sheet) sheets.add(sheet)
    ...:
    216:   }
           ^ function. This type is incompatible with. See: node_modules/jss/lib/renderers/DomRenderer.js.flow:205
     25:   constructor(sheet?: StyleSheet): Renderer;
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function type. See: node_modules/jss/lib/types.js.flow:25
      This parameter is incompatible:
        205:   constructor(sheet?: StyleSheet) {
                                              ^ undefined. This type is incompatible with. See: node_modules/jss/lib/renderers/DomRenderer.js.flow:205
         25:   constructor(sheet?: StyleSheet): Renderer;
                                                ^^^^^^^^ Renderer. See: node_modules/jss/lib/types.js.flow:25
          Property `attach` is incompatible:
             25:   constructor(sheet?: StyleSheet): Renderer;
                                                    ^^^^^^^^ property `attach` of Renderer. Property not found in possibly undefined value. See: node_modules/jss/lib/types.js.flow:25
            205:   constructor(sheet?: StyleSheet) {
                                                  ^ undefined. See: node_modules/jss/lib/renderers/DomRenderer.js.flow:205

jss: 8.1.0
flow: 0.57.3

Newly created app via the create-react-app starter kit. I worked around the CSSStyleRule errors by adding the following to my .flowconfig

[libs]
node_modules/jss/flow-typed

yes, it has been fixed in jss 9

@kof - Just upgraded to jss 9 and I'm still getting the same errors - namely a bunch of

#these are mitigated by adding node_modules/jss/flow-typed into [libs] in .flowconfig
Error: node_modules/material-ui/node_modules/jss/lib/renderers/DomRenderer.js.flow:15
 15: function getStyle(rule: HTMLElement|CSSStyleRule, prop: string): string {
                                         ^^^^^^^^^^^^ identifier `CSSStyleRule`. Could not resolve name
Error: node_modules/material-ui/node_modules/jss/lib/renderers/DomRenderer.js.flow:128
128:       return node
                  ^^^^ Node. This type is incompatible with the expected return type of
123: function findCommentNode(text: string): Comment|null {
                                             ^^^^^^^^^^^^ union: Comment | null
  Member 1:
  123: function findCommentNode(text: string): Comment|null {
                                               ^^^^^^^ Comment
  Error:
  128:       return node
                    ^^^^ Node. This type is incompatible with
  123: function findCommentNode(text: string): Comment|null {
                                               ^^^^^^^ Comment
  Member 2:
  123: function findCommentNode(text: string): Comment|null {
                                                       ^^^^ null
  Error:
  128:       return node
                    ^^^^ Node. This type is incompatible with
  123: function findCommentNode(text: string): Comment|null {
                                                       ^^^^ null
Error: node_modules/material-ui/node_modules/jss/lib/utils/findRenderer.js.flow:15
 15:   return useVirtual ? VirtualRenderer : DomRenderer
                           ^^^^^^^^^^^^^^^ VirtualRenderer. This type is incompatible with the expected return type of
 12: export default function findRenderer(options: JssOptions = {}): Class<Renderer> {
                                                                           ^^^^^^^^ Renderer
  Property `constructor` is incompatible:
      7: export default class VirtualRenderer {
                              ^^^^^^^^^^^^^^^ default constructor. This type is incompatible with. See: node_modules/material-ui/node_modules/jss/lib/renderers/VirtualRenderer.js.flow:7
     25:   constructor(sheet?: StyleSheet): Renderer;
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function type. See: node_modules/material-ui/node_modules/jss/lib/types.js.flow:25
      This parameter is incompatible:
          7: export default class VirtualRenderer {
                                  ^^^^^^^^^^^^^^^ undefined. This type is incompatible with. See: node_modules/material-ui/node_modules/jss/lib/renderers/VirtualRenderer.js.flow:7
         25:   constructor(sheet?: StyleSheet): Renderer;
                                                ^^^^^^^^ Renderer. See: node_modules/material-ui/node_modules/jss/lib/types.js.flow:25
          Property `attach` is incompatible:
             25:   constructor(sheet?: StyleSheet): Renderer;
                                                    ^^^^^^^^ property `attach` of Renderer. Property not found in possibly undefined value. See: node_modules/material-ui/node_modules/jss/lib/types.js.flow:25
              7: export default class VirtualRenderer {
                                      ^^^^^^^^^^^^^^^ undefined. See: node_modules/material-ui/node_modules/jss/lib/renderers/VirtualRenderer.js.flow:7

I just checked, can't reproduce, please verify if you are REALLY using JSS 9 in that case by looking into directory.

material-ui is not using JSS 9 yet.

Apologies - turns out I was looking at the package.json/node_modules for one project while running flow status against another. No issues encountered. Thanks!

Same error with last version of JSS and Flow:

Error: node_modules/jss/lib/renderers/DomRenderer.js.flow:28
 28: function getStyle(cssRule: HTMLElement | CSSStyleRule, prop: string): string {
                                              ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

Error: node_modules/jss/lib/renderers/DomRenderer.js.flow:78
 78:   return (cssRule: CSSOMRule): string => {
                        ^^^^^^^^^ CSSOMRule. Could not resolve name

Error: node_modules/jss/lib/rules/ConditionalRule.js.flow:25
 25:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

Error: node_modules/jss/lib/rules/FontFaceRule.js.flow:16
 16:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

Error: node_modules/jss/lib/rules/KeyframesRule.js.flow:19
 19:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

Error: node_modules/jss/lib/rules/SimpleRule.js.flow:15
 15:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

Error: node_modules/jss/lib/rules/StyleRule.js.flow:27
 27:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

Error: node_modules/jss/lib/rules/ViewportRule.js.flow:16
 16:   renderable: ?CSSStyleRule
                    ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

Error: node_modules/jss/lib/types.js.flow:37
 37:     cssRule: HTMLElement | CSSStyleRule,
                                ^^^^^^^^^^^^ CSSStyleRule. Could not resolve name

If I include jss/flow-typed in .flowconfig, I got:

node_modules/jss/flow-typed/cssom.js:9
  9:   static STYLE_RULE: 1;
       ^^^^^^ Unexpected static modifier

@ohardy could you provide the flow version please?

Flow, a static type checker for JavaScript, version 0.64.0

@ohardy I have the same issue, it is because the newest version of flow does not support the static modifier anymore apparently. If im not mistaken, this is since [email protected]

Same issue for me, new repo, using material ui, importing JSS to create the options for JssProvider

import { create } from 'jss';
import { MuiThemeProvider, createMuiTheme, jssPreset, createGenerateClassName } from 'material-ui/styles';

const jss = create(jssPreset());

Added node_modules/jss/flow-typed to my flow config and then I get the same error as @ohardy

Error โ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆโ”ˆ node_modules/jss/flow-typed/cssom.js:9:3

Unexpected static modifier

      6โ”‚   +CSSStyleSheet: ?CSSStyleSheet;
      7โ”‚   cssText: DOMString;
      8โ”‚
      9โ”‚   static STYLE_RULE: 1;
     10โ”‚   static CHARSET_RULE: 2; // deprecated
     11โ”‚   static IMPORT_RULE: 3;
     12โ”‚   static MEDIA_RULE: 4;

versions:
package.json "jss": "^9.8.0", "material-ui": "next", "flow-bin": "^0.66.0",

Upgraded JSS to flow v0.68.0, JSS v.9.8.1 is published.

๐Ÿ‘ confirmed working for me cheers

Was this page helpful?
0 / 5 - 0 ratings

Related issues

trusktr picture trusktr  ยท  6Comments

mg901 picture mg901  ยท  3Comments

kof picture kof  ยท  4Comments

oliviertassinari picture oliviertassinari  ยท  4Comments

brianmhunt picture brianmhunt  ยท  5Comments