Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions examples/lib/arrayFromPolyfill.js
Original file line number Diff line number Diff line change
@@ -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
);
};
})();
}
3 changes: 3 additions & 0 deletions examples/scripts/example-data.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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 + ')');
});
});

Expand Down
25 changes: 3 additions & 22 deletions examples/scripts/iframe/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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}/`);
Expand All @@ -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)
}));
}

Expand Down
Loading