android: Update JSC and compat new api

This commit is contained in:
pengfei.zhou
2022-03-09 17:35:13 +08:00
committed by osborn
parent 774d3160a9
commit 8aebbc7a36
19 changed files with 1906 additions and 3122 deletions

View File

@@ -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;

View File

@@ -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":

View File

@@ -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;
};
}

View File

@@ -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;
}
}