android: Update JSC and compat new api
This commit is contained in:
parent
774d3160a9
commit
8aebbc7a36
@ -31,7 +31,7 @@ dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.3.1'
|
||||
api 'com.github.penfeizhou:jsc4a:0.3.5'
|
||||
api 'com.github.penfeizhou:jsc4a:0.3.6'
|
||||
//api "pub.doric:jse:${rootProject.ext.Version}"
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
|
||||
implementation('com.github.penfeizhou.android.animation:glide-plugin:2.17.0') {
|
||||
|
@ -15,6 +15,8 @@
|
||||
*/
|
||||
package pub.doric.engine;
|
||||
|
||||
import android.util.Base64;
|
||||
|
||||
import com.github.pengfeizhou.jscore.ArchiveException;
|
||||
import com.github.pengfeizhou.jscore.JSArray;
|
||||
import com.github.pengfeizhou.jscore.JSArrayBuffer;
|
||||
@ -98,6 +100,11 @@ public class DoricJSDecoder extends JSDecoder {
|
||||
return new JSBoolean((Boolean) this.value);
|
||||
}
|
||||
if (isString()) {
|
||||
if (((String) this.value).startsWith("__buffer_")) {
|
||||
String base64String = ((String) this.value).substring("__buffer_".length());
|
||||
byte[] data = Base64.decode(base64String, 0);
|
||||
return new DoricJSArrayBuffer(data);
|
||||
}
|
||||
return new JSString((String) this.value);
|
||||
}
|
||||
if (isNumber()) {
|
||||
@ -129,8 +136,22 @@ public class DoricJSDecoder extends JSDecoder {
|
||||
return jsArray;
|
||||
}
|
||||
if (this.value instanceof byte[]) {
|
||||
return new JSArrayBuffer((byte[]) this.value);
|
||||
return new DoricJSArrayBuffer((byte[]) this.value);
|
||||
}
|
||||
return JS_NULL;
|
||||
}
|
||||
|
||||
private static class DoricJSArrayBuffer extends JSArrayBuffer {
|
||||
private final byte[] data;
|
||||
|
||||
public DoricJSArrayBuffer(byte[] data) {
|
||||
super(0, data.length);
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] value() {
|
||||
return this.data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,20 +4,21 @@ import com.github.pengfeizhou.jscore.JavaValue;
|
||||
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import pub.doric.DoricContext;
|
||||
|
||||
public class RetainedJavaValue extends JavaValue {
|
||||
private final WeakReference<DoricContext> contextRef;
|
||||
|
||||
public RetainedJavaValue(DoricContext doricContext, byte[] data) {
|
||||
super(data);
|
||||
public RetainedJavaValue(DoricContext doricContext, ByteBuffer data) {
|
||||
super(data, null);
|
||||
contextRef = new WeakReference<>(doricContext);
|
||||
final SoftReference<RetainedJavaValue> softRef = new SoftReference<>(this);
|
||||
doricContext.retainJavaValue(softRef);
|
||||
this.memoryReleaser = new MemoryReleaser() {
|
||||
@Override
|
||||
public void deallocate(byte[] data) {
|
||||
public void deallocate(ByteBuffer data) {
|
||||
if (contextRef.get() != null) {
|
||||
contextRef.get().releaseJavaValue(softRef);
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ import pub.doric.extension.bridge.DoricPlugin;
|
||||
import pub.doric.extension.bridge.DoricPromise;
|
||||
import pub.doric.resource.DoricResource;
|
||||
import pub.doric.utils.DoricLog;
|
||||
import pub.doric.utils.ThreadMode;
|
||||
|
||||
/**
|
||||
* @Description: This is for loading resource into js as ArrayBuffer
|
||||
@ -45,7 +46,7 @@ public class ImageDecoderPlugin extends DoricJavaPlugin {
|
||||
super(doricContext);
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
@DoricMethod(thread = ThreadMode.UI)
|
||||
public void getImageInfo(final JSObject resource, final DoricPromise promise) {
|
||||
DoricResource doricResource = getDoricContext().getDriver().getRegistry().getResourceManager().load(
|
||||
getDoricContext(),
|
||||
@ -82,7 +83,8 @@ public class ImageDecoderPlugin extends DoricJavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
|
||||
@DoricMethod(thread = ThreadMode.UI)
|
||||
public void decodeToPixels(final JSObject resource, final DoricPromise promise) {
|
||||
DoricResource doricResource = getDoricContext().getDriver().getRegistry().getResourceManager().load(
|
||||
getDoricContext(),
|
||||
@ -90,13 +92,13 @@ public class ImageDecoderPlugin extends DoricJavaPlugin {
|
||||
if (doricResource != null) {
|
||||
doricResource.fetch().setCallback(new AsyncResult.Callback<byte[]>() {
|
||||
@Override
|
||||
public void onResult(byte[] rawData) {
|
||||
public void onResult(final byte[] rawData) {
|
||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
|
||||
Bitmap bitmap = BitmapFactory.decodeByteArray(rawData, 0, rawData.length);
|
||||
ByteBuffer buffer = ByteBuffer.allocate(bitmap.getByteCount());
|
||||
Bitmap bitmap = BitmapFactory.decodeByteArray(rawData, 0, rawData.length, options);
|
||||
ByteBuffer buffer = ByteBuffer.allocateDirect(bitmap.getByteCount());
|
||||
bitmap.copyPixelsToBuffer(buffer);
|
||||
RetainedJavaValue retainedJavaValue = new RetainedJavaValue(getDoricContext(), buffer.array());
|
||||
final RetainedJavaValue retainedJavaValue = new RetainedJavaValue(getDoricContext(), buffer);
|
||||
promise.resolve(retainedJavaValue);
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,10 @@ package com.github.pengfeizhou.jscore;
|
||||
public class JSArrayBuffer extends JSValue {
|
||||
private final byte[] mVal;
|
||||
|
||||
public JSArrayBuffer(long ptr, int length) {
|
||||
this.mVal = new byte[0];
|
||||
}
|
||||
|
||||
public JSArrayBuffer(byte[] val) {
|
||||
this.mVal = val;
|
||||
}
|
||||
|
@ -18,6 +18,8 @@ package com.github.pengfeizhou.jscore;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public class JavaValue {
|
||||
protected static final int TYPE_NULL = 0;
|
||||
protected static final int TYPE_NUMBER = 1;
|
||||
@ -31,7 +33,7 @@ public class JavaValue {
|
||||
protected String[] functionNames = null;
|
||||
protected int type;
|
||||
protected String value = "";
|
||||
protected byte[] data = null;
|
||||
protected ByteBuffer data = null;
|
||||
protected MemoryReleaser memoryReleaser = null;
|
||||
|
||||
public JavaValue() {
|
||||
@ -79,17 +81,24 @@ public class JavaValue {
|
||||
this.value = jsonArray.toString();
|
||||
}
|
||||
|
||||
public JavaValue(byte[] data) {
|
||||
public JavaValue(byte[] data, MemoryReleaser memoryReleaser) {
|
||||
this.type = TYPE_ARRAYBUFFER;
|
||||
this.data = data;
|
||||
this.data = ByteBuffer.allocateDirect(data.length);
|
||||
this.data.put(data);
|
||||
this.memoryReleaser = memoryReleaser;
|
||||
}
|
||||
|
||||
public JavaValue(byte[] data, MemoryReleaser memoryReleaser) {
|
||||
public JavaValue(ByteBuffer data, MemoryReleaser memoryReleaser) {
|
||||
this.type = TYPE_ARRAYBUFFER;
|
||||
this.data = data;
|
||||
this.memoryReleaser = memoryReleaser;
|
||||
}
|
||||
|
||||
public JavaValue(byte[] data) {
|
||||
this(data, null);
|
||||
}
|
||||
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
@ -99,14 +108,15 @@ public class JavaValue {
|
||||
}
|
||||
|
||||
public byte[] getByteData() {
|
||||
return data;
|
||||
return data.array();
|
||||
}
|
||||
|
||||
|
||||
public interface MemoryReleaser {
|
||||
/**
|
||||
* Called when JS deallocated the arraybuffer
|
||||
*/
|
||||
void deallocate(byte[] data);
|
||||
void deallocate(ByteBuffer data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -68,7 +68,7 @@ var Mutable = /** @class */ (function () {
|
||||
*/
|
||||
var __uniqueId__ = 0;
|
||||
function uniqueId(prefix) {
|
||||
return "__".concat(prefix, "_").concat(__uniqueId__++, "__");
|
||||
return "__" + prefix + "_" + __uniqueId__++ + "__";
|
||||
}
|
||||
|
||||
function toString(message) {
|
||||
@ -177,11 +177,11 @@ var __values$5 = (undefined && undefined.__values) || function(o) {
|
||||
function Property(target, propKey) {
|
||||
Object.defineProperty(target, propKey, {
|
||||
get: function () {
|
||||
return Reflect.get(this, "__prop__".concat(propKey), this);
|
||||
return Reflect.get(this, "__prop__" + propKey, this);
|
||||
},
|
||||
set: function (v) {
|
||||
var oldV = Reflect.get(this, "__prop__".concat(propKey), this);
|
||||
Reflect.set(this, "__prop__".concat(propKey), v, this);
|
||||
var oldV = Reflect.get(this, "__prop__" + propKey, this);
|
||||
Reflect.set(this, "__prop__" + propKey, v, this);
|
||||
if (oldV !== v) {
|
||||
Reflect.apply(this.onPropertyChanged, this, [propKey, oldV, v]);
|
||||
}
|
||||
@ -191,11 +191,11 @@ function Property(target, propKey) {
|
||||
function InconsistProperty(target, propKey) {
|
||||
Object.defineProperty(target, propKey, {
|
||||
get: function () {
|
||||
return Reflect.get(this, "__prop__".concat(propKey), this);
|
||||
return Reflect.get(this, "__prop__" + propKey, this);
|
||||
},
|
||||
set: function (v) {
|
||||
var oldV = Reflect.get(this, "__prop__".concat(propKey), this);
|
||||
Reflect.set(this, "__prop__".concat(propKey), v, this);
|
||||
var oldV = Reflect.get(this, "__prop__" + propKey, this);
|
||||
Reflect.set(this, "__prop__" + propKey, v, this);
|
||||
Reflect.apply(this.onPropertyChanged, this, [propKey, oldV, v]);
|
||||
},
|
||||
});
|
||||
@ -373,7 +373,7 @@ var View = /** @class */ (function () {
|
||||
return Reflect.apply(f, this, argumentsList);
|
||||
}
|
||||
else {
|
||||
loge("Cannot find callback:".concat(id, " for ").concat(JSON.stringify(this.toModel())));
|
||||
loge("Cannot find callback:" + id + " for " + JSON.stringify(this.toModel()));
|
||||
}
|
||||
};
|
||||
View.prototype.toModel = function () {
|
||||
@ -714,7 +714,7 @@ var Group = /** @class */ (function (_super) {
|
||||
this.addChild(e);
|
||||
}
|
||||
else {
|
||||
loge("Not allowed to add ".concat(typeof e));
|
||||
loge("Not allowed to add " + typeof e);
|
||||
}
|
||||
};
|
||||
Object.defineProperty(Group.prototype, "innerElement", {
|
||||
@ -1225,7 +1225,7 @@ var Panel = /** @class */ (function () {
|
||||
|
||||
var v = this.retrospectView(viewIds);
|
||||
if (v === undefined) {
|
||||
loge("Cannot find view for ".concat(viewIds));
|
||||
loge("Cannot find view for " + viewIds);
|
||||
}
|
||||
else {
|
||||
var argumentsList = [callbackId];
|
||||
@ -1427,7 +1427,7 @@ var Color = /** @class */ (function () {
|
||||
}
|
||||
Color.parse = function (str) {
|
||||
if (!str.startsWith("#")) {
|
||||
throw new Error("Parse color error with ".concat(str));
|
||||
throw new Error("Parse color error with " + str);
|
||||
}
|
||||
var val = parseInt(str.substr(1), 16);
|
||||
if (str.length === 7) {
|
||||
@ -1437,7 +1437,7 @@ var Color = /** @class */ (function () {
|
||||
return new Color(val);
|
||||
}
|
||||
else {
|
||||
throw new Error("Parse color error with ".concat(str));
|
||||
throw new Error("Parse color error with " + str);
|
||||
}
|
||||
};
|
||||
Color.safeParse = function (str, defVal) {
|
||||
@ -2240,10 +2240,24 @@ var MainBundleResource = /** @class */ (function (_super) {
|
||||
var BundleResource = /** @class */ (function (_super) {
|
||||
__extends$f(BundleResource, _super);
|
||||
function BundleResource(bundleName, fileName) {
|
||||
return _super.call(this, "bundle", "".concat(bundleName, "://").concat(fileName)) || this;
|
||||
return _super.call(this, "bundle", bundleName + "://" + fileName) || this;
|
||||
}
|
||||
return BundleResource;
|
||||
}(iOSResource));
|
||||
var ArrayBufferResource = /** @class */ (function (_super) {
|
||||
__extends$f(ArrayBufferResource, _super);
|
||||
function ArrayBufferResource(data) {
|
||||
var _this = _super.call(this, "arrayBuffer", uniqueId("buffer")) || this;
|
||||
_this.data = data;
|
||||
return _this;
|
||||
}
|
||||
ArrayBufferResource.prototype.toModel = function () {
|
||||
var ret = _super.prototype.toModel.call(this);
|
||||
ret.data = this.data;
|
||||
return ret;
|
||||
};
|
||||
return ArrayBufferResource;
|
||||
}(Resource));
|
||||
|
||||
var __extends$e = (undefined && undefined.__extends) || (function () {
|
||||
var extendStatics = function (d, b) {
|
||||
@ -2508,7 +2522,7 @@ var List = /** @class */ (function (_super) {
|
||||
List.prototype.getItem = function (itemIdx) {
|
||||
var view = this.renderItem(itemIdx);
|
||||
view.superview = this;
|
||||
this.cachedViews.set("".concat(itemIdx), view);
|
||||
this.cachedViews.set("" + itemIdx, view);
|
||||
return view;
|
||||
};
|
||||
List.prototype.renderBunchedItems = function (start, length) {
|
||||
@ -2642,7 +2656,7 @@ var Slider = /** @class */ (function (_super) {
|
||||
Slider.prototype.getItem = function (itemIdx) {
|
||||
var view = this.renderPage(itemIdx);
|
||||
view.superview = this;
|
||||
this.cachedViews.set("".concat(itemIdx), view);
|
||||
this.cachedViews.set("" + itemIdx, view);
|
||||
return view;
|
||||
};
|
||||
Slider.prototype.renderBunchedItems = function (start, length) {
|
||||
@ -3006,7 +3020,7 @@ exports.jsx = void 0;
|
||||
Reflect.set(e, "innerElement", children, e);
|
||||
}
|
||||
else {
|
||||
throw new Error("Do not support ".concat(constructor.name, " for ").concat(children));
|
||||
throw new Error("Do not support " + constructor.name + " for " + children);
|
||||
}
|
||||
}
|
||||
return e;
|
||||
@ -3124,7 +3138,7 @@ var FlowLayout = /** @class */ (function (_super) {
|
||||
FlowLayout.prototype.getItem = function (itemIdx) {
|
||||
var view = this.renderItem(itemIdx);
|
||||
view.superview = this;
|
||||
this.cachedViews.set("".concat(itemIdx), view);
|
||||
this.cachedViews.set("" + itemIdx, view);
|
||||
return view;
|
||||
};
|
||||
FlowLayout.prototype.renderBunchedItems = function (start, length) {
|
||||
@ -3805,7 +3819,7 @@ function navbar(context) {
|
||||
}
|
||||
|
||||
function internalScheme(context, panelClass) {
|
||||
return "_internal_://export?class=".concat(encodeURIComponent(panelClass.name), "&context=").concat(context.id);
|
||||
return "_internal_://export?class=" + encodeURIComponent(panelClass.name) + "&context=" + context.id;
|
||||
}
|
||||
function navigator(context) {
|
||||
var moduleName = "navigator";
|
||||
@ -3845,9 +3859,9 @@ function transformRequest(request) {
|
||||
if (request.params !== undefined) {
|
||||
var queryStrings = [];
|
||||
for (var key in request.params) {
|
||||
queryStrings.push("".concat(key, "=").concat(encodeURIComponent(request.params[key])));
|
||||
queryStrings.push(key + "=" + encodeURIComponent(request.params[key]));
|
||||
}
|
||||
request.url = "".concat(request.url).concat(url.indexOf('?') >= 0 ? '&' : '?').concat(queryStrings.join('&'));
|
||||
request.url = "" + request.url + (url.indexOf('?') >= 0 ? '&' : '?') + queryStrings.join('&');
|
||||
}
|
||||
if (typeof request.data === 'object') {
|
||||
request.data = JSON.stringify(request.data);
|
||||
@ -4123,7 +4137,7 @@ function animate(context) {
|
||||
}
|
||||
else {
|
||||
return function (args) {
|
||||
return Promise.reject("Cannot find panel in Context:".concat(context.id));
|
||||
return Promise.reject("Cannot find panel in Context:" + context.id);
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -4617,6 +4631,7 @@ exports.AlphaAnimation = AlphaAnimation;
|
||||
exports.AndroidAssetsResource = AndroidAssetsResource;
|
||||
exports.AndroidResource = AndroidResource;
|
||||
exports.AnimationSet = AnimationSet;
|
||||
exports.ArrayBufferResource = ArrayBufferResource;
|
||||
exports.AssetsResource = AssetsResource;
|
||||
exports.BOTTOM = BOTTOM;
|
||||
exports.BackgroundColorAnimation = BackgroundColorAnimation;
|
||||
|
@ -1680,6 +1680,17 @@ class BundleResource extends iOSResource {
|
||||
super("bundle", `${bundleName}://${fileName}`);
|
||||
}
|
||||
}
|
||||
class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", uniqueId("buffer"));
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
const ret = super.toModel();
|
||||
ret.data = this.data;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
var __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
@ -3518,6 +3529,7 @@ exports.AlphaAnimation = AlphaAnimation;
|
||||
exports.AndroidAssetsResource = AndroidAssetsResource;
|
||||
exports.AndroidResource = AndroidResource;
|
||||
exports.AnimationSet = AnimationSet;
|
||||
exports.ArrayBufferResource = ArrayBufferResource;
|
||||
exports.AssetsResource = AssetsResource;
|
||||
exports.BOTTOM = BOTTOM;
|
||||
exports.BackgroundColorAnimation = BackgroundColorAnimation;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -3208,6 +3208,17 @@ class BundleResource extends iOSResource {
|
||||
super("bundle", `${bundleName}://${fileName}`);
|
||||
}
|
||||
}
|
||||
class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", uniqueId("buffer"));
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
const ret = super.toModel();
|
||||
ret.data = this.data;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
var __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
@ -5287,6 +5298,7 @@ exports.AlphaAnimation = AlphaAnimation;
|
||||
exports.AndroidAssetsResource = AndroidAssetsResource;
|
||||
exports.AndroidResource = AndroidResource;
|
||||
exports.AnimationSet = AnimationSet;
|
||||
exports.ArrayBufferResource = ArrayBufferResource;
|
||||
exports.AssetsResource = AssetsResource;
|
||||
exports.BOTTOM = BOTTOM;
|
||||
exports.BackgroundColorAnimation = BackgroundColorAnimation;
|
||||
|
@ -74,12 +74,16 @@ function _wrappedValue(v) {
|
||||
};
|
||||
}
|
||||
else if (v instanceof Array) {
|
||||
v.forEach(e => {
|
||||
traverse(e);
|
||||
});
|
||||
return {
|
||||
type: "array",
|
||||
value: JSON.stringify(v)
|
||||
};
|
||||
}
|
||||
else {
|
||||
traverse(v);
|
||||
return {
|
||||
type: "object",
|
||||
value: JSON.stringify(v)
|
||||
@ -92,6 +96,30 @@ function _wrappedValue(v) {
|
||||
};
|
||||
}
|
||||
}
|
||||
const cachedArrayBuffer = new Map;
|
||||
let bufferId = 0;
|
||||
function traverse(obj) {
|
||||
if (obj instanceof ArrayBuffer) {
|
||||
return;
|
||||
}
|
||||
if (obj instanceof Array) {
|
||||
obj.forEach(e => { traverse(e); });
|
||||
return;
|
||||
}
|
||||
Object.entries(obj).forEach(([k, v]) => {
|
||||
if (typeof v !== "object") {
|
||||
return;
|
||||
}
|
||||
if (v instanceof ArrayBuffer) {
|
||||
const id = `__buffer_${++bufferId}`;
|
||||
obj[k] = `__buffer_${_arrayBufferToBase64(v)}`;
|
||||
cachedArrayBuffer.set(id, v);
|
||||
}
|
||||
else {
|
||||
traverse(v);
|
||||
}
|
||||
});
|
||||
}
|
||||
function _rawValue(v) {
|
||||
switch (v.type) {
|
||||
case "number":
|
||||
|
9
doric-js/index.d.ts
vendored
9
doric-js/index.d.ts
vendored
@ -1771,6 +1771,15 @@ declare module 'doric/lib/src/util/resource' {
|
||||
export class BundleResource extends iOSResource {
|
||||
constructor(bundleName: string, fileName: string);
|
||||
}
|
||||
export class ArrayBufferResource extends Resource {
|
||||
data: ArrayBuffer;
|
||||
constructor(data: ArrayBuffer);
|
||||
toModel(): {
|
||||
resId: string;
|
||||
type: string;
|
||||
identifier: string;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
declare module 'doric/lib/src/pattern/candies' {
|
||||
|
@ -94,11 +94,15 @@ function _wrappedValue(v: RawValue): WrappedValue {
|
||||
value: _arrayBufferToBase64(v)
|
||||
};
|
||||
} else if (v instanceof Array) {
|
||||
v.forEach(e => {
|
||||
traverse(e)
|
||||
})
|
||||
return {
|
||||
type: "array",
|
||||
value: JSON.stringify(v)
|
||||
};
|
||||
} else {
|
||||
traverse(v)
|
||||
return {
|
||||
type: "object",
|
||||
value: JSON.stringify(v)
|
||||
@ -111,6 +115,31 @@ function _wrappedValue(v: RawValue): WrappedValue {
|
||||
};
|
||||
}
|
||||
}
|
||||
const cachedArrayBuffer: Map<string, ArrayBuffer> = new Map;
|
||||
let bufferId = 0;
|
||||
|
||||
function traverse(obj: object) {
|
||||
if (obj instanceof ArrayBuffer) {
|
||||
return
|
||||
}
|
||||
if (obj instanceof Array) {
|
||||
obj.forEach(e => { traverse(e) })
|
||||
return
|
||||
}
|
||||
Object.entries(obj).forEach(([k, v]) => {
|
||||
if (typeof v !== "object") {
|
||||
return
|
||||
}
|
||||
if (v instanceof ArrayBuffer) {
|
||||
|
||||
const id = `__buffer_${++bufferId}`;
|
||||
(obj as any)[k] = `__buffer_${_arrayBufferToBase64(v)}`;
|
||||
cachedArrayBuffer.set(id, v);
|
||||
} else {
|
||||
traverse(v)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function _rawValue(v: WrappedValue): RawValue {
|
||||
switch (v.type) {
|
||||
|
3
doric-js/lib/index.web.d.ts
vendored
3
doric-js/lib/index.web.d.ts
vendored
@ -12,6 +12,9 @@ declare type WrappedValue = {
|
||||
declare function _arrayBufferToBase64(arrayBuffer: ArrayBuffer): string;
|
||||
declare function _base64ToArrayBuffer(v: string): ArrayBufferLike;
|
||||
declare function _wrappedValue(v: RawValue): WrappedValue;
|
||||
declare const cachedArrayBuffer: Map<string, ArrayBuffer>;
|
||||
declare let bufferId: number;
|
||||
declare function traverse(obj: object): void;
|
||||
declare function _rawValue(v: WrappedValue): RawValue;
|
||||
declare function __injectGlobalObject(name: string, args: string): void;
|
||||
declare function __injectGlobalFunction(name: string): void;
|
||||
|
@ -72,12 +72,16 @@ function _wrappedValue(v) {
|
||||
};
|
||||
}
|
||||
else if (v instanceof Array) {
|
||||
v.forEach(e => {
|
||||
traverse(e);
|
||||
});
|
||||
return {
|
||||
type: "array",
|
||||
value: JSON.stringify(v)
|
||||
};
|
||||
}
|
||||
else {
|
||||
traverse(v);
|
||||
return {
|
||||
type: "object",
|
||||
value: JSON.stringify(v)
|
||||
@ -90,6 +94,30 @@ function _wrappedValue(v) {
|
||||
};
|
||||
}
|
||||
}
|
||||
const cachedArrayBuffer = new Map;
|
||||
let bufferId = 0;
|
||||
function traverse(obj) {
|
||||
if (obj instanceof ArrayBuffer) {
|
||||
return;
|
||||
}
|
||||
if (obj instanceof Array) {
|
||||
obj.forEach(e => { traverse(e); });
|
||||
return;
|
||||
}
|
||||
Object.entries(obj).forEach(([k, v]) => {
|
||||
if (typeof v !== "object") {
|
||||
return;
|
||||
}
|
||||
if (v instanceof ArrayBuffer) {
|
||||
const id = `__buffer_${++bufferId}`;
|
||||
obj[k] = `__buffer_${_arrayBufferToBase64(v)}`;
|
||||
cachedArrayBuffer.set(id, v);
|
||||
}
|
||||
else {
|
||||
traverse(v);
|
||||
}
|
||||
});
|
||||
}
|
||||
function _rawValue(v) {
|
||||
switch (v.type) {
|
||||
case "number":
|
||||
|
9
doric-js/lib/src/util/resource.d.ts
vendored
9
doric-js/lib/src/util/resource.d.ts
vendored
@ -50,3 +50,12 @@ export declare class MainBundleResource extends iOSResource {
|
||||
export declare class BundleResource extends iOSResource {
|
||||
constructor(bundleName: string, fileName: string);
|
||||
}
|
||||
export declare class ArrayBufferResource extends Resource {
|
||||
data: ArrayBuffer;
|
||||
constructor(data: ArrayBuffer);
|
||||
toModel(): {
|
||||
resId: string;
|
||||
type: string;
|
||||
identifier: string;
|
||||
};
|
||||
}
|
||||
|
@ -71,3 +71,14 @@ export class BundleResource extends iOSResource {
|
||||
super("bundle", `${bundleName}://${fileName}`);
|
||||
}
|
||||
}
|
||||
export class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", uniqueId("buffer"));
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
const ret = super.toModel();
|
||||
ret.data = this.data;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
12
doric-web/dist/index.js
vendored
12
doric-web/dist/index.js
vendored
@ -3282,6 +3282,17 @@ class BundleResource extends iOSResource {
|
||||
super("bundle", `${bundleName}://${fileName}`);
|
||||
}
|
||||
}
|
||||
class ArrayBufferResource extends Resource {
|
||||
constructor(data) {
|
||||
super("arrayBuffer", uniqueId("buffer"));
|
||||
this.data = data;
|
||||
}
|
||||
toModel() {
|
||||
const ret = super.toModel();
|
||||
ret.data = this.data;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
var __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
@ -5120,6 +5131,7 @@ exports.AlphaAnimation = AlphaAnimation;
|
||||
exports.AndroidAssetsResource = AndroidAssetsResource;
|
||||
exports.AndroidResource = AndroidResource;
|
||||
exports.AnimationSet = AnimationSet;
|
||||
exports.ArrayBufferResource = ArrayBufferResource;
|
||||
exports.AssetsResource = AssetsResource;
|
||||
exports.BOTTOM = BOTTOM;
|
||||
exports.BackgroundColorAnimation = BackgroundColorAnimation;
|
||||
|
2
doric-web/dist/index.js.map
vendored
2
doric-web/dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user