esoftplay 0.0.123 → 0.0.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ import fs from 'fs'
2
+ fs.readdirSync("./modules", { encoding: 'utf8' }).forEach((module) => {
3
+ fs.readdirSync("./modules/" + module, { encoding: 'utf8' }).forEach((task) => {
4
+ const path = "./modules/" + module + "/" + task
5
+ let file = fs.readFileSync(path, { encoding: 'utf8' })
6
+ fs.writeFileSync(path, file.replace("../../assets/worker", "esoftplay/libs/worker"), { encoding: 'utf8' })
7
+ })
8
+ })
@@ -0,0 +1,9 @@
1
+ import fs from 'fs'
2
+ fs.readdirSync("./modules", { encoding: 'utf8' }).forEach((module) => {
3
+ fs.readdirSync("./modules/" + module, { encoding: 'utf8' }).forEach((task) => {
4
+ console.log(task)
5
+ const path = "./modules/" + module + "/" + task
6
+ let file = fs.readFileSync(path, { encoding: 'utf8' })
7
+ fs.writeFileSync(path, file.replace(/esoftplay\/libs\/worker/g, "../../assets/worker"), { encoding: 'utf8' })
8
+ })
9
+ })
@@ -0,0 +1,71 @@
1
+ const { createRunOncePlugin, withAndroidManifest } = require('@expo/config-plugins');
2
+
3
+ /**
4
+ * @typedef {import('@expo/config-plugins').ConfigPlugin} ConfigPlugin
5
+ * @typedef {import('@expo/config-plugins').AndroidManifest} AndroidManifest
6
+ */
7
+
8
+ /**
9
+ * Remove the custom Expo dev client scheme from intent filters, which are set to `autoVerify=true`.
10
+ * The custom scheme `<data android:scheme="exp+<slug>"/>` seems to block verification for these intent filters.
11
+ * This plugin makes sure there is no scheme in the autoVerify intent filters, that starts with `exp+`.
12
+ *
13
+ * @type {ConfigPlugin}
14
+ */
15
+ const withAndroidVerifiedLinksWorkaround = config =>
16
+ withAndroidManifest(config, config => {
17
+ config.modResults = removeExpoSchemaFromVerifiedIntentFilters(config.modResults);
18
+ return config;
19
+ });
20
+
21
+ /**
22
+ * Iterate over all `autoVerify=true` intent filters, and pull out schemes starting with `exp+`.
23
+ *
24
+ * @param {AndroidManifest} androidManifest
25
+ */
26
+ function removeExpoSchemaFromVerifiedIntentFilters(androidManifest) {
27
+ for (const application of androidManifest.manifest.application || []) {
28
+ for (const activity of application.activity || []) {
29
+ if (activityHasSingleTaskLaunchMode(activity)) {
30
+ for (const intentFilter of activity['intent-filter'] || []) {
31
+ if (intentFilterHasAutoVerification(intentFilter) && intentFilter?.data) {
32
+ intentFilter.data = intentFilterRemoveSchemeFromData(intentFilter, scheme =>
33
+ scheme?.startsWith('exp+')
34
+ );
35
+ }
36
+ }
37
+ break;
38
+ }
39
+ }
40
+ }
41
+
42
+ return androidManifest;
43
+ }
44
+
45
+ /**
46
+ * Determine if the activity should contain the intent filters to clean.
47
+ *
48
+ */
49
+ function activityHasSingleTaskLaunchMode(activity) {
50
+ return activity?.$?.['android:launchMode'] === 'singleTask';
51
+ }
52
+
53
+ /**
54
+ * Determine if the intent filter has `autoVerify=true`.
55
+ */
56
+ function intentFilterHasAutoVerification(intentFilter) {
57
+ return intentFilter?.$?.['android:autoVerify'] === 'true';
58
+ }
59
+
60
+ /**
61
+ * Remove schemes from the intent filter that matches the function.
62
+ */
63
+ function intentFilterRemoveSchemeFromData(intentFilter, schemeMatcher) {
64
+ return intentFilter?.data?.filter(entry => !schemeMatcher(entry?.$['android:scheme'] || ''));
65
+ }
66
+
67
+ module.exports = createRunOncePlugin(
68
+ withAndroidVerifiedLinksWorkaround,
69
+ 'withAndroidVerifiedLinksWorkaround',
70
+ '1.0.0'
71
+ );
package/bin/build.js CHANGED
@@ -151,13 +151,15 @@ if (fs.existsSync(packjson)) {
151
151
  "developmentClient": true,
152
152
  "distribution": "internal",
153
153
  "ios": {
154
- "simulator": true
154
+ "simulator": true,
155
+ "resourceClass": "m1-medium"
155
156
  }
156
157
  },
157
158
  "preview": {
158
159
  "distribution": "internal",
159
160
  "ios": {
160
- "simulator": true
161
+ "simulator": true,
162
+ "resourceClass": "m1-medium"
161
163
  }
162
164
  },
163
165
  "preview_build": {
@@ -246,19 +248,21 @@ yarn-error.log\n\
246
248
  });
247
249
 
248
250
  const AppJS = `
251
+
249
252
  import { LibNotification } from 'esoftplay/cache/lib/notification/import';
250
253
  import { UserIndex } from 'esoftplay/cache/user/index/import';
251
254
  import * as ErrorReport from 'esoftplay/error';
252
255
  import { globalIdx } from 'esoftplay/global';
256
+ import Worker from 'esoftplay/libs/worker';
253
257
  import * as Notifications from 'expo-notifications';
254
258
  import React, { useEffect } from 'react';
255
- import { enableFreeze, enableScreens } from 'react-native-screens';
256
-
257
- enableFreeze()
259
+ import { /* enableFreeze, */ enableScreens } from 'react-native-screens';
260
+
261
+ /* enableFreeze() */
258
262
  enableScreens()
259
-
260
263
 
261
264
  Notifications.addNotificationResponseReceivedListener(x => LibNotification.onAction(x));
265
+ Notifications.addNotificationReceivedListener(x => LibNotification.onAction(x));
262
266
 
263
267
  export default function App() {
264
268
  useEffect(() => {
@@ -266,7 +270,11 @@ export default function App() {
266
270
  ErrorReport.getError()
267
271
  }, [])
268
272
 
269
- return (<UserIndex />)
273
+ return (
274
+ <Worker.Provider>
275
+ <UserIndex />
276
+ </Worker.Provider>
277
+ )
270
278
  }`;
271
279
  let expoLib = [
272
280
  '@expo/vector-icons',
@@ -276,6 +284,7 @@ export default function App() {
276
284
  '@react-navigation/native-stack',
277
285
  '@react-navigation/native',
278
286
  '@react-navigation/stack',
287
+ '@shopify/flash-list',
279
288
  'buffer',
280
289
  'expo-application',
281
290
  'expo-camera',
package/bin/cli.js CHANGED
@@ -24,7 +24,7 @@ var args = process.argv.slice(2);
24
24
 
25
25
  // console.log(modpath, "sdofsjdofjsd")
26
26
  function execution() {
27
- const cmd = `watchman -j <<< '["trigger","./",{"name":"esp","expression":["allof",["not",["dirname","node_modules"]],["not",["name","index.d.ts"]]],"command":["node","./node_modules/esoftplay/bin/router.js"],"append_files":true}]' && node ./node_modules/esoftplay/bin/router.js`
27
+ const cmd = `watchman watch-del ./ && watchman watch ./ && watchman -j <<< '["trigger","./",{"name":"esp","expression":["allof",["not",["dirname","node_modules"]],["not",["name","index.d.ts"]]],"command":["node","./node_modules/esoftplay/bin/router.js"],"append_files":true}]' && node ./node_modules/esoftplay/bin/router.js`
28
28
  command(cmd)
29
29
  }
30
30
 
@@ -423,7 +423,7 @@ function consoleError(msg) {
423
423
  }
424
424
 
425
425
  function consoleSucces(msg) {
426
- console.log("\x1b[32m", msg + " ", "\x1b[0m")
426
+ console.log("\x1b[32m", msg + " ", "\x1b[0m")
427
427
  }
428
428
 
429
429
  function checkApp() {
@@ -669,11 +669,13 @@ function buildPrepare(include = true) {
669
669
  comm.push(`cp -n ./node_modules/esoftplay/modules/${module}/* ./modules/${module}`)
670
670
  }
671
671
  });
672
+ comm.push('cp ./node_modules/esoftplay/libs/worker.tsx ./assets/')
673
+ comm.push('node ./node_modules/esoftplay/assets/prepare.mjs')
672
674
  consoleSucces("\n\nPLEASE COPY AND EXECUTE THE FOLLOWING COMMAND\n\n" + comm.join('\n') + "\n")
673
675
  }
674
676
  } else {
675
677
  if (fs.existsSync('./assets/esoftplaymodules'))
676
- command('rm -rf modules && mv ./assets/esoftplaymodules modules')
678
+ command('rm -rf modules && mv ./assets/esoftplaymodules modules && rm -f ./assets/worker.tsx && node ./node_modules/esoftplay/assets/cancel.mjs')
677
679
  else
678
680
  consoleError('')
679
681
  }
@@ -716,7 +718,9 @@ function build() {
716
718
  {
717
719
  name: "1. Web (for Hosting)",
718
720
  cmd: "npx expo export:web",
719
- pre: () => { }
721
+ pre: () => {
722
+
723
+ }
720
724
  },
721
725
  ]
722
726
  :
@@ -826,6 +830,8 @@ function build() {
826
830
  if (pre) pre()
827
831
  consoleSucces("⚙⚙⚙ ... \n" + cmd)
828
832
  command(cmd)
833
+ if (fs.existsSync('./build/post.js'))
834
+ command('node ./build/post.js')
829
835
  configAvailable(false)
830
836
  devClientPos(appjson)
831
837
  } else if (d === false) {
package/esp.ts CHANGED
@@ -17,7 +17,7 @@ const ignoreWarns = [
17
17
  const err = console.error;
18
18
  console.error = (...arg) => {
19
19
  for (let i = 0; i < ignoreWarns.length; i++) {
20
- if (arg[0].startsWith(ignoreWarns[i])) return;
20
+ if (arg?.[0]?.startsWith?.(ignoreWarns[i])) return;
21
21
  }
22
22
  err(...arg);
23
23
  };
@@ -25,7 +25,7 @@ console.error = (...arg) => {
25
25
  const warn = console.warn;
26
26
  console.warn = (...arg) => {
27
27
  for (let i = 0; i < ignoreWarns.length; i++) {
28
- if (arg[0].startsWith(ignoreWarns[i])) return;
28
+ if (arg?.[0]?.startsWith?.(ignoreWarns[i])) return;
29
29
  }
30
30
  warn(...arg);
31
31
  };
@@ -6,10 +6,8 @@ if (fs.existsSync('./modules')) {
6
6
  if (!module.startsWith('.')) {
7
7
  fs.readdirSync('./modules/' + module).forEach((task) => {
8
8
  var dFile = fs.readFileSync('./modules/' + module + '/' + task, { encoding: 'utf8' })
9
- // if (module == 'artist' && task == 'detail.tsx') {
10
9
  dFile = dFile.replace(/esoftplay\/cache\/([a-z0-9_]+\/[a-z0-9_]+).import/g, "esoftplay/cache/$1/import")
11
10
  console.log(module + '/' + task)
12
- // }
13
11
  fs.writeFileSync('./modules/' + module + '/' + task, dFile, { encoding: 'utf8' })
14
12
  })
15
13
  }
package/libs/worker.tsx CHANGED
@@ -140,22 +140,25 @@ const Worker = {
140
140
  }
141
141
  }
142
142
  },
143
- View(): any {
143
+ Provider(props: any): any {
144
144
  if (Platform.OS == 'android')
145
145
  if (Platform.Version <= 22) {
146
- return null
146
+ return props.children
147
147
  }
148
148
  return (
149
- <View style={{ height: 0, width: 0 }} >
150
- <WebView
151
- ref={_global.WorkerBase}
152
- style={{ width: 0, height: 0 }}
153
- javaScriptEnabled={true}
154
- injectedJavaScript={`\nwindow.ReactNativeWebView.postMessage("BaseWorkerIsReady")\n` + _global.injectedJavaScripts.join('\n') + '\ntrue;'}
155
- originWhitelist={["*"]}
156
- source={{ uri: esp.config("protocol") + "://" + esp.config("domain") + esp.config("uri") + "dummyPageToBypassCORS" }}
157
- onMessage={Worker.onMessage('BaseWorkerIsReady')}
158
- />
149
+ <View style={{ flex: 1 }} >
150
+ <View style={{ height: 0, width: 0 }} >
151
+ <WebView
152
+ ref={_global.WorkerBase}
153
+ style={{ width: 0, height: 0 }}
154
+ javaScriptEnabled={true}
155
+ injectedJavaScript={`\nwindow.ReactNativeWebView.postMessage("BaseWorkerIsReady")\n` + _global.injectedJavaScripts.join('\n') + '\ntrue;'}
156
+ originWhitelist={["*"]}
157
+ source={{ uri: esp.config("protocol") + "://" + esp.config("domain") + esp.config("uri") + "dummyPageToBypassCORS" }}
158
+ onMessage={Worker.onMessage('BaseWorkerIsReady')}
159
+ />
160
+ </View>
161
+ {props.children}
159
162
  </View>
160
163
  )
161
164
  }
@@ -7,7 +7,6 @@ import { LibProgress } from 'esoftplay/cache/lib/progress/import';
7
7
  import { LibToastProperty } from 'esoftplay/cache/lib/toast/import';
8
8
  import { LibUtils } from 'esoftplay/cache/lib/utils/import';
9
9
  import esp from 'esoftplay/esp';
10
-
11
10
  import { reportApiError } from "esoftplay/error";
12
11
  import Constants from 'expo-constants';
13
12
 
@@ -352,7 +351,7 @@ export default class m {
352
351
  mode: "cors",
353
352
  }
354
353
 
355
-
354
+
356
355
  this.initTimeout(upload ? 120000 : this.timeout)
357
356
  if (debug == 1) esp.log(this.url + this.uri, options)
358
357
  this.fetchConf = { url: this.url + this.uri, options: options }
@@ -375,7 +374,10 @@ export default class m {
375
374
  // }, 100);
376
375
  // } else {
377
376
  // }
378
- LibToastProperty.show("Koneksi internet kamu tidak stabil, silahkan coba lagi")
377
+ if (__DEV__) {
378
+ console.warn(r)
379
+ } else
380
+ LibToastProperty.show("Koneksi internet kamu tidak stabil, silahkan coba lagi")
379
381
  this.onFetchFailed(r)
380
382
  LibProgress.hide()
381
383
  })
@@ -10,7 +10,7 @@ export interface LibKeyboard_avoidProps {
10
10
  }
11
11
  export default function m(props: LibKeyboard_avoidProps): any {
12
12
  return (
13
- <KeyboardAvoidingView behavior={Platform.OS == 'android' ? 'height' : 'padding'} style={props.style} >
13
+ <KeyboardAvoidingView behavior={Platform.OS == 'android' ? 'height' : 'padding'} style={[{ flex: 1 }, props.style]} >
14
14
  {props.children}
15
15
  </KeyboardAvoidingView>
16
16
  )
@@ -6,7 +6,6 @@ import React from "react";
6
6
  import { Animated, Dimensions, Linking, Platform } from "react-native";
7
7
  import { WebView } from 'react-native-webview';
8
8
  let { width } = Dimensions.get("window");
9
- const config = esp.config();
10
9
 
11
10
  //modify webview error: https://github.com/facebook/react-native/issues/10865
12
11
 
@@ -44,17 +43,18 @@ class ewebview extends LibComponent<LibWebviewProps, LibWebviewState> {
44
43
  _animatedValue: any;
45
44
  webview: any;
46
45
  heightMessage: any;
47
-
46
+
48
47
  static defaultProps = {
49
48
  needAnimate: true,
50
49
  AnimationDuration: 500,
51
50
  defaultHeight: 100,
52
51
  needAutoResetHeight: true
53
52
  };
54
-
53
+
55
54
  constructor(props: LibWebviewProps) {
56
55
  super(props);
57
56
  this.props = props
57
+ const config = esp.config();
58
58
  this.state = {
59
59
  height: props.defaultHeight,
60
60
  isFinish: false,
@@ -67,8 +67,9 @@ class ewebview extends LibComponent<LibWebviewProps, LibWebviewState> {
67
67
  this.resetHeight = this.resetHeight.bind(this)
68
68
  this.resetSmallHeight = this.resetSmallHeight.bind(this)
69
69
  }
70
-
70
+
71
71
  static getDerivedStateFromProps(nextProps, prevState) {
72
+ const config = esp.config();
72
73
  return { source: nextProps.source && nextProps.source.hasOwnProperty("html") ? { html: config.webviewOpen + nextProps.source.html + config.webviewClose } : nextProps.source }
73
74
  }
74
75
 
@@ -14,13 +14,14 @@ import Navs from 'esoftplay/cache/navs';
14
14
  import { UseDeeplink } from 'esoftplay/cache/use/deeplink/import';
15
15
  import { UserClass } from 'esoftplay/cache/user/class/import';
16
16
  import { UserHook } from 'esoftplay/cache/user/hook/import';
17
+ import { LibIcon } from 'esoftplay/cache/lib/icon/import';
17
18
  import { UserLoading } from 'esoftplay/cache/user/loading/import';
18
19
  import { UserRoutes } from 'esoftplay/cache/user/routes/import';
19
- import Worker from 'esoftplay/libs/worker';
20
+ import useGlobalState from 'esoftplay/global';
20
21
  import _global from 'esoftplay/_global';
21
22
  import * as Font from "expo-font";
22
23
  import React, { useEffect, useLayoutEffect } from 'react';
23
- import { Platform, View } from "react-native";
24
+ import { Platform, Pressable, Text, View } from "react-native";
24
25
  import { GestureHandlerRootView } from 'react-native-gesture-handler';
25
26
 
26
27
  export interface UserIndexProps {
@@ -49,7 +50,7 @@ function setFonts(): Promise<void> {
49
50
  function isWorkerReady(onReady: () => void): void {
50
51
  // @ts-ignore
51
52
  if (_global.WorkerReady < 1) {
52
-
53
+
53
54
  setTimeout(() => isWorkerReady(onReady), 10)
54
55
  } else {
55
56
  onReady()
@@ -57,20 +58,20 @@ function isWorkerReady(onReady: () => void): void {
57
58
  }
58
59
 
59
60
 
60
-
61
+ const route = useGlobalState<any>(undefined, { persistKey: 'user_index_routes_initial' })
61
62
  export default function m(props: UserIndexProps): any {
62
63
  const [loading, setLoading] = useSafeState(true)
63
64
  const user = UserClass.state().useSelector(s => s)
64
65
  const ready = React.useRef(0)
65
66
  UseDeeplink()
66
67
  //@ts-ignore
67
- const initialState = __DEV__ ? _global.nav__state : undefined
68
+ const initialState = __DEV__ ? route.get() : undefined
68
69
 
69
70
  function handler(currentState: any): void {
70
71
  //@ts-ignore
71
72
  if (__DEV__) {
72
73
  //@ts-ignore
73
- _global.nav__state = currentState
74
+ route.set(currentState)
74
75
  }
75
76
  UserRoutes.set(currentState)
76
77
  }
@@ -89,7 +90,7 @@ export default function m(props: UserIndexProps): any {
89
90
  }
90
91
 
91
92
  if (limitReady == 3) {
92
-
93
+
93
94
  isWorkerReady(() => {
94
95
  ready.current += 1
95
96
  if (ready.current >= limitReady) {
@@ -128,7 +129,6 @@ export default function m(props: UserIndexProps): any {
128
129
  return (
129
130
  <GestureHandlerRootView style={{ flex: 1 }}>
130
131
  <View style={{ flex: 1 }}>
131
- <Worker.View />
132
132
  {
133
133
  loading ?
134
134
  <UserLoading />
@@ -142,6 +142,12 @@ export default function m(props: UserIndexProps): any {
142
142
  <LibProgress />
143
143
  <LibToast />
144
144
  <UserHook />
145
+ {
146
+ __DEV__ &&
147
+ <Pressable onPress={() => route.reset()} style={{ position: 'absolute', right: 10, top: LibStyle.height * 0.5, padding: 10, backgroundColor: 'indigo', alignItems: 'center', justifyContent: 'center', borderRadius: 50 }} >
148
+ <LibIcon name='delete-variant' color='white' />
149
+ </Pressable>
150
+ }
145
151
  </>
146
152
  }
147
153
  </View>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "esoftplay",
3
- "version": "0.0.123",
3
+ "version": "0.0.124",
4
4
  "description": "embedding data from esoftplay framework (web based) into mobile app",
5
5
  "main": "cache/index.js",
6
6
  "types": "../../index.d.ts",