1.0.9
This commit is contained in:
parent
917713bbc3
commit
3d59ec0771
12 changed files with 800 additions and 406 deletions
|
@ -1,13 +1,19 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<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="1.0.8">
|
||||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/runConfigurations/performance__hello__raw.xml" />
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/encoders_buffer_test.dart" />
|
||||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/performance/hello/angel.md" />
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/test/streaming_test.dart" />
|
||||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/performance/hello/raw.dart" />
|
|
||||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/performance/hello/raw.md" />
|
|
||||||
<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$/lib/hooks.dart" afterPath="$PROJECT_DIR$/lib/hooks.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/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$/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/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" />
|
||||||
</list>
|
</list>
|
||||||
<ignored path="$PROJECT_DIR$/.tmp/" />
|
<ignored path="$PROJECT_DIR$/.tmp/" />
|
||||||
<ignored path="$PROJECT_DIR$/temp/" />
|
<ignored path="$PROJECT_DIR$/temp/" />
|
||||||
|
@ -31,7 +37,7 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="FileEditorManager">
|
<component name="FileEditorManager">
|
||||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
|
<leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
|
||||||
<file leaf-file-name="pubspec.yaml" pinned="false" current-in-tab="true">
|
<file leaf-file-name="pubspec.yaml" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
|
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="21">
|
<state relative-caret-position="21">
|
||||||
|
@ -41,61 +47,42 @@
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="main.dart" pinned="false" current-in-tab="false">
|
<file leaf-file-name="hooks.dart" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/performance/hello/main.dart">
|
<entry file="file://$PROJECT_DIR$/lib/hooks.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="147">
|
<state relative-caret-position="209">
|
||||||
<caret line="7" column="8" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="27" selection-end-column="0" />
|
<caret line="226" column="17" lean-forward="false" selection-start-line="226" selection-start-column="17" selection-end-line="226" selection-end-column="17" />
|
||||||
<folding>
|
<folding />
|
||||||
<element signature="e#75#92#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="request_context.dart" pinned="false" current-in-tab="false">
|
<file leaf-file-name="streaming_test.dart" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/http/request_context.dart">
|
<entry file="file://$PROJECT_DIR$/test/streaming_test.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="-5090">
|
<state relative-caret-position="63">
|
||||||
<caret line="19" column="0" lean-forward="true" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
|
<caret line="3" column="54" lean-forward="false" selection-start-line="3" selection-start-column="54" selection-end-line="3" selection-end-column="54" />
|
||||||
<folding>
|
<folding />
|
||||||
<element signature="e#47#67#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="response_context.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/response_context.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="116">
|
<state relative-caret-position="340">
|
||||||
<caret line="145" column="3" lean-forward="false" selection-start-line="145" selection-start-column="3" selection-end-line="145" selection-end-column="3" />
|
<caret line="227" column="26" lean-forward="false" selection-start-line="227" selection-start-column="26" selection-end-line="227" selection-end-column="26" />
|
||||||
<folding>
|
<folding />
|
||||||
<element signature="e#48#68#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="CHANGELOG.md" pinned="false" current-in-tab="false">
|
<file leaf-file-name="CHANGELOG.md" pinned="false" current-in-tab="true">
|
||||||
<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="357">
|
<first_editor relative-caret-position="189">
|
||||||
<caret line="17" column="42" lean-forward="false" selection-start-line="17" selection-start-column="42" selection-end-line="17" selection-end-column="42" />
|
<caret line="9" column="14" lean-forward="false" selection-start-line="9" selection-start-column="14" selection-end-line="9" selection-end-column="14" />
|
||||||
<folding />
|
|
||||||
</first_editor>
|
|
||||||
<second_editor />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="angel.md" pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/performance/hello/angel.md">
|
|
||||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
|
||||||
<state split_layout="SPLIT">
|
|
||||||
<first_editor relative-caret-position="84">
|
|
||||||
<caret line="4" column="9" lean-forward="false" selection-start-line="4" selection-start-column="9" selection-end-line="4" selection-end-column="9" />
|
|
||||||
<folding />
|
<folding />
|
||||||
</first_editor>
|
</first_editor>
|
||||||
<second_editor />
|
<second_editor />
|
||||||
|
@ -106,7 +93,7 @@
|
||||||
<file leaf-file-name="raw.dart" pinned="false" current-in-tab="false">
|
<file leaf-file-name="raw.dart" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/performance/hello/raw.dart">
|
<entry file="file://$PROJECT_DIR$/performance/hello/raw.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="235">
|
<state relative-caret-position="399">
|
||||||
<caret line="19" column="6" lean-forward="false" 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>
|
||||||
<element signature="e#75#92#0" expanded="true" />
|
<element signature="e#75#92#0" expanded="true" />
|
||||||
|
@ -115,15 +102,44 @@
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="raw.md" pinned="false" current-in-tab="false">
|
<file leaf-file-name="response_context.dart" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/performance/hello/raw.md">
|
<entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart">
|
||||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state split_layout="SPLIT">
|
<state relative-caret-position="228">
|
||||||
<first_editor relative-caret-position="231">
|
<caret line="347" column="11" lean-forward="false" selection-start-line="347" selection-start-column="11" selection-end-line="347" selection-end-column="11" />
|
||||||
<caret line="11" column="7" lean-forward="false" selection-start-line="11" selection-start-column="7" selection-end-line="11" selection-end-column="7" />
|
<folding>
|
||||||
|
<element signature="e#48#68#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="146">
|
||||||
|
<caret line="46" column="20" lean-forward="false" selection-start-line="46" selection-start-column="20" selection-end-line="46" selection-end-column="20" />
|
||||||
|
<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="252">
|
||||||
|
<caret line="18" column="20" lean-forward="false" selection-start-line="18" selection-start-column="20" selection-end-line="18" selection-end-column="20" />
|
||||||
|
<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="438">
|
||||||
|
<caret line="25" column="18" lean-forward="false" selection-start-line="25" selection-start-column="18" selection-end-line="25" selection-end-column="18" />
|
||||||
<folding />
|
<folding />
|
||||||
</first_editor>
|
|
||||||
<second_editor />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -139,28 +155,6 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="FindInProjectRecents">
|
<component name="FindInProjectRecents">
|
||||||
<findStrings>
|
<findStrings>
|
||||||
<find>dump</find>
|
|
||||||
<find>void li</find>
|
|
||||||
<find>_onError</find>
|
|
||||||
<find>Unhandled exc</find>
|
|
||||||
<find>handleAn</find>
|
|
||||||
<find>Tom Fo</find>
|
|
||||||
<find>transform(</find>
|
|
||||||
<find>grab(</find>
|
|
||||||
<find>json(</find>
|
|
||||||
<find>cons</find>
|
|
||||||
<find>const</find>
|
|
||||||
<find>call</find>
|
|
||||||
<find>use(</find>
|
|
||||||
<find>value</find>
|
|
||||||
<find>whenI</find>
|
|
||||||
<find>before</find>
|
|
||||||
<find>afterProcessed</find>
|
|
||||||
<find>onco</find>
|
|
||||||
<find>StreamC</find>
|
|
||||||
<find>onCo</find>
|
|
||||||
<find>fatalErrorStream</find>
|
|
||||||
<find>handleReq</find>
|
|
||||||
<find>handleRequest(</find>
|
<find>handleRequest(</find>
|
||||||
<find>_Lockabl</find>
|
<find>_Lockabl</find>
|
||||||
<find>takeBy</find>
|
<find>takeBy</find>
|
||||||
|
@ -169,6 +163,28 @@
|
||||||
<find>sendRes</find>
|
<find>sendRes</find>
|
||||||
<find>replaceAll</find>
|
<find>replaceAll</find>
|
||||||
<find>noSuch</find>
|
<find>noSuch</find>
|
||||||
|
<find>addStre</find>
|
||||||
|
<find>finalizers</find>
|
||||||
|
<find>write</find>
|
||||||
|
<find>deprec</find>
|
||||||
|
<find>addStr</find>
|
||||||
|
<find>addSt</find>
|
||||||
|
<find>cancell</find>
|
||||||
|
<find>corr</find>
|
||||||
|
<find>buffer.</find>
|
||||||
|
<find>if (_isClosed)</find>
|
||||||
|
<find>if (_isClosed</find>
|
||||||
|
<find>createRespo</find>
|
||||||
|
<find>injectSerializer</find>
|
||||||
|
<find>encoders</find>
|
||||||
|
<find>addAll</find>
|
||||||
|
<find>res.enco</find>
|
||||||
|
<find>encodingNa</find>
|
||||||
|
<find>addErr</find>
|
||||||
|
<find>close()</find>
|
||||||
|
<find>.complete(</find>
|
||||||
|
<find>isCompl</find>
|
||||||
|
<find>streamFil`</find>
|
||||||
</findStrings>
|
</findStrings>
|
||||||
<replaceStrings>
|
<replaceStrings>
|
||||||
<replace>_isClosed</replace>
|
<replace>_isClosed</replace>
|
||||||
|
@ -182,6 +198,7 @@
|
||||||
<replace>after</replace>
|
<replace>after</replace>
|
||||||
<replace>fatalErrorStream</replace>
|
<replace>fatalErrorStream</replace>
|
||||||
<replace>onController</replace>
|
<replace>onController</replace>
|
||||||
|
<replace>if (_isClosed && !_useStream)</replace>
|
||||||
</replaceStrings>
|
</replaceStrings>
|
||||||
<dirStrings>
|
<dirStrings>
|
||||||
<dir>C:\Users\thosa\Source\Angel\framework\lib</dir>
|
<dir>C:\Users\thosa\Source\Angel\framework\lib</dir>
|
||||||
|
@ -209,36 +226,39 @@
|
||||||
<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" />
|
||||||
<option value="$PROJECT_DIR$/test/typed_service_test.dart" />
|
<option value="$PROJECT_DIR$/test/typed_service_test.dart" />
|
||||||
<option value="$PROJECT_DIR$/test/controller_test.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/tool/travis.sh" />
|
<option value="$PROJECT_DIR$/tool/travis.sh" />
|
||||||
<option value="$PROJECT_DIR$/test/server_test.dart" />
|
<option value="$PROJECT_DIR$/test/server_test.dart" />
|
||||||
<option value="$PROJECT_DIR$/test/hooked_test.dart" />
|
<option value="$PROJECT_DIR$/test/hooked_test.dart" />
|
||||||
<option value="$PROJECT_DIR$/test/all.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/test/accepts_test.dart" />
|
<option value="$PROJECT_DIR$/test/accepts_test.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/common.dart" />
|
<option value="$PROJECT_DIR$/lib/common.dart" />
|
||||||
<option value="$PROJECT_DIR$/analysis_options.yaml" />
|
<option value="$PROJECT_DIR$/analysis_options.yaml" />
|
||||||
<option value="$PROJECT_DIR$/test/routing_test.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/test/exception_test.dart" />
|
<option value="$PROJECT_DIR$/test/exception_test.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/src/http/controller.dart" />
|
<option value="$PROJECT_DIR$/lib/src/http/controller.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/src/http/service.dart" />
|
<option value="$PROJECT_DIR$/lib/src/http/service.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/src/safe_stream_controller.dart" />
|
<option value="$PROJECT_DIR$/lib/src/safe_stream_controller.dart" />
|
||||||
<option value="$PROJECT_DIR$/test/services_test.dart" />
|
<option value="$PROJECT_DIR$/test/services_test.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/hooks.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/http/hooked_service.dart" />
|
<option value="$PROJECT_DIR$/lib/src/http/hooked_service.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/extensible.dart" />
|
<option value="$PROJECT_DIR$/lib/src/extensible.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/src/http/request_context.dart" />
|
<option value="$PROJECT_DIR$/lib/src/http/request_context.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/src/http/server.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/test/util_test.dart" />
|
<option value="$PROJECT_DIR$/test/util_test.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$/lib/src/fast_name_from_symbol.dart" />
|
<option value="$PROJECT_DIR$/lib/src/fast_name_from_symbol.dart" />
|
||||||
<option value="$PROJECT_DIR$/performance/hello/main.dart" />
|
<option value="$PROJECT_DIR$/performance/hello/main.dart" />
|
||||||
<option value="$PROJECT_DIR$/lib/src/http/response_context.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/CHANGELOG.md" />
|
|
||||||
<option value="$PROJECT_DIR$/performance/hello/raw.dart" />
|
<option value="$PROJECT_DIR$/performance/hello/raw.dart" />
|
||||||
<option value="$PROJECT_DIR$/performance/hello/angel.md" />
|
<option value="$PROJECT_DIR$/performance/hello/angel.md" />
|
||||||
<option value="$PROJECT_DIR$/performance/hello/raw.md" />
|
<option value="$PROJECT_DIR$/performance/hello/raw.md" />
|
||||||
|
<option value="$PROJECT_DIR$/lib/hooks.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/lib/src/http/server.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/test/all.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/test/encoders_buffer_test.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/test/streaming_test.dart" />
|
||||||
<option value="$PROJECT_DIR$/pubspec.yaml" />
|
<option value="$PROJECT_DIR$/pubspec.yaml" />
|
||||||
|
<option value="$PROJECT_DIR$/lib/src/http/response_context.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/test/controller_test.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/test/di_test.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/test/routing_test.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/CHANGELOG.md" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
@ -284,6 +304,20 @@
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
|
<PATH>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="framework" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="framework" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="test" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
</PATH>
|
||||||
<PATH>
|
<PATH>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="framework" />
|
<option name="myItemId" value="framework" />
|
||||||
|
@ -356,20 +390,6 @@
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
<PATH>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="framework" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="framework" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="example" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
</PATH>
|
|
||||||
</subPane>
|
</subPane>
|
||||||
</pane>
|
</pane>
|
||||||
<pane id="Scope" />
|
<pane id="Scope" />
|
||||||
|
@ -402,7 +422,7 @@
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="Dart Command Line App.performance::hello::raw">
|
<component name="RunManager" selected="Dart Test.All Tests (PRODUCTION)">
|
||||||
<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" />
|
||||||
|
@ -489,6 +509,16 @@
|
||||||
<recursive>false</recursive>
|
<recursive>false</recursive>
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
|
<configuration default="false" name="tests in encoders_buffer_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
|
||||||
|
<option name="filePath" value="$PROJECT_DIR$/test/encoders_buffer_test.dart" />
|
||||||
|
<option name="testName" value="encoders_buffer_test.dart" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<configuration default="false" name="tests in streaming_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
|
||||||
|
<option name="filePath" value="$PROJECT_DIR$/test/streaming_test.dart" />
|
||||||
|
<option name="testName" value="streaming_test.dart" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
<configuration default="false" name="can create data in services_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
|
<configuration default="false" name="can create data in services_test.dart" type="DartTestRunConfigurationType" factoryName="Dart Test" nameIsGenerated="true">
|
||||||
<option name="filePath" value="$PROJECT_DIR$/test/services_test.dart" />
|
<option name="filePath" value="$PROJECT_DIR$/test/services_test.dart" />
|
||||||
<option name="scope" value="GROUP_OR_TEST_BY_NAME" />
|
<option name="scope" value="GROUP_OR_TEST_BY_NAME" />
|
||||||
|
@ -550,29 +580,31 @@
|
||||||
<option name="testName" value="precontained_test.dart" />
|
<option name="testName" value="precontained_test.dart" />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<list size="22">
|
<list size="24">
|
||||||
<item index="0" class="java.lang.String" itemvalue="Dart Test.can create data in services_test.dart" />
|
<item index="0" class="java.lang.String" itemvalue="Dart Test.tests in encoders_buffer_test.dart" />
|
||||||
<item index="1" class="java.lang.String" itemvalue="Dart Test.can delete data in services_test.dart" />
|
<item index="1" class="java.lang.String" itemvalue="Dart Test.tests in streaming_test.dart" />
|
||||||
<item index="2" class="java.lang.String" itemvalue="Dart Test.can use app.properties like members in util_test.dart" />
|
<item index="2" class="java.lang.String" itemvalue="Dart Test.can create data in services_test.dart" />
|
||||||
<item index="3" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello" />
|
<item index="3" class="java.lang.String" itemvalue="Dart Test.can delete data in services_test.dart" />
|
||||||
<item index="4" class="java.lang.String" itemvalue="Dart Test.tests in accepts_test.dart" />
|
<item index="4" class="java.lang.String" itemvalue="Dart Test.can use app.properties like members in util_test.dart" />
|
||||||
<item index="5" class="java.lang.String" itemvalue="Dart Test.contains provider in before and after in hooked_test.dart" />
|
<item index="5" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello" />
|
||||||
<item index="6" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart" />
|
<item index="6" class="java.lang.String" itemvalue="Dart Test.tests in accepts_test.dart" />
|
||||||
<item index="7" class="java.lang.String" itemvalue="Dart Test.tests in anonymous_service_test.dart" />
|
<item index="7" class="java.lang.String" itemvalue="Dart Test.contains provider in before and after in hooked_test.dart" />
|
||||||
<item index="8" class="java.lang.String" itemvalue="Dart Test.tests in exception_test.dart" />
|
<item index="8" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart" />
|
||||||
<item index="9" class="java.lang.String" itemvalue="Dart Test.tests in typed_service_test.dart" />
|
<item index="9" class="java.lang.String" itemvalue="Dart Test.tests in anonymous_service_test.dart" />
|
||||||
<item index="10" class="java.lang.String" itemvalue="Dart Test.default view generator in view_generator_test.dart" />
|
<item index="10" class="java.lang.String" itemvalue="Dart Test.tests in exception_test.dart" />
|
||||||
<item index="11" class="java.lang.String" itemvalue="Dart Test.tests in precontained_test.dart" />
|
<item index="11" class="java.lang.String" itemvalue="Dart Test.tests in typed_service_test.dart" />
|
||||||
<item index="12" class="java.lang.String" itemvalue="Dart Test.Controller Tests" />
|
<item index="12" class="java.lang.String" itemvalue="Dart Test.default view generator in view_generator_test.dart" />
|
||||||
<item index="13" class="java.lang.String" itemvalue="Dart Test.DI Tests" />
|
<item index="13" class="java.lang.String" itemvalue="Dart Test.tests in precontained_test.dart" />
|
||||||
<item index="14" class="java.lang.String" itemvalue="Dart Test.Hooked Tests" />
|
<item index="14" class="java.lang.String" itemvalue="Dart Test.Controller Tests" />
|
||||||
<item index="15" class="java.lang.String" itemvalue="Dart Test.Routing Tests" />
|
<item index="15" class="java.lang.String" itemvalue="Dart Test.DI Tests" />
|
||||||
<item index="16" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (for coverage)" />
|
<item index="16" class="java.lang.String" itemvalue="Dart Test.Hooked Tests" />
|
||||||
<item index="17" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (PRODUCTION)" />
|
<item index="17" class="java.lang.String" itemvalue="Dart Test.Routing Tests" />
|
||||||
<item index="18" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart (PRODUCTION)" />
|
<item index="18" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (for coverage)" />
|
||||||
<item index="19" class="java.lang.String" itemvalue="Dart Test.All Tests" />
|
<item index="19" class="java.lang.String" itemvalue="Dart Command Line App.All Tests (PRODUCTION)" />
|
||||||
<item index="20" class="java.lang.String" itemvalue="Dart Test.All Tests (PRODUCTION)" />
|
<item index="20" class="java.lang.String" itemvalue="Dart Test.tests in server_test.dart (PRODUCTION)" />
|
||||||
<item index="21" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello::raw" />
|
<item index="21" class="java.lang.String" itemvalue="Dart Test.All Tests" />
|
||||||
|
<item index="22" class="java.lang.String" itemvalue="Dart Test.All Tests (PRODUCTION)" />
|
||||||
|
<item index="23" class="java.lang.String" itemvalue="Dart Command Line App.performance::hello::raw" />
|
||||||
</list>
|
</list>
|
||||||
</component>
|
</component>
|
||||||
<component name="ShelveChangesManager" show_recycled="false">
|
<component name="ShelveChangesManager" show_recycled="false">
|
||||||
|
@ -615,7 +647,8 @@
|
||||||
<workItem from="1499805699713" duration="409000" />
|
<workItem from="1499805699713" duration="409000" />
|
||||||
<workItem from="1499967777286" duration="36000" />
|
<workItem from="1499967777286" duration="36000" />
|
||||||
<workItem from="1500824399224" duration="86000" />
|
<workItem from="1500824399224" duration="86000" />
|
||||||
<workItem from="1501768538452" duration="11180000" />
|
<workItem from="1501768538452" duration="11206000" />
|
||||||
|
<workItem from="1502831499213" duration="6562000" />
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00001" summary="Re-designed exception">
|
<task id="LOCAL-00001" summary="Re-designed exception">
|
||||||
<created>1481237183504</created>
|
<created>1481237183504</created>
|
||||||
|
@ -813,43 +846,50 @@
|
||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1501778536483</updated>
|
<updated>1501778536483</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="29" />
|
<task id="LOCAL-00029" summary="1.0.8">
|
||||||
|
<created>1501782730507</created>
|
||||||
|
<option name="number" value="00029" />
|
||||||
|
<option name="presentableId" value="LOCAL-00029" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1501782730507</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="30" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TestHistory">
|
<component name="TestHistory">
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 28m 12s.xml">
|
<history-entry file="All_Tests - 2017.08.15 at 18h 52m 20s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 28m 30s.xml">
|
<history-entry file="All_Tests_(PRODUCTION) - 2017.08.15 at 18h 54m 11s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="All Tests (PRODUCTION)" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 29m 18s.xml">
|
<history-entry file="All_Tests_(PRODUCTION) - 2017.08.15 at 18h 57m 36s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="All Tests (PRODUCTION)" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 29m 49s.xml">
|
<history-entry file="tests_in_streaming_test_dart - 2017.08.15 at 18h 50m 15s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="tests in streaming_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 30m 12s.xml">
|
<history-entry file="tests_in_streaming_test_dart - 2017.08.15 at 18h 50m 24s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="tests in streaming_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 32m 21s.xml">
|
<history-entry file="tests_in_streaming_test_dart - 2017.08.15 at 18h 50m 39s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="tests in streaming_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 32m 35s.xml">
|
<history-entry file="tests_in_streaming_test_dart - 2017.08.15 at 18h 50m 52s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="tests in streaming_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="All_Tests - 2017.08.03 at 12h 33m 22s.xml">
|
<history-entry file="tests_in_streaming_test_dart - 2017.08.15 at 18h 51m 38s.xml">
|
||||||
<configuration name="All Tests" configurationId="DartTestRunConfigurationType" />
|
<configuration name="tests in streaming_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="can_use_app_properties_like_members_in_util_test_dart - 2017.08.03 at 12h 32m 58s.xml">
|
<history-entry file="tests_in_streaming_test_dart - 2017.08.15 at 18h 51m 54s.xml">
|
||||||
<configuration name="can use app.properties like members in util_test.dart" configurationId="DartTestRunConfigurationType" />
|
<configuration name="tests in streaming_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
<history-entry file="can_use_app_properties_like_members_in_util_test_dart - 2017.08.03 at 12h 33m 10s.xml">
|
<history-entry file="tests_in_streaming_test_dart - 2017.08.15 at 18h 52m 00s.xml">
|
||||||
<configuration name="can use app.properties like members in util_test.dart" configurationId="DartTestRunConfigurationType" />
|
<configuration name="tests in streaming_test.dart" configurationId="DartTestRunConfigurationType" />
|
||||||
</history-entry>
|
</history-entry>
|
||||||
</component>
|
</component>
|
||||||
<component name="TimeTrackingManager">
|
<component name="TimeTrackingManager">
|
||||||
<option name="totallyTimeSpent" value="37349000" />
|
<option name="totallyTimeSpent" value="43937000" />
|
||||||
</component>
|
</component>
|
||||||
<component name="TodoView">
|
<component name="TodoView">
|
||||||
<todo-panel id="selected-file">
|
<todo-panel id="selected-file">
|
||||||
|
@ -869,15 +909,14 @@
|
||||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32616082" sideWeight="0.5" order="7" 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.32616082" sideWeight="0.5" order="7" 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.33" sideWeight="0.5" 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.33" sideWeight="0.5" order="7" side_tool="true" 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.3272933" 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.3272933" 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.33" 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.34314835" sideWeight="0.5" order="2" 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.34314835" sideWeight="0.5" 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.33" 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.3250283" 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.3250283" sideWeight="0.5" order="7" 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.18455844" 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="false" show_stripe_button="true" weight="0.18455844" sideWeight="0.5" order="0" 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.3295583" sideWeight="0.5" order="1" 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="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="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="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="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="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="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="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" />
|
||||||
|
@ -886,6 +925,7 @@
|
||||||
<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="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="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3295583" 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" />
|
||||||
</layout>
|
</layout>
|
||||||
</component>
|
</component>
|
||||||
|
@ -896,7 +936,6 @@
|
||||||
<option name="myLimit" value="2678400000" />
|
<option name="myLimit" value="2678400000" />
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value="Core done?" />
|
|
||||||
<MESSAGE value="Fixed todo" />
|
<MESSAGE value="Fixed todo" />
|
||||||
<MESSAGE value="Done???" />
|
<MESSAGE value="Done???" />
|
||||||
<MESSAGE value="findExpose" />
|
<MESSAGE value="findExpose" />
|
||||||
|
@ -921,55 +960,14 @@
|
||||||
<MESSAGE value="1.0.7+2" />
|
<MESSAGE value="1.0.7+2" />
|
||||||
<MESSAGE value="Working on 1.0.8, including performance tuning" />
|
<MESSAGE value="Working on 1.0.8, including performance tuning" />
|
||||||
<MESSAGE value="Remove reopen" />
|
<MESSAGE value="Remove reopen" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="Remove reopen" />
|
<MESSAGE value="1.0.8" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="1.0.8" />
|
||||||
</component>
|
</component>
|
||||||
<component name="XDebuggerManager">
|
<component name="XDebuggerManager">
|
||||||
<breakpoint-manager />
|
<breakpoint-manager />
|
||||||
<watches-manager />
|
<watches-manager />
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<component name="editorHistoryManager">
|
||||||
<entry file="file://C:/Program Files/Dart/dart-sdk/lib/io/http.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="284">
|
|
||||||
<caret line="36" column="19" lean-forward="false" selection-start-line="36" selection-start-column="19" selection-end-line="36" selection-end-column="19" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/http/angel_http_exception.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="231">
|
|
||||||
<caret line="11" column="0" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/http/anonymous_service.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-171">
|
|
||||||
<caret line="9" column="2" lean-forward="false" selection-start-line="9" selection-start-column="2" selection-end-line="9" selection-end-column="2" />
|
|
||||||
</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" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/test/anonymous_service_test.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="249">
|
|
||||||
<caret line="28" column="9" lean-forward="true" selection-start-line="28" selection-start-column="9" selection-end-line="28" selection-end-column="9" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/test/typed_service_test.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="126">
|
|
||||||
<caret line="6" column="0" lean-forward="true" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/http/typed_service.dart">
|
<entry file="file://$PROJECT_DIR$/lib/src/http/typed_service.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="294">
|
<state relative-caret-position="294">
|
||||||
|
@ -1012,13 +1010,6 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/test/all.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="399">
|
|
||||||
<caret line="19" column="33" lean-forward="false" selection-start-line="19" selection-start-column="33" selection-end-line="19" selection-end-column="33" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/test/accepts_test.dart">
|
<entry file="file://$PROJECT_DIR$/test/accepts_test.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="441">
|
<state relative-caret-position="441">
|
||||||
|
@ -1030,7 +1021,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="4011">
|
<state relative-caret-position="4011">
|
||||||
<caret line="197" column="4" lean-forward="false" selection-start-line="197" selection-start-column="4" selection-end-line="197" selection-end-column="4" />
|
<caret line="197" column="4" lean-forward="false" selection-start-line="197" selection-start-column="4" selection-end-line="197" selection-end-column="4" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1038,7 +1028,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="0">
|
<state relative-caret-position="0">
|
||||||
<caret line="0" column="46" lean-forward="false" selection-start-line="0" selection-start-column="46" selection-end-line="0" selection-end-column="46" />
|
<caret line="0" column="46" lean-forward="false" selection-start-line="0" selection-start-column="46" selection-end-line="0" selection-end-column="46" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1046,7 +1035,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="105">
|
<state relative-caret-position="105">
|
||||||
<caret line="5" column="10" lean-forward="false" selection-start-line="5" selection-start-column="10" selection-end-line="5" selection-end-column="10" />
|
<caret line="5" column="10" lean-forward="false" selection-start-line="5" selection-start-column="10" selection-end-line="5" selection-end-column="10" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1054,23 +1042,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="210">
|
<state relative-caret-position="210">
|
||||||
<caret line="17" column="24" lean-forward="false" selection-start-line="17" selection-start-column="24" selection-end-line="17" selection-end-column="24" />
|
<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 />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/test/routing_test.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="231">
|
|
||||||
<caret line="15" column="41" lean-forward="false" selection-start-line="15" selection-start-column="41" selection-end-line="15" selection-end-column="41" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/test/controller_test.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="188">
|
|
||||||
<caret line="48" column="23" lean-forward="false" selection-start-line="48" selection-start-column="23" selection-end-line="48" selection-end-column="23" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1094,9 +1065,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="97">
|
<state relative-caret-position="97">
|
||||||
<caret line="77" column="20" lean-forward="true" selection-start-line="77" selection-start-column="20" selection-end-line="77" selection-end-column="20" />
|
<caret line="77" column="20" lean-forward="true" selection-start-line="77" selection-start-column="20" selection-end-line="77" selection-end-column="20" />
|
||||||
<folding>
|
|
||||||
<element signature="e#0#22#0" expanded="false" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1104,9 +1072,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="643">
|
<state relative-caret-position="643">
|
||||||
<caret line="70" column="23" lean-forward="false" selection-start-line="70" selection-start-column="23" selection-end-line="70" selection-end-column="23" />
|
<caret line="70" column="23" lean-forward="false" selection-start-line="70" selection-start-column="23" selection-end-line="70" selection-end-column="23" />
|
||||||
<folding>
|
|
||||||
<element signature="e#0#22#0" expanded="false" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1114,7 +1079,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="21">
|
<state relative-caret-position="21">
|
||||||
<caret line="1" column="19" lean-forward="false" selection-start-line="1" selection-start-column="19" selection-end-line="1" selection-end-column="19" />
|
<caret line="1" column="19" lean-forward="false" selection-start-line="1" selection-start-column="19" selection-end-line="1" selection-end-column="19" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1122,7 +1086,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="-3137">
|
<state relative-caret-position="-3137">
|
||||||
<caret line="67" column="2" lean-forward="false" selection-start-line="67" selection-start-column="2" selection-end-line="67" selection-end-column="2" />
|
<caret line="67" column="2" lean-forward="false" selection-start-line="67" selection-start-column="2" selection-end-line="67" selection-end-column="2" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1130,9 +1093,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<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>
|
|
||||||
<element signature="e#0#20#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1140,9 +1100,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<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>
|
|
||||||
<element signature="e#0#20#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1150,7 +1107,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="305">
|
<state relative-caret-position="305">
|
||||||
<caret line="22" column="15" lean-forward="true" selection-start-line="22" selection-start-column="15" selection-end-line="22" selection-end-column="15" />
|
<caret line="22" column="15" lean-forward="true" selection-start-line="22" selection-start-column="15" selection-end-line="22" selection-end-column="15" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1158,7 +1114,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="599">
|
<state relative-caret-position="599">
|
||||||
<caret line="774" column="19" lean-forward="false" selection-start-line="774" selection-start-column="19" selection-end-line="774" selection-end-column="19" />
|
<caret line="774" column="19" lean-forward="false" selection-start-line="774" selection-start-column="19" selection-end-line="774" selection-end-column="19" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1167,30 +1122,11 @@
|
||||||
<state split_layout="SPLIT">
|
<state split_layout="SPLIT">
|
||||||
<first_editor relative-caret-position="42">
|
<first_editor relative-caret-position="42">
|
||||||
<caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="109" />
|
<caret line="2" column="0" lean-forward="false" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="109" />
|
||||||
<folding>
|
|
||||||
<marker date="1497837224385" expanded="true" signature="588:776" ph="{...}" />
|
|
||||||
</folding>
|
|
||||||
</first_editor>
|
</first_editor>
|
||||||
<second_editor />
|
<second_editor />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/lib/hooks.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="167">
|
|
||||||
<caret line="230" column="24" lean-forward="false" selection-start-line="230" selection-start-column="24" selection-end-line="230" selection-end-column="24" />
|
|
||||||
<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="188">
|
|
||||||
<caret line="192" column="20" lean-forward="false" selection-start-line="192" selection-start-column="20" selection-end-line="192" selection-end-column="20" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://C:/Program Files/Dart/dart-sdk/lib/core/string.dart">
|
<entry file="file://C:/Program Files/Dart/dart-sdk/lib/core/string.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="95">
|
<state relative-caret-position="95">
|
||||||
|
@ -1203,34 +1139,16 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="168">
|
<state relative-caret-position="168">
|
||||||
<caret line="8" column="6" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" />
|
<caret line="8" column="6" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" />
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/extensible.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="63">
|
|
||||||
<caret line="3" column="8" lean-forward="false" selection-start-line="3" selection-start-column="8" selection-end-line="3" selection-end-column="8" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/lib/src/extensible.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="189">
|
<state relative-caret-position="189">
|
||||||
<caret line="39" column="35" lean-forward="true" selection-start-line="39" selection-start-column="35" selection-end-line="39" selection-end-column="35" />
|
<caret line="39" column="35" lean-forward="true" selection-start-line="39" selection-start-column="35" selection-end-line="39" selection-end-column="35" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#42#62#0" expanded="true" />
|
<element signature="e#42#62#0" expanded="false" />
|
||||||
</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="735">
|
|
||||||
<caret line="35" column="25" lean-forward="false" selection-start-line="35" selection-start-column="25" selection-end-line="35" selection-end-column="25" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#38#58#0" expanded="true" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
|
@ -1239,7 +1157,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="42">
|
<state relative-caret-position="42">
|
||||||
<caret line="106" column="5" lean-forward="true" selection-start-line="106" selection-start-column="5" selection-end-line="106" selection-end-column="5" />
|
<caret line="106" column="5" lean-forward="true" selection-start-line="106" selection-start-column="5" selection-end-line="106" selection-end-column="5" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1247,7 +1164,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="105">
|
<state relative-caret-position="105">
|
||||||
<caret line="8" column="13" lean-forward="true" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
|
<caret line="8" column="13" lean-forward="true" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1255,7 +1171,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="277">
|
<state relative-caret-position="277">
|
||||||
<caret line="26" column="0" lean-forward="true" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
|
<caret line="26" column="0" lean-forward="true" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1263,7 +1178,6 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="84">
|
<state relative-caret-position="84">
|
||||||
<caret line="4" column="31" lean-forward="false" selection-start-line="4" selection-start-column="31" selection-end-line="4" selection-end-column="31" />
|
<caret line="4" column="31" lean-forward="false" selection-start-line="4" selection-start-column="31" selection-end-line="4" selection-end-column="31" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -1271,63 +1185,19 @@
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="475">
|
<state relative-caret-position="475">
|
||||||
<caret line="142" column="39" lean-forward="false" selection-start-line="142" selection-start-column="39" selection-end-line="142" selection-end-column="39" />
|
<caret line="142" column="39" lean-forward="false" selection-start-line="142" selection-start-column="39" selection-end-line="142" selection-end-column="39" />
|
||||||
<folding>
|
|
||||||
<element signature="e#40#60#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/http/request_context.dart">
|
<entry file="file://$PROJECT_DIR$/lib/src/http/request_context.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="-5090">
|
<state relative-caret-position="294">
|
||||||
<caret line="19" column="0" lean-forward="true" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
|
<caret line="19" column="0" lean-forward="false" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#47#67#0" expanded="true" />
|
<element signature="e#47#67#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="116">
|
|
||||||
<caret line="145" column="3" lean-forward="false" selection-start-line="145" selection-start-column="3" selection-end-line="145" selection-end-column="3" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#48#68#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="357">
|
|
||||||
<caret line="17" column="42" lean-forward="false" selection-start-line="17" selection-start-column="42" selection-end-line="17" selection-end-column="42" />
|
|
||||||
<folding />
|
|
||||||
</first_editor>
|
|
||||||
<second_editor />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/performance/hello/main.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="147">
|
|
||||||
<caret line="7" column="8" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="27" selection-end-column="0" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#75#92#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/performance/hello/raw.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="235">
|
|
||||||
<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>
|
|
||||||
<element signature="e#75#92#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/performance/hello/angel.md">
|
<entry file="file://$PROJECT_DIR$/performance/hello/angel.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">
|
||||||
|
@ -1350,6 +1220,92 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/angel_route-1.0.5/lib/src/router.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="284">
|
||||||
|
<caret line="80" column="9" lean-forward="false" selection-start-line="80" selection-start-column="9" selection-end-line="80" selection-end-column="9" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/test/all.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="294">
|
||||||
|
<caret line="14" column="44" lean-forward="true" selection-start-line="14" selection-start-column="44" selection-end-line="14" selection-end-column="44" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/performance/hello/main.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="147">
|
||||||
|
<caret line="7" column="8" lean-forward="true" selection-start-line="7" selection-start-column="8" selection-end-line="7" selection-end-column="8" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#75#92#0" expanded="true" />
|
||||||
|
</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="59">
|
||||||
|
<caret line="549" column="8" lean-forward="false" selection-start-line="549" selection-start-column="8" selection-end-line="565" selection-end-column="9" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#38#58#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/test/common.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$/test/encoders_buffer_test.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="474">
|
||||||
|
<caret line="66" column="62" lean-forward="false" selection-start-line="66" selection-start-column="62" selection-end-line="66" selection-end-column="62" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#22#0" expanded="true" />
|
||||||
|
</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="340">
|
||||||
|
<caret line="227" column="26" lean-forward="false" selection-start-line="227" selection-start-column="26" selection-end-line="227" selection-end-column="26" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/lib/hooks.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="209">
|
||||||
|
<caret line="226" column="17" lean-forward="false" selection-start-line="226" selection-start-column="17" selection-end-line="226" selection-end-column="17" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$USER_HOME$/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/mock_request-1.0.0/lib/src/response.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="183">
|
||||||
|
<caret line="94" column="23" lean-forward="false" selection-start-line="94" selection-start-column="23" selection-end-line="94" selection-end-column="23" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/test/streaming_test.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="63">
|
||||||
|
<caret line="3" column="54" lean-forward="false" selection-start-line="3" selection-start-column="54" selection-end-line="3" selection-end-column="54" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
|
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="21">
|
<state relative-caret-position="21">
|
||||||
|
@ -1358,5 +1314,60 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/performance/hello/raw.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="399">
|
||||||
|
<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>
|
||||||
|
<element signature="e#75#92#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/lib/src/http/response_context.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="228">
|
||||||
|
<caret line="347" column="11" lean-forward="false" selection-start-line="347" selection-start-column="11" selection-end-line="347" selection-end-column="11" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#48#68#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/test/controller_test.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="146">
|
||||||
|
<caret line="46" column="20" lean-forward="false" selection-start-line="46" selection-start-column="20" selection-end-line="46" selection-end-column="20" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/test/di_test.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="252">
|
||||||
|
<caret line="18" column="20" lean-forward="false" selection-start-line="18" selection-start-column="20" selection-end-line="18" selection-end-column="20" />
|
||||||
|
<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="438">
|
||||||
|
<caret line="25" column="18" lean-forward="false" selection-start-line="25" selection-start-column="18" selection-end-line="25" selection-end-column="18" />
|
||||||
|
<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="189">
|
||||||
|
<caret line="9" column="14" lean-forward="false" selection-start-line="9" selection-start-column="14" selection-end-line="9" selection-end-column="14" />
|
||||||
|
<folding />
|
||||||
|
</first_editor>
|
||||||
|
<second_editor />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -1,3 +1,14 @@
|
||||||
|
# 1.0.9
|
||||||
|
* Closed [#161](https://github.com/angel-dart/framework/issues/161). `addCreated`/`addUpdatedAt` no longer
|
||||||
|
crash when `serialize` is `false`.
|
||||||
|
* Added an explicit on `charcode`, `path`, and others. Resolves
|
||||||
|
[#160](https://github.com/angel-dart/framework/issues/160).
|
||||||
|
* `ResponseContext` now implements `StreamSink<List<int>`, so data can be streamed directly to the
|
||||||
|
underlying response.
|
||||||
|
* You can now inject `encoders` into a `ResponseContext`, which takes care of `Accept-Encoding`.
|
||||||
|
This will ultimately replace `package:angel_compress`.
|
||||||
|
Resolves [#159](https://github.com/angel-dart/framework/issues/159).
|
||||||
|
|
||||||
# 1.0.8
|
# 1.0.8
|
||||||
* Changed `req.query` to use a modifiable Map if the body has not parsed. Resolves
|
* Changed `req.query` to use a modifiable Map if the body has not parsed. Resolves
|
||||||
[#157](https://github.com/angel-dart/framework/issues/157).
|
[#157](https://github.com/angel-dart/framework/issues/157).
|
||||||
|
|
|
@ -220,11 +220,11 @@ HookedServiceEventListener disable([provider]) {
|
||||||
///
|
///
|
||||||
/// Default key: `createdAt`
|
/// Default key: `createdAt`
|
||||||
HookedServiceEventListener addCreatedAt(
|
HookedServiceEventListener addCreatedAt(
|
||||||
{assign(obj, String now), String key, bool serialize: true}) {
|
{assign(obj, now), String key, bool serialize: true}) {
|
||||||
var name = key?.isNotEmpty == true ? key : 'createdAt';
|
var name = key?.isNotEmpty == true ? key : 'createdAt';
|
||||||
|
|
||||||
return (HookedServiceEvent e) async {
|
return (HookedServiceEvent e) async {
|
||||||
_assign(obj, String now) {
|
_assign(obj, now) {
|
||||||
if (assign != null)
|
if (assign != null)
|
||||||
return assign(obj, now);
|
return assign(obj, now);
|
||||||
else if (obj is Map)
|
else if (obj is Map)
|
||||||
|
@ -269,11 +269,11 @@ HookedServiceEventListener addUpatedAt({
|
||||||
///
|
///
|
||||||
/// Default key: `updatedAt`
|
/// Default key: `updatedAt`
|
||||||
HookedServiceEventListener addUpdatedAt(
|
HookedServiceEventListener addUpdatedAt(
|
||||||
{assign(obj, String now), String key, bool serialize: true}) {
|
{assign(obj, now), String key, bool serialize: true}) {
|
||||||
var name = key?.isNotEmpty == true ? key : 'updatedAt';
|
var name = key?.isNotEmpty == true ? key : 'updatedAt';
|
||||||
|
|
||||||
return (HookedServiceEvent e) async {
|
return (HookedServiceEvent e) async {
|
||||||
_assign(obj, String now) {
|
_assign(obj, now) {
|
||||||
if (assign != null)
|
if (assign != null)
|
||||||
return assign(obj, now);
|
return assign(obj, now);
|
||||||
else if (obj is Map)
|
else if (obj is Map)
|
||||||
|
|
|
@ -9,6 +9,7 @@ import 'package:json_god/json_god.dart' as god;
|
||||||
import 'package:mime/mime.dart';
|
import 'package:mime/mime.dart';
|
||||||
import 'server.dart' show Angel;
|
import 'server.dart' show Angel;
|
||||||
import 'controller.dart';
|
import 'controller.dart';
|
||||||
|
import 'request_context.dart';
|
||||||
|
|
||||||
final RegExp _contentType =
|
final RegExp _contentType =
|
||||||
new RegExp(r'([^/\n]+)\/\s*([^;\n]+)\s*(;\s*charset=([^$;\n]+))?');
|
new RegExp(r'([^/\n]+)\/\s*([^;\n]+)\s*(;\s*charset=([^$;\n]+))?');
|
||||||
|
@ -19,11 +20,14 @@ final RegExp _straySlashes = new RegExp(r'(^/+)|(/+$)');
|
||||||
typedef String ResponseSerializer(data);
|
typedef String ResponseSerializer(data);
|
||||||
|
|
||||||
/// A convenience wrapper around an outgoing HTTP request.
|
/// A convenience wrapper around an outgoing HTTP request.
|
||||||
class ResponseContext implements StringSink {
|
class ResponseContext implements StreamSink<List<int>>, StringSink {
|
||||||
final _LockableBytesBuilder _buffer = new _LockableBytesBuilder();
|
|
||||||
final Map<String, String> _headers = {HttpHeaders.SERVER: 'angel'};
|
|
||||||
final Map properties = {};
|
final Map properties = {};
|
||||||
bool _isOpen = true, _isClosed = false;
|
final BytesBuilder _buffer = new _LockableBytesBuilder();
|
||||||
|
final Map<String, String> _headers = {HttpHeaders.SERVER: 'angel'};
|
||||||
|
final RequestContext _correspondingRequest;
|
||||||
|
|
||||||
|
Completer _done;
|
||||||
|
bool _isOpen = true, _isClosed = false, _useStream = false;
|
||||||
int _statusCode = 200;
|
int _statusCode = 200;
|
||||||
|
|
||||||
/// The [Angel] instance that is sending a response.
|
/// The [Angel] instance that is sending a response.
|
||||||
|
@ -35,6 +39,17 @@ class ResponseContext implements StringSink {
|
||||||
/// Any and all cookies to be sent to the user.
|
/// Any and all cookies to be sent to the user.
|
||||||
final List<Cookie> cookies = [];
|
final List<Cookie> cookies = [];
|
||||||
|
|
||||||
|
/// A set of [Converter] objects that can be used to encode response data.
|
||||||
|
///
|
||||||
|
/// At most one encoder will ever be used to convert data.
|
||||||
|
final Map<String, Converter<List<int>, List<int>>> encoders = {};
|
||||||
|
|
||||||
|
/// Points to the [RequestContext] corresponding to this response.
|
||||||
|
RequestContext get correspondingRequest => _correspondingRequest;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future get done => (_done ?? new Completer()).future;
|
||||||
|
|
||||||
/// Headers that will be sent to the user.
|
/// Headers that will be sent to the user.
|
||||||
Map<String, String> get headers {
|
Map<String, String> get headers {
|
||||||
/// If the response is closed, then this getter will return an immutable `Map`.
|
/// If the response is closed, then this getter will return an immutable `Map`.
|
||||||
|
@ -74,8 +89,8 @@ class ResponseContext implements StringSink {
|
||||||
/// A set of UTF-8 encoded bytes that will be written to the response.
|
/// A set of UTF-8 encoded bytes that will be written to the response.
|
||||||
BytesBuilder get buffer => _buffer;
|
BytesBuilder get buffer => _buffer;
|
||||||
|
|
||||||
/// Sets the status code to be sent with this response.
|
/// Please use `statusCode=` instead.'
|
||||||
@Deprecated('Please use `statusCode=` instead.')
|
@deprecated
|
||||||
void status(int code) {
|
void status(int code) {
|
||||||
statusCode = code;
|
statusCode = code;
|
||||||
}
|
}
|
||||||
|
@ -110,7 +125,7 @@ class ResponseContext implements StringSink {
|
||||||
headers[HttpHeaders.CONTENT_TYPE] = contentType.toString();
|
headers[HttpHeaders.CONTENT_TYPE] = contentType.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
ResponseContext(this.io, this.app);
|
ResponseContext(this.io, this.app, [this._correspondingRequest]);
|
||||||
|
|
||||||
/// Set this to true if you will manually close the response.
|
/// Set this to true if you will manually close the response.
|
||||||
///
|
///
|
||||||
|
@ -127,15 +142,32 @@ class ResponseContext implements StringSink {
|
||||||
'attachment; filename="${filename ?? file.path}"';
|
'attachment; filename="${filename ?? file.path}"';
|
||||||
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
||||||
headers[HttpHeaders.CONTENT_LENGTH] = file.lengthSync().toString();
|
headers[HttpHeaders.CONTENT_LENGTH] = file.lengthSync().toString();
|
||||||
|
|
||||||
|
if (_useStream) {
|
||||||
|
await file.openRead().pipe(this);
|
||||||
|
} else {
|
||||||
buffer.add(await file.readAsBytes());
|
buffer.add(await file.readAsBytes());
|
||||||
end();
|
end();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Prevents more data from being written to the response, and locks it entire from further editing.
|
/// Prevents more data from being written to the response, and locks it entire from further editing.
|
||||||
void close() {
|
Future close() {
|
||||||
_buffer._lock();
|
var f = new Future.value();
|
||||||
|
|
||||||
|
if (_useStream) {
|
||||||
|
_useStream = false;
|
||||||
|
_buffer?.clear();
|
||||||
|
f = io.close();
|
||||||
|
} else if (_buffer is _LockableBytesBuilder) {
|
||||||
|
(_buffer as _LockableBytesBuilder)._lock();
|
||||||
|
}
|
||||||
|
|
||||||
_isOpen = false;
|
_isOpen = false;
|
||||||
_isClosed = true;
|
_isClosed = true;
|
||||||
|
|
||||||
|
if (_done?.isCompleted == false) _done.complete();
|
||||||
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Prevents further request handlers from running on the response, except for response finalizers.
|
/// Prevents further request handlers from running on the response, except for response finalizers.
|
||||||
|
@ -271,7 +303,9 @@ class ResponseContext implements StringSink {
|
||||||
|
|
||||||
/// Copies a file's contents into the response buffer.
|
/// Copies a file's contents into the response buffer.
|
||||||
Future sendFile(File file,
|
Future sendFile(File file,
|
||||||
{int chunkSize, int sleepMs: 0, bool resumable: true}) async {
|
{@deprecated int chunkSize,
|
||||||
|
@deprecated int sleepMs: 0,
|
||||||
|
@deprecated bool resumable: true}) async {
|
||||||
if (_isClosed) throw _closed();
|
if (_isClosed) throw _closed();
|
||||||
|
|
||||||
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
||||||
|
@ -297,29 +331,120 @@ class ResponseContext implements StringSink {
|
||||||
|
|
||||||
/// Streams a file to this response.
|
/// Streams a file to this response.
|
||||||
///
|
///
|
||||||
|
// ignore: deprecated_member_use
|
||||||
/// You can optionally transform the file stream with a [codec].
|
/// You can optionally transform the file stream with a [codec].
|
||||||
Future streamFile(File file,
|
Future streamFile(File file,
|
||||||
{int chunkSize,
|
{@deprecated int chunkSize,
|
||||||
int sleepMs: 0,
|
@deprecated int sleepMs: 0,
|
||||||
bool resumable: true,
|
@deprecated bool resumable: true,
|
||||||
Codec<List<int>, List<int>> codec}) async {
|
|
||||||
|
/// Use [encoders] instead of manually specifying a codec.
|
||||||
|
@deprecated Codec<List<int>, List<int>> codec}) async {
|
||||||
if (_isClosed) throw _closed();
|
if (_isClosed) throw _closed();
|
||||||
|
|
||||||
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
headers[HttpHeaders.CONTENT_TYPE] = lookupMimeType(file.path);
|
||||||
|
|
||||||
|
// ignore: deprecated_member_use
|
||||||
|
if (codec != null) {
|
||||||
end();
|
end();
|
||||||
willCloseItself = true;
|
willCloseItself = true;
|
||||||
|
|
||||||
|
// ignore: deprecated_member_use
|
||||||
Stream stream = codec != null
|
Stream stream = codec != null
|
||||||
|
// ignore: deprecated_member_use
|
||||||
? file.openRead().transform(codec.encoder)
|
? file.openRead().transform(codec.encoder)
|
||||||
: file.openRead();
|
: file.openRead();
|
||||||
await stream.pipe(io);
|
await stream.pipe(io);
|
||||||
|
} else {
|
||||||
|
await file.openRead().pipe(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void add(List<int> data) {
|
||||||
|
if (_isClosed && !_useStream)
|
||||||
|
throw _closed();
|
||||||
|
else if (_useStream)
|
||||||
|
io.add(data);
|
||||||
|
else
|
||||||
|
buffer.add(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Adds a stream directly the underlying dart:[io] response.
|
||||||
|
///
|
||||||
|
/// This will also set [willCloseItself] to `true`, thus canceling out response finalizers.
|
||||||
|
///
|
||||||
|
/// If this instance has access to a [correspondingRequest], then it will attempt to transform
|
||||||
|
/// the content using at most one of the response [encoders].
|
||||||
|
@override
|
||||||
|
Future addStream(Stream<List<int>> stream) {
|
||||||
|
if (_isClosed && !_useStream) throw _closed();
|
||||||
|
bool firstStream = _useStream == false;
|
||||||
|
willCloseItself = _useStream = _isClosed = true;
|
||||||
|
|
||||||
|
Stream<List<int>> output = stream;
|
||||||
|
|
||||||
|
if (firstStream) {
|
||||||
|
// If this is the first stream added to this response,
|
||||||
|
// then add headers, status code, etc.
|
||||||
|
io
|
||||||
|
..statusCode = statusCode
|
||||||
|
..cookies.addAll(cookies);
|
||||||
|
headers.forEach(io.headers.set);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (encoders.isNotEmpty && correspondingRequest != null) {
|
||||||
|
var allowedEncodings =
|
||||||
|
(correspondingRequest.headers[HttpHeaders.ACCEPT_ENCODING] ?? [])
|
||||||
|
.map((str) {
|
||||||
|
// Ignore quality specifications in accept-encoding
|
||||||
|
// ex. gzip;q=0.8
|
||||||
|
if (!str.contains(';')) return str;
|
||||||
|
return str.split(';')[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var encodingName in allowedEncodings) {
|
||||||
|
Converter<List<int>, List<int>> encoder;
|
||||||
|
String key = encodingName;
|
||||||
|
|
||||||
|
if (encoders.containsKey(encodingName))
|
||||||
|
encoder = encoders[encodingName];
|
||||||
|
else if (encodingName == '*') {
|
||||||
|
encoder = encoders[key = encoders.keys.first];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (encoder != null) {
|
||||||
|
if (firstStream) {
|
||||||
|
io.headers.set(HttpHeaders.CONTENT_ENCODING, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
output = encoders[key].bind(output);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return io.addStream(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void addError(Object error, [StackTrace stackTrace]) {
|
||||||
|
io.addError(error, stackTrace);
|
||||||
|
if (_done?.isCompleted == false) _done.completeError(error, stackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Writes data to the response.
|
/// Writes data to the response.
|
||||||
void write(value, {Encoding encoding: UTF8}) {
|
void write(value, {Encoding encoding}) {
|
||||||
if (_isClosed)
|
encoding ??= UTF8;
|
||||||
|
|
||||||
|
if (_isClosed && !_useStream)
|
||||||
throw _closed();
|
throw _closed();
|
||||||
else {
|
else if (_useStream) {
|
||||||
|
if (value is List<int>)
|
||||||
|
io.add(value);
|
||||||
|
else
|
||||||
|
io.add(encoding.encode(value.toString()));
|
||||||
|
} else {
|
||||||
if (value is List<int>)
|
if (value is List<int>)
|
||||||
buffer.add(value);
|
buffer.add(value);
|
||||||
else
|
else
|
||||||
|
@ -329,8 +454,10 @@ class ResponseContext implements StringSink {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void writeCharCode(int charCode) {
|
void writeCharCode(int charCode) {
|
||||||
if (_isClosed)
|
if (_isClosed && !_useStream)
|
||||||
throw _closed();
|
throw _closed();
|
||||||
|
else if (_useStream)
|
||||||
|
io.add([charCode]);
|
||||||
else
|
else
|
||||||
buffer.addByte(charCode);
|
buffer.addByte(charCode);
|
||||||
}
|
}
|
||||||
|
@ -364,6 +491,7 @@ class _LockableBytesBuilderImpl implements _LockableBytesBuilder {
|
||||||
void _lock() {
|
void _lock() {
|
||||||
_closed = true;
|
_closed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void add(List<int> bytes) {
|
void add(List<int> bytes) {
|
||||||
if (_closed)
|
if (_closed)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
library angel_framework.http.server;
|
library angel_framework.http.server;
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:mirrors';
|
import 'dart:mirrors';
|
||||||
import 'package:angel_route/angel_route.dart' hide Extensible;
|
import 'package:angel_route/angel_route.dart' hide Extensible;
|
||||||
|
@ -14,6 +15,7 @@ import 'angel_base.dart';
|
||||||
import 'angel_http_exception.dart';
|
import 'angel_http_exception.dart';
|
||||||
import 'controller.dart';
|
import 'controller.dart';
|
||||||
import 'fatal_error.dart';
|
import 'fatal_error.dart';
|
||||||
|
|
||||||
//import 'hooked_service.dart';
|
//import 'hooked_service.dart';
|
||||||
import 'request_context.dart';
|
import 'request_context.dart';
|
||||||
import 'response_context.dart';
|
import 'response_context.dart';
|
||||||
|
@ -26,30 +28,37 @@ final RegExp _straySlashes = new RegExp(r'(^/+)|(/+$)');
|
||||||
typedef Future<HttpServer> ServerGenerator(InternetAddress address, int port);
|
typedef Future<HttpServer> ServerGenerator(InternetAddress address, int port);
|
||||||
|
|
||||||
/// Handles an [AngelHttpException].
|
/// Handles an [AngelHttpException].
|
||||||
typedef Future AngelErrorHandler(
|
typedef Future AngelErrorHandler(AngelHttpException err, RequestContext req,
|
||||||
AngelHttpException err, RequestContext req, ResponseContext res);
|
ResponseContext res);
|
||||||
|
|
||||||
/// A function that configures an [Angel] server in some way.
|
/// A function that configures an [Angel] server in some way.
|
||||||
typedef Future AngelConfigurer(Angel app);
|
typedef Future AngelConfigurer(Angel app);
|
||||||
|
|
||||||
/// A powerful real-time/REST/MVC server class.
|
/// A powerful real-time/REST/MVC server class.
|
||||||
class Angel extends AngelBase {
|
class Angel extends AngelBase {
|
||||||
SafeCtrl<HttpRequest> _afterProcessed = new SafeCtrl<HttpRequest>.broadcast();
|
final SafeCtrl<HttpRequest> _afterProcessed =
|
||||||
SafeCtrl<HttpRequest> _beforeProcessed =
|
|
||||||
new SafeCtrl<HttpRequest>.broadcast();
|
new SafeCtrl<HttpRequest>.broadcast();
|
||||||
SafeCtrl<AngelFatalError> _fatalErrorStream =
|
final SafeCtrl<HttpRequest> _beforeProcessed =
|
||||||
|
new SafeCtrl<HttpRequest>.broadcast();
|
||||||
|
final SafeCtrl<AngelFatalError> _fatalErrorStream =
|
||||||
new SafeCtrl<AngelFatalError>.broadcast();
|
new SafeCtrl<AngelFatalError>.broadcast();
|
||||||
SafeCtrl<Controller> _onController = new SafeCtrl<Controller>.broadcast();
|
final SafeCtrl<Controller> _onController =
|
||||||
|
new SafeCtrl<Controller>.broadcast();
|
||||||
|
|
||||||
final List<Angel> _children = [];
|
final List<Angel> _children = [];
|
||||||
|
final Map<String, List> _handlerCache = {};
|
||||||
|
|
||||||
Router _flattened;
|
Router _flattened;
|
||||||
bool _isProduction;
|
bool _isProduction;
|
||||||
Angel _parent;
|
Angel _parent;
|
||||||
final Map<String, List> _handlerCache = {};
|
|
||||||
ServerGenerator _serverGenerator = HttpServer.bind;
|
ServerGenerator _serverGenerator = HttpServer.bind;
|
||||||
|
|
||||||
|
/// A global Map of converters that can transform responses bodies.
|
||||||
|
final Map<String, Converter<List<int>, List<int>>> encoders = {};
|
||||||
|
|
||||||
/// A global Map of manual injections. You usually will not want to touch this.
|
/// A global Map of manual injections. You usually will not want to touch this.
|
||||||
final Map injections = {};
|
final Map injections = {};
|
||||||
|
|
||||||
final Map<dynamic, InjectionRequest> _preContained = {};
|
final Map<dynamic, InjectionRequest> _preContained = {};
|
||||||
ResponseSerializer _serializer;
|
ResponseSerializer _serializer;
|
||||||
|
|
||||||
|
@ -204,14 +213,14 @@ class Angel extends AngelBase {
|
||||||
await service.close();
|
await service.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var plugin in justBeforeStop) await plugin(this);
|
for (var plugin in justBeforeStop)
|
||||||
|
await plugin(this);
|
||||||
|
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dumpTree(
|
void dumpTree({callback(String tree),
|
||||||
{callback(String tree),
|
|
||||||
String header: 'Dumping route tree:',
|
String header: 'Dumping route tree:',
|
||||||
String tab: ' ',
|
String tab: ' ',
|
||||||
bool showMatchers: false}) {
|
bool showMatchers: false}) {
|
||||||
|
@ -245,13 +254,18 @@ class Angel extends AngelBase {
|
||||||
injections[key] = value;
|
injections[key] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Shortcuts for adding converters to transform the response buffer/stream of any request.
|
||||||
|
void injectEncoders(Map<String, Converter<List<int>, List<int>>> encoders) {
|
||||||
|
this.encoders.addAll(encoders);
|
||||||
|
}
|
||||||
|
|
||||||
/// Shortcut for adding a middleware to inject a serialize on every request.
|
/// Shortcut for adding a middleware to inject a serialize on every request.
|
||||||
void injectSerializer(ResponseSerializer serializer) {
|
void injectSerializer(ResponseSerializer serializer) {
|
||||||
_serializer = serializer;
|
_serializer = serializer;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future getHandlerResult(
|
Future getHandlerResult(handler, RequestContext req,
|
||||||
handler, RequestContext req, ResponseContext res) async {
|
ResponseContext res) async {
|
||||||
/*if (handler is RequestMiddleware) {
|
/*if (handler is RequestMiddleware) {
|
||||||
var result = await handler(req, res);
|
var result = await handler(req, res);
|
||||||
|
|
||||||
|
@ -289,8 +303,8 @@ class Angel extends AngelBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Runs some [handler]. Returns `true` if request execution should continue.
|
/// Runs some [handler]. Returns `true` if request execution should continue.
|
||||||
Future<bool> executeHandler(
|
Future<bool> executeHandler(handler, RequestContext req,
|
||||||
handler, RequestContext req, ResponseContext res) async {
|
ResponseContext res) async {
|
||||||
var result = await getHandlerResult(handler, req, res);
|
var result = await getHandlerResult(handler, req, res);
|
||||||
|
|
||||||
if (result is bool) {
|
if (result is bool) {
|
||||||
|
@ -311,9 +325,12 @@ class Angel extends AngelBase {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<ResponseContext> createResponseContext(HttpResponse response) =>
|
Future<ResponseContext> createResponseContext(HttpResponse response,
|
||||||
new Future<ResponseContext>.value(new ResponseContext(response, this)
|
[RequestContext correspondingRequest]) =>
|
||||||
..serializer = (_serializer ?? god.serialize));
|
new Future<ResponseContext>.value(
|
||||||
|
new ResponseContext(response, this, correspondingRequest)
|
||||||
|
..serializer = (_serializer ?? god.serialize)
|
||||||
|
..encoders.addAll(encoders ?? {}));
|
||||||
|
|
||||||
/// Attempts to find a middleware by the given name within this application.
|
/// Attempts to find a middleware by the given name within this application.
|
||||||
findMiddleware(key) {
|
findMiddleware(key) {
|
||||||
|
@ -363,7 +380,7 @@ class Angel extends AngelBase {
|
||||||
Future handleRequest(HttpRequest request) async {
|
Future handleRequest(HttpRequest request) async {
|
||||||
try {
|
try {
|
||||||
var req = await createRequestContext(request);
|
var req = await createRequestContext(request);
|
||||||
var res = await createResponseContext(request.response);
|
var res = await createResponseContext(request.response, req);
|
||||||
String requestedUrl;
|
String requestedUrl;
|
||||||
|
|
||||||
// Faster way to get path
|
// Faster way to get path
|
||||||
|
@ -392,7 +409,8 @@ class Angel extends AngelBase {
|
||||||
var resolved =
|
var resolved =
|
||||||
r.resolveAll(requestedUrl, requestedUrl, method: req.method);
|
r.resolveAll(requestedUrl, requestedUrl, method: req.method);
|
||||||
|
|
||||||
for (var result in resolved) req.params.addAll(result.allParams);
|
for (var result in resolved)
|
||||||
|
req.params.addAll(result.allParams);
|
||||||
|
|
||||||
if (resolved.isNotEmpty) {
|
if (resolved.isNotEmpty) {
|
||||||
var route = resolved.first.route;
|
var route = resolved.first.route;
|
||||||
|
@ -402,7 +420,8 @@ class Angel extends AngelBase {
|
||||||
var m = new MiddlewarePipeline(resolved);
|
var m = new MiddlewarePipeline(resolved);
|
||||||
req.inject(MiddlewarePipeline, m);
|
req.inject(MiddlewarePipeline, m);
|
||||||
|
|
||||||
return new List.from(before)..addAll(m.handlers)..addAll(after);
|
return new List.from(before)
|
||||||
|
..addAll(m.handlers)..addAll(after);
|
||||||
});
|
});
|
||||||
|
|
||||||
for (var handler in pipeline) {
|
for (var handler in pipeline) {
|
||||||
|
@ -445,7 +464,9 @@ class Angel extends AngelBase {
|
||||||
|
|
||||||
void _walk(Router router) {
|
void _walk(Router router) {
|
||||||
if (router is Angel) {
|
if (router is Angel) {
|
||||||
router..before.forEach(_add)..after.forEach(_add);
|
router
|
||||||
|
..before.forEach(_add)
|
||||||
|
..after.forEach(_add);
|
||||||
}
|
}
|
||||||
|
|
||||||
router.requestMiddleware.forEach((k, v) => _add(v));
|
router.requestMiddleware.forEach((k, v) => _add(v));
|
||||||
|
@ -467,8 +488,8 @@ class Angel extends AngelBase {
|
||||||
/// Run a function after injecting from service container.
|
/// Run a function after injecting from service container.
|
||||||
/// If this function has been reflected before, then
|
/// If this function has been reflected before, then
|
||||||
/// the execution will be faster, as the injection requirements were stored beforehand.
|
/// the execution will be faster, as the injection requirements were stored beforehand.
|
||||||
Future runContained(
|
Future runContained(Function handler, RequestContext req,
|
||||||
Function handler, RequestContext req, ResponseContext res) {
|
ResponseContext res) {
|
||||||
if (_preContained.containsKey(handler)) {
|
if (_preContained.containsKey(handler)) {
|
||||||
return handleContained(handler, _preContained[handler])(req, res);
|
return handleContained(handler, _preContained[handler])(req, res);
|
||||||
}
|
}
|
||||||
|
@ -477,8 +498,8 @@ class Angel extends AngelBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Runs with DI, and *always* reflects. Prefer [runContained].
|
/// Runs with DI, and *always* reflects. Prefer [runContained].
|
||||||
Future runReflected(
|
Future runReflected(Function handler, RequestContext req,
|
||||||
Function handler, RequestContext req, ResponseContext res) async {
|
ResponseContext res) async {
|
||||||
var h =
|
var h =
|
||||||
handleContained(handler, _preContained[handler] = preInject(handler));
|
handleContained(handler, _preContained[handler] = preInject(handler));
|
||||||
return await h(req, res);
|
return await h(req, res);
|
||||||
|
@ -487,13 +508,13 @@ class Angel extends AngelBase {
|
||||||
|
|
||||||
/// Use [sendResponse] instead.
|
/// Use [sendResponse] instead.
|
||||||
@deprecated
|
@deprecated
|
||||||
Future sendRequest(
|
Future sendRequest(HttpRequest request, RequestContext req,
|
||||||
HttpRequest request, RequestContext req, ResponseContext res) =>
|
ResponseContext res) =>
|
||||||
sendResponse(request, req, res);
|
sendResponse(request, req, res);
|
||||||
|
|
||||||
/// Sends a response.
|
/// Sends a response.
|
||||||
Future sendResponse(
|
Future sendResponse(HttpRequest request, RequestContext req,
|
||||||
HttpRequest request, RequestContext req, ResponseContext res,
|
ResponseContext res,
|
||||||
{bool ignoreFinalizers: false}) {
|
{bool ignoreFinalizers: false}) {
|
||||||
_afterProcessed.add(request);
|
_afterProcessed.add(request);
|
||||||
|
|
||||||
|
@ -515,10 +536,40 @@ class Angel extends AngelBase {
|
||||||
..chunkedTransferEncoding = res.chunked ?? true
|
..chunkedTransferEncoding = res.chunked ?? true
|
||||||
..set(HttpHeaders.CONTENT_LENGTH, res.buffer.length);
|
..set(HttpHeaders.CONTENT_LENGTH, res.buffer.length);
|
||||||
|
|
||||||
|
List<int> outputBuffer = res.buffer.toBytes();
|
||||||
|
|
||||||
|
if (res.encoders.isNotEmpty) {
|
||||||
|
var allowedEncodings =
|
||||||
|
(req.headers[HttpHeaders.ACCEPT_ENCODING] ?? []).map((str) {
|
||||||
|
// Ignore quality specifications in accept-encoding
|
||||||
|
// ex. gzip;q=0.8
|
||||||
|
if (!str.contains(';')) return str;
|
||||||
|
return str.split(';')[0];
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var encodingName in allowedEncodings) {
|
||||||
|
Converter<List<int>, List<int>> encoder;
|
||||||
|
String key = encodingName;
|
||||||
|
|
||||||
|
if (res.encoders.containsKey(encodingName))
|
||||||
|
encoder = res.encoders[encodingName];
|
||||||
|
else if (encodingName == '*') {
|
||||||
|
encoder = res.encoders[key = res.encoders.keys.first];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (encoder != null) {
|
||||||
|
request.response.headers
|
||||||
|
.set(HttpHeaders.CONTENT_ENCODING, key);
|
||||||
|
outputBuffer = res.encoders[key].convert(outputBuffer);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
request.response
|
request.response
|
||||||
..statusCode = res.statusCode
|
..statusCode = res.statusCode
|
||||||
..cookies.addAll(res.cookies)
|
..cookies.addAll(res.cookies)
|
||||||
..add(res.buffer.toBytes());
|
..add(outputBuffer);
|
||||||
|
|
||||||
return finalizers.then((_) => request.response.close());
|
return finalizers.then((_) => request.response.close());
|
||||||
}
|
}
|
||||||
|
@ -529,7 +580,9 @@ class Angel extends AngelBase {
|
||||||
await configurer(this);
|
await configurer(this);
|
||||||
|
|
||||||
if (configurer is Controller)
|
if (configurer is Controller)
|
||||||
_onController.add(controllers[configurer.findExpose().path] = configurer);
|
_onController.add(controllers[configurer
|
||||||
|
.findExpose()
|
||||||
|
.path] = configurer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Starts the server, wrapped in a [runZoned] call.
|
/// Starts the server, wrapped in a [runZoned] call.
|
||||||
|
@ -634,7 +687,8 @@ class Angel extends AngelBase {
|
||||||
/// An instance mounted on a server started by the [serverGenerator].
|
/// An instance mounted on a server started by the [serverGenerator].
|
||||||
factory Angel.custom(ServerGenerator serverGenerator,
|
factory Angel.custom(ServerGenerator serverGenerator,
|
||||||
{@deprecated bool debug: false}) =>
|
{@deprecated bool debug: false}) =>
|
||||||
new Angel().._serverGenerator = serverGenerator;
|
new Angel()
|
||||||
|
.._serverGenerator = serverGenerator;
|
||||||
|
|
||||||
factory Angel.fromSecurityContext(SecurityContext context,
|
factory Angel.fromSecurityContext(SecurityContext context,
|
||||||
{@deprecated bool debug: false}) {
|
{@deprecated bool debug: false}) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name: angel_framework
|
name: angel_framework
|
||||||
version: 1.0.8
|
version: 1.0.9
|
||||||
description: A high-powered HTTP server with DI, routing and more.
|
description: A high-powered HTTP server with DI, routing and more.
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/angel_framework
|
homepage: https://github.com/angel-dart/angel_framework
|
||||||
|
@ -9,6 +9,7 @@ dependencies:
|
||||||
angel_model: ^1.0.0
|
angel_model: ^1.0.0
|
||||||
angel_route: ">=1.0.5 <2.0.0"
|
angel_route: ">=1.0.5 <2.0.0"
|
||||||
body_parser: ^1.0.0-dev
|
body_parser: ^1.0.0-dev
|
||||||
|
charcode: ^1.0.0
|
||||||
container: ^0.1.2
|
container: ^0.1.2
|
||||||
flatten: ^1.0.0
|
flatten: ^1.0.0
|
||||||
json_god: ^2.0.0-beta
|
json_god: ^2.0.0-beta
|
||||||
|
@ -17,6 +18,7 @@ dependencies:
|
||||||
mime: ^0.9.3
|
mime: ^0.9.3
|
||||||
random_string: ^0.0.1
|
random_string: ^0.0.1
|
||||||
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
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'accepts_test.dart' as accepts;
|
||||||
import 'anonymous_service_test.dart' as anonymous_service;
|
import 'anonymous_service_test.dart' as anonymous_service;
|
||||||
import 'controller_test.dart' as controller;
|
import 'controller_test.dart' as controller;
|
||||||
import 'di_test.dart' as di;
|
import 'di_test.dart' as di;
|
||||||
|
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;
|
||||||
|
@ -10,6 +11,7 @@ import 'routing_test.dart' as routing;
|
||||||
import 'serialize_test.dart' as serialize;
|
import 'serialize_test.dart' as serialize;
|
||||||
import 'server_test.dart' as server;
|
import 'server_test.dart' as server;
|
||||||
import 'services_test.dart' as services;
|
import 'services_test.dart' as services;
|
||||||
|
import 'streaming_test.dart' as streaming;
|
||||||
import 'typed_service_test.dart' as typed_service;
|
import 'typed_service_test.dart' as typed_service;
|
||||||
import 'util_test.dart' as util;
|
import 'util_test.dart' as util;
|
||||||
import 'view_generator_test.dart' as view_generator;
|
import 'view_generator_test.dart' as view_generator;
|
||||||
|
@ -21,6 +23,7 @@ main() {
|
||||||
group('anonymous service', anonymous_service.main);
|
group('anonymous service', anonymous_service.main);
|
||||||
group('controller', controller.main);
|
group('controller', controller.main);
|
||||||
group('di', di.main);
|
group('di', di.main);
|
||||||
|
group('encoders_buffer', encoders_buffer.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);
|
||||||
|
@ -29,6 +32,7 @@ main() {
|
||||||
group('serialize', serialize.main);
|
group('serialize', serialize.main);
|
||||||
group('server', server.main);
|
group('server', server.main);
|
||||||
group('services', services.main);
|
group('services', services.main);
|
||||||
|
group('streaming', streaming.main);
|
||||||
group('typed_service', typed_service.main);
|
group('typed_service', typed_service.main);
|
||||||
group('util', util.main);
|
group('util', util.main);
|
||||||
group('view generator', view_generator.main);
|
group('view generator', view_generator.main);
|
||||||
|
|
|
@ -44,7 +44,7 @@ main() {
|
||||||
String url;
|
String url;
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
app = new Angel(debug: true);
|
app = new Angel();
|
||||||
app.registerMiddleware("foo", (req, res) async => res.write("Hello, "));
|
app.registerMiddleware("foo", (req, res) async => res.write("Hello, "));
|
||||||
app.registerMiddleware("bar", (req, res) async => res.write("world!"));
|
app.registerMiddleware("bar", (req, res) async => res.write("world!"));
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
@ -16,7 +16,7 @@ main() {
|
||||||
String url;
|
String url;
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
app = new Angel(debug: true);
|
app = new Angel();
|
||||||
client = new http.Client();
|
client = new http.Client();
|
||||||
|
|
||||||
// Inject some todos
|
// Inject some todos
|
||||||
|
|
94
test/encoders_buffer_test.dart
Normal file
94
test/encoders_buffer_test.dart
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
import 'package:angel_framework/angel_framework.dart';
|
||||||
|
import 'package:mock_request/mock_request.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
main() async {
|
||||||
|
Angel app;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
app = new Angel();
|
||||||
|
app.injectEncoders(
|
||||||
|
{
|
||||||
|
'deflate': ZLIB.encoder,
|
||||||
|
'gzip': GZIP.encoder,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
app.get('/hello', (res) {
|
||||||
|
res.write('Hello, world!');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
tearDown(() => app.close());
|
||||||
|
|
||||||
|
encodingTests(() => app);
|
||||||
|
}
|
||||||
|
|
||||||
|
void encodingTests(Angel getApp()) {
|
||||||
|
group('encoding', () {
|
||||||
|
Angel app;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
app = getApp();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('sends plaintext if no accept-encoding', () async {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse('/hello'))..close();
|
||||||
|
var rs = rq.response;
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
|
||||||
|
var body = await rs.transform(UTF8.decoder).join();
|
||||||
|
expect(body, 'Hello, world!');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('encodes if wildcard', () async {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse('/hello'))
|
||||||
|
..headers.set(HttpHeaders.ACCEPT_ENCODING, '*')
|
||||||
|
..close();
|
||||||
|
var rs = rq.response;
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
|
||||||
|
var body = await rs.fold<List<int>>([], (out, list) => []..addAll(list));
|
||||||
|
expect(rs.headers.value(HttpHeaders.CONTENT_ENCODING), 'deflate');
|
||||||
|
expect(body, ZLIB.encode(UTF8.encode('Hello, world!')));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('encodes if wildcard + multiple', () async {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse('/hello'))
|
||||||
|
..headers.set(HttpHeaders.ACCEPT_ENCODING, ['foo', 'bar', '*'])
|
||||||
|
..close();
|
||||||
|
var rs = rq.response;
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
|
||||||
|
var body = await rs.fold<List<int>>([], (out, list) => []..addAll(list));
|
||||||
|
expect(rs.headers.value(HttpHeaders.CONTENT_ENCODING), 'deflate');
|
||||||
|
expect(body, ZLIB.encode(UTF8.encode('Hello, world!')));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('encodes if explicit', () async {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse('/hello'))
|
||||||
|
..headers.set(HttpHeaders.ACCEPT_ENCODING, 'gzip')
|
||||||
|
..close();
|
||||||
|
var rs = rq.response;
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
|
||||||
|
var body = await rs.fold<List<int>>([], (out, list) => []..addAll(list));
|
||||||
|
expect(rs.headers.value(HttpHeaders.CONTENT_ENCODING), 'gzip');
|
||||||
|
expect(body, GZIP.encode(UTF8.encode('Hello, world!')));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('only uses one encoder', () async {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse('/hello'))
|
||||||
|
..headers.set(HttpHeaders.ACCEPT_ENCODING, ['gzip', 'deflate'])
|
||||||
|
..close();
|
||||||
|
var rs = rq.response;
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
|
||||||
|
var body = await rs.fold<List<int>>([], (out, list) => []..addAll(list));
|
||||||
|
expect(rs.headers.value(HttpHeaders.CONTENT_ENCODING), 'gzip');
|
||||||
|
expect(body, GZIP.encode(UTF8.encode('Hello, world!')));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
|
@ -24,10 +24,9 @@ main() {
|
||||||
http.Client client;
|
http.Client client;
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
final debug = true;
|
app = new Angel();
|
||||||
app = new Angel(debug: debug);
|
nested = new Angel();
|
||||||
nested = new Angel(debug: debug);
|
todos = new Angel();
|
||||||
todos = new Angel(debug: debug);
|
|
||||||
|
|
||||||
// Lazy-parse in production
|
// Lazy-parse in production
|
||||||
[app, nested, todos].forEach((Angel app) {
|
[app, nested, todos].forEach((Angel app) {
|
||||||
|
|
91
test/streaming_test.dart
Normal file
91
test/streaming_test.dart
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
import 'dart:async';
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
import 'package:angel_framework/angel_framework.dart';
|
||||||
|
import 'package:mock_request/mock_request.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
import 'encoders_buffer_test.dart' show encodingTests;
|
||||||
|
|
||||||
|
main() async {
|
||||||
|
Angel app;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
app = new Angel();
|
||||||
|
app.injectEncoders(
|
||||||
|
{
|
||||||
|
'deflate': ZLIB.encoder,
|
||||||
|
'gzip': GZIP.encoder,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
app.get('/hello', (res) {
|
||||||
|
new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits]).pipe(res);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/write', (res) async {
|
||||||
|
await res.addStream(
|
||||||
|
new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits]));
|
||||||
|
res.write('bye');
|
||||||
|
await res.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/multiple', (res) async {
|
||||||
|
await res.addStream(
|
||||||
|
new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits]));
|
||||||
|
await res.addStream(
|
||||||
|
new Stream<List<int>>.fromIterable(['bye'.codeUnits]));
|
||||||
|
await res.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/overwrite', (res) async {
|
||||||
|
res.statusCode = 32;
|
||||||
|
await new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits])
|
||||||
|
.pipe(res);
|
||||||
|
await new Stream<List<int>>.fromIterable(['Hello, world!'.codeUnits])
|
||||||
|
.pipe(res);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/error', (res) => res.addError(new StateError('wtf')));
|
||||||
|
|
||||||
|
app.fatalErrorStream.listen((e) {
|
||||||
|
stderr..writeln(e.error)..writeln(e.stack);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
tearDown(() => app.close());
|
||||||
|
|
||||||
|
_expectHelloBye(String path) async {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse(path))..close();
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
var body = await rq.response.transform(UTF8.decoder).join();
|
||||||
|
expect(body, 'Hello, world!bye');
|
||||||
|
}
|
||||||
|
|
||||||
|
test('write after addStream', () => _expectHelloBye('/write'));
|
||||||
|
|
||||||
|
test('multiple addStream', () => _expectHelloBye('/multiple'));
|
||||||
|
|
||||||
|
test('cannot write after close', () async {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse('/overwrite'))
|
||||||
|
..close();
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
var body = await rq.response.transform(UTF8.decoder).join();
|
||||||
|
|
||||||
|
if (rq.response.statusCode != 32)
|
||||||
|
throw 'overwrite should throw error; response: $body';
|
||||||
|
});
|
||||||
|
|
||||||
|
test('res => addError', () async {
|
||||||
|
try {
|
||||||
|
var rq = new MockHttpRequest('GET', Uri.parse('/error'))
|
||||||
|
..close();
|
||||||
|
await app.handleRequest(rq);
|
||||||
|
var body = await rq.response.transform(UTF8.decoder).join();
|
||||||
|
throw 'addError should throw error; response: $body';
|
||||||
|
} on StateError {
|
||||||
|
// Should throw error...
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
encodingTests(() => app);
|
||||||
|
}
|
Loading…
Reference in a new issue