-
-
Save vhf/2b01fe4f867964a27fe617443ddf786b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | |
return new (P || (P = Promise))(function (resolve, reject) { | |
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | |
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | |
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | |
step((generator = generator.apply(thisArg, _arguments || [])).next()); | |
}); | |
}; | |
var __generator = (this && this.__generator) || function (thisArg, body) { | |
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | |
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | |
function verb(n) { return function (v) { return step([n, v]); }; } | |
function step(op) { | |
if (f) throw new TypeError("Generator is already executing."); | |
while (_) try { | |
if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; | |
if (y = 0, t) op = [0, t.value]; | |
switch (op[0]) { | |
case 0: case 1: t = op; break; | |
case 4: _.label++; return { value: op[1], done: false }; | |
case 5: _.label++; y = op[1]; op = [0]; continue; | |
case 7: op = _.ops.pop(); _.trys.pop(); continue; | |
default: | |
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | |
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | |
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | |
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | |
if (t[2]) _.ops.pop(); | |
_.trys.pop(); continue; | |
} | |
op = body.call(thisArg, _); | |
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | |
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | |
} | |
}; | |
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } | |
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { | |
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | |
var g = generator.apply(thisArg, _arguments || []), i, q = []; | |
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; | |
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } | |
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } | |
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } | |
function fulfill(value) { resume("next", value); } | |
function reject(value) { resume("throw", value); } | |
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } | |
}; | |
var __asyncValues = (this && this.__asyncIterator) || function (o) { | |
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | |
var m = o[Symbol.asyncIterator]; | |
return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); | |
}; | |
define(["require", "exports", "./csv-parser"], function (require, exports, csv_parser_1) { | |
"use strict"; | |
var _this = this; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
Symbol['asyncIterator'] = Symbol(); | |
function asyncRange(from, to) { | |
return __asyncGenerator(this, arguments, function asyncRange_1() { | |
var i; | |
return __generator(this, function (_a) { | |
switch (_a.label) { | |
case 0: | |
i = from; | |
_a.label = 1; | |
case 1: | |
if (!(i < to)) return [3 /*break*/, 4]; | |
return [4 /*yield*/, i]; | |
case 2: | |
_a.sent(); | |
_a.label = 3; | |
case 3: | |
i++; | |
return [3 /*break*/, 1]; | |
case 4: return [2 /*return*/]; | |
} | |
}); | |
}); | |
} | |
function syncRange(from, to) { | |
var i; | |
return __generator(this, function (_a) { | |
switch (_a.label) { | |
case 0: | |
i = from; | |
_a.label = 1; | |
case 1: | |
if (!(i < to)) return [3 /*break*/, 4]; | |
return [4 /*yield*/, i]; | |
case 2: | |
_a.sent(); | |
_a.label = 3; | |
case 3: | |
i++; | |
return [3 /*break*/, 1]; | |
case 4: return [2 /*return*/]; | |
} | |
}); | |
} | |
function timeIt(name, fn) { | |
return __awaiter(this, void 0, void 0, function () { | |
var startMs, endMs, elapsedMs; | |
return __generator(this, function (_a) { | |
switch (_a.label) { | |
case 0: | |
startMs = Date.now(); | |
return [4 /*yield*/, fn()]; | |
case 1: | |
_a.sent(); | |
endMs = Date.now(); | |
elapsedMs = endMs - startMs; | |
console.log(name + ": " + elapsedMs + " ms"); | |
return [2 /*return*/]; | |
} | |
}); | |
}); | |
} | |
(function () { return __awaiter(_this, void 0, void 0, function () { | |
var _this = this; | |
return __generator(this, function (_a) { | |
switch (_a.label) { | |
case 0: return [4 /*yield*/, timeIt('sync', function () { return __awaiter(_this, void 0, void 0, function () { | |
var _i, _a, i; | |
return __generator(this, function (_b) { | |
// Note: for this to work, you need target: es6. | |
for (_i = 0, _a = syncRange(0, 549996); _i < _a.length; _i++) { | |
i = _a[_i]; | |
} | |
return [2 /*return*/]; | |
}); | |
}); })]; | |
case 1: | |
_a.sent(); | |
return [4 /*yield*/, timeIt('async', function () { return __awaiter(_this, void 0, void 0, function () { | |
var _a, _b, i, e_1_1, e_1, _c; | |
return __generator(this, function (_d) { | |
switch (_d.label) { | |
case 0: | |
_d.trys.push([0, 6, 7, 12]); | |
_a = __asyncValues(asyncRange(0, 549996)); | |
_d.label = 1; | |
case 1: return [4 /*yield*/, _a.next()]; | |
case 2: | |
if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 5]; | |
return [4 /*yield*/, _b.value]; | |
case 3: | |
i = _d.sent(); | |
_d.label = 4; | |
case 4: return [3 /*break*/, 1]; | |
case 5: return [3 /*break*/, 12]; | |
case 6: | |
e_1_1 = _d.sent(); | |
e_1 = { error: e_1_1 }; | |
return [3 /*break*/, 12]; | |
case 7: | |
_d.trys.push([7, , 10, 11]); | |
if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 9]; | |
return [4 /*yield*/, _c.call(_a)]; | |
case 8: | |
_d.sent(); | |
_d.label = 9; | |
case 9: return [3 /*break*/, 11]; | |
case 10: | |
if (e_1) throw e_1.error; | |
return [7 /*endfinally*/]; | |
case 11: return [7 /*endfinally*/]; | |
case 12: return [2 /*return*/]; | |
} | |
}); | |
}); })]; | |
case 2: | |
_a.sent(); | |
return [4 /*yield*/, timeIt('lines', function () { return __awaiter(_this, void 0, void 0, function () { | |
var numLines, numBytes, _a, _b, line, e_2_1, e_2, _c; | |
return __generator(this, function (_d) { | |
switch (_d.label) { | |
case 0: | |
numLines = 0, numBytes = 0; | |
_d.label = 1; | |
case 1: | |
_d.trys.push([1, 7, 8, 13]); | |
_a = __asyncValues(csv_parser_1.lines('stop_times.txt')); | |
_d.label = 2; | |
case 2: return [4 /*yield*/, _a.next()]; | |
case 3: | |
if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6]; | |
return [4 /*yield*/, _b.value]; | |
case 4: | |
line = _d.sent(); | |
numLines++; | |
numBytes += line.length; | |
_d.label = 5; | |
case 5: return [3 /*break*/, 2]; | |
case 6: return [3 /*break*/, 13]; | |
case 7: | |
e_2_1 = _d.sent(); | |
e_2 = { error: e_2_1 }; | |
return [3 /*break*/, 13]; | |
case 8: | |
_d.trys.push([8, , 11, 12]); | |
if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10]; | |
return [4 /*yield*/, _c.call(_a)]; | |
case 9: | |
_d.sent(); | |
_d.label = 10; | |
case 10: return [3 /*break*/, 12]; | |
case 11: | |
if (e_2) throw e_2.error; | |
return [7 /*endfinally*/]; | |
case 12: return [7 /*endfinally*/]; | |
case 13: | |
console.log("Read " + numLines + " lines, " + numBytes + " bytes."); | |
return [2 /*return*/]; | |
} | |
}); | |
}); })]; | |
case 3: | |
_a.sent(); | |
return [4 /*yield*/, timeIt('lines chunked', function () { return __awaiter(_this, void 0, void 0, function () { | |
var numLines, numBytes, _a, _b, chunk, _i, chunk_1, line, e_3_1, e_3, _c; | |
return __generator(this, function (_d) { | |
switch (_d.label) { | |
case 0: | |
numLines = 0, numBytes = 0; | |
_d.label = 1; | |
case 1: | |
_d.trys.push([1, 7, 8, 13]); | |
_a = __asyncValues(csv_parser_1.lineChunks('stop_times.txt')); | |
_d.label = 2; | |
case 2: return [4 /*yield*/, _a.next()]; | |
case 3: | |
if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6]; | |
return [4 /*yield*/, _b.value]; | |
case 4: | |
chunk = _d.sent(); | |
for (_i = 0, chunk_1 = chunk; _i < chunk_1.length; _i++) { | |
line = chunk_1[_i]; | |
numLines++; | |
numBytes += line.length; | |
} | |
_d.label = 5; | |
case 5: return [3 /*break*/, 2]; | |
case 6: return [3 /*break*/, 13]; | |
case 7: | |
e_3_1 = _d.sent(); | |
e_3 = { error: e_3_1 }; | |
return [3 /*break*/, 13]; | |
case 8: | |
_d.trys.push([8, , 11, 12]); | |
if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10]; | |
return [4 /*yield*/, _c.call(_a)]; | |
case 9: | |
_d.sent(); | |
_d.label = 10; | |
case 10: return [3 /*break*/, 12]; | |
case 11: | |
if (e_3) throw e_3.error; | |
return [7 /*endfinally*/]; | |
case 12: return [7 /*endfinally*/]; | |
case 13: | |
console.log("Read " + numLines + " lines, " + numBytes + " bytes."); | |
return [2 /*return*/]; | |
} | |
}); | |
}); })]; | |
case 4: | |
_a.sent(); | |
return [2 /*return*/]; | |
} | |
}); | |
}); })().catch(function (e) { | |
console.error(e); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment