Skip to content

Commit 6918c69

Browse files
authored
feat: shim web worker (#52)
* feat: shim web worker * chore: bump dep lol
1 parent 17ff24a commit 6918c69

File tree

5 files changed

+40
-40
lines changed

5 files changed

+40
-40
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
"react-dom": "16.9.0",
8484
"rollup-plugin-commonjs": "^10.1.0",
8585
"rollup-plugin-node-resolve": "^5.2.0",
86-
"rollup-plugin-web-worker-loader": "p0lip/rollup-plugin-web-worker-loader",
86+
"rollup-plugin-web-worker-loader": "p0lip/rollup-plugin-web-worker-loader#d833c63590598ec66d051066826b6ce8d57710a9",
8787
"ts-jest": "^24.0.2",
8888
"tslint": "^5.19.0",
8989
"tslint-config-stoplight": "^1.2.0",

src/components/JsonSchemaViewer.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Intent, Spinner } from '@stoplight/ui-kit';
33
import cn from 'classnames';
44
import { runInAction } from 'mobx';
55
import * as React from 'react';
6-
import SchemaWorker from 'web-worker:../workers/schema.ts';
6+
import SchemaWorker, { WebWorker } from 'web-worker:../workers/schema.ts';
77

88
import { JSONSchema4 } from 'json-schema';
99
import { GoToRefHandler, RowRenderer, SchemaTreeListNode } from '../types';
@@ -35,7 +35,7 @@ export interface IJsonSchemaViewer {
3535
export class JsonSchemaViewerComponent extends React.PureComponent<IJsonSchemaViewer> {
3636
protected treeStore: TreeStore;
3737
protected instanceId: string;
38-
protected schemaWorker?: Worker;
38+
protected schemaWorker?: WebWorker;
3939

4040
public state = {
4141
computing: false,
@@ -82,19 +82,23 @@ export class JsonSchemaViewerComponent extends React.PureComponent<IJsonSchemaVi
8282

8383
protected prerenderSchema() {
8484
const schema = this.schema;
85-
let needsFullRendering = true;
85+
const isWorkerSpawn = this.schemaWorker !== void 0 && !('isShim' in this.schemaWorker);
86+
let needsFullRendering = isWorkerSpawn;
87+
8688
const renderedSchema = renderSchema(
8789
schema,
8890
0,
8991
{ path: [] },
90-
{
91-
depth: this.expandedDepth + 1,
92-
},
92+
isWorkerSpawn
93+
? {
94+
depth: this.expandedDepth + 1,
95+
}
96+
: void 0,
9397
);
9498

9599
const nodes: SchemaTreeListNode[] = [];
96100

97-
if (this.props.maxRows !== undefined) {
101+
if (isWorkerSpawn && this.props.maxRows !== undefined) {
98102
let i = this.props.maxRows;
99103
let hasAllOf = false;
100104
for (const node of renderedSchema) {

src/components/__tests__/JsonSchemaViewer.spec.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ describe('JSON Schema Viewer component', () => {
4141
(SchemaWorker.prototype.addEventListener as jest.Mock).mockClear();
4242
});
4343

44+
afterEach(() => {
45+
delete SchemaWorker.prototype.isShim;
46+
});
47+
4448
test('should render empty message if schema is empty', () => {
4549
(isSchemaViewerEmpty as jest.Mock).mockReturnValue(true);
4650
const wrapper = shallow(<JsonSchemaViewerComponent schema={{}} />);
@@ -155,6 +159,14 @@ describe('JSON Schema Viewer component', () => {
155159
expect(wrapper.instance()).toHaveProperty('treeStore.nodes', nodes);
156160
});
157161

162+
test('should render all nodes on main thread when worker cannot be spawned regardless of maxRows or schema', () => {
163+
SchemaWorker.prototype.isShim = true;
164+
const wrapper = shallow(<JsonSchemaViewerComponent schema={schema as JSONSchema4} maxRows={1} />);
165+
166+
expect(SchemaWorker.prototype.postMessage).not.toHaveBeenCalled();
167+
expect(wrapper.instance()).toHaveProperty('treeStore.nodes.length', 4);
168+
});
169+
158170
test('should not apply result of full processing in a worker if instance ids do not match', () => {
159171
const wrapper = shallow(<JsonSchemaViewerComponent schema={schema as JSONSchema4} maxRows={0} />);
160172
expect(SchemaWorker.prototype.postMessage).toHaveBeenCalledWith({

web-worker-loader.d.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
declare module 'web-worker:*' {
2-
declare var WebWorker: {
3-
prototype: Worker;
4-
new (): Worker;
2+
// tslint:disable-next-line:interface-name
3+
declare interface ShimmedWebWorker extends Worker {
4+
isShim: true;
5+
}
6+
7+
declare const WebWorker: {
8+
prototype: Worker | ShimmedWebWorker;
9+
new (): Worker | ShimmedWebWorker;
510
};
611

712
export default WebWorker;
13+
export type WebWorker = Worker | ShimmedWebWorker;
814
}
915

1016
declare module 'rollup-plugin-web-worker-loader-helper' {

yarn.lock

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5354,7 +5354,7 @@ debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
53545354
dependencies:
53555355
ms "^2.1.1"
53565356

5357-
debuglog@*, debuglog@^1.0.1:
5357+
debuglog@^1.0.1:
53585358
version "1.0.1"
53595359
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
53605360
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
@@ -7580,7 +7580,7 @@ import-local@^2.0.0:
75807580
pkg-dir "^3.0.0"
75817581
resolve-cwd "^2.0.0"
75827582

7583-
imurmurhash@*, imurmurhash@^0.1.4:
7583+
imurmurhash@^0.1.4:
75847584
version "0.1.4"
75857585
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
75867586
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
@@ -9261,11 +9261,6 @@ lodash-es@^4.17.11, lodash-es@^4.17.15:
92619261
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
92629262
integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
92639263

9264-
lodash._baseindexof@*:
9265-
version "3.1.0"
9266-
resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
9267-
integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=
9268-
92699264
lodash._baseisequal@^3.0.0:
92709265
version "3.0.7"
92719266
resolved "https://registry.yarnpkg.com/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz#d8025f76339d29342767dcc887ce5cb95a5b51f1"
@@ -9283,29 +9278,17 @@ lodash._baseuniq@~4.6.0:
92839278
lodash._createset "~4.0.0"
92849279
lodash._root "~3.0.0"
92859280

9286-
lodash._bindcallback@*, lodash._bindcallback@^3.0.0:
9281+
lodash._bindcallback@^3.0.0:
92879282
version "3.0.1"
92889283
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
92899284
integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
92909285

9291-
lodash._cacheindexof@*:
9292-
version "3.0.2"
9293-
resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
9294-
integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=
9295-
9296-
lodash._createcache@*:
9297-
version "3.1.2"
9298-
resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
9299-
integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=
9300-
dependencies:
9301-
lodash._getnative "^3.0.0"
9302-
93039286
lodash._createset@~4.0.0:
93049287
version "4.0.3"
93059288
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
93069289
integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=
93079290

9308-
lodash._getnative@*, lodash._getnative@^3.0.0:
9291+
lodash._getnative@^3.0.0:
93099292
version "3.9.1"
93109293
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
93119294
integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
@@ -9422,11 +9405,6 @@ lodash.pick@^4.4.0:
94229405
resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
94239406
integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
94249407

9425-
lodash.restparam@*:
9426-
version "3.6.1"
9427-
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
9428-
integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
9429-
94309408
lodash.set@^4.3.2:
94319409
version "4.3.2"
94329410
resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
@@ -13014,9 +12992,9 @@ rollup-plugin-typescript2@^0.21.1:
1301412992
rollup-pluginutils "2.6.0"
1301512993
tslib "1.9.3"
1301612994

13017-
rollup-plugin-web-worker-loader@p0lip/rollup-plugin-web-worker-loader:
13018-
version "0.5.2"
13019-
resolved "https://codeload.github.com/p0lip/rollup-plugin-web-worker-loader/tar.gz/c06acd26282c537e03d30848dcabecd4581e4111"
12995+
rollup-plugin-web-worker-loader@p0lip/rollup-plugin-web-worker-loader#d833c63590598ec66d051066826b6ce8d57710a9:
12996+
version "0.5.3"
12997+
resolved "https://codeload.github.com/p0lip/rollup-plugin-web-worker-loader/tar.gz/d833c63590598ec66d051066826b6ce8d57710a9"
1302012998

1302112999
rollup-pluginutils@2.6.0:
1302213000
version "2.6.0"

0 commit comments

Comments
 (0)