summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/lib/jetpack-id/index.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /addon-sdk/source/lib/jetpack-id/index.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'addon-sdk/source/lib/jetpack-id/index.js')
-rw-r--r--addon-sdk/source/lib/jetpack-id/index.js53
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 || "");
+}