Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
696 commits
Select commit Hold shift + click to select a range
5b08deb
Merge pull request #239 from bekzod/update-lib
wagenet Feb 13, 2018
a07cfd0
Tweaks
wagenet Feb 13, 2018
b2bbdec
Merge pull request #240 from wagenet/fix-double-replace
rwjblue Feb 25, 2018
189eb23
Update and lock-down prettier versions.
Feb 25, 2018
2bfd8e5
v2.0.0-beta.2
Feb 25, 2018
4903a46
Failing test for mid-transition active checks.
nathanhammond Feb 27, 2018
7fe6e02
Prevent mid-transition checks from reassigning params.
nathanhammond Feb 27, 2018
28458cc
Remove the context from the prototype.
nathanhammond Mar 7, 2018
d349e75
Replace hasOwnProperty with in since we have no prototype value.
nathanhammond Mar 7, 2018
4b82317
Merge pull request #242 from nathanhammond/patch-1
rwjblue Mar 7, 2018
86c824b
v2.0.0-beta.3
Mar 7, 2018
a164786
Fix a crash when (hash) helper is used to create queryParams object
tchak Apr 28, 2018
63f1d45
Merge pull request #245 from tchak/fix-query-params-and-hash
rwjblue May 7, 2018
bfcb66f
2.0.0-beta.4
May 7, 2018
7535d8c
༼ つ ◕_◕ ༽つ Typescript
chadhietala Jul 27, 2018
73d6a7f
Merge pull request #247 from tildeio/types
chadhietala Aug 21, 2018
fa7b2b2
3.0.0
Aug 28, 2018
c25edf7
make delegate optional
luxzeitlos Sep 6, 2018
6e0af31
Merge pull request #249 from luxferresum/optional-delegate
chadhietala Sep 7, 2018
89f973b
Router Abstract Base class
chadhietala Sep 5, 2018
d7056ab
Bind methods for now, but this needs to be simplfied
chadhietala Sep 11, 2018
cd66e50
Expose TransitionState
chadhietala Sep 13, 2018
8b4a0e6
Merge pull request #248 from tildeio/abstract-base-class
chadhietala Sep 14, 2018
8e02b07
v4.0.0
chadhietala Sep 14, 2018
45a4f44
Fix types
chadhietala Sep 17, 2018
b727318
Merge pull request #251 from tildeio/fix-types
chadhietala Sep 17, 2018
c1779c8
v4.0.1
chadhietala Sep 17, 2018
6134826
Expose HandlerInfo type
chadhietala Sep 19, 2018
c9c4654
Merge pull request #253 from tildeio/expose-handler-info-type
chadhietala Sep 19, 2018
efbcd30
v4.0.2
chadhietala Sep 19, 2018
713fcc6
Bind serializer to instance
chadhietala Sep 19, 2018
1c0ac21
Merge pull request #254 from tildeio/bind-serializer
chadhietala Sep 19, 2018
2aa4249
v4.0.3
chadhietala Sep 19, 2018
0adbaf6
wip
chadhietala Sep 17, 2018
ad0bc3c
Inject Router
chadhietala Sep 17, 2018
f9c691b
Recoghandler types
chadhietala Sep 17, 2018
a66ed5c
[Breaking] no more underscore methods
chadhietala Sep 17, 2018
54aeb3d
Renaming a bunch of things to route
chadhietala Sep 17, 2018
a842a45
implement from/to and public RouteInfo
chadhietala Sep 18, 2018
080da8d
param ordering
chadhietala Sep 18, 2018
85411e0
Adding tests
chadhietala Sep 18, 2018
4133d4a
Add type checking in CI
chadhietala Sep 18, 2018
e853a63
Merge pull request #252 from tildeio/route-info-type
chadhietala Sep 19, 2018
e792f2c
Generics
chadhietala Sep 24, 2018
f385d11
Merge pull request #255 from tildeio/expose-route-info-type
chadhietala Sep 25, 2018
d9fa850
v5.0.0
chadhietala Sep 25, 2018
ae5681c
Make Promise a partial type
chadhietala Sep 26, 2018
d85cdd8
Merge pull request #256 from tildeio/someone-plz-kill-definitively-typed
chadhietala Sep 26, 2018
441f3e6
v5.0.1
chadhietala Sep 26, 2018
b6fe3c2
Add routeWillChange, routeDidChange, transitionDidError
chadhietala Sep 26, 2018
be149d9
Merge pull request #257 from tildeio/router-events
chadhietala Sep 28, 2018
6364010
Make sure paramNames are populated
chadhietala Oct 1, 2018
da5c04b
Merge pull request #258 from tildeio/fix-param-names
chadhietala Oct 1, 2018
9d18778
v5.0.2
chadhietala Oct 1, 2018
b47b436
Fix clobbering issue with `reset`
chadhietala Oct 1, 2018
760bef8
Merge pull request #259 from tildeio/fix-reset
chadhietala Oct 1, 2018
d976e9e
v5.1.0
chadhietala Oct 1, 2018
708d034
v5.1.1
chadhietala Oct 1, 2018
44ef8a5
Add recognize and recognizeAndLoad
chadhietala Oct 2, 2018
358ca31
Make RouteInfo types juat a POJO
chadhietala Oct 3, 2018
5c99b38
Merge pull request #261 from tildeio/add-missing-apis
chadhietala Oct 3, 2018
c6452a6
v5.2.0
chadhietala Oct 3, 2018
a481f0a
Use 'symbols' for accessing state on transiton
chadhietala Oct 3, 2018
8895478
Merge pull request #262 from tildeio/fake-symbols
chadhietala Oct 3, 2018
c82c0ca
v6.0.0
chadhietala Oct 3, 2018
cef1859
[BUGFIX] RouteInfo.find should traverse correctly
chadhietala Oct 25, 2018
56087fd
Merge pull request #266 from tildeio/expose-mapping
chadhietala Oct 31, 2018
e13188d
[BUGFIX] Transition.from should be null not undefined
chadhietala Oct 31, 2018
0d057de
Merge pull request #267 from tildeio/expose-mapping
chadhietala Oct 31, 2018
12e7ef5
v6.0.1
chadhietala Oct 31, 2018
e21b40d
[BUGFIX] url should be correct in the hooks
chadhietala Nov 5, 2018
efdd465
Merge pull request #268 from tildeio/hook-timing
chadhietala Nov 5, 2018
93c0161
v6.0.2
chadhietala Nov 5, 2018
4bdc259
[BUGFIX] Fix mutable QPs through evented hooks
chadhietala Nov 6, 2018
bf2cd5d
Merge pull request #269 from tildeio/fix-mutable-qps-route-info
chadhietala Nov 6, 2018
1ce65e9
v6.0.3
chadhietala Nov 6, 2018
2bad6eb
[BUGFIX] RouteInfo should correctly reflect substate transitons
chadhietala Nov 8, 2018
f50bf13
Merge pull request #270 from tildeio/bugfix-substates
chadhietala Nov 8, 2018
d1361d9
v6.0.4
chadhietala Nov 8, 2018
ffd8dd4
transition.from and transition.to in `routeDidChange` should be a Rou…
chadhietala Nov 17, 2018
f89a80f
Merge pull request #271 from tildeio/thread-routeinfowithattrs
chadhietala Nov 17, 2018
036dd0e
v6.1.0
chadhietala Nov 17, 2018
c4d9772
[BUGFIX] Gracefully handle frozen objects
chadhietala Nov 17, 2018
4b83f11
Merge pull request #272 from tildeio/frozen
chadhietala Nov 17, 2018
77ef65d
v6.1.1
chadhietala Nov 18, 2018
4c0a61c
[bugfix] .apply calls do not get rewritten in Ember
chadhietala Nov 18, 2018
ee608dc
Merge pull request #273 from tildeio/apply
chadhietala Nov 18, 2018
5785ecf
v6.1.2
chadhietala Nov 18, 2018
f7c84e7
[bugfix] fix edge frozen objects
chadhietala Nov 19, 2018
25e122e
Merge pull request #274 from tildeio/edge
chadhietala Nov 19, 2018
490d55f
v6.1.3
chadhietala Nov 19, 2018
842126c
[FEATURE] buildRouteInfoMetadata
chadhietala Dec 5, 2018
2d4dbaf
lock down typescript version
chadhietala Dec 5, 2018
51a3c9c
Merge pull request #275 from tildeio/impl-build-routeinfo-metadata
chadhietala Dec 7, 2018
75799f3
v6.2.0
chadhietala Dec 10, 2018
c916c2b
[BUGFIX] Ensure activeTransiton
chadhietala Dec 10, 2018
b412784
Merge pull request #276 from tildeio/fix-aborts
chadhietala Dec 10, 2018
4b09c3c
v6.2.1
chadhietala Dec 10, 2018
fad4cc2
Fix transition being undefined through substates
chadhietala Jan 9, 2019
bedbf4e
Merge pull request #277 from tildeio/fix-substates
chadhietala Jan 9, 2019
a146607
v6.2.2
chadhietala Jan 9, 2019
a162f48
[BUGFIX] Fix send/trigger call signature
chadhietala Feb 4, 2019
604f7df
Merge pull request #279 from tildeio/fix-trigger-send-signature
chadhietala Feb 4, 2019
2d611a5
v6.2.3
chadhietala Feb 4, 2019
174a00c
Fix logging of messages with sequence numbers (#281)
vincent99 Feb 20, 2019
c315882
Merge pull request #282 from vincent99/master
chadhietala Feb 21, 2019
1596570
Make missing parameter error more descriptive
mario-at-intercom Mar 22, 2019
5efa792
Fix `refresh` in Engines
chadhietala Mar 27, 2019
726513e
Merge pull request #284 from tildeio/fix-engines-refresh
chadhietala Mar 29, 2019
5a897b8
v6.2.4
chadhietala Mar 29, 2019
83500dd
Make missing parameter error more descriptive (#283)
Jun 27, 2019
e6bdee2
[bugfix] Async routes should return promises for metadata if they are…
chadhietala Jun 27, 2019
694e3e2
Merge pull request #287 from tildeio/fix-async-handler-and-metadata
chadhietala Jun 27, 2019
853ba3d
v6.2.5
chadhietala Jun 27, 2019
13b0d13
Upgrade dependencies
xg-wang Sep 15, 2019
1913b2a
Upgrade ember-cli
xg-wang Sep 15, 2019
9db26b0
Upgrade tslint
xg-wang Sep 15, 2019
620e536
Pin ember-cli to 3.9 for node 6
xg-wang Sep 15, 2019
edd278f
Pin typescript version
xg-wang Sep 15, 2019
5adbc7f
Upgrade ember-cli, linting deps, etc (#288)
Sep 18, 2019
4490ab3
Bump broccoli-typescript-compiler
xg-wang Oct 23, 2019
837ad63
refactor: update types for typescript upgrade
xg-wang Oct 31, 2019
b2056f7
Pin engine.io subdependency to avoid issues on Node 6
xg-wang Nov 4, 2019
6faa003
Fix crashing with Babel polyfill / Chrome <= v37.0
raido Jan 18, 2020
393eb9d
Travis Node v6 > v8
raido Jan 25, 2020
d8231d3
Merge pull request #292 from raido/bugfix-not-extensible
rwjblue May 17, 2020
a4bb230
Update queryParamsTransition to not change QueryParams if transition …
richgt Jul 17, 2020
e2780dc
Add test
richgt Jul 19, 2020
ca25143
Merge pull request #293 from richgt/richgt/handle-aborted-qp-transition
Jul 20, 2020
5c5eb3c
Release 6.2.6
Jul 20, 2020
c312f61
Merge pull request #289 from xg-wang/ts
Jul 20, 2020
b961508
Drop Node < 10.
Jul 20, 2020
659607c
Merge pull request #294 from rwjblue/drop-old-node
Jul 20, 2020
85937c4
Add GitHub Actions CI setup
Jul 20, 2020
c6243ce
Remove .travis.yml
Jul 20, 2020
45a549c
Fixup Chrome launcher configuration in CI.
Jul 20, 2020
9acee46
Merge pull request #295 from tildeio/add-github-actions
Jul 20, 2020
bd56d7f
Fix CI badge in README
Jul 20, 2020
5912f3f
Add basic `eslint` setup
Jul 20, 2020
d08de3f
yarn lint:ts --fix
Jul 20, 2020
b5b1796
fixup! Add basic `eslint` setup
Jul 20, 2020
e64ec41
Remove tslint configuration.
Jul 20, 2020
4adc648
Merge pull request #296 from tildeio/linting
Jul 20, 2020
b20d8f5
Update prettier to 2.0.5.
Jul 20, 2020
7f6b097
yarn lint:ts --fix
Jul 20, 2020
a32e99c
Bump broccoli-typescript-compiler
Jul 20, 2020
fc5d3c6
Bump build deps
Jul 20, 2020
d885da2
Merge pull request #298 from tildeio/update-prettier
Jul 20, 2020
b7af0c1
Merge pull request #297 from xg-wang/broccoli-typescript-compiler-bump
Jul 20, 2020
408236a
Update remaining dependencies/devDependencies to latest.
Jul 20, 2020
efbfcee
Merge pull request #299 from tildeio/dependency-updates
Jul 20, 2020
42d26e9
Update Babel to latest.
Jul 20, 2020
49cc073
Merge pull request #300 from tildeio/update-build-pipeline
Jul 20, 2020
ac417d2
Add automated release setup.
Jul 21, 2020
fb40c8d
Merge pull request #301 from tildeio/automated-release-setup
Jul 21, 2020
cfe549c
Release 7.0.0
Jul 21, 2020
8c06ca9
Add better Transition debugging information.
Sep 9, 2020
3ff8080
Merge pull request #305 from tildeio/debugging-info
Sep 9, 2020
c74fc1c
Update release configuration.
Sep 9, 2020
bb16c56
Release 7.1.0
Sep 9, 2020
7ecad99
[REPRODUCTION] routeInfo's are lost on intermediate transitions
rreckonerr Nov 5, 2020
0be0d19
[BUGFIX beta] provide transition to setupContext for internal transit…
rreckonerr Nov 4, 2020
b9ada56
Merge pull request #308 from rreckonerr/fix/provide-transition-object…
Nov 6, 2020
9cb6aa7
Release 7.1.1
Nov 6, 2020
dd12c9c
Upgrade CI
stefanpenner Nov 6, 2020
05c7d90
Merge pull request #311 from tildeio/update-ci
stefanpenner Nov 6, 2020
681cc20
upgrade deps
stefanpenner Nov 6, 2020
41c8394
upgrade deps
stefanpenner Nov 6, 2020
c0ab97d
update deps
stefanpenner Nov 6, 2020
c296705
update deps
stefanpenner Nov 6, 2020
cf669b3
Merge pull request #312 from tildeio/update-deps
stefanpenner Nov 6, 2020
0cb4c88
Fix typo’s
stefanpenner Nov 6, 2020
9b3d00e
Merge pull request #315 from tildeio/fix-other-typos
stefanpenner Nov 6, 2020
e83c782
Simplify TransitionState resolution system.
Sep 10, 2020
bc0ef9f
Make continuation tied to `Transition#isAborted` explicitly.
Sep 10, 2020
0f616a0
[fixes #313] Fix Typo shouldSupercede -> shouldSupersede
stefanpenner Nov 6, 2020
d41d93c
Extra checkForAbort and ensure statically inferable… because ??
stefanpenner Nov 6, 2020
633be66
function extraction to make it clear what the inputs/outputs are for …
stefanpenner Nov 6, 2020
0abaa40
fixup tests
stefanpenner Nov 6, 2020
0b6236e
Merge pull request #314 from tildeio/fix-typo
Nov 9, 2020
c2e85f1
Remove unused variable in test
Nov 9, 2020
867f632
Merge pull request #306 from tildeio/refactor-transition-state-resolu…
Nov 9, 2020
3d7381e
Publish type declaration file in package.json
xg-wang Nov 10, 2020
38f4ca2
Migrate `TransitionAbortedError` to builder + interface.
Sep 11, 2020
f889135
Merge pull request #309 from tildeio/absorb-transition-aborted
Nov 10, 2020
972a757
Simplify type further
stefanpenner Nov 10, 2020
912b2b0
Merge pull request #317 from tildeio/simplify-type
stefanpenner Nov 10, 2020
128fe5f
add livereload so tests reload when i make changes
stefanpenner Nov 11, 2020
76e440c
Merge pull request #316 from xg-wang/publish-type
Nov 12, 2020
3b56380
Merge pull request #318 from tildeio/lr
Nov 12, 2020
6ba71b1
Ensure query params are preserved through an intermediate loading sta…
sly7-7 Mar 4, 2021
2172bfb
Release 7.2.0
rwjblue Mar 7, 2021
0497199
Remove testing for multiple platforms.
rwjblue Mar 7, 2021
10d0760
Merge pull request #320 from tildeio/remove-multi-platform-tests
Mar 7, 2021
89323db
introduce isIntermediate flag in transition
sly7-7 Mar 7, 2021
fe716d5
Merge pull request #321 from sly7-7/introduce-intermediate-flag-in-tr…
Mar 7, 2021
4f5d411
Release 7.3.0
rwjblue Mar 7, 2021
c0ebafc
README: change getHandler to getRoute
Quasar-Kim May 16, 2021
c83aeed
Overhaul types to include more detail
wagenet Jan 28, 2022
eb7f373
Update some dependencies and node version
wagenet Feb 1, 2022
609713d
Fix CI
wagenet Feb 1, 2022
814309d
Switch to rest-params
wagenet Feb 1, 2022
a9b976c
Remove @ts-ignore and improve test types
wagenet Feb 1, 2022
d11de20
Enable more eslint rules
wagenet Feb 1, 2022
383d5d0
Merge pull request #329 from wagenet/better-types
Feb 2, 2022
5510738
Release 8.0.0
Feb 2, 2022
edb2e84
Upgrade broccoli-typescript-compiler
wagenet Feb 2, 2022
ffbdf57
Merge pull request #330 from tildeio/upgrade-b-ts-c
wagenet Feb 3, 2022
5cbbde6
Fix more types
wagenet Feb 2, 2022
6b3d9c9
Add rsvp to peer dependencies
wagenet Feb 2, 2022
634c06f
Add RSVP types
wagenet Feb 3, 2022
41e1150
fixup! Fix more types
wagenet Feb 3, 2022
edcbb7f
Merge pull request #331 from tildeio/more-type-fixes
wagenet Feb 3, 2022
16eada0
Bump version
wagenet Feb 3, 2022
bf4b815
Loosen route generics
wagenet Feb 9, 2022
7bd909d
Merge pull request #324 from Quasar-Kim/readme-patch
wagenet Feb 9, 2022
7c61cf0
Merge pull request #332 from tildeio/looser-route-generics
wagenet Feb 9, 2022
8a55b2e
Release 8.0.2
wagenet Feb 9, 2022
ba914f8
fix undefined routeInfo in routeInfos.find's callback
sly7-7 Aug 26, 2022
8500599
Merge pull request #334 from sly7-7/fix-ember-20056
wagenet Aug 26, 2022
9320c7b
Release v8.0.3
wagenet Aug 26, 2022
787cfbe
Fix followRedirects when source is async and destination is sync
davidtaylorhq Nov 16, 2023
dc948ab
calling recognize should not affect the transition.from query params …
chbonser Nov 27, 2023
95935a6
Prevent recognize from poluting the shared ROUTE_INFOS map by condito…
chbonser Nov 28, 2023
9a61340
Use entirely different query param key for our new test case
chbonser Dec 8, 2023
f39f2df
Merge pull request #336 from chbonser/recognize-qp-issue
wagenet Mar 6, 2024
7f786cc
Release 8.0.4
wagenet Mar 6, 2024
0550206
Fix a type error when `exactOptionalPropertyTypes` is enabled
boris-petrov Mar 9, 2024
7b65768
Merge pull request #339 from boris-petrov/exactOptionalPropertyTypes
wagenet Mar 19, 2024
cea9932
Release 8.0.5
wagenet Mar 19, 2024
000a873
Merge pull request #335 from davidtaylorhq/redirect-following-fix
wagenet Aug 2, 2024
1dabe2a
Release 8.0.6
wagenet Aug 2, 2024
4e5506a
move code into packages/router_js
mansona Mar 10, 2026
97a1d3f
Merge remote-tracking branch 'router_js/master' into rebase-merge
mansona Mar 20, 2026
7825cef
get the build working for workspace router_js
mansona Mar 10, 2026
64b53c4
make sure that router_js is bundled correctly
mansona Mar 10, 2026
ce67a86
fix typechecking
mansona Mar 11, 2026
5887381
run prettier
mansona Mar 11, 2026
92ebac4
fix lint
mansona Mar 11, 2026
115a85b
fix type errors
mansona Mar 12, 2026
c4eeff8
fix prettier
mansona Mar 12, 2026
a9bba4e
fix router_js tests
mansona Mar 13, 2026
160998f
fix typescript error causing real problem in the JS
mansona Mar 13, 2026
b4c8133
remove unused files and dependencies
mansona Mar 15, 2026
8d24855
stop router_js tests from throwing global failures
mansona Mar 15, 2026
fe0a5ec
skip router_js tests that rely on global failures
mansona Mar 15, 2026
e99a7b2
make router_js a devDep of ember-source
mansona Mar 15, 2026
0d246e7
Unskip router_js tests
pichfl Mar 19, 2026
c504ebc
remove old README to remove confusion
mansona Mar 19, 2026
598cf71
stop using custom backburner wrapper in router_js tests
mansona Mar 20, 2026
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
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@
"ember-router-generator": "^2.0.0",
"inflection": "^2.0.1",
"route-recognizer": "^0.3.4",
"router_js": "^8.0.6",
"semver": "^7.5.2",
"silent-error": "^1.1.1",
"simple-html-tokenizer": "^0.5.11"
Expand Down Expand Up @@ -138,6 +137,7 @@
"recast": "^0.22.0",
"resolve.exports": "^2.0.3",
"rollup": "^4.57.1",
"router_js": "workspace:*",
"rsvp": "^4.8.5",
"terser": "^5.42.0",
"testem": "^3.10.1",
Expand Down Expand Up @@ -384,4 +384,4 @@
}
},
"packageManager": "pnpm@10.30.3"
}
}
2 changes: 1 addition & 1 deletion packages/@ember/-internals/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"ember-template-compiler": "workspace:*",
"expect-type": "^0.15.0",
"internal-test-helpers": "workspace:*",
"router_js": "^8.0.6",
"router_js": "workspace:*",
"rsvp": "^4.8.5"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/@ember/application/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@
"ember-template-compiler": "workspace:*",
"expect-type": "^0.15.0",
"internal-test-helpers": "workspace:*",
"router_js": "^8.0.6"
"router_js": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion packages/@ember/engine/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@
"dag-map": "^2.0.2",
"expect-type": "^0.15.0",
"internal-test-helpers": "workspace:*",
"router_js": "^8.0.6"
"router_js": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion packages/@ember/routing/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,6 @@
"dag-map": "^2.0.2",
"expect-type": "^0.15.0",
"internal-test-helpers": "workspace:*",
"router_js": "^8.0.6"
"router_js": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion packages/ember-testing/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@
"backburner.js": "^2.7.0",
"ember": "workspace:*",
"internal-test-helpers": "workspace:*",
"router_js": "^8.0.6"
"router_js": "workspace:*"
}
}
2 changes: 1 addition & 1 deletion packages/ember/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"ember-testing": "workspace:*",
"expect-type": "^0.15.0",
"internal-test-helpers": "workspace:*",
"router_js": "^8.0.6",
"router_js": "workspace:*",
"rsvp": "^4.8.5"
}
}
2 changes: 1 addition & 1 deletion packages/internal-test-helpers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
"dag-map": "^2.0.2",
"ember": "workspace:*",
"ember-template-compiler": "workspace:*",
"router_js": "^8.0.6",
"router_js": "workspace:*",
"rsvp": "^4.8.5",
"simple-html-tokenizer": "^0.5.11"
}
Expand Down
1 change: 1 addition & 0 deletions packages/router_js/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dist/
7 changes: 7 additions & 0 deletions packages/router_js/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/.bundle
/dist
/tmp
/node_modules

dist/tests
.eslintcache
186 changes: 186 additions & 0 deletions packages/router_js/ARCHITECTURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
# [router.js](https://github.com/tildeio/router.js) Architecture

This is a guide to `router.js`'s internals.

`router.js` is a stand-alone microlibrary for client-side routing in JavaScript
applications. It's notably used by the [Ember.js Router][Ember Router].

## Scope of `router.js` and its Dependencies

Ember.js's router consumes `router.js`, which in turn consumes
[route-recognizer](https://github.com/tildeio/route-recognizer).

The division of responsibilities of these three libs is as follows:

### `route-recognizer`

`route-recognizer` is an engine for both parsing/generating URLs into/from
parameters.

It can take a URL like `articles/123/comments` and parse out the parameter
`{ article_id: "123" }`.

It can take `{ article_id: "123" }` and a route descriptor like
`articles/:article_id/comments` and generate `articles/123/comments`.

### `router.js`

`router.js` adds the concept of transitions to `route-recognizer`'s
URL parsing engine.

Transitions can be URL-initiated (via browser navigation) or can be
directly initiated via route name
(e.g. `transitionTo('articles', articleObject)`).

`router.js` resolves all of the model objects that needed to be loaded
in order to enter a route.

e.g. to navigate to `articles/123/comments/2`, a promise for both the
`article` and `comments` routes need to be fulfilled.

### Ember Router

The [Ember Router][] adds a DSL for declaring your app's routes on top of
`router.js`. It defines the API for the `Ember.Route` class that handles
intelligent defaults, rendering templates, and loading data into controllers.

## History

`router.js` has gone through a few iterations between 2013 and 2014:

- July of 2013 – `router.js` adds promise-awareness.
- Jan 2014 – refactored `router.js`'s primitives to handle corner cases.

### Corner Cases

1. Avoid running `model` hooks (responsible for fetching data needed to enter a
route) for shared parent routes.

2. Avoid running model hooks when redirecting in the middle of another transition.
e.g. during a transition to `articles/123/comments/2` you redirect to
`articles/123/comments/3` after resolving Article 123 and you want to
avoid re-running the hooks to load Article 123 again.

3. Handle two different approaches to transitions:
- URL based (where a URL is parsed into route parameters that are used to
load all the data needed to enter a route (e.g. `{ article_id: 123 }`).

- direct named transition-based, where a route name and any context objects
are provided (e.g. `transitionTo('article', articleObject)`), and the
provided context object(s) might be promises that can't be serialized
into URL params until they've fulfilled.

## Classes

### `HandlerInfo`

A `HandlerInfo` is an object that describes the state of a route handler.

For example, the `foo/bar` URL likely breaks down into a hierarchy of two
handlers: the `foo` handler and the `bar` handler. A "handler" is just an
object that defines hooks that `router.js` will call in the course of a
transition (e.g. `model`, `beforeModel`, `setup`, etc.).

In Ember.js, handlers are instances of `Ember.Route`.

A `HandlerInfo` instance contains that handler's model (e.g. `articleObject`),
or the URL parameters associated with the current state of that handler
(e.g. `{ article_id: '123' }`).

Because `router.js` allows you to reuse handlers between different routes and
route hierarchies, we need `HandlerInfo`s to describe the state of each route
hierarchy.

`HandlerInfo` is a top-level class with 3 subclasses:

#### `UnresolvedHandlerInfoByParam`

`UnresolvedHandlerInfoByParam` has the URL params stored on it which it can use
to resolve itself (by calling the handler's `beforeModel`/`model`/`afterModel`
hooks).

#### `UnresolvedHandlerInfoByObject`

`UnresolvedHandlerInfoByObject` has a context object, but no URL params.
It can use the context to resolve itself and serialize into URL params once
the context object is fulfilled.

#### `ResolvedHandlerInfo`

`ResolvedHandlerInfo` has calculated its URL params and resolved context/model
object.

#### Public API

`HandlerInfo` has just a `resolve` method which fires all `model` hooks and
ultimately resolves to a `ResolvedHandlerInfo` object.

The `ResolvedHandlerInfo`'s `resolve` method just returns a promise that
fulfills with itself.

### `TransitionState`

The `TransitionState` object consists of an array of `HandlerInfo`s
(though more might be added to it; not sure yet).

#### Public API

It too has a public API consisting only of a `resolve` method that
will loop through all of its `HandlerInfo`s, swapping unresolved
`HandlerInfo`s with `ResolvedHandlerInfo`s as it goes.

Instances of `Router` and `Transition` contain `TransitionState`
properties, which is useful since, depending on whether or not there is
a currently active transition, the "starting point" of a transition
might be the router's current hierarchy of `ResolvedHandlerInfo`s, or it
might be a transition's hierarchy of `ResolvedHandlerInfo`s mixed with
unresolved HandlerInfos.

### `TransitionIntent`

A `TransitionIntent` describes an attempt to transition.

via URL
or by named transition (via its subclasses `URLTransitionIntent` and
`NamedTransitionIntent`).

#### `URLTransitionIntent`

A `URLTransitionIntent` has a `url` property.

#### `NamedTransitionIntent`

A `NamedTransitionIntent` has a target route `name` and `contexts` array
property.

This class defines only one method `applyToState` which takes an instance of
`TransitionState` and plays this `TransitionIntent` on top of it to generate
and return a new instance of `TransitionState` that contains a combination of
resolved and unresolved `HandlerInfo`s.

`TransitionIntent`s don't care whether the provided state comes from a router
or a currently active transition; whatever you provide it, both subclasses of
`TransitionIntent`s are smart enough to spit out a `TransitionState`
containing `HandlerInfo`s that still need to be resolved in order to complete
a transition.

Much of the messy logic that used to live in `paramsForHandler`/`getMatchPoint`
now live way less messily in the `applyToState` methods.

This makes it easy to detect corner cases like no-op transitions – if the
returned `TransitionState` consists entirely of `ResolvedHandlerInfo`s, there's
no need to fire off a transition. It simplifies things like redirecting into a
child route without winding up in some infinite loop on the parent route hook
that's doing the redirecting.

This simplifies `Transition#retry`; to retry a transition, provide its `intent`
property to the transitioning function used by `transitionTo`, `handleURL`.
`handle` function will make the right choice as to the correct `TransitionState`
to pass to the intent's `applyToState` method.

This approach is used to implement `Router#isActive`. You can determine if a
destination route is active by constructing a `TransitionIntent`, applying it
to the router's current state, and returning `true` if all of the
`HandlerInfo`s are already resolved.

[Ember Router]: http://emberjs.com/guides/routing/
Loading
Loading