@@ -72,42 +72,40 @@ const cache = {
7272 '@effector/babel-plugin' : new Map ( ) ,
7373}
7474
75- const fetchEffector = createEffect ( 'fetch effector' , {
76- async handler ( ver : string ) {
77- const url =
78- ver === 'master'
79- ? 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector/effector.cjs.js'
80- : `https://unpkg.com/effector@${ ver } /effector.cjs.js`
81- return getLibraryCode ( `effector.${ ver } .js` , url )
82- } ,
75+ const fetchEffectorFx = createEffect ( ( ver : string ) => {
76+ const url =
77+ ver === 'master'
78+ ? 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector/effector.cjs.js'
79+ : `https://unpkg.com/effector@${ ver } /effector.cjs.js`
80+ return getLibraryCode ( `effector.${ ver } .js` , url )
8381} )
8482
85- sample ( { clock : fetchEffector . fail , fn : ( ) => 'master' , target : selectVersion } )
83+ sample ( { clock : fetchEffectorFx . fail , fn : ( ) => 'master' , target : selectVersion } )
8684
87- const fetchBabelPlugin = createEffect < string , { [ key : string ] : any } , any > ( {
88- async handler ( ver ) {
89- let url : string
90- if ( ver === 'master' ) {
91- url =
92- 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector/babel-plugin.js'
85+ const fetchBabelPluginFx = createEffect ( ( ver : string ) => {
86+ let url : string
87+ if ( ver === 'master' ) {
88+ url =
89+ 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector/babel-plugin.js'
90+ } else {
91+ let [ major , minor = '' , patch = '' ] = ver . split ( '.' )
92+ patch = patch . split ( '-' ) [ 0 ]
93+ if (
94+ major === '0' &&
95+ ( parseInt ( minor ) < 18 || ( minor === '18' && parseInt ( patch ) < 7 ) )
96+ ) {
97+ url = `https://unpkg.com/@effector/babel-plugin@latest/index.js`
9398 } else {
94- let [ major , minor = '' , patch = '' ] = ver . split ( '.' )
95- patch = patch . split ( '-' ) [ 0 ]
96- if (
97- major === '0' &&
98- ( parseInt ( minor ) < 18 || ( minor === '18' && parseInt ( patch ) < 7 ) )
99- ) {
100- url = `https://unpkg.com/@effector/babel-plugin@latest/index.js`
101- } else {
102- url = `https://unpkg.com/effector@${ ver } /babel-plugin.js`
103- }
99+ url = `https://unpkg.com/effector@${ ver } /babel-plugin.js`
104100 }
105- return getLibraryCode ( `effector-babel-plugin.${ ver } .js` , url )
106- } ,
101+ }
102+ return getLibraryCode ( `effector-babel-plugin.${ ver } .js` , url ) as {
103+ [ key : string ] : any
104+ }
107105} )
108106
109- const fetchEffectorInspect = createEffect (
110- async ( { effector, ver} : { effector : any ; ver : string } ) => {
107+ const fetchEffectorInspectFx = createEffect (
108+ ( { effector, ver} : { effector : any ; ver : string } ) => {
111109 const url =
112110 ver === 'master'
113111 ? 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector/inspect.js'
@@ -131,102 +129,90 @@ function getShiSelectorDefinition(shimSelector: any) {
131129 return result
132130}
133131
134- const fetchEffectorSolid = createEffect < any , { [ key : string ] : any } , any > ( {
135- async handler ( effector ) {
136- const effectorSolidUrl =
137- 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-solid/effector-solid.cjs.js'
138- const solidJsUrl = 'https://unpkg.com/solid-js/dist/dev.cjs'
139- const solidJsWebUrl = 'https://unpkg.com/solid-js/web/dist/dev.cjs'
132+ const fetchEffectorSolidFx = createEffect ( async effector => {
133+ const effectorSolidUrl =
134+ 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-solid/effector-solid.cjs.js'
135+ const solidJsUrl = 'https://unpkg.com/solid-js/dist/dev.cjs'
136+ const solidJsWebUrl = 'https://unpkg.com/solid-js/web/dist/dev.cjs'
140137
141- const solidJs = await getLibraryCode ( 'solid-js' , solidJsUrl )
142- const solidJsWeb = await getLibraryCode ( 'solid-js/web' , solidJsWebUrl , {
143- 'solid-js' : solidJs ,
144- } )
138+ const solidJs = await getLibraryCode ( 'solid-js' , solidJsUrl )
139+ const solidJsWeb = await getLibraryCode ( 'solid-js/web' , solidJsWebUrl , {
140+ 'solid-js' : solidJs ,
141+ } )
145142
146- const effectorSolid = await getLibraryCode (
147- `effector-solid.cjs.js` ,
148- effectorSolidUrl ,
149- {
150- effector,
151- 'solid-js' : solidJs ,
152- 'solid-js/web' : solidJsWeb ,
153- } ,
154- )
143+ const effectorSolid = await getLibraryCode (
144+ `effector-solid.cjs.js` ,
145+ effectorSolidUrl ,
146+ {
147+ effector,
148+ 'solid-js' : solidJs ,
149+ 'solid-js/web' : solidJsWeb ,
150+ } ,
151+ )
155152
156- return {
157- effectorSolid,
158- solidJs,
159- solidJsWeb,
160- }
161- } ,
153+ return {
154+ effectorSolid,
155+ solidJs,
156+ solidJsWeb,
157+ }
162158} )
163159
164- const fetchEffectorReact = createEffect < any , { [ key : string ] : any } , any > ( {
165- async handler ( effector ) {
166- const effectorReactUrl =
167- 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-react/effector-react.cjs.js'
168- const shimUrl =
169- 'https://unpkg.com/[email protected] /cjs/use-sync-external-store-shim.production.min.js' 170- const withSelectorUrl =
171- 'https://unpkg.com/[email protected] /cjs/use-sync-external-store-shim/with-selector.production.min.js' 172- const shimName = 'use-sync-external-store/shim/index.js'
173- const shimSelectorName = 'use-sync-external-store/shim/with-selector.js'
174- const shim = await getLibraryCode ( shimName , shimUrl )
175- const withSelector = await getLibraryCode (
176- shimSelectorName ,
177- withSelectorUrl ,
178- getShimDefinition ( shim ) ,
179- )
180- const effectorReact = await getLibraryCode (
181- `effector-react.cjs.js` ,
182- effectorReactUrl ,
183- {
184- effector,
185- ...getShimDefinition ( shim ) ,
186- ...getShiSelectorDefinition ( withSelector ) ,
187- } ,
188- )
189- return { effectorReact, shim, withSelector}
190- } ,
160+ const fetchEffectorReactFx = createEffect ( async effector => {
161+ const effectorReactUrl =
162+ 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-react/effector-react.cjs.js'
163+ const shimUrl =
164+ 'https://unpkg.com/[email protected] /cjs/use-sync-external-store-shim.production.min.js' 165+ const withSelectorUrl =
166+ 'https://unpkg.com/[email protected] /cjs/use-sync-external-store-shim/with-selector.production.min.js' 167+ const shimName = 'use-sync-external-store/shim/index.js'
168+ const shimSelectorName = 'use-sync-external-store/shim/with-selector.js'
169+ const shim = await getLibraryCode ( shimName , shimUrl )
170+ const withSelector = await getLibraryCode (
171+ shimSelectorName ,
172+ withSelectorUrl ,
173+ getShimDefinition ( shim ) ,
174+ )
175+ const effectorReact = await getLibraryCode (
176+ `effector-react.cjs.js` ,
177+ effectorReactUrl ,
178+ {
179+ effector,
180+ ...getShimDefinition ( shim ) ,
181+ ...getShiSelectorDefinition ( withSelector ) ,
182+ } ,
183+ )
184+ return { effectorReact, shim, withSelector}
191185} )
192186
193- const fetchForest = createEffect ( {
194- async handler ( effector ) {
195- const url =
196- 'https://effector--canary.s3-eu-west-1.amazonaws.com/forest/forest.cjs.js'
197- return getLibraryCode ( `forest.cjs.js` , url , { effector} )
198- } ,
187+ const fetchForestFx = createEffect ( effector => {
188+ const url =
189+ 'https://effector--canary.s3-eu-west-1.amazonaws.com/forest/forest.cjs.js'
190+ return getLibraryCode ( `forest.cjs.js` , url , { effector} )
199191} )
200192
201- const fetchEffectorReactSSR = createEffect ( {
202- async handler ( deps ) {
203- const url =
204- 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-react/scope.js'
205- return getLibraryCode ( `scope.js` , url , deps )
206- } ,
193+ const fetchEffectorReactSSRFx = createEffect ( deps => {
194+ const url =
195+ 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-react/scope.js'
196+ return getLibraryCode ( `scope.js` , url , deps )
207197} )
208198
209- const fetchEffectorSolidSSR = createEffect ( {
210- async handler ( deps ) {
211- const url =
212- 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-solid/scope.js'
213- return getLibraryCode ( `scope.js` , url , deps )
214- } ,
199+ const fetchEffectorSolidSSRFx = createEffect ( deps => {
200+ const url =
201+ 'https://effector--canary.s3-eu-west-1.amazonaws.com/effector-solid/scope.js'
202+ return getLibraryCode ( `scope.js` , url , deps )
215203} )
216204
217- const fetchPatronum = createEffect ( {
218- async handler ( effector ) {
219- const url = 'https://unpkg.com/patronum/patronum.cjs'
220- return getLibraryCode ( `patronum.js` , url , { effector} )
221- } ,
205+ const fetchPatronumFx = createEffect ( effector => {
206+ const url = 'https://unpkg.com/patronum/patronum.cjs'
207+ return getLibraryCode ( `patronum.js` , url , { effector} )
222208} )
223209
224- fetchBabelPlugin . fail . watch ( ( ) => selectVersion ( 'master' ) )
210+ fetchBabelPluginFx . fail . watch ( ( ) => selectVersion ( 'master' ) )
225211
226212const api = {
227- effector : fetchEffector ,
228- '@effector/babel-plugin' : fetchBabelPlugin ,
229- forest : fetchForest ,
213+ effector : fetchEffectorFx ,
214+ '@effector/babel-plugin' : fetchBabelPluginFx ,
215+ forest : fetchForestFx ,
230216}
231217
232218function cacher ( v , cache , fetcher ) {
@@ -247,51 +233,52 @@ export const versionLoader = $version.map(v => {
247233
248234export async function evaluator ( code : string ) {
249235 realmStatusApi . init ( )
236+ const version = $version . getState ( )
237+ const viewLib = $viewLib . getState ( )
238+ const babelPluginOptions = $babelPluginSettings . getState ( )
239+ const isMaster = version === 'master'
240+ /** could be used in pair with `isMaster === false` check */
241+ const versionNumber = parseInt ( version . slice ( 0 , 2 ) )
242+ const isVersionWithInspect = isMaster || versionNumber >= 22
243+ const isVersionWithScopeModule = ! isMaster && versionNumber <= 22
250244 const [ babelPlugin , effector ] = await Promise . all ( [
251- cache [ '@effector/babel-plugin' ] . get ( $version . getState ( ) ) ,
252- cache . effector . get ( $version . getState ( ) ) ,
245+ cache [ '@effector/babel-plugin' ] . get ( version ) ,
246+ cache . effector . get ( version ) ,
247+ ] )
248+ const [
249+ effectorInspect ,
250+ { effectorReact, shim, withSelector} ,
251+ { effectorSolid, solidJs, solidJsWeb} ,
252+ forest ,
253+ patronum ,
254+ ] = await Promise . all ( [
255+ isVersionWithInspect
256+ ? fetchEffectorInspectFx ( { effector, ver : version } )
257+ : { } ,
258+ viewLib === 'react' ? fetchEffectorReactFx ( effector ) : ( { } as any ) ,
259+ viewLib === 'solid' ? fetchEffectorSolidFx ( effector ) : ( { } as any ) ,
260+ isMaster ? fetchForestFx ( effector ) : { } ,
261+ isMaster ? fetchPatronumFx ( effector ) : { } ,
253262 ] )
254- const effectorInspect = await fetchEffectorInspect ( {
255- effector,
256- ver : $version . getState ( ) ,
257- } )
258- const babelPluginOptions = $babelPluginSettings . getState ( )
259- const { effectorReact, shim, withSelector} = await fetchEffectorReact ( effector )
260- const { effectorSolid, solidJs, solidJsWeb} = await fetchEffectorSolid (
261- effector ,
262- )
263- let forest
264263 let effectorBindingSSR
265- let patronum
266- if ( $version . getState ( ) === 'master' ) {
267- const additionalLibs = await Promise . all ( [
268- fetchForest ( effector ) ,
269- fetchPatronum ( effector ) ,
270- ] )
271- forest = additionalLibs [ 0 ]
272- patronum = additionalLibs [ 1 ]
273- } else {
274- const isVersionWithScopeModule =
275- parseInt ( $version . getState ( ) . slice ( 0 , 2 ) ) <= 22
276- if ( isVersionWithScopeModule ) {
277- effectorBindingSSR = await ( $viewLib . getState ( ) === 'react'
278- ? fetchEffectorReactSSR ( {
279- effector,
280- ...getShimDefinition ( shim ) ,
281- ...getShiSelectorDefinition ( withSelector ) ,
282- } )
283- : fetchEffectorSolidSSR ( {
284- effector,
285- 'solid-js' : solidJs ,
286- 'solid-js/web' : solidJsWeb ,
287- } ) )
288- }
264+ if ( isVersionWithScopeModule ) {
265+ effectorBindingSSR = await ( viewLib === 'react'
266+ ? fetchEffectorReactSSRFx ( {
267+ effector,
268+ ...getShimDefinition ( shim ) ,
269+ ...getShiSelectorDefinition ( withSelector ) ,
270+ } )
271+ : fetchEffectorSolidSSRFx ( {
272+ effector,
273+ 'solid-js' : solidJs ,
274+ 'solid-js/web' : solidJsWeb ,
275+ } ) )
289276 }
290277 function initViewLib ( apiMap , api ) {
291278 let env
292279 let lib
293280
294- switch ( $ viewLib. getState ( ) ) {
281+ switch ( viewLib ) {
295282 case 'react' :
296283 env = {
297284 React,
@@ -320,7 +307,7 @@ export async function evaluator(code: string) {
320307 env,
321308 }
322309 }
323- const env = prepareRuntime ( effector , initViewLib , $ version. getState ( ) )
310+ const env = prepareRuntime ( effector , initViewLib , version )
324311 return exec ( {
325312 code,
326313 realmGlobal : getIframe ( ) . contentWindow ,
@@ -342,7 +329,7 @@ export async function evaluator(code: string) {
342329 types : null ,
343330 filename : 'file' ,
344331 babelPluginOptions,
345- preset : $ viewLib. getState ( ) ,
332+ preset : viewLib ,
346333 } )
347334 config . plugins = [
348335 'transform-strict-mode' ,
@@ -367,7 +354,7 @@ export async function evaluator(code: string) {
367354 ] ,
368355 filename : filename . getState ( ) ,
369356 types : $typechecker . getState ( ) || 'typescript' ,
370- preset : $ viewLib. getState ( ) || 'react' ,
357+ preset : viewLib || 'react' ,
371358 pluginRegistry : {
372359 'effector/babel-plugin' : babelPlugin ,
373360 'effector/babel-plugin-react' : PluginEffectorReact ,
0 commit comments