Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
appversion: appVersion,
pageName: ((Number.isInteger(Number.parseInt(req.params[0], 10)) ? req.params[1] : req.params[0]) || 'index').replace(/\/$/, ''),
rumEnabled: !!process.env.RUM_MYSQL_DSN,
host: process.env.HOSTNAME || req.protocol + '://' + req.get('host') || 'https://polyfill.io'
}, docsData);
if (locals.pageName === 'usage') {
// Set the ttl to one hour for the usage page so the graphs are
// updated more frequently, overriding the default cache-control
// behaviour set in index.js
const one_hour = 60 * 60;
const one_week = one_hour * 24 * 7;
res.set('Cache-Control', 'public, max-age=' + one_hour + ', stale-while-revalidate=' + one_week + ', stale-if-error=' + one_week);
} else if (locals.pageName === 'contributing/authoring-polyfills') {
locals.baselines = require('polyfill-library/lib/UA').getBaselines();
}
template(locals.pageName)
.then(templFn => res.send(templFn(locals)))
.catch(err => {
console.log(err);
next();
})
;
}
polyfills: aliases[alias]
});
}
}
}
}
for (const polyfill of await polyfillLibrary.listAllPolyfills()) {
// Polyfills which start with _ are internal functions used by other polyfills, they should not be displayed on the website.
if (!polyfill.startsWith("_") && !polyfill.startsWith("Intl.~locale")) {
const polyfillInfo = Object.assign(
{
name: polyfill,
labelID: `${snakeCase(polyfill)}_label`,
license: "MIT"
},
await polyfillLibrary.describePolyfill(polyfill)
);
polyfillInfo.licenseLowerCase = polyfillInfo.license.toLowerCase();
polyfills.push(polyfillInfo);
}
}
}
return {
polyfills,
polyfillAliases
};
};
"use strict";
const latestVersion = require("polyfill-library/package.json").version;
const featuresfromQueryParam = require("./features-from-query-parameter");
module.exports = function getPolyfillParameters(req = {}) {
const query = req.query || {};
const path = req.path || "";
const { excludes = "", features = "default", rum, unknown = "polyfill", version, callback } = query;
const uaString = query.ua || (req.headers && req.headers["user-agent"]) || (typeof req.get === "function" && req.get("User-Agent")) || "";
const compression = query.compression !== "identity" ? query.compression : undefined;
return {
excludes: excludes ? excludes.split(",") : [],
features: featuresfromQueryParam(features, query.flags),
minify: path.endsWith(".min.js"),
rum: Number.parseInt(rum, 10) === 1,
stream: false,
callback: /^[\w\.]+$/.test(callback || "") ? callback : false,
"use strict";
const latestVersion = require("polyfill-library/package.json").version;
const featuresfromQueryParam = require("./features-from-query-parameter");
module.exports = function getPolyfillParameters(req = {}) {
const query = req.query || {};
const path = req.path || "";
const { excludes = "", features = "default", rum, unknown = "polyfill", version = latestVersion, callback } = query;
const uaString = query.ua || (req.headers && req.headers["user-agent"]) || (typeof req.get === "function" && req.get("User-Agent")) || "";
const compression = query.compression !== "identity" ? query.compression : undefined;
return {
excludes: excludes ? excludes.split(",") : [],
features: featuresfromQueryParam(features, query.flags),
minify: path.endsWith(".min.js"),
rum: Number.parseInt(rum, 10) === 1,
stream: false,
callback: /^[\w\.]+$/.test(callback || "") ? callback : false,
async function generatePolyfillURL(features = []) {
const polyfillUrl = 'https://cdn.polyfill.io/v3/polyfill.min.js';
const aliases = await polyfillLibrary.listAliases();
const polyfills = await polyfillLibrary.listAllPolyfills();
const featuresInPolyfillLibrary = new Set;
for (const feature of features) {
if (polyfills.includes(feature)) {
featuresInPolyfillLibrary.add(feature);
} else if (feature in aliases) {
featuresInPolyfillLibrary.add(feature);
} else if (feature.includes('.prototype')) {
const featureConstructor = feature.split('.prototype')[0];
if (polyfills.includes(featureConstructor)) {
featuresInPolyfillLibrary.add(featureConstructor);
} else if (featureConstructor in aliases) {
featuresInPolyfillLibrary.add(featureConstructor);
}
}
async function generatePolyfillURL(features = []) {
const polyfillUrl = 'https://cdn.polyfill.io/v3/polyfill.min.js';
const aliases = await polyfillLibrary.listAliases();
const polyfills = await polyfillLibrary.listAllPolyfills();
const featuresInPolyfillLibrary = new Set;
for (const feature of features) {
if (polyfills.includes(feature)) {
featuresInPolyfillLibrary.add(feature);
} else if (feature in aliases) {
featuresInPolyfillLibrary.add(feature);
} else if (feature.includes('.prototype')) {
const featureConstructor = feature.split('.prototype')[0];
if (polyfills.includes(featureConstructor)) {
featuresInPolyfillLibrary.add(featureConstructor);
} else if (featureConstructor in aliases) {
featuresInPolyfillLibrary.add(featureConstructor);
}
}
}
"use strict";
const compressBundle = require("../../lib/compress-bundle");
const getPolyfillParameters = require("../../lib/get-polyfill-parameters");
const latestVersion = require("polyfill-library/package.json").version;
const PolyfillLibrary = require("polyfill-library");
const polyfillio_3_25_3 = require("polyfill-library-3.25.3");
async function respondWithBundle(response, params, bundle) {
const file = await compressBundle(params.compression, bundle);
const headers = {
"Cache-Control": "public, s-maxage=31536000, max-age=604800, stale-while-revalidate=604800, stale-if-error=604800",
"Content-Encoding": params.compression,
"Content-Type": "application/javascript; charset=utf-8",
"surrogate-key": "polyfill-service"
};
response.status(200);
response.set(headers);
response.send(file);
}
"use strict";
const fs = require("fs");
const path = require("path");
const tmpDir = require("os").tmpdir();
const untar = require("decompress");
const denodeify = require("denodeify");
const readFile = denodeify(fs.readFile);
const brotliDecompress = denodeify(require("iltorb").decompress);
const PolyfillLibrary = require("polyfill-library");
const latestVersion = require("polyfill-library/package.json").version;
module.exports = async function createPolyfillLibrary(version) {
if (version === latestVersion) {
return new PolyfillLibrary();
}
const polyfillDistTar = await brotliDecompress(await readFile(path.join(__dirname, `../polyfill-library-packages/${version}.tar.br`)));
const polyfillsPath = path.join(tmpDir, version);
await untar(polyfillDistTar, tmpDir);
return new PolyfillLibrary(polyfillsPath);
};
"use strict";
const compressBundle = require("../../lib/compress-bundle");
const getPolyfillParameters = require("../../lib/get-polyfill-parameters");
const latestVersion = require("polyfill-library/package.json").version;
const polyfillio = require("polyfill-library");
const polyfillio_3_27_4 = require("polyfill-library-3.27.4");
const polyfillio_3_25_3 = require("polyfill-library-3.25.3");
const polyfillio_3_25_1 = require("polyfill-library-3.25.1");
const polyfillio_3_28_1 = require("polyfill-library-3.28.1");
const polyfillio_3_34_0 = require("polyfill-library-3.34.0");
const polyfillio_3_35_0 = require("polyfill-library-3.35.0");
const polyfillio_3_36_0 = require("polyfill-library-3.36.0");
const polyfillio_3_37_0 = require("polyfill-library-3.37.0");
const polyfillio_3_38_0 = require("polyfill-library-3.38.0");
const polyfillio_3_39_0 = require("polyfill-library-3.39.0");
const polyfillio_3_40_0 = require("polyfill-library-3.40.0");
const polyfillio_3_41_0 = require("polyfill-library-3.41.0");
async function respondWithBundle(response, params, bundle) {
const file = await compressBundle(params.compression, bundle);
const makePolyfill = ({ uaString, cache }) => (
getPolyfillString({ uaString, minify: cache, features, unknown: "polyfill" })
.then(polyfill => {
const polyfillHeaders = {
...headers,
"Cache-Control": cache ? "max-age=31536000" : "no-cache",
"Content-Type": "application/javascript;charset=utf-8"
};
return {
status: 200,
statusDescription: "OK",
headers: Object.keys(polyfillHeaders).reduce(
(accum, key) => ({ ...accum, [key]: [{ key, value: polyfillHeaders[key] }] }), {}
),
body: polyfill
};
})