Файловый менеджер - Редактировать - /home/freeclou/app.optimyar.com/front-web/build/assets/resources/agGrid/lib.tar
Назад
auth.js 0000664 00000003254 15111456023 0006047 0 ustar 00 module.exports = (aliases) => { function find (alias, options) { var config = aliases[alias] var endpoints = config.endpoints if (!endpoints || (!endpoints.all && !endpoints.str && !endpoints.regex)) { return config.auth } var auth = {} var endpoint = options.url // all if (endpoints.all) { var __endpoint = endpoints.all.__endpoint if (__endpoint && __endpoint.auth) { auth = __endpoint.auth } } // string if (endpoints.str && endpoints.str[endpoint]) { var __endpoint = endpoints.str[endpoint].__endpoint if (__endpoint && __endpoint.auth) { auth = __endpoint.auth } } // regex if (endpoints.regex) { for (var key in endpoints.regex) { if (new RegExp(key).test(endpoint)) { var __endpoint = endpoints.regex[key].__endpoint if (__endpoint && __endpoint.auth) { auth = __endpoint.auth break } } } } return Object.keys(auth).length ? auth : config.auth } function replace (config, arg1, arg2) { if (config instanceof Array) { config = (arg1 !== undefined && arg2 !== undefined) ? config[1] : config[0] } var auth = {} Object.keys(config).forEach((key) => { auth[key] = {} Object.keys(config[key]).forEach((sub) => { var value = config[key][sub] if (value.indexOf('[0]') !== -1) { auth[key][sub] = value.replace('[0]', arg1) } else if (value.indexOf('[1]') !== -1) { auth[key][sub] = value.replace('[1]', arg2) } }) }) return auth } return {find, replace} } endpoint.js 0000664 00000002747 15111456023 0006734 0 ustar 00 var extend = require('extend') var _auth = require('./auth') module.exports = (aliases) => { var __auth = _auth(aliases) function options (alias, options) { var config = aliases[alias] var endpoints = config.endpoints if (!endpoints || (!endpoints.all && !endpoints.str && !endpoints.regex)) { return options } var result = {} var endpoint = options.url var method = options.method || '' function _extend (config) { if (config.all) { extend(true, result, config.all, options) } else { var obj = config[method.toLowerCase()] || config[method.toUpperCase()] if (obj) { extend(true, result, obj, options) } } } // all if (endpoints.all) { _extend(endpoints.all) } // string if (endpoints.str && endpoints.str[endpoint]) { _extend(endpoints.str[endpoint]) } // regex if (endpoints.regex) { for (var key in endpoints.regex) { if (new RegExp(key).test(endpoint)) { var config = endpoints.regex[key] if (config.all || config[method]) { _extend(config) break } } } } return Object.keys(result).length ? result : options } function auth (alias, options, arg1, arg2) { var config = __auth.find(alias, options) if (config) { var auth = __auth.replace(config, arg1, arg2) extend(true, options, auth) } } return {options, auth} } init.js 0000664 00000004615 15111456023 0006053 0 ustar 00 function initAlias (provider, domain, path) { var alias = {domain: domain, path: path} var __domain = provider[domain].__domain || {} var __path = provider[domain][path].__path || {} if (__domain.subdomain) { alias.subdomain = __domain.subdomain } if (__domain.auth) { alias.auth = __domain.auth } if (__path.subdomain) { alias.subdomain = __path.subdomain } if (__path.subpath) { alias.subpath = __path.subpath } if (__path.version) { alias.version = __path.version } if (__path.type) { alias.type = __path.type } if (__path.endpoint) { alias.endpoint = __path.endpoint } if (__path.auth) { alias.auth = __path.auth } return alias } function initEndpoints (provider, domain, path) { var result = {all: {}, str: {}, regex: {}} var endpoints = provider[domain][path] for (var key in endpoints) { if (key === '__path') { continue } if (key === '*') { result.all = endpoints[key] } else if (endpoints[key].__endpoint && endpoints[key].__endpoint.regex) { result.regex[key] = endpoints[key] } else { result.str[key] = endpoints[key] } } if (!Object.keys(result.all).length) { delete result.all } if (!Object.keys(result.str).length) { delete result.str } if (!Object.keys(result.regex).length) { delete result.regex } if (Object.keys(result).length) { return result } } function initAliases (provider) { var aliases = {} for (var domain in provider) { if (domain === '__provider') { continue } for (var path in provider[domain]) { if (path === '__domain') { continue } var __path = provider[domain][path].__path if (!__path) { throw new Error('Purest: __path key is required!') } if (!__path.alias) { throw new Error('Purest: __path.alias key is required!') } var alias = __path.alias alias = (alias instanceof Array) ? alias : [alias] alias.forEach((name) => { var result = initAlias(provider, domain, path) var endpoints = initEndpoints(provider, domain, path) if (endpoints) { result.endpoints = endpoints } aliases[name] = result }) } } if (Object.keys(aliases).length) { return aliases } } exports.alias = initAlias exports.endpoints = initEndpoints exports.aliases = initAliases url.js 0000664 00000002145 15111456023 0005706 0 ustar 00 module.exports = (ctor, aliases) => { function domain (alias, options) { var config = aliases[alias] var subdomain = (options.subdomain || ctor.subdomain || config.subdomain) return (subdomain !== undefined) ? config.domain.replace('[subdomain]', subdomain) : config.domain } function path (alias, options) { var config = aliases[alias] var path = config.path var value value = (options.subpath || ctor.subpath || config.subpath) if (value !== undefined) { path = path.replace('[subpath]', value) } value = (options.version || ctor.version || config.version) if (value !== undefined) { path = path.replace('[version]', value) } value = (options.type || ctor.type || config.type || 'json') path = path.replace('[type]', value) value = (options.url || config.endpoint || '') path = path.replace('{endpoint}', value) return path } function url (alias, options) { return [ domain(alias, options), path(alias, options) ].join('/') } url.domain = domain url.path = path return url } mailcomposer.js 0000664 00000037304 15112010752 0007577 0 ustar 00 'use strict'; var BuildMail = require('buildmail'); var libmime = require('libmime'); module.exports = function (mail) { return new MailComposer(mail).compile(); }; module.exports.MailComposer = MailComposer; /** * Creates the object for composing a BuildMail instance out from the mail options * * @constructor * @param {Object} mail Mail options */ function MailComposer(mail) { if (!(this instanceof MailComposer)) { return new MailComposer(mail); } this.mail = mail || {}; this.message = false; } /** * Builds BuildMail instance */ MailComposer.prototype.compile = function () { this._alternatives = this.getAlternatives(); this._htmlNode = this._alternatives.filter(function (alternative) { return /^text\/html\b/i.test(alternative.contentType); }).pop(); this._attachments = this.getAttachments(!!this._htmlNode); this._useRelated = !!(this._htmlNode && this._attachments.related.length); this._useAlternative = this._alternatives.length > 1; this._useMixed = this._attachments.attached.length > 1 || (this._alternatives.length && this._attachments.attached.length === 1); // Compose MIME tree if (this.mail.raw) { this.message = new BuildMail().setRaw(this.mail.raw); } else if (this._useMixed) { this.message = this._createMixed(); } else if (this._useAlternative) { this.message = this._createAlternative(); } else if (this._useRelated) { this.message = this._createRelated(); } else { this.message = this._createContentNode(false, [].concat(this._alternatives || []).concat(this._attachments.attached || []).shift() || { contentType: 'text/plain', content: '' }); } // Add custom headers if (this.mail.headers) { this.message.addHeader(this.mail.headers); } // Add headers to the root node, always overrides custom headers [ 'from', 'sender', 'to', 'cc', 'bcc', 'reply-to', 'in-reply-to', 'references', 'subject', 'message-id', 'date' ].forEach(function (header) { var key = header.replace(/-(\w)/g, function (o, c) { return c.toUpperCase(); }); if (this.mail[key]) { this.message.setHeader(header, this.mail[key]); } }.bind(this)); // Sets custom envelope if (this.mail.envelope) { this.message.setEnvelope(this.mail.envelope); } // ensure Message-Id value this.message.messageId(); return this.message; }; /** * List all attachments. Resulting attachment objects can be used as input for BuildMail nodes * * @param {Boolean} findRelated If true separate related attachments from attached ones * @returns {Object} An object of arrays (`related` and `attached`) */ MailComposer.prototype.getAttachments = function (findRelated) { var attachments = [].concat(this.mail.attachments || []).map(function (attachment, i) { var data; var isMessageNode = /^message\//i.test(attachment.contentType); if (/^data:/i.test(attachment.path || attachment.href)) { attachment = this._processDataUrl(attachment); } data = { contentType: attachment.contentType || libmime.detectMimeType(attachment.filename || attachment.path || attachment.href || 'bin'), contentDisposition: attachment.contentDisposition || (isMessageNode ? 'inline' : 'attachment'), contentTransferEncoding: attachment.contentTransferEncoding }; if (attachment.filename) { data.filename = attachment.filename; } else if (!isMessageNode && attachment.filename !== false) { data.filename = (attachment.path || attachment.href || '').split('/').pop() || 'attachment-' + (i + 1); if (data.filename.indexOf('.') < 0) { data.filename += '.' + libmime.detectExtension(data.contentType); } } if (/^https?:\/\//i.test(attachment.path)) { attachment.href = attachment.path; attachment.path = undefined; } if (attachment.cid) { data.cid = attachment.cid; } if (attachment.raw) { data.raw = attachment.raw; } else if (attachment.path) { data.content = { path: attachment.path }; } else if (attachment.href) { data.content = { href: attachment.href }; } else { data.content = attachment.content || ''; } if (attachment.encoding) { data.encoding = attachment.encoding; } if (attachment.headers) { data.headers = attachment.headers; } return data; }.bind(this)); if (!findRelated) { return { attached: attachments, related: [] }; } else { return { attached: attachments.filter(function (attachment) { return !attachment.cid; }), related: attachments.filter(function (attachment) { return !!attachment.cid; }) }; } }; /** * List alternatives. Resulting objects can be used as input for BuildMail nodes * * @returns {Array} An array of alternative elements. Includes the `text` and `html` values as well */ MailComposer.prototype.getAlternatives = function () { var alternatives = [], text, html, watchHtml, icalEvent; if (this.mail.text) { if (typeof this.mail.text === 'object' && (this.mail.text.content || this.mail.text.path || this.mail.text.href || this.mail.text.raw)) { text = this.mail.text; } else { text = { content: this.mail.text }; } text.contentType = 'text/plain' + (!text.encoding && libmime.isPlainText(text.content) ? '' : '; charset=utf-8'); } if (this.mail.watchHtml) { if (typeof this.mail.watchHtml === 'object' && (this.mail.watchHtml.content || this.mail.watchHtml.path || this.mail.watchHtml.href || this.mail.watchHtml.raw)) { watchHtml = this.mail.watchHtml; } else { watchHtml = { content: this.mail.watchHtml }; } watchHtml.contentType = 'text/watch-html' + (!watchHtml.encoding && libmime.isPlainText(watchHtml.content) ? '' : '; charset=utf-8'); } if (this.mail.icalEvent) { if (typeof this.mail.icalEvent === 'object' && (this.mail.icalEvent.content || this.mail.icalEvent.path || this.mail.icalEvent.href || this.mail.icalEvent.raw)) { icalEvent = this.mail.icalEvent; } else { icalEvent = { content: this.mail.icalEvent }; } icalEvent.contentType = 'text/calendar; charset="utf-8"; method=' + (icalEvent.method || 'PUBLISH').toString().trim().toUpperCase(); if (!icalEvent.headers) { icalEvent.headers = {}; } icalEvent.headers['Content-Transfer-Encoding'] = 'base64'; } if (this.mail.html) { if (typeof this.mail.html === 'object' && (this.mail.html.content || this.mail.html.path || this.mail.html.href || this.mail.html.raw)) { html = this.mail.html; } else { html = { content: this.mail.html }; } html.contentType = 'text/html' + (!html.encoding && libmime.isPlainText(html.content) ? '' : '; charset=utf-8'); } []. concat(text || []). concat(watchHtml || []). concat(html || []). concat(icalEvent || []). concat(this.mail.alternatives || []). forEach(function (alternative) { var data; if (/^data:/i.test(alternative.path || alternative.href)) { alternative = this._processDataUrl(alternative); } data = { contentType: alternative.contentType || libmime.detectMimeType(alternative.filename || alternative.path || alternative.href || 'txt'), contentTransferEncoding: alternative.contentTransferEncoding }; if (alternative.filename) { data.filename = alternative.filename; } if (/^https?:\/\//i.test(alternative.path)) { alternative.href = alternative.path; alternative.path = undefined; } if (alternative.raw) { data.raw = alternative.raw; } else if (alternative.path) { data.content = { path: alternative.path }; } else if (alternative.href) { data.content = { href: alternative.href }; } else { data.content = alternative.content || ''; } if (alternative.encoding) { data.encoding = alternative.encoding; } if (alternative.headers) { data.headers = alternative.headers; } alternatives.push(data); }.bind(this)); return alternatives; }; /** * Builds multipart/mixed node. It should always contain different type of elements on the same level * eg. text + attachments * * @param {Object} parentNode Parent for this note. If it does not exist, a root node is created * @returns {Object} BuildMail node element */ MailComposer.prototype._createMixed = function (parentNode) { var node; if (!parentNode) { node = new BuildMail('multipart/mixed', { baseBoundary: this.mail.baseBoundary, textEncoding: this.mail.textEncoding, boundaryPrefix: this.mail.boundaryPrefix, disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } else { node = parentNode.createChild('multipart/mixed', { disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } if (this._useAlternative) { this._createAlternative(node); } else if (this._useRelated) { this._createRelated(node); } [].concat(!this._useAlternative && this._alternatives || []).concat(this._attachments.attached || []).forEach(function (element) { // if the element is a html node from related subpart then ignore it if (!this._useRelated || element !== this._htmlNode) { this._createContentNode(node, element); } }.bind(this)); return node; }; /** * Builds multipart/alternative node. It should always contain same type of elements on the same level * eg. text + html view of the same data * * @param {Object} parentNode Parent for this note. If it does not exist, a root node is created * @returns {Object} BuildMail node element */ MailComposer.prototype._createAlternative = function (parentNode) { var node; if (!parentNode) { node = new BuildMail('multipart/alternative', { baseBoundary: this.mail.baseBoundary, textEncoding: this.mail.textEncoding, boundaryPrefix: this.mail.boundaryPrefix, disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } else { node = parentNode.createChild('multipart/alternative', { disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } this._alternatives.forEach(function (alternative) { if (this._useRelated && this._htmlNode === alternative) { this._createRelated(node); } else { this._createContentNode(node, alternative); } }.bind(this)); return node; }; /** * Builds multipart/related node. It should always contain html node with related attachments * * @param {Object} parentNode Parent for this note. If it does not exist, a root node is created * @returns {Object} BuildMail node element */ MailComposer.prototype._createRelated = function (parentNode) { var node; if (!parentNode) { node = new BuildMail('multipart/related; type="text/html"', { baseBoundary: this.mail.baseBoundary, textEncoding: this.mail.textEncoding, boundaryPrefix: this.mail.boundaryPrefix, disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } else { node = parentNode.createChild('multipart/related; type="text/html"', { disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } this._createContentNode(node, this._htmlNode); this._attachments.related.forEach(function (alternative) { this._createContentNode(node, alternative); }.bind(this)); return node; }; /** * Creates a regular node with contents * * @param {Object} parentNode Parent for this note. If it does not exist, a root node is created * @param {Object} element Node data * @returns {Object} BuildMail node element */ MailComposer.prototype._createContentNode = function (parentNode, element) { element = element || {}; element.content = element.content || ''; var node; var encoding = (element.encoding || 'utf8') .toString() .toLowerCase() .replace(/[-_\s]/g, ''); if (!parentNode) { node = new BuildMail(element.contentType, { filename: element.filename, baseBoundary: this.mail.baseBoundary, textEncoding: this.mail.textEncoding, boundaryPrefix: this.mail.boundaryPrefix, disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } else { node = parentNode.createChild(element.contentType, { filename: element.filename, disableUrlAccess: this.mail.disableUrlAccess, disableFileAccess: this.mail.disableFileAccess }); } // add custom headers if (element.headers) { node.addHeader(element.headers); } if (element.cid) { node.setHeader('Content-Id', '<' + element.cid.replace(/[<>]/g, '') + '>'); } if (element.contentTransferEncoding) { node.setHeader('Content-Transfer-Encoding', element.contentTransferEncoding); } else if (this.mail.encoding && /^text\//i.test(element.contentType)) { node.setHeader('Content-Transfer-Encoding', this.mail.encoding); } if (!/^text\//i.test(element.contentType) || element.contentDisposition) { node.setHeader('Content-Disposition', element.contentDisposition || (element.cid ? 'inline' : 'attachment')); } if (typeof element.content === 'string' && ['utf8', 'usascii', 'ascii'].indexOf(encoding) < 0) { element.content = new Buffer(element.content, encoding); } // prefer pregenerated raw content if (element.raw) { node.setRaw(element.raw); } else { node.setContent(element.content); } return node; }; /** * Parses data uri and converts it to a Buffer * * @param {Object} element Content element * @return {Object} Parsed element */ MailComposer.prototype._processDataUrl = function (element) { var parts = (element.path || element.href).match(/^data:((?:[^;]*;)*(?:[^,]*)),(.*)$/i); if (!parts) { return element; } element.content = /\bbase64$/i.test(parts[1]) ? new Buffer(parts[2], 'base64') : new Buffer(decodeURIComponent(parts[2])); if ('path' in element) { element.path = false; } if ('href' in element) { element.href = false; } parts[1].split(';').forEach(function (item) { if (/^\w+\/[^\/]+$/i.test(item)) { element.contentType = element.contentType || item.toLowerCase(); } }); return element; }; build-query.js 0000664 00000013663 15112155775 0007370 0 ustar 00 'use strict'; //TODO: move to dbal const _ = require('lodash'); const parseType = require('./parse-type'); const isAttribute = (model, field) => _.has(model.allAttributes, field) || model.primaryKey === field || field === 'id'; /** * Returns the model, attribute name and association from a path of relation * @param {Object} options - Options * @param {Object} options.model - Strapi model * @param {string} options.field - path of relation / attribute */ const getAssociationFromFieldKey = ({ model, field }) => { const fieldParts = field.split('.'); let tmpModel = model; let association; let attribute; for (let i = 0; i < fieldParts.length; i++) { const part = fieldParts[i]; attribute = part; const assoc = tmpModel.associations.find(ast => ast.alias === part); if (assoc) { association = assoc; tmpModel = strapi.db.getModelByAssoc(assoc); continue; } if (!assoc && (!isAttribute(tmpModel, part) || i !== fieldParts.length - 1)) { const err = new Error( `Your filters contain a field '${field}' that doesn't appear on your model definition nor it's relations` ); err.status = 400; throw err; } } return { association, model: tmpModel, attribute, }; }; /** * Cast an input value * @param {Object} options - Options * @param {string} options.type - type of the atribute * @param {*} options.value - value tu cast * @param {string} options.operator - name of operator */ const castInput = ({ type, value, operator }) => { return Array.isArray(value) ? value.map(val => castValue({ type, operator, value: val })) : castValue({ type, operator, value: value }); }; /** * Cast basic values based on attribute type * @param {Object} options - Options * @param {string} options.type - type of the atribute * @param {*} options.value - value tu cast * @param {string} options.operator - name of operator */ const castValue = ({ type, value, operator }) => { if (operator === 'null') return parseType({ type: 'boolean', value }); return parseType({ type, value }); }; /** * * @param {Object} options - Options * @param {string} options.model - The model * @param {string} options.field - path of relation / attribute */ const normalizeFieldName = ({ model, field }) => { const fieldPath = field.split('.'); return _.last(fieldPath) === 'id' ? _.initial(fieldPath) .concat(model.primaryKey) .join('.') : fieldPath.join('.'); }; const BOOLEAN_OPERATORS = ['or']; const hasDeepFilters = ({ where = [], sort = [] }, { minDepth = 1 } = {}) => { // A query uses deep filtering if some of the clauses contains a sort or a match expression on a field of a relation // We don't use minDepth here because deep sorting is limited to depth 1 const hasDeepSortClauses = sort.some(({ field }) => field.includes('.')); const hasDeepWhereClauses = where.some(({ field, operator, value }) => { if (BOOLEAN_OPERATORS.includes(operator)) { return value.some(clauses => hasDeepFilters({ where: clauses })); } return field.split('.').length > minDepth; }); return hasDeepSortClauses || hasDeepWhereClauses; }; const normalizeWhereClauses = (whereClauses, { model }) => { return whereClauses .filter(({ value }) => !_.isNull(value)) .map(({ field, operator, value }) => { if (_.isUndefined(value)) { const err = new Error( `The value of field: '${field}', in your where filter, is undefined.` ); err.status = 400; throw err; } if (BOOLEAN_OPERATORS.includes(operator)) { return { field, operator, value: value.map(clauses => normalizeWhereClauses(clauses, { model })), }; } const { model: assocModel, attribute } = getAssociationFromFieldKey({ model, field, }); const { type } = _.get(assocModel, ['allAttributes', attribute], {}); // cast value or array of values const castedValue = castInput({ type, operator, value }); return { field: normalizeFieldName({ model, field }), operator, value: castedValue, }; }); }; const normalizeSortClauses = (clauses, { model }) => { const normalizedClauses = clauses.map(({ field, order }) => ({ field: normalizeFieldName({ model, field }), order, })); normalizedClauses.forEach(({ field }) => { const fieldDepth = field.split('.').length - 1; if (fieldDepth === 1) { // Check if the relational field exists getAssociationFromFieldKey({ model, field }); } else if (fieldDepth > 1) { const err = new Error( `Sorting on ${field} is not possible: you cannot sort at a depth greater than 1` ); err.status = 400; throw err; } }); return normalizedClauses; }; /** * * @param {Object} options - Options * @param {Object} options.model - The model for which the query will be built * @param {Object} options.filters - The filters for the query (start, sort, limit, and where clauses) * @param {Object} options.rest - In case the database layer requires any other params pass them */ const buildQuery = ({ model, filters = {}, ...rest }) => { const { where, sort } = filters; // Validate query clauses if ([where, sort].some(Array.isArray)) { if (hasDeepFilters({ where, sort }, { minDepth: 2 })) { strapi.log.warn( 'Deep filtering queries should be used carefully (e.g Can cause performance issues).\nWhen possible build custom routes which will in most case be more optimised.' ); } if (sort) { filters.sort = normalizeSortClauses(sort, { model }); } if (where) { // Cast where clauses to match the inner types filters.where = normalizeWhereClauses(where, { model }); } } // call the ORM's buildQuery implementation return strapi.db.connectors.get(model.orm).buildQuery({ model, filters, ...rest }); }; module.exports = { buildQuery, hasDeepFilters, }; code-generator.js 0000664 00000000464 15112155775 0010017 0 ustar 00 'use strict'; // Using timestamp (milliseconds) to be sure it is unique // + converting timestamp to base 36 for better readibility const generateTimestampCode = date => { const referDate = date || new Date(); return referDate.getTime().toString(36); }; module.exports = { generateTimestampCode, }; config.js 0000664 00000004605 15112155775 0006367 0 ustar 00 'use strict'; const _ = require('lodash'); const { getCommonBeginning } = require('./string-formatting'); const getConfigUrls = (serverConfig, forAdminBuild = false) => { // Defines serverUrl value let serverUrl = _.get(serverConfig, 'url', ''); serverUrl = _.trim(serverUrl, '/ '); if (typeof serverUrl !== 'string') { throw new Error('Invalid server url config. Make sure the url is a string.'); } if (serverUrl.startsWith('http')) { try { serverUrl = _.trim(new URL(serverConfig.url).toString(), '/'); } catch (e) { throw new Error( 'Invalid server url config. Make sure the url defined in server.js is valid.' ); } } else if (serverUrl !== '') { serverUrl = `/${serverUrl}`; } // Defines adminUrl value let adminUrl = _.get(serverConfig, 'admin.url', '/admin'); adminUrl = _.trim(adminUrl, '/ '); if (typeof adminUrl !== 'string') { throw new Error('Invalid admin url config. Make sure the url is a non-empty string.'); } if (adminUrl.startsWith('http')) { try { adminUrl = _.trim(new URL(adminUrl).toString(), '/'); } catch (e) { throw new Error('Invalid admin url config. Make sure the url defined in server.js is valid.'); } } else { adminUrl = `${serverUrl}/${adminUrl}`; } // Defines adminPath value let adminPath = adminUrl; if ( serverUrl.startsWith('http') && adminUrl.startsWith('http') && new URL(adminUrl).origin === new URL(serverUrl).origin && !forAdminBuild ) { adminPath = adminUrl.replace(getCommonBeginning(serverUrl, adminUrl), ''); adminPath = `/${_.trim(adminPath, '/')}`; } else if (adminUrl.startsWith('http')) { adminPath = new URL(adminUrl).pathname; } return { serverUrl, adminUrl, adminPath, }; }; const getAbsoluteUrl = adminOrServer => (config, forAdminBuild = false) => { const { serverUrl, adminUrl } = getConfigUrls(config.server, forAdminBuild); let url = adminOrServer === 'server' ? serverUrl : adminUrl; if (url.startsWith('http')) { return url; } let hostname = config.environment === 'development' && ['127.0.0.1', '0.0.0.0'].includes(config.server.host) ? 'localhost' : config.server.host; return `http://${hostname}:${config.server.port}${url}`; }; module.exports = { getConfigUrls, getAbsoluteAdminUrl: getAbsoluteUrl('admin'), getAbsoluteServerUrl: getAbsoluteUrl('server'), }; content-types.js 0000664 00000006545 15112155775 0007743 0 ustar 00 'use strict'; const _ = require('lodash'); const SINGLE_TYPE = 'singleType'; const COLLECTION_TYPE = 'collectionType'; const ID_ATTRIBUTE = 'id'; const PUBLISHED_AT_ATTRIBUTE = 'published_at'; const CREATED_BY_ATTRIBUTE = 'created_by'; const UPDATED_BY_ATTRIBUTE = 'updated_by'; const DP_PUB_STATE_LIVE = 'live'; const DP_PUB_STATE_PREVIEW = 'preview'; const DP_PUB_STATES = [DP_PUB_STATE_LIVE, DP_PUB_STATE_PREVIEW]; const NON_WRITABLE_ATTRIBUTES = [ID_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE]; const NON_VISIBLE_ATTRIBUTES = [...NON_WRITABLE_ATTRIBUTES, PUBLISHED_AT_ATTRIBUTE]; const constants = { ID_ATTRIBUTE, PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE, DP_PUB_STATES, DP_PUB_STATE_LIVE, DP_PUB_STATE_PREVIEW, SINGLE_TYPE, COLLECTION_TYPE, }; const getTimestamps = model => { const timestamps = _.get(model, 'options.timestamps', []); if (!_.isArray(timestamps)) { return []; } return timestamps; }; const getTimestampsAttributes = model => { const timestamps = getTimestamps(model); return timestamps.reduce( (attributes, attributeName) => ({ ...attributes, [attributeName]: { type: 'timestamp' }, }), {} ); }; const getNonWritableAttributes = (model = {}) => { const nonWritableAttributes = _.reduce( model.attributes, (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc), [] ); return _.uniq( NON_WRITABLE_ATTRIBUTES.concat(model.primaryKey, getTimestamps(model), nonWritableAttributes) ); }; const getWritableAttributes = (model = {}) => { return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model)); }; const getNonVisibleAttributes = model => { return _.uniq([model.primaryKey, ...getTimestamps(model), ...NON_VISIBLE_ATTRIBUTES]); }; const getVisibleAttributes = model => { return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model)); }; const hasDraftAndPublish = model => _.get(model, 'options.draftAndPublish', false) === true; const isDraft = (data, model) => hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null; const isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE; const isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE; const isKind = kind => model => model.kind === kind; const getPrivateAttributes = (model = {}) => { return _.union( strapi.config.get('api.responses.privateAttributes', []), _.get(model, 'options.privateAttributes', []), _.keys(_.pickBy(model.attributes, attr => !!attr.private)) ); }; const isPrivateAttribute = (model = {}, attributeName) => { return model && model.privateAttributes && model.privateAttributes.includes(attributeName); }; const isScalarAttribute = attribute => { return ( !attribute.collection && !attribute.model && attribute.type !== 'component' && attribute.type !== 'dynamiczone' ); }; const isMediaAttribute = attr => { return (attr.collection || attr.model) === 'file' && attr.plugin === 'upload'; }; module.exports = { isScalarAttribute, isMediaAttribute, getPrivateAttributes, getTimestampsAttributes, isPrivateAttribute, constants, getNonWritableAttributes, getWritableAttributes, getNonVisibleAttributes, getVisibleAttributes, hasDraftAndPublish, isDraft, isSingleType, isCollectionType, isKind, }; convert-rest-query-params.js 0000664 00000012556 15112155775 0012205 0 ustar 00 'use strict'; /** * Converts the standard Strapi REST query params to a moe usable format for querying * You can read more here: https://strapi.io/documentation/developer-docs/latest/developer-resources/content-api/content-api.html#filters */ const _ = require('lodash'); const { constants: { DP_PUB_STATES }, } = require('./content-types'); const BOOLEAN_OPERATORS = ['or']; const QUERY_OPERATORS = ['_where', '_or']; /** * Global converter * @param {Object} params * @param defaults */ const convertRestQueryParams = (params = {}, defaults = {}) => { if (typeof params !== 'object' || params === null) { throw new Error( `convertRestQueryParams expected an object got ${params === null ? 'null' : typeof params}` ); } let finalParams = Object.assign({ start: 0, limit: 100 }, defaults); if (Object.keys(params).length === 0) { return finalParams; } if (_.has(params, '_sort')) { Object.assign(finalParams, convertSortQueryParams(params._sort)); } if (_.has(params, '_start')) { Object.assign(finalParams, convertStartQueryParams(params._start)); } if (_.has(params, '_limit')) { Object.assign(finalParams, convertLimitQueryParams(params._limit)); } if (_.has(params, '_publicationState')) { Object.assign(finalParams, convertPublicationStateParams(params._publicationState)); } const whereParams = _.omit(params, ['_sort', '_start', '_limit', '_where', '_publicationState']); const whereClauses = []; if (_.keys(whereParams).length > 0) { whereClauses.push(...convertWhereParams(whereParams)); } if (_.has(params, '_where')) { whereClauses.push(...convertWhereParams(params._where)); } Object.assign(finalParams, { where: whereClauses }); return finalParams; }; /** * Sort query parser * @param {string} sortQuery - ex: id:asc,price:desc */ const convertSortQueryParams = sortQuery => { if (typeof sortQuery !== 'string') { throw new Error(`convertSortQueryParams expected a string, got ${typeof sortQuery}`); } const sortKeys = []; sortQuery.split(',').forEach(part => { // split field and order param with default order to ascending const [field, order = 'asc'] = part.split(':'); if (field.length === 0) { throw new Error('Field cannot be empty'); } if (!['asc', 'desc'].includes(order.toLocaleLowerCase())) { throw new Error('order can only be one of asc|desc|ASC|DESC'); } sortKeys.push({ field, order: order.toLowerCase() }); }); return { sort: sortKeys, }; }; /** * Start query parser * @param {string} startQuery - ex: id:asc,price:desc */ const convertStartQueryParams = startQuery => { const startAsANumber = _.toNumber(startQuery); if (!_.isInteger(startAsANumber) || startAsANumber < 0) { throw new Error(`convertStartQueryParams expected a positive integer got ${startAsANumber}`); } return { start: startAsANumber, }; }; /** * Limit query parser * @param {string} limitQuery - ex: id:asc,price:desc */ const convertLimitQueryParams = limitQuery => { const limitAsANumber = _.toNumber(limitQuery); if (!_.isInteger(limitAsANumber) || (limitAsANumber !== -1 && limitAsANumber < 0)) { throw new Error(`convertLimitQueryParams expected a positive integer got ${limitAsANumber}`); } return { limit: limitAsANumber, }; }; /** * publicationState query parser * @param {string} publicationState - eg: 'live', 'preview' */ const convertPublicationStateParams = publicationState => { if (!DP_PUB_STATES.includes(publicationState)) { throw new Error( `convertPublicationStateParams expected a value from: ${DP_PUB_STATES.join( ', ' )}. Got ${publicationState} instead` ); } return { publicationState }; }; // List of all the possible filters const VALID_REST_OPERATORS = [ 'eq', 'ne', 'in', 'nin', 'contains', 'ncontains', 'containss', 'ncontainss', 'lt', 'lte', 'gt', 'gte', 'null', ]; /** * Parse where params */ const convertWhereParams = whereParams => { let finalWhere = []; if (Array.isArray(whereParams)) { return whereParams.reduce((acc, whereParam) => { return acc.concat(convertWhereParams(whereParam)); }, []); } Object.keys(whereParams).forEach(whereClause => { const { field, operator = 'eq', value } = convertWhereClause( whereClause, whereParams[whereClause] ); finalWhere.push({ field, operator, value, }); }); return finalWhere; }; /** * Parse single where param * @param {string} whereClause - Any possible where clause e.g: id_ne text_ncontains * @param {string} value - the value of the where clause e.g id_ne=value */ const convertWhereClause = (whereClause, value) => { const separatorIndex = whereClause.lastIndexOf('_'); // eq operator if (separatorIndex === -1) { return { field: whereClause, value }; } // split field and operator const field = whereClause.substring(0, separatorIndex); const operator = whereClause.slice(separatorIndex + 1); if (BOOLEAN_OPERATORS.includes(operator) && field === '') { return { field: null, operator, value: [].concat(value).map(convertWhereParams) }; } // the field as underscores if (!VALID_REST_OPERATORS.includes(operator)) { return { field: whereClause, value }; } return { field, operator, value }; }; module.exports = { convertRestQueryParams, VALID_REST_OPERATORS, QUERY_OPERATORS, }; env-helper.js 0000664 00000003001 15112155775 0007154 0 ustar 00 'use strict'; const _ = require('lodash'); function env(key, defaultValue) { return _.has(process.env, key) ? process.env[key] : defaultValue; } const utils = { int(key, defaultValue) { if (!_.has(process.env, key)) { return defaultValue; } const value = process.env[key]; return parseInt(value, 10); }, float(key, defaultValue) { if (!_.has(process.env, key)) { return defaultValue; } const value = process.env[key]; return parseFloat(value); }, bool(key, defaultValue) { if (!_.has(process.env, key)) { return defaultValue; } const value = process.env[key]; return value === 'true'; }, json(key, defaultValue) { if (!_.has(process.env, key)) { return defaultValue; } const value = process.env[key]; try { return JSON.parse(value); } catch (error) { throw new Error(`Invalid json environment variable ${key}: ${error.message}`); } }, array(key, defaultValue) { if (!_.has(process.env, key)) { return defaultValue; } let value = process.env[key]; if (value.startsWith('[') && value.endsWith(']')) { value = value.substring(1, value.length - 1); } return value.split(',').map(v => { return _.trim(_.trim(v, ' '), '"'); }); }, date(key, defaultValue) { if (!_.has(process.env, key)) { return defaultValue; } const value = process.env[key]; return new Date(value); }, }; Object.assign(env, utils); module.exports = env; finder.js 0000664 00000001243 15112155775 0006364 0 ustar 00 'use strict'; /** * Module dependencies */ const _ = require('lodash'); /** * Find controller's location */ module.exports = (api, controller) => { if (!_.isObject(api)) { throw new Error('Should be an object'); } if (_.isObject(controller) && _.has(controller, 'identity')) { controller = controller.identity.toLowerCase(); } else if (_.isString(controller)) { controller = controller.toLowerCase(); } else { throw new Error('Should be an object or a string'); } const where = _.findKey(api, o => { return _.get(o, `controllers.${controller}`); }); // Return the API's name where the controller is located return where; }; index.js 0000664 00000030522 15112155775 0006226 0 ustar 00 "use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __spreadArray = (this && this.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.select = exports.filter = exports.some = exports.is = exports.aliases = exports.pseudos = exports.filters = void 0; var css_what_1 = require("css-what"); var css_select_1 = require("css-select"); var DomUtils = __importStar(require("domutils")); var helpers_1 = require("./helpers"); var positionals_1 = require("./positionals"); // Re-export pseudo extension points var css_select_2 = require("css-select"); Object.defineProperty(exports, "filters", { enumerable: true, get: function () { return css_select_2.filters; } }); Object.defineProperty(exports, "pseudos", { enumerable: true, get: function () { return css_select_2.pseudos; } }); Object.defineProperty(exports, "aliases", { enumerable: true, get: function () { return css_select_2.aliases; } }); /** Used to indicate a scope should be filtered. Might be ignored when filtering. */ var SCOPE_PSEUDO = { type: "pseudo", name: "scope", data: null, }; /** Used for actually filtering for scope. */ var CUSTOM_SCOPE_PSEUDO = __assign({}, SCOPE_PSEUDO); var UNIVERSAL_SELECTOR = { type: "universal", namespace: null }; function is(element, selector, options) { if (options === void 0) { options = {}; } return some([element], selector, options); } exports.is = is; function some(elements, selector, options) { if (options === void 0) { options = {}; } if (typeof selector === "function") return elements.some(selector); var _a = helpers_1.groupSelectors(css_what_1.parse(selector, options)), plain = _a[0], filtered = _a[1]; return ((plain.length > 0 && elements.some(css_select_1._compileToken(plain, options))) || filtered.some(function (sel) { return filterBySelector(sel, elements, options).length > 0; })); } exports.some = some; function filterByPosition(filter, elems, data, options) { var num = typeof data === "string" ? parseInt(data, 10) : NaN; switch (filter) { case "first": case "lt": // Already done in `getLimit` return elems; case "last": return elems.length > 0 ? [elems[elems.length - 1]] : elems; case "nth": case "eq": return isFinite(num) && Math.abs(num) < elems.length ? [num < 0 ? elems[elems.length + num] : elems[num]] : []; case "gt": return isFinite(num) ? elems.slice(num + 1) : []; case "even": return elems.filter(function (_, i) { return i % 2 === 0; }); case "odd": return elems.filter(function (_, i) { return i % 2 === 1; }); case "not": { var filtered_1 = new Set(filterParsed(data, elems, options)); return elems.filter(function (e) { return !filtered_1.has(e); }); } } } function filter(selector, elements, options) { if (options === void 0) { options = {}; } return filterParsed(css_what_1.parse(selector, options), elements, options); } exports.filter = filter; /** * Filter a set of elements by a selector. * * Will return elements in the original order. * * @param selector Selector to filter by. * @param elements Elements to filter. * @param options Options for selector. */ function filterParsed(selector, elements, options) { if (elements.length === 0) return []; var _a = helpers_1.groupSelectors(selector), plainSelectors = _a[0], filteredSelectors = _a[1]; var found; if (plainSelectors.length) { var filtered = filterElements(elements, plainSelectors, options); // If there are no filters, just return if (filteredSelectors.length === 0) { return filtered; } // Otherwise, we have to do some filtering if (filtered.length) { found = new Set(filtered); } } for (var i = 0; i < filteredSelectors.length && (found === null || found === void 0 ? void 0 : found.size) !== elements.length; i++) { var filteredSelector = filteredSelectors[i]; var missing = found ? elements.filter(function (e) { return DomUtils.isTag(e) && !found.has(e); }) : elements; if (missing.length === 0) break; var filtered = filterBySelector(filteredSelector, elements, options); if (filtered.length) { if (!found) { /* * If we haven't found anything before the last selector, * just return what we found now. */ if (i === filteredSelectors.length - 1) { return filtered; } found = new Set(filtered); } else { filtered.forEach(function (el) { return found.add(el); }); } } } return typeof found !== "undefined" ? (found.size === elements.length ? elements : // Filter elements to preserve order elements.filter(function (el) { return found.has(el); })) : []; } function filterBySelector(selector, elements, options) { var _a; if (selector.some(css_what_1.isTraversal)) { /* * Get root node, run selector with the scope * set to all of our nodes. */ var root = (_a = options.root) !== null && _a !== void 0 ? _a : helpers_1.getDocumentRoot(elements[0]); var sel = __spreadArray(__spreadArray([], selector), [CUSTOM_SCOPE_PSEUDO]); return findFilterElements(root, sel, options, true, elements); } // Performance optimization: If we don't have to traverse, just filter set. return findFilterElements(elements, selector, options, false); } function select(selector, root, options) { if (options === void 0) { options = {}; } if (typeof selector === "function") { return find(root, selector); } var _a = helpers_1.groupSelectors(css_what_1.parse(selector, options)), plain = _a[0], filtered = _a[1]; var results = filtered.map(function (sel) { return findFilterElements(root, sel, options, true); }); // Plain selectors can be queried in a single go if (plain.length) { results.push(findElements(root, plain, options, Infinity)); } // If there was only a single selector, just return the result if (results.length === 1) { return results[0]; } // Sort results, filtering for duplicates return DomUtils.uniqueSort(results.reduce(function (a, b) { return __spreadArray(__spreadArray([], a), b); })); } exports.select = select; // Traversals that are treated differently in css-select. var specialTraversal = new Set(["descendant", "adjacent"]); function includesScopePseudo(t) { return (t !== SCOPE_PSEUDO && t.type === "pseudo" && (t.name === "scope" || (Array.isArray(t.data) && t.data.some(function (data) { return data.some(includesScopePseudo); })))); } function addContextIfScope(selector, options, scopeContext) { return scopeContext && selector.some(includesScopePseudo) ? __assign(__assign({}, options), { context: scopeContext }) : options; } /** * * @param root Element(s) to search from. * @param selector Selector to look for. * @param options Options for querying. * @param queryForSelector Query multiple levels deep for the initial selector, even if it doesn't contain a traversal. * @param scopeContext Optional context for a :scope. */ function findFilterElements(root, selector, options, queryForSelector, scopeContext) { var filterIndex = selector.findIndex(positionals_1.isFilter); var sub = selector.slice(0, filterIndex); var filter = selector[filterIndex]; /* * Set the number of elements to retrieve. * Eg. for :first, we only have to get a single element. */ var limit = positionals_1.getLimit(filter.name, filter.data); if (limit === 0) return []; var subOpts = addContextIfScope(sub, options, scopeContext); /* * Skip `findElements` call if our selector starts with a positional * pseudo. */ var elemsNoLimit = sub.length === 0 && !Array.isArray(root) ? DomUtils.getChildren(root).filter(DomUtils.isTag) : sub.length === 0 || (sub.length === 1 && sub[0] === SCOPE_PSEUDO) ? (Array.isArray(root) ? root : [root]).filter(DomUtils.isTag) : queryForSelector || sub.some(css_what_1.isTraversal) ? findElements(root, [sub], subOpts, limit) : filterElements(root, [sub], subOpts); var elems = elemsNoLimit.slice(0, limit); var result = filterByPosition(filter.name, elems, filter.data, options); if (result.length === 0 || selector.length === filterIndex + 1) { return result; } var remainingSelector = selector.slice(filterIndex + 1); var remainingHasTraversal = remainingSelector.some(css_what_1.isTraversal); var remainingOpts = addContextIfScope(remainingSelector, options, scopeContext); if (remainingHasTraversal) { /* * Some types of traversals have special logic when they start a selector * in css-select. If this is the case, add a universal selector in front of * the selector to avoid this behavior. */ if (specialTraversal.has(remainingSelector[0].type)) { remainingSelector.unshift(UNIVERSAL_SELECTOR); } /* * Add a scope token in front of the remaining selector, * to make sure traversals don't match elements that aren't a * part of the considered tree. */ remainingSelector.unshift(SCOPE_PSEUDO); } /* * If we have another filter, recursively call `findFilterElements`, * with the `recursive` flag disabled. We only have to look for more * elements when we see a traversal. * * Otherwise, */ return remainingSelector.some(positionals_1.isFilter) ? findFilterElements(result, remainingSelector, options, false, scopeContext) : remainingHasTraversal ? // Query existing elements to resolve traversal. findElements(result, [remainingSelector], remainingOpts, Infinity) : // If we don't have any more traversals, simply filter elements. filterElements(result, [remainingSelector], remainingOpts); } function findElements(root, sel, options, limit) { if (limit === 0) return []; var query = css_select_1._compileToken(sel, options, root); return find(root, query, limit); } function find(root, query, limit) { if (limit === void 0) { limit = Infinity; } var elems = css_select_1.prepareContext(root, DomUtils, query.shouldTestNextSiblings); return DomUtils.find(function (node) { return DomUtils.isTag(node) && query(node); }, elems, true, limit); } function filterElements(elements, sel, options) { var els = (Array.isArray(elements) ? elements : [elements]).filter(DomUtils.isTag); if (els.length === 0) return els; var query = css_select_1._compileToken(sel, options); return els.filter(query); } logger.js 0000664 00000002677 15112155775 0006410 0 ustar 00 'use strict'; /** * Logger. */ const pino = require('pino'); const _ = require('lodash'); const logLevels = Object.keys(pino.levels.values); function getLogLevel() { if (!_.isString(process.env.STRAPI_LOG_LEVEL)) { // Default value. return 'debug'; } const logLevel = process.env.STRAPI_LOG_LEVEL.toLowerCase(); if (!_.includes(logLevels, logLevel)) { throw new Error( "Invalid log level set in STRAPI_LOG_LEVEL environment variable. Accepted values are: '" + logLevels.join("', '") + "'." ); } return logLevel; } function getBool(envVar, defaultValue) { if (_.isBoolean(envVar)) return envVar; if (_.isString(envVar)) { if (envVar === 'true') return true; if (envVar === 'false') return false; } return defaultValue; } const loggerConfig = { level: getLogLevel(), timestamp: getBool(process.env.STRAPI_LOG_TIMESTAMP, false), // prettyPrint: getBool(process.env.STRAPI_LOG_PRETTY_PRINT, true), forceColor: getBool(process.env.STRAPI_LOG_FORCE_COLOR, true), }; const pretty = pino.pretty({ formatter: (logs, options) => { return `${options.asColoredText( { level: 10 }, `[${new Date().toISOString()}]` )} ${options.prefix.toLowerCase()} ${logs.stack ? logs.stack : logs.msg}`; }, }); pretty.pipe(process.stdout); const logger = getBool(process.env.STRAPI_LOG_PRETTY_PRINT, true) ? pino(loggerConfig, pretty) : pino(loggerConfig); module.exports = logger; models.js 0000664 00000036177 15112155775 0006416 0 ustar 00 'use strict'; /** * Module dependencies */ // Public node modules. const _ = require('lodash'); const pluralize = require('pluralize'); /* * Set of utils for models */ module.exports = { /** * Initialize to prevent some mistakes */ initialize: cb => { cb(); }, /** * Retrieve the value based on the primary key */ getValuePrimaryKey: (value, defaultKey) => { return value[defaultKey] || value.id || value._id; }, /** * Find relation nature with verbose */ getNature: ({ attribute, attributeName, modelName }) => { const types = { current: '', other: '', }; const models = strapi.db.getModelsByPluginName(attribute.plugin); const pluginModels = Object.values(strapi.plugins).reduce((acc, plugin) => { return acc.concat(Object.values(plugin.models)); }, []); const allModels = Object.values(strapi.models).concat(pluginModels); if ( (_.has(attribute, 'collection') && attribute.collection === '*') || (_.has(attribute, 'model') && attribute.model === '*') ) { if (attribute.model) { types.current = 'morphToD'; } else { types.current = 'morphTo'; } // We have to find if they are a model linked to this key _.forEach(allModels, model => { _.forIn(model.attributes, attribute => { if (_.has(attribute, 'via') && attribute.via === attributeName) { if (_.has(attribute, 'collection') && attribute.collection === modelName) { types.other = 'collection'; // Break loop return false; } else if (_.has(attribute, 'model') && attribute.model === modelName) { types.other = 'modelD'; // Break loop return false; } } }); }); } else if (_.has(attribute, 'via') && _.has(attribute, 'collection')) { if (!_.has(models, attribute.collection)) { throw new Error( `The collection \`${_.upperFirst( attribute.collection )}\`, used in the attribute \`${attributeName}\` in the model ${_.upperFirst( modelName )}, is missing from the${ attribute.plugin ? ' (plugin - ' + attribute.plugin + ')' : '' } models` ); } const relatedAttribute = models[attribute.collection].attributes[attribute.via]; if (!relatedAttribute) { throw new Error( `The attribute \`${attribute.via}\` is missing in the model ${_.upperFirst( attribute.collection )}${attribute.plugin ? ' (plugin - ' + attribute.plugin + ')' : ''}` ); } types.current = 'collection'; if ( _.has(relatedAttribute, 'collection') && relatedAttribute.collection !== '*' && _.has(relatedAttribute, 'via') ) { types.other = 'collection'; } else if ( _.has(relatedAttribute, 'collection') && relatedAttribute.collection !== '*' && !_.has(relatedAttribute, 'via') ) { types.other = 'collectionD'; } else if (_.has(relatedAttribute, 'model') && relatedAttribute.model !== '*') { types.other = 'model'; } else if (_.has(relatedAttribute, 'collection') || _.has(relatedAttribute, 'model')) { types.other = 'morphTo'; } else { throw new Error( `The attribute \`${ attribute.via }\` is not correctly configured in the model ${_.upperFirst(attribute.collection)}${ attribute.plugin ? ' (plugin - ' + attribute.plugin + ')' : '' }` ); } } else if (_.has(attribute, 'via') && _.has(attribute, 'model')) { types.current = 'modelD'; // We have to find if they are a model linked to this attributeName if (!_.has(models, attribute.model)) { throw new Error( `The model \`${_.upperFirst( attribute.model )}\`, used in the attribute \`${attributeName}\` in the model ${_.upperFirst( modelName )}, is missing from the${ attribute.plugin ? ' (plugin - ' + attribute.plugin + ')' : '' } models` ); } const reverseAttribute = models[attribute.model].attributes[attribute.via]; if (!reverseAttribute) { throw new Error( `The attribute \`${attribute.via}\` is missing in the model ${_.upperFirst( attribute.model )}${attribute.plugin ? ' (plugin - ' + attribute.plugin + ')' : ''}` ); } if ( _.has(reverseAttribute, 'via') && reverseAttribute.via === attributeName && _.has(reverseAttribute, 'collection') && reverseAttribute.collection !== '*' ) { types.other = 'collection'; } else if (_.has(reverseAttribute, 'model') && reverseAttribute.model !== '*') { types.other = 'model'; } else if (_.has(reverseAttribute, 'collection') || _.has(reverseAttribute, 'model')) { types.other = 'morphTo'; } else { throw new Error( `The attribute \`${ attribute.via }\` is not correctly configured in the model ${_.upperFirst(attribute.model)}${ attribute.plugin ? ' (plugin - ' + attribute.plugin + ')' : '' }` ); } } else if (_.has(attribute, 'model')) { types.current = 'model'; // We have to find if they are a model linked to this attributeName _.forIn(models, model => { _.forIn(model.attributes, attribute => { if (_.has(attribute, 'via') && attribute.via === attributeName) { if (_.has(attribute, 'collection') && attribute.collection === modelName) { types.other = 'collection'; // Break loop return false; } else if (_.has(attribute, 'model') && attribute.model === modelName) { types.other = 'modelD'; // Break loop return false; } } }); }); } else if (_.has(attribute, 'collection')) { types.current = 'collectionD'; // We have to find if they are a model linked to this attributeName _.forIn(models, model => { _.forIn(model.attributes, attribute => { if (_.has(attribute, 'via') && attribute.via === attributeName) { if (_.has(attribute, 'collection') && attribute.collection === modelName) { types.other = 'collection'; // Break loop return false; } else if (_.has(attribute, 'model') && attribute.model === modelName) { types.other = 'modelD'; // Break loop return false; } } }); }); } else { throw new Error( `The attribute \`${attributeName}\` is not correctly configured in the model ${_.upperFirst( modelName )}${attribute.plugin ? ' (plugin - ' + attribute.plugin + ')' : ''}` ); } if (types.current === 'collection' && types.other === 'morphTo') { return { nature: 'manyToManyMorph', verbose: 'morphMany', }; } else if (types.current === 'collection' && types.other === 'morphToD') { return { nature: 'manyToOneMorph', verbose: 'morphMany', }; } else if (types.current === 'modelD' && types.other === 'morphTo') { return { nature: 'oneToManyMorph', verbose: 'morphOne', }; } else if (types.current === 'modelD' && types.other === 'morphToD') { return { nature: 'oneToOneMorph', verbose: 'morphOne', }; } else if (types.current === 'morphToD' && types.other === 'collection') { return { nature: 'oneMorphToMany', verbose: 'belongsToMorph', }; } else if (types.current === 'morphToD' && types.other === 'model') { return { nature: 'oneMorphToOne', verbose: 'belongsToMorph', }; } else if ( types.current === 'morphTo' && (types.other === 'model' || _.has(attribute, 'model')) ) { return { nature: 'manyMorphToOne', verbose: 'belongsToManyMorph', }; } else if ( types.current === 'morphTo' && (types.other === 'collection' || _.has(attribute, 'collection')) ) { return { nature: 'manyMorphToMany', verbose: 'belongsToManyMorph', }; } else if (types.current === 'modelD' && types.other === 'model') { return { nature: 'oneToOne', verbose: 'belongsTo', }; } else if (types.current === 'model' && types.other === 'modelD') { return { nature: 'oneToOne', verbose: 'hasOne', }; } else if ( (types.current === 'model' || types.current === 'modelD') && types.other === 'collection' ) { return { nature: 'manyToOne', verbose: 'belongsTo', }; } else if (types.current === 'modelD' && types.other === 'collection') { return { nature: 'oneToMany', verbose: 'hasMany', }; } else if (types.current === 'collection' && types.other === 'model') { return { nature: 'oneToMany', verbose: 'hasMany', }; } else if (types.current === 'collection' && types.other === 'collection') { return { nature: 'manyToMany', verbose: 'belongsToMany', }; } else if ( (types.current === 'collectionD' && types.other === 'collection') || (types.current === 'collection' && types.other === 'collectionD') ) { return { nature: 'manyToMany', verbose: 'belongsToMany', }; } else if (types.current === 'collectionD' && types.other === '') { return { nature: 'manyWay', verbose: 'belongsToMany', }; } else if (types.current === 'model' && types.other === '') { return { nature: 'oneWay', verbose: 'belongsTo', }; } return undefined; }, /** * Return table name for a collection many-to-many */ getCollectionName: (associationA, associationB) => { if (associationA.dominant && _.has(associationA, 'collectionName')) { return associationA.collectionName; } if (associationB.dominant && _.has(associationB, 'collectionName')) { return associationB.collectionName; } return [associationA, associationB] .sort((a, b) => { if (a.collection === b.collection) { if (a.dominant) return 1; else return -1; } return a.collection < b.collection ? -1 : 1; }) .map(table => _.snakeCase(`${pluralize.plural(table.collection)} ${pluralize.plural(table.via)}`) ) .join('__'); }, /** * Define associations key to models */ defineAssociations: function(model, definition, association, key) { try { // Initialize associations object if (definition.associations === undefined) { definition.associations = []; } // Exclude non-relational attribute if (!_.has(association, 'collection') && !_.has(association, 'model')) { return; } // Get relation nature let details; const targetName = association.model || association.collection || ''; const targetModel = targetName !== '*' ? strapi.db.getModel(targetName, association.plugin) : null; const infos = this.getNature({ attribute: association, attributeName: key, modelName: model.toLowerCase(), }); if (targetName !== '*') { const model = strapi.db.getModel(targetName, association.plugin); details = _.get(model, ['attributes', association.via], {}); } // Build associations object if (_.has(association, 'collection') && association.collection !== '*') { const ast = { alias: key, type: 'collection', targetUid: targetModel.uid, collection: association.collection, via: association.via || undefined, nature: infos.nature, autoPopulate: _.get(association, 'autoPopulate', true), dominant: details.dominant !== true, plugin: association.plugin || undefined, filter: details.filter, }; if (infos.nature === 'manyToMany' && definition.orm === 'bookshelf') { ast.tableCollectionName = this.getCollectionName(details, association); } if (infos.nature === 'manyWay' && definition.orm === 'bookshelf') { ast.tableCollectionName = _.get(association, 'collectionName') || `${definition.collectionName}__${_.snakeCase(key)}`; } definition.associations.push(ast); return; } if (_.has(association, 'model') && association.model !== '*') { definition.associations.push({ alias: key, type: 'model', targetUid: targetModel.uid, model: association.model, via: association.via || undefined, nature: infos.nature, autoPopulate: _.get(association, 'autoPopulate', true), dominant: details.dominant !== true, plugin: association.plugin || undefined, filter: details.filter, }); return; } const pluginsModels = Object.keys(strapi.plugins).reduce((acc, current) => { Object.keys(strapi.plugins[current].models).forEach(entity => { Object.keys(strapi.plugins[current].models[entity].attributes).forEach(attribute => { const attr = strapi.plugins[current].models[entity].attributes[attribute]; if ((attr.collection || attr.model || '').toLowerCase() === model.toLowerCase()) { acc.push(strapi.plugins[current].models[entity]); } }); }); return acc; }, []); const appModels = Object.keys(strapi.models).reduce((acc, entity) => { Object.keys(strapi.models[entity].attributes).forEach(attribute => { const attr = strapi.models[entity].attributes[attribute]; if ((attr.collection || attr.model || '').toLowerCase() === model.toLowerCase()) { acc.push(strapi.models[entity]); } }); return acc; }, []); const componentModels = Object.keys(strapi.components).reduce((acc, entity) => { Object.keys(strapi.components[entity].attributes).forEach(attribute => { const attr = strapi.components[entity].attributes[attribute]; if ((attr.collection || attr.model || '').toLowerCase() === model.toLowerCase()) { acc.push(strapi.components[entity]); } }); return acc; }, []); const models = _.uniqWith(appModels.concat(pluginsModels, componentModels), _.isEqual); definition.associations.push({ alias: key, targetUid: '*', type: association.model ? 'model' : 'collection', related: models, nature: infos.nature, autoPopulate: _.get(association, 'autoPopulate', true), filter: association.filter, }); } catch (e) { strapi.log.error( `Something went wrong in the model \`${_.upperFirst(model)}\` with the attribute \`${key}\`` ); strapi.log.error(e); strapi.stop(); } }, }; object-formatting.js 0000664 00000000254 15112155775 0010534 0 ustar 00 'use strict'; const _ = require('lodash'); const removeUndefined = obj => _.pickBy(obj, value => typeof value !== 'undefined'); module.exports = { removeUndefined, }; parse-multipart.js 0000664 00000002004 15112155775 0010242 0 ustar 00 'use strict'; const _ = require('lodash'); module.exports = ctx => { const { body = {}, files = {} } = ctx.request; if (!body.data) { throw strapi.errors.badRequest( `When using multipart/form-data you need to provide your data in a JSON 'data' field.` ); } let data; try { data = JSON.parse(body.data); } catch (error) { throw strapi.errors.badRequest(`Invalid 'data' field. 'data' should be a valid JSON.`); } const filesToUpload = Object.keys(files).reduce((acc, key) => { const fullPath = _.toPath(key); if (fullPath.length <= 1 || fullPath[0] !== 'files') { throw strapi.errors.badRequest( `When using multipart/form-data you need to provide your files by prefixing them with the 'files'. For example, when a media file is named "avatar", make sure the form key name is "files.avatar"` ); } const path = _.tail(fullPath); acc[path.join('.')] = files[key]; return acc; }, {}); return { data, files: filesToUpload, }; }; parse-type.js 0000664 00000005021 15112155775 0007204 0 ustar 00 'use strict'; const _ = require('lodash'); const dates = require('date-fns'); const timeRegex = new RegExp( '^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$' ); const parseTime = value => { if (dates.isDate(value)) return dates.format(value, 'HH:mm:ss.SSS'); if (typeof value !== 'string') { throw new Error(`Expected a string, got a ${typeof value}`); } const result = value.match(timeRegex); if (result === null) { throw new Error('Invalid time format, expected HH:mm:ss.SSS'); } const [, hours, minutes, seconds, fraction = '.000'] = result; const fractionPart = _.padEnd(fraction.slice(1), 3, '0'); return `${hours}:${minutes}:${seconds}.${fractionPart}`; }; const parseDate = value => { if (dates.isDate(value)) return dates.format(value, 'yyyy-MM-dd'); try { let date = dates.parseISO(value); if (dates.isValid(date)) return dates.format(date, 'yyyy-MM-dd'); throw new Error(`Invalid format, expected an ISO compatible date`); } catch (error) { throw new Error(`Invalid format, expected an ISO compatible date`); } }; const parseDateTimeOrTimestamp = value => { if (dates.isDate(value)) return value; try { const date = dates.parseISO(value); if (dates.isValid(date)) return date; const milliUnixDate = dates.parse(value, 'T', new Date()); if (dates.isValid(milliUnixDate)) return milliUnixDate; throw new Error(`Invalid format, expected a timestamp or an ISO date`); } catch (error) { throw new Error(`Invalid format, expected a timestamp or an ISO date`); } }; /** * Cast basic values based on attribute type * @param {Object} options - Options * @param {string} options.type - type of the atribute * @param {*} options.value - value tu cast */ const parseType = ({ type, value }) => { switch (type) { case 'boolean': { if (typeof value === 'boolean') return value; if (['true', 't', '1', 1].includes(value)) { return true; } if (['false', 'f', '0', 0].includes(value)) { return false; } throw new Error( 'Invalid boolean input. Expected "t","1","true","false","0","f"' ); } case 'integer': case 'biginteger': case 'float': case 'decimal': { return _.toNumber(value); } case 'time': { return parseTime(value); } case 'date': { return parseDate(value); } case 'timestamp': case 'datetime': { return parseDateTimeOrTimestamp(value); } default: return value; } }; module.exports = parseType; policy.js 0000664 00000010460 15112155775 0006415 0 ustar 00 /** * Policies util */ 'use strict'; const _ = require('lodash'); const GLOBAL_PREFIX = 'global::'; const PLUGIN_PREFIX = 'plugins::'; const ADMIN_PREFIX = 'admin::'; const APPLICATION_PREFIX = 'application::'; const isPolicyFactory = _.isArray; const getPolicyIn = (container, policy) => _.get(container, ['config', 'policies', _.toLower(policy)]); const policyExistsIn = (container, policy) => !_.isUndefined(getPolicyIn(container, policy)); const stripPolicy = (policy, prefix) => policy.replace(prefix, ''); const createPolicy = (policyName, ...args) => ({ policyName, args }); const resolveHandler = policy => (_.isFunction(policy) ? policy : policy.handler); const parsePolicy = policy => isPolicyFactory(policy) ? createPolicy(...policy) : createPolicy(policy); const resolvePolicy = policyName => { const resolver = policyResolvers.find(resolver => resolver.exists(policyName)); return resolver ? resolveHandler(resolver.get)(policyName) : undefined; }; const searchLocalPolicy = (policy, plugin, apiName) => { let [absoluteApiName, policyName] = policy.split('.'); let absoluteApi = _.get(strapi.api, absoluteApiName); const resolver = policyResolvers.find(({ name }) => name === 'plugin'); if (policyExistsIn(absoluteApi, policyName)) { return resolveHandler(getPolicyIn(absoluteApi, policyName)); } const pluginPolicy = `${PLUGIN_PREFIX}${plugin}.${policy}`; if (plugin && resolver.exists(pluginPolicy)) { return resolveHandler(resolver.get(pluginPolicy)); } const api = _.get(strapi.api, apiName); if (api && policyExistsIn(api, policy)) { return resolveHandler(getPolicyIn(api, policy)); } return undefined; }; const globalPolicy = ({ method, endpoint, controller, action, plugin }) => { return async (ctx, next) => { ctx.request.route = { endpoint: `${method} ${endpoint}`, controller: _.toLower(controller), action: _.toLower(action), verb: _.toLower(method), plugin, }; await next(); }; }; const policyResolvers = [ { name: 'api', is(policy) { return _.startsWith(policy, APPLICATION_PREFIX); }, exists(policy) { return this.is(policy) && !_.isUndefined(this.get(policy)); }, get: policy => { const [, policyWithoutPrefix] = policy.split('::'); const [api = '', policyName = ''] = policyWithoutPrefix.split('.'); return getPolicyIn(_.get(strapi, ['api', api]), policyName); }, }, { name: 'admin', is(policy) { return _.startsWith(policy, ADMIN_PREFIX); }, exists(policy) { return this.is(policy) && !_.isUndefined(this.get(policy)); }, get: policy => { return getPolicyIn(_.get(strapi, 'admin'), stripPolicy(policy, ADMIN_PREFIX)); }, }, { name: 'plugin', is(policy) { return _.startsWith(policy, PLUGIN_PREFIX); }, exists(policy) { return this.is(policy) && !_.isUndefined(this.get(policy)); }, get(policy) { const [plugin = '', policyName = ''] = stripPolicy(policy, PLUGIN_PREFIX).split('.'); return getPolicyIn(_.get(strapi, ['plugins', plugin]), policyName); }, }, { name: 'global', is(policy) { return _.startsWith(policy, GLOBAL_PREFIX); }, exists(policy) { return this.is(policy) && !_.isUndefined(this.get(policy)); }, get(policy) { return getPolicyIn(strapi, stripPolicy(policy, GLOBAL_PREFIX)); }, }, ]; const get = (policy, plugin, apiName) => { const { policyName, args } = parsePolicy(policy); const resolvedPolicy = resolvePolicy(policyName); if (resolvedPolicy !== undefined) { return isPolicyFactory(policy) ? resolvedPolicy(...args) : resolvedPolicy; } const localPolicy = searchLocalPolicy(policy, plugin, apiName); if (localPolicy !== undefined) { return localPolicy; } throw new Error(`Could not find policy "${policy}"`); }; const createPolicyFactory = (factoryCallback, options) => { const { validator, name = 'unnamed' } = options; const validate = (...args) => { try { validator(...args); } catch (e) { throw new Error(`Invalid objects submitted to "${name}" policy.`); } }; return (...args) => { if (validator) { validate(...args); } return factoryCallback(...args); }; }; module.exports = { get, globalPolicy, createPolicyFactory, }; relations.js 0000664 00000000672 15112155775 0007122 0 ustar 00 'use strict'; const { prop } = require('lodash/fp'); const MANY_RELATIONS = ['oneToMany', 'manyToMany', 'manyWay']; const RF_RELATIONS = ['oneToMany', 'manyToMany', 'manyWay', 'manyToOne', 'oneWay', 'oneToOne']; const getRelationalFields = modelDef => { return modelDef.associations.filter(a => RF_RELATIONS.includes(a.nature)).map(prop('alias')); }; module.exports = { getRelationalFields, constants: { MANY_RELATIONS, }, }; sanitize-entity.js 0000664 00000010540 15112155775 0010255 0 ustar 00 'use strict'; const _ = require('lodash'); const { constants, isPrivateAttribute } = require('./content-types'); const { ID_ATTRIBUTE, PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE, } = constants; const sanitizeEntity = (dataSource, options) => { const { model, withPrivate = false, isOutput = true, includeFields = null } = options; if (typeof dataSource !== 'object' || _.isNil(dataSource)) { return dataSource; } const data = parseOriginalData(dataSource); if (typeof data !== 'object' || _.isNil(data)) { return data; } if (_.isArray(data)) { return data.map(entity => sanitizeEntity(entity, options)); } if (_.isNil(model)) { if (isOutput) { return null; } else { return data; } } const { attributes } = model; const allowedFields = getAllowedFields({ includeFields, model, isOutput }); const reducerFn = (acc, value, key) => { const attribute = attributes[key]; const allowedFieldsHasKey = allowedFields.includes(key); if (shouldRemoveAttribute(model, key, attribute, { withPrivate, isOutput })) { return acc; } // Relations const relation = attribute && (attribute.model || attribute.collection || attribute.component); if (relation) { if (_.isNil(value)) { return { ...acc, [key]: value }; } const [nextFields, isAllowed] = includeFields ? getNextFields(allowedFields, key, { allowedFieldsHasKey }) : [null, true]; if (!isAllowed) { return acc; } const baseOptions = { withPrivate, isOutput, includeFields: nextFields, }; let sanitizeFn; if (relation === '*') { sanitizeFn = entity => { if (_.isNil(entity) || !_.has(entity, '__contentType')) { return entity; } return sanitizeEntity(entity, { model: strapi.db.getModelByGlobalId(entity.__contentType), ...baseOptions, }); }; } else { sanitizeFn = entity => sanitizeEntity(entity, { model: strapi.getModel(relation, attribute.plugin), ...baseOptions, }); } const nextVal = Array.isArray(value) ? value.map(sanitizeFn) : sanitizeFn(value); return { ...acc, [key]: nextVal }; } const isAllowedField = !includeFields || allowedFieldsHasKey; // Dynamic zones if (attribute && attribute.type === 'dynamiczone' && value !== null && isAllowedField) { const nextVal = value.map(elem => sanitizeEntity(elem, { model: strapi.getModel(elem.__component), withPrivate, isOutput, }) ); return { ...acc, [key]: nextVal }; } // Other fields if (isAllowedField) { return { ...acc, [key]: value }; } return acc; }; return _.reduce(data, reducerFn, {}); }; const parseOriginalData = data => (_.isFunction(data.toJSON) ? data.toJSON() : data); const COMPONENT_FIELDS = ['__component']; const STATIC_FIELDS = [ID_ATTRIBUTE, '__v']; const getAllowedFields = ({ includeFields, model, isOutput }) => { const { options, primaryKey } = model; const timestamps = options.timestamps || []; return _.concat( includeFields || [], ...(isOutput ? [ primaryKey, timestamps, STATIC_FIELDS, COMPONENT_FIELDS, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE, PUBLISHED_AT_ATTRIBUTE, ] : [primaryKey, STATIC_FIELDS, COMPONENT_FIELDS]) ); }; const getNextFields = (fields, key, { allowedFieldsHasKey }) => { const searchStr = `${key}.`; const transformedFields = (fields || []) .filter(field => field.startsWith(searchStr)) .map(field => field.replace(searchStr, '')); const isAllowed = allowedFieldsHasKey || transformedFields.length > 0; const nextFields = allowedFieldsHasKey ? null : transformedFields; return [nextFields, isAllowed]; }; const shouldRemoveAttribute = (model, key, attribute = {}, { withPrivate, isOutput }) => { const isPassword = attribute.type === 'password'; const isPrivate = isPrivateAttribute(model, key); const shouldRemovePassword = isOutput; const shouldRemovePrivate = !withPrivate && isOutput; return !!((isPassword && shouldRemovePassword) || (isPrivate && shouldRemovePrivate)); }; module.exports = sanitizeEntity; string-formatting.js 0000664 00000002045 15112155775 0010574 0 ustar 00 'use strict'; const slugify = require('@sindresorhus/slugify'); const nameToSlug = (name, options = { separator: '-' }) => slugify(name, options); const nameToCollectionName = name => slugify(name, { separator: '_' }); const getCommonBeginning = (str1 = '', str2 = '') => { let common = ''; let index = 0; while (index < str1.length && index < str2.length) { if (str1[index] === str2[index]) { common += str1[index]; index += 1; } else { break; } } return common; }; const escapeQuery = (query, charsToEscape, escapeChar = '\\') => { return query .split('') .reduce( (escapedQuery, char) => charsToEscape.includes(char) ? `${escapedQuery}${escapeChar}${char}` : `${escapedQuery}${char}`, '' ); }; const stringIncludes = (arr, val) => arr.map(String).includes(String(val)); const stringEquals = (a, b) => String(a) === String(b); module.exports = { nameToSlug, nameToCollectionName, getCommonBeginning, escapeQuery, stringIncludes, stringEquals, }; template-configuration.js 0000664 00000001765 15112155775 0011606 0 ustar 00 'use strict'; const { isString, isPlainObject } = require('lodash'); const regex = /\$\{[^()]*\}/g; const excludeConfigPaths = ['info.scripts']; /** * Allow dynamic config values through the native ES6 template string function. */ const templateConfiguration = (obj, configPath = '') => { // Allow values which looks like such as an ES6 literal string without parenthesis inside (aka function call). // Exclude config with conflicting syntax (e.g. npm scripts). return Object.keys(obj).reduce((acc, key) => { if (isPlainObject(obj[key]) && !isString(obj[key])) { acc[key] = templateConfiguration(obj[key], `${configPath}.${key}`); } else if ( isString(obj[key]) && !excludeConfigPaths.includes(configPath.substr(1)) && obj[key].match(regex) !== null ) { // eslint-disable-next-line prefer-template acc[key] = eval('`' + obj[key] + '`'); } else { acc[key] = obj[key]; } return acc; }, {}); }; module.exports = templateConfiguration; validators.js 0000664 00000003056 15112155775 0007271 0 ustar 00 'use strict'; const yup = require('yup'); const _ = require('lodash'); const MixedSchemaType = yup.mixed; const isNotNilTest = value => !_.isNil(value); function isNotNill(msg = '${path} must be defined.') { return this.test('defined', msg, isNotNilTest); } const isNotNullTest = value => !_.isNull(value); function isNotNull(msg = '${path} cannot be null.') { return this.test('defined', msg, isNotNullTest); } function arrayRequiredAllowEmpty(message = '${path} is required') { return this.test('field is required', message, value => _.isArray(value)); } yup.addMethod(yup.mixed, 'notNil', isNotNill); yup.addMethod(yup.mixed, 'notNull', isNotNull); yup.addMethod(yup.array, 'requiredAllowEmpty', arrayRequiredAllowEmpty); class StrapiIDSchema extends MixedSchemaType { constructor() { super({ type: 'strapiID' }); } _typeCheck(value) { return typeof value === 'string' || (Number.isInteger(value) && value >= 0); } } yup.strapiID = () => new StrapiIDSchema(); /** * Returns a formatted error for http responses * @param {Object} validationError - a Yup ValidationError */ const formatYupErrors = validationError => { if (!validationError.inner) { throw new Error('invalid.input'); } if (validationError.inner.length === 0) { if (validationError.path === undefined) return validationError.errors; return { [validationError.path]: validationError.errors }; } return validationError.inner.reduce((acc, err) => { acc[err.path] = err.errors; return acc; }, {}); }; module.exports = { yup, formatYupErrors, }; webhook.js 0000664 00000000532 15112155775 0006553 0 ustar 00 'use strict'; const webhookEvents = { ENTRY_CREATE: 'entry.create', ENTRY_UPDATE: 'entry.update', ENTRY_DELETE: 'entry.delete', ENTRY_PUBLISH: 'entry.publish', ENTRY_UNPUBLISH: 'entry.unpublish', MEDIA_CREATE: 'media.create', MEDIA_UPDATE: 'media.update', MEDIA_DELETE: 'media.delete', }; module.exports = { webhookEvents, }; util/assertString.js 0000664 00000002122 15112354325 0010547 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = assertString; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function assertString(input) { var isString = typeof input === 'string' || input instanceof String; if (!isString) { var invalidType; if (input === null) { invalidType = 'null'; } else { invalidType = _typeof(input); if (invalidType === 'object' && input.constructor && input.constructor.hasOwnProperty('name')) { invalidType = input.constructor.name; } else { invalidType = "a ".concat(invalidType); } } throw new TypeError("Expected string but received ".concat(invalidType, ".")); } } module.exports = exports.default; module.exports.default = exports.default; util/includes.js 0000664 00000000543 15112354325 0007672 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var includes = function includes(arr, val) { return arr.some(function (arrVal) { return val === arrVal; }); }; var _default = includes; exports.default = _default; module.exports = exports.default; module.exports.default = exports.default; util/merge.js 0000664 00000000744 15112354325 0007166 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = merge; function merge() { var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var defaults = arguments.length > 1 ? arguments[1] : undefined; for (var key in defaults) { if (typeof obj[key] === 'undefined') { obj[key] = defaults[key]; } } return obj; } module.exports = exports.default; module.exports.default = exports.default; util/toString.js 0000664 00000001577 15112354325 0007705 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toString; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function toString(input) { if (_typeof(input) === 'object' && input !== null) { if (typeof input.toString === 'function') { input = input.toString(); } else { input = '[object Object]'; } } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) { input = ''; } return String(input); } module.exports = exports.default; module.exports.default = exports.default; alpha.js 0000664 00000010250 15112354325 0006170 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.commaDecimal = exports.dotDecimal = exports.arabicLocales = exports.englishLocales = exports.decimal = exports.alphanumeric = exports.alpha = void 0; var alpha = { 'en-US': /^[A-Z]+$/i, 'bg-BG': /^[А-Я]+$/i, 'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i, 'da-DK': /^[A-ZÆØÅ]+$/i, 'de-DE': /^[A-ZÄÖÜß]+$/i, 'el-GR': /^[Α-ω]+$/i, 'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i, 'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i, 'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i, 'nb-NO': /^[A-ZÆØÅ]+$/i, 'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i, 'nn-NO': /^[A-ZÆØÅ]+$/i, 'hu-HU': /^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i, 'pl-PL': /^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i, 'pt-PT': /^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i, 'ru-RU': /^[А-ЯЁ]+$/i, 'sl-SI': /^[A-ZČĆĐŠŽ]+$/i, 'sk-SK': /^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i, 'sr-RS@latin': /^[A-ZČĆŽŠĐ]+$/i, 'sr-RS': /^[А-ЯЂЈЉЊЋЏ]+$/i, 'sv-SE': /^[A-ZÅÄÖ]+$/i, 'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i, 'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i, 'ku-IQ': /^[ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ }; exports.alpha = alpha; var alphanumeric = { 'en-US': /^[0-9A-Z]+$/i, 'bg-BG': /^[0-9А-Я]+$/i, 'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i, 'da-DK': /^[0-9A-ZÆØÅ]+$/i, 'de-DE': /^[0-9A-ZÄÖÜß]+$/i, 'el-GR': /^[0-9Α-ω]+$/i, 'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i, 'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i, 'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i, 'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i, 'nb-NO': /^[0-9A-ZÆØÅ]+$/i, 'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i, 'nn-NO': /^[0-9A-ZÆØÅ]+$/i, 'pl-PL': /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i, 'pt-PT': /^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i, 'ru-RU': /^[0-9А-ЯЁ]+$/i, 'sl-SI': /^[0-9A-ZČĆĐŠŽ]+$/i, 'sk-SK': /^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i, 'sr-RS@latin': /^[0-9A-ZČĆŽŠĐ]+$/i, 'sr-RS': /^[0-9А-ЯЂЈЉЊЋЏ]+$/i, 'sv-SE': /^[0-9A-ZÅÄÖ]+$/i, 'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i, 'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i, 'ku-IQ': /^[٠١٢٣٤٥٦٧٨٩0-9ئابپتجچحخدرڕزژسشعغفڤقکگلڵمنوۆھەیێيطؤثآإأكضصةظذ]+$/i, ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/ }; exports.alphanumeric = alphanumeric; var decimal = { 'en-US': '.', ar: '٫' }; exports.decimal = decimal; var englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM']; exports.englishLocales = englishLocales; for (var locale, i = 0; i < englishLocales.length; i++) { locale = "en-".concat(englishLocales[i]); alpha[locale] = alpha['en-US']; alphanumeric[locale] = alphanumeric['en-US']; decimal[locale] = decimal['en-US']; } // Source: http://www.localeplanet.com/java/ var arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE']; exports.arabicLocales = arabicLocales; for (var _locale, _i = 0; _i < arabicLocales.length; _i++) { _locale = "ar-".concat(arabicLocales[_i]); alpha[_locale] = alpha.ar; alphanumeric[_locale] = alphanumeric.ar; decimal[_locale] = decimal.ar; } // Source: https://en.wikipedia.org/wiki/Decimal_mark var dotDecimal = []; exports.dotDecimal = dotDecimal; var commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'fr-FR', 'it-IT', 'ku-IQ', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-PL', 'pt-PT', 'ru-RU', 'sl-SI', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA']; exports.commaDecimal = commaDecimal; for (var _i2 = 0; _i2 < dotDecimal.length; _i2++) { decimal[dotDecimal[_i2]] = decimal['en-US']; } for (var _i3 = 0; _i3 < commaDecimal.length; _i3++) { decimal[commaDecimal[_i3]] = ','; } alpha['pt-BR'] = alpha['pt-PT']; alphanumeric['pt-BR'] = alphanumeric['pt-PT']; decimal['pt-BR'] = decimal['pt-PT']; // see #862 alpha['pl-Pl'] = alpha['pl-PL']; alphanumeric['pl-Pl'] = alphanumeric['pl-PL']; decimal['pl-Pl'] = decimal['pl-PL']; blacklist.js 0000664 00000000762 15112354325 0007062 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = blacklist; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function blacklist(str, chars) { (0, _assertString.default)(str); return str.replace(new RegExp("[".concat(chars, "]+"), 'g'), ''); } module.exports = exports.default; module.exports.default = exports.default; contains.js 0000664 00000001051 15112354325 0006720 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = contains; var _assertString = _interopRequireDefault(require("./util/assertString")); var _toString = _interopRequireDefault(require("./util/toString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function contains(str, elem) { (0, _assertString.default)(str); return str.indexOf((0, _toString.default)(elem)) >= 0; } module.exports = exports.default; module.exports.default = exports.default; equals.js 0000664 00000000712 15112354325 0006377 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = equals; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function equals(str, comparison) { (0, _assertString.default)(str); return str === comparison; } module.exports = exports.default; module.exports.default = exports.default; escape.js 0000664 00000001153 15112354325 0006345 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = escape; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function escape(str) { (0, _assertString.default)(str); return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>').replace(/\//g, '/').replace(/\\/g, '\').replace(/`/g, '`'); } module.exports = exports.default; module.exports.default = exports.default; isAfter.js 0000664 00000001335 15112354325 0006504 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isAfter; var _assertString = _interopRequireDefault(require("./util/assertString")); var _toDate = _interopRequireDefault(require("./toDate")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isAfter(str) { var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); (0, _assertString.default)(str); var comparison = (0, _toDate.default)(date); var original = (0, _toDate.default)(str); return !!(original && comparison && original > comparison); } module.exports = exports.default; module.exports.default = exports.default; isAlpha.js 0000664 00000001277 15112354325 0006475 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isAlpha; exports.locales = void 0; var _assertString = _interopRequireDefault(require("./util/assertString")); var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isAlpha(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; (0, _assertString.default)(str); if (locale in _alpha.alpha) { return _alpha.alpha[locale].test(str); } throw new Error("Invalid locale '".concat(locale, "'")); } var locales = Object.keys(_alpha.alpha); exports.locales = locales; isUUID.js 0000664 00000001603 15112354325 0006207 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isUUID; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var uuid = { 3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i, 4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, 5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i }; function isUUID(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all'; (0, _assertString.default)(str); var pattern = uuid[version]; return pattern && pattern.test(str); } module.exports = exports.default; module.exports.default = exports.default; isAlphanumeric.js 0000664 00000001342 15112354325 0010051 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isAlphanumeric; exports.locales = void 0; var _assertString = _interopRequireDefault(require("./util/assertString")); var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isAlphanumeric(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US'; (0, _assertString.default)(str); if (locale in _alpha.alphanumeric) { return _alpha.alphanumeric[locale].test(str); } throw new Error("Invalid locale '".concat(locale, "'")); } var locales = Object.keys(_alpha.alphanumeric); exports.locales = locales; isAscii.js 0000664 00000001047 15112354325 0006473 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isAscii; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable no-control-regex */ var ascii = /^[\x00-\x7F]+$/; /* eslint-enable no-control-regex */ function isAscii(str) { (0, _assertString.default)(str); return ascii.test(str); } module.exports = exports.default; module.exports.default = exports.default; isBase64.js 0000664 00000001323 15112354325 0006464 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isBase64; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var notBase64 = /[^A-Z0-9+\/=]/i; function isBase64(str) { (0, _assertString.default)(str); var len = str.length; if (!len || len % 4 !== 0 || notBase64.test(str)) { return false; } var firstPaddingChar = str.indexOf('='); return firstPaddingChar === -1 || firstPaddingChar === len - 1 || firstPaddingChar === len - 2 && str[len - 1] === '='; } module.exports = exports.default; module.exports.default = exports.default; isBefore.js 0000664 00000001337 15112354325 0006647 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isBefore; var _assertString = _interopRequireDefault(require("./util/assertString")); var _toDate = _interopRequireDefault(require("./toDate")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isBefore(str) { var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date()); (0, _assertString.default)(str); var comparison = (0, _toDate.default)(date); var original = (0, _toDate.default)(str); return !!(original && comparison && original < comparison); } module.exports = exports.default; module.exports.default = exports.default; isBoolean.js 0000664 00000000737 15112354325 0007027 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isBoolean; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isBoolean(str) { (0, _assertString.default)(str); return ['true', 'false', '1', '0'].indexOf(str) >= 0; } module.exports = exports.default; module.exports.default = exports.default; isURL.js 0000664 00000006431 15112354325 0006107 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isURL; var _assertString = _interopRequireDefault(require("./util/assertString")); var _isFQDN = _interopRequireDefault(require("./isFQDN")); var _isIP = _interopRequireDefault(require("./isIP")); var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var default_url_options = { protocols: ['http', 'https', 'ftp'], require_tld: true, require_protocol: false, require_host: true, require_valid_protocol: true, allow_underscores: false, allow_trailing_dot: false, allow_protocol_relative_urls: false }; var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/; function isRegExp(obj) { return Object.prototype.toString.call(obj) === '[object RegExp]'; } function checkHost(host, matches) { for (var i = 0; i < matches.length; i++) { var match = matches[i]; if (host === match || isRegExp(match) && match.test(host)) { return true; } } return false; } function isURL(url, options) { (0, _assertString.default)(url); if (!url || url.length >= 2083 || /[\s<>]/.test(url)) { return false; } if (url.indexOf('mailto:') === 0) { return false; } options = (0, _merge.default)(options, default_url_options); var protocol, auth, host, hostname, port, port_str, split, ipv6; split = url.split('#'); url = split.shift(); split = url.split('?'); url = split.shift(); split = url.split('://'); if (split.length > 1) { protocol = split.shift().toLowerCase(); if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) { return false; } } else if (options.require_protocol) { return false; } else if (url.substr(0, 2) === '//') { if (!options.allow_protocol_relative_urls) { return false; } split[0] = url.substr(2); } url = split.join('://'); if (url === '') { return false; } split = url.split('/'); url = split.shift(); if (url === '' && !options.require_host) { return true; } split = url.split('@'); if (split.length > 1) { if (options.disallow_auth) { return false; } auth = split.shift(); if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) { return false; } } hostname = split.join('@'); port_str = null; ipv6 = null; var ipv6_match = hostname.match(wrapped_ipv6); if (ipv6_match) { host = ''; ipv6 = ipv6_match[1]; port_str = ipv6_match[2] || null; } else { split = hostname.split(':'); host = split.shift(); if (split.length) { port_str = split.join(':'); } } if (port_str !== null) { port = parseInt(port_str, 10); if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) { return false; } } if (!(0, _isIP.default)(host) && !(0, _isFQDN.default)(host, options) && (!ipv6 || !(0, _isIP.default)(ipv6, 6))) { return false; } host = host || ipv6; if (options.host_whitelist && !checkHost(host, options.host_whitelist)) { return false; } if (options.host_blacklist && checkHost(host, options.host_blacklist)) { return false; } return true; } module.exports = exports.default; module.exports.default = exports.default; isByteLength.js 0000664 00000002250 15112354325 0007505 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isByteLength; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /* eslint-disable prefer-rest-params */ function isByteLength(str, options) { (0, _assertString.default)(str); var min; var max; if (_typeof(options) === 'object') { min = options.min || 0; max = options.max; } else { // backwards compatibility: isByteLength(str, min [, max]) min = arguments[1]; max = arguments[2]; } var len = encodeURI(str).split(/%..|./).length - 1; return len >= min && (typeof max === 'undefined' || len <= max); } module.exports = exports.default; module.exports.default = exports.default; isUppercase.js 0000664 00000000717 15112354325 0007375 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isUppercase; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isUppercase(str) { (0, _assertString.default)(str); return str === str.toUpperCase(); } module.exports = exports.default; module.exports.default = exports.default; isCreditCard.js 0000664 00000002441 15112354325 0007446 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isCreditCard; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable max-len */ var creditCard = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|6[27][0-9]{14})$/; /* eslint-enable max-len */ function isCreditCard(str) { (0, _assertString.default)(str); var sanitized = str.replace(/[- ]+/g, ''); if (!creditCard.test(sanitized)) { return false; } var sum = 0; var digit; var tmpNum; var shouldDouble; for (var i = sanitized.length - 1; i >= 0; i--) { digit = sanitized.substring(i, i + 1); tmpNum = parseInt(digit, 10); if (shouldDouble) { tmpNum *= 2; if (tmpNum >= 10) { sum += tmpNum % 10 + 1; } else { sum += tmpNum; } } else { sum += tmpNum; } shouldDouble = !shouldDouble; } return !!(sum % 10 === 0 ? sanitized : false); } module.exports = exports.default; module.exports.default = exports.default; isVariableWidth.js 0000664 00000001136 15112354325 0010167 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isVariableWidth; var _assertString = _interopRequireDefault(require("./util/assertString")); var _isFullWidth = require("./isFullWidth"); var _isHalfWidth = require("./isHalfWidth"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isVariableWidth(str) { (0, _assertString.default)(str); return _isFullWidth.fullWidth.test(str) && _isHalfWidth.halfWidth.test(str); } module.exports = exports.default; module.exports.default = exports.default; isCurrency.js 0000664 00000006443 15112354325 0007242 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isCurrency; var _merge = _interopRequireDefault(require("./util/merge")); var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function currencyRegex(options) { var decimal_digits = "\\d{".concat(options.digits_after_decimal[0], "}"); options.digits_after_decimal.forEach(function (digit, index) { if (index !== 0) decimal_digits = "".concat(decimal_digits, "|\\d{").concat(digit, "}"); }); var symbol = "(\\".concat(options.symbol.replace(/\./g, '\\.'), ")").concat(options.require_symbol ? '' : '?'), negative = '-?', whole_dollar_amount_without_sep = '[1-9]\\d*', whole_dollar_amount_with_sep = "[1-9]\\d{0,2}(\\".concat(options.thousands_separator, "\\d{3})*"), valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep], whole_dollar_amount = "(".concat(valid_whole_dollar_amounts.join('|'), ")?"), decimal_amount = "(\\".concat(options.decimal_separator, "(").concat(decimal_digits, "))").concat(options.require_decimal ? '' : '?'); var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : ''); // default is negative sign before symbol, but there are two other options (besides parens) if (options.allow_negatives && !options.parens_for_negatives) { if (options.negative_sign_after_digits) { pattern += negative; } else if (options.negative_sign_before_digits) { pattern = negative + pattern; } } // South African Rand, for example, uses R 123 (space) and R-123 (no space) if (options.allow_negative_sign_placeholder) { pattern = "( (?!\\-))?".concat(pattern); } else if (options.allow_space_after_symbol) { pattern = " ?".concat(pattern); } else if (options.allow_space_after_digits) { pattern += '( (?!$))?'; } if (options.symbol_after_digits) { pattern += symbol; } else { pattern = symbol + pattern; } if (options.allow_negatives) { if (options.parens_for_negatives) { pattern = "(\\(".concat(pattern, "\\)|").concat(pattern, ")"); } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) { pattern = negative + pattern; } } // ensure there's a dollar and/or decimal amount, and that // it doesn't start with a space or a negative sign followed by a space return new RegExp("^(?!-? )(?=.*\\d)".concat(pattern, "$")); } var default_currency_options = { symbol: '$', require_symbol: false, allow_space_after_symbol: false, symbol_after_digits: false, allow_negatives: true, parens_for_negatives: false, negative_sign_before_digits: false, negative_sign_after_digits: false, allow_negative_sign_placeholder: false, thousands_separator: ',', decimal_separator: '.', allow_decimal: true, require_decimal: false, digits_after_decimal: [2], allow_space_after_digits: false }; function isCurrency(str, options) { (0, _assertString.default)(str); options = (0, _merge.default)(options, default_currency_options); return currencyRegex(options).test(str); } module.exports = exports.default; module.exports.default = exports.default; isDataURI.js 0000664 00000002447 15112354325 0006701 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isDataURI; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i; var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i; var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i; function isDataURI(str) { (0, _assertString.default)(str); var data = str.split(','); if (data.length < 2) { return false; } var attributes = data.shift().trim().split(';'); var schemeAndMediaType = attributes.shift(); if (schemeAndMediaType.substr(0, 5) !== 'data:') { return false; } var mediaType = schemeAndMediaType.substr(5); if (mediaType !== '' && !validMediaType.test(mediaType)) { return false; } for (var i = 0; i < attributes.length; i++) { if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') {// ok } else if (!validAttribute.test(attributes[i])) { return false; } } for (var _i = 0; _i < data.length; _i++) { if (!validData.test(data[_i])) { return false; } } return true; } module.exports = exports.default; module.exports.default = exports.default; isDecimal.js 0000664 00000002347 15112354325 0007005 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isDecimal; var _merge = _interopRequireDefault(require("./util/merge")); var _assertString = _interopRequireDefault(require("./util/assertString")); var _includes = _interopRequireDefault(require("./util/includes")); var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function decimalRegExp(options) { var regExp = new RegExp("^[-+]?([0-9]+)?(\\".concat(_alpha.decimal[options.locale], "[0-9]{").concat(options.decimal_digits, "})").concat(options.force_decimal ? '' : '?', "$")); return regExp; } var default_decimal_options = { force_decimal: false, decimal_digits: '1,', locale: 'en-US' }; var blacklist = ['', '-', '+']; function isDecimal(str, options) { (0, _assertString.default)(str); options = (0, _merge.default)(options, default_decimal_options); if (options.locale in _alpha.decimal) { return !(0, _includes.default)(blacklist, str.replace(/ /g, '')) && decimalRegExp(options).test(str); } throw new Error("Invalid locale '".concat(options.locale, "'")); } module.exports = exports.default; module.exports.default = exports.default; isWhitelisted.js 0000664 00000001073 15112354325 0007727 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isWhitelisted; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isWhitelisted(str, chars) { (0, _assertString.default)(str); for (var i = str.length - 1; i >= 0; i--) { if (chars.indexOf(str[i]) === -1) { return false; } } return true; } module.exports = exports.default; module.exports.default = exports.default; isDivisibleBy.js 0000664 00000001061 15112354325 0007644 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isDivisibleBy; var _assertString = _interopRequireDefault(require("./util/assertString")); var _toFloat = _interopRequireDefault(require("./toFloat")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isDivisibleBy(str, num) { (0, _assertString.default)(str); return (0, _toFloat.default)(str) % parseInt(num, 10) === 0; } module.exports = exports.default; module.exports.default = exports.default; isEmail.js 0000664 00000010004 15112354325 0006463 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isEmail; var _assertString = _interopRequireDefault(require("./util/assertString")); var _merge = _interopRequireDefault(require("./util/merge")); var _isByteLength = _interopRequireDefault(require("./isByteLength")); var _isFQDN = _interopRequireDefault(require("./isFQDN")); var _isIP = _interopRequireDefault(require("./isIP")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var default_email_options = { allow_display_name: false, require_display_name: false, allow_utf8_local_part: true, require_tld: true }; /* eslint-disable max-len */ /* eslint-disable no-control-regex */ var displayName = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\,\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i; var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i; var gmailUserPart = /^[a-z\d]+$/; var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i; var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i; var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i; /* eslint-enable max-len */ /* eslint-enable no-control-regex */ function isEmail(str, options) { (0, _assertString.default)(str); options = (0, _merge.default)(options, default_email_options); if (options.require_display_name || options.allow_display_name) { var display_email = str.match(displayName); if (display_email) { str = display_email[1]; } else if (options.require_display_name) { return false; } } var parts = str.split('@'); var domain = parts.pop(); var user = parts.join('@'); var lower_domain = domain.toLowerCase(); if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) { /* Previously we removed dots for gmail addresses before validating. This was removed because it allows `multiple..dots@gmail.com` to be reported as valid, but it is not. Gmail only normalizes single dots, removing them from here is pointless, should be done in normalizeEmail */ user = user.toLowerCase(); // Removing sub-address from username before gmail validation var username = user.split('+')[0]; // Dots are not included in gmail length restriction if (!(0, _isByteLength.default)(username.replace('.', ''), { min: 6, max: 30 })) { return false; } var _user_parts = username.split('.'); for (var i = 0; i < _user_parts.length; i++) { if (!gmailUserPart.test(_user_parts[i])) { return false; } } } if (!(0, _isByteLength.default)(user, { max: 64 }) || !(0, _isByteLength.default)(domain, { max: 254 })) { return false; } if (!(0, _isFQDN.default)(domain, { require_tld: options.require_tld })) { if (!options.allow_ip_domain) { return false; } if (!(0, _isIP.default)(domain)) { if (!domain.startsWith('[') || !domain.endsWith(']')) { return false; } var noBracketdomain = domain.substr(1, domain.length - 2); if (noBracketdomain.length === 0 || !(0, _isIP.default)(noBracketdomain)) { return false; } } } if (user[0] === '"') { user = user.slice(1, user.length - 1); return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user); } var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart; var user_parts = user.split('.'); for (var _i = 0; _i < user_parts.length; _i++) { if (!pattern.test(user_parts[_i])) { return false; } } return true; } module.exports = exports.default; module.exports.default = exports.default; isEmpty.js 0000664 00000001274 15112354325 0006543 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isEmpty; var _assertString = _interopRequireDefault(require("./util/assertString")); var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var default_is_empty_options = { ignore_whitespace: false }; function isEmpty(str, options) { (0, _assertString.default)(str); options = (0, _merge.default)(options, default_is_empty_options); return (options.ignore_whitespace ? str.trim().length : str.length) === 0; } module.exports = exports.default; module.exports.default = exports.default; isFQDN.js 0000664 00000003266 15112354325 0006200 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isFQDN; var _assertString = _interopRequireDefault(require("./util/assertString")); var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var default_fqdn_options = { require_tld: true, allow_underscores: false, allow_trailing_dot: false }; function isFQDN(str, options) { (0, _assertString.default)(str); options = (0, _merge.default)(options, default_fqdn_options); /* Remove the optional trailing dot before checking validity */ if (options.allow_trailing_dot && str[str.length - 1] === '.') { str = str.substring(0, str.length - 1); } var parts = str.split('.'); for (var i = 0; i < parts.length; i++) { if (parts[i].length > 63) { return false; } } if (options.require_tld) { var tld = parts.pop(); if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) { return false; } // disallow spaces if (/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(tld)) { return false; } } for (var part, _i = 0; _i < parts.length; _i++) { part = parts[_i]; if (options.allow_underscores) { part = part.replace(/_/g, ''); } if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) { return false; } // disallow full-width chars if (/[\uff01-\uff5e]/.test(part)) { return false; } if (part[0] === '-' || part[part.length - 1] === '-') { return false; } } return true; } module.exports = exports.default; module.exports.default = exports.default; isFloat.js 0000664 00000002052 15112354325 0006505 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isFloat; exports.locales = void 0; var _assertString = _interopRequireDefault(require("./util/assertString")); var _alpha = require("./alpha"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isFloat(str, options) { (0, _assertString.default)(str); options = options || {}; var float = new RegExp("^(?:[-+])?(?:[0-9]+)?(?:\\".concat(options.locale ? _alpha.decimal[options.locale] : '.', "[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$")); if (str === '' || str === '.' || str === '-' || str === '+') { return false; } var value = parseFloat(str.replace(',', '.')); return float.test(str) && (!options.hasOwnProperty('min') || value >= options.min) && (!options.hasOwnProperty('max') || value <= options.max) && (!options.hasOwnProperty('lt') || value < options.lt) && (!options.hasOwnProperty('gt') || value > options.gt); } var locales = Object.keys(_alpha.decimal); exports.locales = locales; unescape.js 0000664 00000001156 15112354325 0006713 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = unescape; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function unescape(str) { (0, _assertString.default)(str); return str.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>').replace(///g, '/').replace(/\/g, '\\').replace(/`/g, '`'); } module.exports = exports.default; module.exports.default = exports.default; isFullWidth.js 0000664 00000001014 15112354325 0007337 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isFullWidth; exports.fullWidth = void 0; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; exports.fullWidth = fullWidth; function isFullWidth(str) { (0, _assertString.default)(str); return fullWidth.test(str); } trim.js 0000664 00000000756 15112354325 0006070 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = trim; var _rtrim = _interopRequireDefault(require("./rtrim")); var _ltrim = _interopRequireDefault(require("./ltrim")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function trim(str, chars) { return (0, _rtrim.default)((0, _ltrim.default)(str, chars), chars); } module.exports = exports.default; module.exports.default = exports.default; isHalfWidth.js 0000664 00000001013 15112354325 0007306 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isHalfWidth; exports.halfWidth = void 0; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/; exports.halfWidth = halfWidth; function isHalfWidth(str) { (0, _assertString.default)(str); return halfWidth.test(str); } isHash.js 0000664 00000001330 15112354325 0006321 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isHash; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var lengths = { md5: 32, md4: 32, sha1: 40, sha256: 64, sha384: 96, sha512: 128, ripemd128: 32, ripemd160: 40, tiger128: 32, tiger160: 40, tiger192: 48, crc32: 8, crc32b: 8 }; function isHash(str, algorithm) { (0, _assertString.default)(str); var hash = new RegExp("^[a-f0-9]{".concat(lengths[algorithm], "}$")); return hash.test(str); } module.exports = exports.default; module.exports.default = exports.default; whitelist.js 0000664 00000000763 15112354325 0007127 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = whitelist; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function whitelist(str, chars) { (0, _assertString.default)(str); return str.replace(new RegExp("[^".concat(chars, "]+"), 'g'), ''); } module.exports = exports.default; module.exports.default = exports.default; isHexColor.js 0000664 00000000770 15112354325 0007170 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isHexColor; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i; function isHexColor(str) { (0, _assertString.default)(str); return hexcolor.test(str); } module.exports = exports.default; module.exports.default = exports.default; isHexadecimal.js 0000664 00000000762 15112354325 0007652 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isHexadecimal; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var hexadecimal = /^[0-9A-F]+$/i; function isHexadecimal(str) { (0, _assertString.default)(str); return hexadecimal.test(str); } module.exports = exports.default; module.exports.default = exports.default; isIP.js 0000664 00000004771 15112354325 0005762 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIP; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ipv4Maybe = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; var ipv6Block = /^[0-9A-F]{1,4}$/i; function isIP(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; (0, _assertString.default)(str); version = String(version); if (!version) { return isIP(str, 4) || isIP(str, 6); } else if (version === '4') { if (!ipv4Maybe.test(str)) { return false; } var parts = str.split('.').sort(function (a, b) { return a - b; }); return parts[3] <= 255; } else if (version === '6') { var blocks = str.split(':'); var foundOmissionBlock = false; // marker to indicate :: // At least some OS accept the last 32 bits of an IPv6 address // (i.e. 2 of the blocks) in IPv4 notation, and RFC 3493 says // that '::ffff:a.b.c.d' is valid for IPv4-mapped IPv6 addresses, // and '::a.b.c.d' is deprecated, but also valid. var foundIPv4TransitionBlock = isIP(blocks[blocks.length - 1], 4); var expectedNumberOfBlocks = foundIPv4TransitionBlock ? 7 : 8; if (blocks.length > expectedNumberOfBlocks) { return false; } // initial or final :: if (str === '::') { return true; } else if (str.substr(0, 2) === '::') { blocks.shift(); blocks.shift(); foundOmissionBlock = true; } else if (str.substr(str.length - 2) === '::') { blocks.pop(); blocks.pop(); foundOmissionBlock = true; } for (var i = 0; i < blocks.length; ++i) { // test for a :: which can not be at the string start/end // since those cases have been handled above if (blocks[i] === '' && i > 0 && i < blocks.length - 1) { if (foundOmissionBlock) { return false; // multiple :: in address } foundOmissionBlock = true; } else if (foundIPv4TransitionBlock && i === blocks.length - 1) {// it has been checked before that the last // block is a valid IPv4 address } else if (!ipv6Block.test(blocks[i])) { return false; } } if (foundOmissionBlock) { return blocks.length >= 1; } return blocks.length === expectedNumberOfBlocks; } return false; } module.exports = exports.default; module.exports.default = exports.default; isIPRange.js 0000664 00000001572 15112354325 0006733 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIPRange; var _assertString = _interopRequireDefault(require("./util/assertString")); var _isIP = _interopRequireDefault(require("./isIP")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var subnetMaybe = /^\d{1,2}$/; function isIPRange(str) { (0, _assertString.default)(str); var parts = str.split('/'); // parts[0] -> ip, parts[1] -> subnet if (parts.length !== 2) { return false; } if (!subnetMaybe.test(parts[1])) { return false; } // Disallow preceding 0 i.e. 01, 02, ... if (parts[1].length > 1 && parts[1].startsWith('0')) { return false; } return (0, _isIP.default)(parts[0], 4) && parts[1] <= 32 && parts[1] >= 0; } module.exports = exports.default; module.exports.default = exports.default; isISBN.js 0000664 00000002677 15112354325 0006210 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISBN; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/; var isbn13Maybe = /^(?:[0-9]{13})$/; var factor = [1, 3]; function isISBN(str) { var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; (0, _assertString.default)(str); version = String(version); if (!version) { return isISBN(str, 10) || isISBN(str, 13); } var sanitized = str.replace(/[\s-]+/g, ''); var checksum = 0; var i; if (version === '10') { if (!isbn10Maybe.test(sanitized)) { return false; } for (i = 0; i < 9; i++) { checksum += (i + 1) * sanitized.charAt(i); } if (sanitized.charAt(9) === 'X') { checksum += 10 * 10; } else { checksum += 10 * sanitized.charAt(9); } if (checksum % 11 === 0) { return !!sanitized; } } else if (version === '13') { if (!isbn13Maybe.test(sanitized)) { return false; } for (i = 0; i < 12; i++) { checksum += factor[i % 2] * sanitized.charAt(i); } if (sanitized.charAt(12) - (10 - checksum % 10) % 10 === 0) { return !!sanitized; } } return false; } module.exports = exports.default; module.exports.default = exports.default; isISIN.js 0000664 00000002134 15112354325 0006203 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISIN; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/; function isISIN(str) { (0, _assertString.default)(str); if (!isin.test(str)) { return false; } var checksumStr = str.replace(/[A-Z]/g, function (character) { return parseInt(character, 36); }); var sum = 0; var digit; var tmpNum; var shouldDouble = true; for (var i = checksumStr.length - 2; i >= 0; i--) { digit = checksumStr.substring(i, i + 1); tmpNum = parseInt(digit, 10); if (shouldDouble) { tmpNum *= 2; if (tmpNum >= 10) { sum += tmpNum + 1; } else { sum += tmpNum; } } else { sum += tmpNum; } shouldDouble = !shouldDouble; } return parseInt(str.substr(str.length - 1), 10) === (10000 - sum) % 10; } module.exports = exports.default; module.exports.default = exports.default; isISO31661Alpha2.js 0000664 00000004213 15112354325 0007524 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISO31661Alpha2; var _assertString = _interopRequireDefault(require("./util/assertString")); var _includes = _interopRequireDefault(require("./util/includes")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 var validISO31661Alpha2CountriesCodes = ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW']; function isISO31661Alpha2(str) { (0, _assertString.default)(str); return (0, _includes.default)(validISO31661Alpha2CountriesCodes, str.toUpperCase()); } module.exports = exports.default; module.exports.default = exports.default; isISO31661Alpha3.js 0000664 00000004604 15112354325 0007531 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISO31661Alpha3; var _assertString = _interopRequireDefault(require("./util/assertString")); var _includes = _interopRequireDefault(require("./util/includes")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3 var validISO31661Alpha3CountriesCodes = ['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']; function isISO31661Alpha3(str) { (0, _assertString.default)(str); return (0, _includes.default)(validISO31661Alpha3CountriesCodes, str.toUpperCase()); } module.exports = exports.default; module.exports.default = exports.default; isISO8601.js 0000664 00000003746 15112354325 0006424 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISO8601; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable max-len */ // from http://goo.gl/0ejHHW var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/; /* eslint-enable max-len */ var isValidDate = function isValidDate(str) { // str must have passed the ISO8601 check // this check is meant to catch invalid dates // like 2009-02-31 // first check for ordinal dates var ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/); if (ordinalMatch) { var oYear = Number(ordinalMatch[1]); var oDay = Number(ordinalMatch[2]); // if is leap year if (oYear % 4 === 0 && oYear % 100 !== 0) return oDay <= 366; return oDay <= 365; } var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number); var year = match[1]; var month = match[2]; var day = match[3]; var monthString = month ? "0".concat(month).slice(-2) : month; var dayString = day ? "0".concat(day).slice(-2) : day; // create a date object and compare var d = new Date("".concat(year, "-").concat(monthString || '01', "-").concat(dayString || '01')); if (isNaN(d.getUTCFullYear())) return false; if (month && day) { return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day; } return true; }; function isISO8601(str, options) { (0, _assertString.default)(str); var check = iso8601.test(str); if (!options) return check; if (check && options.strict) return isValidDate(str); return check; } module.exports = exports.default; module.exports.default = exports.default; isISRC.js 0000664 00000001042 15112354325 0006176 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISRC; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // see http://isrc.ifpi.org/en/isrc-standard/code-syntax var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/; function isISRC(str) { (0, _assertString.default)(str); return isrc.test(str); } module.exports = exports.default; module.exports.default = exports.default; isISSN.js 0000664 00000001772 15112354325 0006224 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isISSN; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var issn = '^\\d{4}-?\\d{3}[\\dX]$'; function isISSN(str) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; (0, _assertString.default)(str); var testIssn = issn; testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn; testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i'); if (!testIssn.test(str)) { return false; } var digits = str.replace('-', '').toUpperCase(); var checksum = 0; for (var i = 0; i < digits.length; i++) { var digit = digits[i]; checksum += (digit === 'X' ? 10 : +digit) * (8 - i); } return checksum % 11 === 0; } module.exports = exports.default; module.exports.default = exports.default; isIdentityCard.js 0000664 00000003133 15112354325 0010024 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIdentityCard; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var validators = { ES: function ES(str) { (0, _assertString.default)(str); var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/; var charsValue = { X: 0, Y: 1, Z: 2 }; var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E']; // sanitize user input var sanitized = str.trim().toUpperCase(); // validate the data structure if (!DNI.test(sanitized)) { return false; } // validate the control digit var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) { return charsValue[char]; }); return sanitized.endsWith(controlDigits[number % 23]); } }; function isIdentityCard(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'any'; (0, _assertString.default)(str); if (locale in validators) { return validators[locale](str); } else if (locale === 'any') { for (var key in validators) { if (validators.hasOwnProperty(key)) { var validator = validators[key]; if (validator(str)) { return true; } } } return false; } throw new Error("Invalid locale '".concat(locale, "'")); } module.exports = exports.default; module.exports.default = exports.default; isIn.js 0000664 00000002466 15112354325 0006017 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIn; var _assertString = _interopRequireDefault(require("./util/assertString")); var _toString = _interopRequireDefault(require("./util/toString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function isIn(str, options) { (0, _assertString.default)(str); var i; if (Object.prototype.toString.call(options) === '[object Array]') { var array = []; for (i in options) { if ({}.hasOwnProperty.call(options, i)) { array[i] = (0, _toString.default)(options[i]); } } return array.indexOf(str) >= 0; } else if (_typeof(options) === 'object') { return options.hasOwnProperty(str); } else if (options && typeof options.indexOf === 'function') { return options.indexOf(str) >= 0; } return false; } module.exports = exports.default; module.exports.default = exports.default; isInt.js 0000664 00000002221 15112354325 0006170 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isInt; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/; var intLeadingZeroes = /^[-+]?[0-9]+$/; function isInt(str, options) { (0, _assertString.default)(str); options = options || {}; // Get the regex to use for testing, based on whether // leading zeroes are allowed or not. var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes; // Check min/max/lt/gt var minCheckPassed = !options.hasOwnProperty('min') || str >= options.min; var maxCheckPassed = !options.hasOwnProperty('max') || str <= options.max; var ltCheckPassed = !options.hasOwnProperty('lt') || str < options.lt; var gtCheckPassed = !options.hasOwnProperty('gt') || str > options.gt; return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed; } module.exports = exports.default; module.exports.default = exports.default; isJSON.js 0000664 00000001617 15112354325 0006217 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isJSON; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function isJSON(str) { (0, _assertString.default)(str); try { var obj = JSON.parse(str); return !!obj && _typeof(obj) === 'object'; } catch (e) { /* ignore */ } return false; } module.exports = exports.default; module.exports.default = exports.default; isJWT.js 0000664 00000001050 15112354325 0006101 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isJWT; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var jwt = /^([A-Za-z0-9\-_~+\/]+[=]{0,2})\.([A-Za-z0-9\-_~+\/]+[=]{0,2})(?:\.([A-Za-z0-9\-_~+\/]+[=]{0,2}))?$/; function isJWT(str) { (0, _assertString.default)(str); return jwt.test(str); } module.exports = exports.default; module.exports.default = exports.default; isLatLong.js 0000664 00000001232 15112354325 0006777 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var lat = /^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/; var long = /^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/; function _default(str) { (0, _assertString.default)(str); if (!str.includes(',')) return false; var pair = str.split(','); return lat.test(pair[0]) && long.test(pair[1]); } module.exports = exports.default; module.exports.default = exports.default; isLength.js 0000664 00000002341 15112354325 0006662 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isLength; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /* eslint-disable prefer-rest-params */ function isLength(str, options) { (0, _assertString.default)(str); var min; var max; if (_typeof(options) === 'object') { min = options.min || 0; max = options.max; } else { // backwards compatibility: isLength(str, min [, max]) min = arguments[1]; max = arguments[2]; } var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || []; var len = str.length - surrogatePairs.length; return len >= min && (typeof max === 'undefined' || len <= max); } module.exports = exports.default; module.exports.default = exports.default; isLowercase.js 0000664 00000000717 15112354325 0007372 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isLowercase; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isLowercase(str) { (0, _assertString.default)(str); return str === str.toLowerCase(); } module.exports = exports.default; module.exports.default = exports.default; isMACAddress.js 0000664 00000001246 15112354325 0007352 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMACAddress; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var macAddress = /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/; var macAddressNoColons = /^([0-9a-fA-F]){12}$/; function isMACAddress(str, options) { (0, _assertString.default)(str); if (options && options.no_colons) { return macAddressNoColons.test(str); } return macAddress.test(str); } module.exports = exports.default; module.exports.default = exports.default; isMD5.js 0000664 00000000724 15112354325 0006031 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMD5; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var md5 = /^[a-f0-9]{32}$/; function isMD5(str) { (0, _assertString.default)(str); return md5.test(str); } module.exports = exports.default; module.exports.default = exports.default; isMagnetURI.js 0000664 00000001035 15112354325 0007233 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMagnetURI; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var magnetURI = /^magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32,40}&dn=.+&tr=.+$/i; function isMagnetURI(url) { (0, _assertString.default)(url); return magnetURI.test(url.trim()); } module.exports = exports.default; module.exports.default = exports.default; isMimeType.js 0000664 00000004300 15112354325 0007167 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMimeType; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* Checks if the provided string matches to a correct Media type format (MIME type) This function only checks is the string format follows the etablished rules by the according RFC specifications. This function supports 'charset' in textual media types (https://tools.ietf.org/html/rfc6657). This function does not check against all the media types listed by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml) because of lightness purposes : it would require to include all these MIME types in this librairy, which would weigh it significantly. This kind of effort maybe is not worth for the use that this function has in this entire librairy. More informations in the RFC specifications : - https://tools.ietf.org/html/rfc2045 - https://tools.ietf.org/html/rfc2046 - https://tools.ietf.org/html/rfc7231#section-3.1.1.1 - https://tools.ietf.org/html/rfc7231#section-3.1.1.5 */ // Match simple MIME types // NB : // Subtype length must not exceed 100 characters. // This rule does not comply to the RFC specs (what is the max length ?). var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i; // eslint-disable-line max-len // Handle "charset" in "text/*" var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len // Handle "boundary" in "multipart/*" var mimeTypeMultipart = /^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i; // eslint-disable-line max-len function isMimeType(str) { (0, _assertString.default)(str); return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str); } module.exports = exports.default; module.exports.default = exports.default; isMobilePhone.js 0000664 00000011431 15112354325 0007642 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMobilePhone; exports.locales = void 0; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable max-len */ var phones = { 'ar-AE': /^((\+?971)|0)?5[024568]\d{7}$/, 'ar-DZ': /^(\+?213|0)(5|6|7)\d{8}$/, 'ar-EG': /^((\+?20)|0)?1[012]\d{8}$/, 'ar-IQ': /^(\+?964|0)?7[0-9]\d{8}$/, 'ar-JO': /^(\+?962|0)?7[789]\d{7}$/, 'ar-KW': /^(\+?965)[569]\d{7}$/, 'ar-SA': /^(!?(\+?966)|0)?5\d{8}$/, 'ar-SY': /^(!?(\+?963)|0)?9\d{8}$/, 'ar-TN': /^(\+?216)?[2459]\d{7}$/, 'be-BY': /^(\+?375)?(24|25|29|33|44)\d{7}$/, 'bg-BG': /^(\+?359|0)?8[789]\d{7}$/, 'bn-BD': /\+?(88)?0?1[356789][0-9]{8}\b/, 'cs-CZ': /^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/, 'da-DK': /^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/, 'de-DE': /^(\+49)?0?1(5[0-25-9]\d|6([23]|0\d?)|7([0-57-9]|6\d))\d{7}$/, 'el-GR': /^(\+?30|0)?(69\d{8})$/, 'en-AU': /^(\+?61|0)4\d{8}$/, 'en-GB': /^(\+?44|0)7\d{9}$/, 'en-GH': /^(\+233|0)(20|50|24|54|27|57|26|56|23|28)\d{7}$/, 'en-HK': /^(\+?852\-?)?[456789]\d{3}\-?\d{4}$/, 'en-IE': /^(\+?353|0)8[356789]\d{7}$/, 'en-IN': /^(\+?91|0)?[6789]\d{9}$/, 'en-KE': /^(\+?254|0)?[7]\d{8}$/, 'en-MU': /^(\+?230|0)?\d{8}$/, 'en-NG': /^(\+?234|0)?[789]\d{9}$/, 'en-NZ': /^(\+?64|0)[28]\d{7,9}$/, 'en-PK': /^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$/, 'en-RW': /^(\+?250|0)?[7]\d{8}$/, 'en-SG': /^(\+65)?[89]\d{7}$/, 'en-TZ': /^(\+?255|0)?[67]\d{8}$/, 'en-UG': /^(\+?256|0)?[7]\d{8}$/, 'en-US': /^((\+1|1)?( |-)?)?(\([2-9][0-9]{2}\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/, 'en-ZA': /^(\+?27|0)\d{9}$/, 'en-ZM': /^(\+?26)?09[567]\d{7}$/, 'es-ES': /^(\+?34)?(6\d{1}|7[1234])\d{7}$/, 'es-MX': /^(\+?52)?(1|01)?\d{10,11}$/, 'es-UY': /^(\+598|0)9[1-9][\d]{6}$/, 'et-EE': /^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/, 'fa-IR': /^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/, 'fi-FI': /^(\+?358|0)\s?(4(0|1|2|4|5|6)?|50)\s?(\d\s?){4,8}\d$/, 'fo-FO': /^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/, 'fr-FR': /^(\+?33|0)[67]\d{8}$/, 'he-IL': /^(\+972|0)([23489]|5[012345689]|77)[1-9]\d{6}$/, 'hu-HU': /^(\+?36)(20|30|70)\d{7}$/, 'id-ID': /^(\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\s?|\d]{5,11})$/, 'it-IT': /^(\+?39)?\s?3\d{2} ?\d{6,7}$/, 'ja-JP': /^(\+?81|0)[789]0[ \-]?[1-9]\d{2}[ \-]?\d{5}$/, 'kk-KZ': /^(\+?7|8)?7\d{9}$/, 'kl-GL': /^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/, 'ko-KR': /^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/, 'lt-LT': /^(\+370|8)\d{8}$/, 'ms-MY': /^(\+?6?01){1}(([0145]{1}(\-|\s)?\d{7,8})|([236789]{1}(\s|\-)?\d{7}))$/, 'nb-NO': /^(\+?47)?[49]\d{7}$/, 'nl-BE': /^(\+?32|0)4?\d{8}$/, 'nn-NO': /^(\+?47)?[49]\d{7}$/, 'pl-PL': /^(\+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/, 'pt-BR': /(?=^(\+?5{2}\-?|0)[1-9]{2}\-?\d{4}\-?\d{4}$)(^(\+?5{2}\-?|0)[1-9]{2}\-?[6-9]{1}\d{3}\-?\d{4}$)|(^(\+?5{2}\-?|0)[1-9]{2}\-?9[6-9]{1}\d{3}\-?\d{4}$)/, 'pt-PT': /^(\+?351)?9[1236]\d{7}$/, 'ro-RO': /^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/, 'ru-RU': /^(\+?7|8)?9\d{9}$/, 'sl-SI': /^(\+386\s?|0)(\d{1}\s?\d{3}\s?\d{2}\s?\d{2}|\d{2}\s?\d{3}\s?\d{3})$/, 'sk-SK': /^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/, 'sr-RS': /^(\+3816|06)[- \d]{5,9}$/, 'sv-SE': /^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$/, 'th-TH': /^(\+66|66|0)\d{9}$/, 'tr-TR': /^(\+?90|0)?5\d{9}$/, 'uk-UA': /^(\+?38|8)?0\d{9}$/, 'vi-VN': /^(\+?84|0)((3([2-9]))|(5([689]))|(7([0|6-9]))|(8([1-5]))|(9([0-9])))([0-9]{7})$/, 'zh-CN': /^((\+|00)86)?1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/, 'zh-TW': /^(\+?886\-?|0)?9\d{8}$/ }; /* eslint-enable max-len */ // aliases phones['en-CA'] = phones['en-US']; phones['fr-BE'] = phones['nl-BE']; phones['zh-HK'] = phones['en-HK']; function isMobilePhone(str, locale, options) { (0, _assertString.default)(str); if (options && options.strictMode && !str.startsWith('+')) { return false; } if (Array.isArray(locale)) { return locale.some(function (key) { if (phones.hasOwnProperty(key)) { var phone = phones[key]; if (phone.test(str)) { return true; } } return false; }); } else if (locale in phones) { return phones[locale].test(str); // alias falsey locale as 'any' } else if (!locale || locale === 'any') { for (var key in phones) { if (phones.hasOwnProperty(key)) { var phone = phones[key]; if (phone.test(str)) { return true; } } } return false; } throw new Error("Invalid locale '".concat(locale, "'")); } var locales = Object.keys(phones); exports.locales = locales; isMongoId.js 0000664 00000001061 15112354325 0006773 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMongoId; var _assertString = _interopRequireDefault(require("./util/assertString")); var _isHexadecimal = _interopRequireDefault(require("./isHexadecimal")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isMongoId(str) { (0, _assertString.default)(str); return (0, _isHexadecimal.default)(str) && str.length === 24; } module.exports = exports.default; module.exports.default = exports.default; isMultibyte.js 0000664 00000001065 15112354325 0007421 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isMultibyte; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable no-control-regex */ var multibyte = /[^\x00-\x7F]/; /* eslint-enable no-control-regex */ function isMultibyte(str) { (0, _assertString.default)(str); return multibyte.test(str); } module.exports = exports.default; module.exports.default = exports.default; isNumeric.js 0000664 00000001157 15112354325 0007047 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isNumeric; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var numeric = /^[+-]?([0-9]*[.])?[0-9]+$/; var numericNoSymbols = /^[0-9]+$/; function isNumeric(str, options) { (0, _assertString.default)(str); if (options && options.no_symbols) { return numericNoSymbols.test(str); } return numeric.test(str); } module.exports = exports.default; module.exports.default = exports.default; isPort.js 0000664 00000000660 15112354325 0006367 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isPort; var _isInt = _interopRequireDefault(require("./isInt")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isPort(str) { return (0, _isInt.default)(str, { min: 0, max: 65535 }); } module.exports = exports.default; module.exports.default = exports.default; isPostalCode.js 0000664 00000003670 15112354325 0007504 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; exports.locales = void 0; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // common patterns var threeDigit = /^\d{3}$/; var fourDigit = /^\d{4}$/; var fiveDigit = /^\d{5}$/; var sixDigit = /^\d{6}$/; var patterns = { AD: /^AD\d{3}$/, AT: fourDigit, AU: fourDigit, BE: fourDigit, BG: fourDigit, CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, CH: fourDigit, CZ: /^\d{3}\s?\d{2}$/, DE: fiveDigit, DK: fourDigit, DZ: fiveDigit, EE: fiveDigit, ES: fiveDigit, FI: fiveDigit, FR: /^\d{2}\s?\d{3}$/, GB: /^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i, GR: /^\d{3}\s?\d{2}$/, HR: /^([1-5]\d{4}$)/, HU: fourDigit, IL: fiveDigit, IN: sixDigit, IS: threeDigit, IT: fiveDigit, JP: /^\d{3}\-\d{4}$/, KE: fiveDigit, LI: /^(948[5-9]|949[0-7])$/, LT: /^LT\-\d{5}$/, LU: fourDigit, LV: /^LV\-\d{4}$/, MX: fiveDigit, NL: /^\d{4}\s?[a-z]{2}$/i, NO: fourDigit, PL: /^\d{2}\-\d{3}$/, PT: /^\d{4}\-\d{3}?$/, RO: sixDigit, RU: sixDigit, SA: fiveDigit, SE: /^\d{3}\s?\d{2}$/, SI: fourDigit, SK: /^\d{3}\s?\d{2}$/, TN: fourDigit, TW: /^\d{3}(\d{2})?$/, UA: fiveDigit, US: /^\d{5}(-\d{4})?$/, ZA: fourDigit, ZM: fiveDigit }; var locales = Object.keys(patterns); exports.locales = locales; function _default(str, locale) { (0, _assertString.default)(str); if (locale in patterns) { return patterns[locale].test(str); } else if (locale === 'any') { for (var key in patterns) { if (patterns.hasOwnProperty(key)) { var pattern = patterns[key]; if (pattern.test(str)) { return true; } } } return false; } throw new Error("Invalid locale '".concat(locale, "'")); } isRFC3339.js 0000664 00000002522 15112354325 0006376 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isRFC3339; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */ var dateFullYear = /[0-9]{4}/; var dateMonth = /(0[1-9]|1[0-2])/; var dateMDay = /([12]\d|0[1-9]|3[01])/; var timeHour = /([01][0-9]|2[0-3])/; var timeMinute = /[0-5][0-9]/; var timeSecond = /([0-5][0-9]|60)/; var timeSecFrac = /(\.[0-9]+)?/; var timeNumOffset = new RegExp("[-+]".concat(timeHour.source, ":").concat(timeMinute.source)); var timeOffset = new RegExp("([zZ]|".concat(timeNumOffset.source, ")")); var partialTime = new RegExp("".concat(timeHour.source, ":").concat(timeMinute.source, ":").concat(timeSecond.source).concat(timeSecFrac.source)); var fullDate = new RegExp("".concat(dateFullYear.source, "-").concat(dateMonth.source, "-").concat(dateMDay.source)); var fullTime = new RegExp("".concat(partialTime.source).concat(timeOffset.source)); var rfc3339 = new RegExp("".concat(fullDate.source, "[ tT]").concat(fullTime.source)); function isRFC3339(str) { (0, _assertString.default)(str); return rfc3339.test(str); } module.exports = exports.default; module.exports.default = exports.default; isSurrogatePair.js 0000664 00000001014 15112354325 0010224 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isSurrogatePair; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/; function isSurrogatePair(str) { (0, _assertString.default)(str); return surrogatePair.test(str); } module.exports = exports.default; module.exports.default = exports.default; ltrim.js 0000664 00000001026 15112354325 0006233 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = ltrim; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ltrim(str, chars) { (0, _assertString.default)(str); var pattern = chars ? new RegExp("^[".concat(chars, "]+"), 'g') : /^\s+/g; return str.replace(pattern, ''); } module.exports = exports.default; module.exports.default = exports.default; matches.js 0000664 00000001116 15112354325 0006530 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = matches; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function matches(str, pattern, modifiers) { (0, _assertString.default)(str); if (Object.prototype.toString.call(pattern) !== '[object RegExp]') { pattern = new RegExp(pattern, modifiers); } return pattern.test(str); } module.exports = exports.default; module.exports.default = exports.default; normalizeEmail.js 0000664 00000015012 15112354325 0010054 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = normalizeEmail; var _merge = _interopRequireDefault(require("./util/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var default_normalize_email_options = { // The following options apply to all email addresses // Lowercases the local part of the email address. // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024). // The domain is always lowercased, as per RFC 1035 all_lowercase: true, // The following conversions are specific to GMail // Lowercases the local part of the GMail address (known to be case-insensitive) gmail_lowercase: true, // Removes dots from the local part of the email address, as that's ignored by GMail gmail_remove_dots: true, // Removes the subaddress (e.g. "+foo") from the email address gmail_remove_subaddress: true, // Conversts the googlemail.com domain to gmail.com gmail_convert_googlemaildotcom: true, // The following conversions are specific to Outlook.com / Windows Live / Hotmail // Lowercases the local part of the Outlook.com address (known to be case-insensitive) outlookdotcom_lowercase: true, // Removes the subaddress (e.g. "+foo") from the email address outlookdotcom_remove_subaddress: true, // The following conversions are specific to Yahoo // Lowercases the local part of the Yahoo address (known to be case-insensitive) yahoo_lowercase: true, // Removes the subaddress (e.g. "-foo") from the email address yahoo_remove_subaddress: true, // The following conversions are specific to Yandex // Lowercases the local part of the Yandex address (known to be case-insensitive) yandex_lowercase: true, // The following conversions are specific to iCloud // Lowercases the local part of the iCloud address (known to be case-insensitive) icloud_lowercase: true, // Removes the subaddress (e.g. "+foo") from the email address icloud_remove_subaddress: true }; // List of domains used by iCloud var icloud_domains = ['icloud.com', 'me.com']; // List of domains used by Outlook.com and its predecessors // This list is likely incomplete. // Partial reference: // https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/ var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com']; // List of domains used by Yahoo Mail // This list is likely incomplete var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com']; // List of domains used by yandex.ru var yandex_domains = ['yandex.ru', 'yandex.ua', 'yandex.kz', 'yandex.com', 'yandex.by', 'ya.ru']; // replace single dots, but not multiple consecutive dots function dotsReplacer(match) { if (match.length > 1) { return match; } return ''; } function normalizeEmail(email, options) { options = (0, _merge.default)(options, default_normalize_email_options); var raw_parts = email.split('@'); var domain = raw_parts.pop(); var user = raw_parts.join('@'); var parts = [user, domain]; // The domain is always lowercased, as it's case-insensitive per RFC 1035 parts[1] = parts[1].toLowerCase(); if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') { // Address is GMail if (options.gmail_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } if (options.gmail_remove_dots) { // this does not replace consecutive dots like example..email@gmail.com parts[0] = parts[0].replace(/\.+/g, dotsReplacer); } if (!parts[0].length) { return false; } if (options.all_lowercase || options.gmail_lowercase) { parts[0] = parts[0].toLowerCase(); } parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1]; } else if (icloud_domains.indexOf(parts[1]) >= 0) { // Address is iCloud if (options.icloud_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } if (!parts[0].length) { return false; } if (options.all_lowercase || options.icloud_lowercase) { parts[0] = parts[0].toLowerCase(); } } else if (outlookdotcom_domains.indexOf(parts[1]) >= 0) { // Address is Outlook.com if (options.outlookdotcom_remove_subaddress) { parts[0] = parts[0].split('+')[0]; } if (!parts[0].length) { return false; } if (options.all_lowercase || options.outlookdotcom_lowercase) { parts[0] = parts[0].toLowerCase(); } } else if (yahoo_domains.indexOf(parts[1]) >= 0) { // Address is Yahoo if (options.yahoo_remove_subaddress) { var components = parts[0].split('-'); parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0]; } if (!parts[0].length) { return false; } if (options.all_lowercase || options.yahoo_lowercase) { parts[0] = parts[0].toLowerCase(); } } else if (yandex_domains.indexOf(parts[1]) >= 0) { if (options.all_lowercase || options.yandex_lowercase) { parts[0] = parts[0].toLowerCase(); } parts[1] = 'yandex.ru'; // all yandex domains are equal, 1st preffered } else if (options.all_lowercase) { // Any other address parts[0] = parts[0].toLowerCase(); } return parts.join('@'); } module.exports = exports.default; module.exports.default = exports.default; rtrim.js 0000664 00000001201 15112354325 0006234 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = rtrim; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function rtrim(str, chars) { (0, _assertString.default)(str); var pattern = chars ? new RegExp("[".concat(chars, "]")) : /\s/; var idx = str.length - 1; for (; idx >= 0 && pattern.test(str[idx]); idx--) { ; } return idx < str.length ? str.substr(0, idx + 1) : str; } module.exports = exports.default; module.exports.default = exports.default; stripLow.js 0000664 00000001202 15112354325 0006723 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = stripLow; var _assertString = _interopRequireDefault(require("./util/assertString")); var _blacklist = _interopRequireDefault(require("./blacklist")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function stripLow(str, keep_new_lines) { (0, _assertString.default)(str); var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F'; return (0, _blacklist.default)(str, chars); } module.exports = exports.default; module.exports.default = exports.default; toBoolean.js 0000664 00000001046 15112354325 0007030 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toBoolean; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toBoolean(str, strict) { (0, _assertString.default)(str); if (strict) { return str === '1' || str === 'true'; } return str !== '0' && str !== 'false' && str !== ''; } module.exports = exports.default; module.exports.default = exports.default; toDate.js 0000664 00000000755 15112354325 0006334 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toDate; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toDate(date) { (0, _assertString.default)(date); date = Date.parse(date); return !isNaN(date) ? new Date(date) : null; } module.exports = exports.default; module.exports.default = exports.default; toFloat.js 0000664 00000000675 15112354325 0006525 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toFloat; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toFloat(str) { (0, _assertString.default)(str); return parseFloat(str); } module.exports = exports.default; module.exports.default = exports.default; toInt.js 0000664 00000000713 15112354325 0006203 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toInt; var _assertString = _interopRequireDefault(require("./util/assertString")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function toInt(str, radix) { (0, _assertString.default)(str); return parseInt(str, radix || 10); } module.exports = exports.default; module.exports.default = exports.default; helpers.d.ts 0000664 00000000442 15112360441 0006777 0 ustar 00 import type { Node } from "domhandler"; import type { Selector } from "css-what"; export declare function getDocumentRoot(node: Node): Node; export declare function groupSelectors(selectors: Selector[][]): [plain: Selector[][], filtered: Selector[][]]; //# sourceMappingURL=helpers.d.ts.map helpers.d.ts.map 0000664 00000000571 15112360441 0007556 0 ustar 00 {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAGhD;AAED,wBAAgB,cAAc,CAC1B,SAAS,EAAE,QAAQ,EAAE,EAAE,GACxB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAa/C"} helpers.js 0000664 00000001464 15112360441 0006550 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.groupSelectors = exports.getDocumentRoot = void 0; var positionals_1 = require("./positionals"); function getDocumentRoot(node) { while (node.parent) node = node.parent; return node; } exports.getDocumentRoot = getDocumentRoot; function groupSelectors(selectors) { var filteredSelectors = []; var plainSelectors = []; for (var _i = 0, selectors_1 = selectors; _i < selectors_1.length; _i++) { var selector = selectors_1[_i]; if (selector.some(positionals_1.isFilter)) { filteredSelectors.push(selector); } else { plainSelectors.push(selector); } } return [plainSelectors, filteredSelectors]; } exports.groupSelectors = groupSelectors; index.d.ts 0000664 00000001557 15112360441 0006454 0 ustar 00 import { Options as CSSSelectOptions } from "css-select"; import type { Element, Node, Document } from "domhandler"; export { filters, pseudos, aliases } from "css-select"; export interface Options extends CSSSelectOptions<Node, Element> { /** Optional reference to the root of the document. If not set, this will be computed when needed. */ root?: Document; } export declare function is(element: Element, selector: string | ((el: Element) => boolean), options?: Options): boolean; export declare function some(elements: Element[], selector: string | ((el: Element) => boolean), options?: Options): boolean; export declare function filter(selector: string, elements: Node[], options?: Options): Element[]; export declare function select(selector: string | ((el: Element) => boolean), root: Node | Node[], options?: Options): Element[]; //# sourceMappingURL=index.d.ts.map index.d.ts.map 0000664 00000001663 15112360441 0007226 0 ustar 00 {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,OAAO,IAAI,gBAAgB,EAE9B,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK1D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAYvD,MAAM,WAAW,OAAQ,SAAQ,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;IAC5D,qGAAqG;IACrG,IAAI,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,wBAAgB,EAAE,CACd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,OAAO,GAAE,OAAY,GACtB,OAAO,CAET;AAED,wBAAgB,IAAI,CAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,OAAO,GAAE,OAAY,GACtB,OAAO,CAWT;AAsCD,wBAAgB,MAAM,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,IAAI,EAAE,EAChB,OAAO,GAAE,OAAY,GACtB,OAAO,EAAE,CAEX;AA6FD,wBAAgB,MAAM,CAClB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EACnB,OAAO,GAAE,OAAY,GACtB,OAAO,EAAE,CAuBX"} positionals.d.ts 0000664 00000000762 15112360441 0007706 0 ustar 00 import type { Selector, PseudoSelector } from "css-what"; export declare type Filter = "first" | "last" | "eq" | "nth" | "gt" | "lt" | "even" | "odd" | "not"; export declare const filterNames: Set<string>; export interface CheerioSelector extends PseudoSelector { name: Filter; data: string | null; } export declare function isFilter(s: Selector): s is CheerioSelector; export declare function getLimit(filter: Filter, data: string | null): number; //# sourceMappingURL=positionals.d.ts.map positionals.d.ts.map 0000664 00000001102 15112360441 0010447 0 ustar 00 {"version":3,"file":"positionals.d.ts","sourceRoot":"","sources":["../src/positionals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEzD,oBAAY,MAAM,GACZ,OAAO,GACP,MAAM,GACN,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,MAAM,GACN,KAAK,GACL,KAAK,CAAC;AACZ,eAAO,MAAM,WAAW,EAAE,GAAG,CAAC,MAAM,CASlC,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,IAAI,eAAe,CAS1D;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAgBpE"} positionals.js 0000664 00000002167 15112360441 0007453 0 ustar 00 "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getLimit = exports.isFilter = exports.filterNames = void 0; exports.filterNames = new Set([ "first", "last", "eq", "gt", "nth", "lt", "even", "odd", ]); function isFilter(s) { if (s.type !== "pseudo") return false; if (exports.filterNames.has(s.name)) return true; if (s.name === "not" && Array.isArray(s.data)) { // Only consider `:not` with embedded filters return s.data.some(function (s) { return s.some(isFilter); }); } return false; } exports.isFilter = isFilter; function getLimit(filter, data) { var num = data != null ? parseInt(data, 10) : NaN; switch (filter) { case "first": return 1; case "nth": case "eq": return isFinite(num) ? (num >= 0 ? num + 1 : Infinity) : 0; case "lt": return isFinite(num) ? (num >= 0 ? num : Infinity) : 0; case "gt": return isFinite(num) ? Infinity : 0; default: return Infinity; } } exports.getLimit = getLimit;
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.03 |
proxy
|
phpinfo
|
Настройка