forked from mirrors/gecko-dev
MozReview-Commit-ID: 9DjvYFGl7rX --HG-- extra : transplant_source : %E1z%C2%D5%83BAap%DF%9Bo%7D%94%E3%AB%AA%D1%11%0A
74 lines
2.2 KiB
JavaScript
74 lines
2.2 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
"use strict";
|
|
|
|
module.metadata = {
|
|
"stability": "unstable"
|
|
};
|
|
|
|
const { isValidURI, isLocalURL, URL } = require('../url');
|
|
const { contract } = require('../util/contract');
|
|
const { isString, isNil, instanceOf, isJSONable } = require('../lang/type');
|
|
const { validateOptions,
|
|
string, array, object, either, required } = require('../deprecated/api-utils');
|
|
|
|
const isValidScriptFile = (value) =>
|
|
(isString(value) || instanceOf(value, URL)) && isLocalURL(value);
|
|
|
|
// map of property validations
|
|
const valid = {
|
|
contentURL: {
|
|
is: either(string, object),
|
|
ok: url => isNil(url) || isLocalURL(url) || isValidURI(url),
|
|
msg: 'The `contentURL` option must be a valid URL.'
|
|
},
|
|
contentScriptFile: {
|
|
is: either(string, object, array),
|
|
ok: value => isNil(value) || [].concat(value).every(isValidScriptFile),
|
|
msg: 'The `contentScriptFile` option must be a local URL or an array of URLs.'
|
|
},
|
|
contentScript: {
|
|
is: either(string, array),
|
|
ok: value => isNil(value) || [].concat(value).every(isString),
|
|
msg: 'The `contentScript` option must be a string or an array of strings.'
|
|
},
|
|
contentScriptWhen: {
|
|
is: required(string),
|
|
map: value => value || 'end',
|
|
ok: value => ~['start', 'ready', 'end'].indexOf(value),
|
|
msg: 'The `contentScriptWhen` option must be either "start", "ready" or "end".'
|
|
},
|
|
contentScriptOptions: {
|
|
ok: value => isNil(value) || isJSONable(value),
|
|
msg: 'The contentScriptOptions should be a jsonable value.'
|
|
}
|
|
};
|
|
exports.validationAttributes = valid;
|
|
|
|
/**
|
|
* Shortcut function to validate property with validation.
|
|
* @param {Object|Number|String} suspect
|
|
* value to validate
|
|
* @param {Object} validation
|
|
* validation rule passed to `api-utils`
|
|
*/
|
|
function validate(suspect, validation) {
|
|
return validateOptions(
|
|
{ $: suspect },
|
|
{ $: validation }
|
|
).$;
|
|
}
|
|
|
|
function Allow(script) {
|
|
return {
|
|
get script() {
|
|
return script;
|
|
},
|
|
set script(value) {
|
|
script = !!value;
|
|
}
|
|
};
|
|
}
|
|
|
|
exports.contract = contract(valid);
|