pattern matching

This commit is contained in:
Tobe O 2017-10-10 12:55:42 -04:00
parent 27ca19bbea
commit be3b3bd3d2
12 changed files with 753 additions and 464 deletions

View file

@ -26,14 +26,14 @@
<entry key="angel_route"> <entry key="angel_route">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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.6/lib" />
</list> </list>
</value> </value>
</entry> </entry>
<entry key="args"> <entry key="args">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/args-1.0.0/lib" /> <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/args-1.0.1/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -47,7 +47,7 @@
<entry key="barback"> <entry key="barback">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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+13/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -131,7 +131,7 @@
<entry key="glob"> <entry key="glob">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/glob-1.1.3/lib" /> <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/glob-1.1.5/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -145,14 +145,14 @@
<entry key="http"> <entry key="http">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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+15/lib" />
</list> </list>
</value> </value>
</entry> </entry>
<entry key="http_multi_server"> <entry key="http_multi_server">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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.4/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -222,7 +222,7 @@
<entry key="meta"> <entry key="meta">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/meta-1.1.1/lib" /> <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/meta-1.1.2/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -250,7 +250,7 @@
<entry key="package_config"> <entry key="package_config">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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.3/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -271,14 +271,14 @@
<entry key="plugin"> <entry key="plugin">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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+2/lib" />
</list> </list>
</value> </value>
</entry> </entry>
<entry key="pool"> <entry key="pool">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pool-1.3.2/lib" /> <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/pool-1.3.3/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -327,7 +327,7 @@
<entry key="shelf_web_socket"> <entry key="shelf_web_socket">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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.2/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -362,7 +362,7 @@
<entry key="stream_channel"> <entry key="stream_channel">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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.2/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -383,7 +383,7 @@
<entry key="test"> <entry key="test">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/test-0.12.24+6/lib" /> <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/test-0.12.24+8/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -397,7 +397,7 @@
<entry key="typed_data"> <entry key="typed_data">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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.5/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -418,14 +418,14 @@
<entry key="web_socket_channel"> <entry key="web_socket_channel">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.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.6/lib" />
</list> </list>
</value> </value>
</entry> </entry>
<entry key="yaml"> <entry key="yaml">
<value> <value>
<list> <list>
<option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.12/lib" /> <option value="$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.13/lib" />
</list> </list>
</value> </value>
</entry> </entry>
@ -435,10 +435,10 @@
<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/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_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_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/angel_route-1.0.6/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/args-1.0.1/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/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/barback-0.15.2+13/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/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/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/charcode-1.1.1/lib" />
@ -450,10 +450,10 @@
<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/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/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/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/glob-1.1.5/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/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-0.11.3+15/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_multi_server-2.0.4/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_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/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/isolate-1.1.0/lib" />
@ -463,36 +463,36 @@
<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/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/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/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/meta-1.1.2/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/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/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/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_config-1.0.3/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/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/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/plugin-0.2.0+2/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/pool-1.3.3/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/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/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/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-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_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_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/shelf_web_socket-0.2.2/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_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_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/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/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/stream_channel-1.6.2/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/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/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/test-0.12.24+8/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/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/typed_data-1.1.5/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/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/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/web_socket_channel-1.0.6/lib" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.12/lib" /> <root url="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.13/lib" />
</CLASSES> </CLASSES>
<JAVADOC /> <JAVADOC />
<SOURCES /> <SOURCES />

View file

@ -0,0 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="injects session or throws in parameter_meta_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" singleton="true" nameIsGenerated="true">
<option name="filePath" value="$PROJECT_DIR$/test/parameter_meta_test.dart" />
<option name="scope" value="GROUP_OR_TEST_BY_NAME" />
<option name="testName" value="injects session or throws" />
<method />
</configuration>
</component>

View file

@ -2,24 +2,18 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="7b89ff1e-1260-4dcf-9c3d-345de0471ea1" name="Default" comment=""> <list default="true" id="7b89ff1e-1260-4dcf-9c3d-345de0471ea1" name="Default" comment="">
<change type="DELETED" beforePath="$PROJECT_DIR$/lib/src/http/base_middleware.dart" afterPath="" /> <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/runConfigurations/injects_session_or_throws_in_parameter_meta_test_dart.xml" />
<change type="DELETED" beforePath="$PROJECT_DIR$/lib/src/http/base_plugin.dart" afterPath="" /> <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/parameter_meta_test.dart" />
<change type="DELETED" beforePath="$PROJECT_DIR$/test/util_test.dart" afterPath="" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/libraries/Dart_Packages.xml" afterPath="$PROJECT_DIR$/.idea/libraries/Dart_Packages.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/CHANGELOG.md" afterPath="$PROJECT_DIR$/CHANGELOG.md" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/CHANGELOG.md" afterPath="$PROJECT_DIR$/CHANGELOG.md" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/example/json.dart" afterPath="$PROJECT_DIR$/example/json.dart" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/injection.dart" afterPath="$PROJECT_DIR$/lib/src/http/injection.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/angel_base.dart" afterPath="$PROJECT_DIR$/lib/src/http/angel_base.dart" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/metadata.dart" afterPath="$PROJECT_DIR$/lib/src/http/metadata.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/controller.dart" afterPath="$PROJECT_DIR$/lib/src/http/controller.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/http.dart" afterPath="$PROJECT_DIR$/lib/src/http/http.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/request_context.dart" afterPath="$PROJECT_DIR$/lib/src/http/request_context.dart" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/request_context.dart" afterPath="$PROJECT_DIR$/lib/src/http/request_context.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/response_context.dart" afterPath="$PROJECT_DIR$/lib/src/http/response_context.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/routable.dart" afterPath="$PROJECT_DIR$/lib/src/http/routable.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/server.dart" afterPath="$PROJECT_DIR$/lib/src/http/server.dart" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/src/http/server.dart" afterPath="$PROJECT_DIR$/lib/src/http/server.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/pubspec.yaml" afterPath="$PROJECT_DIR$/pubspec.yaml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/all.dart" afterPath="$PROJECT_DIR$/test/all.dart" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/all.dart" afterPath="$PROJECT_DIR$/test/all.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/controller_test.dart" afterPath="$PROJECT_DIR$/test/controller_test.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/di_test.dart" afterPath="$PROJECT_DIR$/test/di_test.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/routing_test.dart" afterPath="$PROJECT_DIR$/test/routing_test.dart" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/routing_test.dart" afterPath="$PROJECT_DIR$/test/routing_test.dart" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/server_test.dart" afterPath="$PROJECT_DIR$/test/server_test.dart" />
</list> </list>
<ignored path="$PROJECT_DIR$/.tmp/" /> <ignored path="$PROJECT_DIR$/.tmp/" />
<ignored path="$PROJECT_DIR$/temp/" /> <ignored path="$PROJECT_DIR$/temp/" />
@ -45,11 +39,19 @@
<file leaf-file-name="controller.dart" pinned="false" current-in-tab="false"> <file leaf-file-name="controller.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/http/controller.dart"> <entry file="file://$PROJECT_DIR$/lib/src/http/controller.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="139"> <state relative-caret-position="-323">
<caret line="54" column="8" lean-forward="false" selection-start-line="54" selection-start-column="8" selection-end-line="54" selection-end-column="8" /> <caret line="18" column="0" lean-forward="true" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
<folding> <folding />
<element signature="e#42#62#0" expanded="true" /> </state>
</folding> </provider>
</entry>
</file>
<file leaf-file-name="http.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/http/http.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="15" column="23" lean-forward="false" selection-start-line="15" selection-start-column="23" selection-end-line="15" selection-end-column="23" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
@ -57,44 +59,55 @@
<file leaf-file-name="server.dart" pinned="false" current-in-tab="false"> <file leaf-file-name="server.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart"> <entry file="file://$PROJECT_DIR$/lib/src/http/server.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165"> <state relative-caret-position="243">
<caret line="13" column="34" lean-forward="false" selection-start-line="13" selection-start-column="34" selection-end-line="13" selection-end-column="34" /> <caret line="480" column="23" lean-forward="false" selection-start-line="480" selection-start-column="13" selection-end-line="480" selection-end-column="23" />
<folding /> <folding>
<element signature="e#38#58#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="README.md" pinned="false" current-in-tab="true"> <file leaf-file-name="injection.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/README.md"> <entry file="file://$PROJECT_DIR$/lib/src/http/injection.dart">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="285">
<caret line="19" column="6" lean-forward="true" selection-start-line="19" selection-start-column="6" selection-end-line="19" selection-end-column="6" />
<folding>
<marker date="1506049250000" expanded="true" signature="588:776" ph="{...}" />
</folding>
</first_editor>
<second_editor />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="routable.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/http/routable.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="210">
<caret line="6" column="25" lean-forward="false" selection-start-line="6" selection-start-column="25" selection-end-line="6" selection-end-column="25" /> <caret line="73" column="28" lean-forward="false" selection-start-line="73" selection-start-column="28" selection-end-line="73" selection-end-column="28" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="parameter_meta_test.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/test/parameter_meta_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="12" column="13" lean-forward="true" selection-start-line="12" selection-start-column="13" selection-end-line="12" selection-end-column="13" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="metadata.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/http/metadata.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="615">
<caret line="100" column="8" lean-forward="false" selection-start-line="100" selection-start-column="8" selection-end-line="100" selection-end-column="8" />
<folding>
<element signature="e#40#101#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="CHANGELOG.md" pinned="false" current-in-tab="false"> <file leaf-file-name="CHANGELOG.md" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/CHANGELOG.md"> <entry file="file://$PROJECT_DIR$/CHANGELOG.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT"> <state split_layout="SPLIT">
<first_editor relative-caret-position="105"> <first_editor relative-caret-position="15">
<caret line="7" column="85" lean-forward="false" selection-start-line="7" selection-start-column="85" selection-end-line="7" selection-end-column="85" /> <caret line="1" column="70" lean-forward="false" selection-start-line="1" selection-start-column="70" selection-end-line="1" selection-end-column="70" />
<folding /> <folding />
</first_editor> </first_editor>
<second_editor /> <second_editor />
@ -102,57 +115,13 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="server_test.dart" pinned="false" current-in-tab="false"> <file leaf-file-name="all.dart" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/test/server_test.dart"> <entry file="file://$PROJECT_DIR$/test/all.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="140">
<caret line="11" column="8" lean-forward="false" selection-start-line="11" selection-start-column="8" selection-end-line="11" selection-end-column="8" /> <caret line="31" column="23" lean-forward="false" selection-start-line="31" selection-start-column="23" selection-end-line="31" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="response_context.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="139">
<caret line="264" column="63" lean-forward="false" selection-start-line="264" selection-start-column="63" selection-end-line="264" selection-end-column="63" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="routing_test.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/test/routing_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="168">
<caret line="38" column="21" lean-forward="true" selection-start-line="38" selection-start-column="21" selection-end-line="38" selection-end-column="21" />
<folding> <folding>
<element signature="e#0#22#0" expanded="true" /> <element signature="e#0#38#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="di_test.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/test/di_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
<caret line="28" column="62" lean-forward="false" selection-start-line="28" selection-start-column="62" selection-end-line="28" selection-end-column="62" />
<folding>
<element signature="e#0#22#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="controller_test.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/test/controller_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="95" column="61" lean-forward="false" selection-start-line="95" selection-start-column="45" selection-end-line="95" selection-end-column="61" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
@ -169,19 +138,6 @@
</component> </component>
<component name="FindInProjectRecents"> <component name="FindInProjectRecents">
<findStrings> <findStrings>
<find>print(</find>
<find>handleaNGE</find>
<find>stderr</find>
<find>_AFTERp</find>
<find>_afterProc</find>
<find>_beforeP</find>
<find>_fatalE</find>
<find>fatalError</find>
<find>fatale</find>
<find>FATAL</find>
<find>error ??</find>
<find>sendRes</find>
<find>print</find>
<find>.name</find> <find>.name</find>
<find>logger</find> <find>logger</find>
<find>handleRequ</find> <find>handleRequ</find>
@ -199,6 +155,19 @@
<find>addStr</find> <find>addStr</find>
<find>Stopwatc</find> <find>Stopwatc</find>
<find>_controllers</find> <find>_controllers</find>
<find>pipeline</find>
<find>handle</find>
<find>uncaught</find>
<find>header</find>
<find>creat</find>
<find>crea</find>
<find>run(</find>
<find>/*</find>
<find>runG</find>
<find>catchError</find>
<find>query</find>
<find>value == n</find>
<find>handleCont</find>
</findStrings> </findStrings>
<replaceStrings> <replaceStrings>
<replace>_isClosed</replace> <replace>_isClosed</replace>
@ -215,6 +184,8 @@
<replace>if (_isClosed &amp;&amp; !_useStream)</replace> <replace>if (_isClosed &amp;&amp; !_useStream)</replace>
<replace>logger?.warning</replace> <replace>logger?.warning</replace>
<replace>JSON.decode</replace> <replace>JSON.decode</replace>
<replace>query</replace>
<replace>cookie</replace>
</replaceStrings> </replaceStrings>
<dirStrings> <dirStrings>
<dir>C:\Users\thosa\Source\Angel\framework\lib</dir> <dir>C:\Users\thosa\Source\Angel\framework\lib</dir>
@ -236,9 +207,6 @@
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="CHANGED_PATHS"> <option name="CHANGED_PATHS">
<list> <list>
<option value="$PROJECT_DIR$/test/general_test.dart" />
<option value="$PROJECT_DIR$/README.md" />
<option value="$PROJECT_DIR$/test/view_generator_test.dart" />
<option value="$PROJECT_DIR$/lib/src/http/anonymous_service.dart" /> <option value="$PROJECT_DIR$/lib/src/http/anonymous_service.dart" />
<option value="$PROJECT_DIR$/test/anonymous_service_test.dart" /> <option value="$PROJECT_DIR$/test/anonymous_service_test.dart" />
<option value="$PROJECT_DIR$/lib/src/http/typed_service.dart" /> <option value="$PROJECT_DIR$/lib/src/http/typed_service.dart" />
@ -255,7 +223,6 @@
<option value="$PROJECT_DIR$/performance/hello/raw.md" /> <option value="$PROJECT_DIR$/performance/hello/raw.md" />
<option value="$PROJECT_DIR$/tool/travis.sh" /> <option value="$PROJECT_DIR$/tool/travis.sh" />
<option value="$PROJECT_DIR$/test/repeat_request_test.dart" /> <option value="$PROJECT_DIR$/test/repeat_request_test.dart" />
<option value="$PROJECT_DIR$/lib/src/http/metadata.dart" />
<option value="$PROJECT_DIR$/lib/src/http/fatal_error.dart" /> <option value="$PROJECT_DIR$/lib/src/http/fatal_error.dart" />
<option value="$PROJECT_DIR$/lib/src/http/angel_http_exception.dart" /> <option value="$PROJECT_DIR$/lib/src/http/angel_http_exception.dart" />
<option value="$PROJECT_DIR$/lib/angel_framework.dart" /> <option value="$PROJECT_DIR$/lib/angel_framework.dart" />
@ -271,22 +238,26 @@
<option value="$PROJECT_DIR$/test/streaming_test.dart" /> <option value="$PROJECT_DIR$/test/streaming_test.dart" />
<option value="$PROJECT_DIR$/performance/hello/main.dart" /> <option value="$PROJECT_DIR$/performance/hello/main.dart" />
<option value="$PROJECT_DIR$/test/encoders_buffer_test.dart" /> <option value="$PROJECT_DIR$/test/encoders_buffer_test.dart" />
<option value="$PROJECT_DIR$/lib/src/http/injection.dart" />
<option value="$PROJECT_DIR$/pubspec.yaml" />
<option value="$PROJECT_DIR$/lib/src/http/request_context.dart" />
<option value="$PROJECT_DIR$/example/json.dart" /> <option value="$PROJECT_DIR$/example/json.dart" />
<option value="$PROJECT_DIR$/lib/src/http/angel_base.dart" /> <option value="$PROJECT_DIR$/lib/src/http/angel_base.dart" />
<option value="$PROJECT_DIR$/test/all.dart" />
<option value="$PROJECT_DIR$/lib/src/http/http.dart" />
<option value="$PROJECT_DIR$/test/routing_test.dart" />
<option value="$PROJECT_DIR$/lib/src/http/response_context.dart" /> <option value="$PROJECT_DIR$/lib/src/http/response_context.dart" />
<option value="$PROJECT_DIR$/lib/src/http/routable.dart" /> <option value="$PROJECT_DIR$/lib/src/http/routable.dart" />
<option value="$PROJECT_DIR$/lib/src/http/controller.dart" />
<option value="$PROJECT_DIR$/CHANGELOG.md" />
<option value="$PROJECT_DIR$/test/controller_test.dart" /> <option value="$PROJECT_DIR$/test/controller_test.dart" />
<option value="$PROJECT_DIR$/test/di_test.dart" /> <option value="$PROJECT_DIR$/test/di_test.dart" />
<option value="$PROJECT_DIR$/test/server_test.dart" /> <option value="$PROJECT_DIR$/test/server_test.dart" />
<option value="$PROJECT_DIR$/test/routing_test.dart" />
<option value="$PROJECT_DIR$/pubspec.yaml" />
<option value="$PROJECT_DIR$/lib/src/http/pattern_matcher.dart" />
<option value="$PROJECT_DIR$/lib/src/http/controller.dart" />
<option value="$PROJECT_DIR$/lib/src/http/server.dart" /> <option value="$PROJECT_DIR$/lib/src/http/server.dart" />
<option value="$PROJECT_DIR$/lib/src/http/request_context.dart" />
<option value="$PROJECT_DIR$/lib/src/http/metadata.dart" />
<option value="$PROJECT_DIR$/lib/src/http/injection.dart" />
<option value="$PROJECT_DIR$/test/parameter_meta_test.dart" />
<option value="$PROJECT_DIR$/test/pattern_matcher_test.dart" />
<option value="$PROJECT_DIR$/lib/src/http/http.dart" />
<option value="$PROJECT_DIR$/CHANGELOG.md" />
<option value="$PROJECT_DIR$/test/all.dart" />
</list> </list>
</option> </option>
</component> </component>
@ -297,9 +268,9 @@
<sorting>DEFINITION_ORDER</sorting> <sorting>DEFINITION_ORDER</sorting>
</component> </component>
<component name="ProjectFrameBounds"> <component name="ProjectFrameBounds">
<option name="x" value="166" /> <option name="x" value="45" />
<option name="y" value="23" /> <option name="y" value="23" />
<option name="width" value="1168" /> <option name="width" value="1395" />
<option name="height" value="797" /> <option name="height" value="797" />
</component> </component>
<component name="ProjectLevelVcsManager"> <component name="ProjectLevelVcsManager">
@ -320,8 +291,10 @@
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="PackagesPane" />
<pane id="Scratches" /> <pane id="Scratches" />
<pane id="ProjectPane" />
<pane id="AndroidView" />
<pane id="PackagesPane" />
<pane id="Scope"> <pane id="Scope">
<subPane subId="Project Files"> <subPane subId="Project Files">
<expand> <expand>
@ -347,27 +320,15 @@
<item name="src" type="cbb8eebc:String" user="src" /> <item name="src" type="cbb8eebc:String" user="src" />
<item name="http" type="cbb8eebc:String" user="http" /> <item name="http" type="cbb8eebc:String" user="http" />
</path> </path>
<path>
<item name="Root" type="cbb8eebc:String" user="Root" />
<item name="framework" type="cbb8eebc:String" user="framework" />
<item name="performance/hello" type="cbb8eebc:String" user="performance/hello" />
</path>
<path> <path>
<item name="Root" type="cbb8eebc:String" user="Root" /> <item name="Root" type="cbb8eebc:String" user="Root" />
<item name="framework" type="cbb8eebc:String" user="framework" /> <item name="framework" type="cbb8eebc:String" user="framework" />
<item name="test" type="cbb8eebc:String" user="test" /> <item name="test" type="cbb8eebc:String" user="test" />
</path> </path>
<path>
<item name="Root" type="cbb8eebc:String" user="Root" />
<item name="framework" type="cbb8eebc:String" user="framework" />
<item name="tool" type="cbb8eebc:String" user="tool" />
</path>
</expand> </expand>
<select /> <select />
</subPane> </subPane>
</pane> </pane>
<pane id="ProjectPane" />
<pane id="AndroidView" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
@ -401,6 +362,11 @@
</option> </option>
</component> </component>
<component name="RunManager" selected="Dart Test.All Tests"> <component name="RunManager" selected="Dart Test.All Tests">
<configuration name="Chained routes in routing_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
<option name="filePath" value="$PROJECT_DIR$/test/routing_test.dart" />
<option name="scope" value="GROUP_OR_TEST_BY_NAME" />
<option name="testName" value="Chained routes" />
</configuration>
<configuration default="true" type="BashConfigurationType" factoryName="Bash"> <configuration default="true" type="BashConfigurationType" factoryName="Bash">
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
<option name="INTERPRETER_PATH" value="C:\Windows\system32\bash.exe" /> <option name="INTERPRETER_PATH" value="C:\Windows\system32\bash.exe" />
@ -516,6 +482,11 @@
<option name="scope" value="GROUP_OR_TEST_BY_NAME" /> <option name="scope" value="GROUP_OR_TEST_BY_NAME" />
<option name="testName" value="default view generator" /> <option name="testName" value="default view generator" />
</configuration> </configuration>
<configuration name="injects header or throws in parameter_meta_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
<option name="filePath" value="$PROJECT_DIR$/test/parameter_meta_test.dart" />
<option name="scope" value="GROUP_OR_TEST_BY_NAME" />
<option name="testName" value="injects header or throws" />
</configuration>
<configuration name="only match route with matching method in routing_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true"> <configuration name="only match route with matching method in routing_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
<option name="filePath" value="$PROJECT_DIR$/test/routing_test.dart" /> <option name="filePath" value="$PROJECT_DIR$/test/routing_test.dart" />
<option name="scope" value="GROUP_OR_TEST_BY_NAME" /> <option name="scope" value="GROUP_OR_TEST_BY_NAME" />
@ -542,6 +513,10 @@
<option name="filePath" value="$PROJECT_DIR$/test/exception_test.dart" /> <option name="filePath" value="$PROJECT_DIR$/test/exception_test.dart" />
<option name="testName" value="exception_test.dart" /> <option name="testName" value="exception_test.dart" />
</configuration> </configuration>
<configuration name="tests in parameter_meta_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
<option name="filePath" value="$PROJECT_DIR$/test/parameter_meta_test.dart" />
<option name="testName" value="parameter_meta_test.dart" />
</configuration>
<configuration name="tests in precontained_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true"> <configuration name="tests in precontained_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
<option name="filePath" value="$PROJECT_DIR$/test/precontained_test.dart" /> <option name="filePath" value="$PROJECT_DIR$/test/precontained_test.dart" />
<option name="testName" value="precontained_test.dart" /> <option name="testName" value="precontained_test.dart" />
@ -566,37 +541,41 @@
<option name="filePath" value="$PROJECT_DIR$/test/typed_service_test.dart" /> <option name="filePath" value="$PROJECT_DIR$/test/typed_service_test.dart" />
<option name="testName" value="typed_service_test.dart" /> <option name="testName" value="typed_service_test.dart" />
</configuration> </configuration>
<list size="30"> <list size="34">
<item index="0" class="java.lang.String" itemvalue="Dart Test.only match route with matching method in routing_test.dart" /> <item index="0" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello" />
<item index="1" class="java.lang.String" itemvalue="Dart Test.only uses one encoder in encoders_buffer_test.dart" /> <item index="1" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (for coverage)" />
<item index="2" class="java.lang.String" itemvalue="Dart Test.can send html in server_test.dart" /> <item index="2" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (PRODUCTION)" />
<item index="3" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello" /> <item index="3" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello::raw" />
<item index="4" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (for coverage)" /> <item index="4" class="java.lang.String" itemvalue="Dart Test.injects header or throws in parameter_meta_test.dart" />
<item index="5" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (PRODUCTION)" /> <item index="5" class="java.lang.String" itemvalue="Dart Test.injects session or throws in parameter_meta_test.dart" />
<item index="6" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello::raw" /> <item index="6" class="java.lang.String" itemvalue="Dart Test.tests in parameter_meta_test.dart" />
<item index="7" class="java.lang.String" itemvalue="Dart Test.tests in primitives_test.dart" /> <item index="7" class="java.lang.String" itemvalue="Dart Test.Chained routes in routing_test.dart" />
<item index="8" class="java.lang.String" itemvalue="Dart Test.tests in repeat_request_test.dart" /> <item index="8" class="java.lang.String" itemvalue="Dart Test.only match route with matching method in routing_test.dart" />
<item index="9" class="java.lang.String" itemvalue="Dart Test.tests in encoders_buffer_test.dart" /> <item index="9" class="java.lang.String" itemvalue="Dart Test.only uses one encoder in encoders_buffer_test.dart" />
<item index="10" class="java.lang.String" itemvalue="Dart Test.tests in streaming_test.dart" /> <item index="10" class="java.lang.String" itemvalue="Dart Test.can send html in server_test.dart" />
<item index="11" class="java.lang.String" itemvalue="Dart Test.can create data in services_test.dart" /> <item index="11" class="java.lang.String" itemvalue="Dart Test.tests in primitives_test.dart" />
<item index="12" class="java.lang.String" itemvalue="Dart Test.can delete data in services_test.dart" /> <item index="12" class="java.lang.String" itemvalue="Dart Test.tests in repeat_request_test.dart" />
<item index="13" class="java.lang.String" itemvalue="Dart Test.can use app.properties like members in util_test.dart" /> <item index="13" class="java.lang.String" itemvalue="Dart Test.tests in encoders_buffer_test.dart" />
<item index="14" class="java.lang.String" itemvalue="Dart Test.tests in accepts_test.dart" /> <item index="14" class="java.lang.String" itemvalue="Dart Test.tests in streaming_test.dart" />
<item index="15" class="java.lang.String" itemvalue="Dart Test.contains provider in before and after in hooked_test.dart" /> <item index="15" class="java.lang.String" itemvalue="Dart Test.can create data in services_test.dart" />
<item index="16" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart" /> <item index="16" class="java.lang.String" itemvalue="Dart Test.can delete data in services_test.dart" />
<item index="17" class="java.lang.String" itemvalue="Dart Test.tests in anonymous_service_test.dart" /> <item index="17" class="java.lang.String" itemvalue="Dart Test.can use app.properties like members in util_test.dart" />
<item index="18" class="java.lang.String" itemvalue="Dart Test.tests in exception_test.dart" /> <item index="18" class="java.lang.String" itemvalue="Dart Test.tests in accepts_test.dart" />
<item index="19" class="java.lang.String" itemvalue="Dart Test.tests in typed_service_test.dart" /> <item index="19" class="java.lang.String" itemvalue="Dart Test.contains provider in before and after in hooked_test.dart" />
<item index="20" class="java.lang.String" itemvalue="Dart Test.default view generator in view_generator_test.dart" /> <item index="20" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart" />
<item index="21" class="java.lang.String" itemvalue="Dart Test.tests in precontained_test.dart" /> <item index="21" class="java.lang.String" itemvalue="Dart Test.tests in anonymous_service_test.dart" />
<item index="22" class="java.lang.String" itemvalue="Dart Test.Controller Tests" /> <item index="22" class="java.lang.String" itemvalue="Dart Test.tests in exception_test.dart" />
<item index="23" class="java.lang.String" itemvalue="Dart Test.DI Tests" /> <item index="23" class="java.lang.String" itemvalue="Dart Test.tests in typed_service_test.dart" />
<item index="24" class="java.lang.String" itemvalue="Dart Test.Hooked Tests" /> <item index="24" class="java.lang.String" itemvalue="Dart Test.default view generator in view_generator_test.dart" />
<item index="25" class="java.lang.String" itemvalue="Dart Test.Routing Tests" /> <item index="25" class="java.lang.String" itemvalue="Dart Test.tests in precontained_test.dart" />
<item index="26" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart (PRODUCTION)" /> <item index="26" class="java.lang.String" itemvalue="Dart Test.Controller Tests" />
<item index="27" class="java.lang.String" itemvalue="Dart Test.All Tests" /> <item index="27" class="java.lang.String" itemvalue="Dart Test.DI Tests" />
<item index="28" class="java.lang.String" itemvalue="Dart Test.All Tests (PRODUCTION)" /> <item index="28" class="java.lang.String" itemvalue="Dart Test.Hooked Tests" />
<item index="29" class="java.lang.String" itemvalue="Dart Test.cannot write after close in streaming_test.dart" /> <item index="29" class="java.lang.String" itemvalue="Dart Test.Routing Tests" />
<item index="30" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart (PRODUCTION)" />
<item index="31" class="java.lang.String" itemvalue="Dart Test.All Tests" />
<item index="32" class="java.lang.String" itemvalue="Dart Test.All Tests (PRODUCTION)" />
<item index="33" class="java.lang.String" itemvalue="Dart Test.cannot write after close in streaming_test.dart" />
</list> </list>
</component> </component>
<component name="ShelveChangesManager" show_recycled="false"> <component name="ShelveChangesManager" show_recycled="false">
@ -647,7 +626,11 @@
<workItem from="1506090042437" duration="1751000" /> <workItem from="1506090042437" duration="1751000" />
<workItem from="1506275395906" duration="424000" /> <workItem from="1506275395906" duration="424000" />
<workItem from="1506281553143" duration="657000" /> <workItem from="1506281553143" duration="657000" />
<workItem from="1507123481086" duration="2431000" /> <workItem from="1507123481086" duration="2629000" />
<workItem from="1507496428508" duration="1038000" />
<workItem from="1507502664740" duration="80000" />
<workItem from="1507556590639" duration="230000" />
<workItem from="1507641822711" duration="7922000" />
</task> </task>
<task id="LOCAL-00001" summary="Re-designed exception"> <task id="LOCAL-00001" summary="Re-designed exception">
<created>1481237183504</created> <created>1481237183504</created>
@ -919,39 +902,39 @@
<servers /> <servers />
</component> </component>
<component name="TestHistory"> <component name="TestHistory">
<history-entry file="All_Tests - 2017.10.04 at 09h 53m 19s.xml"> <history-entry file="All_Tests - 2017.10.10 at 12h 54m 58s.xml">
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" /> <configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="All_Tests - 2017.10.04 at 09h 54m 24s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 48m 40s.xml">
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="All_Tests - 2017.10.04 at 09h 55m 00s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 48m 52s.xml">
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="All_Tests - 2017.10.04 at 09h 56m 57s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 49m 07s.xml">
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="All_Tests - 2017.10.04 at 09h 57m 31s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 50m 18s.xml">
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="All_Tests - 2017.10.04 at 10h 01m 10s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 50m 23s.xml">
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="All_Tests - 2017.10.04 at 10h 07m 57s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 50m 40s.xml">
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="only_match_route_with_matching_method_in_routing_test_dart - 2017.10.04 at 09h 49m 09s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 50m 57s.xml">
<configuration name="only match route with matching method in routing_test.dart" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="only_match_route_with_matching_method_in_routing_test_dart - 2017.10.04 at 09h 49m 38s.xml"> <history-entry file="pattern_matching_in_parameter_meta_test_dart - 2017.10.10 at 12h 52m 21s.xml">
<configuration name="only match route with matching method in routing_test.dart" configurationId="DartTestRunConfigurationType" /> <configuration name="pattern matching in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="only_match_route_with_matching_method_in_routing_test_dart - 2017.10.04 at 09h 52m 16s.xml"> <history-entry file="tests_in_parameter_meta_test_dart - 2017.10.10 at 12h 45m 38s.xml">
<configuration name="only match route with matching method in routing_test.dart" configurationId="DartTestRunConfigurationType" /> <configuration name="tests in parameter_meta_test.dart" configurationId="DartTestRunConfigurationType" />
</history-entry> </history-entry>
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="59292000" /> <option name="totallyTimeSpent" value="68760000" />
</component> </component>
<component name="TodoView"> <component name="TodoView">
<todo-panel id="selected-file"> <todo-panel id="selected-file">
@ -963,31 +946,31 @@
</todo-panel> </todo-panel>
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="166" y="23" width="1168" height="797" extended-state="0" /> <frame x="45" y="23" width="1395" height="797" extended-state="0" />
<editor active="true" /> <editor active="true" />
<layout> <layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32763532" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32763532" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32478634" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.34188035" sideWeight="0.5035524" order="7" side_tool="true" content_ui="tabs" /> <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.34188035" sideWeight="0.5035524" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Dart Analysis" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.31438935" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Dart Analysis" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.31438935" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.4017094" sideWeight="0.4964476" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32905984" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32905984" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.4017094" sideWeight="0.4964476" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4814815" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4814815" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.27264655" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25055432" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32905984" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Tool Output" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Tool Output" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
@ -996,9 +979,9 @@
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="ANTLR Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="ANTLR Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="DB Browser" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32998413" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="DB Browser" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32998413" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32478634" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Coverage" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> <window_info id="Coverage" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32905984" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout> </layout>
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@ -1040,51 +1023,6 @@
<watches-manager /> <watches-manager />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/mock_request-1.0.0/lib/src/response.dart" />
<entry file="file://$PROJECT_DIR$/test/view_generator_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/repeat_request_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="4" selection-end-column="32" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tool/travis.sh">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" column="12" lean-forward="false" selection-start-line="2" selection-start-column="12" selection-end-line="2" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/metadata.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="9" column="1" lean-forward="false" selection-start-line="9" selection-start-column="1" selection-end-line="9" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/memory_service.dart" />
<entry file="file://$PROJECT_DIR$/lib/src/defs.dart" />
<entry file="file://$PROJECT_DIR$/test/common.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="4" column="19" lean-forward="false" selection-start-line="4" selection-start-column="19" selection-end-line="4" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file:///usr/local/Cellar/dart/1.24.2/libexec/lib/async/zone.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="40" column="25" lean-forward="false" selection-start-line="40" selection-start-column="25" selection-end-line="41" selection-end-column="60" />
</state>
</provider>
</entry>
<entry file="file:///usr/local/Cellar/dart/1.24.2/libexec/lib/async/stream.dart"> <entry file="file:///usr/local/Cellar/dart/1.24.2/libexec/lib/async/stream.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="145"> <state relative-caret-position="145">
@ -1171,7 +1109,6 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="360"> <state relative-caret-position="360">
<caret line="29" column="0" lean-forward="false" selection-start-line="29" selection-start-column="0" selection-end-line="32" selection-end-column="6" /> <caret line="29" column="0" lean-forward="false" selection-start-line="29" selection-start-column="0" selection-end-line="32" selection-end-column="6" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
@ -1210,20 +1147,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/injection.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="222">
<caret line="59" column="41" lean-forward="true" selection-start-line="59" selection-start-column="41" selection-end-line="59" selection-end-column="41" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
<caret line="1" column="22" lean-forward="false" selection-start-line="1" selection-start-column="22" selection-end-line="1" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/encoders_buffer_test.dart"> <entry file="file://$PROJECT_DIR$/test/encoders_buffer_test.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="903"> <state relative-caret-position="903">
@ -1231,79 +1154,27 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/request_context.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="292">
<caret line="34" column="40" lean-forward="true" selection-start-line="34" selection-start-column="40" selection-end-line="34" selection-end-column="40" />
<folding>
<element signature="e#47#67#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib/src/router.dart"> <entry file="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib/src/router.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="258"> <state relative-caret-position="258">
<caret line="251" column="41" lean-forward="true" selection-start-line="251" selection-start-column="41" selection-end-line="251" selection-end-column="41" /> <caret line="251" column="41" lean-forward="true" selection-start-line="251" selection-start-column="41" selection-end-line="251" selection-end-column="41" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/base_middleware.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/base_plugin.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/base_middleware.dart" />
<entry file="file://$PROJECT_DIR$/lib/src/http/base_plugin.dart" />
<entry file="file://$PROJECT_DIR$/example/json.dart"> <entry file="file://$PROJECT_DIR$/example/json.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="282"> <state relative-caret-position="282">
<caret line="45" column="37" lean-forward="true" selection-start-line="45" selection-start-column="37" selection-end-line="45" selection-end-column="37" /> <caret line="45" column="37" lean-forward="true" selection-start-line="45" selection-start-column="37" selection-end-line="45" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/util_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="282">
<caret line="30" column="7" lean-forward="true" selection-start-line="30" selection-start-column="7" selection-end-line="30" selection-end-column="7" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/all.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="234">
<caret line="31" column="39" lean-forward="true" selection-start-line="31" selection-start-column="39" selection-end-line="31" selection-end-column="39" />
<folding>
<element signature="e#0#38#0" expanded="false" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/test/util_test.dart" />
<entry file="file://$PROJECT_DIR$/lib/src/http/angel_base.dart"> <entry file="file://$PROJECT_DIR$/lib/src/http/angel_base.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45"> <state relative-caret-position="45">
<caret line="3" column="42" lean-forward="false" selection-start-line="3" selection-start-column="42" selection-end-line="3" selection-end-column="42" /> <caret line="3" column="42" lean-forward="false" selection-start-line="3" selection-start-column="42" selection-end-line="3" selection-end-column="42" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/http.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="20" column="22" lean-forward="true" selection-start-line="20" selection-start-column="22" selection-end-line="20" selection-end-column="22" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
@ -1312,74 +1183,34 @@
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding>
<element signature="e#39#59#0" expanded="true" /> <element signature="e#39#59#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/routing_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="168">
<caret line="38" column="21" lean-forward="true" selection-start-line="38" selection-start-column="21" selection-end-line="38" selection-end-column="21" />
<folding>
<element signature="e#0#22#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart"> <entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="139"> <state relative-caret-position="3825">
<caret line="264" column="63" lean-forward="false" selection-start-line="264" selection-start-column="63" selection-end-line="264" selection-end-column="63" /> <caret line="264" column="63" lean-forward="false" selection-start-line="264" selection-start-column="63" selection-end-line="264" selection-end-column="63" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/routable.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="6" column="25" lean-forward="false" selection-start-line="6" selection-start-column="25" selection-end-line="6" selection-end-column="25" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/controller.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="139">
<caret line="54" column="8" lean-forward="false" selection-start-line="54" selection-start-column="8" selection-end-line="54" selection-end-column="8" />
<folding>
<element signature="e#42#62#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/CHANGELOG.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="105">
<caret line="7" column="85" lean-forward="false" selection-start-line="7" selection-start-column="85" selection-end-line="7" selection-end-column="85" />
<folding />
</first_editor>
<second_editor />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/test/controller_test.dart"> <entry file="file://$PROJECT_DIR$/test/controller_test.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180"> <state relative-caret-position="1320">
<caret line="95" column="61" lean-forward="false" selection-start-line="95" selection-start-column="45" selection-end-line="95" selection-end-column="61" /> <caret line="95" column="61" lean-forward="false" selection-start-line="95" selection-start-column="45" selection-end-line="95" selection-end-column="61" />
<folding> <folding>
<element signature="e#0#20#0" expanded="true" /> <element signature="e#0#20#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/test/di_test.dart"> <entry file="file://$PROJECT_DIR$/test/di_test.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420"> <state relative-caret-position="330">
<caret line="28" column="62" lean-forward="false" selection-start-line="28" selection-start-column="62" selection-end-line="28" selection-end-column="62" /> <caret line="28" column="62" lean-forward="false" selection-start-line="28" selection-start-column="62" selection-end-line="28" selection-end-column="62" />
<folding> <folding>
<element signature="e#0#22#0" expanded="true" /> <element signature="e#0#22#0" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
@ -1392,10 +1223,27 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart"> <entry file="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib/src/middleware_pipeline.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165"> <state relative-caret-position="120">
<caret line="13" column="34" lean-forward="false" selection-start-line="13" selection-start-column="34" selection-end-line="13" selection-end-column="34" /> <caret line="8" column="11" lean-forward="false" selection-start-line="8" selection-start-column="11" selection-end-line="8" selection-end-column="11" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/routing_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1404">
<caret line="105" column="18" lean-forward="true" selection-start-line="105" selection-start-column="18" selection-end-line="105" selection-end-column="18" />
<folding>
<element signature="e#0#22#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="8" column="30" lean-forward="true" selection-start-line="8" selection-start-column="30" selection-end-line="8" selection-end-column="30" />
<folding /> <folding />
</state> </state>
</provider> </provider>
@ -1404,7 +1252,7 @@
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT"> <state split_layout="SPLIT">
<first_editor relative-caret-position="285"> <first_editor relative-caret-position="285">
<caret line="19" column="6" lean-forward="true" selection-start-line="19" selection-start-column="6" selection-end-line="19" selection-end-column="6" /> <caret line="19" column="6" lean-forward="false" selection-start-line="19" selection-start-column="6" selection-end-line="19" selection-end-column="6" />
<folding> <folding>
<marker date="1506049250000" expanded="true" signature="588:776" ph="{...}" /> <marker date="1506049250000" expanded="true" signature="588:776" ph="{...}" />
</folding> </folding>
@ -1413,6 +1261,151 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/test/precontained_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="255">
<caret line="17" column="24" lean-forward="false" selection-start-line="17" selection-start-column="24" selection-end-line="17" selection-end-column="24" />
<folding>
<element signature="e#0#22#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/.pub-cache/hosted/pub.dartlang.org/mock_request-1.0.2/lib/src/response.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="15" column="21" lean-forward="false" selection-start-line="15" selection-start-column="21" selection-end-line="15" selection-end-column="21" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/util.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="10" column="5" lean-forward="true" selection-start-line="10" selection-start-column="5" selection-end-line="10" selection-end-column="5" />
<folding>
<element signature="e#0#20#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file:///usr/local/Cellar/dart/1.24.2/libexec/lib/async/zone.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="47">
<caret line="1433" column="2" lean-forward="false" selection-start-line="1433" selection-start-column="2" selection-end-line="1433" selection-end-column="2" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/request_context.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="33" column="13" lean-forward="false" selection-start-line="33" selection-start-column="13" selection-end-line="33" selection-end-column="13" />
<folding>
<element signature="e#47#67#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/routable.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="9" column="23" lean-forward="false" selection-start-line="9" selection-start-column="23" selection-end-line="9" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/server.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="243">
<caret line="480" column="23" lean-forward="false" selection-start-line="480" selection-start-column="13" selection-end-line="480" selection-end-column="23" />
<folding>
<element signature="e#38#58#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/metadata.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="615">
<caret line="100" column="8" lean-forward="false" selection-start-line="100" selection-start-column="8" selection-end-line="100" selection-end-column="8" />
<folding>
<element signature="e#40#101#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/injection.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="73" column="28" lean-forward="false" selection-start-line="73" selection-start-column="28" selection-end-line="73" selection-end-column="28" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/controller.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-323">
<caret line="18" column="0" lean-forward="true" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/pattern_matcher.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="22" column="5" lean-forward="true" selection-start-line="22" selection-start-column="5" selection-end-line="22" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/parameter_meta_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="12" column="13" lean-forward="true" selection-start-line="12" selection-start-column="13" selection-end-line="12" selection-end-column="13" />
<folding>
<element signature="e#0#20#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/pattern_matcher_test.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="257">
<caret line="59" column="40" lean-forward="true" selection-start-line="59" selection-start-column="40" selection-end-line="78" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/lib/src/http/http.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="15" column="23" lean-forward="false" selection-start-line="15" selection-start-column="23" selection-end-line="15" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/CHANGELOG.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="15">
<caret line="1" column="70" lean-forward="false" selection-start-line="1" selection-start-column="70" selection-end-line="1" selection-end-column="70" />
<folding />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test/all.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="140">
<caret line="31" column="23" lean-forward="false" selection-start-line="31" selection-start-column="23" selection-end-line="31" selection-end-column="23" />
<folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component> </component>
<component name="masterDetails"> <component name="masterDetails">
<states> <states>

View file

@ -1,3 +1,6 @@
# 1.1.0-alpha+6
* Added `@Parameter()` annotations, with support for pattern matching.
# 1.1.0-alpha+5 # 1.1.0-alpha+5
* Closed [#166](https://github.com/angel-dart/framework/issues/166), killing any hanging `Stopwatch` instances when streaming. * Closed [#166](https://github.com/angel-dart/framework/issues/166), killing any hanging `Stopwatch` instances when streaming.
* Removed `AngelPlugin` and `AngelMiddleware`, as well as the `@proxy` annotations from `Angel` and `RequestContext`. * Removed `AngelPlugin` and `AngelMiddleware`, as well as the `@proxy` annotations from `Angel` and `RequestContext`.

View file

@ -12,76 +12,84 @@ RequestHandler createDynamicHandler(handler,
return handleContained(handler, injection); return handleContained(handler, injection);
} }
resolveInjection(requirement, InjectionRequest injection, RequestContext req,
ResponseContext res, bool throwOnUnresolved) {
var propFromApp;
if (requirement == RequestContext) {
return req;
} else if (requirement == ResponseContext) {
return res;
} else if (requirement is String &&
injection.parameters.containsKey(requirement)) {
var param = injection.parameters[requirement];
var value = param.getValue(req);
if (value == null && param.required != false) throw param.error;
return value;
} else if (requirement is String) {
if (req.params.containsKey(requirement)) {
return req.params[requirement];
} else if (req._injections.containsKey(requirement))
return req._injections[requirement];
else if (req.properties.containsKey(requirement))
return req.properties[requirement];
else if ((propFromApp = req.app.findProperty(requirement)) != null)
return propFromApp;
else if (injection.optional.contains(requirement))
return null;
else if (throwOnUnresolved) {
throw new ArgumentError(
"Cannot resolve parameter '$requirement' within handler.");
}
} else if (requirement is List &&
requirement.length == 2 &&
requirement.first is String &&
requirement.last is Type) {
String key = requirement.first;
Type type = requirement.last;
if (req.params.containsKey(key) ||
req._injections.containsKey(key) ||
req.properties.containsKey(key) ||
req.app.configuration.containsKey(key) ||
_primitiveTypes.contains(type)) {
return resolveInjection(key, injection, req, res, throwOnUnresolved);
} else
return resolveInjection(type, injection, req, res, throwOnUnresolved);
} else if (requirement is Type && requirement != dynamic) {
if (req._injections.containsKey(requirement))
return req._injections[requirement];
else
return req.app.container.make(requirement);
} else if (throwOnUnresolved) {
throw new ArgumentError(
'$requirement cannot be injected into a request handler.');
}
}
/// Checks if an [InjectionRequest] can be sufficiently executed within the current request/response context.
bool suitableForInjection(RequestContext req, ResponseContext res, InjectionRequest injection) {
return injection.parameters.values.any((p) {
if (p.match == null) return false;
var value = p.getValue(req);
return value == p.match;
});
}
/// Handles a request with a DI-enabled handler. /// Handles a request with a DI-enabled handler.
RequestHandler handleContained(handler, InjectionRequest injection) { RequestHandler handleContained(handler, InjectionRequest injection) {
return (RequestContext req, ResponseContext res) async { return (RequestContext req, ResponseContext res) async {
if (injection.parameters.isNotEmpty && injection.parameters.values.any((p) => p.match != null) && !suitableForInjection(req, res, injection))
return true;
List args = []; List args = [];
void inject(requirement) {
var propFromApp;
if (requirement == RequestContext) {
args.add(req);
} else if (requirement == ResponseContext) {
args.add(res);
} else if (requirement is String) {
if (req.params.containsKey(requirement)) {
args.add(req.params[requirement]);
} else if (req._injections.containsKey(requirement))
args.add(req._injections[requirement]);
else if (req.properties.containsKey(requirement))
args.add(req.properties[requirement]);
else if ((propFromApp = req.app.findProperty(requirement)) != null)
args.add(propFromApp);
else if (injection.optional.contains(requirement))
args.add(null);
else {
throw new ArgumentError(
"Cannot resolve parameter '$requirement' within handler.");
}
} else if (requirement is List &&
requirement.length == 2 &&
requirement.first is String &&
requirement.last is Type) {
String key = requirement.first;
Type type = requirement.last;
if (req.params.containsKey(key) ||
req._injections.containsKey(key) ||
req.properties.containsKey(key) ||
req.app.configuration.containsKey(key) ||
_primitiveTypes.contains(type)) {
inject(key);
} else
inject(type);
} else if (requirement is Type && requirement != dynamic) {
if (req._injections.containsKey(requirement))
args.add(req._injections[requirement]);
else
args.add(req.app.container.make(requirement));
} else {
throw new ArgumentError(
'$requirement cannot be injected into a request handler.');
}
}
Map<Symbol, dynamic> named = {}; Map<Symbol, dynamic> named = {};
injection.required.forEach(inject); args.addAll(injection.required
.map((r) => resolveInjection(r, injection, req, res, true)));
injection.named.forEach((k, v) { injection.named.forEach((k, v) {
var name = new Symbol(k); var name = new Symbol(k);
if (req.params.containsKey(k)) named[name] = resolveInjection([k, v], injection, req, res, false);
named[name] = v;
else if (req._injections.containsKey(k))
named[name] = v;
else if (req._injections.containsKey(v) && v != dynamic)
named[name] = v;
else {
try {
named[name] = req.app.container.make(v);
} catch (e) {
named[name] = null;
}
}
}); });
var result = Function.apply(handler, args, named); var result = Function.apply(handler, args, named);
@ -106,14 +114,24 @@ class InjectionRequest {
/// A list of the arguments that can be null in a DI-enabled method. /// A list of the arguments that can be null in a DI-enabled method.
final List<String> optional; final List<String> optional;
const InjectionRequest.constant({this.named, this.required, this.optional}); /// Extended parameter definitions.
final Map<String, Parameter> parameters;
const InjectionRequest.constant(
{this.named: const {},
this.required: const [],
this.optional: const [],
this.parameters: const {}});
InjectionRequest() InjectionRequest()
: named = {}, : named = {},
required = [], required = [],
optional = []; optional = [],
parameters = {};
} }
final TypeMirror _Parameter = reflectType(Parameter);
/// Predetermines what needs to be injected for a handler to run. /// Predetermines what needs to be injected for a handler to run.
InjectionRequest preInject(Function handler) { InjectionRequest preInject(Function handler) {
var injection = new InjectionRequest(); var injection = new InjectionRequest();
@ -127,6 +145,22 @@ InjectionRequest preInject(Function handler) {
var name = MirrorSystem.getName(parameter.simpleName); var name = MirrorSystem.getName(parameter.simpleName);
var type = parameter.type.reflectedType; var type = parameter.type.reflectedType;
var p = parameter.metadata
.firstWhere((m) => m.type.isAssignableTo(_Parameter),
orElse: () => null)
?.reflectee as Parameter;
if (p != null) {
injection.parameters[name] = new Parameter(
cookie: p.cookie,
header: p.header,
query: p.query,
session: p.session,
match: p.match,
defaultValue: p.defaultValue,
required: parameter.isNamed ? false : p.required != false,
);
}
if (!parameter.isNamed) { if (!parameter.isNamed) {
if (parameter.isOptional) injection.optional.add(name); if (parameter.isOptional) injection.optional.add(name);

View file

@ -1,6 +1,8 @@
library angel_framework.http.metadata; library angel_framework.http.metadata;
import 'hooked_service.dart' show HookedServiceEventListener; import 'hooked_service.dart' show HookedServiceEventListener;
import 'package:angel_http_exception/angel_http_exception.dart';
import 'request_context.dart';
/// Annotation to map middleware onto a handler. /// Annotation to map middleware onto a handler.
class Middleware { class Middleware {
@ -31,3 +33,105 @@ class Expose {
this.as: null, this.as: null,
this.allowNull: const []}); this.allowNull: const []});
} }
/// Used to apply special dependency injections or functionality to a function parameter.
class Parameter {
/// Inject the value of a request cookie.
final String cookie;
/// Inject the value of a request header.
final String header;
/// Inject the value of a key from the session.
final String session;
/// Inject the value of a key from the query.
final String query;
/// Only execute the handler if the value of this parameter matches the given value.
final match;
/// Specify a default value.
final defaultValue;
/// If `true` (default), then an error will be thrown if this parameter is not present.
final bool required;
const Parameter(
{this.cookie,
this.query,
this.header,
this.session,
this.match,
this.defaultValue,
this.required});
/// Returns an error that can be thrown when the parameter is not present.
get error {
if (cookie?.isNotEmpty == true)
return new AngelHttpException.badRequest(
message: 'Missing required cookie "$cookie".');
if (header?.isNotEmpty == true)
return new AngelHttpException.badRequest(
message: 'Missing required header "$header".');
if (query?.isNotEmpty == true)
return new AngelHttpException.badRequest(
message: 'Missing required query parameter "$query".');
if (session?.isNotEmpty == true)
return new StateError(
'Session does not contain required key "$session".');
}
/// Obtains a value for this parameter from a [RequestContext].
getValue(RequestContext req) {
if (cookie?.isNotEmpty == true)
return req.cookies.firstWhere((c) => c.name == cookie)?.value ??
defaultValue;
if (header?.isNotEmpty == true)
return req.headers.value(header) ?? defaultValue;
if (session?.isNotEmpty == true)
return req.session[session] ?? defaultValue;
if (query?.isNotEmpty == true) return req.query[query] ?? defaultValue;
return defaultValue;
}
}
/// Shortcut for declaring a request header [Parameter].
class Header extends Parameter {
const Header(String header, {match, defaultValue, bool required: true})
: super(
header: header,
match: match,
defaultValue: defaultValue,
required: required);
}
/// Shortcut for declaring a request session [Parameter].
class Session extends Parameter {
const Session(String session, {match, defaultValue, bool required: true})
: super(
session: session,
match: match,
defaultValue: defaultValue,
required: required);
}
/// Shortcut for declaring a request query [Parameter].
class Query extends Parameter {
const Query(String query, {match, defaultValue, bool required: true})
: super(
query: query,
match: match,
defaultValue: defaultValue,
required: required);
}
/// Shortcut for declaring a request cookie [Parameter].
class CookieValue extends Parameter {
const CookieValue(String cookie, {match, defaultValue, bool required: true})
: super(
cookie: cookie,
match: match,
defaultValue: defaultValue,
required: required);
}

View file

@ -3,8 +3,10 @@ library angel_framework.http.request_context;
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'dart:mirrors'; import 'dart:mirrors';
import 'package:angel_http_exception/angel_http_exception.dart';
import 'package:body_parser/body_parser.dart'; import 'package:body_parser/body_parser.dart';
import 'package:charcode/charcode.dart'; import 'package:charcode/charcode.dart';
import 'metadata.dart';
import 'response_context.dart'; import 'response_context.dart';
import 'routable.dart'; import 'routable.dart';
import 'server.dart' show Angel; import 'server.dart' show Angel;

View file

@ -347,7 +347,8 @@ class Angel extends AngelBase {
} }
res.statusCode = e.statusCode; res.statusCode = e.statusCode;
await errorHandler(e, req, res); var result = await errorHandler(e, req, res);
await executeHandler(result, req, res);
res.end(); res.end();
return await sendResponse(request, req, res, return await sendResponse(request, req, res,
ignoreFinalizers: ignoreFinalizers == true); ignoreFinalizers: ignoreFinalizers == true);
@ -360,7 +361,7 @@ class Angel extends AngelBase {
var zoneSpec = await createZoneForRequest(request, req, res); var zoneSpec = await createZoneForRequest(request, req, res);
var zone = Zone.current.fork(specification: zoneSpec); var zone = Zone.current.fork(specification: zoneSpec);
return zone.run(() async { return zone.runGuarded(() async {
String requestedUrl; String requestedUrl;
// Faster way to get path // Faster way to get path
@ -387,6 +388,7 @@ class Angel extends AngelBase {
Router r = isProduction ? (_flattened ??= flatten(this)) : this; Router r = isProduction ? (_flattened ??= flatten(this)) : this;
var resolved = var resolved =
r.resolveAll(requestedUrl, requestedUrl, method: req.method); r.resolveAll(requestedUrl, requestedUrl, method: req.method);
return new Tuple3( return new Tuple3(
new MiddlewarePipeline(resolved), new MiddlewarePipeline(resolved),
resolved.fold<Map>({}, (out, r) => out..addAll(r.allParams)), resolved.fold<Map>({}, (out, r) => out..addAll(r.allParams)),
@ -425,6 +427,15 @@ class Angel extends AngelBase {
ignoreFinalizers: true, ignoreFinalizers: true,
); );
} }
}).catchError((error, stackTrace) {
var e = new AngelHttpException(error,
stackTrace: stackTrace, message: error?.toString());
if (logger != null) {
logger.severe(e.message ?? e.toString(), error, stackTrace);
}
return handleAngelHttpException(e, stackTrace, req, res, request);
}); });
} }
@ -612,19 +623,6 @@ class Angel extends AngelBase {
createZoneForRequest = (request, req, res) async { createZoneForRequest = (request, req, res) async {
return new ZoneSpecification( 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) { print: (Zone self, ZoneDelegate parent, Zone zone, String line) {
if (logger != null) { if (logger != null) {
logger.info(line); logger.info(line);

View file

@ -15,13 +15,13 @@ dependencies:
flatten: ^1.0.0 flatten: ^1.0.0
json_god: ^2.0.0-beta json_god: ^2.0.0-beta
logging: ">=0.11.3 <1.0.0" logging: ">=0.11.3 <1.0.0"
matcher: ^0.12.0
merge_map: ^1.0.0 merge_map: ^1.0.0
meta: ^1.0.0 meta: ^1.0.0
mime: ^0.9.3 mime: ^0.9.3
random_string: ^0.0.1 random_string: ^0.0.1
tuple: ^1.0.0 tuple: ^1.0.0
dev_dependencies: dev_dependencies:
matcher: ^0.12.0
mock_request: ^1.0.0 mock_request: ^1.0.0
http: ^0.11.3 http: ^0.11.3
test: ^0.12.13 test: ^0.12.13

View file

@ -6,6 +6,7 @@ import 'encoders_buffer_test.dart' as encoders_buffer;
import 'exception_test.dart' as exception; import 'exception_test.dart' as exception;
import 'general_test.dart' as general; import 'general_test.dart' as general;
import 'hooked_test.dart' as hooked; import 'hooked_test.dart' as hooked;
import 'parameter_meta_test.dart' as parameter_meta;
import 'precontained_test.dart' as precontained; import 'precontained_test.dart' as precontained;
import 'primitives_test.dart' as primitives; import 'primitives_test.dart' as primitives;
import 'repeat_request_test.dart' as repeat_request; import 'repeat_request_test.dart' as repeat_request;
@ -28,6 +29,7 @@ main() {
group('exception', exception.main); group('exception', exception.main);
group('general', general.main); group('general', general.main);
group('hooked', hooked.main); group('hooked', hooked.main);
group('parameter_meta', parameter_meta.main);
group('precontained', precontained.main); group('precontained', precontained.main);
group('primitives', primitives.main); group('primitives', primitives.main);
group('repeat request', repeat_request.main); group('repeat request', repeat_request.main);

View file

@ -0,0 +1,131 @@
import 'dart:async';
import 'dart:convert';
import 'package:angel_framework/angel_framework.dart';
import 'package:logging/logging.dart';
import 'package:mock_request/mock_request.dart';
import 'package:test/test.dart';
Future<String> readResponse(MockHttpResponse rs) {
return rs.transform(UTF8.decoder).join();
}
Future printResponse(MockHttpResponse rs) {
return readResponse(rs).then((text) {
print(text.isEmpty ? '<empty response>' : text);
});
}
main() {
Angel app;
setUp(() {
app = new Angel()..lazyParseBodies = true;
app.get('/cookie', (@CookieValue('token') String jwt) {
return jwt;
});
app.get('/header', (@Header('x-foo') String header) {
return header;
});
app.get('/query', (@Query('q') String query) {
return query;
});
app.get('/session', (@Session('foo') String foo) {
return foo;
});
app.get('/match', (@Query('mode', match: 'pos') String mode) {
return 'YES $mode';
});
app.get('/match', (@Query('mode', match: 'neg') String mode) {
return 'NO $mode';
});
app.get('/match', (@Query('mode') String mode) {
return 'DEFAULT $mode';
});
app.logger = new Logger('parameter_meta_test')
..onRecord.listen((rec) {
print(rec);
if (rec.error != null) print(rec.error);
if (rec.stackTrace != null) print(rec.stackTrace);
});
});
test('injects header or throws', () async {
// Invalid request
var rq = new MockHttpRequest('GET', Uri.parse('/header'))..close();
var rs = rq.response;
await app.handleRequest(rq);
await printResponse(rs);
expect(rs.statusCode, 400);
// Valid request
rq = new MockHttpRequest('GET', Uri.parse('/header'))
..headers.add('x-foo', 'bar')
..close();
rs = rq.response;
await app.handleRequest(rq);
var body = await readResponse(rs);
print('Body: $body');
expect(rs.statusCode, 200);
expect(body, JSON.encode('bar'));
});
test('injects session or throws', () async {
// Invalid request
var rq = new MockHttpRequest('GET', Uri.parse('/session'))..close();
var rs = rq.response;
await app.handleRequest(rq);
await printResponse(rs);
expect(rs.statusCode, 500);
rq = new MockHttpRequest('GET', Uri.parse('/session'));
rq.session['foo'] = 'bar';
rq.close();
rs = rq.response;
await app.handleRequest(rq);
await printResponse(rs);
expect(rs.statusCode, 200);
});
// Originally, the plan was to test cookie, session, header, etc.,
// but that behavior has been consolidated into `getValue`. Thus,
// they will all function the same way.
test('pattern matching', () async {
var rq = new MockHttpRequest('GET', Uri.parse('/match?mode=pos'))..close();
var rs = rq.response;
await app.handleRequest(rq);
var body = await readResponse(rs);
print('Body: $body');
expect(rs.statusCode, 200);
expect(body, JSON.encode('YES pos'));
rq = new MockHttpRequest('GET', Uri.parse('/match?mode=neg'))..close();
rs = rq.response;
await app.handleRequest(rq);
body = await readResponse(rs);
print('Body: $body');
expect(rs.statusCode, 200);
expect(body, JSON.encode('NO neg'));
// Fallback
rq = new MockHttpRequest('GET', Uri.parse('/match?mode=ambi'))..close();
rs = rq.response;
await app.handleRequest(rq);
body = await readResponse(rs);
print('Body: $body');
expect(rs.statusCode, 200);
expect(body, JSON.encode('DEFAULT ambi'));
});
}

View file

@ -79,6 +79,15 @@ main() {
app.use('/query', new QueryService()); app.use('/query', new QueryService());
RequestMiddleware write(String message) {
return (req, res) async {
res.write(message);
return true;
};
}
app.chain(write('a')).chain([write('b'), write('c')]).get('/chained', () => false);
app.use('MJ'); app.use('MJ');
app.dumpTree(header: "DUMPING ROUTES:", showMatchers: true); app.dumpTree(header: "DUMPING ROUTES:", showMatchers: true);
@ -112,6 +121,11 @@ main() {
expect(json['last'], equals('WORLD')); expect(json['last'], equals('WORLD'));
}); });
test('Chained routes', () async {
var response = await client.get("$url/chained");
expect(response.body, equals('abc'));
});
test('Can nest another Angel instance', () async { test('Can nest another Angel instance', () async {
var response = await client.post('$url/nes/ted/foo'); var response = await client.post('$url/nes/ted/foo');
var json = JSON.decode(response.body); var json = JSON.decode(response.body);