diff --git a/examples/lib/arrayFromPolyfill.js b/examples/lib/arrayFromPolyfill.js
new file mode 100644
index 00000000000..a05d0ecea84
--- /dev/null
+++ b/examples/lib/arrayFromPolyfill.js
@@ -0,0 +1,135 @@
+// Production steps of ECMA-262, Edition 6, 22.1.2.1
+if (!Array.from) {
+ Array.from = (function () {
+ var symbolIterator;
+ try {
+ symbolIterator = Symbol.iterator
+ ? Symbol.iterator
+ : 'Symbol(Symbol.iterator)';
+ } catch (e) {
+ symbolIterator = 'Symbol(Symbol.iterator)';
+ }
+
+ var toStr = Object.prototype.toString;
+ var isCallable = function (fn) {
+ return (
+ typeof fn === 'function' ||
+ toStr.call(fn) === '[object Function]'
+ );
+ };
+ var toInteger = function (value) {
+ var number = Number(value);
+ if (isNaN(number)) return 0;
+ if (number === 0 || !isFinite(number)) return number;
+ return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
+ };
+ var maxSafeInteger = Math.pow(2, 53) - 1;
+ var toLength = function (value) {
+ var len = toInteger(value);
+ return Math.min(Math.max(len, 0), maxSafeInteger);
+ };
+
+ var setGetItemHandler = function setGetItemHandler(isIterator, items) {
+ var iterator = isIterator && items[symbolIterator]();
+ return function getItem(k) {
+ return isIterator ? iterator.next() : items[k];
+ };
+ };
+
+ var getArray = function getArray(
+ T,
+ A,
+ len,
+ getItem,
+ isIterator,
+ mapFn
+ ) {
+ // 16. Let k be 0.
+ var k = 0;
+
+ // 17. Repeat, while k < len… or while iterator is done (also steps a - h)
+ while (k < len || isIterator) {
+ var item = getItem(k);
+ var kValue = isIterator ? item.value : item;
+
+ if (isIterator && item.done) {
+ return A;
+ } else {
+ if (mapFn) {
+ A[k] =
+ typeof T === 'undefined'
+ ? mapFn(kValue, k)
+ : mapFn.call(T, kValue, k);
+ } else {
+ A[k] = kValue;
+ }
+ }
+ k += 1;
+ }
+
+ if (isIterator) {
+ throw new TypeError(
+ 'Array.from: provided arrayLike or iterator has length more then 2 ** 52 - 1'
+ );
+ } else {
+ A.length = len;
+ }
+
+ return A;
+ };
+
+ // The length property of the from method is 1.
+ return function from(arrayLikeOrIterator /*, mapFn, thisArg */) {
+ // 1. Let C be the this value.
+ var C = this;
+
+ // 2. Let items be ToObject(arrayLikeOrIterator).
+ var items = Object(arrayLikeOrIterator);
+ var isIterator = isCallable(items[symbolIterator]);
+
+ // 3. ReturnIfAbrupt(items).
+ if (arrayLikeOrIterator == null && !isIterator) {
+ throw new TypeError(
+ 'Array.from requires an array-like object or iterator - not null or undefined'
+ );
+ }
+
+ // 4. If mapfn is undefined, then let mapping be false.
+ var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
+ var T;
+ if (typeof mapFn !== 'undefined') {
+ // 5. else
+ // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
+ if (!isCallable(mapFn)) {
+ throw new TypeError(
+ 'Array.from: when provided, the second argument must be a function'
+ );
+ }
+
+ // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
+ if (arguments.length > 2) {
+ T = arguments[2];
+ }
+ }
+
+ // 10. Let lenValue be Get(items, "length").
+ // 11. Let len be ToLength(lenValue).
+ var len = toLength(items.length);
+
+ // 13. If IsConstructor(C) is true, then
+ // 13. a. Let A be the result of calling the [[Construct]] internal method
+ // of C with an argument list containing the single item len.
+ // 14. a. Else, Let A be ArrayCreate(len).
+ var A = isCallable(C) ? Object(new C(len)) : new Array(len);
+
+ return getArray(
+ T,
+ A,
+ len,
+ setGetItemHandler(isIterator, items),
+ isIterator,
+ mapFn
+ );
+ };
+ })();
+}
\ No newline at end of file
diff --git a/examples/scripts/example-data.mjs b/examples/scripts/example-data.mjs
index 4bc3bf66272..afc16c64f31 100644
--- a/examples/scripts/example-data.mjs
+++ b/examples/scripts/example-data.mjs
@@ -33,6 +33,9 @@ fs.readdirSync(`${MAIN_DIR}/src/examples/`).forEach(function (category) {
exampleData[category][example].javaScriptFunction = Prettier.format(Babel.transform(exampleData[category][example].typeScriptFunction, { retainLines: true, filename: `transformedScript.tsx`, presets: ["typescript"] }).code, { parser: BabelParser.parse, tabWidth: 4 });
exampleData[category][example].nameSlug = example;
exampleData[category][example].categorySlug = category;
+ const files = formatters.retrieveStaticObject(exampleFileText, 'FILES');
+ // eslint-disable-next-line no-eval
+ if (files) exampleData[category][example].files = eval('(' + files + ')');
});
});
diff --git a/examples/scripts/iframe/index.mjs b/examples/scripts/iframe/index.mjs
index 4f9040faa68..a8f9786783b 100644
--- a/examples/scripts/iframe/index.mjs
+++ b/examples/scripts/iframe/index.mjs
@@ -19,22 +19,7 @@ fs.copyFileSync(`${MAIN_DIR}/./node_modules/url-search-params-polyfill/index.js`
fs.copyFileSync(`${MAIN_DIR}/./node_modules/promise-polyfill/dist/polyfill.min.js`, `${MAIN_DIR}/dist/build/promisePolyfill.js`);
fs.copyFileSync(`${MAIN_DIR}/./node_modules/whatwg-fetch/dist/fetch.umd.js`, `${MAIN_DIR}/dist/build/fetchPolyfill.js`);
fs.copyFileSync(`${MAIN_DIR}/./node_modules/regenerator-runtime/runtime.js`, `${MAIN_DIR}/dist/build/regeneratorRuntimePolyfill.js`);
-
-const EXAMPLE_CONSTS = [
- "vshader",
- "fshader",
- "fshaderFeedback",
- "fshaderCloud",
- "vshaderFeedback",
- "vshaderCloud"
-];
-
-function retrieveConstString(data, name) {
- const start = data.indexOf(`const ${name} = `);
- if (start < 0) return;
- const end = data.indexOf("`;", start);
- return data.substring(start + name.length + 10, end);
-}
+fs.copyFileSync(`${MAIN_DIR}/lib/arrayFromPolyfill.js`, `${MAIN_DIR}/dist/build/arrayFromPolyfill.js`);
function loadHtmlTemplate(data) {
const html = fs.readFileSync(`${MAIN_DIR}/scripts/iframe/index.mustache`, "utf8");
@@ -48,10 +33,6 @@ function buildExample(category, filename) {
"utf8"
);
- const exampleConstValues = EXAMPLE_CONSTS
- .map(k => ({ k, v: retrieveConstString(exampleString, k) }))
- .filter(c => c.v);
-
const exampleClass = formatters.getExampleClassFromTextFile(Babel, exampleString);
if (!fs.existsSync(`${MAIN_DIR}/dist/iframe/${category}/`)) {
fs.mkdirSync(`${MAIN_DIR}/dist/iframe/${category}/`);
@@ -70,8 +51,8 @@ function buildExample(category, filename) {
}
fs.writeFileSync(`${MAIN_DIR}/dist/iframe/${category}/${filename.replace(".tsx", "")}.html`, loadHtmlTemplate({
exampleClass: exampleClass,
- exampleConstValues: JSON.stringify(exampleConstValues),
- enginePath: process.env.ENGINE_PATH || enginePath
+ enginePath: process.env.ENGINE_PATH || enginePath,
+ miniStats: !formatters.classIncludesMiniStats(exampleClass)
}));
}
diff --git a/examples/scripts/iframe/index.mustache b/examples/scripts/iframe/index.mustache
index 5eac61563bc..168e7f1118b 100644
--- a/examples/scripts/iframe/index.mustache
+++ b/examples/scripts/iframe/index.mustache
@@ -8,6 +8,7 @@
+