From ac46df8daea09899ce30dc8fd70986e258c746bf Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 9 Feb 2018 06:46:43 -0500 Subject: Move Add-on SDK source to toolkit/jetpack --- toolkit/jetpack/jetpack-id/index.js | 53 +++++++++++++++++++++++++++++++++ toolkit/jetpack/jetpack-id/package.json | 28 +++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 toolkit/jetpack/jetpack-id/index.js create mode 100644 toolkit/jetpack/jetpack-id/package.json (limited to 'toolkit/jetpack/jetpack-id') diff --git a/toolkit/jetpack/jetpack-id/index.js b/toolkit/jetpack/jetpack-id/index.js new file mode 100644 index 000000000..6c1493f1d --- /dev/null +++ b/toolkit/jetpack/jetpack-id/index.js @@ -0,0 +1,53 @@ +/* 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/. */ + +/** + * Takes parsed `package.json` manifest and returns + * valid add-on id for it. + */ +function getID(manifest) { + manifest = manifest || {}; + + if (manifest.id) { + + if (typeof manifest.id !== "string") { + return null; + } + + // If manifest.id is already valid (as domain or GUID), use it + if (isValidAOMName(manifest.id)) { + return manifest.id; + } + // Otherwise, this ID is invalid so return `null` + return null; + } + + // If no `id` defined, turn `name` into a domain ID, + // as we transition to `name` being an id, similar to node/npm, but + // append a '@' to make it compatible with Firefox requirements + if (manifest.name) { + + if (typeof manifest.name !== "string") { + return null; + } + + var modifiedName = "@" + manifest.name; + return isValidAOMName(modifiedName) ? modifiedName : null; + } + + // If no `id` or `name` property, return null as this manifest + // is invalid + return null; +} + +module.exports = getID; + +/** + * Regex taken from XPIProvider.jsm in the Addon Manager to validate proper + * IDs that are able to be used. + * http://mxr.mozilla.org/mozilla-central/source/toolkit/mozapps/extensions/internal/XPIProvider.jsm#209 + */ +function isValidAOMName (s) { + return /^(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)$/i.test(s || ""); +} diff --git a/toolkit/jetpack/jetpack-id/package.json b/toolkit/jetpack/jetpack-id/package.json new file mode 100644 index 000000000..62a1c73ba --- /dev/null +++ b/toolkit/jetpack/jetpack-id/package.json @@ -0,0 +1,28 @@ +{ + "name": "jetpack-id", + "version": "1.0.0", + "description": "Creates an ID from a Firefox Jetpack manifest", + "main": "index.js", + "repository": { + "type": "git", + "url": "http://github.com/jsantell/jetpack-id" + }, + "author": { + "name": "Jordan Santell", + "url": "http://github.com/jsantell" + }, + "license": "MPL-2.0", + "scripts": { + "test": "./node_modules/.bin/mocha --reporter spec --ui bdd" + }, + "keywords": [ + "jetpack", + "addon", + "mozilla", + "firefox" + ], + "devDependencies": { + "mocha": "*", + "chai": "*" + } +} -- cgit v1.2.3