Commit 92986d59 authored by Romain Courteaud's avatar Romain Courteaud

Release 3.38.0

Fix query.

Improve IndexedDB storage.

Improve ajax in node.
parent f73bb71f
......@@ -26,7 +26,7 @@ TESTDIR = test
EXAMPLEDIR = examples
EXTERNALDIR = external
VERSION = 3.37.0
VERSION = 3.38.0
JIOVERSION = ${DISTDIR}/jio-v${VERSION}.js
JIOLATEST = ${DISTDIR}/jio-latest.js
JIONODEVERSION = ${DISTDIR}/jio-v${VERSION}-node.js
......
......@@ -8708,6 +8708,9 @@ return new Parser;
throw new TypeError("jioquery.sortOn(): " +
"Argument 1 is not of type 'array'");
}
if (sort_on_option.length === 0) {
return list;
}
list.sort(generateSortFunction(
key_schema,
sort_on_option
......@@ -9849,11 +9852,10 @@ return new Parser;
try {
return window.atob(str);
} catch (err) {
var buffer;
if (str instanceof Buffer) {
buffer = str;
} else {
buffer = Buffer.from(str.toString(), 'base64');
var buffer = Buffer.from(str.toString(), 'base64');
// Provide the same behaviour than the browser atob
if (buffer.toString('base64') !== str) {
throw new Error('The string to be decoded is not correctly encoded.');
}
return buffer.toString('binary');
}
......@@ -9865,13 +9867,7 @@ return new Parser;
try {
return window.btoa(str);
} catch (err) {
var buffer;
if (str instanceof Buffer) {
buffer = str;
} else {
buffer = Buffer.from(str.toString(), 'binary');
}
return buffer.toString('base64');
return Buffer.from(str.toString(), 'binary').toString('base64');
}
}
......@@ -9879,8 +9875,8 @@ return new Parser;
}(window, WeakMap, ArrayBuffer, Uint8Array));
var XMLHttpRequest = global.XMLHttpRequest || module.exports,
Blob = window.Blob,
global.XMLHttpRequest = module.exports;
var Blob = window.Blob,
atob = window.atob,
btoa = window.btoa,
FileReader = window.FileReader,
......@@ -10674,7 +10670,7 @@ var XMLHttpRequest = global.XMLHttpRequest || module.exports,
*/
/*global window */
(function (window, jIO, Blob) {
(function (window, jIO, Blob, RSVP) {
"use strict";
var FormData,
......@@ -10696,32 +10692,71 @@ var XMLHttpRequest = global.XMLHttpRequest || module.exports,
};
window.FormData = FormData;
function convertToBlob(promise, convert) {
if (!convert) {
return promise;
}
var result;
if (promise instanceof RSVP.Queue) {
result = promise;
} else {
result = new RSVP.Queue()
.push(function () {
return promise;
});
}
return result
.push(function (evt) {
evt.target.response = new Blob(
[evt.target.response || evt.target.responseText],
{type: evt.target.getResponseHeader('Content-Type')}
);
return evt;
});
}
originalAjax = jIO.util.ajax;
jIO.util.ajax = function ajax(param) {
var result,
need_convertion = (param.dataType === 'blob');
// Copy the param dict document (no need for deep copy) to
// allow tests to check them
param = Object.assign({}, param);
if (need_convertion) {
param.dataType = 'arraybuffer';
}
if (param.data instanceof Blob) {
// Blob is not supported by xhr2, so convert to ArrayBuffer instead
return jIO.util.readBlobAsArrayBuffer(param.data).then(function (data) {
param.data = data.target.result;
return originalAjax(param);
});
}
if (param.data instanceof FormData) {
result = new RSVP.Queue()
.push(function () {
return jIO.util.readBlobAsArrayBuffer(param.data);
})
.push(function (evt) {
param.data = evt.target.result;
return originalAjax(param);
});
} else if (param.data instanceof FormData) {
// Implement minimal FormData for erp5storage
if (!param.hasOwnProperty('headers')) {
param.headers = {};
} else {
// Copy the param dict document (no need for deep copy) to
// allow tests to check them
param.headers = Object.assign({}, param.headers);
}
param.headers["Content-Type"] = "multipart\/form-data; boundary=" +
param.data.boundary;
param.data.body += '--' + param.data.boundary + '--\r\n';
param.data = param.data.body;
return originalAjax(param);
result = originalAjax(param);
} else {
result = originalAjax(param);
}
return originalAjax(param);
return convertToBlob(result, need_convertion);
};
}(window, window.jIO, window.Blob));
}(window, window.jIO, window.Blob, window.RSVP));
// Define a global variable to allow storages to access jIO
var jIO = window.jIO,
......@@ -12024,7 +12059,8 @@ var jIO = window.jIO,
});
}
report.log(id, options.from_local ? LOG_UNEXPECTED_REMOTE_ATTACHMENT :
LOG_UNEXPECTED_LOCAL_ATTACHMENT);
LOG_UNEXPECTED_LOCAL_ATTACHMENT,
JSON.stringify(attachment_dict));
}, function (error) {
if ((error instanceof jIO.util.jIOError) &&
(error.status_code === 404)) {
......
......@@ -6930,6 +6930,9 @@ return new Parser;
throw new TypeError("jioquery.sortOn(): " +
"Argument 1 is not of type 'array'");
}
if (sort_on_option.length === 0) {
return list;
}
list.sort(generateSortFunction(
key_schema,
sort_on_option
......@@ -10357,7 +10360,8 @@ return new Parser;
});
}
report.log(id, options.from_local ? LOG_UNEXPECTED_REMOTE_ATTACHMENT :
LOG_UNEXPECTED_LOCAL_ATTACHMENT);
LOG_UNEXPECTED_LOCAL_ATTACHMENT,
JSON.stringify(attachment_dict));
}, function (error) {
if ((error instanceof jIO.util.jIOError) &&
(error.status_code === 404)) {
......@@ -14916,13 +14920,19 @@ return new Parser;
}
function waitForOpenIndexedDB(db_name, callback) {
var request;
function canceller() {
if ((request !== undefined) && (request.result !== undefined)) {
request.result.close();
}
}
function resolver(resolve, reject) {
// Open DB //
var request = indexedDB.open(db_name);
request = indexedDB.open(db_name);
request.onerror = function (error) {
if (request.result) {
request.result.close();
}
canceller();
if ((error !== undefined) &&
(error.target instanceof IDBOpenDBRequest) &&
(error.target.error instanceof DOMError)) {
......@@ -14934,17 +14944,16 @@ return new Parser;
};
request.onabort = function () {
request.result.close();
canceller();
reject("Aborting connection to: " + db_name);
};
request.ontimeout = function () {
request.result.close();
reject("Connection to: " + db_name + " timeout");
};
request.onblocked = function () {
request.result.close();
canceller();
reject("Connection to: " + db_name + " was blocked");
};
......@@ -14952,26 +14961,32 @@ return new Parser;
request.onupgradeneeded = handleUpgradeNeeded;
request.onversionchange = function () {
request.result.close();
canceller();
reject(db_name + " was upgraded");
};
request.onsuccess = function () {
var result;
try {
result = callback(request.result);
} catch (error) {
reject(error);
}
return new RSVP.Queue()
.push(function () {
return callback(request.result);
return result;
})
.push(function (result) {
request.result.close();
resolve(result);
.push(function (final_result) {
canceller();
resolve(final_result);
}, function (error) {
request.result.close();
canceller();
reject(error);
});
};
}
return new RSVP.Promise(resolver);
return new RSVP.Promise(resolver, canceller);
}
function waitForTransaction(db, stores, flag, callback) {
......@@ -15001,14 +15016,8 @@ return new Parser;
reject(error);
});
};
tx.onerror = function (error) {
canceller();
reject(error);
};
tx.onabort = function (evt) {
reject(evt.target);
};
return tx;
tx.onerror = reject;
tx.onabort = reject;
}
return new RSVP.Promise(resolver, canceller);
}
......
This diff is collapsed.
This diff is collapsed.
{
"name": "jio",
"version": "v3.37.0",
"version": "v3.38.0",
"license": "GPLv3+",
"author": "Nexedi SA",
"contributors": [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment