feat: Native add legacy mode

This commit is contained in:
pengfei.zhou 2022-07-15 15:59:06 +08:00 committed by osborn
parent 64a370c701
commit 7a126531af
21 changed files with 15180 additions and 15119 deletions

View File

@ -92,4 +92,8 @@ public class Doric {
public static DoricJSLoaderManager getJSLoaderManager() {
return DoricSingleton.getInstance().getJSLoaderManager();
}
public static void setLegacyMode(boolean legacyMode) {
DoricSingleton.getInstance().legacyMode = legacyMode;
}
}

View File

@ -44,6 +44,7 @@ public class DoricSingleton {
boolean enableRenderSnapshot = false;
private DoricNativeDriver nativeDriver;
private final DoricContextManager doricContextManager = new DoricContextManager();
public boolean legacyMode = false;
private static class Inner {
private static final DoricSingleton sInstance = new DoricSingleton();

View File

@ -43,6 +43,7 @@ import pub.doric.Doric;
import pub.doric.DoricContext;
import pub.doric.DoricContextManager;
import pub.doric.DoricRegistry;
import pub.doric.DoricSingleton;
import pub.doric.IDoricMonitor;
import pub.doric.extension.bridge.DoricBridgeExtension;
import pub.doric.extension.timer.DoricTimerExtension;
@ -109,14 +110,14 @@ public class DoricJSEngine implements Handler.Callback, DoricTimerExtension.Time
e.printStackTrace(new PrintWriter(stringWriter));
mDoricRegistry.onLog(Log.ERROR, stringWriter.toString());
//In case some unexpected errors happened
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// mDoricRegistry.onLog(Log.WARN, "Use DoricWebViewJSExecutor");
// mDoricJSE = new DoricWebViewJSExecutor(Doric.application());
// loadBuiltinJS("doric-web.js");
// } else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mDoricRegistry.onLog(Log.WARN, "Use DoricWebViewJSExecutor");
mDoricJSE = new DoricWebViewJSExecutor(Doric.application());
loadBuiltinJS("doric-web.js");
} else {
mDoricRegistry.onLog(Log.WARN, "Use DoricWebShellJSExecutor");
mDoricJSE = new DoricWebShellJSExecutor(Doric.application());
// }
}
}
}
@ -260,9 +261,10 @@ public class DoricJSEngine implements Handler.Callback, DoricTimerExtension.Time
private void initDoricRuntime() {
try {
loadBuiltinJS(DoricConstant.DORIC_BUNDLE_SANDBOX);
boolean legacy = DoricSingleton.getInstance().legacyMode;
loadBuiltinJS(legacy ? DoricConstant.DORIC_BUNDLE_SANDBOX_ES5 : DoricConstant.DORIC_BUNDLE_SANDBOX);
String libName = DoricConstant.DORIC_MODULE_LIB;
String libJS = DoricUtils.readAssetFile(DoricConstant.DORIC_BUNDLE_LIB);
String libJS = DoricUtils.readAssetFile(legacy ? DoricConstant.DORIC_BUNDLE_LIB_ES5 : DoricConstant.DORIC_BUNDLE_LIB);
mDoricJSE.loadJS(packageModuleScript(libName, libJS), "Module://" + libName);
} catch (Exception e) {
mDoricRegistry.onException(null, e);

View File

@ -22,7 +22,9 @@ package pub.doric.utils;
*/
public class DoricConstant {
public static final String DORIC_BUNDLE_SANDBOX = "doric-sandbox.js";
public static final String DORIC_BUNDLE_SANDBOX_ES5 = "doric-sandbox.es5.js";
public static final String DORIC_BUNDLE_LIB = "doric-lib.js";
public static final String DORIC_BUNDLE_LIB_ES5 = "doric-lib.es5.js";
public static final String DORIC_MODULE_LIB = "doric";

View File

@ -61,4 +61,9 @@
+ (void)setEnvironmentValue:(NSDictionary *)value;
+ (DoricJSLoaderManager *)jsLoaderManager;
/**
* Set legacy mode to compat es5 code
* */
+ (void)setLegacyMode:(BOOL)legacy;
@end

View File

@ -55,4 +55,8 @@ + (void)setEnvironmentValue:(NSDictionary *)value {
+ (DoricJSLoaderManager *)jsLoaderManager {
return DoricSingleton.instance.jsLoaderManager;
}
+ (void)setLegacyMode:(BOOL)legacy {
[DoricSingleton.instance setLegacyMode:legacy];
}
@end

View File

@ -32,6 +32,7 @@
@property(nonatomic, strong) NSMutableDictionary *envDic;
@property(nonatomic, assign) BOOL enablePerformance;
@property(nonatomic, assign) BOOL enableRecordSnapshot;
@property(nonatomic, assign) BOOL legacyMode;
@property(nonatomic, strong) DoricJSLoaderManager *jsLoaderManager;
@property(nonatomic, strong) DoricNativeDriver *nativeDriver;
@property(nonatomic, strong) DoricContextManager *contextManager;

View File

@ -38,6 +38,7 @@ - (instancetype)init {
valueOptions:NSPointerFunctionsWeakMemory
capacity:0];
_bundles = [NSMutableDictionary new];
_legacyMode = NO;
}
return self;
}

View File

@ -30,6 +30,7 @@
#import "DoricContextManager.h"
#import "DoricPerformanceProfile.h"
#import "JSValue+Doric.h"
#import "DoricSingleton.h"
@interface DoricDefaultMonitor : NSObject <DoricMonitorProtocol>
@end
@ -220,10 +221,20 @@ - (void)initDoricEnvironment {
@try {
[self loadBuiltinJS:DORIC_BUNDLE_SANDBOX];
NSString *path;
BOOL useLegacy;
if (@available(iOS 10.0, *)) {
path = [DoricBundle() pathForResource:DORIC_BUNDLE_LIB ofType:@"js"];
if (DoricSingleton.instance.legacyMode) {
useLegacy = YES;
} else {
useLegacy = NO;
}
} else {
useLegacy = NO;
}
if (useLegacy) {
path = [DoricBundle() pathForResource:[NSString stringWithFormat:@"%@.es5", DORIC_BUNDLE_LIB] ofType:@"js"];
} else {
path = [DoricBundle() pathForResource:DORIC_BUNDLE_LIB ofType:@"js"];
}
NSString *jsContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[self.jsExecutor loadJSScript:[self packageModuleScript:DORIC_MODULE_LIB content:jsContent]
@ -235,10 +246,20 @@ - (void)initDoricEnvironment {
- (void)loadBuiltinJS:(NSString *)fileName {
NSString *path;
BOOL useLegacy;
if (@available(iOS 10.0, *)) {
path = [DoricBundle() pathForResource:DORIC_BUNDLE_SANDBOX ofType:@"js"];
if (DoricSingleton.instance.legacyMode) {
useLegacy = YES;
} else {
useLegacy = NO;
}
} else {
useLegacy = NO;
}
if (useLegacy) {
path = [DoricBundle() pathForResource:[NSString stringWithFormat:@"%@.es5", DORIC_BUNDLE_SANDBOX] ofType:@"js"];
} else {
path = [DoricBundle() pathForResource:DORIC_BUNDLE_SANDBOX ofType:@"js"];
}
NSString *jsContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[self.jsExecutor loadJSScript:jsContent source:[@"Assets://" stringByAppendingString:fileName]];

View File

@ -2725,6 +2725,10 @@ var Slider = /** @class */ (function (_super) {
Property,
__metadata$9("design:type", Boolean)
], Slider.prototype, "bounces", void 0);
__decorate$9([
Property,
__metadata$9("design:type", String)
], Slider.prototype, "pageTransformer", void 0);
return Slider;
}(Superview));
function slider(config) {

View File

@ -2066,6 +2066,10 @@ __decorate$9([
Property,
__metadata$9("design:type", Boolean)
], Slider.prototype, "bounces", void 0);
__decorate$9([
Property,
__metadata$9("design:type", String)
], Slider.prototype, "pageTransformer", void 0);
function slider(config) {
const ret = new Slider;
ret.apply(config);

File diff suppressed because it is too large Load Diff

View File

@ -3594,6 +3594,10 @@ __decorate$9([
Property,
__metadata$9("design:type", Boolean)
], Slider.prototype, "bounces", void 0);
__decorate$9([
Property,
__metadata$9("design:type", String)
], Slider.prototype, "pageTransformer", void 0);
function slider(config) {
const ret = new Slider;
ret.apply(config);

1
doric-js/index.d.ts vendored
View File

@ -810,6 +810,7 @@ declare module 'doric/lib/src/widget/slider' {
* Take effect only on iOS
*/
bounces?: boolean;
pageTransformer?: "zoomout";
slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>;
getSlidedPage(context: BridgeContext): Promise<number>;
}

View File

@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import 'core-js';
class ProxyPolyfill {
__target__: object
__handler__: ProxyHandler<object>
@ -53,6 +54,4 @@ class ProxyPolyfill {
}
const global = Function('return this')()
global.Proxy = ProxyPolyfill
export * from './src/runtime/sandbox.es5'
export * from 'core-js'

View File

@ -20,6 +20,7 @@ export declare class Slider extends Superview {
* Take effect only on iOS
*/
bounces?: boolean;
pageTransformer?: "zoomout";
private getItem;
private renderBunchedItems;
slidePage(context: BridgeContext, page: number, smooth?: boolean): Promise<any>;

View File

@ -88,6 +88,10 @@ __decorate([
Property,
__metadata("design:type", Boolean)
], Slider.prototype, "bounces", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Slider.prototype, "pageTransformer", void 0);
export function slider(config) {
const ret = new Slider;
ret.apply(config);

View File

@ -30,14 +30,15 @@
"registry": "https://registry.npmjs.org"
},
"devDependencies": {
"@types/ws": "^7.2.6",
"core-js": "^3.9.1",
"proxy-polyfill": "^0.3.2",
"reflect-metadata": "^0.1.13",
"rollup": "^2.40.0",
"dts-bundle": "^0.7.3",
"@rollup/plugin-buble": "^0.21.3",
"@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-node-resolve": "^8.4.0"
"@rollup/plugin-node-resolve": "^8.4.0",
"@types/core-js": "^2.5.5",
"@types/ws": "^7.2.6",
"core-js": "^3.9.1",
"dts-bundle": "^0.7.3",
"proxy-polyfill": "^0.3.2",
"reflect-metadata": "^0.1.13",
"rollup": "^2.40.0"
}
}

View File

@ -57,6 +57,9 @@ export class Slider extends Superview {
@Property
bounces?: boolean
@Property
pageTransformer?: "zoomout"
private getItem(itemIdx: number) {
let view = this.renderPage(itemIdx)
view.superview = this

View File

@ -3668,6 +3668,10 @@ __decorate$9([
Property,
__metadata$9("design:type", Boolean)
], Slider.prototype, "bounces", void 0);
__decorate$9([
Property,
__metadata$9("design:type", String)
], Slider.prototype, "pageTransformer", void 0);
function slider(config) {
const ret = new Slider;
ret.apply(config);

File diff suppressed because one or more lines are too long