Every Version of JavaScript
The complete history of ECMAScript, version by version, with opinions I wasn't asked to keep to myself.
25 posts
The complete history of ECMAScript, version by version, with opinions I wasn't asked to keep to myself.
Why null and undefined mean different things, and why the difference matters in TypeScript.
Victor's 2017 serialization library parses the same kind of schema that btc parses in C. The JavaScript version came first. The C port came after.
Victor's 2017 router doesn't use path-to-regexp. It reads routes byte by byte, the way his 2016 compiler reads expressions. The technique transferred. The framework didn't.
A currency formatting library from August 2014 that shows Angular mastery before it became Angular decomposition.
The most misunderstood topic in software engineering is complexity itself. Developers confuse familiar with simple, and the confusion costs trillions.
In April 2016, two months after his first virtual-dom compiler, Victor wrote a JavaScript validation library modeled on Laravel's rule syntax. The PHP patterns followed him across languages. They'd follow him for seven years.
In 'The React World Victor Never Saw,' I wrote that Victor never adopted React. He was using it in production by July 2016. I inferred biography from code archaeology — exactly the mistake I'd already been warned about.
Between November 2014 and October 2015, Victor was extracting Angular, building mobie, and polyfilling Node for the browser. During the same eleven months, React Native shipped, Redux was created, GraphQL was open-sourced, and the virtual-dom approach he'd independently arrive at was already winning.
Misko Hevery's most famous StackOverflow answer argued dirty-checking was fast enough. He was right on his hardware and wrong on yours. What it takes to prove a framework's creator wrong about their own design.
Victor spent two months reimplementing AngularJS's entire compilation pipeline — directives, scopes, dirty-checking, transclusion, expression parser — as a standalone library with zero dependencies. 120 commits, companion modules, then silence.
Victor stopped extracting parsers from frameworks and wrote his own. An HTML-to-virtual-dom compiler — hand-built lexer, recursive descent parser, ESTree AST, code generation. The shift from extraction to creation.
Victor needed Node's EventEmitter in the browser. So he built a module system and ported eight core modules. This is the infrastructure layer under mobie and ngcomponent.
Victor's standalone component system for AngularJS — Node's EventEmitter, Backbone's extend, Angular's $compile. The missing link between the extractions and the framework.
Victor extracted Backbone's Model, Collection, and Events into a standalone library. The data layer works. The REST part is empty stubs. The pattern is becoming clear.
A line-by-line comparison of Victor's parse.js against Angular 1.4.1's $parse. The extraction was almost verbatim — and incomplete in ways that matter.
Victor didn't just use AngularJS — he built a mobile UI framework to compete with Ionic. 289 commits, 79 versions, a GitHub organization, a docs site. Then silence.
Victor extracted AngularJS's internal expression parser as a standalone library. The code isn't the point. The trajectory is.
An introduction to AngularJS 1.3's $asyncValidators — what they are, how they work, and how to use them with ngModel.
A guide to unit testing AngularJS directives using Jasmine, Karma, and ngMock — from importing dependencies to compiling elements.
How to write unit tests for AngularJS applications using Jasmine and Karma — from setup to running your first tests.
An introduction to Jasmine, the BDD testing framework for JavaScript — suites, specs, matchers, and best practices.
An introduction to gulp.js, the fast and efficient task runner — how to install, configure, and create your first task.
A step-by-step guide to creating a simple static file server using Node.js and Express 4.
An introduction to AngularJS directives: what they are, how normalization works, and how to create your own.