Merge branch 'master' into installer
This commit is contained in:
commit
2ca2834569
|
@ -164,14 +164,10 @@ const updateMan = (() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateToUSOArchive(url, req) {
|
async function updateToUSOArchive(url, req) {
|
||||||
// UserCSS metadata may be embedded in the original USO style so let's use its updateURL
|
const m2 = getUsoEmbeddedMeta(req.response);
|
||||||
const [meta2] = req.response.replace(RX_META, '').match(RX_META) || [];
|
if (m2) {
|
||||||
if (meta2 && meta2.includes('@updateURL')) {
|
url = (await m2).updateUrl;
|
||||||
const {updateUrl} = await API.usercss.buildMeta({sourceCode: meta2}).catch(() => ({}));
|
req = await tryDownload(url, RH_ETAG);
|
||||||
if (updateUrl) {
|
|
||||||
url = updateUrl;
|
|
||||||
req = await tryDownload(url, RH_ETAG);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
const json = await API.usercss.buildMeta({
|
const json = await API.usercss.buildMeta({
|
||||||
id,
|
id,
|
||||||
|
@ -209,13 +205,21 @@ const updateMan = (() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateUsercss() {
|
async function updateUsercss() {
|
||||||
if (style.etag && style.etag === await downloadEtag()) {
|
let oldVer = ucd.version;
|
||||||
|
let {etag: oldEtag, updateUrl} = style;
|
||||||
|
let m2 = URLS.extractUsoArchiveId(updateUrl) && getUsoEmbeddedMeta();
|
||||||
|
if (m2 && (m2 = await m2).updateUrl) {
|
||||||
|
updateUrl = m2.updateUrl;
|
||||||
|
oldVer = m2.usercssData.version || '0';
|
||||||
|
oldEtag = '';
|
||||||
|
}
|
||||||
|
if (oldEtag && oldEtag === await downloadEtag()) {
|
||||||
return Promise.reject(STATES.SAME_CODE);
|
return Promise.reject(STATES.SAME_CODE);
|
||||||
}
|
}
|
||||||
// TODO: when sourceCode is > 100kB use http range request(s) for version check
|
// TODO: when sourceCode is > 100kB use http range request(s) for version check
|
||||||
const {headers: {etag}, response} = await tryDownload(style.updateUrl, RH_ETAG);
|
const {headers: {etag}, response} = await tryDownload(updateUrl, RH_ETAG);
|
||||||
const json = await API.usercss.buildMeta({sourceCode: response, etag});
|
const json = await API.usercss.buildMeta({sourceCode: response, etag, updateUrl});
|
||||||
const delta = compareVersion(json.usercssData.version, ucd.version);
|
const delta = compareVersion(json.usercssData.version, oldVer);
|
||||||
let err;
|
let err;
|
||||||
if (!delta && !ignoreDigest) {
|
if (!delta && !ignoreDigest) {
|
||||||
// re-install is invalid in a soft upgrade
|
// re-install is invalid in a soft upgrade
|
||||||
|
@ -285,6 +289,12 @@ const updateMan = (() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** UserCSS metadata may be embedded in the original USO style so let's use its updateURL */
|
||||||
|
function getUsoEmbeddedMeta(code = style.sourceCode) {
|
||||||
|
const m = code.includes('@updateURL') && code.replace(RX_META, '').match(RX_META);
|
||||||
|
return m && API.usercss.buildMeta({sourceCode: m[0]}).catch(() => null);
|
||||||
|
}
|
||||||
|
|
||||||
function getVarOptByName(varDef, name) {
|
function getVarOptByName(varDef, name) {
|
||||||
return varDef.options.find(o => o.name === name);
|
return varDef.options.find(o => o.name === name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1341,6 +1341,7 @@ self.parserlib = (() => {
|
||||||
identString: [
|
identString: [
|
||||||
Tokens.IDENT,
|
Tokens.IDENT,
|
||||||
Tokens.STRING,
|
Tokens.STRING,
|
||||||
|
Tokens.USO_VAR,
|
||||||
],
|
],
|
||||||
LParenBracket: [
|
LParenBracket: [
|
||||||
Tokens.LPAREN,
|
Tokens.LPAREN,
|
||||||
|
@ -1395,6 +1396,7 @@ self.parserlib = (() => {
|
||||||
stringUri: [
|
stringUri: [
|
||||||
Tokens.STRING,
|
Tokens.STRING,
|
||||||
Tokens.URI,
|
Tokens.URI,
|
||||||
|
Tokens.USO_VAR,
|
||||||
],
|
],
|
||||||
term: [
|
term: [
|
||||||
Tokens.NUMBER,
|
Tokens.NUMBER,
|
||||||
|
@ -2636,7 +2638,7 @@ self.parserlib = (() => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Number|Number[]} tokenTypes
|
* @param {Number|Number[]} tokenTypes
|
||||||
* @param {Boolean} [skipCruftBefore=true] - skip comments/uso-vars/whitespace before matching
|
* @param {Boolean} [skipCruftBefore=true] - skip comments/whitespace before matching
|
||||||
* @returns {Object} token
|
* @returns {Object} token
|
||||||
*/
|
*/
|
||||||
mustMatch(tokenTypes, skipCruftBefore = true) {
|
mustMatch(tokenTypes, skipCruftBefore = true) {
|
||||||
|
@ -2648,16 +2650,17 @@ self.parserlib = (() => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Boolean} [skipWS] - skip whitespace too
|
* @param {Boolean} [skipWS] - skip whitespace too
|
||||||
|
* @param {Boolean} [skipUsoVar] - skip USO_VAR too
|
||||||
*/
|
*/
|
||||||
skipComment(skipWS) {
|
skipComment(skipWS, skipUsoVar) {
|
||||||
const tt = this.LT(1, true).type;
|
const tt = this.LT(1, true).type;
|
||||||
if (skipWS && tt === Tokens.S ||
|
if (skipWS && tt === Tokens.S ||
|
||||||
tt === Tokens.USO_VAR ||
|
skipUsoVar && tt === Tokens.USO_VAR ||
|
||||||
tt === Tokens.COMMENT ||
|
tt === Tokens.COMMENT ||
|
||||||
tt == null && this._ltIndex === this._ltAhead && (
|
tt == null && this._ltIndex === this._ltAhead && (
|
||||||
skipWS && this._reader.readMatch(/\s+/y),
|
skipWS && this._reader.readMatch(/\s+/y),
|
||||||
this._reader.peekTest(/\/\*/y))) {
|
this._reader.peekTest(/\/\*/y))) {
|
||||||
while (this.match(TT.usoS)) { /*NOP*/ }
|
while (this.match(skipUsoVar ? TT.usoS : Tokens.S)) { /*NOP*/ }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3811,7 +3814,7 @@ self.parserlib = (() => {
|
||||||
const stream = this._tokenStream;
|
const stream = this._tokenStream;
|
||||||
let braceOpened;
|
let braceOpened;
|
||||||
try {
|
try {
|
||||||
stream.skipComment();
|
stream.skipComment(undefined, true);
|
||||||
if (parserCache.findBlock()) {
|
if (parserCache.findBlock()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -4275,7 +4278,7 @@ self.parserlib = (() => {
|
||||||
|
|
||||||
_keyframes(start) {
|
_keyframes(start) {
|
||||||
const stream = this._tokenStream;
|
const stream = this._tokenStream;
|
||||||
const prefix = /^@-([^-]+)-/.test(start.value) ? RegExp.$1 : '';
|
const prefix = rxVendorPrefix.test(start.value) ? RegExp.$1 : '';
|
||||||
this._ws();
|
this._ws();
|
||||||
const name = this._keyframeName();
|
const name = this._keyframeName();
|
||||||
stream.mustMatch(Tokens.LBRACE);
|
stream.mustMatch(Tokens.LBRACE);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user