wonder.js
Version:
176 lines (169 loc) • 9.64 kB
JavaScript
;
var Most = require("most");
var Caml_option = require("bs-platform/lib/js/caml_option.js");
var ImageUtils$Wonderjs = require("../utils/ImageUtils.js");
var BufferUtils$Wonderjs = require("../utils/BufferUtils.js");
var ArrayService$Wonderjs = require("../../service/atom/ArrayService.js");
var AssembleUtils$Wonderjs = require("../utils/AssembleUtils.js");
var OptionService$Wonderjs = require("../../service/atom/OptionService.js");
var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js");
var MutableSparseMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableSparseMapService.js");
function _build(_completeStreamChunkTotalLoadedAlignedByteLength, totalLoadedByteLength, _nextStreamChunkIndex, streamChunkArr, loadedArrayBuffer, images, _loadedStreamChunkDataArr) {
while(true) {
var loadedStreamChunkDataArr = _loadedStreamChunkDataArr;
var nextStreamChunkIndex = _nextStreamChunkIndex;
var completeStreamChunkTotalLoadedAlignedByteLength = _completeStreamChunkTotalLoadedAlignedByteLength;
var match = nextStreamChunkIndex >= streamChunkArr.length;
if (match) {
return /* tuple */[
nextStreamChunkIndex,
loadedStreamChunkDataArr
];
} else {
var match$1 = streamChunkArr[nextStreamChunkIndex];
var type_ = match$1[/* type_ */2];
var index = match$1[/* index */1];
var nextCompleteStreamChunkTotalLoadedByteLength = completeStreamChunkTotalLoadedAlignedByteLength + match$1[/* byteLength */0] | 0;
var match$2 = nextCompleteStreamChunkTotalLoadedByteLength > totalLoadedByteLength;
if (match$2) {
return /* tuple */[
nextStreamChunkIndex,
loadedStreamChunkDataArr
];
} else {
var loadedStreamChunkDataArr$1;
if (type_ >= 4) {
var match$3 = OptionService$Wonderjs.unsafeGetJsonSerializedValue(images)[index];
loadedStreamChunkDataArr$1 = ArrayService$Wonderjs.push(/* record */[
/* geometryData */undefined,
/* imageData *//* record */[
/* name */match$3[/* name */0],
/* imageIndex */index,
/* mimeType */match$3[/* mimeType */2],
/* arrayBuffer */loadedArrayBuffer.slice(completeStreamChunkTotalLoadedAlignedByteLength, nextCompleteStreamChunkTotalLoadedByteLength)
],
/* type_ */type_
], loadedStreamChunkDataArr);
} else {
loadedStreamChunkDataArr$1 = ArrayService$Wonderjs.push(/* record */[
/* geometryData *//* record */[
/* meshIndex */index,
/* arrayBuffer */loadedArrayBuffer.slice(completeStreamChunkTotalLoadedAlignedByteLength, nextCompleteStreamChunkTotalLoadedByteLength),
/* componentType */match$1[/* componentType */3]
],
/* imageData */undefined,
/* type_ */type_
], loadedStreamChunkDataArr);
}
_loadedStreamChunkDataArr = loadedStreamChunkDataArr$1;
_nextStreamChunkIndex = nextStreamChunkIndex + 1 | 0;
_completeStreamChunkTotalLoadedAlignedByteLength = BufferUtils$Wonderjs.alignedLength(nextCompleteStreamChunkTotalLoadedByteLength);
continue ;
}
}
};
}
function _splitLoadedStreamChunkArrByJudgeHasAllGeometryPointDataOrHasImageData(nextStreamChunkIndex, streamChunkArr, loadedStreamChunkDataArr) {
var match = ArrayService$WonderCommonlib.reduceOneParam((function (param, data) {
var loadedStreamChunkDataArrWhichHasAllData = param[1];
var loadedStreamChunkArrWhichNotHasAllData = param[0];
if (data[/* type_ */2] >= 3) {
return /* tuple */[
/* array */[],
loadedStreamChunkDataArrWhichHasAllData.concat(ArrayService$Wonderjs.push(data, loadedStreamChunkArrWhichNotHasAllData))
];
} else {
return /* tuple */[
ArrayService$Wonderjs.push(data, loadedStreamChunkArrWhichNotHasAllData),
loadedStreamChunkDataArrWhichHasAllData
];
}
}), /* tuple */[
/* array */[],
/* array */[]
], loadedStreamChunkDataArr);
var loadedStreamChunkDataArrWhichHasAllData = match[1];
var loadedStreamChunkArrWhichNotHasAllData = match[0];
var match$1 = nextStreamChunkIndex === streamChunkArr.length || streamChunkArr[nextStreamChunkIndex][/* type_ */2] === /* Vertex */0;
if (match$1) {
return /* tuple */[
/* array */[],
loadedStreamChunkDataArrWhichHasAllData.concat(loadedStreamChunkArrWhichNotHasAllData)
];
} else {
return /* tuple */[
loadedStreamChunkArrWhichNotHasAllData,
loadedStreamChunkDataArrWhichHasAllData
];
}
}
function _loadBlobImageFromImageArrayBufferData(loadedStreamChunkDataArr, loadBlobImageMap) {
var resultLoadedStreamChunkDataArr = /* array */[];
return Most.drain(Most.concatMap((function (param) {
var type_ = param[/* type_ */2];
if (type_ >= 4) {
var match = OptionService$Wonderjs.unsafeGet(param[/* imageData */1]);
var imageIndex = match[/* imageIndex */1];
var name = match[/* name */0];
var match$1 = MutableSparseMapService$WonderCommonlib.get(imageIndex, loadBlobImageMap);
if (match$1 !== undefined) {
ArrayService$Wonderjs.push(/* record */[
/* geometryData */undefined,
/* imageData *//* record */[
/* imageIndex */imageIndex,
/* image */Caml_option.valFromOption(match$1)
],
/* type_ */type_
], resultLoadedStreamChunkDataArr);
return Most.empty();
} else {
return Most.map((function (param) {
return /* () */0;
}), Most.tap((function (image) {
ImageUtils$Wonderjs.setImageName(image, name);
ArrayService$Wonderjs.push(/* record */[
/* geometryData */undefined,
/* imageData *//* record */[
/* imageIndex */imageIndex,
/* image */image
],
/* type_ */type_
], resultLoadedStreamChunkDataArr);
MutableSparseMapService$WonderCommonlib.set(imageIndex, image, loadBlobImageMap);
return /* () */0;
}), AssembleUtils$Wonderjs.buildLoadImageStream(match[/* arrayBuffer */3], match[/* mimeType */2], "load image error. imageName: " + (String(name) + ""))));
}
} else {
ArrayService$Wonderjs.push(/* record */[
/* geometryData */param[/* geometryData */0],
/* imageData */undefined,
/* type_ */type_
], resultLoadedStreamChunkDataArr);
return Most.empty();
}
}), Most.from(loadedStreamChunkDataArr))).then((function (param) {
return Promise.resolve(/* tuple */[
resultLoadedStreamChunkDataArr,
loadBlobImageMap
]);
}));
}
function buildBinBufferChunkData(nextStreamChunkIndex, loadedStreamChunkArrWhichNotHasAllData, completeStreamChunkTotalLoadedAlignedByteLength, totalLoadedByteLength, loadedArrayBuffer, streamChunkArr, loadBlobImageMap, images) {
var match = _build(completeStreamChunkTotalLoadedAlignedByteLength, totalLoadedByteLength, nextStreamChunkIndex, streamChunkArr, loadedArrayBuffer, images, loadedStreamChunkArrWhichNotHasAllData);
var nextStreamChunkIndex$1 = match[0];
var match$1 = _splitLoadedStreamChunkArrByJudgeHasAllGeometryPointDataOrHasImageData(nextStreamChunkIndex$1, streamChunkArr, match[1]);
var loadedStreamChunkArrWhichNotHasAllData$1 = match$1[0];
return _loadBlobImageFromImageArrayBufferData(match$1[1], loadBlobImageMap).then((function (param) {
return Promise.resolve(/* tuple */[
param[0],
nextStreamChunkIndex$1,
loadedStreamChunkArrWhichNotHasAllData$1,
param[1]
]);
}));
}
exports._build = _build;
exports._splitLoadedStreamChunkArrByJudgeHasAllGeometryPointDataOrHasImageData = _splitLoadedStreamChunkArrByJudgeHasAllGeometryPointDataOrHasImageData;
exports._loadBlobImageFromImageArrayBufferData = _loadBlobImageFromImageArrayBufferData;
exports.buildBinBufferChunkData = buildBinBufferChunkData;
/* most Not a pure module */