@@ -2,53 +2,68 @@ const { version } = require("./package.json")
22let lastRequestId = - 1
33
44function wrapAutoseg ( urlOrVersion ) {
5- if ( urlOrVersion . match ( / ^ [ 0 - 9 ] + \. [ 0 - 9 ] + \. [ 0 - 9 ] + $ / ) ) {
6- urlOrVersion = `https://unpkg.com/autoseg@${ urlOrVersion } /webworker-worker-bundle.js`
7- }
5+ try {
6+ if (
7+ typeof window === "undefined" ||
8+ ! window . URL ||
9+ ! window . URL . createObjectURL
10+ ) {
11+ console . log (
12+ "autoseg not loading- no window (why are you using the browser version?)"
13+ )
14+ return { }
15+ }
16+ if ( urlOrVersion . match ( / ^ [ 0 - 9 ] + \. [ 0 - 9 ] + \. [ 0 - 9 ] + $ / ) ) {
17+ urlOrVersion = `https://unpkg.com/autoseg@${ urlOrVersion } /webworker-worker-bundle.js`
18+ }
19+
20+ const blob = new Blob ( [ `importScripts('${ urlOrVersion } ')` ] , {
21+ type : "application/javascript" ,
22+ } )
23+ const blobUrl = window . URL . createObjectURL ( blob )
24+ const webworker = new Worker ( blobUrl )
25+
26+ // This is blocked by a unfixable CORS error
27+ // const webworker = new Worker(urlOrVersion)
828
9- const blob = new Blob ( [ `importScripts('${ urlOrVersion } ')` ] , {
10- type : "application/javascript" ,
11- } )
12- const blobUrl = window . URL . createObjectURL ( blob )
13- const webworker = new Worker ( blobUrl )
14-
15- // This is blocked by a unfixable CORS error
16- // const webworker = new Worker(urlOrVersion)
17-
18- const functions = [ "setConfig" , "loadImage" , "getMask" ]
19-
20- const obj = { }
21-
22- for ( const functionName of functions ) {
23- const id = lastRequestId ++
24- obj [ functionName ] = ( ...args ) => {
25- webworker . postMessage ( { functionName, args, id } )
26- return new Promise ( ( resolve , reject ) => {
27- const possibleResponse = ( e ) => {
28- const { data } = e
29- if ( ! data ) return
30- if ( data . id === id ) {
31- webworker . removeEventListener ( "message" , possibleResponse )
32- if ( data . error ) {
33- reject ( new Error ( data . error ) )
34- } else {
35- // There's some issue with the serialization of the ImageData
36- // for getMask
37- if ( functionName === "getMask" ) {
38- const { data : pixels , width, height } = data . returnValue
39- resolve ( new ImageData ( pixels , width , height ) )
29+ const functions = [ "setConfig" , "loadImage" , "getMask" ]
30+
31+ const obj = { }
32+
33+ for ( const functionName of functions ) {
34+ const id = lastRequestId ++
35+ obj [ functionName ] = ( ...args ) => {
36+ webworker . postMessage ( { functionName, args, id } )
37+ return new Promise ( ( resolve , reject ) => {
38+ const possibleResponse = ( e ) => {
39+ const { data } = e
40+ if ( ! data ) return
41+ if ( data . id === id ) {
42+ webworker . removeEventListener ( "message" , possibleResponse )
43+ if ( data . error ) {
44+ reject ( new Error ( data . error ) )
4045 } else {
41- resolve ( data . returnValue )
46+ // There's some issue with the serialization of the ImageData
47+ // for getMask
48+ if ( functionName === "getMask" ) {
49+ const { data : pixels , width, height } = data . returnValue
50+ resolve ( new ImageData ( pixels , width , height ) )
51+ } else {
52+ resolve ( data . returnValue )
53+ }
4254 }
4355 }
4456 }
45- }
46- webworker . addEventListener ( "message" , possibleResponse )
47- } )
57+ webworker . addEventListener ( "message" , possibleResponse )
58+ } )
59+ }
4860 }
49- }
5061
51- return obj
62+ return obj
63+ } catch ( e ) {
64+ console . log ( `error loading autoseg: ${ e . toString ( ) } ` )
65+ return { }
66+ }
5267}
5368
5469module . exports = wrapAutoseg (
0 commit comments