1.1.0-alpha start
This commit is contained in:
parent
e9721554cc
commit
5e88ef16f9
27 changed files with 939 additions and 1406 deletions
|
@ -5,487 +5,496 @@
|
|||
<entry key="analyzer">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/analyzer-0.30.0+2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/analyzer-0.30.0+4/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="angel_http_exception">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_http_exception-1.0.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="angel_model">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/angel_model-1.0.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_model-1.0.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="angel_route">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="args">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/args-0.13.7/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/args-1.0.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="async">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/async-1.13.3/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="barback">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/barback-0.15.2+11/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/barback-0.15.2+11/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="body_parser">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/body_parser-1.0.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/body_parser-1.0.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="boolean_selector">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/boolean_selector-1.0.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="charcode">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/charcode-1.1.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="cli_util">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/cli_util-0.1.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/cli_util-0.1.2+1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="collection">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/collection-1.14.3/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/collection-1.14.3/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="container">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/container-0.1.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/container-0.1.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="convert">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/convert-2.0.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/convert-2.0.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="crypto">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/crypto-2.0.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/crypto-2.0.2+1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="csslib">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/csslib-0.14.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/csslib-0.14.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="flatten">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flatten-1.0.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/flatten-1.0.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="front_end">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/front_end-0.1.0-alpha.4/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/front_end-0.1.0-alpha.4.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="glob">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/glob-1.1.3/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/glob-1.1.3/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="html">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/html-0.13.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/html-0.13.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="http">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http-0.11.3+14/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http-0.11.3+14/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="http_multi_server">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http_multi_server-2.0.3/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_multi_server-2.0.3/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="http_parser">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http_parser-3.1.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="http_server">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http_server-0.9.6/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_server-0.9.6/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="isolate">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/isolate-1.0.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/isolate-1.1.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="js">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/js-0.6.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/js-0.6.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="json_god">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/json_god-2.0.0-beta+1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/json_god-2.0.0-beta+1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="kernel">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/kernel-0.3.0-alpha.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/kernel-0.3.0-alpha.1.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="logging">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/logging-0.11.3+1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/logging-0.11.3+1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="matcher">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/matcher-0.12.1+1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.1+4/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="merge_map">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/merge_map-1.0.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/merge_map-1.0.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="meta">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/meta-1.1.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/meta-1.1.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="mime">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/mime-0.9.3/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/mime-0.9.3/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="mock_request">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/mock_request-1.0.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/mock_request-1.0.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="node_preamble">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/node_preamble-1.4.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/node_preamble-1.4.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="package_config">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/package_config-1.0.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_config-1.0.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="package_resolver">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/package_resolver-1.0.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_resolver-1.0.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="path">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/path-1.4.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/path-1.4.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="plugin">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/plugin-0.2.0+1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/plugin-0.2.0+1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="pool">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/pool-1.3.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pool-1.3.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="pub_semver">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/pub_semver-1.3.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pub_semver-1.3.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="quiver_hashcode">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/quiver_hashcode-1.0.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/quiver_hashcode-1.0.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="random_string">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/random_string-0.0.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/random_string-0.0.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="shelf">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf-0.6.8/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf-0.7.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="shelf_packages_handler">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf_packages_handler-1.0.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_packages_handler-1.0.3/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="shelf_static">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf_static-0.2.5/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_static-0.2.5/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="shelf_web_socket">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf_web_socket-0.2.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_web_socket-0.2.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="source_map_stack_trace">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/source_map_stack_trace-1.1.4/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_map_stack_trace-1.1.4/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="source_maps">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/source_maps-0.10.4/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_maps-0.10.4/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="source_span">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/source_span-1.4.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_span-1.4.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="stack_trace">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/stack_trace-1.8.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.8.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="stream_channel">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/stream_channel-1.6.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stream_channel-1.6.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="string_scanner">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/string_scanner-1.0.2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.2/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="term_glyph">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/term_glyph-1.0.0/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.0.0/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="test">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/test-0.12.24+2/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/test-0.12.24+6/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="tuple">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/tuple-1.0.1/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/tuple-1.0.1/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="typed_data">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/typed_data-1.1.4/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.4/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="utf">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/utf-0.9.0+3/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/utf-0.9.0+3/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="watcher">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/watcher-0.9.7+3/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/watcher-0.9.7+4/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="web_socket_channel">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/web_socket_channel-1.0.5/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/web_socket_channel-1.0.5/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="yaml">
|
||||
<value>
|
||||
<list>
|
||||
<option value="$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/yaml-2.1.12/lib" />
|
||||
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.12/lib" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
</option>
|
||||
</properties>
|
||||
<CLASSES>
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/analyzer-0.30.0+2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/angel_model-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/args-0.13.7/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/async-1.13.3/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/barback-0.15.2+11/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/body_parser-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/boolean_selector-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/charcode-1.1.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/cli_util-0.1.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/collection-1.14.3/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/container-0.1.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/convert-2.0.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/crypto-2.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/csslib-0.14.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flatten-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/front_end-0.1.0-alpha.4/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/glob-1.1.3/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/html-0.13.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http-0.11.3+14/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http_multi_server-2.0.3/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http_parser-3.1.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/http_server-0.9.6/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/isolate-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/js-0.6.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/json_god-2.0.0-beta+1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/kernel-0.3.0-alpha.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/logging-0.11.3+1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/matcher-0.12.1+1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/merge_map-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/meta-1.1.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/mime-0.9.3/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/mock_request-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/node_preamble-1.4.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/package_config-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/package_resolver-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/path-1.4.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/plugin-0.2.0+1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/pool-1.3.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/pub_semver-1.3.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/quiver_hashcode-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/random_string-0.0.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf-0.6.8/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf_packages_handler-1.0.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf_static-0.2.5/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/shelf_web_socket-0.2.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/source_map_stack_trace-1.1.4/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/source_maps-0.10.4/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/source_span-1.4.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/stack_trace-1.8.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/stream_channel-1.6.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/string_scanner-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/term_glyph-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/test-0.12.24+2/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/tuple-1.0.1/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/typed_data-1.1.4/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/utf-0.9.0+3/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/watcher-0.9.7+3/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/web_socket_channel-1.0.5/lib" />
|
||||
<root url="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/yaml-2.1.12/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/analyzer-0.30.0+4/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_http_exception-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_model-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/args-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/barback-0.15.2+11/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/body_parser-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/cli_util-0.1.2+1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/collection-1.14.3/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/container-0.1.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/convert-2.0.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/crypto-2.0.2+1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/csslib-0.14.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/flatten-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/front_end-0.1.0-alpha.4.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/glob-1.1.3/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/html-0.13.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http-0.11.3+14/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_multi_server-2.0.3/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/http_server-0.9.6/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/isolate-1.1.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/js-0.6.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/json_god-2.0.0-beta+1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/kernel-0.3.0-alpha.1.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/logging-0.11.3+1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.1+4/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/merge_map-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/meta-1.1.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/mime-0.9.3/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/mock_request-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/node_preamble-1.4.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_config-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/package_resolver-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/path-1.4.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/plugin-0.2.0+1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pool-1.3.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pub_semver-1.3.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/quiver_hashcode-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/random_string-0.0.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf-0.7.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_packages_handler-1.0.3/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_static-0.2.5/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/shelf_web_socket-0.2.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_map_stack_trace-1.1.4/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_maps-0.10.4/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/source_span-1.4.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.8.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/stream_channel-1.6.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.2/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.0.0/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/test-0.12.24+6/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/tuple-1.0.1/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.4/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/utf-0.9.0+3/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/watcher-0.9.7+4/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/web_socket_channel-1.0.5/lib" />
|
||||
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.12/lib" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
|
@ -1,25 +1,26 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Dart SDK">
|
||||
<CLASSES>
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/async" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/collection" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/convert" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/core" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/developer" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/html" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/indexed_db" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/io" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/isolate" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/js" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/js_util" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/math" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/mirrors" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/svg" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/typed_data" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/web_audio" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/web_gl" />
|
||||
<root url="file://C:/Program Files/Dart/dart-sdk/lib/web_sql" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/async" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/collection" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/convert" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/core" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/developer" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/html" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/indexed_db" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/io" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/isolate" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/js" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/js_util" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/math" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/mirrors" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/svg" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/typed_data" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/web_audio" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/web_gl" />
|
||||
<root url="file:///usr/local/opt/dart/libexec/lib/web_sql" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
|
@ -2,8 +2,7 @@
|
|||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://C:\Users\thosa\Source\Angel\framework\.idea\angel_framework.iml" filepath="C:\Users\thosa\Source\Angel\framework\.idea\angel_framework.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/framework.iml" filepath="$PROJECT_DIR$/.idea/framework.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/framework.iml" filepath="$PROJECT_DIR$/framework.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,8 @@
|
|||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="cannot write after close in streaming_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true" nameIsGenerated="true">
|
||||
<option name="filePath" value="$PROJECT_DIR$/test/streaming_test.dart" />
|
||||
<option name="scope" value="GROUP_OR_TEST_BY_NAME" />
|
||||
<option name="testName" value="cannot write after close" />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
1279
.idea/workspace.xml
1279
.idea/workspace.xml
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,7 @@
|
|||
# 1.1.0-alpha
|
||||
* Removed all `@deprecated` members.
|
||||
* Removed `@Hooked`, `beforeProcessed`, and `afterProcessed`.
|
||||
|
||||
# 1.0.10
|
||||
* Closed [#162](https://github.com/angel-dart/framework/issues/162), fixing a caching bug
|
||||
that would cause multiple requests to the same URL to fail.
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
/// An easily-extensible web server framework in Dart.
|
||||
library angel_framework;
|
||||
|
||||
export 'src/http/http.dart';
|
||||
export 'src/defs.dart';
|
||||
export 'src/http/http.dart';
|
|
@ -255,14 +255,6 @@ HookedServiceEventListener addCreatedAt(
|
|||
};
|
||||
}
|
||||
|
||||
/// Typo: Use [addUpdatedAt] instead.
|
||||
@deprecated
|
||||
HookedServiceEventListener addUpatedAt({
|
||||
assign(obj, String now),
|
||||
String key,
|
||||
}) =>
|
||||
addUpdatedAt(assign: assign, key: key);
|
||||
|
||||
/// Serializes the current time to `e.data` or `e.result`.
|
||||
/// You can provide an [assign] function to set the property on your object, and skip reflection.
|
||||
/// If [serialize] is `true` (default), then the set date will be a `String`. If not, a raw `DateTime` will be used.
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
library angel_framework.defs;
|
||||
import '../common.dart';
|
||||
export '../common.dart';
|
||||
|
||||
/// Use [Model] instead.
|
||||
@deprecated
|
||||
class MemoryModel {
|
||||
int id;
|
||||
}
|
|
@ -1,6 +1,10 @@
|
|||
final Map<Symbol, String> _cache = {};
|
||||
|
||||
String fastNameFromSymbol(Symbol s) {
|
||||
String str = s.toString();
|
||||
int open = str.indexOf('"');
|
||||
int close = str.lastIndexOf('"');
|
||||
return str.substring(open + 1, close);
|
||||
}
|
||||
return _cache.putIfAbsent(s, () {
|
||||
String str = s.toString();
|
||||
int open = str.indexOf('"');
|
||||
int close = str.lastIndexOf('"');
|
||||
return str.substring(open + 1, close);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,183 +0,0 @@
|
|||
library angel_framework.http.angel_http_exception;
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
/// Basically the same as
|
||||
/// [feathers-errors](https://github.com/feathersjs/feathers-errors).
|
||||
class AngelHttpException implements Exception {
|
||||
var error;
|
||||
|
||||
/// A list of errors that occurred when this exception was thrown.
|
||||
final List<String> errors = [];
|
||||
|
||||
/// The cause of this exception.
|
||||
String message;
|
||||
|
||||
/// The [StackTrace] associated with this error.
|
||||
StackTrace stackTrace;
|
||||
|
||||
/// An HTTP status code this exception will throw.
|
||||
int statusCode;
|
||||
|
||||
AngelHttpException(this.error,
|
||||
{this.message: '500 Internal Server Error',
|
||||
this.stackTrace,
|
||||
this.statusCode: 500,
|
||||
List<String> errors: const []}) {
|
||||
if (errors != null) {
|
||||
this.errors.addAll(errors);
|
||||
}
|
||||
}
|
||||
|
||||
Map toJson() {
|
||||
return {
|
||||
'isError': true,
|
||||
'status_code': statusCode,
|
||||
'message': message,
|
||||
'errors': errors
|
||||
};
|
||||
}
|
||||
|
||||
Map toMap() => toJson();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "$statusCode: $message";
|
||||
}
|
||||
|
||||
factory AngelHttpException.fromMap(Map data) {
|
||||
return new AngelHttpException(null,
|
||||
statusCode: data['status_code'] ?? data['statusCode'],
|
||||
message: data['message'],
|
||||
errors: data['errors']);
|
||||
}
|
||||
|
||||
factory AngelHttpException.fromJson(String json) =>
|
||||
new AngelHttpException.fromMap(JSON.decode(json));
|
||||
|
||||
/// Throws a 400 Bad Request error, including an optional arrray of (validation?)
|
||||
/// errors you specify.
|
||||
factory AngelHttpException.badRequest(
|
||||
{String message: '400 Bad Request', List<String> errors: const []}) =>
|
||||
new AngelHttpException(null,
|
||||
message: message, errors: errors, statusCode: 400);
|
||||
|
||||
/// Throws a 401 Not Authenticated error.
|
||||
factory AngelHttpException.notAuthenticated(
|
||||
{String message: '401 Not Authenticated'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 401);
|
||||
|
||||
/// Throws a 402 Payment Required error.
|
||||
factory AngelHttpException.paymentRequired(
|
||||
{String message: '402 Payment Required'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 402);
|
||||
|
||||
/// Throws a 403 Forbidden error.
|
||||
factory AngelHttpException.forbidden({String message: '403 Forbidden'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 403);
|
||||
|
||||
/// Throws a 404 Not Found error.
|
||||
factory AngelHttpException.notFound({String message: '404 Not Found'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 404);
|
||||
|
||||
/// Throws a 405 Method Not Allowed error.
|
||||
factory AngelHttpException.methodNotAllowed(
|
||||
{String message: '405 Method Not Allowed'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 405);
|
||||
|
||||
/// Throws a 406 Not Acceptable error.
|
||||
factory AngelHttpException.notAcceptable(
|
||||
{String message: '406 Not Acceptable'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 406);
|
||||
|
||||
/// Throws a 408 Timeout error.
|
||||
factory AngelHttpException.methodTimeout({String message: '408 Timeout'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 408);
|
||||
|
||||
/// Throws a 409 Conflict error.
|
||||
factory AngelHttpException.conflict({String message: '409 Conflict'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 409);
|
||||
|
||||
/// Throws a 422 Not Processable error.
|
||||
factory AngelHttpException.notProcessable(
|
||||
{String message: '422 Not Processable'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 422);
|
||||
|
||||
/// Throws a 501 Not Implemented error.
|
||||
factory AngelHttpException.notImplemented(
|
||||
{String message: '501 Not Implemented'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 501);
|
||||
|
||||
/// Throws a 503 Unavailable error.
|
||||
factory AngelHttpException.unavailable({String message: '503 Unavailable'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 503);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.BadRequest(
|
||||
{String message: '400 Bad Request', List<String> errors: const []}) =>
|
||||
new AngelHttpException(null,
|
||||
message: message, errors: errors, statusCode: 400);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.NotAuthenticated(
|
||||
{String message: '401 Not Authenticated'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 401);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.PaymentRequired(
|
||||
{String message: '402 Payment Required'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 402);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.Forbidden({String message: '403 Forbidden'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 403);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.NotFound({String message: '404 Not Found'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 404);
|
||||
|
||||
@deprecated
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
factory AngelHttpException.MethodNotAllowed(
|
||||
{String message: '405 Method Not Allowed'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 405);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.NotAcceptable(
|
||||
{String message: '406 Not Acceptable'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 406);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.MethodTimeout({String message: '408 Timeout'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 408);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.Conflict({String message: '409 Conflict'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 409);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.NotProcessable(
|
||||
{String message: '422 Not Processable'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 422);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.NotImplemented(
|
||||
{String message: '501 Not Implemented'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 501);
|
||||
|
||||
/// DEPRECATED: Use lowercase constructor instead.
|
||||
@deprecated
|
||||
factory AngelHttpException.Unavailable({String message: '503 Unavailable'}) =>
|
||||
new AngelHttpException(null, message: message, statusCode: 503);
|
||||
}
|
|
@ -6,9 +6,4 @@ import 'response_context.dart';
|
|||
|
||||
abstract class AngelMiddleware {
|
||||
Future<bool> call(RequestContext req, ResponseContext res);
|
||||
}
|
||||
|
||||
@Deprecated('Use AngelMiddleware instead')
|
||||
abstract class BaseMiddleware {
|
||||
Future<bool> call(RequestContext req, ResponseContext res);
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
/// Thrown whenever Angel completely fails to respond to a request.
|
||||
|
@ -5,7 +6,8 @@ class AngelFatalError {
|
|||
var error;
|
||||
HttpRequest request;
|
||||
StackTrace stack;
|
||||
Zone zone;
|
||||
|
||||
AngelFatalError({this.request, this.error, this.stack});
|
||||
AngelFatalError({this.request, this.error, this.stack, this.zone});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
library angel_framework.http;
|
||||
|
||||
import 'dart:async';
|
||||
import 'package:angel_http_exception/angel_http_exception.dart';
|
||||
import 'package:merge_map/merge_map.dart';
|
||||
import '../util.dart';
|
||||
import 'angel_http_exception.dart';
|
||||
import 'request_context.dart';
|
||||
import 'response_context.dart';
|
||||
import 'metadata.dart';
|
||||
|
@ -624,34 +624,6 @@ class HookedServiceEvent {
|
|||
static const List<String> all = const [
|
||||
indexed, read, created, modified, updated, removed
|
||||
];
|
||||
|
||||
/// Use [indexed] instead.
|
||||
@deprecated
|
||||
static const String INDEXED = indexed;
|
||||
|
||||
/// Use [read] instead.
|
||||
@deprecated
|
||||
static const String READ = read;
|
||||
|
||||
/// Use [created] instead.
|
||||
@deprecated
|
||||
static const String CREATED = created;
|
||||
|
||||
/// Use [modified] instead.
|
||||
@deprecated
|
||||
static const String MODIFIED = modified;
|
||||
|
||||
/// Use [updated] instead.
|
||||
@deprecated
|
||||
static const String UPDATED = updated;
|
||||
|
||||
/// Use [removed] instead.
|
||||
@deprecated
|
||||
static const String REMOVED = removed;
|
||||
|
||||
/// Use [all] instead.
|
||||
@deprecated
|
||||
static const List<String> ALL = all;
|
||||
|
||||
/// Use this to end processing of an event.
|
||||
void cancel([result]) {
|
||||
|
|
|
@ -4,10 +4,11 @@ library angel_framework.http;
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'server.dart' show ServerGenerator;
|
||||
export 'package:angel_http_exception/angel_http_exception.dart';
|
||||
export 'package:angel_model/angel_model.dart';
|
||||
export 'package:angel_route/angel_route.dart';
|
||||
export 'package:body_parser/body_parser.dart' show FileUploadInfo;
|
||||
export 'angel_base.dart';
|
||||
export 'angel_http_exception.dart';
|
||||
export 'anonymous_service.dart';
|
||||
export 'base_middleware.dart';
|
||||
export 'base_plugin.dart';
|
||||
|
@ -16,7 +17,6 @@ export 'fatal_error.dart';
|
|||
export 'hooked_service.dart';
|
||||
export 'map_service.dart';
|
||||
export 'metadata.dart';
|
||||
export 'memory_service.dart';
|
||||
export 'request_context.dart';
|
||||
export 'response_context.dart';
|
||||
export 'routable.dart';
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'angel_http_exception.dart';
|
||||
import 'package:angel_http_exception/angel_http_exception.dart';
|
||||
import 'service.dart';
|
||||
|
||||
/// A basic service that manages an in-memory list of maps.
|
||||
|
|
|
@ -1,123 +0,0 @@
|
|||
library angel_framework.http.memory_service;
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:mirrors';
|
||||
import 'package:json_god/json_god.dart' as god;
|
||||
import 'package:merge_map/merge_map.dart';
|
||||
import '../../common.dart';
|
||||
import 'angel_http_exception.dart';
|
||||
import 'service.dart';
|
||||
|
||||
int _getId(id) {
|
||||
try {
|
||||
return int.parse(id.toString());
|
||||
} catch (e) {
|
||||
throw new AngelHttpException.badRequest(message: 'Invalid ID.');
|
||||
}
|
||||
}
|
||||
|
||||
/// DEPRECATED: Use MapService instead.
|
||||
///
|
||||
/// An in-memory [Service].
|
||||
@deprecated
|
||||
class MemoryService<T> extends Service {
|
||||
/// If set to `true`, clients can remove all items by passing a `null` `id` to `remove`.
|
||||
///
|
||||
/// `false` by default.
|
||||
final bool allowRemoveAll;
|
||||
|
||||
//// The data contained in this service.
|
||||
final Map<int, Model> items = {};
|
||||
|
||||
MemoryService({this.allowRemoveAll: false}) : super() {
|
||||
if (!reflectType(T).isAssignableTo(reflectType(Model))) {
|
||||
throw new Exception(
|
||||
"MemoryServices only support classes that inherit from Model.");
|
||||
}
|
||||
}
|
||||
|
||||
_makeJson(int index, Model t) {
|
||||
return t..id = index.toString();
|
||||
}
|
||||
|
||||
Future<List> index([Map params]) async {
|
||||
return items.keys
|
||||
.where((index) => items[index] != null)
|
||||
.map((index) => _makeJson(index, items[index]))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Future read(id, [Map params]) async {
|
||||
int desiredId = _getId(id);
|
||||
if (items.containsKey(desiredId)) {
|
||||
Model found = items[desiredId];
|
||||
if (found != null) {
|
||||
return _makeJson(desiredId, found);
|
||||
} else
|
||||
throw new AngelHttpException.notFound();
|
||||
} else
|
||||
throw new AngelHttpException.notFound();
|
||||
}
|
||||
|
||||
Future create(data, [Map params]) async {
|
||||
//try {
|
||||
Model created =
|
||||
(data is Model) ? data : god.deserializeDatum(data, outputType: T);
|
||||
|
||||
int size = items.length;
|
||||
created.id = size.toString();
|
||||
items[size] = created;
|
||||
return created;
|
||||
/*} catch (e) {
|
||||
throw new AngelHttpException.BadRequest(message: 'Invalid data.');
|
||||
}*/
|
||||
}
|
||||
|
||||
Future modify(id, data, [Map params]) async {
|
||||
int desiredId = _getId(id);
|
||||
if (items.containsKey(desiredId)) {
|
||||
try {
|
||||
Map existing = god.serializeObject(items[desiredId]);
|
||||
data = mergeMap([existing, data]);
|
||||
items[desiredId] =
|
||||
(data is Map) ? god.deserializeDatum(data, outputType: T) : data;
|
||||
return _makeJson(desiredId, items[desiredId]);
|
||||
} catch (e) {
|
||||
throw new AngelHttpException.badRequest(message: 'Invalid data.');
|
||||
}
|
||||
} else
|
||||
throw new AngelHttpException.notFound();
|
||||
}
|
||||
|
||||
Future update(id, data, [Map params]) async {
|
||||
int desiredId = _getId(id);
|
||||
if (items.containsKey(desiredId)) {
|
||||
try {
|
||||
items[desiredId] =
|
||||
(data is Map) ? god.deserializeDatum(data, outputType: T) : data;
|
||||
return _makeJson(desiredId, items[desiredId]);
|
||||
} catch (e) {
|
||||
throw new AngelHttpException.badRequest(message: 'Invalid data.');
|
||||
}
|
||||
} else
|
||||
throw new AngelHttpException.notFound();
|
||||
}
|
||||
|
||||
Future remove(id, [Map params]) async {
|
||||
if (id == null ||
|
||||
id == 'null' &&
|
||||
(allowRemoveAll == true ||
|
||||
params?.containsKey('provider') != true)) {
|
||||
items.clear();
|
||||
return {};
|
||||
}
|
||||
|
||||
int desiredId = _getId(id);
|
||||
if (items.containsKey(desiredId)) {
|
||||
Model item = items[desiredId];
|
||||
items[desiredId] = null;
|
||||
return _makeJson(desiredId, item);
|
||||
} else
|
||||
throw new AngelHttpException.notFound();
|
||||
}
|
||||
}
|
|
@ -9,13 +9,6 @@ class Middleware {
|
|||
const Middleware(this.handlers);
|
||||
}
|
||||
|
||||
/// Annotation to set a service up to release hooks on every action.
|
||||
class Hooked {
|
||||
const Hooked();
|
||||
}
|
||||
|
||||
const Hooked hooked = const Hooked();
|
||||
|
||||
/// Attaches hooks to a [HookedService].
|
||||
class Hooks {
|
||||
final List<HookedServiceEventListener> before;
|
||||
|
|
|
@ -130,12 +130,6 @@ class RequestContext {
|
|||
io.headers.value("X-Requested-With")?.trim()?.toLowerCase() ==
|
||||
'xmlhttprequest';
|
||||
|
||||
@deprecated
|
||||
HttpRequest get underlyingRequest {
|
||||
throw new Exception(
|
||||
'`RequestContext#underlyingRequest` is deprecated. Please update your application to use the newer `RequestContext#io`.');
|
||||
}
|
||||
|
||||
/// Magically transforms an [HttpRequest] into a [RequestContext].
|
||||
static Future<RequestContext> from(HttpRequest request, Angel app) async {
|
||||
RequestContext ctx = new RequestContext();
|
||||
|
|
|
@ -89,21 +89,9 @@ class ResponseContext implements StreamSink<List<int>>, StringSink {
|
|||
/// A set of UTF-8 encoded bytes that will be written to the response.
|
||||
BytesBuilder get buffer => _buffer;
|
||||
|
||||
/// Please use `statusCode=` instead.'
|
||||
@deprecated
|
||||
void status(int code) {
|
||||
statusCode = code;
|
||||
}
|
||||
|
||||
/// The underlying [HttpResponse] under this instance.
|
||||
final HttpResponse io;
|
||||
|
||||
@deprecated
|
||||
HttpResponse get underlyingRequest {
|
||||
throw new Exception(
|
||||
'`ResponseContext#underlyingResponse` is deprecated. Please update your application to use the newer `ResponseContext#io`.');
|
||||
}
|
||||
|
||||
/// Gets the Content-Type header.
|
||||
ContentType get contentType {
|
||||
if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) return null;
|
||||
|
@ -135,7 +123,7 @@ class ResponseContext implements StreamSink<List<int>>, StringSink {
|
|||
StateError _closed() => new StateError('Cannot modify a closed response.');
|
||||
|
||||
/// Sends a download as a response.
|
||||
download(File file, {String filename}) async {
|
||||
Future download(File file, {String filename}) async {
|
||||
if (!_isOpen) throw _closed();
|
||||
|
||||
headers["Content-Disposition"] =
|
||||
|
@ -163,7 +151,7 @@ class ResponseContext implements StreamSink<List<int>>, StringSink {
|
|||
(_buffer as _LockableBytesBuilder)._lock();
|
||||
}
|
||||
|
||||
_isOpen = false;
|
||||
_isOpen = _useStream = false;
|
||||
_isClosed = true;
|
||||
|
||||
if (_done?.isCompleted == false) _done.complete();
|
||||
|
@ -177,15 +165,6 @@ class ResponseContext implements StreamSink<List<int>>, StringSink {
|
|||
_isOpen = false;
|
||||
}
|
||||
|
||||
/// Sets a response header to the given value, or retrieves its value.
|
||||
@Deprecated('Please use `headers` instead.')
|
||||
header(String key, [String value]) {
|
||||
if (value == null)
|
||||
return headers[key];
|
||||
else
|
||||
headers[key] = value;
|
||||
}
|
||||
|
||||
/// Serializes JSON to the response.
|
||||
void json(value) => serialize(value, contentType: ContentType.JSON);
|
||||
|
||||
|
@ -302,10 +281,7 @@ class ResponseContext implements StreamSink<List<int>>, StringSink {
|
|||
}
|
||||
|
||||
/// Copies a file's contents into the response buffer.
|
||||
Future sendFile(File file,
|
||||
{@deprecated int chunkSize,
|
||||
@deprecated int sleepMs: 0,
|
||||
@deprecated bool resumable: true}) async {
|
||||
Future sendFile(File file) async {
|
||||
if (_isClosed) throw _closed();
|
||||
|
||||
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
||||
|
@ -331,33 +307,12 @@ class ResponseContext implements StreamSink<List<int>>, StringSink {
|
|||
|
||||
/// Streams a file to this response.
|
||||
///
|
||||
// ignore: deprecated_member_use
|
||||
/// You can optionally transform the file stream with a [codec].
|
||||
Future streamFile(File file,
|
||||
{@deprecated int chunkSize,
|
||||
@deprecated int sleepMs: 0,
|
||||
@deprecated bool resumable: true,
|
||||
|
||||
/// Use [encoders] instead of manually specifying a codec.
|
||||
@deprecated Codec<List<int>, List<int>> codec}) async {
|
||||
Future streamFile(File file) {
|
||||
if (_isClosed) throw _closed();
|
||||
|
||||
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
||||
|
||||
// ignore: deprecated_member_use
|
||||
if (codec != null) {
|
||||
end();
|
||||
willCloseItself = true;
|
||||
|
||||
// ignore: deprecated_member_use
|
||||
Stream stream = codec != null
|
||||
// ignore: deprecated_member_use
|
||||
? file.openRead().transform(codec.encoder)
|
||||
: file.openRead();
|
||||
await stream.pipe(io);
|
||||
} else {
|
||||
await file.openRead().pipe(this);
|
||||
}
|
||||
return file.openRead().pipe(this);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -89,18 +89,20 @@ class Routable extends Router {
|
|||
return super.addRoute(method, path, handler, middleware: handlerSequence);
|
||||
}
|
||||
|
||||
void use(Pattern path, Router router,
|
||||
{bool hooked: true, String namespace: null}) {
|
||||
/// Mounts the given [router] on this instance.
|
||||
///
|
||||
/// The [router] may only omitted when called via
|
||||
/// an [Angel] instance.
|
||||
///
|
||||
/// Returns either a [Route] or a [Service] (if one was mounted).
|
||||
use(Pattern path, [Router router, String namespace = null]) {
|
||||
Router _router = router;
|
||||
Service service;
|
||||
|
||||
// If we need to hook this service, do it here. It has to be first, or
|
||||
// else all routes will point to the old service.
|
||||
if (router is Service) {
|
||||
Hooked hookedDeclaration = getAnnotation(router, Hooked);
|
||||
_router = service = (hookedDeclaration != null || hooked)
|
||||
? new HookedService(router)
|
||||
: router;
|
||||
_router = service = new HookedService(router);
|
||||
_services[path
|
||||
.toString()
|
||||
.trim()
|
||||
|
@ -135,13 +137,13 @@ class Routable extends Router {
|
|||
Map copiedProperties = new Map.from(router.properties);
|
||||
for (String propertyName in copiedProperties.keys) {
|
||||
properties.putIfAbsent("$middlewarePrefix$propertyName",
|
||||
() => copiedMiddleware[propertyName]);
|
||||
() => copiedMiddleware[propertyName]);
|
||||
}
|
||||
}
|
||||
|
||||
// _router.dumpTree(header: 'Mounting on "$path":');
|
||||
// root.child(path, debug: debug, handlers: handlers).addChild(router.root);
|
||||
mount(path, _router);
|
||||
var mounted = mount(path, _router);
|
||||
|
||||
if (_router is Routable) {
|
||||
// Copy services, too. :)
|
||||
|
@ -156,5 +158,7 @@ class Routable extends Router {
|
|||
if (service != null) {
|
||||
if (_onService.hasListener) _onService.add(service);
|
||||
}
|
||||
|
||||
return service ?? mounted;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,20 +4,19 @@ import 'dart:async';
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:mirrors';
|
||||
import 'package:angel_http_exception/angel_http_exception.dart';
|
||||
import 'package:angel_route/angel_route.dart' hide Extensible;
|
||||
import 'package:charcode/charcode.dart';
|
||||
export 'package:container/container.dart';
|
||||
import 'package:flatten/flatten.dart';
|
||||
import 'package:json_god/json_god.dart' as god;
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
import '../safe_stream_controller.dart';
|
||||
import 'angel_base.dart';
|
||||
import 'angel_http_exception.dart';
|
||||
import 'controller.dart';
|
||||
import 'fatal_error.dart';
|
||||
|
||||
//import 'hooked_service.dart';
|
||||
import 'request_context.dart';
|
||||
import 'response_context.dart';
|
||||
import 'routable.dart';
|
||||
|
@ -28,19 +27,11 @@ final RegExp _straySlashes = new RegExp(r'(^/+)|(/+$)');
|
|||
/// A function that binds an [Angel] server to an Internet address and port.
|
||||
typedef Future<HttpServer> ServerGenerator(InternetAddress address, int port);
|
||||
|
||||
/// Handles an [AngelHttpException].
|
||||
typedef Future AngelErrorHandler(
|
||||
AngelHttpException err, RequestContext req, ResponseContext res);
|
||||
|
||||
/// A function that configures an [Angel] server in some way.
|
||||
typedef Future AngelConfigurer(Angel app);
|
||||
|
||||
/// A powerful real-time/REST/MVC server class.
|
||||
class Angel extends AngelBase {
|
||||
final SafeCtrl<HttpRequest> _afterProcessed =
|
||||
new SafeCtrl<HttpRequest>.broadcast();
|
||||
final SafeCtrl<HttpRequest> _beforeProcessed =
|
||||
new SafeCtrl<HttpRequest>.broadcast();
|
||||
final SafeCtrl<AngelFatalError> _fatalErrorStream =
|
||||
new SafeCtrl<AngelFatalError>.broadcast();
|
||||
final SafeCtrl<Controller> _onController =
|
||||
|
@ -57,8 +48,12 @@ class Angel extends AngelBase {
|
|||
/// A global Map of converters that can transform responses bodies.
|
||||
final Map<String, Converter<List<int>, List<int>>> encoders = {};
|
||||
|
||||
/// A global Map of manual injections. You usually will not want to touch this.
|
||||
final Map injections = {};
|
||||
final Map _injections = {};
|
||||
|
||||
/// Creates a safe zone within which a request can be handled, without crashing the application.
|
||||
Future<ZoneSpecification> Function(
|
||||
HttpRequest request, RequestContext req, ResponseContext res)
|
||||
createZoneForRequest;
|
||||
|
||||
final Map<dynamic, InjectionRequest> _preContained = {};
|
||||
ResponseSerializer _serializer;
|
||||
|
@ -71,12 +66,6 @@ class Angel extends AngelBase {
|
|||
/// Determines whether to allow HTTP request method overrides.
|
||||
bool allowMethodOverrides = true;
|
||||
|
||||
/// Fired after a request is processed. Always runs.
|
||||
Stream<HttpRequest> get afterProcessed => _afterProcessed.stream;
|
||||
|
||||
/// Fired before a request is processed. Always runs.
|
||||
Stream<HttpRequest> get beforeProcessed => _beforeProcessed.stream;
|
||||
|
||||
/// All child application mounted on this instance.
|
||||
List<Angel> get children => new List<Angel>.unmodifiable(_children);
|
||||
|
||||
|
@ -108,15 +97,18 @@ class Angel extends AngelBase {
|
|||
/// Returns the parent instance of this application, if any.
|
||||
Angel get parent => _parent;
|
||||
|
||||
/// Outputs diagnostics and debug messages.
|
||||
Logger logger;
|
||||
|
||||
/// Plug-ins to be called right before server startup.
|
||||
///
|
||||
/// If the server is never started, they will never be called.
|
||||
final List<AngelConfigurer> justBeforeStart = [];
|
||||
final List<AngelConfigurer> startupHooks = [];
|
||||
|
||||
/// Plug-ins to be called right before server shutdown
|
||||
/// Plug-ins to be called right before server shutdown.
|
||||
///
|
||||
/// If the server is never [close]d, they will never be called.
|
||||
final List<AngelConfigurer> justBeforeStop = [];
|
||||
final List<AngelConfigurer> shutdownHooks = [];
|
||||
|
||||
/// Always run before responses are sent.
|
||||
///
|
||||
|
@ -125,8 +117,8 @@ class Angel extends AngelBase {
|
|||
final List<RequestHandler> responseFinalizers = [];
|
||||
|
||||
/// The handler currently configured to run on [AngelHttpException]s.
|
||||
AngelErrorHandler errorHandler =
|
||||
(AngelHttpException e, req, ResponseContext res) {
|
||||
Function(AngelHttpException e, RequestContext req, ResponseContext res)
|
||||
errorHandler = (AngelHttpException e, req, ResponseContext res) {
|
||||
res.headers[HttpHeaders.CONTENT_TYPE] = ContentType.HTML.toString();
|
||||
res.statusCode = e.statusCode;
|
||||
res.write("<!DOCTYPE html><html><head><title>${e.message}</title>");
|
||||
|
@ -140,12 +132,6 @@ class Angel extends AngelBase {
|
|||
res.end();
|
||||
};
|
||||
|
||||
/// [RequestMiddleware] to be run before all requests.
|
||||
final List before = [];
|
||||
|
||||
/// [RequestMiddleware] to be run after all requests.
|
||||
final List after = [];
|
||||
|
||||
/// The native HttpServer running this instancce.
|
||||
HttpServer httpServer;
|
||||
|
||||
|
@ -156,7 +142,7 @@ class Angel extends AngelBase {
|
|||
var host = address ?? InternetAddress.LOOPBACK_IP_V4;
|
||||
this.httpServer = await _serverGenerator(host, port ?? 0);
|
||||
|
||||
for (var configurer in justBeforeStart) {
|
||||
for (var configurer in startupHooks) {
|
||||
await configure(configurer);
|
||||
}
|
||||
|
||||
|
@ -205,8 +191,6 @@ class Angel extends AngelBase {
|
|||
await httpServer.close(force: true);
|
||||
}
|
||||
|
||||
_afterProcessed.close();
|
||||
_beforeProcessed.close();
|
||||
_fatalErrorStream.close();
|
||||
_onController.close();
|
||||
|
||||
|
@ -214,7 +198,7 @@ class Angel extends AngelBase {
|
|||
await service.close();
|
||||
});
|
||||
|
||||
for (var plugin in justBeforeStop) await plugin(this);
|
||||
for (var plugin in shutdownHooks) await plugin(this);
|
||||
|
||||
return server;
|
||||
}
|
||||
|
@ -252,7 +236,7 @@ class Angel extends AngelBase {
|
|||
|
||||
/// Shortcut for adding a middleware to inject a key/value pair on every request.
|
||||
void inject(key, value) {
|
||||
injections[key] = value;
|
||||
_injections[key] = value;
|
||||
}
|
||||
|
||||
/// Shortcuts for adding converters to transform the response buffer/stream of any request.
|
||||
|
@ -267,15 +251,6 @@ class Angel extends AngelBase {
|
|||
|
||||
Future getHandlerResult(
|
||||
handler, RequestContext req, ResponseContext res) async {
|
||||
/*if (handler is RequestMiddleware) {
|
||||
var result = await handler(req, res);
|
||||
|
||||
if (result is RequestHandler)
|
||||
return await getHandlerResult(result, req, res);
|
||||
else
|
||||
return result;
|
||||
}*/
|
||||
|
||||
if (handler is RequestHandler) {
|
||||
var result = await handler(req, res);
|
||||
return await getHandlerResult(result, req, res);
|
||||
|
@ -320,9 +295,8 @@ class Angel extends AngelBase {
|
|||
}
|
||||
|
||||
Future<RequestContext> createRequestContext(HttpRequest request) {
|
||||
_beforeProcessed.add(request);
|
||||
return RequestContext.from(request, this).then((req) {
|
||||
return req..injections.addAll(injections ?? {});
|
||||
return req..injections.addAll(_injections ?? {});
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -346,21 +320,23 @@ class Angel extends AngelBase {
|
|||
}
|
||||
|
||||
/// Handles an [AngelHttpException].
|
||||
handleAngelHttpException(AngelHttpException e, StackTrace st,
|
||||
Future handleAngelHttpException(AngelHttpException e, StackTrace st,
|
||||
RequestContext req, ResponseContext res, HttpRequest request,
|
||||
{bool ignoreFinalizers: false}) async {
|
||||
if (req == null || res == null) {
|
||||
_fatalErrorStream.add(new AngelFatalError(
|
||||
request: request,
|
||||
error: e?.error ??
|
||||
e ??
|
||||
new Exception(
|
||||
'handleAngelHttpException was called on a null request or response context.'),
|
||||
stack: st));
|
||||
return;
|
||||
try {
|
||||
logger?.severe(e, st);
|
||||
request.response
|
||||
..statusCode = HttpStatus.INTERNAL_SERVER_ERROR
|
||||
..write('500 Internal Server Error')
|
||||
..close();
|
||||
} finally {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
res.statusCode = e.statusCode;
|
||||
|
||||
if (req.headers.value(HttpHeaders.ACCEPT) == null ||
|
||||
req.acceptsAll ||
|
||||
req.accepts(ContentType.JSON) ||
|
||||
|
@ -373,13 +349,16 @@ class Angel extends AngelBase {
|
|||
}
|
||||
|
||||
res.end();
|
||||
await sendResponse(request, req, res,
|
||||
return await sendResponse(request, req, res,
|
||||
ignoreFinalizers: ignoreFinalizers == true);
|
||||
}
|
||||
|
||||
/// Handles a single request.
|
||||
Future handleRequest(HttpRequest request) async {
|
||||
try {
|
||||
var zoneSpec = await createZoneForRequest(request, req, res);
|
||||
var zone = Zone.current.fork(specification: zoneSpec);
|
||||
|
||||
return zone.run(() async {
|
||||
var req = await createRequestContext(request);
|
||||
var res = await createResponseContext(request.response, req);
|
||||
String requestedUrl;
|
||||
|
@ -415,13 +394,13 @@ class Angel extends AngelBase {
|
|||
);
|
||||
});
|
||||
|
||||
req.inject(Zone, zone);
|
||||
req.inject(ZoneSpecification, zoneSpec);
|
||||
req.inject(MiddlewarePipeline, tuple.item1);
|
||||
req.params.addAll(tuple.item2);
|
||||
req.inject(Match, tuple.item3);
|
||||
|
||||
var pipeline = new List.from(before)
|
||||
..addAll(tuple.item1.handlers)
|
||||
..addAll(after);
|
||||
var pipeline = tuple.item1.handlers;
|
||||
|
||||
for (var handler in pipeline) {
|
||||
try {
|
||||
|
@ -436,13 +415,16 @@ class Angel extends AngelBase {
|
|||
await sendResponse(request, req, res);
|
||||
} on AngelHttpException catch (e, st) {
|
||||
e.stackTrace ??= st;
|
||||
return await handleAngelHttpException(e, st, req, res, request,
|
||||
ignoreFinalizers: true);
|
||||
return await handleAngelHttpException(
|
||||
e,
|
||||
st,
|
||||
req,
|
||||
res,
|
||||
request,
|
||||
ignoreFinalizers: true,
|
||||
);
|
||||
}
|
||||
} catch (e, st) {
|
||||
_fatalErrorStream
|
||||
.add(new AngelFatalError(request: request, error: e, stack: st));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// Runs several optimizations, *if* [isProduction] is `true`.
|
||||
|
@ -503,17 +485,10 @@ class Angel extends AngelBase {
|
|||
// return await closureMirror.apply(args).reflectee;
|
||||
}
|
||||
|
||||
/// Use [sendResponse] instead.
|
||||
@deprecated
|
||||
Future sendRequest(
|
||||
HttpRequest request, RequestContext req, ResponseContext res) =>
|
||||
sendResponse(request, req, res);
|
||||
|
||||
/// Sends a response.
|
||||
Future sendResponse(
|
||||
HttpRequest request, RequestContext req, ResponseContext res,
|
||||
{bool ignoreFinalizers: false}) {
|
||||
_afterProcessed.add(request);
|
||||
|
||||
if (res.willCloseItself) {
|
||||
return new Future.value();
|
||||
|
@ -579,20 +554,8 @@ class Angel extends AngelBase {
|
|||
_onController.add(controllers[configurer.findExpose().path] = configurer);
|
||||
}
|
||||
|
||||
/// Starts the server, wrapped in a [runZoned] call.
|
||||
Future<HttpServer> listen({InternetAddress address, int port: 3000}) {
|
||||
var c = new Completer<HttpServer>();
|
||||
runZoned(() async {
|
||||
await startServer(address, port)
|
||||
.then(c.complete)
|
||||
.catchError(c.completeError);
|
||||
}, onError: (e, st) {
|
||||
_fatalErrorStream.add(new AngelFatalError(error: e, stack: st));
|
||||
});
|
||||
return c.future;
|
||||
}
|
||||
|
||||
/// Mounts the child on this router.
|
||||
/// Mounts the child on this router. If [routable] is `null`,
|
||||
/// then this method will add a handler as a global middleware instead.
|
||||
///
|
||||
/// If the router is an [Angel] instance, all controllers
|
||||
/// will be copied, as well as services and response finalizers.
|
||||
|
@ -602,26 +565,15 @@ class Angel extends AngelBase {
|
|||
/// NOTE: The above will not be properly copied if [path] is
|
||||
/// a [RegExp].
|
||||
@override
|
||||
use(Pattern path, @checked Routable routable,
|
||||
{bool hooked: true, String namespace: null}) {
|
||||
use(path, [@checked Routable routable, String namespace = null]) {
|
||||
if (routable == null) return all('*', path);
|
||||
|
||||
var head = path.toString().replaceAll(_straySlashes, '');
|
||||
|
||||
if (routable is Angel) {
|
||||
_children.add(routable.._parent = this);
|
||||
_preContained.addAll(routable._preContained);
|
||||
|
||||
if (routable.before.isNotEmpty) {
|
||||
all(path, (req, res) {
|
||||
return true;
|
||||
}, middleware: routable.before);
|
||||
}
|
||||
|
||||
if (routable.after.isNotEmpty) {
|
||||
all(path, (req, res) {
|
||||
return true;
|
||||
}, middleware: routable.after);
|
||||
}
|
||||
|
||||
if (routable.responseFinalizers.isNotEmpty) {
|
||||
responseFinalizers.add((req, res) async {
|
||||
if (req.path.replaceAll(_straySlashes, '').startsWith(head)) {
|
||||
|
@ -643,14 +595,6 @@ class Angel extends AngelBase {
|
|||
services['$head/$tail'.replaceAll(_straySlashes, '')] = v;
|
||||
});
|
||||
|
||||
_beforeProcessed.whenInitialized(() {
|
||||
routable.beforeProcessed.listen(_beforeProcessed.add);
|
||||
});
|
||||
|
||||
_afterProcessed.whenInitialized(() {
|
||||
routable.afterProcessed.listen(_afterProcessed.add);
|
||||
});
|
||||
|
||||
_fatalErrorStream.whenInitialized(() {
|
||||
routable.fatalErrorStream.listen(_fatalErrorStream.add);
|
||||
});
|
||||
|
@ -664,27 +608,45 @@ class Angel extends AngelBase {
|
|||
routable.app = this;
|
||||
}
|
||||
|
||||
return super.use(path, routable, hooked: hooked, namespace: namespace);
|
||||
}
|
||||
|
||||
/// Registers a callback to run upon errors.
|
||||
@deprecated
|
||||
onError(AngelErrorHandler handler) {
|
||||
this.errorHandler = handler;
|
||||
return super.use(path, routable, namespace);
|
||||
}
|
||||
|
||||
/// Default constructor. ;)
|
||||
Angel({@deprecated bool debug: false}) : super() {
|
||||
Angel() : super() {
|
||||
bootstrapContainer();
|
||||
|
||||
createZoneForRequest = (request, req, res) async {
|
||||
return new ZoneSpecification(
|
||||
handleUncaughtError: (Zone self, ZoneDelegate parent, Zone zone, error,
|
||||
StackTrace stackTrace) {
|
||||
var e = new AngelHttpException(error,
|
||||
stackTrace: stackTrace, message: error?.toString());
|
||||
return handleAngelHttpException(
|
||||
e,
|
||||
stackTrace,
|
||||
req,
|
||||
res,
|
||||
request,
|
||||
ignoreFinalizers: true,
|
||||
);
|
||||
},
|
||||
print: (Zone self, ZoneDelegate parent, Zone zone, String line) {
|
||||
if (logger != null) {
|
||||
logger.info(line);
|
||||
} else {
|
||||
return parent.print(zone, line);
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
/// An instance mounted on a server started by the [serverGenerator].
|
||||
factory Angel.custom(ServerGenerator serverGenerator,
|
||||
{@deprecated bool debug: false}) =>
|
||||
new Angel().._serverGenerator = serverGenerator;
|
||||
factory Angel.custom(ServerGenerator serverGenerator) {
|
||||
return new Angel().._serverGenerator = serverGenerator;
|
||||
}
|
||||
|
||||
factory Angel.fromSecurityContext(SecurityContext context,
|
||||
{@deprecated bool debug: false}) {
|
||||
factory Angel.fromSecurityContext(SecurityContext context) {
|
||||
var app = new Angel();
|
||||
|
||||
app._serverGenerator = (InternetAddress address, int port) async {
|
||||
|
|
|
@ -2,10 +2,10 @@ library angel_framework.http.service;
|
|||
|
||||
import 'dart:async';
|
||||
import 'package:angel_framework/src/http/response_context.dart';
|
||||
import 'package:angel_http_exception/angel_http_exception.dart';
|
||||
import 'package:merge_map/merge_map.dart';
|
||||
import '../util.dart';
|
||||
import 'angel_base.dart';
|
||||
import 'angel_http_exception.dart';
|
||||
import 'hooked_service.dart' show HookedService;
|
||||
import 'metadata.dart';
|
||||
import 'routable.dart';
|
||||
|
@ -24,22 +24,6 @@ class Providers {
|
|||
static const String viaWebsocket = "websocket";
|
||||
static const String viaGraphQL = "graphql";
|
||||
|
||||
/// Use [viaRest] instead.
|
||||
@deprecated
|
||||
static const String VIA_REST = "rest";
|
||||
|
||||
/// Use [viaWebSocket] instead.
|
||||
@deprecated
|
||||
static const String VIA_WEBSOCKET = "websocket";
|
||||
|
||||
/// Use [rest] instead.
|
||||
@deprecated
|
||||
static const Providers REST = const Providers(viaRest);
|
||||
|
||||
/// Use [websocket] instead.
|
||||
@deprecated
|
||||
static const Providers WEBSOCKET = const Providers(viaWebsocket);
|
||||
|
||||
/// Represents a request via REST.
|
||||
static const Providers rest = const Providers(viaRest);
|
||||
|
||||
|
@ -65,10 +49,6 @@ class Service extends Routable {
|
|||
'token'
|
||||
];
|
||||
|
||||
/// Use [specialQueryKeys] instead.
|
||||
@deprecated
|
||||
static const List<String> SPECIAL_QUERY_KEYS = specialQueryKeys;
|
||||
|
||||
/// The [Angel] app powering this service.
|
||||
AngelBase app;
|
||||
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
name: angel_framework
|
||||
version: 1.0.10
|
||||
version: 1.1.0-alpha
|
||||
description: A high-powered HTTP server with DI, routing and more.
|
||||
author: Tobe O <thosakwe@gmail.com>
|
||||
homepage: https://github.com/angel-dart/angel_framework
|
||||
environment:
|
||||
sdk: ">=1.19.0"
|
||||
dependencies:
|
||||
angel_http_exception: ^1.0.0
|
||||
angel_model: ^1.0.0
|
||||
angel_route: ">=1.0.5 <2.0.0"
|
||||
body_parser: ^1.0.0-dev
|
||||
|
|
|
@ -11,17 +11,6 @@ final Uri $foo = Uri.parse('http://localhost:3000/foo');
|
|||
/// Additional tests to improve coverage of server.dart
|
||||
main() {
|
||||
group('streams fired', () {
|
||||
test('before+after processed are fired', () async {
|
||||
var app = new Angel();
|
||||
var before = app.beforeProcessed.first;
|
||||
var after = app.afterProcessed.first;
|
||||
var rq = new MockHttpRequest('GET', $foo);
|
||||
rq.close();
|
||||
await app.handleRequest(rq);
|
||||
app.close();
|
||||
expect(await before, rq);
|
||||
expect(await after, rq);
|
||||
});
|
||||
|
||||
test('oncontroller fired', () async {
|
||||
var app = new Angel();
|
||||
|
@ -77,7 +66,7 @@ main() {
|
|||
|
||||
test('plug-ins run on startup', () async {
|
||||
var app = new Angel();
|
||||
app.justBeforeStart.add((app) async {
|
||||
app.startupHooks.add((app) async {
|
||||
app.properties['two'] = 2;
|
||||
});
|
||||
await app.startServer();
|
||||
|
@ -101,9 +90,13 @@ main() {
|
|||
expect(svc.value, 3);
|
||||
});
|
||||
|
||||
test('global injection added to injection map', () {
|
||||
test('global injection added to injection map', () async {
|
||||
var app = new Angel()..inject('a', 'b');
|
||||
expect(app.injections['a'], 'b');
|
||||
app.get('/', (String a) => a);
|
||||
var rq = new MockHttpRequest('GET', Uri.parse('/'))..close();
|
||||
await app.handleRequest(rq);
|
||||
var body = await rq.response.transform(UTF8.decoder).join();
|
||||
expect(body, JSON.encode('b'));
|
||||
});
|
||||
|
||||
test('global injected serializer', () async {
|
||||
|
@ -163,7 +156,7 @@ main() {
|
|||
app = new Angel();
|
||||
app.get('/wtf', () => throw new AngelHttpException.forbidden());
|
||||
app.get('/wtf2', () => throw new AngelHttpException.forbidden());
|
||||
await app.listen(address: InternetAddress.LOOPBACK_IP_V4, port: 0);
|
||||
await app.startServer(InternetAddress.LOOPBACK_IP_V4, 0);
|
||||
app.fatalErrorStream.listen((e) {
|
||||
print('FATAL: ${e.error}');
|
||||
print(e.stack);
|
||||
|
@ -172,29 +165,6 @@ main() {
|
|||
|
||||
tearDown(() => app.close());
|
||||
|
||||
test('null req/res', () async {
|
||||
app.handleAngelHttpException(null, null, null, null, null);
|
||||
var empty = app.fatalErrorStream.isEmpty;
|
||||
await app.close();
|
||||
expect(await empty, isFalse);
|
||||
});
|
||||
|
||||
test('null req/res, valid error', () async {
|
||||
app.handleAngelHttpException(
|
||||
new AngelHttpException(new StateError('')), null, null, null, null);
|
||||
var empty = app.fatalErrorStream.isEmpty;
|
||||
await app.close();
|
||||
expect(await empty, isFalse);
|
||||
});
|
||||
|
||||
test('null req/res, http error', () async {
|
||||
app.handleAngelHttpException(
|
||||
new AngelHttpException.forbidden(), null, null, null, null);
|
||||
var empty = app.fatalErrorStream.isEmpty;
|
||||
await app.close();
|
||||
expect(await empty, isFalse);
|
||||
});
|
||||
|
||||
test('can send json', () async {
|
||||
var rq = new MockHttpRequest('GET', new Uri(path: 'wtf'));
|
||||
rq.close();
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import 'dart:convert';
|
||||
import 'package:angel_framework/src/defs.dart';
|
||||
import 'package:angel_framework/angel_framework.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:json_god/json_god.dart' as god;
|
||||
|
|
|
@ -41,12 +41,22 @@ main() {
|
|||
res.statusCode = 32;
|
||||
await new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits])
|
||||
.pipe(res);
|
||||
await new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits])
|
||||
.pipe(res);
|
||||
|
||||
try {
|
||||
await new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits])
|
||||
.pipe(res);
|
||||
throw new Exception('Should throw on rewrite...');
|
||||
} on StateError {
|
||||
// Yay!!!
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/error', (res) => res.addError(new StateError('wtf')));
|
||||
|
||||
app.errorHandler = (e, req, res) async {
|
||||
print('ok');
|
||||
};
|
||||
|
||||
app.fatalErrorStream.listen((e) {
|
||||
stderr..writeln(e.error)..writeln(e.stack);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue