astro-ghostcms/.pnpm-store/v3/files/18/4124f9a632c5030ffe60f68e6ee...

132 lines
5.0 KiB
Plaintext

/**
* @author Matthew Caruana Galizia <mattcg@gmail.com>
* @license MIT: http://mattcg.mit-license.org/
* @copyright Copyright (c) 2013, Matthew Caruana Galizia
*/
'use strict';
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
var index = require('language-subtag-registry/data/json/index.json');
var registry = require('language-subtag-registry/data/json/registry.json');
var Subtag = /*#__PURE__*/function () {
/**
* @param {string} subtag
* @param {string} type
*/
function Subtag(subtag, type) {
_classCallCheck(this, Subtag);
var types, i, record;
// Lowercase for consistency (case is only a formatting convention, not a standard requirement).
subtag = subtag.toLowerCase();
type = type.toLowerCase();
function error(code, message) {
var err;
err = new Error(message);
err.code = code;
err.subtag = subtag;
throw err;
}
types = index[subtag];
if (!types) {
error(Subtag.ERR_NONEXISTENT, 'Non-existent subtag \'' + subtag + '\'.');
}
i = types[type];
if (!i && 0 !== i) {
error(Subtag.ERR_NONEXISTENT, 'Non-existent subtag \'' + subtag + '\' of type \'' + type + '\'.');
}
record = registry[i];
if (!record.Subtag) {
error(Subtag.ERR_TAG, '\'' + subtag + '\' is a \'' + type + '\' tag.');
}
this.data = {
subtag: subtag,
record: record,
type: type
};
}
_createClass(Subtag, [{
key: "type",
value: function type() {
return this.data.type;
}
}, {
key: "descriptions",
value: function descriptions() {
// Every record has one or more descriptions (stored as an array).
return this.data.record.Description;
}
}, {
key: "preferred",
value: function preferred() {
var type,
preferred = this.data.record['Preferred-Value'];
if (preferred) {
type = this.data.type;
if (type === 'extlang') {
type = 'language';
}
return new Subtag(preferred, type);
}
return null;
}
}, {
key: "script",
value: function script() {
var script = this.data.record['Suppress-Script'];
if (script) {
return new Subtag(script, 'script');
}
return null;
}
}, {
key: "scope",
value: function scope() {
return this.data.record.Scope || null;
}
}, {
key: "deprecated",
value: function deprecated() {
return this.data.record.Deprecated || null;
}
}, {
key: "added",
value: function added() {
return this.data.record.Added;
}
}, {
key: "comments",
value: function comments() {
// Comments don't always occur for records, so switch to an empty array if missing.
return this.data.record.Comments || [];
}
}, {
key: "format",
value: function format() {
var subtag = this.data.subtag;
switch (this.data.type) {
case 'region':
return subtag.toUpperCase();
case 'script':
return subtag[0].toUpperCase() + subtag.slice(1);
}
return subtag;
}
}, {
key: "toString",
value: function toString() {
return this.format();
}
}]);
return Subtag;
}();
_defineProperty(Subtag, "ERR_NONEXISTENT", 1);
_defineProperty(Subtag, "ERR_TAG", 2);
module.exports = Subtag;