webext-schema
v5.5.0
Published
WebExtensions schemas fetched from hg.mozilla.org
Downloads
5,169
Readme
webext-schema
WebExtentions schemas and MailExtensions schemas fetched from hg.mozilla.org. Stubbed browser API is also available.
Install
npm i webext-schema
Usage
import { Schema } from 'webext-schema';
const schema = new Schema();
new Schema(channel, sinonConfig)
- @param {string} [channel] - release channel. one of "beta", "central", "release", "esr", "mail".
- @param {Object} [sinonConfig] - optional configuration for
sinon.createSandbox()
, see Sinon.JS for details.
Both arguments are optional.
const schema = new Schema("central", {
useFakeTimers: true,
useFakeServer: true,
});
schema.channel
"central", "beta", "release", "esr" for WebExtensions, and "mail" for MailExtensions are available. Channel defaults to "beta".
const schema = new Schema("central");
Also, you can set it afterwards.
const schema = new Schema();
schema.channel = "central";
schema.get(name)
- @param {string} name - API name or file name
- @returns {?Array} - schema
Get the schema for the specific API. Argument can be either an API name or a file name.
const schema = new Schema().get("browserAction");
// [{namespace: "browserAction", events: [...], ...}]
const schema = new Schema().get("browser_action.json");
// [{namespace: "browserAction", events: [...], ...}]
schema.getAll()
- @returns {Object} - all schemas
Get all schemas as a single object. Note that the key of the object is the file name and the value is the schema.
const schema = new Schema().getAll();
// {"alarms.json": [{...}], "bookmarks.json": [{...}], ...}
schema.list()
- @returns {Array} - file names
Get the list of schema files.
const list = new Schema().list();
// ["alarms.json", "bookmarks.json", ...]
schema.mock()
- @returns {Object} - stubbed browser api
Creates stubbed browser API.
- Functions are stubbed by
sinon.sandbox.stub()
. - You can access sandbox object via
browser._sandbox
. As an example of usage, callbrowser._sandbox.reset()
before and/or after each test to initialize all the stubbed functions. - Optionally, you can pass sinon configuration object as an argument when creating a schema instance.
See Sinon.JS for details of sinon.sandbox.
const browser = new Schema().mock();
// example of mocking runtime.connect()
const mockConnect = browser.runtime.connect.callsFake(({ name }) => {
const port = Object.assign({}, browser.runtime.Port);
port.name = name;
return port;
});
const port1 = mockConnect({ name: "foo" });
const port2 = mockConnect({ name: "bar" });
assert.strictEqual(port1.name, "foo");
assert.isFunction(port1.onDisconnect.addListener);
assert.strictEqual(port2.name, "bar");
assert.isFunction(port2.onDisconnect.addListener);
// reset
browser._sandbox.reset();