diff options
Diffstat (limited to 'addon-sdk/source/lib/jetpack-id/index.js')
-rw-r--r-- | addon-sdk/source/lib/jetpack-id/index.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/addon-sdk/source/lib/jetpack-id/index.js b/addon-sdk/source/lib/jetpack-id/index.js new file mode 100644 index 000000000..6c1493f1d --- /dev/null +++ b/addon-sdk/source/lib/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 || ""); +} |