{"version":3,"sources":["jsdelivr-header.js","/npm/polyfill-service@3.25.3/lib/index.js"],"names":[],"mappings":"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","file":"/npm/polyfill-service@3.25.3/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/polyfill-service@3.25.3/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nconst fs = require('graceful-fs');\nconst path = require('path');\nconst tsort = require('tsort');\nconst createAliasResolver = require('./aliases');\nconst UA = require('./UA');\nconst sourceslib = require('./sources');\nconst appVersion = require('../package.json').version;\nconst Handlebars = require('handlebars');\nconst cloneDeep = require('lodash').cloneDeep;\nconst streamFromPromise = require('stream-from-promise');\nconst lazystream = require('lazystream');\nconst streamFromString = require('from2-string');\nconst mergeStream = require('merge2');\nconst streamToString = require('stream-to-string');\nconst shuffle = require('shuffle-array');\n\n\nconst rumTemplate = Handlebars.compile(fs.readFileSync(path.join(__dirname, 'rumTemplate.js.handlebars'), 'utf-8'));\n\nfunction listAllPolyfills() {\n\treturn sourceslib.listPolyfills();\n}\n\nfunction describePolyfill(featureName) {\n\treturn Promise.resolve(sourceslib.getPolyfillMetaSync(featureName));\n}\n\nfunction getOptions(opts) {\n\topts = Object.assign({\n\t\tuaString: '',\n\t\tminify: true,\n\t\tunknown: 'ignore',\n\t\tfeatures: {},\n\t\texcludes: [],\n\t\trum: false\n\t}, opts);\n\n\tif (opts.unknown !== 'polyfill') {\n\t\topts.unknown = 'ignore';\n\t}\n\n\t// Normalise flags\n\tObject.keys(opts.features).forEach(k => {\n\t\tif (!opts.features[k].flags) {\n\t\t\topts.features[k].flags = new Set();\n\t\t} else if (opts.features[k].flags.constructor !== Set) {\n\t\t\topts.features[k].flags = new Set(opts.features[k].flags);\n\t\t}\n\t});\n\treturn opts;\n}\n\n/**\n * Given a set of features that should be polyfilled in 'options.features' (with flags i.e. `{<featurename>: {flags:Set[<flaglist>]}, ...}`), determine which have a configuration valid for the given options.uaString, and return a promise of set of canonical (unaliased) features (with flags) and polyfills.\n *\n * @param {object} options - Valid keys are uaString, minify, unknown, excludes, rum and features\n * @return {promise} - Canonicalised feature definitions filtered for UA\n */\nfunction getPolyfills(options) {\n\n\toptions = getOptions(options);\n\tconst ua = new UA(options.uaString);\n\n\tconst resolveAliases = createAliasResolver(\n\t\tfunction aliasFromConfig(featureName) {\n\t\t\treturn sourceslib.getConfigAliasesSync(featureName);\n\t\t},\n\t\tfunction aliasAll(featureName) {\n\t\t\treturn (featureName === 'all') ? sourceslib.listPolyfillsSync() : undefined;\n\t\t}\n\t);\n\n\tconst resolveDependencies = createAliasResolver(\n\t\tfunction aliasDependencies(featureName) {\n\t\t\tconst meta = sourceslib.getPolyfillMetaSync(featureName);\n\t\t\treturn (meta && meta.dependencies || [])\n\t\t\t\t.filter(depName => options.excludes.indexOf(depName) === -1)\n\t\t\t\t.concat(featureName)\n\t\t\t;\n\t\t}\n\t);\n\n\t// Filter the features object to remove features not suitable for the current UA\n\tconst filterForUATargeting = function(features) {\n\t\tconst featuresList = Object.keys(features);\n\t\treturn featuresList.map(featureName => {\n\t\t\tconst meta = sourceslib.getPolyfillMetaSync(featureName);\n\t\t\tif (!meta) return false;\n\n\t\t\tconst isBrowserMatch = (meta.browsers && meta.browsers[ua.getFamily()] && ua.satisfies(meta.browsers[ua.getFamily()]));\n\t\t\tconst hasAlwaysFlagOverride = (features[featureName].flags.has('always'));\n\t\t\tconst unknownOverride = (options.unknown === 'polyfill' && ua.isUnknown());\n\n\t\t\treturn (isBrowserMatch || hasAlwaysFlagOverride || unknownOverride) ? featureName : false;\n\t\t}).reduce(function(out, key) {\n\t\t\tif (key) out[key] = features[key];\n\t\t\treturn out;\n\t\t}, {});\n\t};\n\n\tconst filterForExcludes = function(features) {\n\t\tObject.keys(features).forEach(featureName => {\n\t\t\tif (options.excludes.indexOf(featureName) !== -1) {\n\t\t\t\tdelete features[featureName];\n\t\t\t}\n\t\t});\n\t\treturn features;\n\t};\n\n\treturn Promise.resolve(options.features)\n\t\t.then(resolveAliases)\n\t\t.then(filterForUATargeting)\n\t\t.then(resolveDependencies)\n\t\t.then(filterForUATargeting)\n\t\t.then(filterForExcludes)\n\t;\n}\n\nfunction getPolyfillString(options) {\n\n\toptions = getOptions(options);\n\tconst ua = new UA(options.uaString);\n\tconst uaDebugName = ua.getFamily() + '/' + ua.getVersion() + ((ua.isUnknown() || !ua.meetsBaseline()) ? ' (unknown/unsupported; using policy `unknown='+options.unknown+'`)' : '');\n\tconst lf = options.minify ? '' : '\\n';\n\tconst allWarnText = 'Using the `all` alias with polyfill.io is a very bad idea. In a future version of the service, `all` will deliver the same behaviour as `default`, so we recommend using `default` instead.';\n\tconst output = mergeStream();\n\tconst explainerComment = [];\n\t// Check UA and turn requested features into a list of polyfills\n\tconst unsupportedUA = ((!ua.meetsBaseline() || ua.isUnknown()) && options.unknown !== 'polyfill');\n\n\tPromise.resolve(unsupportedUA ? {} : getPolyfills(options))\n\n\t// Build a polyfill bundle of polyfill sources sorted in dependency order\n\t.then(targetedFeatures => {\n\t\tconst warnings = {unknown:[]};\n\t\tconst graph = tsort();\n\n\t\tObject.keys(targetedFeatures).forEach(featureName => {\n\t\t\tconst feature = targetedFeatures[featureName];\n\t\t\tconst polyfill = sourceslib.getPolyfillMetaSync(featureName);\n\t\t\tif (!polyfill) {\n\t\t\t\twarnings.unknown.push(featureName);\n\t\t\t} else {\n\n\t\t\t\tgraph.add(featureName);\n\n\t\t\t\tif (polyfill.dependencies) {\n\t\t\t\t\tpolyfill.dependencies.forEach(depName => {\n\t\t\t\t\t\tif (depName in targetedFeatures) {\n\t\t\t\t\t\t\tgraph.add(depName, featureName);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfeature.comment = featureName + ', License: ' + (polyfill.license || 'CC0') + ((feature.aliasOf && feature.aliasOf.size) ? ' (required by \"' + Array.from(feature.aliasOf).join('\", \"') + '\")' : '');\n\t\t\t}\n\t\t});\n\n\t\tconst sortedFeatures = graph.sort();\n\n\t\tif (!options.minify) {\n\t\t\texplainerComment.push(\n\t\t\t\t'Polyfill service ' + ((process.env.NODE_ENV === 'production') ? 'v'+appVersion : 'DEVELOPMENT MODE - for live use set NODE_ENV to \\'production\\''),\n\t\t\t\t'For detailed credits and licence information see https://github.com/financial-times/polyfill-service.',\n\t\t\t\t'',\n\t\t\t\t'UA detected: ' + uaDebugName,\n\t\t\t\t'Features requested: ' + Object.keys(options.features),\n\t\t\t\t''\n\t\t\t);\n\t\t\tif (!ua.meetsBaseline() && ua.getBaseline()) {\n\t\t\t\texplainerComment.push(\n\t\t\t\t\t'Version range for polyfill support in ' + ua.getFamily() + ' is: ' + ua.getBaseline(),\n\t\t\t\t\t''\n\t\t\t\t);\n\t\t\t}\n\t\t\texplainerComment.push(...sortedFeatures\n\t\t\t\t.filter(featureName => (targetedFeatures[featureName] && targetedFeatures[featureName].comment))\n\t\t\t\t.map(featureName => '- ' + targetedFeatures[featureName].comment)\n\t\t\t);\n\t\t\tif (warnings.unknown.length) {\n\t\t\t\texplainerComment.push(\n\t\t\t\t\t'',\n\t\t\t\t\t'These features were not recognised:',\n\t\t\t\t\twarnings.unknown.map(s => '- '+s)\n\t\t\t\t);\n\t\t\t}\n\t\t\tif ('all' in options.features) {\n\t\t\t\texplainerComment.push('', allWarnText);\n\t\t\t}\n\t\t} else {\n\t\t\texplainerComment.push('Disable minification (remove `.min` from URL path) for more info');\n\t\t}\n\t\toutput.add(streamFromString('/* ' + explainerComment.join('\\n * ') + ' */\\n\\n'));\n\n\t\t// Outer closure hides private features from global scope\n\t\toutput.add(streamFromString(\"(function(undefined) {\" + lf));\n\n\t\tif (options.rum && process.env.RUM_BEACON_HOST) {\n\t\t\toutput.add(new lazystream.Readable(() => {\n\t\t\t\tconst optionsForRUM = cloneDeep(options);\n\t\t\t\tObject.keys(options.features).forEach(f => optionsForRUM.features[f].flags.add('always'));\n\t\t\t\tconst MAX_RUM_TESTS = 10;\n\t\t\t\treturn streamFromPromise(getPolyfills(optionsForRUM)\n\t\t\t\t\t.then(rumFeatures => {\n\t\t\t\t\t\treturn rumTemplate({\n\t\t\t\t\t\t\thost: process.env.RUM_BEACON_HOST,\n\t\t\t\t\t\t\tfeatures: shuffle(Object.keys(rumFeatures)).slice(0, MAX_RUM_TESTS).reduce((op, featureName) => {\n\t\t\t\t\t\t\t\tconst polyfill = sourceslib.getPolyfillMetaSync(featureName);\n\t\t\t\t\t\t\t\tif (polyfill.detectSource) {\n\t\t\t\t\t\t\t\t\top.push({name: featureName, detect: polyfill.detectSource});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t}, [])\n\t\t\t\t\t\t});\n\t\t\t\t\t}));\n\t\t\t}));\n\t\t}\n\n\t\tif (sortedFeatures.length) {\n\n\t\t\t// Using the graph, stream all the polyfill sources in dependency order\n\t\t\tfor (const featureName of sortedFeatures) {\n\t\t\t\tconst polyfill = sourceslib.getPolyfillMetaSync(featureName);\n\t\t\t\tconst wrapInDetect = (targetedFeatures[featureName].flags.has('gated') && polyfill.detectSource);\n\t\t\t\tif (wrapInDetect) {\n\t\t\t\t\toutput.add(streamFromString(\"if (!(\" + polyfill.detectSource + \")) {\" + lf));\n\t\t\t\t}\n\n\t\t\t\toutput.add(sourceslib.streamPolyfillSource(featureName, (options.minify ? 'min' : 'raw')));\n\n\t\t\t\tif (wrapInDetect) {\n\t\t\t\t\toutput.add(streamFromString(lf + \"}\" + lf + lf));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (!options.minify) {\n\t\t\t\toutput.add(streamFromString('\\n/* No polyfills found for current settings */\\n\\n'));\n\t\t\t}\n\t\t}\n\n\t\t// Invoke the closure, binding `this` to window (in a browser),\n\t\t// self (in a web worker), or global (in Node/IOjs)\n\t\toutput.add(streamFromString(\"})\" + lf + \".call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});\" + lf));\n\n\t\tif ('all' in options.features) {\n\t\t\toutput.add(streamFromString(\"\\nconsole.log('\"+allWarnText+\"');\\n\"));\n\t\t}\n\t});\n\n\treturn options.stream ? output : Promise.resolve(streamToString(output));\n}\n\nmodule.exports = {\n\tdescribePolyfill: describePolyfill,\n\tlistAllPolyfills: listAllPolyfills,\n\tgetPolyfills: getPolyfills,\n\tgetPolyfillString: getPolyfillString,\n\tnormalizeUserAgent: UA.normalize,\n};\n"]}