Skip to content

Commit cb2af91

Browse files
committed
Merge branch 'master' into improve-types
2 parents d244ea5 + f88395f commit cb2af91

File tree

19 files changed

+112
-132
lines changed

19 files changed

+112
-132
lines changed

changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
### Improvements
88

9+
- [jss] Remove VirtualRenderer and the option `virtual: true`. Now to simulate a non-browser environment, pass `create({Renderer: null})` when creating a Jss instance.
910
- [react-jss] Add dynamic rules to the static sheet ([#1048](https://github.com/cssinjs/jss/pull/1048))
1011

1112
## 10.0.0-alpha.12 (2019-2-27)

docs/jss-api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ Options:
4747

4848
- `createGenerateId` - a function which returns a function which generates unique class names.
4949
- `plugins` - an array of functions, will be passed to `jss.use`.
50-
- `virtual` - if true, JSS will use VirtualRenderer.
50+
- `Renderer` - if null, JSS will not render to DOM, or pass a custom Renderer.
5151
- `insertionPoint` - string value of a DOM comment node which marks the start of sheets or a rendered DOM node. Sheets rendered by this Jss instance are inserted after this point sequentially.
5252

5353
**Note**: Each `jss.setup()` call will perform a shallow merge with the old options except for `plugins`. Passed `plugins` will get added to the existing plugins.

packages/jss-plugin-template/benchmark/tests/createSheet.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {create} from 'jss'
33
import template from '../../src/index'
44
import parse from '../../src/parse'
55

6-
const options = {virtual: true}
6+
const options = {Renderer: null}
77
const jss = create(options).use(template())
88

99
const css = `

packages/jss/.size-snapshot.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
{
22
"dist/jss.js": {
3-
"bundled": 59644,
4-
"minified": 22179,
5-
"gzipped": 6636
3+
"bundled": 58916,
4+
"minified": 21875,
5+
"gzipped": 6588
66
},
77
"dist/jss.min.js": {
8-
"bundled": 58478,
9-
"minified": 21261,
10-
"gzipped": 6190
8+
"bundled": 57750,
9+
"minified": 20957,
10+
"gzipped": 6147
1111
},
1212
"dist/jss.cjs.js": {
13-
"bundled": 55048,
14-
"minified": 24138,
15-
"gzipped": 6689
13+
"bundled": 54372,
14+
"minified": 23786,
15+
"gzipped": 6637
1616
},
1717
"dist/jss.esm.js": {
18-
"bundled": 54552,
19-
"minified": 23734,
20-
"gzipped": 6607,
18+
"bundled": 53876,
19+
"minified": 23382,
20+
"gzipped": 6555,
2121
"treeshaked": {
2222
"rollup": {
23-
"code": 19321,
23+
"code": 19017,
2424
"import_statements": 281
2525
},
2626
"webpack": {
27-
"code": 20736
27+
"code": 20432
2828
}
2929
}
3030
}

packages/jss/benchmark/tests/bootstrap.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import global from 'jss-plugin-global'
44
import styles from '../fixtures/bootstrap.json'
55

66
// Avoid memory leak with registry.
7-
const options = {virtual: true}
7+
const options = {Renderer: null}
88
const jssWithoutGlobal = create(options)
99
const jssWithGlobal = create(options).use(global())
1010

packages/jss/benchmark/tests/conditional-regular.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import conditional from '../fixtures/conditional.json'
33
import regular from '../fixtures/regular.json'
44

55
// Avoid memory leak with registry.
6-
const options = {virtual: true}
6+
const options = {Renderer: null}
77

88
suite('Conditional vs. regular rules to CSS', () => {
99
benchmark('conditionals .toString()', () => {

packages/jss/benchmark/tests/create-instance.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {create} from 'jss'
22
import preset from 'jss-preset-default'
33

44
// Avoid memory leak with registry.
5-
const options = {virtual: true}
5+
const options = {Renderer: null}
66

77
suite('create a new instance', () => {
88
benchmark('without preset', () => {

packages/jss/src/renderers/DomRenderer.js renamed to packages/jss/src/DomRenderer.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
/* @flow */
22
import warning from 'tiny-warning'
3-
import sheets from '../sheets'
4-
import toCssValue from '../utils/toCssValue'
3+
import sheets from './sheets'
4+
import toCssValue from './utils/toCssValue'
55
import type {
66
CSSStyleRule,
77
CSSMediaRule,
88
CSSKeyframesRule,
99
CSSKeyframeRule,
1010
HTMLElementWithStyleMap,
11+
AnyCSSRule,
1112
Rule,
1213
RuleList,
1314
ContainerRule,
1415
JssValue,
1516
InsertionPoint,
1617
StyleSheet
17-
} from '../types'
18+
} from './types'
1819

1920
type PriorityOptions = {
2021
index: number,
@@ -184,7 +185,7 @@ function findPrevNode(options: PriorityOptions): PrevNode | false {
184185
if (registry.length > 0) {
185186
// Try to insert before the next higher sheet.
186187
let sheet = findHigherSheet(registry, options)
187-
if (sheet) {
188+
if (sheet && sheet.renderer) {
188189
return {
189190
parent: sheet.renderer.element.parentNode,
190191
node: sheet.renderer.element
@@ -193,7 +194,7 @@ function findPrevNode(options: PriorityOptions): PrevNode | false {
193194

194195
// Otherwise insert after the last attached.
195196
sheet = findHighestSheet(registry, options)
196-
if (sheet) {
197+
if (sheet && sheet.renderer) {
197198
return {
198199
parent: sheet.renderer.element.parentNode,
199200
node: sheet.renderer.element.nextSibling
@@ -299,7 +300,7 @@ export default class DomRenderer {
299300
// HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696
300301
element: any
301302

302-
sheet: ?StyleSheet
303+
sheet: StyleSheet | void
303304

304305
hasInsertedRules: boolean = false
305306

@@ -373,7 +374,7 @@ export default class DomRenderer {
373374
rule: Rule,
374375
index?: number,
375376
nativeParent?: CSSStyleSheet | CSSMediaRule | CSSKeyframesRule = this.element.sheet
376-
): false | CSSStyleSheet | CSSMediaRule | CSSKeyframesRule | CSSRule {
377+
): false | CSSStyleSheet | AnyCSSRule {
377378
if (rule.rules) {
378379
const parent: ContainerRule = (rule: any)
379380
let latestNativeParent = nativeParent
@@ -405,7 +406,7 @@ export default class DomRenderer {
405406
/**
406407
* Delete a rule.
407408
*/
408-
deleteRule(cssRule: CSSRule): boolean {
409+
deleteRule(cssRule: AnyCSSRule): boolean {
409410
const {sheet} = this.element
410411
const index = this.indexOf(cssRule)
411412
if (index === -1) return false
@@ -416,7 +417,7 @@ export default class DomRenderer {
416417
/**
417418
* Get index of a CSS Rule.
418419
*/
419-
indexOf(cssRule: CSSRule): number {
420+
indexOf(cssRule: AnyCSSRule): number {
420421
const {cssRules} = this.element.sheet
421422
for (let index = 0; index < cssRules.length; index++) {
422423
if (cssRule === cssRules[index]) return index
@@ -429,10 +430,7 @@ export default class DomRenderer {
429430
*
430431
* Only used for some old browsers because they can't set a selector.
431432
*/
432-
replaceRule(
433-
cssRule: CSSRule,
434-
rule: Rule
435-
): false | CSSStyleSheet | CSSMediaRule | CSSKeyframesRule | CSSRule {
433+
replaceRule(cssRule: AnyCSSRule, rule: Rule): false | CSSStyleSheet | AnyCSSRule {
436434
const index = this.indexOf(cssRule)
437435
if (index === -1) return false
438436
this.element.sheet.deleteRule(index)

packages/jss/src/Jss.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import sheets from './sheets'
66
import {plugins as internalPlugins} from './plugins/index'
77
import createGenerateIdDefault from './utils/createGenerateId'
88
import createRule from './utils/createRule'
9-
import DomRenderer from './renderers/DomRenderer'
10-
import VirtualRenderer from './renderers/VirtualRenderer'
9+
import DomRenderer from './DomRenderer'
1110
import type {
1211
Rule,
1312
RuleFactoryOptions,
@@ -31,7 +30,7 @@ export default class Jss {
3130

3231
options: InternalJssOptions = {
3332
createGenerateId: createGenerateIdDefault,
34-
Renderer: isInBrowser ? DomRenderer : VirtualRenderer,
33+
Renderer: isInBrowser ? DomRenderer : null,
3534
plugins: []
3635
}
3736

@@ -57,8 +56,8 @@ export default class Jss {
5756
}
5857

5958
if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint
60-
if (options.virtual || options.Renderer) {
61-
this.options.Renderer = options.Renderer || (options.virtual ? VirtualRenderer : DomRenderer)
59+
if ('Renderer' in options) {
60+
this.options.Renderer = options.Renderer
6261
}
6362

6463
// eslint-disable-next-line prefer-spread

packages/jss/src/StyleSheet.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import type {
1010
JssStyle,
1111
Classes,
1212
KeyframesMap,
13-
JssStyles
13+
JssStyles,
14+
Renderer
1415
} from './types'
1516

1617
export default class StyleSheet {
@@ -22,7 +23,7 @@ export default class StyleSheet {
2223

2324
rules: RuleList
2425

25-
renderer: Object
26+
renderer: Renderer | null
2627

2728
classes: Classes
2829

@@ -42,7 +43,9 @@ export default class StyleSheet {
4243
classes: this.classes,
4344
keyframes: this.keyframes
4445
}
45-
this.renderer = new options.Renderer(this)
46+
if (options.Renderer) {
47+
this.renderer = new options.Renderer(this)
48+
}
4649
this.rules = new RuleList(this.options)
4750

4851
for (const name in styles) {
@@ -56,7 +59,7 @@ export default class StyleSheet {
5659
* Attach renderable to the render tree.
5760
*/
5861
attach(): this {
59-
if (this.attached) return this
62+
if (this.attached || !this.renderer) return this
6063
this.renderer.attach()
6164
this.attached = true
6265
// Order is important, because we can't use insertRule API if style element is not attached.
@@ -68,7 +71,7 @@ export default class StyleSheet {
6871
* Remove renderable from render tree.
6972
*/
7073
detach(): this {
71-
if (!this.attached) return this
74+
if (!this.attached || !this.renderer) return this
7275
this.renderer.detach()
7376
this.attached = false
7477
return this
@@ -118,7 +121,9 @@ export default class StyleSheet {
118121
* Insert rule into the StyleSheet
119122
*/
120123
insertRule(rule: Rule) {
121-
this.renderer.insertRule(rule)
124+
if (this.renderer) {
125+
this.renderer.insertRule(rule)
126+
}
122127
}
123128

124129
/**
@@ -152,7 +157,7 @@ export default class StyleSheet {
152157

153158
this.rules.remove(rule)
154159

155-
if (this.attached && rule.renderable) {
160+
if (this.attached && rule.renderable && this.renderer) {
156161
return this.renderer.deleteRule(rule.renderable)
157162
}
158163

@@ -170,8 +175,10 @@ export default class StyleSheet {
170175
* Deploy pure CSS string to a renderable.
171176
*/
172177
deploy(): this {
173-
this.renderer.deploy()
174-
this.deployed = true
178+
if (this.renderer) {
179+
this.renderer.deploy()
180+
this.deployed = true
181+
}
175182
return this
176183
}
177184

0 commit comments

Comments
 (0)