From 529d2d20ad97ef70722babf2333665c8ddbf5810 Mon Sep 17 00:00:00 2001 From: "thomashii@dukefirehawk.com" Date: Fri, 18 Nov 2022 21:43:50 +0800 Subject: [PATCH] Compressed archived packages --- archived_packages/eventsource.zip | Bin 0 -> 9944 bytes archived_packages/eventsource/.gitignore | 65 -- archived_packages/eventsource/LICENSE | 21 - archived_packages/eventsource/README.md | 33 - .../eventsource/analysis_options.yaml | 3 - archived_packages/eventsource/eventsource.iml | 14 - .../eventsource/example/main.dart | 50 -- .../eventsource/example/pretty_logging.dart | 29 - .../eventsource/lib/angel_eventsource.dart | 1 - archived_packages/eventsource/lib/server.dart | 51 -- archived_packages/eventsource/pubspec.yaml | 26 - archived_packages/orm.zip | Bin 0 -> 3292 bytes .../orm/angel_orm_sqlite/LICENSE | 21 - .../orm/angel_orm_sqlite/pubspec.yaml | 5 - archived_packages/poll.zip | Bin 0 -> 11989 bytes archived_packages/poll/.gitignore | 64 -- archived_packages/poll/.travis.yml | 1 - archived_packages/poll/AUTHORS.md | 12 - archived_packages/poll/CHANGELOG.md | 9 - archived_packages/poll/LICENSE | 29 - archived_packages/poll/README.md | 42 -- archived_packages/poll/analysis_options.yaml | 1 - archived_packages/poll/example/main.dart | 21 - archived_packages/poll/lib/angel_poll.dart | 265 ------- archived_packages/poll/poll.iml | 14 - archived_packages/poll/pubspec.yaml | 23 - archived_packages/poll/test/all_test.dart | 105 --- archived_packages/relations.zip | Bin 0 -> 17290 bytes archived_packages/relations/.gitignore | 93 --- archived_packages/relations/.travis.yml | 1 - archived_packages/relations/AUTHORS.md | 12 - archived_packages/relations/CHANGELOG.md | 9 - archived_packages/relations/LICENSE | 29 - archived_packages/relations/README.md | 25 - .../relations/analysis_options.yaml | 1 - .../relations/lib/angel_relations.dart | 9 - .../relations/lib/src/belongs_to.dart | 75 -- .../relations/lib/src/belongs_to_many.dart | 75 -- .../relations/lib/src/has_many.dart | 70 -- .../relations/lib/src/has_many_through.dart | 97 --- .../relations/lib/src/has_one.dart | 73 -- .../relations/lib/src/no_service.dart | 2 - .../relations/lib/src/plural.dart | 23 - archived_packages/relations/pubspec.yaml | 21 - .../relations/test/belongs_to_test.dart | 54 -- archived_packages/relations/test/common.dart | 69 -- .../relations/test/has_many_test.dart | 60 -- .../relations/test/has_one_test.dart | 57 -- archived_packages/rethink.zip | Bin 0 -> 12942 bytes archived_packages/rethink/.gitignore | 31 - archived_packages/rethink/.travis.yml | 4 - archived_packages/rethink/AUTHORS.md | 12 - archived_packages/rethink/CHANGELOG.md | 10 - archived_packages/rethink/LICENSE | 29 - archived_packages/rethink/README.md | 87 --- .../rethink/analysis_options.yaml | 1 - .../rethink/lib/angel_rethink.dart | 1 - .../rethink/lib/src/rethink_service.dart | 251 ------- archived_packages/rethink/pubspec.yaml | 35 - archived_packages/rethink/test/README.md | 6 - archived_packages/rethink/test/bootstrap.dart | 11 - archived_packages/rethink/test/common.dart | 10 - .../rethink/test/generic_test.dart | 85 --- archived_packages/seeder.zip | Bin 0 -> 9377 bytes archived_packages/seeder/.gitignore | 27 - archived_packages/seeder/.travis.yml | 1 - archived_packages/seeder/AUTHORS.md | 12 - archived_packages/seeder/CHANGELOG.md | 9 - archived_packages/seeder/LICENSE | 29 - archived_packages/seeder/README.md | 25 - .../seeder/analysis_options.yaml | 1 - .../seeder/lib/angel_seeder.dart | 141 ---- archived_packages/seeder/pubspec.yaml | 17 - archived_packages/seeder/test/all_test.dart | 69 -- archived_packages/typed_service.zip | Bin 0 -> 10702 bytes archived_packages/typed_service/.gitignore | 13 - archived_packages/typed_service/AUTHORS.md | 12 - archived_packages/typed_service/CHANGELOG.md | 16 - archived_packages/typed_service/LICENSE | 29 - archived_packages/typed_service/README.md | 29 - .../typed_service/analysis_options.yaml | 1 - .../typed_service/example/README.md | 5 - .../typed_service/example/data.json | 22 - .../typed_service/example/main.dart | 42 -- .../lib/angel_typed_service.dart | 100 --- archived_packages/typed_service/pubspec.yaml | 29 - .../test/typed_service_test.dart | 57 -- archived_packages/wings.zip | Bin 0 -> 216276 bytes archived_packages/wings/.clang-format | 121 ---- archived_packages/wings/.gitignore | 67 -- archived_packages/wings/.gitmodules | 6 - archived_packages/wings/CMakeLists.txt | 6 - archived_packages/wings/LICENSE | 29 - archived_packages/wings/README.md | 51 -- archived_packages/wings/Vagrantfile | 6 - archived_packages/wings/analysis_options.yaml | 1 - archived_packages/wings/benchmark/empty.dart | 23 - archived_packages/wings/benchmark/util.dart | 112 --- archived_packages/wings/example/main.dart | 34 - archived_packages/wings/example/shared.dart | 22 - archived_packages/wings/example/socket.dart | 27 - archived_packages/wings/lib/angel_wings.dart | 4 - .../wings/lib/src/CMakeLists.txt | 8 - .../wings/lib/src/angel_wings.cc | 55 -- archived_packages/wings/lib/src/angel_wings.h | 25 - archived_packages/wings/lib/src/bind.cc | 161 ----- archived_packages/wings/lib/src/http.cc | 175 ----- .../wings/lib/src/libangel_wings.dylib | Bin 196292 -> 0 bytes .../wings/lib/src/libangel_wings.so | Bin 157936 -> 0 bytes archived_packages/wings/lib/src/util.cc | 146 ---- .../wings/lib/src/wings_driver.dart | 98 --- .../wings/lib/src/wings_request.dart | 218 ------ .../wings/lib/src/wings_response.dart | 213 ------ .../wings/lib/src/wings_socket.cc | 129 ---- .../wings/lib/src/wings_socket.dart | 130 ---- .../wings/lib/src/wings_socket.h | 54 -- archived_packages/wings/libangel_wings.dylib | Bin 196292 -> 0 bytes archived_packages/wings/libangel_wings.so | Bin 157936 -> 0 bytes archived_packages/wings/provision.sh | 24 - archived_packages/wings/pubspec.yaml | 31 - .../ubuntu-bionic-18.04-cloudimg-console.log | 672 ------------------ archived_packages/wings/web/index.html | 13 - archived_packages/wings/web/site.css | 3 - 123 files changed, 5683 deletions(-) create mode 100644 archived_packages/eventsource.zip delete mode 100644 archived_packages/eventsource/.gitignore delete mode 100644 archived_packages/eventsource/LICENSE delete mode 100644 archived_packages/eventsource/README.md delete mode 100644 archived_packages/eventsource/analysis_options.yaml delete mode 100644 archived_packages/eventsource/eventsource.iml delete mode 100644 archived_packages/eventsource/example/main.dart delete mode 100644 archived_packages/eventsource/example/pretty_logging.dart delete mode 100644 archived_packages/eventsource/lib/angel_eventsource.dart delete mode 100644 archived_packages/eventsource/lib/server.dart delete mode 100644 archived_packages/eventsource/pubspec.yaml create mode 100644 archived_packages/orm.zip delete mode 100644 archived_packages/orm/angel_orm_sqlite/LICENSE delete mode 100644 archived_packages/orm/angel_orm_sqlite/pubspec.yaml create mode 100644 archived_packages/poll.zip delete mode 100644 archived_packages/poll/.gitignore delete mode 100644 archived_packages/poll/.travis.yml delete mode 100644 archived_packages/poll/AUTHORS.md delete mode 100644 archived_packages/poll/CHANGELOG.md delete mode 100644 archived_packages/poll/LICENSE delete mode 100644 archived_packages/poll/README.md delete mode 100644 archived_packages/poll/analysis_options.yaml delete mode 100644 archived_packages/poll/example/main.dart delete mode 100644 archived_packages/poll/lib/angel_poll.dart delete mode 100644 archived_packages/poll/poll.iml delete mode 100644 archived_packages/poll/pubspec.yaml delete mode 100644 archived_packages/poll/test/all_test.dart create mode 100644 archived_packages/relations.zip delete mode 100644 archived_packages/relations/.gitignore delete mode 100644 archived_packages/relations/.travis.yml delete mode 100644 archived_packages/relations/AUTHORS.md delete mode 100644 archived_packages/relations/CHANGELOG.md delete mode 100644 archived_packages/relations/LICENSE delete mode 100644 archived_packages/relations/README.md delete mode 100644 archived_packages/relations/analysis_options.yaml delete mode 100644 archived_packages/relations/lib/angel_relations.dart delete mode 100644 archived_packages/relations/lib/src/belongs_to.dart delete mode 100644 archived_packages/relations/lib/src/belongs_to_many.dart delete mode 100644 archived_packages/relations/lib/src/has_many.dart delete mode 100644 archived_packages/relations/lib/src/has_many_through.dart delete mode 100644 archived_packages/relations/lib/src/has_one.dart delete mode 100644 archived_packages/relations/lib/src/no_service.dart delete mode 100644 archived_packages/relations/lib/src/plural.dart delete mode 100644 archived_packages/relations/pubspec.yaml delete mode 100644 archived_packages/relations/test/belongs_to_test.dart delete mode 100644 archived_packages/relations/test/common.dart delete mode 100644 archived_packages/relations/test/has_many_test.dart delete mode 100644 archived_packages/relations/test/has_one_test.dart create mode 100644 archived_packages/rethink.zip delete mode 100644 archived_packages/rethink/.gitignore delete mode 100644 archived_packages/rethink/.travis.yml delete mode 100644 archived_packages/rethink/AUTHORS.md delete mode 100644 archived_packages/rethink/CHANGELOG.md delete mode 100644 archived_packages/rethink/LICENSE delete mode 100644 archived_packages/rethink/README.md delete mode 100644 archived_packages/rethink/analysis_options.yaml delete mode 100644 archived_packages/rethink/lib/angel_rethink.dart delete mode 100644 archived_packages/rethink/lib/src/rethink_service.dart delete mode 100644 archived_packages/rethink/pubspec.yaml delete mode 100644 archived_packages/rethink/test/README.md delete mode 100644 archived_packages/rethink/test/bootstrap.dart delete mode 100644 archived_packages/rethink/test/common.dart delete mode 100644 archived_packages/rethink/test/generic_test.dart create mode 100644 archived_packages/seeder.zip delete mode 100644 archived_packages/seeder/.gitignore delete mode 100644 archived_packages/seeder/.travis.yml delete mode 100644 archived_packages/seeder/AUTHORS.md delete mode 100644 archived_packages/seeder/CHANGELOG.md delete mode 100644 archived_packages/seeder/LICENSE delete mode 100644 archived_packages/seeder/README.md delete mode 100644 archived_packages/seeder/analysis_options.yaml delete mode 100644 archived_packages/seeder/lib/angel_seeder.dart delete mode 100644 archived_packages/seeder/pubspec.yaml delete mode 100644 archived_packages/seeder/test/all_test.dart create mode 100644 archived_packages/typed_service.zip delete mode 100644 archived_packages/typed_service/.gitignore delete mode 100644 archived_packages/typed_service/AUTHORS.md delete mode 100644 archived_packages/typed_service/CHANGELOG.md delete mode 100644 archived_packages/typed_service/LICENSE delete mode 100644 archived_packages/typed_service/README.md delete mode 100644 archived_packages/typed_service/analysis_options.yaml delete mode 100644 archived_packages/typed_service/example/README.md delete mode 100644 archived_packages/typed_service/example/data.json delete mode 100644 archived_packages/typed_service/example/main.dart delete mode 100644 archived_packages/typed_service/lib/angel_typed_service.dart delete mode 100644 archived_packages/typed_service/pubspec.yaml delete mode 100644 archived_packages/typed_service/test/typed_service_test.dart create mode 100644 archived_packages/wings.zip delete mode 100644 archived_packages/wings/.clang-format delete mode 100644 archived_packages/wings/.gitignore delete mode 100644 archived_packages/wings/.gitmodules delete mode 100644 archived_packages/wings/CMakeLists.txt delete mode 100644 archived_packages/wings/LICENSE delete mode 100644 archived_packages/wings/README.md delete mode 100644 archived_packages/wings/Vagrantfile delete mode 100644 archived_packages/wings/analysis_options.yaml delete mode 100644 archived_packages/wings/benchmark/empty.dart delete mode 100644 archived_packages/wings/benchmark/util.dart delete mode 100644 archived_packages/wings/example/main.dart delete mode 100644 archived_packages/wings/example/shared.dart delete mode 100644 archived_packages/wings/example/socket.dart delete mode 100644 archived_packages/wings/lib/angel_wings.dart delete mode 100644 archived_packages/wings/lib/src/CMakeLists.txt delete mode 100644 archived_packages/wings/lib/src/angel_wings.cc delete mode 100644 archived_packages/wings/lib/src/angel_wings.h delete mode 100644 archived_packages/wings/lib/src/bind.cc delete mode 100644 archived_packages/wings/lib/src/http.cc delete mode 100644 archived_packages/wings/lib/src/libangel_wings.dylib delete mode 100644 archived_packages/wings/lib/src/libangel_wings.so delete mode 100644 archived_packages/wings/lib/src/util.cc delete mode 100644 archived_packages/wings/lib/src/wings_driver.dart delete mode 100644 archived_packages/wings/lib/src/wings_request.dart delete mode 100644 archived_packages/wings/lib/src/wings_response.dart delete mode 100644 archived_packages/wings/lib/src/wings_socket.cc delete mode 100644 archived_packages/wings/lib/src/wings_socket.dart delete mode 100644 archived_packages/wings/lib/src/wings_socket.h delete mode 100644 archived_packages/wings/libangel_wings.dylib delete mode 100644 archived_packages/wings/libangel_wings.so delete mode 100644 archived_packages/wings/provision.sh delete mode 100644 archived_packages/wings/pubspec.yaml delete mode 100644 archived_packages/wings/ubuntu-bionic-18.04-cloudimg-console.log delete mode 100644 archived_packages/wings/web/index.html delete mode 100644 archived_packages/wings/web/site.css diff --git a/archived_packages/eventsource.zip b/archived_packages/eventsource.zip new file mode 100644 index 0000000000000000000000000000000000000000..a1012dfd85eb777fb326b2eb4ea32936e8b56114 GIT binary patch literal 9944 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 - - - - - - - - - - - - - \ No newline at end of file diff --git a/archived_packages/eventsource/example/main.dart b/archived_packages/eventsource/example/main.dart deleted file mode 100644 index f208544f..00000000 --- a/archived_packages/eventsource/example/main.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:angel_eventsource/server.dart'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_framework/http.dart'; -import 'package:angel_websocket/server.dart'; -import 'package:eventsource/eventsource.dart'; -import 'package:logging/logging.dart'; -import 'pretty_logging.dart'; - -main() async { - var app = new Angel(); - var ws = new AngelWebSocket(app); - var events = new AngelEventSourcePublisher(ws); - - await app.configure(ws.configureServer); - - app.use('/api/todos', new MapService()); - app.all('/ws', ws.handleRequest); - app.get('/events', events.handleRequest); - - app.logger = new Logger('angel_eventsource')..onRecord.listen(prettyLog); - - var http = new AngelHttp(app); - var server = await http.startServer('127.0.0.1', 3000); - var url = Uri.parse('http://${server.address.address}:${server.port}'); - print('Listening at $url'); - - /* - var sock = await Socket.connect(server.address, server.port); - sock - ..writeln('GET /sse HTTP/1.1') - ..writeln('Accept: text/event-stream') - ..writeln('Host: 127.0.0.1') - ..writeln() - ..flush(); - sock.transform(UTF8.decoder).transform(const LineSplitter()).listen(print); - */ - - /* - var client = new HttpClient(); - var rq = await client.openUrl('GET', url); - var rs = await rq.close(); - rs.transform(UTF8.decoder).transform(const LineSplitter()).listen(print); - */ - - var eventSource = await EventSource.connect(url); - - await for (var event in eventSource) { - print(event.data); - } -} diff --git a/archived_packages/eventsource/example/pretty_logging.dart b/archived_packages/eventsource/example/pretty_logging.dart deleted file mode 100644 index 883b979b..00000000 --- a/archived_packages/eventsource/example/pretty_logging.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:console/console.dart'; -import 'package:logging/logging.dart'; - -/// Prints the contents of a [LogRecord] with pretty colors. -prettyLog(LogRecord record) async { - var pen = new TextPen(); - chooseLogColor(pen.reset(), record.level); - pen(record.toString()); - - if (record.error != null) pen(record.error.toString()); - if (record.stackTrace != null) pen(record.stackTrace.toString()); - - pen(); -} - -/// Chooses a color based on the logger [level]. -void chooseLogColor(TextPen pen, Level level) { - if (level == Level.SHOUT) - pen.darkRed(); - else if (level == Level.SEVERE) - pen.red(); - else if (level == Level.WARNING) - pen.yellow(); - else if (level == Level.INFO) - pen.magenta(); - else if (level == Level.FINER) - pen.blue(); - else if (level == Level.FINEST) pen.darkBlue(); -} diff --git a/archived_packages/eventsource/lib/angel_eventsource.dart b/archived_packages/eventsource/lib/angel_eventsource.dart deleted file mode 100644 index 1071f8fc..00000000 --- a/archived_packages/eventsource/lib/angel_eventsource.dart +++ /dev/null @@ -1 +0,0 @@ -export 'package:angel_websocket/angel_websocket.dart'; diff --git a/archived_packages/eventsource/lib/server.dart b/archived_packages/eventsource/lib/server.dart deleted file mode 100644 index ea6c4e19..00000000 --- a/archived_packages/eventsource/lib/server.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:async'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_websocket/server.dart'; -import 'package:eventsource/eventsource.dart'; -import 'package:eventsource/src/encoder.dart'; -import 'package:eventsource/publisher.dart'; -import 'package:stream_channel/stream_channel.dart'; - -class AngelEventSourcePublisher { - final AngelWebSocket webSocketDriver; - - final String channel; - - int _count = 0; - - AngelEventSourcePublisher(this.webSocketDriver, {this.channel: ''}); - - Future handleRequest(RequestContext req, ResponseContext res) async { - if (!req.accepts('text/event-stream', strict: false)) - throw new AngelHttpException.badRequest(); - - res.headers.addAll({ - 'cache-control': 'no-cache, no-store, must-revalidate', - 'content-type': 'text/event-stream', - 'connection': 'keep-alive', - }); - - var acceptsGzip = - (req.headers['accept-encoding']?.contains('gzip') == true); - - if (acceptsGzip) res.headers['content-encoding'] = 'gzip'; - - var eventSink = new EventSourceEncoder(compressed: acceptsGzip) - .startChunkedConversion(res); - - // Listen for events. - var ctrl = new StreamChannelController(); - - // Incoming events are strings, and should be sent via the eventSink. - ctrl.local.stream.cast().listen((data) { - eventSink.add(new Event( - id: (_count++).toString(), - data: data, - )); - }); - - // Create a new WebSocketContext, and hand it off to the driver. - var socket = new WebSocketContext(ctrl.foreign, req, res); - return await webSocketDriver.handleClient(socket); - } -} diff --git a/archived_packages/eventsource/pubspec.yaml b/archived_packages/eventsource/pubspec.yaml deleted file mode 100644 index d13748e2..00000000 --- a/archived_packages/eventsource/pubspec.yaml +++ /dev/null @@ -1,26 +0,0 @@ -name: angel_eventsource -version: 2.0.0 -description: Server-sent Events (SSE) plugin for Angel. -homepage: https://github.com/angel-dart/eventsource -publish_to: none -environment: - sdk: ">=2.10.0 <3.0.0" -dependencies: - angel_framework: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x - path: packages/framework - angel_websocket: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x - path: packages/websocket - eventsource: - git: - url: https://github.com/dukefirehawk/dart-eventsource.git - stream_channel: ^2.0.0 -dev_dependencies: - console: ^4.0.0 - logging: ^1.0.0 - test: ^1.16.5 diff --git a/archived_packages/orm.zip b/archived_packages/orm.zip new file mode 100644 index 0000000000000000000000000000000000000000..7b0436e83f9fd900d577a1ea6b72323bda04017c GIT binary patch literal 3292 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 U7&Md?JONloF^WLR+6R97A8KK!E&u=k literal 0 HcmV?d00001 diff --git a/archived_packages/orm/angel_orm_sqlite/LICENSE b/archived_packages/orm/angel_orm_sqlite/LICENSE deleted file mode 100644 index 8f65b579..00000000 --- a/archived_packages/orm/angel_orm_sqlite/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License (MIT) - -Copyright (c) 2021 dukefirehawk.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/archived_packages/orm/angel_orm_sqlite/pubspec.yaml b/archived_packages/orm/angel_orm_sqlite/pubspec.yaml deleted file mode 100644 index 6e2d9082..00000000 --- a/archived_packages/orm/angel_orm_sqlite/pubspec.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: angel_orm_sqlite -environment: - sdk: ">=2.16.0 <3.0.0" -dependencies: - angel_orm: ^2.0.0-dev diff --git a/archived_packages/poll.zip b/archived_packages/poll.zip new file mode 100644 index 0000000000000000000000000000000000000000..4442e48662810a9aa359816ed981a6ada2d28d3e GIT binary patch literal 11989 zcmbVS1yo$wvc=tkyCk@K2=4CgPH=aZAi>>&1ZmuZC%8j!_uvvdK$-x7PiKZ1-u!v* z&-=x?+`fy&KGk(@*{-7~0||u*29mgPC$(Q6e*XmxMhfO&Z)3xxriu&(YZT#bV*GG{ z?yeq)VBkTBSX3+3jD{~}U z+~19}uONTPJ3&^P2w_F*#9HVYZ+3!*N&z)0Ri1ojzr10h<3ZU&k z0EJ^M($)0-F!GFe4kI|=M^CVd68WRgj&4J2QNS^=yN~{r1N#N#->;I6&Se~1GW8{0 zhn;+UUNwa%mvr7ZQRD|7AVb3jh5**^Rqn>!%T%+(uOkZu;v#z(exQB(xGqSEY%p&F zC3?pwWiIS1a#;{35Uj2mY+G#eqb&!sm68BKyN#(he37*hc{SC$KT6$WiiR8B;QJd) z=_HL0+p1L2N}98@>_>r?nN&CA1WI4~J}aiwK+g|uk3rC)cM{TcNtTFNSlwYkqN_wO z=AtE`Ed*Ma6Pwo}4!f&fq<-%E;h^mJVOaLW@w%BO6&|d1FeWifR7Wv}4o_u z>H#=}aDhH#lSU=8>#z{)c|55Jhhqo*d@)=ZE5ah1?-3&LUhFZ{-L}wZe#_T!bk-KC z_iz!`Of1gqAswKe%N1#Cn1$bb&Z0DzG?&}dxd_oeGHr~EolD2BoxuR@?MrAPLr#dI zb8C@UX~muunmEnnf?$Y%;^{iEILXQ0i$4`&pX)1}aC_KzB;}hfl$P-kHOy)myYtex zvs%kecXfMTAg(R=YN53oRiO)*`>{r5UvYdYB(DQgag3364SK-F*269nyn!~R?RH_x zVapJy-pERIgd+k$@3eDXJ@{D>eivgPyR|hB8A+(_cpl7o1hm3W=d`0FY$s_GIgwa= z{w|kKGVFx0qJi0|6)Zyu zBYwpT(PY65{E6y!mKmSUqF|bMiAK1@QEnJnUI>Qq=K>vqpj($V3zwj-Z=l^ z0^R=-%xq&v^zt=geg{mhvx)MxL#t^#Gt!4vmUXU5lgbi$_ z+w&(uenoAe-w~_zzUCR_6JGN3^@2|`8uMAc{45Gd=c!u+qcSvRBAA^a-zBod4Qp2E zHENihqoYcLkEvDnO;RZIv$$6f#%n7>g|*M&lL1-b%BZ;BaJ;nIKU6PY`wD<#49H05 z!Gv`m=s24sV|3m)YFwLUs$Zj4Nn0(J+K4~vn*2eKNF7V)*hWraHi579qLPdLY?NS2 zcaL0sapaRr3`A{D&GeQ>N;85wXL~bMvi;X`$6q!~(~a)jeJ~fuQh#s53urJfq(>Xd zN{NWctBCzy2257&v|HjrYdxof;o}IHT>&(%U@%N@f@@7CsOpkng~xyze1d0V zv+@gHaUyfx_Rb$cv=yg29ohB_m^xKp3ptUK%*%t z_Ae$*LAmg5PI3b61VoJ(JXKIR#bb!n<&kZmvL=j)4NPNE-b?$wM%)4h4rHjA8 zn^a&M^$UTOnG2%jov-QEkO>Rag(0EOJnHlokqz60ftB@PGyNWRDjeCq{A^gEp+KaI zUt*VI0zP`ziocTcS;c3*C#r5l6@hpr33RHLZ~c1J9vG-g2Tt zPDy9Y%{}brq}Hg$qFq^|G8oc*=S%(}p)f~_j<7FxV`!jmv^l6$U9AKse1LHPRmP*!jJh)N=b&6Q*PWlXK?=xoWx;g|dj#YCdL`h@U6KNAwbapwBbv z&@x}A&gqT!_>s(mtZm!Y)8EfHE>vW84g6fR1Kmoocm!h=^dWgG$2Xr6-XUyx9>#1A zb4wQzk`kLt*HACvFlGK)=nV!qo^}`z-RwsE$#jY;Lx5m_c_dMP<2>Ol=^Mh5BuCR!y2 zDJXQe20^hpu$Hm4~ACZwlKL?ayxc zTxcu1bX=n!YdXVuM$^-ed^&srVgexOV8T;^SF)=}q)2ZM`Qb~EofEK%E14RJX|Z@E z{2^hbI53smA{H6Fy<+ab-@0ixe)VmpFP?S;4=cdVQNszkea^E0M^r$$vOFt$LLVFGR^!9?-QmWbb9g$&EfzzP&2-L}(__HG9 z76Ax?WA_h!vDn!KxmY@d9NTL2ru7bGNqeStif+RDou^>R3kKoXOl9-83n6!~g;N)B z7RwtwDrGs8byJ^cwzRDd^Fn~5lNDV0WBN{UE-{$uE*M zJI9?oNq(p_z!xh2Vjju0Ih-U?X3ZQ02bGX=lw$)4>tlGPIHsZr+-AT|RTyR#3=$vV zIMSs@>#WF|>ybiJ?qY=#DQwG7uVvLF$ONak={d$$>qE4z3nM-k_{s}e(O(_rDB{}fcn0CcCI;N*&@@58tRG-Q=)bc zc}v_9OqJqfDzSH!vo>%E%t0E89yA&HakeF@o$TId^g#{H^5Q|%+#9rM9`3aP+{5Em z)dich{SqBYTaZVjA0l4*hWb%=N>Na@3N|0P^UflD$~r68WUD0c*kcn(S(QKmW3$pt znaL}~ttt!~1q+ZGKH^56`N2qj2@BTK+7Fd6RSvENZn+20JF^3P?R<^9yg51-PzavQ zI_q(E&Z%fDCn#f8aVDa@<^6nJ0_d>JZHDjPm*ITjz!PdgF;0p2N?f{K!dB9K;24{2Ngf`v@61v)`fucY6S_^&~`y zd9zC<6WTYO#g?kY2$JKg#F4Y}S|vo&+b-&(giKwtIDofIGo})rN?}bGEX3K7O!ef_ zDkH=#VpsSJ#Lx;0TL~M_WWUS#5x7d7M+L9y0?TZi&3lWxxh$;VB2hriW+EF^LO zw15fObROM9i_J_*k@)B;)scEslB~L~UlDv644-i@w9uhQ$WZPo@+I1k(%)Ev%}?3! zkW#f<7eUy=LV2y`R8lF#2`E*t6$HBWb>zR4y(#oxUoWBQ`IZ)wM*xhr z+ry6{o3E$nO=G!C3@5zL`3_lJpxk?iI-`AOn#~Zuv>n%+qMJ~+?NEJ}#pqL8@;4CF zrl}hciRo?c6SZ$rsDmec*dp|PTf)-$Pkqzc8D;)I(?6cj=Lv+G4Euv(_R{PgE5bvz z0)^8*GtJYCYelQdMJ|h@wH|1wW_CwKiEG2P*)VsK2SOP$ zuZ9q&7}ifylq{$>?%7G<1>Jk=H?n6t8oy!sl<;-4)$7u#t!U6Hi_aH$VP|*8jY1}S z*H$_`pX#SrUci)GQP^CPBAu3f8J1>nT`*R)0GF!VloPL{J*Saq@m_4~u8=$ycci?I zoJ2J3XFV@h4Yj|OTB#gG(R}4c!JpGyMvLp0)INr({w8MGW|#6?ew!0ky_C~iyOtjq z70roS9q3&YU$m2&jqBA3X>D4n8RfjJiNdCk)S03x!4x01es5$m3*-u9BC^86^*9y zCcsk^S}!yQ8`F~@7x3k9sF-13UNH0Hupp0zRi@rqlJC1UZb7Mb0@+y<@?xxPMD!_u z8Xc!z-$0=LceIF4S_f=WeUV$K@k&Yib)S<~kZ_Xi!l>WGepUKu_t{fWvtD=VYtPmT zW97B2WYbasvDkIqKp|0#i@Uk7eig{q=m<{wHbZ2%_20BAqPE(t@n0dSC%{oVE{|z9 z*>*>cQ%q!_#3ng)=1XQ=k(7lKrNzdlsp_SQku$RixgwNl!5a232FA0!4Jk3=oHiy3 zG!x2CX2DQM`*LQ1lS07$LEI6X;`2cirkE=zjLZ!y%X+rs8l!i?z#0kMBn6)CE64Y# zShu-8U|!3ptnn~f7|b^#-CUNVU=((_jYyKOE2lg1D-S#n@D2&8PEQM7R3ym>(1ek+ zCt%CD-9*+=ZCWI~+PP2=uQS{{Wo)JFrfW4Pi3#(_Y?8AzO6$CKxbI$BSs{~HPa!F< z^Q&q~|M`}=AojhE>5aUq+J#4rg^)Q9Nu7M2-|<}Jhao}cH?U2x5jK2+^~)GBuq-9C zj<2@F+@PD&cp!4WxJ^}!H`a?^^P!GC^t!b&RNl*PfENfA#=Jk5#O2W_4pZ!Er*V@< z&aR9wn1%S~J)|ZGA#p!|A0~5b*!SYWpi}CBS9JLg-c2-6U%^esI^N$yfIO8d+SFbC zp|%A1u&j`3X_dr->3~9yb{DUC(N-bu}1F0^d!=6f(G?%)- z12si2RlcFiW;g6`vJtYY0f)0^#LsE_-MV0_dvKE(qv0!4V6Uk4sx_fURZx3Jl$qW! zzt55r>DPzw?1HhZnV3qNF@ua7rZzgib3?lshN@D4wwXfm>r%8ZG(?eVuzjz$Q#n>>h(z$GGUtRa`Z0~jbjrWiH4P^xe?%@n{ zoy|Cy;v~)z#(pTg8e9@=2M2A#)VvQOH8>a;$k=~w!@mT~hj97_N5N=r>0)VaXYXY8 zM~e-Lnt#JlxT?z8gIeqZ4Wu=ZMj>*>>zcjm+4@gnK`_+D^j=8RPV_8=k|`p6O8&lK z-y}>)y`SX(L)l{4?3)7AMAH>Tc!W*3cV9qkqxs09*&Ii`5%9X6L2Bc$FY7f1Z%n%j zpX3S(7OD1W((V`%FaqGY*WL-sG&#aoa5T<2yk9yS>4_Nh%VE| zHoYA2=ntNnAVAJYsy`#m3MH9We$`ul>=^khtBc}-23i}z2*s87Apc_LnF)k~_e~rvjfi6uIL9+&N@Pd{V#ZoAhrY{7aR?c^ zooyXblQFO3IB9D<@Q{_IJ_<=trc*(Y;W-+H_Ve|EiY6;+54j z&PG+PF{wX!F;#gF+}qnSoTf+{!4F3cbnN;eZje8XZ9e%4zKQoWGVtg0o0+U-qXL+_ zSzAu^IsB#N@U9ilInS$ag!DR$#I2k%{Fr`kXz=DHl)519wvT5j$T@A^-aS(bV)!In zXy!VT#wREArAU_vgRdboGW%BZMBFOupSu`z ziOHhkADs&M1B&=7oB*uAKCQKS@frjb|N(qE4T+5qQWXUY0Yfr;0RSQ*zs zt%N=uyBpWA(r3#Rcq$@MS^V@8o_nie4fjsXQ!usg8?$W|QITNp?-y@dRWji{9`w0V`=0fS zkQzmQ9|1l~4a+deJuI&*DMe5F+iJB8A5zgC@IaV~A0V9P!PB+0uDd_RYXe z#!v)@lgR*1omPhn>!Gel``i%SWM|!0ts-v!!&M@oJ%)w)45S6_`@f)~I;8noJ~y)M@YdqsG3A2af%<~rkZZ4w<(_zPZ# z?8Xwy64Pm*musHi06s$b00YB$+~i+Gj**Rx z0q6sxsgaY*AJP8bY`}=BoHYRpTI-EQanVfBM4?6op|mjBxL^jLNI7Dji08SsWqh5y z?5Y2WMZt_;kNo6!WfB`tes=rSmiS@qo?j@iu=& z`faap@L>~K0XR~n@@$2O$j^!p?6>MTRbExD6r3A?8yKtBbA1;bhc5&X46Xpz=#c9c z%K^{1FH{OV9M$oP#*uVRM19^e8`Al+L=DOR#oCd%2oZDc-W9td;J)28W{%CAFXmnOcU7xr#qYYA5B zAj?Malt6=b?hW;EuYkt?sntoK#HDAM!H_>P#ysyuk$$w6nA|cTUNQ97VwXQ z)$6c5VtZ?-QO`FQ7LarkNM;FXBIUtrFtG=TTz;tQlcb{O8-E#!Gz#wtX04t_PJpI6 znn?(!)rmi(A7OSr-D=qvhR`sr(h-T8y+l*|`Y}G>rFkM5F?W*^CrVTEbZo?=ep)z+ zx|7<5cx%pf$cyi6wf%u9%K5nc9F5|Q$RmbfcGKii1wVPjYonPB!xgc3$u36u^slSG zPh@drI4(C^E~ZpVvruWRmk8BN=HpnnV&&m=)!0cD4qEQ_#cdKQ2=&FOqkLjLEq91h z0g$<%u&=h0V*r(?T?uDc=ugOO=zESU`7S33TJ@y-bmTHA8(QYHDUT==sk9Z8z3fjq zKayWr)kIHl_>NY4m~O?feSZOV9WGWF7c-^mJmZAtv3O4)Q=9g3Pq^bAUWRzk8lTmu z>^>!PTPFonkdd_~xVu zwGOe!X9)OVMDJ9I6m{NbBizb`>cdSR>#LIaRG9oNRJ?mS#MQ;GF!wzRy|sZT3s{I( zgJ6uf;35GM^NI=2?Zt%k)Mj5==)4EC8C0nM5Y9?eZ#k2i(TTvZ+e@ASV0L_JsOA~D zpCS=d>#RgAH)=2tJ{fDSM`NZCoNuvlcbAYgC6!||Oohq{N_n2_92%oB8uYxsV}?tl zP4jhQ0wj;f7g*c~_E<(tZ%u2v%`B-}c}H{)ehJL)m1%?cv-ljRn`{-_>Pf47_1(xa zW!4FF5kFn(YMc&u64W(9)v3sf>KjXv{k!iZ15h-J-!RFJiwcv~29FZlt%1k0zgaJ> zm^;J)Wxb#`46zIkCI^}Q&kcE+%^e?xcDRol0?Ot_cIIX_2EQ`W9}y9h)ZhPoa<9Z5AO9OYffRcipOHs)!^RvzaS6^2uS+lL@H@b}S-G7#5tldL#v zZT=@<)Os&1y!CdHaAJp?x`8diILY4RiPp-3>I|s|31*_(gSZ;1+hp4`rI|J83z^S| zz;=4mu4R9eKMZC}>r=Etz*rNL<^n$>I8m|=Dg6k_vqGWp1*6K;8h*!wAluH9gLfAFQr#LEi8cqib$3=WL1XEv@Cp^d`#ox4UfJ)x$I=sA4QjAW_SV|xcpTo0#V1%bXxrs|XX9O({y^f&#{?~bK>g?FU z7_sKVl+VMKaZQTk+WpK^~ zLCVe)mN_e4c-*qFh*dR@czYak59SPBCz4EkSxGaFm8pD+TLQzSCMh_12qlmv2t7T| zl^uuYM{-_W5*^DPa91We}jG z8T-ccATKHiod`F-Vv4$0n;MT~FkF{8{;TlCn(@d;`j9j)9Vfuy^1iYef0v*k=$(H* zMh(g%E%kHg#3<9~modkv0c`#dJ%y0;VwR#rPyt|o#N!6*AF%o% zJ1%49=7Cw{S_x_z+xP+pYLmu@?rTYSo!maom$ zLJQ|e7hmH-O--0Ojyw!ya|TVleb6qv6MH#_NiA%;Kh%RSt|{yKF-kQ^q8o_}lQa3? zbA*=NYI$js4v(`c>3(%Z?UyWa13ON>TePK|rnB<+YGsOb^DRApEW!KoW>H_pmnaq5 zwJwL(sa)kT>d7UjY_k)l|tS;mD z1bwQ=lcAy6Ju>9yq?;Ugmb z!v)$ZqhKsxH)X^Q@=7^%YVPM{obSn%=%U6f+U>PoT(EY)n&+hTOMJbbfC`l0Loy)! z(MDq`c3W2QS@Pc2d-IBP6Spy|@uwTSvzR2Vd?Y##i;gj>?nbt}I;riv?y3V-pB!tN znzL5*ZOY=?sTSAxP%wNKalRf`drgHE#dk2)Tsh)BHZw&Iw;4n?ULLq@z5+e57`x^| zpPO~p%G^&NOy3JBlaSJ=6@^Jgb)>DgcDzG!TwO5jzMdhHAM=eqa%1L^Z-0iHn>ex@ z&0!fdl*jAZmFF?UZ_3h+xffK@;3YS4AUR27)&R>JW*1t_49>z>4H>!u(HNX-KN;Ij z9Ytg&fFX|T58G?x7a*xmAc8+g!XEfF$-DRJ)vy3H?be7vEVcTqxXRLkD!n~nixkuu znz3tp73>n@Tc+RxMRvaohG`--pK*bKs}a{d*rsOP_8R&&G-(AXlI3q+LDm3;QTIm3 z`tB)=y{#2>4-=sh_1Br+o9}XZl2i9X++oKx6=d9B5WZP7QMJ1CmRy>(m<><=2~*Vh z*$M?{xQR*!z0GR;ZE^EhrZ0jwyuswANhfm=mGZ81Yukx}Xf3r+ z$f8l2u>&R_&8Q)+@E1GfcI3{mvFnyYiGiZB z8ij7H>$DNEzP`(*u#y>|Y0=<@k1lNE&~sgU(Drk%#+C>)nY^@4cd(qvU7jx`<%x?1 z;O@uw2!$!rW!+%E%J;_R*%rkwk=J+9ziNQDG%9u_8onBj$q04y>vI=j!!kx+o@mIj z-Tg(=$Iuw-;lYA|fs(AE3^)WPF z5LoxP&VNCf{T2NwZ}aqZ2LwKUh@8J|>_4Q){tErHB?S>bj{*oxC-@!uzo&uzy2#Tu z3)I~{3Lp@V$x=+^ty+BWM38-Ov6hL6R^z=UytgZq8 literal 0 HcmV?d00001 diff --git a/archived_packages/poll/.gitignore b/archived_packages/poll/.gitignore deleted file mode 100644 index b4d6e266..00000000 --- a/archived_packages/poll/.gitignore +++ /dev/null @@ -1,64 +0,0 @@ -# Created by .ignore support plugin (hsz.mobi) -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/dictionaries - -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.xml -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# CMake -cmake-build-debug/ - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties -### Dart template -# See https://www.dartlang.org/tools/private-files.html - -# Files and directories created by pub -.packages -.pub/ -build/ -# If you're building an application, you may want to check-in your pubspec.lock -pubspec.lock - -# Directory created by dartdoc -# If you don't generate documentation locally you can remove this line. -doc/api/ diff --git a/archived_packages/poll/.travis.yml b/archived_packages/poll/.travis.yml deleted file mode 100644 index de2210c9..00000000 --- a/archived_packages/poll/.travis.yml +++ /dev/null @@ -1 +0,0 @@ -language: dart \ No newline at end of file diff --git a/archived_packages/poll/AUTHORS.md b/archived_packages/poll/AUTHORS.md deleted file mode 100644 index ac95ab58..00000000 --- a/archived_packages/poll/AUTHORS.md +++ /dev/null @@ -1,12 +0,0 @@ -Primary Authors -=============== - -* __[Thomas Hii](dukefirehawk.apps@gmail.com)__ - - Thomas is the current maintainer of the code base. He has refactored and migrated the - code base to support NNBD. - -* __[Tobe O](thosakwe@gmail.com)__ - - Tobe has written much of the original code prior to NNBD migration. He has moved on and - is no longer involved with the project. diff --git a/archived_packages/poll/CHANGELOG.md b/archived_packages/poll/CHANGELOG.md deleted file mode 100644 index d531223a..00000000 --- a/archived_packages/poll/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Change Log - -## 2.0.0 - -* Migrated to support Dart >= 2.12 NNBD - -## 1.0.0 - -* Created package + tests diff --git a/archived_packages/poll/LICENSE b/archived_packages/poll/LICENSE deleted file mode 100644 index df5e0635..00000000 --- a/archived_packages/poll/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2021, dukefirehawk.com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/archived_packages/poll/README.md b/archived_packages/poll/README.md deleted file mode 100644 index de25152b..00000000 --- a/archived_packages/poll/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# poll -[![Pub](https://img.shields.io/pub/v/angel_poll.svg)](https://pub.dartlang.org/packages/angel_poll) -[![build status](https://travis-ci.org/angel-dart/poll.svg?branch=master)](https://travis-ci.org/angel-dart/poll) - -`package:angel_client` support for "realtime" interactions with Angel via long polling. - -Angel supports [WebSockets](https://github.com/angel-dart/websocket) on the server and client, which -makes it very straightforward to implement realtime collections. However, not every user's browser -supports WebSockets. In such a case, applications might *gracefully degrade* to long-polling -the server for changes. - -A `PollingService` wraps a client-side `Service` (typically a REST-based one), and calls its -`index` method at a regular interval. After indexing, the `PollingService` performs a diff -and identifies whether items have been created, modified, or removed. The updates are sent out -through `onCreated`, `onModified`, etc., effectively managing a real-time collection of data. - -A common use-case would be passing this service to `ServiceList`, a class that manages the state -of a collection managed in real-time. - -```dart -import 'package:angel_client/io.dart'; -import 'package:angel_poll/angel_poll.dart'; - -main() { - var app = new Rest('http://localhost:3000'); - - var todos = new ServiceList( - new PollingService( - // Typically, you'll pass a REST-based service instance here. - app.service('api/todos'), - - // `index` called every 5 seconds - const Duration(seconds: 5), - ), - ); - - todos.onChange.listen((_) { - // Something happened here. - // Maybe an item was created, modified, etc. - }); -} -``` \ No newline at end of file diff --git a/archived_packages/poll/analysis_options.yaml b/archived_packages/poll/analysis_options.yaml deleted file mode 100644 index ea2c9e94..00000000 --- a/archived_packages/poll/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:lints/recommended.yaml \ No newline at end of file diff --git a/archived_packages/poll/example/main.dart b/archived_packages/poll/example/main.dart deleted file mode 100644 index 4b8e2739..00000000 --- a/archived_packages/poll/example/main.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:angel_client/io.dart'; -import 'package:angel_poll/angel_poll.dart'; - -void main() { - var app = Rest('http://localhost:3000'); - - var todos = ServiceList( - PollingService( - // Typically, you'll pass a REST-based service instance here. - app.service('api/todos'), - - // `index` called every 5 seconds - const Duration(seconds: 5), - ), - ); - - todos.onChange.listen((_) { - // Something happened here. - // Maybe an item was created, modified, etc. - }); -} diff --git a/archived_packages/poll/lib/angel_poll.dart b/archived_packages/poll/lib/angel_poll.dart deleted file mode 100644 index 7c245258..00000000 --- a/archived_packages/poll/lib/angel_poll.dart +++ /dev/null @@ -1,265 +0,0 @@ -import 'dart:async'; -import 'package:collection/collection.dart'; -import 'package:angel_client/angel_client.dart'; - -/// A [Service] that facilitates real-time updates via the long polling of an [inner] service. -/// -/// Works well with [ServiceList]. -class PollingService extends Service { - /// The underlying [Service] that does the actual communication with the server. - final Service inner; - - /// Perform computations after polling to discern whether new items were created. - final bool checkForCreated; - - /// Perform computations after polling to discern whether items were modified. - final bool checkForModified; - - /// Perform computations after polling to discern whether items were removed. - final bool checkForRemoved; - - /// An [EqualityBy] used to compare the ID's of two items. - /// - /// Defaults to comparing the [idField] of two `Map` instances. - final EqualityBy compareId; - - /// An [Equality] used to discern whether two items, with the same [idField], are the same item. - /// - /// Defaults to [MapEquality], which deep-compares `Map` instances. - final Equality compareItems; - - /// A [String] used as an index through which to compare `Map` instances. - /// - /// Defaults to `id`. - final String idField; - - /// If `true` (default: `false`), then `index` events will be handled as a [Map] containing a `data` field. - /// - /// See https://github.com/angel-dart/paginate. - final bool asPaginated; - - final List _items = []; - final List _subs = []; - - final StreamController> _onIndexed = StreamController(), - _onRead = StreamController(), - _onCreated = StreamController(), - _onModified = StreamController(), - _onUpdated = StreamController(), - _onRemoved = StreamController(); - - late Timer _timer; - - @override - Angel get app => inner.app; - - @override - Stream> get onIndexed => _onIndexed.stream; - - @override - Stream get onRead => _onRead.stream; - - @override - Stream get onCreated => _onCreated.stream; - - @override - Stream get onModified => _onModified.stream; - - @override - Stream get onUpdated => _onUpdated.stream; - - @override - Stream get onRemoved => _onRemoved.stream; - - PollingService(this.inner, Duration interval, - {this.checkForCreated = true, - this.checkForModified = true, - this.checkForRemoved = true, - this.idField = 'id', - this.asPaginated = false, - EqualityBy? compareId, - this.compareItems = const MapEquality()}) - : compareId = compareId ?? EqualityBy((map) => map[idField]) { - _timer = Timer.periodic(interval, (_) { - index().catchError((error) { - _onIndexed.addError(error as Object); - }); - }); - - var streams = { - inner.onRead: _onRead, - inner.onCreated: _onCreated, - inner.onModified: _onModified, - inner.onUpdated: _onUpdated, - inner.onRemoved: _onRemoved, - }; - - streams.forEach((stream, ctrl) { - _subs.add(stream.listen(ctrl.add, onError: ctrl.addError)); - }); - - _subs.add( - inner.onIndexed.listen( - _handleIndexed, - onError: _onIndexed.addError, - ), - ); - } - - @override - Future close() async { - _timer.cancel(); - for (var s in _subs) { - s.cancel(); - } - await _onIndexed.close(); - await _onRead.close(); - await _onCreated.close(); - await _onModified.close(); - await _onUpdated.close(); - await _onRemoved.close(); - } - - // TODO: To revisit this logic - @override - Future> index([Map? params]) { - return inner.index().then((data) { - //return asPaginated == true ? data['data'] : data; - //return asPaginated == true ? data[0] : data; - return data; - }); - } - -/* - @override - Future index([Map params]) { - } -*/ - @override - Future remove(id, [Map? params]) { - return inner.remove(id, params).then((result) { - _items.remove(result); - return result; - }).catchError(_onRemoved.addError); - } - - dynamic _handleUpdate(result) { - var index = -1; - - for (var i = 0; i < _items.length; i++) { - if (compareId.equals(_items[i], result)) { - index = i; - break; - } - } - - if (index > -1) { - _items[index] = result; - } - - return result; - } - - @override - Future update(id, data, [Map? params]) { - return inner - .update(id, data, params) - .then(_handleUpdate) - .catchError(_onUpdated.addError); - } - - @override - Future modify(id, data, [Map? params]) { - return inner - .modify(id, data, params) - .then(_handleUpdate) - .catchError(_onModified.addError); - } - - @override - Future create(data, [Map? params]) { - return inner.create(data, params).then((result) { - _items.add(result); - return result; - }).catchError(_onCreated.addError); - } - - @override - Future read(id, [Map? params]) { - return inner.read(id, params); - } - - void _handleIndexed(List data) { - //var items = asPaginated == true ? data['data'] : data; - var items = data; - var changesComputed = false; - - if (checkForCreated != false) { - var newItems = {}; - - for (var i = 0; i < items.length; i++) { - var item = items[i]; - - if (!_items.any((i) => compareId.equals(i, item))) { - newItems[i] = item; - } - } - - newItems.forEach((index, item) { - _items.insert(index, item); - _onCreated.add([item]); - }); - - changesComputed = newItems.isNotEmpty; - } - - if (checkForRemoved != false) { - var removedItems = {}; - - for (var i = 0; i < _items.length; i++) { - var item = _items[i]; - - if (!items.any((i) => compareId.equals(i, item))) { - removedItems[i] = item; - } - } - - removedItems.forEach((index, item) { - _items.removeAt(index); - _onRemoved.add([item]); - }); - - changesComputed = changesComputed || removedItems.isNotEmpty; - } - - if (checkForModified != false) { - var modifiedItems = {}; - - for (var item in items) { - for (var i = 0; i < _items.length; i++) { - var localItem = _items[i]; - - if (compareId.equals(item, localItem)) { - if (!compareItems.equals(item, localItem)) { - modifiedItems[i] = item; - } - break; - } - } - } - - modifiedItems.forEach((index, item) { - _onModified.add([_items[index] = item]); - }); - - changesComputed = changesComputed || modifiedItems.isNotEmpty; - } - - if (!changesComputed) { - _items - ..clear() - ..add(items); - _onIndexed.add([items]); - } - } -} diff --git a/archived_packages/poll/poll.iml b/archived_packages/poll/poll.iml deleted file mode 100644 index 5a5ced28..00000000 --- a/archived_packages/poll/poll.iml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/archived_packages/poll/pubspec.yaml b/archived_packages/poll/pubspec.yaml deleted file mode 100644 index 683825f2..00000000 --- a/archived_packages/poll/pubspec.yaml +++ /dev/null @@ -1,23 +0,0 @@ -name: angel_poll -version: 2.0.0 -description: package:angel_client support for "realtime" interactions with Angel via long polling. -publish_to: none -environment: - sdk: '>=2.12.0 <3.0.0' -homepage: https://github.com/angel-dart/poll -dependencies: - angel_client: # ^1.0.0 - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/client - async: ^2.7.0 - collection: ^1.15.0 -dev_dependencies: - angel_test: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/test - test: ^1.17.8 - lints: ^1.0.0 \ No newline at end of file diff --git a/archived_packages/poll/test/all_test.dart b/archived_packages/poll/test/all_test.dart deleted file mode 100644 index f709af1e..00000000 --- a/archived_packages/poll/test/all_test.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'package:angel_framework/angel_framework.dart' as srv; -import 'package:angel_container/mirrors.dart'; -import 'package:angel_poll/angel_poll.dart'; -import 'package:angel_test/angel_test.dart'; -import 'package:async/async.dart'; -import 'package:logging/logging.dart'; -import 'package:test/test.dart'; - -void main() { - late srv.Service store; - late TestClient client; - late PollingService pollingService; - - var created; - late StreamQueue onCreated; - late StreamQueue onModified; - late StreamQueue onRemoved; - - setUp(() async { - var app = srv.Angel(reflector: MirrorsReflector()); - app.logger = Logger.detached('angel_poll') - ..onRecord.listen((rec) { - print(rec); - if (rec.error != null) { - print(rec.error); - print(rec.stackTrace); - } - }); - - store = app.use( - '/api/todos', - srv.MapService( - autoIdAndDateFields: false, - ), - ); - - client = await connectTo(app); - - pollingService = PollingService( - client.service('api/todos'), - const Duration(milliseconds: 100), - ); - - onCreated = StreamQueue(pollingService.onCreated); - onModified = StreamQueue(pollingService.onModified); - onRemoved = StreamQueue(pollingService.onRemoved); - - created = await store.create({ - 'id': '0', - 'text': 'Clean your room', - 'completed': false, - }); - }); - - tearDown(() { - onCreated.cancel(); - onModified.cancel(); - onRemoved.cancel(); - client.close(); - }); - - group('events', () { - test('fires indexed', () async { - var indexed = await pollingService.index(); - print(indexed); - expect(await pollingService.onIndexed.first, indexed); - }); - - test('fires created', () async { - var result = await onCreated.next; - print(result); - expect(created, result); - }); - - test('fires modified', () async { - await pollingService.index(); - await store.modify('0', { - 'text': 'go to school', - }); - - var result = await onModified.next; - print(result); - expect(result, Map.from({'': created})..['text'] = 'go to school'); - }); - - test('manual modify', () async { - await pollingService.index(); - await pollingService.modify('0', { - 'text': 'eat', - }); - - var result = await onModified.next; - print(result); - expect(result, Map.from({'': created})..['text'] = 'eat'); - }); - - test('fires removed', () async { - await pollingService.index(); - var removed = await store.remove('0'); - var result = await onRemoved.next; - print(result); - expect(result, removed); - }); - }); -} diff --git a/archived_packages/relations.zip b/archived_packages/relations.zip new file mode 100644 index 0000000000000000000000000000000000000000..cb9c59e60259746f61b5438fd6b28b7981d17a72 GIT binary patch literal 17290 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 2.12 NNBD - -## 1.0.0 - -* Initial checkin diff --git a/archived_packages/relations/LICENSE b/archived_packages/relations/LICENSE deleted file mode 100644 index df5e0635..00000000 --- a/archived_packages/relations/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2021, dukefirehawk.com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/archived_packages/relations/README.md b/archived_packages/relations/README.md deleted file mode 100644 index ea8a4e74..00000000 --- a/archived_packages/relations/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# relations -[![version 1.0.1](https://img.shields.io/badge/pub-v1.0.1-brightgreen.svg)](https://pub.dartlang.org/packages/angel_relations) -[![build status](https://travis-ci.org/angel-dart/relations.svg)](https://travis-ci.org/angel-dart/relations) - -Database-agnostic relations between Angel services. - -```dart -// Authors owning one book -app.service('authors').afterAll( - relations.hasOne('books', as: 'book', foreignKey: 'authorId')); - -// Or multiple -app.service('authors').afterAll( - relations.hasMany('books', foreignKey: 'authorId')); - -// Or, books belonging to authors -app.service('books').afterAll(relations.belongsTo('authors')); -``` - -Supports: -* `hasOne` -* `hasMany` -* `hasManyThrough` -* `belongsTo` -* `belongsToMany` \ No newline at end of file diff --git a/archived_packages/relations/analysis_options.yaml b/archived_packages/relations/analysis_options.yaml deleted file mode 100644 index ea2c9e94..00000000 --- a/archived_packages/relations/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:lints/recommended.yaml \ No newline at end of file diff --git a/archived_packages/relations/lib/angel_relations.dart b/archived_packages/relations/lib/angel_relations.dart deleted file mode 100644 index 5f2b6a7e..00000000 --- a/archived_packages/relations/lib/angel_relations.dart +++ /dev/null @@ -1,9 +0,0 @@ -/// Hooks to populate data returned from services, in a fashion -/// reminiscent of a relational database. -library angel_relations; - -export 'src/belongs_to_many.dart'; -export 'src/belongs_to.dart'; -export 'src/has_many.dart'; -export 'src/has_many_through.dart'; -export 'src/has_one.dart'; \ No newline at end of file diff --git a/archived_packages/relations/lib/src/belongs_to.dart b/archived_packages/relations/lib/src/belongs_to.dart deleted file mode 100644 index bf05f84c..00000000 --- a/archived_packages/relations/lib/src/belongs_to.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'dart:async'; -import 'dart:mirrors'; -import 'package:angel_framework/angel_framework.dart'; -import 'plural.dart' as pluralize; -import 'no_service.dart'; - -/// Represents a relationship in which the current [service] "belongs to" -/// a single member of the service at [servicePath]. Use [as] to set the name -/// on the target object. -/// -/// Defaults: -/// * [localKey]: `userId` -/// * [foreignKey]: `id` -HookedServiceEventListener belongsTo(Pattern servicePath, - {String? as, - String? foreignKey, - String? localKey, - Function(dynamic obj)? getForeignKey, - Function(dynamic foreign, dynamic obj)? assignForeignObject}) { - var localId = localKey; - var foreignName = - as?.isNotEmpty == true ? as! : pluralize.singular(servicePath.toString()); - - localId ??= foreignName + 'Id'; - - return (HookedServiceEvent e) async { - var ref = e.getService(servicePath); - if (ref == null) throw noService(servicePath); - - dynamic _getForeignKey(obj) { - if (getForeignKey != null) { - return getForeignKey(obj); - } else if (obj is Map) { - return obj[localId]; - } else if (localId == null || localId == 'userId') { - return obj.userId; - } else { - return reflect(obj).getField(Symbol(localId)).reflectee; - } - } - - dynamic _assignForeignObject(foreign, obj) { - if (assignForeignObject != null) { - return assignForeignObject(foreign, obj); - } else if (obj is Map) { - obj[foreignName] = foreign; - } else { - reflect(obj).setField(Symbol(foreignName), foreign); - } - } - - Future _normalize(obj) async { - if (obj != null) { - var id = await _getForeignKey(obj); - var indexed = await ref.index({ - 'query': {foreignKey ?? 'id': id} - }); - - if (indexed is! List || indexed.isNotEmpty != true) { - await _assignForeignObject(null, obj); - } else { - var child = indexed.first; - await _assignForeignObject(child, obj); - } - } - } - - if (e.result is Iterable) { - //await Future.wait(e.result.map(_normalize)); - await e.result.map(_normalize); - } else { - await _normalize(e.result); - } - }; -} diff --git a/archived_packages/relations/lib/src/belongs_to_many.dart b/archived_packages/relations/lib/src/belongs_to_many.dart deleted file mode 100644 index 7ee4d2f9..00000000 --- a/archived_packages/relations/lib/src/belongs_to_many.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'dart:async'; -import 'dart:mirrors'; -import 'package:angel_framework/angel_framework.dart'; -import 'plural.dart' as pluralize; -import 'no_service.dart'; - -/// Represents a relationship in which the current [service] "belongs to" -/// multiple members of the service at [servicePath]. Use [as] to set the name -/// on the target object. -/// -/// Defaults: -/// * [foreignKey]: `userId` -/// * [localKey]: `id` -HookedServiceEventListener belongsToMany(Pattern servicePath, - {String? as, - String? foreignKey, - String? localKey, - Function(dynamic obj)? getForeignKey, - Function(dynamic foreign, dynamic obj)? assignForeignObject}) { - var localId = localKey; - var foreignName = - as?.isNotEmpty == true ? as! : pluralize.plural(servicePath.toString()); - - localId ??= foreignName + 'Id'; - - return (HookedServiceEvent e) async { - var ref = e.getService(servicePath); - if (ref == null) throw noService(servicePath); - - dynamic _getForeignKey(obj) { - if (getForeignKey != null) { - return getForeignKey(obj); - } else if (obj is Map) { - return obj[localId]; - } else if (localId == null || localId == 'userId') { - return obj.userId; - } else { - return reflect(obj).getField(Symbol(localId)).reflectee; - } - } - - dynamic _assignForeignObject(foreign, obj) { - if (assignForeignObject != null) { - return assignForeignObject(foreign as List?, obj); - } else if (obj is Map) { - obj[foreignName] = foreign; - } else { - reflect(obj).setField(Symbol(foreignName), foreign); - } - } - - Future _normalize(obj) async { - if (obj != null) { - var id = await _getForeignKey(obj); - var indexed = await ref.index({ - 'query': {foreignKey ?? 'id': id} - }); - - if (indexed is! List || indexed.isNotEmpty != true) { - await _assignForeignObject(null, obj); - } else { - var child = indexed is Iterable ? indexed.toList() : [indexed]; - await _assignForeignObject(child, obj); - } - } - } - - if (e.result is Iterable) { - //await Future.wait(e.result.map(_normalize)); - await e.result.map(_normalize); - } else { - await _normalize(e.result); - } - }; -} diff --git a/archived_packages/relations/lib/src/has_many.dart b/archived_packages/relations/lib/src/has_many.dart deleted file mode 100644 index cca4e9e6..00000000 --- a/archived_packages/relations/lib/src/has_many.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'dart:async'; -import 'dart:mirrors'; -import 'package:angel_framework/angel_framework.dart'; -import 'plural.dart' as pluralize; -import 'no_service.dart'; - -/// Represents a relationship in which the current [service] "owns" -/// members of the service at [servicePath]. Use [as] to set the name -/// on the target object. -/// -/// Defaults: -/// * [foreignKey]: `userId` -/// * [localKey]: `id` -HookedServiceEventListener hasMany(Pattern servicePath, - {String? as, - String? foreignKey, - String? localKey, - Function(dynamic obj)? getLocalKey, - Function(dynamic foreign, dynamic obj)? assignForeignObjects}) { - return (HookedServiceEvent e) async { - var ref = e.getService(servicePath); - var foreignName = - as?.isNotEmpty == true ? as : pluralize.plural(servicePath.toString()); - if (ref == null) throw noService(servicePath); - - dynamic _getLocalKey(obj) { - if (getLocalKey != null) { - return getLocalKey(obj); - } else if (obj is Map) { - return obj[localKey ?? 'id']; - } else if (localKey == null || localKey == 'id') { - return obj.id; - } else { - return reflect(obj).getField(Symbol(localKey)).reflectee; - } - } - - dynamic _assignForeignObjects(foreign, obj) { - if (assignForeignObjects != null) { - return assignForeignObjects(foreign, obj); - } else if (obj is Map) { - obj[foreignName] = foreign; - } else { - reflect(obj).setField(Symbol(foreignName!), foreign); - } - } - - Future _normalize(obj) async { - if (obj != null) { - var id = await _getLocalKey(obj); - var indexed = await ref.index({ - 'query': {foreignKey ?? 'userId': id} - }); - - if (indexed is! List || indexed.isNotEmpty != true) { - await _assignForeignObjects([], obj); - } else { - await _assignForeignObjects(indexed, obj); - } - } - } - - if (e.result is Iterable) { - //await Future.wait(e.result.map(_normalize)); - await e.result.map(_normalize); - } else { - await _normalize(e.result); - } - }; -} diff --git a/archived_packages/relations/lib/src/has_many_through.dart b/archived_packages/relations/lib/src/has_many_through.dart deleted file mode 100644 index 23a6ed1d..00000000 --- a/archived_packages/relations/lib/src/has_many_through.dart +++ /dev/null @@ -1,97 +0,0 @@ -import 'dart:async'; -import 'dart:mirrors'; -import 'package:angel_framework/angel_framework.dart'; -import 'plural.dart' as pluralize; -import 'no_service.dart'; - -HookedServiceEventListener hasManyThrough(String servicePath, String pivotPath, - {String? as, - String? localKey, - String? pivotKey, - String? foreignKey, - Function(dynamic obj)? getLocalKey, - Function(dynamic obj)? getPivotKey, - Function(dynamic obj)? getForeignKey, - Function(dynamic foreign, dynamic obj)? assignForeignObjects}) { - var foreignName = - as?.isNotEmpty == true ? as : pluralize.plural(servicePath.toString()); - - return (HookedServiceEvent e) async { - var pivotService = e.getService(pivotPath); - var foreignService = e.getService(servicePath); - - if (pivotService == null) { - throw noService(pivotPath); - } else if (foreignService == null) throw noService(servicePath); - - dynamic _assignForeignObjects(foreign, obj) { - if (assignForeignObjects != null) { - return assignForeignObjects(foreign, obj); - } else if (obj is Map) { - obj[foreignName] = foreign; - } else { - reflect(obj).setField(Symbol(foreignName!), foreign); - } - } - - dynamic _getLocalKey(obj) { - if (getLocalKey != null) { - return getLocalKey(obj); - } else if (obj is Map) { - return obj[localKey ?? 'id']; - } else if (localKey == null || localKey == 'id') { - return obj.id; - } else { - return reflect(obj).getField(Symbol(localKey)).reflectee; - } - } - - dynamic _getPivotKey(obj) { - if (getPivotKey != null) { - return getPivotKey(obj); - } else if (obj is Map) { - return obj[pivotKey ?? 'id']; - } else if (pivotKey == null || pivotKey == 'id') { - return obj.id; - } else { - return reflect(obj).getField(Symbol(pivotKey)).reflectee; - } - } - - Future _normalize(obj) async { - // First, resolve pivot - var id = await _getLocalKey(obj); - var indexed = await pivotService.index({ - 'query': {pivotKey ?? 'userId': id} - }); - - if (indexed is! List || indexed.isNotEmpty != true) { - await _assignForeignObjects([], obj); - } else { - // Now, resolve from foreign service - var mapped = await Future.wait(indexed.map((pivot) async { - var id = await _getPivotKey(obj); - var indexed = await foreignService.index({ - 'query': {foreignKey ?? 'postId': id} - }); - - if (indexed is! List || indexed.isNotEmpty != true) { - await _assignForeignObjects([], pivot); - } else { - await _assignForeignObjects(indexed, pivot); - } - - return pivot; - })); - await _assignForeignObjects(mapped, obj); - } - } - - if (e.result is Iterable) { - //await Future.wait(e.result.map(_normalize)); - await e.result.map(_normalize); - } else { - await _normalize(e.result); - } - }; -} diff --git a/archived_packages/relations/lib/src/has_one.dart b/archived_packages/relations/lib/src/has_one.dart deleted file mode 100644 index d463e823..00000000 --- a/archived_packages/relations/lib/src/has_one.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'dart:async'; -import 'dart:mirrors'; -import 'package:angel_framework/angel_framework.dart'; -import 'plural.dart' as pluralize; -import 'no_service.dart'; - -/// Represents a relationship in which the current [service] "owns" -/// a single member of the service at [servicePath]. Use [as] to set the name -/// on the target object. -/// -/// Defaults: -/// * [foreignKey]: `userId` -/// * [localKey]: `id` -HookedServiceEventListener hasOne(Pattern servicePath, - {String? as, - String? foreignKey, - String? localKey, - Function(dynamic obj)? getLocalKey, - Function(dynamic foreign, dynamic obj)? assignForeignObject}) { - return (HookedServiceEvent e) async { - var ref = e.getService(servicePath); - var foreignName = as?.isNotEmpty == true - ? as - : pluralize.singular(servicePath.toString()); - if (ref == null) throw noService(servicePath); - - dynamic _getLocalKey(obj) { - if (getLocalKey != null) { - return getLocalKey(obj); - } else if (obj is Map) { - return obj[localKey ?? 'id']; - } else if (localKey == null || localKey == 'id') { - return obj.id; - } else { - return reflect(obj).getField(Symbol(localKey)).reflectee; - } - } - - dynamic _assignForeignObject(foreign, obj) { - if (assignForeignObject != null) { - return assignForeignObject(foreign, obj); - } else if (obj is Map) { - obj[foreignName] = foreign; - } else { - reflect(obj).setField(Symbol(foreignName!), foreign); - } - } - - Future _normalize(obj) async { - if (obj != null) { - var id = await _getLocalKey(obj); - - var indexed = await ref.index({ - 'query': {foreignKey ?? 'userId': id} - }); - - if (indexed is! List || indexed.isNotEmpty != true) { - await _assignForeignObject(null, obj); - } else { - var child = indexed.first; - await _assignForeignObject(child, obj); - } - } - } - - if (e.result is Iterable) { - //await Future.wait(e.result.map(_normalize)); - await e.result.map(_normalize); - } else { - await _normalize(e.result); - } - }; -} diff --git a/archived_packages/relations/lib/src/no_service.dart b/archived_packages/relations/lib/src/no_service.dart deleted file mode 100644 index df8eb3c4..00000000 --- a/archived_packages/relations/lib/src/no_service.dart +++ /dev/null @@ -1,2 +0,0 @@ -ArgumentError noService(Pattern path) => - ArgumentError("No service exists at path '$path'."); diff --git a/archived_packages/relations/lib/src/plural.dart b/archived_packages/relations/lib/src/plural.dart deleted file mode 100644 index 2c94bb89..00000000 --- a/archived_packages/relations/lib/src/plural.dart +++ /dev/null @@ -1,23 +0,0 @@ -String singular(String path) { - var str = path.trim().split('/').where((str) => str.isNotEmpty).last; - - if (str.endsWith('ies')) { - return str.substring(0, str.length - 3) + 'y'; - } else if (str.endsWith('s')) { - return str.substring(0, str.length - 1); - } else { - return str; - } -} - -String plural(String path) { - var str = path.trim().split('/').where((str) => str.isNotEmpty).last; - - if (str.endsWith('y')) { - return str.substring(0, str.length - 1) + 'ies'; - } else if (str.endsWith('s')) { - return str; - } else { - return str + 's'; - } -} diff --git a/archived_packages/relations/pubspec.yaml b/archived_packages/relations/pubspec.yaml deleted file mode 100644 index 53f427c4..00000000 --- a/archived_packages/relations/pubspec.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: angel_relations -version: 2.0.0 -description: Database-agnostic relations between Angel services. -homepage: "https://github.com/angel-dart/relations.git" -publish_to: none -environment: - sdk: '>=2.12.0 <3.0.0' -dependencies: - angel_framework: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/framework -dev_dependencies: - angel_seeder: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/seeder - test: ^1.17.8 - lints: ^1.0.0 diff --git a/archived_packages/relations/test/belongs_to_test.dart b/archived_packages/relations/test/belongs_to_test.dart deleted file mode 100644 index 06e2746a..00000000 --- a/archived_packages/relations/test/belongs_to_test.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_seeder/angel_seeder.dart'; -import 'package:test/test.dart'; -import 'common.dart'; - -void main() { - late Angel app; - - setUp(() async { - app = Angel()..use('/authors', MapService())..use('/books', MapService()); - - await app.configure(seed( - 'authors', - SeederConfiguration( - count: 10, - template: {'name': (Faker faker) => faker.person.name()}, - callback: (Map author, seed) { - return seed( - 'books', - SeederConfiguration(delete: false, count: 10, template: { - 'authorId': author['id'], - 'title': (Faker faker) => - 'I love to eat ${faker.food.dish()}' - })); - }))); - - // TODO: Missing method afterAll - //app.findService ('books').afterAll(relations.belongsTo('authors')); - }); - - test('index', () async { - var books = await app.findService('books')!.index(); - print(books); - - expect(books, allOf(isList, isNotEmpty)); - - for (var book in books.whereType()) { - expect(book.keys, contains('author')); - - var author = book['author'] as Map; - expect(author['id'], equals(book['authorId'])); - } - }); - - test('create', () async { - var warAndPeace = await app - .findService('books')! - .create(Book(title: 'War and Peace').toJson()); - - print(warAndPeace); - expect(warAndPeace.keys, contains('author')); - expect(warAndPeace['author'], isNull); - }); -} diff --git a/archived_packages/relations/test/common.dart b/archived_packages/relations/test/common.dart deleted file mode 100644 index b1d002e2..00000000 --- a/archived_packages/relations/test/common.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'dart:convert'; -import 'package:angel_framework/angel_framework.dart'; -//import 'package:json_god/json_god.dart' as god; - -@deprecated -class CustomMapService extends Service { - final List _items = []; - - Iterable tailor(Iterable items, Map? params) { - if (params == null) return items; - - var r = items; - - if (params['query'] is Map) { - var query = params['query'] as Map; - - for (var key in query.keys) { - r = r.where((m) => m[key] == query[key]); - } - } - - return r; - } - - @override - Future> index([params]) async => tailor(_items, params).toList(); - - @override - Future read(id, [Map? params]) async { - return tailor(_items, params).firstWhere((m) => m['id'] == id, - orElse: (() => throw AngelHttpException.notFound())); - } - - @override - Future create(data, [params]) async { - var d = data is Map ? data : (jsonDecode(data as String) as Map?)!; - d['id'] = _items.length.toString(); - _items.add(d); - return d; - } - - @override - Future remove(id, [params]) async { - if (id == null) _items.clear(); - } -} - -class Author { - String? id, name; - - Author({this.id, this.name}); - - Map toJson() => {'id': id, 'name': name}; -} - -class Book { - String? authorId, title; - - Book({this.authorId, this.title}); - - Map toJson() => {'authorId': authorId, 'title': title}; -} - -class Chapter { - String? bookId, title; - int? pageCount; - - Chapter({this.bookId, this.title, this.pageCount}); -} diff --git a/archived_packages/relations/test/has_many_test.dart b/archived_packages/relations/test/has_many_test.dart deleted file mode 100644 index 0796d04e..00000000 --- a/archived_packages/relations/test/has_many_test.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:angel_framework/angel_framework.dart'; -//import 'package:angel_relations/angel_relations.dart' as relations; -import 'package:angel_seeder/angel_seeder.dart'; -import 'package:test/test.dart'; -import 'common.dart'; - -void main() { - late Angel app; - - setUp(() async { - app = Angel()..use('/authors', MapService())..use('/books', MapService()); - - await app.configure(seed( - 'authors', - SeederConfiguration( - count: 10, - template: {'name': (Faker faker) => faker.person.name()}, - callback: (Map author, seed) { - return seed( - 'books', - SeederConfiguration(delete: false, count: 10, template: { - 'authorId': author['id'], - 'title': (Faker faker) => - 'I love to eat ${faker.food.dish()}' - })); - }))); - - // TODO: Missing afterAll method - // app - // .findService('authors') - // .afterAll(relations.hasMany('books', foreignKey: 'authorId')); - }); - - test('index', () async { - var authors = await app.findService('authors')!.index(); - print(authors); - - expect(authors, allOf(isList, isNotEmpty)); - - for (var author in authors.whereType()) { - expect(author.keys, contains('books')); - - var books = author['books'] as List; - - for (var book in books) { - expect(book['authorId'], equals(author['id'])); - } - } - }); - - test('create', () async { - var tolstoy = await app - .findService('authors')! - .create(Author(name: 'Leo Tolstoy').toJson()); - - print(tolstoy); - expect(tolstoy.keys, contains('books')); - expect(tolstoy['books'], allOf(isList, isEmpty)); - }); -} diff --git a/archived_packages/relations/test/has_one_test.dart b/archived_packages/relations/test/has_one_test.dart deleted file mode 100644 index d7535f40..00000000 --- a/archived_packages/relations/test/has_one_test.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_seeder/angel_seeder.dart'; -import 'package:test/test.dart'; -import 'common.dart'; - -void main() { - late Angel app; - - setUp(() async { - app = Angel()..use('/authors', MapService())..use('/books', MapService()); - - await app.configure(seed( - 'authors', - SeederConfiguration( - count: 10, - template: {'name': (Faker faker) => faker.person.name()}, - callback: (Map author, seed) { - return seed( - 'books', - SeederConfiguration(delete: false, count: 10, template: { - 'authorId': author['id'], - 'title': (Faker faker) => - 'I love to eat ${faker.food.dish()}' - })); - }))); - - // TODO: Missing afterAll method - // app.findService('authors').afterAll( - // relations.hasOne('books', as: 'book', foreignKey: 'authorId')); - }); - - test('index', () async { - var authors = await app.findService('authors')!.index(); - print(authors); - - expect(authors, allOf(isList, isNotEmpty)); - - for (var author in authors.whereType()) { - expect(author.keys, contains('book')); - - var book = author['book'] as Map; - print('Author: $author'); - print('Book: $book'); - expect(book['authorId'], equals(author['id'])); - } - }); - - test('create', () async { - var tolstoy = await app - .findService('authors')! - .create(Author(name: 'Leo Tolstoy').toJson()); - - print(tolstoy); - expect(tolstoy.keys, contains('book')); - expect(tolstoy['book'], isNull); - }); -} diff --git a/archived_packages/rethink.zip b/archived_packages/rethink.zip new file mode 100644 index 0000000000000000000000000000000000000000..a64022a01b0e67d2151dd09fbcf9b7914b51dac8 GIT binary patch literal 12942 zcmbVy1yo$wvUcO{5S&184?zPVxHc}q-QC^Y-QC>@t|0_>cL^2}+=GPt^xVsY$(#57 zxwqCjefq4kx@7O#C0~~e5CRet0HV@zTg5-V{QCnIKn$=ous1fbG-Fg$Kmx!-hdSxS zJY1l=gEImE4Dt#L0QlqAGJkM^1;7H9>*4?8l7|lfpgrNjV6CHPrekDa_XoSrpU!mW zw3Br~_utsnrz~0KabgA@-C~N`set(qEN+2awtX0`@ADQ|_8yrp%-Anl8-n&@p4tz8 z7K&MdUftn!U59*_w7V3tx7&~ZtZOaQAv9sSnkJ+}Y++Y4OMguP4SVsWs!#!DiRUx(=mA_0Ldwrp6gLTKXbH**Uek zMuyAqr44mTpn2qmD#CCHqe^y~722y_7$s78hXPeIm0e?BexM0}u~bIFa(JPb;mIHR zUb0sFok@4t`9P<@M!QR!IGakWo8br^znfi)Kt;3IN}o-`7_<1?(hDyQE7}Gx>N3_9 zqrE%j{m5JFcL%lUhnj4j1@@*VIqD166vGfuFg~uBv_{Z~pem;r*Cx`>Po>N`NuT*!(ykiIFy2zkN2~OXmKZ2>BS{_dLY>9@ zU_ll6y*bW>;c|B{I;Y4ALmZRaUTfI5-v~7{?z?=1MymulOV3~3@djInr9-W6dqzEI zUT3|J{AE&S7Geh}t!|Zt?s~MU$--8Y{)qJ%P&XzC2NItFan`|Tk3vU1UwD=koAnvH zGS|9uva0C^@YapIdTu#Xn!XFm6yMC+f-B^&xu?@+&SC;J0s#5sXr)dywN+ieVpb$} zPXr-s*?ps*^Wtprxc&i>2jgK=4ZKGFw9w(E5VCgJT5EX3Cv&LlM{#gojXoVntdxz3 zn>&Z0b`HZKKcIo>a5{twHKFj`H3e1djRunn+V(Pyx-Q!A`$%E*M5Ct`=V_@TRxbQ(2$nIa4W-o6%XA0WS^}GpX}ngE zz;8a`?Tf!wn~Nw1$2rOINiQzOJ74xhw!@NsHfSPnVnibNA<)nB_%+Js@wV8`Z_z)s zw0r%(Dhz2RFhnV%5QpOl0ryw037!Q;TqBtCp`!NQ+~8Gkg&wSe`y%uawYh8h4)m9g zVJsM8gG<(n&ud+;4Rlhvu{)e_9G9L>IA^8QMI$PV`bmwnELc{kgzI&mj|wosBkGjZGQ zSGUL?R{pFG5jQxeYie^8Hs>*^VB>YtZeR3d>3LLxKHDItB1nJDB37P|1CmVM2$#&dWqR!=_O!v-P$PK=%>HC zL8%fqT`V;hM*BEc)jksZ{imAgE$75$ z_;+lb&6EjN-^y(|LCct|9?|vXVZ}g;_4mto4g~<9JXuBwF##bdd7=N`8YakfSuSy) zwx7{LbF+HSuH-kaV9-ynfvHT!DyTol3W*F6*Cn2SJH6r(;EHI~sN3x!vN2q3yE07V z^c(Za_pnQ)->R(NG{*)0nA+PSiUNDvz;1o@WyJz~OQRCr+sCD={mqjJ@C)-^SBj@liJVxxjz{MX=842C#9K3Jp*8XbG|fh=4-l@ zfI&X$(9h}854zk0B!a#`!$`O@>t6;P^M`dVqYXr z?3-V4RYGd3mz-)EzVO>78W!eNedk6#hYykVYRrG~Ll~kKLf%#_8~I!Jbv!Pfm*U5| zC>y{6|5+KD=p~vY*udRTY+?8eZ@S60QT-Yz09ZB^(v~ePQew)hoSgkWHY%lRESi;d zO07ZlR1dP+*urcTT7ur3jlur9(PrP$cZwxY*>s6w89VBhLJc3ja-e-`r$XFC8aw-` zD7M@=)r2V;%V^iNL8g!*MlL5{yPAiYA>io(-hy6|&+Cpx63~c-cos7eDsrzQ>TGXD&(r_x2a{I)>Ox!^_;`_=`6bBY%dlF&ZuE(?>~px~?Y zHoA&6)(W+`Qq?>pQ%$s7H^1`zfdD#xF}ir=q!0iA=#>5I{DH#P(=Y~lMtXAo><#Sf z|5Y;n9}(==QC5w`|FdMwd|-w7gq46OpOlD@gtW+GOpG{!(|f#ri;46@?Z_XAF#|tm zlyQi$!^m-_?q)~CT|T2rBt@kQB8Yar-WWTjUpsTOw&zs!XI3F;L55x!(hNpYZ!^#s z=OyVMiw{N!ZyE8Ni^kJVMc!nWmHUBF%ELq14ryUCq?{hrwOkqKA(WZMd95TL?xY`% zup`Zj0uf172SM8lE?bq{gAZCSdSk9rzXvlwru;JUXisWWZg)z%G?dq3xShUydQoxbuqQrS!XT*P2sd{X~14pCMA^N zv_v?c@1N@pwi_tuJ-^B}3n4wrVw8=a;}F5D5AtFf>w&gW|2ibA@R?`|e(LlXS1hua zICj6fm0VoPRSc(oOc+gw@V*UZ=MbgsN4Q~TK`xeAA$_jouro8WG#uNpT#k8iwB=`H zyPP%jk=Uz;dhXos9%|FX6_Uy_>^pae{7^-gMI>}HZg-`KsRqm0PKsH2N^74@g=L88 zEonp?%l#-ded&~B*CJu1=X_DDLn?7Reb~8CL;3MdUiqs!soFY*cNaGhN@Zk1Wl>iP z8en)Y*v0)~9nMVWH&U(J_-+rD?;4a>+7$#fnqoJHtd>W6>+p86$pYFo4A}vJ>cj z>DPU?i*Dl!ukl*Ck7k)4R?oYz3dYFq6RImtHr%(GwrK%fusV8^e7J8m39^pGf2WauYDy|u~&n=H`FQuY1*bZ!Y~BH2#j$*h%p9{);Dlsl|pp~ z?|?Vb>(>9Izh-ZtBp?{n5pyIeaG>;CKpM>(#$<96XKFY?uzynUEgTT9 z)TumZdZv<^#9{qrt|ssG;rd!!9DctHOGz7JgJQ;xs|(;g2CVwUp>Py;C29hhw(B0+ zdL3~2JjaMm`>gYZ7A3@c-|XRm^VulD5K_)ksdMz(%x_e0y6vbqT1z`_EDEwP@t2_?15}W) z%Tut%vv)cS``LrvSp?s%^!dq8IZ#}(^5G!MOI{|F*M+9TI+*YOOdXE!?8*C0a$V%%pq~wPvm)b7c!&vhmNB|*08t5 zU{vJj6_;JMDGc~W-l`AAz3KCD5*~oFu$49a9*ybh13^`U&x`L;t&J7s=;wh#hr=~D;@-eaL!r);eFpC{Z_Hgx z9h|l=n%J-6kw1%(J`cJ*zUBc%`0m+*QSXOr2#VvsBK*^g$bs-zw~Pf$|mF^Byh zSux?AhSicVs{5C!`Cce8uvaOU1>WkE)*FBWfm9YpRZKoJqJacw)`7gENIA^zpY89R zFfCw^7IA!qVs4qZxLW&2Yxm7oG$@~UTvr?H)qUMgdh*$c7Np0YFSzU7i! z9b)a)8FDUFd|-zmCkBtI+RW+b{2q%~V$Mf#h2=7g-l#47XA2(XId=G>4VY??aGiC z3b8K^+!ISQjle&QB%{4-#=uMj6`$L=lvEo zF-9Mjha0|mbrC`0%1Rv5+zP)SMj~V3nGKpvhOp!dJT=7|8wITGPULy{*CR0O{v%Aa z^{{%*#zbbpSRb%HCGzi3+(vv@NHMv(%qAjiapbZ zV=6b%b$f3(&78%hgKeiyh7Bx&02r*M2hUyspf;!g8?g;xg6^9KN-zs1qpf*si7@-8 z7BJz+G%BN!q{h9{m7gH{KvTn(?+WRQbZJkm%I9Fir|Sj9GZ4j0s3A$6B92sB)!^Lo zArmwE^Kj-R#?E%dF#^yStVx&Y6^Y&q_27CGs zqi3+0*8(xi=8Fp4Jz}-kyN_)gDMPx$37v&SBsqvLb9^SNz)2MXMoCJx@d-HFW3ibS zEy5{F$&B0xq^55x-I2x81Hu6G)@ZF{DHJ;p=?FWh*b2Ab(dY4Ct)i2t(|Jn|@Ly-$ zgMos&o-$R9<3msfh3;QLedY{Iz>Z80VK;vnYibZkpp=L(&NWJwnKc^D&^$Bq&;T!jbTdNaar2tV!$CDv2ymh4O- zFYvc1B_J#yseKO4kIv`IGM|fDZjKI7jr_8ofd*zXdAOF%bo8pKatO5*T_jhC!Eb^{^M{Mi8!V9OYs%bT!vYW_Tt~95%~Ex!zDusDw#Bn$k{C@d z7TPB<9sHQ8t@-)KPGK0Ym5G7@0HFQ&wNp>iZw2^YaWw`b6MGXQODkK0KQSRt4*nZl zO+${)a``1<+a4C3?Yw@BIB!(DoZI~~a+umA|T)V}%pHB{JI*Ev@ zcUG`BYcb9x`p{zZEcvtVE3UGXG=fPbXqu50Q z%+eqozdA&56a=W}&T^b8PW2ei_)-`riM4UVzai#Dir5(?d!0VtTGZBJ5Q-$yYF6M7 zLn2Z_On-^pBnw-OY2Gm|l=F%sGmgsP(vFLb*$t1q*a)+-m`^hmBcl2Q9Fw+pbs^tz z%%i)S^@cr?wpX0MXD}nUGrywFD=0I&BOW3={ij4T%7lT}{LHf?YQ>V&ObKRP%g|ct z@Dw9ipbx=J)E3cw9OvpbR6*yiTwPyX-U0;}rbuF_9>Q7O+W4hcc4kKG*t{V31xBAh zmeVsQxLPuM)On3ouduz7fIxGhubyfjn9Q@*k&HCS-PLG!<~Np)0yoI2Ak9s=7BZJs zZ}J^sRtVw;mB%ovJe{u^RP$I|>Pi{!Ry8-QKjwvhX{l!!#U)3_MkGgoVv-YO62l{457xlIzM`Blp?;7GlKl5REdTHZN$ zODH^(Xk=aJ(6_?m`lT}lY z94Qh7l3G=VhqP)-nTE@PTk1}wYt8|q+@KOA4}wrTdbq(ONEHd3Mq~8iktK4#X$+El zUm(I5S99WS4bbDws+T(*60kaHZ5|=$RKSJ+f2`97m3RF7!`LQg?fZ}ib3i8jy|M2f z-r)Rhte%yHg_Y$$+HJ{5KKKW7g|1%rtQA0=01`EMtqZV4mt-NBTAdL4gmT<;)~E3H@B`aJrt3ldv{VY3x%t*fg?9War`z21^G!V1wnGYFC@*; zDhx>nq$G|zo$?c69dwhPxl%RnABOL=yPO$1NzUa(gZqPE2L^sa)GnI0%vt<1 zo=}}k@XCS_+bO}g2&kPGzRm{ooCyoKXZzi4nAuW`6K+%#COf)^oE3ud*BzQs;v*TGCOcwKO(A{9FA zxd#=4dN%Rtq@_OdOhO}1e9T^Si9LI?aP&RIYI9x4loM7qU95v7JseAl4c_5Ej}bm_ zh=gnQQfyX~KTXzwyeH2Nmb(S8HR)acuFE4Uk&~=w*q`}STgzN7_f0>n)z?y#Juz_6 z5vUbGmI*n^j%s4UrH$0B7mn_CmgH~!4%Yz!%rSBnpT@v68Vp!Qb3d4*4}RMFh|cZ7 zR}{tVX`OdHcAcf1w1Xk6RNBdQ6t<5-hy-7VXgN0-IK6JI$Y!a)!4VxR0yy8>r579@ zPctMTH3Jl*qmgZd{v&?um^!PFJxBye{g*xuU;anxMtyR&K>FC( z>iw7Ld-&lGR{h)b6& zK2x!Gx3(v{Ga%8aP@y()6sWq6e>V4~Q}vzw$dSH--L#u@jGg~Mdu-24y}rnZA32!< znltXCl6sY(P4_b;Q76m}Ht`SIr>A~9Q1bqB@(@FAYtn^mq#BFuw3J@E^Vg~$^V7yo_$s*5TfGLe3mJE>=+^~`M%U}FcTyLeNdo8fyMyAwJVgK<~nPTKy8P~aI}gy`^5$M@bFc6K92GT zt&pJ4B3sFcvy?FuTOv8mXf$6HhYqH8PAGdeq9R^&1m_XLX4s8u6cTX@U`$KQrCY^s zTXi-7dS;yu3KRT5KJ^){lkFiSpb1l(ypwf)H7A+D*P!AZs@g4+|B(nat_r`kqOhGe zH+i3!u`L6p|E2mnBidoF?Phz5FyFND7b>^&u2=lFih`-*5_8`DiRDzE@X|E^scdBw zTOJkX%5QJkI%1u)U0F?LPG!hFqF%n#@l+cUQ zi%`?wTiJm+&|QVEsOQG*$=h>U27N-43@HU__JlZOpP0yorKj{+ za)t35^BoNN-|+*}#%Y+`Vo+|SL7n~<-V@gvAdl41M;1Xk$fn@Hb$PGp+)N&$saQ^a_p=cu2m zzGy1PK8ITkK_a^T9zzf*)ZZT*I~vkUH>UZK1WnCX>ie(_z64$wr&vY#+Y3OM)R*NVAxsNh+IsnZRTUofM4cY)V^#TMgH-u|<%n(q|H4 zXS9t}m=Y0}uW@NK(jmF%G5ua&Z-wY33(XOj0s^4D0&w-NUwFcNJV@61WMJ5{6b2dzQJnBp)Hi&(7SetyN~q#Aef;R@%3ZoIZlr7cMR{m$Vz zd~BRoptR-*Sgg^>4+u=cYMfAH`%gxYL{s*Tn-*`)zxTgxZ6??`jL}Y}Z(86%B6k}<%F~zD)`AqD z_2H&c(GR2||3OV@f`a1xp_QF+RboI0%uQl`4?q{MkMu=#06DVbFhN?WUa;$Xkn=1d z4MWhj@n&S@YS-jU&to-6-j#prUfBK7)icX|V3*j~Ct=n{G5Q&q>H<=O8X(!)WY z&&I#Wsszt?C3>#vdz4b1%#1vv(Z(AwvASbid}S{ZR8|2j6gujjHGk>kW-Ge7z|b*; zlqOeI;28-+Y21NC5zMr)l-1Y*yN)|RXS!AFpJvTAUDwf#T73WXMuw#&FUJ zg)Q%lVpC$T&(n%N572qjiN<8^OmyRE@(CC^v$VgT>s+d=4Er?F*6H*f8RZp@9#%{!Tj?^XbWyr+Y zi&9rAbUV|GvhZ=`I)Q2+w~fReuq5DXj>;(s4w1(hElI^Y9+{<|#r zSF!Pb4z>P^>*HAK(|In?SnDI@`v^bb`j3ZPAC(5N2Z0e!=bS)8VULvWWAp$^J}Ujs zN5p>T|8$N6G%fW=`977Zge4Uk$**{>A>$fIq>kN30rj{|&ExDgk7`Q#9_c&e@6cOTs_LSs(d> zHuHD?0bzQNbih}D_ly5OL->BV4~X+qqz#1eJyO2U(G$-972@}3#N!Em3Y3AMyGP3R z@p}kTkACzY0C~R)c#1-S@U}}fuJ?YF z1=9cb0|V-$AL)Qk`=RZA^tFH9SO4|UJWZ~k&iauaa>d_p|F^XNsLz%GLOo<1&>w1; OfcFn+yoUz#^#1@#hw;<^ literal 0 HcmV?d00001 diff --git a/archived_packages/rethink/.gitignore b/archived_packages/rethink/.gitignore deleted file mode 100644 index 20880a05..00000000 --- a/archived_packages/rethink/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# See https://www.dartlang.org/tools/private-files.html - -# Files and directories created by pub -.buildlog -.packages -.project -.pub/ -build/ -**/packages/ - -# Files created by dart2js -# (Most Dart developers will use pub build to compile Dart, use/modify these -# rules if you intend to use dart2js directly -# Convention is to use extension '.dart.js' for Dart compiled to Javascript to -# differentiate from explicit Javascript files) -*.dart.js -*.part.js -*.js.deps -*.js.map -*.info.json - -# Directory created by dartdoc -doc/api/ - -# Don't commit pubspec lock file -# (Library packages only! Remove pattern if developing an application package) -pubspec.lock - -rethinkdb_data/ -.idea -.dart_tool \ No newline at end of file diff --git a/archived_packages/rethink/.travis.yml b/archived_packages/rethink/.travis.yml deleted file mode 100644 index d8efdb66..00000000 --- a/archived_packages/rethink/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: dart -addons: - rethinkdb: '2.3' -before_script: 'dart test/bootstrap.dart' \ No newline at end of file diff --git a/archived_packages/rethink/AUTHORS.md b/archived_packages/rethink/AUTHORS.md deleted file mode 100644 index ac95ab58..00000000 --- a/archived_packages/rethink/AUTHORS.md +++ /dev/null @@ -1,12 +0,0 @@ -Primary Authors -=============== - -* __[Thomas Hii](dukefirehawk.apps@gmail.com)__ - - Thomas is the current maintainer of the code base. He has refactored and migrated the - code base to support NNBD. - -* __[Tobe O](thosakwe@gmail.com)__ - - Tobe has written much of the original code prior to NNBD migration. He has moved on and - is no longer involved with the project. diff --git a/archived_packages/rethink/CHANGELOG.md b/archived_packages/rethink/CHANGELOG.md deleted file mode 100644 index 98b9fed6..00000000 --- a/archived_packages/rethink/CHANGELOG.md +++ /dev/null @@ -1,10 +0,0 @@ -# Change Log - -## 2.0.0 - -* Migrated to support Dart >= 2.12 NNBD - -## 1.1.0 - -* Moved to `package:rethinkdb_driver` -* Fixed references to old hooked event names diff --git a/archived_packages/rethink/LICENSE b/archived_packages/rethink/LICENSE deleted file mode 100644 index df5e0635..00000000 --- a/archived_packages/rethink/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2021, dukefirehawk.com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/archived_packages/rethink/README.md b/archived_packages/rethink/README.md deleted file mode 100644 index d899a0ff..00000000 --- a/archived_packages/rethink/README.md +++ /dev/null @@ -1,87 +0,0 @@ -# rethink -[![version 1.0.7](https://img.shields.io/badge/pub-1.0.7-brightgreen.svg)](https://pub.dartlang.org/packages/angel_rethink) -[![build status](https://travis-ci.org/angel-dart/rethink.svg?branch=master)](https://travis-ci.org/angel-dart/rethink) - -RethinkDB-enabled services for the Angel framework. - -# Installation -Add the following to your `pubspec.yaml`: - -```yaml -dependencies: - angel_rethink: ^1.0.0 -``` - -`package:rethinkdb_driver2` will be installed as well. - -# Usage -This library exposes one class: `RethinkService`. By default, these services will even -listen to [changefeeds](https://www.rethinkdb.com/docs/changefeeds/ruby/) from the database, -which makes them very suitable for WebSocket use. - -However, only `CREATED`, `UPDATED` and `REMOVED` events will be fired. This is technically not -a problem, as it lowers the numbers of events you have to handle on the client side. ;) - -## Model -`Model` is class with no real functionality; however, it represents a basic document, and your services should host inherited classes. -Other Angel service providers host `Model` as well, so you will easily be able to modify your application if you ever switch databases. - -```dart -class User extends Model { - String username; - String password; -} - -main() async { - var r = new RethinkDb(); - var conn = await r.connect(); - - app.use('/api/users', new RethinkService(conn, r.table('users'))); - - // Add type de/serialization if you want - app.use('/api/users', new TypedService(new RethinkService(conn, r.table('users')))); - - // You don't have to even use a table... - app.use('/api/pro_users', new RethinkService(conn, r.table('users').filter({'membership': 'pro'}))); - - app.service('api/users').afterCreated.listen((event) { - print("New user: ${event.result}"); - }); -} -``` - -## RethinkService -This class interacts with a `Query` (usually a table) and serializes data to and from Maps. - -## RethinkTypedService -Does the same as above, but serializes to and from a target class using `package:json_god` and its support for reflection. - -## Querying -You can query these services as follows: - - /path/to/service?foo=bar - -The above will query the database to find records where 'foo' equals 'bar'. - -The former will sort result in ascending order of creation, and so will the latter. - -You can use advanced queries: - -```dart -// Pass an actual query... -service.index({'query': r.table('foo').filter(...)}); - -// Or, a function that creates a query from a table... -service.index({'query': (table) => table.getAll('foo')}); - -// Or, a Map, which will be transformed into a `filter` query: -service.index({'query': {'foo': 'bar', 'baz': 'quux'}}); -``` - -You can also apply sorting by adding a `reql` parameter on the server-side. - -```dart -service.index({'reql': (query) => query.sort(...)}); -``` - -See the tests for more usage examples. diff --git a/archived_packages/rethink/analysis_options.yaml b/archived_packages/rethink/analysis_options.yaml deleted file mode 100644 index ea2c9e94..00000000 --- a/archived_packages/rethink/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:lints/recommended.yaml \ No newline at end of file diff --git a/archived_packages/rethink/lib/angel_rethink.dart b/archived_packages/rethink/lib/angel_rethink.dart deleted file mode 100644 index e0f27f42..00000000 --- a/archived_packages/rethink/lib/angel_rethink.dart +++ /dev/null @@ -1 +0,0 @@ -export 'src/rethink_service.dart'; \ No newline at end of file diff --git a/archived_packages/rethink/lib/src/rethink_service.dart b/archived_packages/rethink/lib/src/rethink_service.dart deleted file mode 100644 index 3ed955ee..00000000 --- a/archived_packages/rethink/lib/src/rethink_service.dart +++ /dev/null @@ -1,251 +0,0 @@ -import 'dart:async'; -//import 'dart:io'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:json_god/json_god.dart' as god; -import 'package:rethinkdb_dart/rethinkdb_dart.dart'; - -// Extends a RethinkDB query. -typedef QueryCallback = RqlQuery Function(RqlQuery query); - -/// Queries a single RethinkDB table or query. -class RethinkService extends Service { - /// If set to `true`, clients can remove all items by passing a `null` `id` to `remove`. - /// - /// `false` by default. - final bool allowRemoveAll; - - /// If set to `true`, parameters in `req.query` are applied to the database query. - final bool allowQuery; - - final bool debug; - - /// If set to `true`, then a HookedService mounted over this instance - /// will fire events when RethinkDB pushes events. - /// - /// Good for scaling. ;) - final bool listenForChanges; - - final Connection connection; - - /// Doesn't actually have to be a table, just a RethinkDB query. - /// - /// However, a table is the most common usecase. - final RqlQuery table; - - RethinkService(this.connection, this.table, - {this.allowRemoveAll = false, - this.allowQuery = true, - this.debug = false, - this.listenForChanges = true}) - : super(); - - RqlQuery buildQuery(RqlQuery initialQuery, Map params) { - if (params != null) { - params['broadcast'] = params.containsKey('broadcast') - ? params['broadcast'] - : (listenForChanges != true); - } - - var q = _getQueryInner(initialQuery, params); - - if (params?.containsKey('reql') == true && - params['reql'] is QueryCallback) { - q = params['reql'](q) as RqlQuery; - } - - return q ?? initialQuery; - } - - RqlQuery _getQueryInner(RqlQuery query, Map params) { - if (params == null || !params.containsKey('query')) { - return query; - } else { - if (params['query'] is RqlQuery) { - return params['query'] as RqlQuery; - } else if (params['query'] is QueryCallback) { - return params['query'](table) as RqlQuery; - } else if (params['query'] is! Map || allowQuery != true) { - return query; - } else { - var q = params['query'] as Map; - return q.keys.fold(query, (out, key) { - var val = q[key]; - - if (val is RequestContext || - val is ResponseContext || - key == 'provider' || - val is Providers) { - return out; - } else { - return out.filter({key.toString(): val}); - } - }); - } - } - } - - Future _sendQuery(RqlQuery query) async { - var result = await query.run(connection); - - if (result is Cursor) { - return await result.toList(); - } else if (result is Map && result['generated_keys'] is List) { - if (result['generated_keys'].length == 1) { - return await read(result['generated_keys'].first); - } - //return await Future.wait(result['generated_keys'].map(read)); - return await result['generated_keys'].map(read); - } else { - return result; - } - } - - dynamic _serialize(data) { - if (data is Map) { - return data; - } else if (data is Iterable) { - return data.map(_serialize).toList(); - } else { - return god.serializeObject(data); - } - } - - dynamic _squeeze(data) { - if (data is Map) { - return data.keys.fold({}, (map, k) => map..[k.toString()] = data[k]); - } else if (data is Iterable) { - return data.map(_squeeze).toList(); - } else { - return data; - } - } - - @override - void onHooked(HookedService hookedService) { - if (listenForChanges == true) { - listenToQuery(table, hookedService); - } - } - - Future listenToQuery(RqlQuery query, HookedService hookedService) async { - var feed = - await query.changes({'include_types': true}).run(connection) as Feed; - - feed.listen((Map event) { - var type = event['type']?.toString(); - var newVal = event['new_val'], oldVal = event['old_val']; - - if (type == 'add') { - // Create - hookedService.fireEvent( - hookedService.afterCreated, - HookedServiceEvent( - true, null, null, this, HookedServiceEvent.created, - result: newVal)); - } else if (type == 'change') { - // Update - hookedService.fireEvent( - hookedService.afterCreated, - HookedServiceEvent( - true, null, null, this, HookedServiceEvent.updated, - result: newVal, id: oldVal['id'], data: newVal)); - } else if (type == 'remove') { - // Remove - hookedService.fireEvent( - hookedService.afterCreated, - HookedServiceEvent( - true, null, null, this, HookedServiceEvent.removed, - result: oldVal, id: oldVal['id'])); - } - }); - } - - // TODO: Invalid override method -/* - @override - Future index([Map params]) async { - var query = buildQuery(table, params); - return await _sendQuery(query); - } -*/ - @override - Future read(id, [Map params]) async { - var query = buildQuery(table.get(id?.toString()), params); - var found = await _sendQuery(query); - //print('Found for $id: $found'); - - if (found == null) { - throw AngelHttpException.notFound(message: 'No record found for ID $id'); - } else { - return found; - } - } - - @override - Future create(data, [Map params]) async { - if (table is! Table) throw AngelHttpException.methodNotAllowed(); - - var d = _serialize(data); - var q = table as Table; - var query = buildQuery(q.insert(_squeeze(d)), params); - return await _sendQuery(query); - } - - @override - Future modify(id, data, [Map params]) async { - var d = _serialize(data); - - if (d is Map && d.containsKey('id')) { - try { - await read(d['id'], params); - } on AngelHttpException catch (e) { - if (e.statusCode == 404) { - return await create(data, params); - } else { - rethrow; - } - } - } - - var query = buildQuery(table.get(id?.toString()), params).update(d); - await _sendQuery(query); - return await read(id, params); - } - - @override - Future update(id, data, [Map params]) async { - var d = _serialize(data); - - if (d is Map && d.containsKey('id')) { - try { - await read(d['id'], params); - } on AngelHttpException catch (e) { - if (e.statusCode == 404) { - return await create(data, params); - } else { - rethrow; - } - } - } - - if (d is Map && !d.containsKey('id')) d['id'] = id.toString(); - var query = buildQuery(table.get(id?.toString()), params).replace(d); - await _sendQuery(query); - return await read(id, params); - } - - @override - Future remove(id, [Map params]) async { - if (id == null || - id == 'null' && - (allowRemoveAll == true || - params?.containsKey('provider') != true)) { - return await _sendQuery(table.delete()); - } else { - var prior = await read(id, params); - var query = buildQuery(table.get(id), params).delete(); - await _sendQuery(query); - return prior; - } - } -} diff --git a/archived_packages/rethink/pubspec.yaml b/archived_packages/rethink/pubspec.yaml deleted file mode 100644 index f53b52ad..00000000 --- a/archived_packages/rethink/pubspec.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: angel_rethink -version: 2.0.0 -description: RethinkDB-enabled services for the Angel framework. -publish_to: none -environment: - sdk: ">=2.10.0 <3.0.0" -homepage: https://github.com/angel-dart/rethink -dependencies: - angel_framework: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/framework - json_god: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/json_god - rethinkdb_dart: ^2.3.2+6 -dev_dependencies: - angel_client: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/client - angel_test: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/test - logging: ^1.0.0 - test: ^1.15.7 - lints: ^1.0.0 -dependency_overrides: - crypto: ^3.0.0 \ No newline at end of file diff --git a/archived_packages/rethink/test/README.md b/archived_packages/rethink/test/README.md deleted file mode 100644 index 2b9eed87..00000000 --- a/archived_packages/rethink/test/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tests - -The tests expect you to have installed RethinkDB. You must have a `test` database -available, and a server ready at the default port. - -Also, the tests expect a table named `todos`. \ No newline at end of file diff --git a/archived_packages/rethink/test/bootstrap.dart b/archived_packages/rethink/test/bootstrap.dart deleted file mode 100644 index 8782d8ab..00000000 --- a/archived_packages/rethink/test/bootstrap.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'dart:io'; -import 'package:rethinkdb_dart/rethinkdb_dart.dart'; - -void main() async { - var r = Rethinkdb(); - await r.connect().then((conn) { - r.tableCreate('todos').run(conn); - print('Done'); - exit(0); - }); -} diff --git a/archived_packages/rethink/test/common.dart b/archived_packages/rethink/test/common.dart deleted file mode 100644 index ba2e5f4b..00000000 --- a/archived_packages/rethink/test/common.dart +++ /dev/null @@ -1,10 +0,0 @@ -class Todo { - String title; - bool completed; - - Todo({this.title, this.completed = false}); - - Map toJson() { - return {'title': title, 'completed': completed == true}; - } -} diff --git a/archived_packages/rethink/test/generic_test.dart b/archived_packages/rethink/test/generic_test.dart deleted file mode 100644 index b2da9856..00000000 --- a/archived_packages/rethink/test/generic_test.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:angel_client/angel_client.dart' as c; -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_rethink/angel_rethink.dart'; -import 'package:angel_test/angel_test.dart'; -import 'package:logging/logging.dart'; -import 'package:rethinkdb_dart/rethinkdb_dart.dart'; -import 'package:test/test.dart'; -import 'common.dart'; - -void main() { - Angel app; - TestClient client; - Rethinkdb r; - c.Service todoService; - - setUp(() async { - r = Rethinkdb(); - var conn = await r.connect(); - - app = Angel(); - app.use('/todos', RethinkService(conn, r.table('todos'))); - - app.errorHandler = (e, req, res) async { - print('Whoops: $e'); - }; - - app.logger = Logger.detached('angel')..onRecord.listen(print); - - client = await connectTo(app); - todoService = client.service('todos'); - }); - - tearDown(() => client.close()); - - test('index', () async { - var result = await todoService.index(); - print('Response: $result'); - expect(result, isList); - }); - - test('create+read', () async { - var todo = Todo(title: 'Clean your room'); - var creation = await todoService.create(todo.toJson()); - print('Creation: $creation'); - - var id = creation['id']; - var result = await todoService.read(id); - - print('Response: $result'); - expect(result, isMap); - expect(result['id'], equals(id)); - expect(result['title'], equals(todo.title)); - expect(result['completed'], equals(todo.completed)); - }); - - test('modify', () async { - var todo = Todo(title: 'Clean your room'); - var creation = await todoService.create(todo.toJson()); - print('Creation: $creation'); - - var id = creation['id']; - var result = await todoService.modify(id, {'title': 'Eat healthy'}); - - print('Response: $result'); - expect(result, isMap); - expect(result['id'], equals(id)); - expect(result['title'], equals('Eat healthy')); - expect(result['completed'], equals(todo.completed)); - }); - - test('remove', () async { - var todo = Todo(title: 'Clean your room'); - var creation = await todoService.create(todo.toJson()); - print('Creation: $creation'); - - var id = creation['id']; - var result = await todoService.remove(id); - - print('Response: $result'); - expect(result, isMap); - expect(result['id'], equals(id)); - expect(result['title'], equals(todo.title)); - expect(result['completed'], equals(todo.completed)); - }); -} diff --git a/archived_packages/seeder.zip b/archived_packages/seeder.zip new file mode 100644 index 0000000000000000000000000000000000000000..15a423e56e103caee9af5f612dc7ef9a65ff2f4b GIT binary patch literal 9377 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 2.12 NNBD - -## 1.0.0 - -* Initial checkin diff --git a/archived_packages/seeder/LICENSE b/archived_packages/seeder/LICENSE deleted file mode 100644 index df5e0635..00000000 --- a/archived_packages/seeder/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2021, dukefirehawk.com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/archived_packages/seeder/README.md b/archived_packages/seeder/README.md deleted file mode 100644 index 4362bf9c..00000000 --- a/archived_packages/seeder/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# angel_seeder - -[![version 1.0.](https://img.shields.io/pub/v/angel_seeder.svg)](https://pub.dartlang.org/packages/angel_seeder) -[![build status](https://travis-ci.org/angel-dart/seeder.svg?branch=master)](https://travis-ci.org/angel-dart/seeder) - -Straightforward data seeder for Angel services. -This is an almost exact port of [feathers-seeder](https://github.com/thosakwe/feathers-seeder), -so its documentation should almost exactly match up here. -Fortunately, I was also the one who made `feathers-seeder`, so if you ever need assistance, -file an issue. - -# Example -```dart -var app = new Angel()..use('/todos', new TodoService()); - -await app.configure(seed( - 'todos', - new SeederConfiguration(delete: false, count: 10, template: { - 'text': (Faker faker) => 'Clean your room, ${faker.person.name()}!', - 'completed': false - }))); -``` - -**NOTE**: Don't *await* seeding at application startup; that's too slow. -Instead, run it asynchronously. \ No newline at end of file diff --git a/archived_packages/seeder/analysis_options.yaml b/archived_packages/seeder/analysis_options.yaml deleted file mode 100644 index ea2c9e94..00000000 --- a/archived_packages/seeder/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:lints/recommended.yaml \ No newline at end of file diff --git a/archived_packages/seeder/lib/angel_seeder.dart b/archived_packages/seeder/lib/angel_seeder.dart deleted file mode 100644 index 87d14e50..00000000 --- a/archived_packages/seeder/lib/angel_seeder.dart +++ /dev/null @@ -1,141 +0,0 @@ -import 'dart:math'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:faker/faker.dart'; -export 'package:faker/faker.dart'; - -/// Generates data using a [Faker]. -typedef FakerCallback = Function(Faker faker); - -/// Used to seed nested objects. -typedef SeederCallback = Function(T created, - Function(Pattern path, SeederConfiguration configuration, {bool? verbose})); - -/// Seeds the given service in development. -AngelConfigurer seed( - Pattern servicePath, - SeederConfiguration configuration, { - bool verbose = false, -}) { - return (Angel app) async { - if (configuration.runInProduction != true) return; - - if (!app.services.containsKey(servicePath)) { - throw ArgumentError( - "App does not contain a service at path '$servicePath'."); - } - - if (configuration.disabled == true) { - print("Service '$servicePath' will not be seeded."); - return; - } - - var service = app.findService(servicePath); - var faker = Faker(); - - Map _buildTemplate(Map data) { - return data.keys.fold({}, (map, key) { - var value = data[key]; - - if (value is FakerCallback) { - return map..[key] = value(faker); - } else if (value is Function) { - return map..[key] = value(); - } else if (value is Map) { - return map..[key] = _buildTemplate(value); - } else { - return map..[key] = value; - } - }); - } - - Future Function(SeederConfiguration configuration) _buildSeeder( - Service? service, - {bool? verbose}) { - return (SeederConfiguration configuration) async { - if (configuration.delete == true) await service!.remove(null); - - var count = configuration.count; - var rnd = Random(); - if (count < 1) count = 1; - - for (var i = 0; i < count; i++) { - Future _gen(template) async { - var data = template; - - if (data is Map) { - data = _buildTemplate(data); - } else if (data is Faker) { - data = template(faker); - } - - var params = {}..addAll(configuration.params); - var result = await service!.create(data, params); - - if (configuration.callback != null) { - await configuration.callback!(result, - (Pattern path, SeederConfiguration configuration, - {bool? verbose}) { - return _buildSeeder(app.findService(path), - verbose: verbose == true)(configuration); - }); - } - } - - if (configuration.template != null) { - await _gen(configuration.template); - } else if (configuration.templates.isNotEmpty == true) { - var template = configuration.templates - .elementAt(rnd.nextInt(configuration.templates.length)); - await _gen(template); - } else { - throw ArgumentError( - 'Configuration for service \'$servicePath\' must define at least one template.'); - } - } - - if (verbose == true) { - print('Created $count object(s) in service \'$servicePath\'.'); - } - }; - } - - await _buildSeeder(service, verbose: verbose == true)(configuration); - }; -} - -/// Configures the seeder. -class SeederConfiguration { - /// Optional callback on creation. - final SeederCallback? callback; - - /// Number of objects to seed. - final int count; - - /// If `true`, all records in the service are deleted before seeding. - final bool delete; - - /// If `true`, seeding will not occur. - final bool disabled; - - /// Optional service parameters to be passed. - final Map params; - - /// Unless this is `true`, the seeder will not run in production. - final bool runInProduction; - - /// A data template to build from. - final template; - - /// A set of templates to choose from. - final Iterable templates; - - SeederConfiguration( - {this.callback, - this.count = 1, - this.delete = true, - this.disabled = false, - this.params = const {}, - this.runInProduction = false, - this.template, - this.templates = const []}); -} diff --git a/archived_packages/seeder/pubspec.yaml b/archived_packages/seeder/pubspec.yaml deleted file mode 100644 index 33462335..00000000 --- a/archived_packages/seeder/pubspec.yaml +++ /dev/null @@ -1,17 +0,0 @@ -name: angel_seeder -version: 2.0.0 -description: Straightforward data seeder for Angel services. -publish_to: none -environment: - sdk: '>=2.12.0 <3.0.0' -homepage: https://github.com/angel-dart/seeder -dependencies: - angel_framework: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/framework - faker: ^2.0.0 -dev_dependencies: - test: ^1.17.8 - lints: ^1.0.0 diff --git a/archived_packages/seeder/test/all_test.dart b/archived_packages/seeder/test/all_test.dart deleted file mode 100644 index 8d6f4af5..00000000 --- a/archived_packages/seeder/test/all_test.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'dart:async'; - -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_container/mirrors.dart'; -import 'package:angel_seeder/angel_seeder.dart'; -import 'package:test/test.dart'; - -void main() { - test('create one', () async { - var app = Angel(reflector: MirrorsReflector()) - ..use('/todos', TodoService()); - - await app.configure(seed( - 'todos', - SeederConfiguration(delete: false, count: 10, template: { - 'text': (Faker faker) => 'Clean your room, ${faker.person.name()}!', - 'completed': false - }))); - - var todos = await app.findService('todos')!.index(); - print('Todos: \n${todos.map((todo) => " - $todo").join("\n")}'); - - expect(todos, isList); - expect(todos, hasLength(10)); - }); -} - -class TodoService extends Service { - final List todos = []; - - @override - Future> index([params]) => myData(); - - Future> myData() { - var completer = Completer>(); - completer.complete(todos); - return completer.future; - } - - @override - Future create(data, [params]) async { - if (data is Todo) { - todos.add(data..id = todos.length.toString()); - return data; - } else if (data is Map) { - todos.add(Todo.fromJson(data)..id = todos.length.toString()); - return data; - } else { - throw AngelHttpException.badRequest(); - } - } -} - -class Todo extends Model { - final String? text; - final bool? completed; - - Todo({String? id, this.text, this.completed = false}) { - this.id = id; - } - - factory Todo.fromJson(Map data) => Todo( - id: data['id'] as String?, - text: data['text'] as String?, - completed: data['completed'] as bool?); - - @override - String toString() => '${completed! ? "Complete" : "Incomplete"}: $text'; -} diff --git a/archived_packages/typed_service.zip b/archived_packages/typed_service.zip new file mode 100644 index 0000000000000000000000000000000000000000..a67b86d09298fc99d89a605b482e129c3e47a194 GIT binary patch literal 10702 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 literal 0 HcmV?d00001 diff --git a/archived_packages/typed_service/.gitignore b/archived_packages/typed_service/.gitignore deleted file mode 100644 index 7bf00e82..00000000 --- a/archived_packages/typed_service/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# See https://www.dartlang.org/guides/libraries/private-files - -# Files and directories created by pub -.dart_tool/ -.packages -.pub/ -build/ -# If you're building an application, you may want to check-in your pubspec.lock -pubspec.lock - -# Directory created by dartdoc -# If you don't generate documentation locally you can remove this line. -doc/api/ diff --git a/archived_packages/typed_service/AUTHORS.md b/archived_packages/typed_service/AUTHORS.md deleted file mode 100644 index ac95ab58..00000000 --- a/archived_packages/typed_service/AUTHORS.md +++ /dev/null @@ -1,12 +0,0 @@ -Primary Authors -=============== - -* __[Thomas Hii](dukefirehawk.apps@gmail.com)__ - - Thomas is the current maintainer of the code base. He has refactored and migrated the - code base to support NNBD. - -* __[Tobe O](thosakwe@gmail.com)__ - - Tobe has written much of the original code prior to NNBD migration. He has moved on and - is no longer involved with the project. diff --git a/archived_packages/typed_service/CHANGELOG.md b/archived_packages/typed_service/CHANGELOG.md deleted file mode 100644 index ea021631..00000000 --- a/archived_packages/typed_service/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Change Log - -## 2.0.0 - -* Migrated to support Dart >= 2.12 NNBD - -## 1.0.1 - -* Explicitly extend `Service`. -* Override `readData`. -* Use `Service>` for `inner`, instead of just -`Service`. - -## 1.0.0 - -* Initial version. diff --git a/archived_packages/typed_service/LICENSE b/archived_packages/typed_service/LICENSE deleted file mode 100644 index df5e0635..00000000 --- a/archived_packages/typed_service/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2021, dukefirehawk.com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/archived_packages/typed_service/README.md b/archived_packages/typed_service/README.md deleted file mode 100644 index 87220849..00000000 --- a/archived_packages/typed_service/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# typed_service -Angel services that use reflection (via mirrors or codegen) to (de)serialize PODO's. -Useful for quick prototypes. - -Typically, [`package:angel_serialize`](https://github.com/angel-dart/serialize) -is recommended. - -## Brief Example -```dart -main() async { - var app = Angel(); - var http = AngelHttp(app); - var service = TypedService(MapService()); - hierarchicalLoggingEnabled = true; - app.use('/api/todos', service); - - app - ..serializer = god.serialize - ..logger = Logger.detached('typed_service') - ..logger.onRecord.listen((rec) { - print(rec); - if (rec.error != null) print(rec.error); - if (rec.stackTrace != null) print(rec.stackTrace); - }); - - await http.startServer('127.0.0.1', 3000); - print('Listening at ${http.uri}'); -} -``` \ No newline at end of file diff --git a/archived_packages/typed_service/analysis_options.yaml b/archived_packages/typed_service/analysis_options.yaml deleted file mode 100644 index ea2c9e94..00000000 --- a/archived_packages/typed_service/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:lints/recommended.yaml \ No newline at end of file diff --git a/archived_packages/typed_service/example/README.md b/archived_packages/typed_service/example/README.md deleted file mode 100644 index 4e35b7db..00000000 --- a/archived_packages/typed_service/example/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Command: - -```bash -curl -X POST -d '@example/data.json' -H 'content-type: application/json' http://localhost:3000/api/todos; echo -``` \ No newline at end of file diff --git a/archived_packages/typed_service/example/data.json b/archived_packages/typed_service/example/data.json deleted file mode 100644 index e7a12b94..00000000 --- a/archived_packages/typed_service/example/data.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "id": "0", - "createdAt": null, - "updatedAt": null, - "idAsInt": null, - "text": "Yes", - "completed": false, - "created_at": "2019-04-26T09:51:27.494884", - "updated_at": "2019-04-26T09:51:27.494884" - }, - { - "id": "1", - "createdAt": null, - "updatedAt": null, - "idAsInt": null, - "text": "nOPE", - "completed": false, - "created_at": "2019-04-26T09:51:37.847741", - "updated_at": "2019-04-26T09:51:37.847741" - } -] \ No newline at end of file diff --git a/archived_packages/typed_service/example/main.dart b/archived_packages/typed_service/example/main.dart deleted file mode 100644 index b4203e3d..00000000 --- a/archived_packages/typed_service/example/main.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'dart:io'; -import 'package:angel_file_service/angel_file_service.dart'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_framework/http.dart'; -import 'package:angel_typed_service/angel_typed_service.dart'; -import 'package:file/local.dart'; -import 'package:json_god/json_god.dart' as god; -import 'package:logging/logging.dart'; - -void main() async { - var app = Angel(); - var http = AngelHttp(app); - var fs = LocalFileSystem(); - var exampleDir = fs.file(Platform.script).parent; - var dataJson = exampleDir.childFile('data.json'); - var service = TypedService(JsonFileService(dataJson)); - hierarchicalLoggingEnabled = true; - app.use('/api/todos', service); - - app - ..serializer = god.serialize - ..logger = Logger.detached('typed_service') - ..logger!.onRecord.listen((rec) { - print(rec); - if (rec.error != null) print(rec.error); - if (rec.stackTrace != null) print(rec.stackTrace); - }); - - await http.startServer('127.0.0.1', 3000); - print('Listening at ${http.uri}'); -} - -class Todo extends Model { - String? text; - bool? completed; - - @override - DateTime? createdAt, updatedAt; - - Todo({String? id, this.text, this.completed, this.createdAt, this.updatedAt}) - : super(id: id); -} diff --git a/archived_packages/typed_service/lib/angel_typed_service.dart b/archived_packages/typed_service/lib/angel_typed_service.dart deleted file mode 100644 index f78924bf..00000000 --- a/archived_packages/typed_service/lib/angel_typed_service.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'dart:async'; -import 'dart:mirrors'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:json_god/json_god.dart' as god; - -/// An Angel service that uses reflection to (de)serialize Dart objects. -class TypedService extends Service { - /// The inner service. - final Service> inner; - - TypedService(this.inner) : super() { - if (!reflectType(T).isAssignableTo(reflectType(Model))) { - throw Exception( - 'If you specify a type for TypedService, it must extend Model.'); - } - } - - @override - FutureOr? Function(RequestContext, ResponseContext) get readData => - _readData; - - T? _readData(RequestContext req, ResponseContext res) => - deserialize(req.bodyAsMap); - - /// Attempts to deserialize [x] into an instance of [T]. - T? deserialize(x) { - // print('DESERIALIZE: $x (${x.runtimeType})'); - if (x is T) { - return x; - } else if (x is Map) { - var data = x.keys.fold({}, (dynamic map, key) { - var value = x[key]; - - if ((key == 'createdAt' || - key == 'updatedAt' || - key == 'created_at' || - key == 'updated_at') && - value is String) { - return map..[key] = DateTime.parse(value); - } else { - return map..[key] = value; - } - }); - - var result = god.deserializeDatum(data, outputType: T); - - if (data['createdAt'] is DateTime) { - result.createdAt = data['createdAt'] as DateTime?; - } else if (data['created_at'] is DateTime) { - result.createdAt = data['created_at'] as DateTime?; - } - - if (data['updatedAt'] is DateTime) { - result.updatedAt = data['updatedAt'] as DateTime?; - } else if (data['updated_at'] is DateTime) { - result.updatedAt = data['updated_at'] as DateTime?; - } - - // print('x: $x\nresult: $result'); - return result as T?; - } else { - throw ArgumentError('Cannot convert $x to $T'); - } - } - - /// Serializes [x] into a [Map]. - Map serialize(x) { - if (x is Model) { - return (god.serializeObject(x) as Map).cast(); - } else if (x is Map) { - return x.cast(); - } else { - throw ArgumentError('Cannot serialize ${x.runtimeType}'); - } - } - - @override - Future> index([Map? params]) => - inner.index(params).then((it) => it.map(deserialize).toList()); - - @override - Future create(data, [Map? params]) => - inner.create(serialize(data), params).then(deserialize as FutureOr Function(Map)); - - @override - Future read(Id id, [Map? params]) => - inner.read(id, params).then(deserialize as FutureOr Function(Map)); - - @override - Future modify(Id id, T? data, [Map? params]) => - inner.modify(id, serialize(data), params).then(deserialize as FutureOr Function(Map)); - - @override - Future update(Id id, T? data, [Map? params]) => - inner.update(id, serialize(data), params).then(deserialize as FutureOr Function(Map)); - - @override - Future remove(Id id, [Map? params]) => - inner.remove(id, params).then(deserialize as FutureOr Function(Map)); -} diff --git a/archived_packages/typed_service/pubspec.yaml b/archived_packages/typed_service/pubspec.yaml deleted file mode 100644 index a1e7674d..00000000 --- a/archived_packages/typed_service/pubspec.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: angel_typed_service -version: 2.0.0 -description: Angel services that use reflection to (de)serialize Dart objects. -homepage: https://github.com/angel-dart/typed_service -publish_to: none -environment: - sdk: '>=2.12.0 <3.0.0' -dependencies: - angel_framework: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/framework - json_god: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/json_god - -dev_dependencies: - angel_file_service: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/file_service - file: ^6.0.0 - logging: ^1.0.0 - lints: ^1.0.0 - test: ^1.15.7 \ No newline at end of file diff --git a/archived_packages/typed_service/test/typed_service_test.dart b/archived_packages/typed_service/test/typed_service_test.dart deleted file mode 100644 index 6e1b3acf..00000000 --- a/archived_packages/typed_service/test/typed_service_test.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_typed_service/angel_typed_service.dart'; -import 'package:test/test.dart'; - -void main() { - var svc = TypedService(MapService()); - - test('force model', () { - expect(() => TypedService(MapService()), throwsException); - }); - - test('serialize', () { - expect(svc.serialize({'foo': 'bar'}), {'foo': 'bar'}); - expect(() => svc.serialize(2), throwsArgumentError); - var now = DateTime.now(); - var t = Todo( - id: '3', text: 'a', completed: false, createdAt: now, updatedAt: now); - var m = svc.serialize(t); - print(m); - expect(m..remove('_identityHashCode')..remove('idAsInt'), { - 'id': '3', - 'createdAt': now.toIso8601String(), - 'updatedAt': now.toIso8601String(), - 'text': 'a', - 'completed': false - }); - }); - - test('deserialize date', () { - var now = DateTime.now(); - var m = svc.deserialize({ - 'createdAt': now.toIso8601String(), - 'updatedAt': now.toIso8601String() - })!; - expect(m, const TypeMatcher()); - expect(m.createdAt!.millisecondsSinceEpoch, now.millisecondsSinceEpoch); - }); - - test('deserialize date w/ underscore', () { - var now = DateTime.now(); - var m = svc.deserialize({ - 'created_at': now.toIso8601String(), - 'updated_at': now.toIso8601String() - })!; - expect(m, const TypeMatcher()); - expect(m.createdAt!.millisecondsSinceEpoch, now.millisecondsSinceEpoch); - }); -} - -class Todo extends Model { - String? text; - bool? completed; - @override - DateTime? createdAt, updatedAt; - Todo({String? id, this.text, this.completed, this.createdAt, this.updatedAt}) - : super(id: id); -} diff --git a/archived_packages/wings.zip b/archived_packages/wings.zip new file mode 100644 index 0000000000000000000000000000000000000000..8489890e441676c03c63e656cc03a3d036d359ca GIT binary patch literal 216276 zcmaI61#sO!(=BLp}# zR#itcJ<=RaRrl#pwWKHm4TBBwp98wuS?#}_|N8_BK?dPrWpClaq^61j0jD16Ve
%(_x_To?*K2 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 a`Scq_7W3@kzBzzGxEZriH> literal 0 HcmV?d00001 diff --git a/archived_packages/wings/.clang-format b/archived_packages/wings/.clang-format deleted file mode 100644 index d30c5da2..00000000 --- a/archived_packages/wings/.clang-format +++ /dev/null @@ -1,121 +0,0 @@ ---- -Language: Cpp -# BasedOnStyle: LLVM -AccessModifierOffset: -2 -AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlines: Right -AlignOperands: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: true -AllowShortBlocksOnASingleLine: false -AllowShortCaseLabelsOnASingleLine: false -AllowShortFunctionsOnASingleLine: All -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: MultiLine -BinPackArguments: true -BinPackParameters: true -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - AfterExternBlock: false - BeforeCatch: false - BeforeElse: false - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: true - SplitEmptyNamespace: true -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Attach -BreakBeforeInheritanceComma: false -BreakInheritanceList: BeforeColon -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeColon -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 80 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: false -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: true -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeBlocks: Preserve -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - - Regex: '.*' - Priority: 1 -IncludeIsMainRegex: '(Test)?$' -IndentCaseLabels: false -IndentPPDirectives: None -IndentWidth: 2 -IndentWrappedFunctionNames: false -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: true -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCBinPackProtocolList: Auto -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: true -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyBreakTemplateDeclaration: 10 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 60 -PointerAlignment: Right -ReflowComments: true -SortIncludes: true -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeCpp11BracedList: false -SpaceBeforeCtorInitializerColon: true -SpaceBeforeInheritanceColon: true -SpaceBeforeParens: ControlStatements -SpaceBeforeRangeBasedForLoopColon: true -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInContainerLiterals: true -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp11 -StatementMacros: - - Q_UNUSED - - QT_REQUIRE_VERSION -TabWidth: 8 -UseTab: Never -... - diff --git a/archived_packages/wings/.gitignore b/archived_packages/wings/.gitignore deleted file mode 100644 index f2aac56f..00000000 --- a/archived_packages/wings/.gitignore +++ /dev/null @@ -1,67 +0,0 @@ -# See https://www.dartlang.org/guides/libraries/private-files - -# Files and directories created by pub -.dart_tool/ -.packages -build/ -# If you're building an application, you may want to check-in your pubspec.lock -pubspec.lock - -# Directory created by dartdoc -# If you don't generate documentation locally you can remove this line. -doc/api/ - -# Avoid committing generated Javascript files: -*.dart.js -*.info.json # Produced by the --dump-info flag. -*.js # When generated by dart2js. Don't specify *.js if your - # project includes source files written in JavaScript. -*.js_ -*.js.deps -*.js.map - -*.o -# *.dylib -*.a -# *.so -*.lib -*.obj - -.vscode/ -.idea/ -# Created by https://www.gitignore.io/api/cmake -# Edit at https://www.gitignore.io/?templates=cmake - -### CMake ### -CMakeLists.txt.user -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -_deps - -### CMake Patch ### -# External projects -*-prefix/ - -# End of https://www.gitignore.io/api/cmake - -# Created by https://www.gitignore.io/api/vagrant -# Edit at https://www.gitignore.io/?templates=vagrant - -### Vagrant ### -# General -.vagrant/ - -# Log files (if you are creating logs in debug mode, uncomment this) -# *.log - -### Vagrant Patch ### -*.box - -# End of https://www.gitignore.io/api/vagrant diff --git a/archived_packages/wings/.gitmodules b/archived_packages/wings/.gitmodules deleted file mode 100644 index 6b6d60b5..00000000 --- a/archived_packages/wings/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "cmake_dart_utils"] - path = cmake_dart_utils - url = https://github.com/thosakwe/cmake_dart_utils.git -[submodule "lib/src/http-parser"] - path = lib/src/http-parser - url = https://github.com/nodejs/http-parser.git diff --git a/archived_packages/wings/CMakeLists.txt b/archived_packages/wings/CMakeLists.txt deleted file mode 100644 index 4b4c1257..00000000 --- a/archived_packages/wings/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -cmake_minimum_required(VERSION 3.0) -project(angel_wings) -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_dart_utils/cmake") -find_package(Dart REQUIRED) -set(CMAKE_CXX_STANDARD 11) -add_subdirectory(lib/src) \ No newline at end of file diff --git a/archived_packages/wings/LICENSE b/archived_packages/wings/LICENSE deleted file mode 100644 index df5e0635..00000000 --- a/archived_packages/wings/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2021, dukefirehawk.com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/archived_packages/wings/README.md b/archived_packages/wings/README.md deleted file mode 100644 index 4a80caa3..00000000 --- a/archived_packages/wings/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# wings -Native HTTP driver for Angel, for a nice speed boost. - -Not ready for production. - -## How does it work? -Typically, Angel uses the `AngelHttp` driver, which is wrapper over the `HttpServer` functionality in -`dart:io`, which in turns uses the `ServerSocket` and `Socket` functionality. This is great - Dart's standard -library comes with an HTTP server, which saves a lot of difficult in implementation. - -However, abstraction tends to come with a cost. Wings seeks to minimize abstraction entirely. Rather than -using the built-in Dart network stack, Wings' HTTP server is implemented in C++ as a Dart native extension, -and the `AngelWings` driver listens to events from the extension and converts them directly into -`RequestContext` objects, without any additional abstraction within. This reduces the amount of computation -performed on each request, and helps to minimize response latency. Sending data from the response buffer in plain -Dart surprisingly is the most expensive operation, as is revealed by the Observatory. - -By combining Dart's powerful VM with a native code server based on -[the same one used in Node.js](https://github.com/nodejs/http-parser), -`AngelWings` trims several milliseconds off every request, both saving resources and reducing -load times for high-traffic applications. - -## How can I use it? -The intended way to use `AngelWings` is via -[`package:build_native`](https://github.com/thosakwe/build_native); -however, the situation surrounding distributing native extensions is yet far from ideal, -so this package includes pre-built binaries out-of-the-box. - -Thanks to this, you can use it like any other Dart package, by installing it via Pub. - -## Brief example -Using `AngelWings` is almost identical to using `AngelHttp`; however, it does -not support SSL, and therefore should be placed behind a reverse proxy like `nginx` in production. - -```dart -main() async { - var app = new Angel(); - var wings = new AngelWings(app, shared: true, useZone: false); - - app.injectEncoders({'gzip': gzip.encoder, 'deflate': zlib.encoder}); - - app.get('/hello', 'Hello, native world! This is Angel WINGS.'); - - var fs = const LocalFileSystem(); - var vDir = new VirtualDirectory(app, fs, source: fs.directory('web')); - app.use(vDir.handleRequest); - - await wings.startServer('127.0.0.1', 3000); - print('Listening at http://${wings.address.address}:${wings.port}'); -} -``` \ No newline at end of file diff --git a/archived_packages/wings/Vagrantfile b/archived_packages/wings/Vagrantfile deleted file mode 100644 index 995ff4a3..00000000 --- a/archived_packages/wings/Vagrantfile +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : -Vagrant.configure("2") do |config| - config.vm.box = "ubuntu/bionic64" - config.vm.provision "shell", path: "provision.sh" -end diff --git a/archived_packages/wings/analysis_options.yaml b/archived_packages/wings/analysis_options.yaml deleted file mode 100644 index ea2c9e94..00000000 --- a/archived_packages/wings/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:lints/recommended.yaml \ No newline at end of file diff --git a/archived_packages/wings/benchmark/empty.dart b/archived_packages/wings/benchmark/empty.dart deleted file mode 100644 index 07e41bf9..00000000 --- a/archived_packages/wings/benchmark/empty.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'package:angel_framework/angel_framework.dart'; -import 'util.dart'; - -const AngelBenchmark emptyBenchmark = _EmptyBenchmark(); - -void main() => runBenchmarks([emptyBenchmark]); - -class _EmptyBenchmark implements AngelBenchmark { - const _EmptyBenchmark(); - - @override - String get name => 'empty'; - - @override - FutureOr rawHandler(HttpRequest req, HttpResponse res) { - return res.close(); - } - - @override - void setupAngel(Angel app) {} -} diff --git a/archived_packages/wings/benchmark/util.dart b/archived_packages/wings/benchmark/util.dart deleted file mode 100644 index e51f8bcd..00000000 --- a/archived_packages/wings/benchmark/util.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'dart:isolate'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_framework/http.dart'; -import 'package:angel_wings/angel_wings.dart'; -import 'package:io/ansi.dart'; -import 'package:tuple/tuple.dart'; - -Future _runWrk( - {ProcessStartMode mode = ProcessStartMode.inheritStdio}) async { - return await Process.start('wrk', ['http://localhost:$testPort'], mode: mode); -} - -Future _warmUp() async { - var wrk = await _runWrk(); - await wrk.exitCode; - // await wrk.stderr.drain(); - // await wrk.stdout.drain(); -} - -Future _10s() => Future.delayed(Duration(seconds: 10)); - -const testPort = 8877; - -Future runBenchmarks(Iterable benchmarks, - {Iterable factories = const [ - // 'angel_http', - 'angel_wings', - ]}) async { - for (var benchmark in benchmarks) { - print(magenta.wrap('Entering benchmark: ${benchmark.name}')); - - // // Run dart:io - // print(lightGray.wrap('Booting dart:io server (waiting 10s)...')); - // var isolates = []; - // for (int i = 0; i < Platform.numberOfProcessors; i++) { - // isolates.add(await Isolate.spawn(_httpIsolate, benchmark)); - // } - - // await _10s(); - // print(lightGray.wrap('Warming up dart:io server...')); - // await _warmUp(); - - // stdout - // ..write(lightGray.wrap('Now running `wrk` for ')) - // ..write(cyan.wrap(benchmark.name)) - // ..writeln(lightGray.wrap(' (waiting 10s)...')); - // var wrk = await _runWrk(mode: ProcessStartMode.inheritStdio); - // await wrk.exitCode; - // isolates.forEach((i) => i.kill(priority: Isolate.immediate)); - - // Run Angel HTTP, Wings - for (var fac in factories) { - print(lightGray.wrap('Booting $fac server...')); - - var isolates = []; - for (var i = 0; i < Platform.numberOfProcessors; i++) { - isolates - .add(await Isolate.spawn(_angelIsolate, Tuple2(benchmark, fac))); - } - - await _10s(); - print(lightGray.wrap('Warming up $fac server...')); - await _warmUp(); - stdout - ..write(lightGray.wrap('Now running `wrk` for ')) - ..write(cyan.wrap(benchmark.name)) - ..writeln(lightGray.wrap('...')); - var wrk = await _runWrk(mode: ProcessStartMode.inheritStdio); - await wrk.exitCode; - } - } - - exit(0); -} - -/* -void _httpIsolate(AngelBenchmark benchmark) { - Future(() async { - var raw = await HttpServer.bind(InternetAddress.loopbackIPv4, testPort, - shared: true); - raw.listen((r) => benchmark.rawHandler(r, r.response)); - }); -} -*/ - -void _angelIsolate(Tuple2 args) { - Future(() async { - var app = Angel(); - late Driver driver; - - if (args.item2 == 'angel_http') { - driver = AngelHttp.custom(app, startShared); - } else if (args.item2 == 'angel_wings') { - driver = AngelWings.custom(app, startSharedWings); - } - - await app.configure(args.item1.setupAngel); - await driver.startServer(InternetAddress.loopbackIPv4, testPort); - }); -} - -abstract class AngelBenchmark { - const AngelBenchmark(); - - String get name; - - FutureOr setupAngel(Angel app); - - FutureOr rawHandler(HttpRequest req, HttpResponse res); -} diff --git a/archived_packages/wings/example/main.dart b/archived_packages/wings/example/main.dart deleted file mode 100644 index c33b9b06..00000000 --- a/archived_packages/wings/example/main.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'dart:io'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_static/angel_static.dart'; -import 'package:angel_wings/angel_wings.dart'; -import 'package:file/local.dart'; -import 'package:logging/logging.dart'; -import 'package:pretty_logging/pretty_logging.dart'; - -void main() async { - hierarchicalLoggingEnabled = true; - - var logger = Logger.detached('wings') - ..level = Level.ALL - ..onRecord.listen(prettyLog); - var app = Angel(logger: logger); - var wings = AngelWings(app); - var fs = LocalFileSystem(); - var vDir = CachingVirtualDirectory(app, fs, - source: fs.currentDirectory, allowDirectoryListing: true); - - app.mimeTypeResolver.addExtension('yaml', 'text/x-yaml'); - - app.get('/', (req, res) => 'WINGS!!!'); - app.post('/', (req, res) async { - await req.parseBody(); - return req.bodyAsMap; - }); - - app.fallback(vDir.handleRequest); - app.fallback((req, res) => throw AngelHttpException.notFound()); - - await wings.startServer(InternetAddress.loopbackIPv4, 3000); - print('Listening at ${wings.uri}'); -} diff --git a/archived_packages/wings/example/shared.dart b/archived_packages/wings/example/shared.dart deleted file mode 100644 index ab3752c2..00000000 --- a/archived_packages/wings/example/shared.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_wings/angel_wings.dart'; - -void main() async { - var app = Angel(); - var wings1 = AngelWings.custom(app, startSharedWings); - var wings2 = AngelWings.custom(app, startSharedWings); - var wings3 = AngelWings.custom(app, startSharedWings); - var wings4 = AngelWings.custom(app, startSharedWings); - await wings1.startServer('127.0.0.1', 3000); - await wings2.startServer('127.0.0.1', 3000); - await wings3.startServer('127.0.0.1', 3000); - await wings4.startServer('127.0.0.1', 3000); - print(wings1.uri); - print(wings2.uri); - print(wings3.uri); - print(wings4.uri); - await wings1.close(); - await wings2.close(); - await wings3.close(); - await wings4.close(); -} diff --git a/archived_packages/wings/example/socket.dart b/archived_packages/wings/example/socket.dart deleted file mode 100644 index 3a10a1c7..00000000 --- a/archived_packages/wings/example/socket.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'dart:convert'; -import 'dart:typed_data'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:angel_wings/angel_wings.dart'; - -void main() async { - var app = Angel(); - var socket = await WingsSocket.bind('127.0.0.1', 3000); - print('Listening at http://localhost:3000'); - - await for (var fd in socket) { - var response = ''' -HTTP/1.1 200 Not Found\r -Date: Fri, 31 Dec 1999 23:59:59 GMT\r -server: wings-test\r\n\r -Nope, nothing's here! -\r\n\r -'''; - var bytes = utf8.encode(response); - var data = Uint8List.fromList(bytes); - var rq = await WingsRequestContext.from(app, fd); - print('Yay: $rq'); - print(rq.headers); - writeToNativeSocket(fd.fileDescriptor, data); - closeNativeSocketDescriptor(fd.fileDescriptor); - } -} diff --git a/archived_packages/wings/lib/angel_wings.dart b/archived_packages/wings/lib/angel_wings.dart deleted file mode 100644 index c1cda8f7..00000000 --- a/archived_packages/wings/lib/angel_wings.dart +++ /dev/null @@ -1,4 +0,0 @@ -export 'src/wings_driver.dart'; -export 'src/wings_request.dart'; -export 'src/wings_response.dart'; -export 'src/wings_socket.dart'; diff --git a/archived_packages/wings/lib/src/CMakeLists.txt b/archived_packages/wings/lib/src/CMakeLists.txt deleted file mode 100644 index 758fce7d..00000000 --- a/archived_packages/wings/lib/src/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -include_directories("${CMAKE_CURRENT_LIST_DIR}") -add_dart_native_extension(angel_wings - http-parser/http_parser.c - angel_wings.h angel_wings.cc - bind.cc http.cc wings_socket.cc - util.cc) -install(TARGETS angel_wings LIBRARY DESTINATION "${CMAKE_CURRENT_LIST_DIR}") -install(TARGETS angel_wings LIBRARY DESTINATION "${CMAKE_CURRENT_LIST_DIR}/../..") diff --git a/archived_packages/wings/lib/src/angel_wings.cc b/archived_packages/wings/lib/src/angel_wings.cc deleted file mode 100644 index 74d3a8ef..00000000 --- a/archived_packages/wings/lib/src/angel_wings.cc +++ /dev/null @@ -1,55 +0,0 @@ -#include "angel_wings.h" -#include -#include -#include -#include - -// The name of the initialization function is the extension name followed -// by _Init. -DART_EXPORT Dart_Handle angel_wings_Init(Dart_Handle parent_library) { - if (Dart_IsError(parent_library)) - return parent_library; - - Dart_Handle result_code = - Dart_SetNativeResolver(parent_library, ResolveName, NULL); - if (Dart_IsError(result_code)) - return result_code; - - return Dart_Null(); -} - -Dart_Handle HandleError(Dart_Handle handle) { - if (Dart_IsError(handle)) - Dart_PropagateError(handle); - return handle; -} - -Dart_NativeFunction ResolveName(Dart_Handle name, int argc, - bool *auto_setup_scope) { - // If we fail, we return NULL, and Dart throws an exception. - if (!Dart_IsString(name)) - return NULL; - Dart_NativeFunction result = NULL; - const char *cname; - HandleError(Dart_StringToCString(name, &cname)); - - if (strcmp("Dart_WingsSocket_bindIPv4", cname) == 0) - result = Dart_WingsSocket_bindIPv4; - if (strcmp("Dart_WingsSocket_bindIPv6", cname) == 0) - result = Dart_WingsSocket_bindIPv6; - if (strcmp("Dart_WingsSocket_getAddress", cname) == 0) - result = Dart_WingsSocket_getAddress; - if (strcmp("Dart_WingsSocket_getPort", cname) == 0) - result = Dart_WingsSocket_getPort; - if (strcmp("Dart_WingsSocket_write", cname) == 0) - result = Dart_WingsSocket_write; - if (strcmp("Dart_WingsSocket_closeDescriptor", cname) == 0) - result = Dart_WingsSocket_closeDescriptor; - if (strcmp("Dart_WingsSocket_close", cname) == 0) - result = Dart_WingsSocket_close; - if (strcmp("Dart_WingsSocket_listen", cname) == 0) - result = Dart_WingsSocket_listen; - if (strcmp("Dart_WingsSocket_parseHttp", cname) == 0) - result = Dart_WingsSocket_parseHttp; - return result; -} \ No newline at end of file diff --git a/archived_packages/wings/lib/src/angel_wings.h b/archived_packages/wings/lib/src/angel_wings.h deleted file mode 100644 index 3aeda0b7..00000000 --- a/archived_packages/wings/lib/src/angel_wings.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef ANGEL_WINGS_WINGS_H -#define ANGEL_WINGS_WINGS_H - -#include "angel_wings.h" -#include -#include - -Dart_NativeFunction ResolveName(Dart_Handle name, int argc, - bool *auto_setup_scope); -Dart_Handle HandleError(Dart_Handle handle); - -void wingsThrowError(const char *msg, const char *lib = "dart:core", - const char *name = "StateError", int n = -1); -void Dart_WingsSocket_bindIPv4(Dart_NativeArguments arguments); -void Dart_WingsSocket_bindIPv6(Dart_NativeArguments arguments); -void Dart_WingsSocket_getAddress(Dart_NativeArguments arguments); -void Dart_WingsSocket_getPort(Dart_NativeArguments arguments); -void Dart_WingsSocket_write(Dart_NativeArguments arguments); -void Dart_WingsSocket_closeDescriptor(Dart_NativeArguments arguments); -void Dart_WingsSocket_close(Dart_NativeArguments arguments); -void Dart_WingsSocket_listen(Dart_NativeArguments arguments); -void Dart_WingsSocket_parseHttp(Dart_NativeArguments arguments); -void wingsHttpCallback(Dart_Port dest_port_id, Dart_CObject *message); - -#endif \ No newline at end of file diff --git a/archived_packages/wings/lib/src/bind.cc b/archived_packages/wings/lib/src/bind.cc deleted file mode 100644 index 26d90781..00000000 --- a/archived_packages/wings/lib/src/bind.cc +++ /dev/null @@ -1,161 +0,0 @@ -#include "angel_wings.h" -#include "wings_socket.h" -#include -#include -using namespace wings; - -void getWingsSocketInfo(Dart_NativeArguments arguments, WingsSocketInfo *info); - -WingsSocket *wingsFindSocket(Dart_NativeArguments arguments, - const WingsSocketInfo &info, int af); - -WingsSocket *wingsBindNewSocket(Dart_NativeArguments arguments, - const WingsSocketInfo &info, int af); - -void wingsReturnBound(Dart_NativeArguments arguments, WingsSocket *socket); - -void Dart_WingsSocket_bind(sa_family_t af, Dart_NativeArguments arguments) { - WingsSocketInfo info; - getWingsSocketInfo(arguments, &info); - WingsSocket *socket = wingsFindSocket(arguments, info, af); - wingsReturnBound(arguments, socket); -} - -void Dart_WingsSocket_bindIPv4(Dart_NativeArguments arguments) { - Dart_WingsSocket_bind(AF_INET, arguments); -} - -void Dart_WingsSocket_bindIPv6(Dart_NativeArguments arguments) { - Dart_WingsSocket_bind(AF_INET6, arguments); -} - -void wingsReturnBound(Dart_NativeArguments arguments, WingsSocket *socket) { - Dart_Port sendPort; - HandleError( - Dart_SendPortGetId(Dart_GetNativeArgument(arguments, 5), &sendPort)); - socket->incrRef(sendPort); - auto ptr = (uint64_t)socket; - Dart_Handle ptrHandle = Dart_NewIntegerFromUint64(ptr); - Dart_SetReturnValue(arguments, ptrHandle); -} - -WingsSocket *wingsFindSocket(Dart_NativeArguments arguments, - const WingsSocketInfo &info, int af) { - // Find an existing server, if any. - if (info.shared) { - // std::cout << info.address << std::endl; - // std::cout << globalSocketList.size() << std::endl; - for (auto *socket : globalSocketList) { - if (info.equals(socket->getInfo())) { - return socket; - } - } - } - - return wingsBindNewSocket(arguments, info, af); -} - -WingsSocket *wingsBindNewSocket(Dart_NativeArguments arguments, - const WingsSocketInfo &info, int af) { - sockaddr *addr; - sockaddr_in v4; - sockaddr_in6 v6; - int ret; - - int sock = socket(af, SOCK_STREAM, IPPROTO_TCP); - - if (sock < 0) { - wingsThrowError("Failed to create socket."); - return nullptr; - } - - int i = 1; - ret = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)); - - if (ret < 0) { - wingsThrowError("Cannot reuse address for socket."); - return nullptr; - } - - // TODO: Only on Mac??? - // ret = setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &i, sizeof(i)); - - // if (ret < 0) - // { - // wingsThrowStateError("Cannot reuse port for socket."); - // return; - // } - - if (af == AF_INET6) { - v6.sin6_family = AF_INET6; - v6.sin6_port = htons((uint16_t)info.port); - ret = inet_pton(AF_INET6, info.address, &v6.sin6_addr.s6_addr); - if (ret >= 0) - ret = bind(sock, (const sockaddr *)&v6, sizeof(v6)); - } else { - v4.sin_family = AF_INET; - v4.sin_port = htons((uint16_t)info.port); - v4.sin_addr.s_addr = inet_addr(info.address); - bind(sock, (const sockaddr *)&v4, sizeof(v4)); - } - - if (ret < 0) { - wingsThrowError("Failed to bind socket."); - return nullptr; - } - - if (listen(sock, SOMAXCONN) < 0) { - wingsThrowError("Failed to set SOMAXCONN on bound socket."); - return nullptr; - } - - if (listen(sock, (int)info.backlog) < 0) { - wingsThrowError("Failed to set backlog on bound socket."); - return nullptr; - } - - if (fcntl(sock, F_SETFL, O_NONBLOCK) == -1) { - wingsThrowError("Failed to make socket non-blocking."); - return nullptr; - } - - auto *out = new WingsSocket(af, sock, info); - globalSocketList.push_back(out); - return out; -} - -void getWingsSocketInfo(Dart_NativeArguments arguments, WingsSocketInfo *info) { - Dart_Handle addressHandle = Dart_GetNativeArgument(arguments, 0); - Dart_Handle portHandle = Dart_GetNativeArgument(arguments, 1); - Dart_Handle sharedHandle = Dart_GetNativeArgument(arguments, 2); - Dart_Handle backlogHandle = Dart_GetNativeArgument(arguments, 3); - Dart_Handle v6OnlyHandle = Dart_GetNativeArgument(arguments, 4); - info->sendPortHandle = Dart_GetNativeArgument(arguments, 5); - - HandleError(Dart_StringToCString(addressHandle, &info->address)); - HandleError(Dart_IntegerToUint64(portHandle, &info->port)); - HandleError(Dart_BooleanValue(sharedHandle, &info->shared)); - HandleError(Dart_IntegerToUint64(backlogHandle, &info->backlog)); - HandleError(Dart_BooleanValue(v6OnlyHandle, &info->v6Only)); -} - -void wingsThrowError(const char *msg, const char *lib, const char *name, - int n) { - Dart_Handle msgHandle = Dart_NewStringFromCString(msg); - Dart_Handle emptyHandle = Dart_NewStringFromCString(""); - Dart_Handle stateErrorHandle = Dart_NewStringFromCString(name); - Dart_Handle dartCoreHandle = Dart_NewStringFromCString(lib); - Dart_Handle dartCore = Dart_LookupLibrary(dartCoreHandle); - Dart_Handle stateError = Dart_GetType(dartCore, stateErrorHandle, 0, nullptr); - - std::vector args; - args.push_back(msgHandle); - - if (n > -1) { - args.push_back(Dart_NewInteger(n)); - } - - Dart_Handle errHandle = - Dart_New(stateError, emptyHandle, args.size(), args.data()); - Dart_ThrowException(errHandle); -} \ No newline at end of file diff --git a/archived_packages/wings/lib/src/http.cc b/archived_packages/wings/lib/src/http.cc deleted file mode 100644 index a9fe7183..00000000 --- a/archived_packages/wings/lib/src/http.cc +++ /dev/null @@ -1,175 +0,0 @@ -#include - -#include "angel_wings.h" -#include "wings_socket.h" -#include -#include -using namespace wings; - -void Dart_WingsSocket_parseHttp(Dart_NativeArguments arguments) { - Dart_Port service_port = - Dart_NewNativePort("WingsHttpCallback", &wingsHttpCallback, true); - Dart_Handle send_port = Dart_NewSendPort(service_port); - Dart_SetReturnValue(arguments, send_port); -} - -struct wingsHttp { - Dart_Port port; - std::string lastHeader; -}; - -void wingsHttpCallback(Dart_Port dest_port_id, Dart_CObject *message) { - int64_t fd = -1; - Dart_Port outPort = message->value.as_array.values[0]->value.as_send_port.id; - Dart_CObject *fdArg = message->value.as_array.values[1]; - - wingsHttp httpData = {outPort}; - -#define theStruct (*((wingsHttp *)parser->data)) -#define thePort theStruct.port -#define sendInt(n) \ - { \ - Dart_CObject obj; \ - obj.type = Dart_CObject_kInt64; \ - obj.value.as_int64 = (n); \ - Dart_PostCObject(thePort, &obj); \ - } -#define sendString(n) \ - if (length > 0) { \ - Dart_CObject typeObj; \ - typeObj.type = Dart_CObject_kInt32; \ - typeObj.value.as_int32 = (n); \ - std::string str(at, length); \ - Dart_CObject strObj; \ - strObj.type = Dart_CObject_kString; \ - strObj.value.as_string = (char *)str.c_str(); \ - Dart_CObject *values[2] = {&typeObj, &strObj}; \ - Dart_CObject out; \ - out.type = Dart_CObject_kArray; \ - out.value.as_array.length = 2; \ - out.value.as_array.values = values; \ - Dart_PostCObject(thePort, &out); \ - } - - if (fdArg->type == Dart_CObject_kInt32) { - fd = (int64_t)fdArg->value.as_int32; - } else { - fd = fdArg->value.as_int64; - } - - if (fd != -1) { - http_parser_settings settings; - - settings.on_message_begin = [](http_parser *parser) { return 0; }; - - settings.on_headers_complete = [](http_parser *parser) { - Dart_CObject type; - type.type = Dart_CObject_kInt32; - type.value.as_int32 = 2; - Dart_CObject value; - value.type = Dart_CObject_kInt32; - value.value.as_int32 = parser->method; - Dart_CObject *values[2] = {&type, &value}; - Dart_CObject out; - out.type = Dart_CObject_kArray; - out.value.as_array.length = 2; - out.value.as_array.values = values; - Dart_PostCObject(thePort, &out); - sendInt(100); - return 0; - }; - - settings.on_message_complete = [](http_parser *parser) { - sendInt(200); - return 0; - }; - - settings.on_chunk_complete = [](http_parser *parser) { return 0; }; - - settings.on_chunk_header = [](http_parser *parser) { return 0; }; - - settings.on_url = [](http_parser *parser, const char *at, size_t length) { - sendString(0); - return 0; - }; - - settings.on_header_field = [](http_parser *parser, const char *at, - size_t length) { - theStruct.lastHeader = std::string(at, length); - return 0; - }; - - settings.on_header_value = [](http_parser *parser, const char *at, - size_t length) { - if (!theStruct.lastHeader.empty()) { - std::string vStr(at, length); - Dart_CObject type; - type.type = Dart_CObject_kInt32; - type.value.as_int32 = 1; - Dart_CObject name; - name.type = Dart_CObject_kString; - name.value.as_string = (char *)theStruct.lastHeader.c_str(); - Dart_CObject value; - value.type = Dart_CObject_kString; - value.value.as_string = (char *)vStr.c_str(); - Dart_CObject *values[3] = {&type, &name, &value}; - Dart_CObject out; - out.type = Dart_CObject_kArray; - out.value.as_array.length = 3; - out.value.as_array.values = values; - Dart_PostCObject(thePort, &out); - theStruct.lastHeader.clear(); - } - return 0; - }; - - settings.on_body = [](http_parser *parser, const char *at, size_t length) { - Dart_CObject obj; - obj.type = Dart_CObject_kTypedData; - obj.value.as_typed_data.type = Dart_TypedData_kUint8; - obj.value.as_typed_data.length = length; - obj.value.as_typed_data.values = (uint8_t *)at; - Dart_PostCObject(thePort, &obj); - return 0; - }; - - size_t len = 80 * 1024, nparsed = 0; - char buf[len]; - ssize_t recved = 0; - memset(buf, 0, sizeof(buf)); - // http_parser parser; - auto *parser = (http_parser *)malloc(sizeof(http_parser)); - http_parser_init(parser, HTTP_BOTH); - parser->data = &httpData; - - while ((recved = recv(fd, buf, len, 0)) >= 0) { - if (false) // (isUpgrade) - { - // send_string(&parser, buf, (size_t)recved, 7, true); - } else { - /* Start up / continue the parser. - * Note we pass recved==0 to signal that EOF has been received. - */ - nparsed = http_parser_execute(parser, &settings, buf, recved); - - if (nparsed != recved) { - // TODO: End it...! - } else if (recved == 0) { - break; - } - - // if ((isUpgrade = parser.upgrade) == 1) - // { - // send_notification(&parser, 6); - // } - // else if (nparsed != recved) - // { - // close(rq->sock); - // return; - // } - } - - // memset(buf, 0, len); - } - } -} \ No newline at end of file diff --git a/archived_packages/wings/lib/src/libangel_wings.dylib b/archived_packages/wings/lib/src/libangel_wings.dylib deleted file mode 100644 index fbcfc38188574ed279f085ca435f002706c97dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196292 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 Vly`l^&VHoSlIZD5cF=L0{|`0zG)Vve diff --git a/archived_packages/wings/lib/src/libangel_wings.so b/archived_packages/wings/lib/src/libangel_wings.so deleted file mode 100644 index 92b8f107d8aec0992addc11a120352298eaac5fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157936 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 RgB<)9XBGbT1Ryyr{s;XChK2wD diff --git a/archived_packages/wings/lib/src/util.cc b/archived_packages/wings/lib/src/util.cc deleted file mode 100644 index 227f4e24..00000000 --- a/archived_packages/wings/lib/src/util.cc +++ /dev/null @@ -1,146 +0,0 @@ -#include - -#include "angel_wings.h" -#include "wings_socket.h" -#include -#include -using namespace wings; - -void Dart_WingsSocket_listen(Dart_NativeArguments arguments) { - uint64_t ptr; - Dart_Handle pointerHandle = Dart_GetNativeArgument(arguments, 0); - HandleError(Dart_IntegerToUint64(pointerHandle, &ptr)); - - auto *socket = (WingsSocket *)ptr; - socket->start(arguments); -} - -struct wingsSockName { - sa_family_t family; - sockaddr_in v4; - sockaddr_in6 v6; - - struct sockaddr *ptr() const { - if (family == AF_INET6) { - return (sockaddr *)&v6; - } else { - return (sockaddr *)&v4; - } - } - - void *addrPtr() const { - if (family == AF_INET6) { - return (void *)&v6.sin6_addr; - } else { - return (void *)&v4.sin_addr; - } - } - - socklen_t length() const { - if (family == AF_INET6) { - return sizeof(v6); - } else { - return sizeof(v4); - } - } -}; - -void wingsThrowOSError() { - wingsThrowError(strerror(errno), "dart:io", "OSError", errno); -} - -bool wingsReadSocket(Dart_NativeArguments arguments, wingsSockName *out) { - uint64_t ptr; - Dart_Handle pointerHandle = Dart_GetNativeArgument(arguments, 0); - HandleError(Dart_IntegerToUint64(pointerHandle, &ptr)); - - auto *socket = (WingsSocket *)ptr; - int fd = socket->getFD(); - - socklen_t len; - out->family = socket->getFamily(); - len = out->length(); - - int result; - - // result = connect(fd, out->ptr(), len); - - // if (result < 0) - // { - // wingsThrowOSError(); - // return false; - // } - - result = getsockname(fd, out->ptr(), &len); - - if (result == -1) { - wingsThrowOSError(); - return false; - } - - return true; -} - -void Dart_WingsSocket_getAddress(Dart_NativeArguments arguments) { - wingsSockName sock; - if (wingsReadSocket(arguments, &sock)) { - char addrBuf[INET6_ADDRSTRLEN + 1] = {0}; - - auto *result = - inet_ntop(sock.family, sock.addrPtr(), addrBuf, sock.length()); - - if (result == NULL) { - wingsThrowOSError(); - } - - Dart_Handle outHandle = Dart_NewStringFromCString(addrBuf); - Dart_SetReturnValue(arguments, outHandle); - } -} - -void Dart_WingsSocket_getPort(Dart_NativeArguments arguments) { - wingsSockName sock; - if (wingsReadSocket(arguments, &sock)) { - Dart_Handle outHandle; - - if (sock.family == AF_INET6) { - outHandle = Dart_NewIntegerFromUint64(ntohs(sock.v6.sin6_port)); - } else { - outHandle = Dart_NewIntegerFromUint64(ntohs(sock.v4.sin_port)); - } - - Dart_SetReturnValue(arguments, outHandle); - } -} - -void Dart_WingsSocket_write(Dart_NativeArguments arguments) { - int64_t fd; - void *data; - Dart_TypedData_Type type; - intptr_t len; - Dart_Handle fdHandle = Dart_GetNativeArgument(arguments, 0); - Dart_Handle dataHandle = Dart_GetNativeArgument(arguments, 1); - HandleError(Dart_IntegerToInt64(fdHandle, &fd)); - HandleError(Dart_TypedDataAcquireData(dataHandle, &type, &data, &len)); - write(fd, data, len); - HandleError(Dart_TypedDataReleaseData(dataHandle)); -} - -void Dart_WingsSocket_closeDescriptor(Dart_NativeArguments arguments) { - int64_t fd; - Dart_Handle fdHandle = Dart_GetNativeArgument(arguments, 0); - HandleError(Dart_IntegerToInt64(fdHandle, &fd)); - close(fd); -} - -void Dart_WingsSocket_close(Dart_NativeArguments arguments) { - Dart_Port port; - uint64_t ptr; - Dart_Handle pointerHandle = Dart_GetNativeArgument(arguments, 0); - Dart_Handle sendPortHandle = Dart_GetNativeArgument(arguments, 1); - HandleError(Dart_IntegerToUint64(pointerHandle, &ptr)); - HandleError(Dart_SendPortGetId(sendPortHandle, &port)); - - auto *socket = (WingsSocket *)ptr; - socket->decrRef(port); -} \ No newline at end of file diff --git a/archived_packages/wings/lib/src/wings_driver.dart b/archived_packages/wings/lib/src/wings_driver.dart deleted file mode 100644 index 003bbcb5..00000000 --- a/archived_packages/wings/lib/src/wings_driver.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io' show Cookie; -import 'dart:typed_data'; -import 'package:angel_framework/angel_framework.dart'; -import 'wings_request.dart'; -import 'wings_response.dart'; -import 'wings_socket.dart'; - -Future startSharedWings(dynamic addr, int port) { - return WingsSocket.bind(addr, port, shared: true); -} - -class AngelWings extends Driver { - factory AngelWings(Angel app) { - return AngelWings.custom(app, WingsSocket.bind); - } - - AngelWings.custom( - Angel app, Future Function(dynamic, int) serverGenerator) - : super(app, serverGenerator); - - @override - void addCookies(int? response, Iterable cookies) { - for (var cookie in cookies) { - setHeader(response, 'set-cookie', cookie.toString()); - } - } - - @override - Future close() async { - await server?.close(); - return super.close(); - } - - @override - Future closeResponse(int? response) { - closeNativeSocketDescriptor(response); - return Future.value(); - } - - @override - Future createRequestContext( - WingsClientSocket request, int? response) { - return WingsRequestContext.from(app, request); - } - - @override - Future createResponseContext( - WingsClientSocket request, int? response, - [WingsRequestContext? correspondingRequest]) { - return Future.value(WingsResponseContext( - app, request.fileDescriptor, correspondingRequest)); - } - - @override - Stream createResponseStreamFromRawRequest(WingsClientSocket request) { - return Stream.fromIterable([request.fileDescriptor]); - } - - @override - void setChunkedEncoding(int? response, bool value) { - // TODO: implement setChunkedEncoding - } - - @override - void setContentLength(int? response, int length) { - writeStringToResponse(response, 'content-length: $length\r\n'); - } - - @override - void setHeader(int? response, String key, String value) { - writeStringToResponse(response, '$key: $value\r\n'); - } - - @override - void setStatusCode(int? response, int value) { - // HTTP-Version SP Status-Code SP Reason-Phrase CRLF - writeStringToResponse(response, 'HTTP/1.1 $value\r\n'); - } - - @override - Uri get uri { - return Uri(scheme: 'http', host: server!.address.address, port: server!.port); - } - - @override - void writeStringToResponse(int? response, String value) { - writeToResponse(response, utf8.encode(value)); - } - - @override - void writeToResponse(int? response, List data) { - var buf = data is Uint8List ? data : Uint8List.fromList(data); - writeToNativeSocket(response, buf); - } -} diff --git a/archived_packages/wings/lib/src/wings_request.dart b/archived_packages/wings/lib/src/wings_request.dart deleted file mode 100644 index 90781169..00000000 --- a/archived_packages/wings/lib/src/wings_request.dart +++ /dev/null @@ -1,218 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'dart:isolate'; -import 'dart:typed_data'; -import 'package:angel_container/angel_container.dart'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:mock_request/mock_request.dart'; -import 'wings_socket.dart'; - -//enum _ParseState { method, url, headerField, headerValue, body } - -final RegExp _straySlashes = RegExp(r'(^/+)|(/+$)'); - -class WingsRequestContext extends RequestContext { - @override - final WingsClientSocket rawRequest; - @override - final Container container; - - final StreamController> _body = StreamController(); - List? _cookies, __cookies; - final LockableMockHttpHeaders _headers = LockableMockHttpHeaders(); - final RawReceivePort _recv; - late InternetAddress _remoteAddress; - String? _method, _override, _path; - Uri? _uri; - - @override - Angel? app; - - WingsRequestContext._(Angel this.app, this.rawRequest, this._recv) - : container = app.container!.createChild(); - - @override - Future close() async { - await _body.close(); - _recv.close(); - await super.close(); - } - - static const int DELETE = 0, - GET = 1, - HEAD = 2, - POST = 3, - PUT = 4, - CONNECT = 5, - OPTIONS = 6, - TRACE = 7, - COPY = 8, - LOCK = 9, - MKCOL = 10, - MOVE = 11, - PROPFIND = 12, - PROPPATCH = 13, - SEARCH = 14, - UNLOCK = 15, - BIND = 16, - REBIND = 17, - UNBIND = 18, - ACL = 19, - REPORT = 20, - MKACTIVITY = 21, - CHECKOUT = 22, - MERGE = 23, - MSEARCH = 24, - NOTIFY = 25, - SUBSCRIBE = 26, - UNSUBSCRIBE = 27, - PATCH = 28, - PURGE = 29, - MKCALENDAR = 30, - LINK = 31, - UNLINK = 32, - SOURCE = 33; - - static String methodToString(int method) { - switch (method) { - case DELETE: - return 'DELETE'; - case GET: - return 'GET'; - case HEAD: - return 'HEAD'; - case POST: - return 'POST'; - case PUT: - return 'PUT'; - case CONNECT: - return 'CONNECT'; - case OPTIONS: - return 'OPTIONS'; - case PATCH: - return 'PATCH'; - case PURGE: - return 'PURGE'; - default: - throw ArgumentError('Unknown method $method.'); - } - } - - static Future from(Angel app, WingsClientSocket socket) { - // var state = _ParseState.url; - var c = Completer(); - var recv = RawReceivePort(); - var rq = WingsRequestContext._(app, socket, recv); - rq._remoteAddress = socket.remoteAddress; - var ct = StreamController(); - recv.handler = ct.add; - recv.handler = (ee) { - if (ee is Uint8List) { - if (!rq._body.isClosed) rq._body.add(ee); - } else if (ee is List) { - var type = ee[0] as int; - - if (type == 2) { - rq._method = methodToString(ee[1] as int); - } else { - var value = ee[1] as String; - - if (type == 0) { - rq._uri = Uri.parse(value); - var path = rq._uri!.path.replaceAll(_straySlashes, ''); - if (path.isEmpty) path = '/'; - rq._path = path; - } else if (type == 1) { - var k = value, v = ee[2] as String; - if (k == 'cookie') { - rq.__cookies!.add(Cookie.fromSetCookieValue(v)); - } else { - rq._headers.add(k, v); - } - } else { - // print("h: $ee');"); - } - } - } else if (ee == 100) { - // Headers done, just listen for body. - c.complete(rq); - } else if (ee == 200) { - // Message complete. - rq._body.close(); - } - // if (state == _ParseState.url) { - // rq._uri = Uri.parse(e as String); - // var path = rq._uri.path.replaceAll(_straySlashes, ''); - // if (path.isEmpty) path = '/'; - // rq._path = path; - // state = _ParseState.headerField; - // } else if (state == _ParseState.headerField) { - // if (e == 0) { - // state = _ParseState.method; - // } else { - // lastHeader = e as String; //Uri.decodeFull(e as String); - // state = _ParseState.headerValue; - // } - // } else if (state == _ParseState.headerValue) { - // if (e == 0) { - // state = _ParseState.method; - // } else { - // var value = e as String; //Uri.decodeFull(e as String); - // if (lastHeader != null) { - // if (lastHeader == 'cookie') { - // rq.__cookies.add(Cookie.fromSetCookieValue(value)); - // } else { - // rq._headers.add(lastHeader, value); - // } - // lastHeader = null; - // } - // } - // state = _ParseState.headerField; - // } else if (state == _ParseState.method) { - // rq._method = methodToString(e as int); - // state = _ParseState.body; - // c.complete(rq); - // } else if (state == _ParseState.body) { - // if (e == 1) { - // rq._body.close(); - // } else { - // rq._body.add(e as List); - // } - // } - }; - wingsParseHttp().send([recv.sendPort, socket.fileDescriptor]); - return c.future; - } - - @override - Stream> get body => _body.stream; - - @override - List get cookies => _cookies ??= List.unmodifiable(__cookies!); - - @override - HttpHeaders get headers => _headers; - - @override - String get hostname => headers.value('host')!; - - @override - String get method => (_override ??= - (headers.value('x-http-method-override')?.toUpperCase() ?? _method))!; - - @override - String get originalMethod => _method!; - - @override - String get path => _path!; - - @override - InternetAddress get remoteAddress => _remoteAddress; - - @override - // TODO: implement session - HttpSession? get session => null; - - @override - Uri? get uri => _uri; -} diff --git a/archived_packages/wings/lib/src/wings_response.dart b/archived_packages/wings/lib/src/wings_response.dart deleted file mode 100644 index 2747a829..00000000 --- a/archived_packages/wings/lib/src/wings_response.dart +++ /dev/null @@ -1,213 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; -import 'dart:typed_data'; -import 'package:angel_framework/angel_framework.dart'; -import 'package:charcode/ascii.dart'; -import 'wings_request.dart'; -import 'wings_socket.dart'; - -class WingsResponseContext extends ResponseContext { - @override - final Angel app; - - @override - final WingsRequestContext? correspondingRequest; - - LockableBytesBuilder? _buffer; - - @override - final int? rawResponse; - - bool _isDetached = false, _isClosed = false, _streamInitialized = false; - - WingsResponseContext(this.app, this.rawResponse, [this.correspondingRequest]); - - Iterable? __allowedEncodings; - - Iterable? get _allowedEncodings { - return __allowedEncodings ??= correspondingRequest!.headers - .value('accept-encoding') - ?.split(',') - .map((s) => s.trim()) - .where((s) => s.isNotEmpty) - .map((str) { - // Ignore quality specifications in accept-encoding - // ex. gzip;q=0.8 - if (!str.contains(';')) return str; - return str.split(';')[0]; - }); - } - - bool _openStream() { - if (!_streamInitialized) { - // If this is the first stream added to this response, - // then add headers, status code, etc. - var outHeaders = {}; - var statusLine = - utf8.encode('HTTP/1.1 $statusCode').followedBy([$cr, $lf]); - writeToNativeSocket(rawResponse, Uint8List.fromList(statusLine.toList())); - - headers.forEach((k, v) => outHeaders[k] = v); - - if (headers.containsKey('content-length')) { - var l = int.tryParse(headers['content-length']!); - if (l != null) { - outHeaders['content-length'] = l.toString(); - } - } - - outHeaders['content-type'] = contentType.toString(); - - if (encoders.isNotEmpty && correspondingRequest != null) { - if (_allowedEncodings != null) { - for (var encodingName in _allowedEncodings!) { - Converter, List>? encoder; - var key = encodingName; - - if (encoders.containsKey(encodingName)) { - encoder = encoders[encodingName]; - } else if (encodingName == '*') { - encoder = encoders[key = encoders.keys.first]; - } - - if (encoder != null) { - outHeaders['content-encoding'] = key; - break; - } - } - } - } - - void _wh(String k, String v) { - // var vv =Uri.encodeComponent(v); - var vv = v; - var headerLine = utf8.encode('$k: $vv').followedBy([$cr, $lf]); - writeToNativeSocket( - rawResponse, Uint8List.fromList(headerLine.toList())); - } - - outHeaders.forEach(_wh); - - for (var c in cookies) { - _wh('set-cookie', c.toString()); - } - - writeToNativeSocket(rawResponse, Uint8List.fromList([$cr, $lf])); - - //_isClosed = true; - return _streamInitialized = true; - } - - return false; - } - - @override - Future addStream(Stream> stream) { - if (_isClosed && isBuffered) throw ResponseContext.closed(); - _openStream(); - - var output = stream; - - if (encoders.isNotEmpty && correspondingRequest != null) { - if (_allowedEncodings != null) { - for (var encodingName in _allowedEncodings!) { - Converter, List>? encoder; - var key = encodingName; - - if (encoders.containsKey(encodingName)) { - encoder = encoders[encodingName]; - } else if (encodingName == '*') { - encoder = encoders[key = encoders.keys.first]; - } - - if (encoder != null) { - output = encoders[key]!.bind(output); - break; - } - } - } - } - - return output.forEach((buf) { - if (!_isClosed) { - writeToNativeSocket( - rawResponse, buf is Uint8List ? buf : Uint8List.fromList(buf)); - } - }); - } - - @override - void add(List data) { - if (_isClosed && isBuffered) { - throw ResponseContext.closed(); - } else if (!isBuffered) { - if (!_isClosed) { - _openStream(); - - if (encoders.isNotEmpty && correspondingRequest != null) { - if (_allowedEncodings != null) { - for (var encodingName in _allowedEncodings!) { - Converter, List>? encoder; - var key = encodingName; - - if (encoders.containsKey(encodingName)) { - encoder = encoders[encodingName]; - } else if (encodingName == '*') { - encoder = encoders[key = encoders.keys.first]; - } - - if (encoder != null) { - data = encoders[key]!.convert(data); - break; - } - } - } - } - - writeToNativeSocket( - rawResponse, data is Uint8List ? data : Uint8List.fromList(data)); - } - } else { - buffer!.add(data); - } - } - - @override - Future close() async { - if (!_isDetached) { - if (!_isClosed) { - _isClosed = true; - if (!isBuffered) { - _openStream(); - closeNativeSocketDescriptor(rawResponse); - } else { - _buffer!.lock(); - } - } - - await correspondingRequest?.close(); - await super.close(); - } - } - - @override - BytesBuilder? get buffer => _buffer; - - @override - int detach() { - _isDetached = true; - return rawResponse!; - } - - @override - bool get isBuffered => _buffer != null; - - @override - bool get isOpen => !_isClosed && !_isDetached; - - @override - void useBuffer() { - _buffer = LockableBytesBuilder(); - } -} diff --git a/archived_packages/wings/lib/src/wings_socket.cc b/archived_packages/wings/lib/src/wings_socket.cc deleted file mode 100644 index 7105b2ee..00000000 --- a/archived_packages/wings/lib/src/wings_socket.cc +++ /dev/null @@ -1,129 +0,0 @@ -#include "wings_socket.h" -#include -#include -#include -using namespace wings; - -std::vector wings::globalSocketList; - -bool WingsSocketInfo::equals(const WingsSocketInfo &right) const { - // std::cout << address << " vs " << right.address << std::endl; - // std::cout << port << " vs " << right.port << std::endl; - return (strcmp(address, right.address) == 0) && port == right.port; -} - -WingsSocket::WingsSocket(sa_family_t family, int sockfd, - const WingsSocketInfo &info) - : sockfd(sockfd), info(info), family(family) { - portIterator = sendPorts.begin(); - open = true; - refCount = 0; - workerThread = nullptr; - this->info.address = strdup(info.address); -} - -void WingsSocket::incrRef(Dart_Port port) { - refCount++; - sendPorts.push_back(port); -} - -void WingsSocket::decrRef(Dart_Port port) { - auto it = std::find(sendPorts.begin(), sendPorts.end(), port); - - if (it != sendPorts.end()) { - sendPorts.erase(it); - } - - refCount--; - - if (refCount <= 0 && open) { - close(sockfd); - open = false; - } -} - -Dart_Port WingsSocket::nextPort() { - portIterator++; - if (portIterator == sendPorts.end()) - portIterator = sendPorts.begin(); - return *portIterator; -} - -const WingsSocketInfo &WingsSocket::getInfo() const { return info; } - -int WingsSocket::getFD() const { return sockfd; } - -sa_family_t WingsSocket::getFamily() const { return family; } - -bool WingsSocket::isClosed() const { return !open; } - -void WingsSocket::start(Dart_NativeArguments arguments) { - // if (workerThread == nullptr) - // { - // workerThread = std::make_unique(threadCallback, this); - // } - Dart_Port service_port = - Dart_NewNativePort("WingsThreadCallback", &threadCallback, true); - Dart_Handle send_port = Dart_NewSendPort(service_port); - Dart_SetReturnValue(arguments, send_port); -} - -void WingsSocket::threadCallback(Dart_Port dest_port_id, - Dart_CObject *message) { - - WingsSocket *socket = nullptr; - Dart_Port outPort = message->value.as_array.values[0]->value.as_send_port.id; - Dart_CObject *ptrArg = message->value.as_array.values[1]; - - // If there are no listeners, quit. - if (ptrArg->type == Dart_CObject_kInt32) { - auto as64 = (int64_t)ptrArg->value.as_int32; - socket = (WingsSocket *)as64; - } else { - socket = (WingsSocket *)ptrArg->value.as_int64; - } - - if (socket != nullptr) { - if (socket->sendPorts.empty() || socket->isClosed()) { - return; - } - - int sock; - unsigned long index = 0; - sockaddr addr; - socklen_t len; - - if ((sock = accept(socket->sockfd, &addr, &len)) != -1) { - char addrBuf[INET6_ADDRSTRLEN] = {0}; - - if (addr.sa_family == AF_INET6) { - auto as6 = (sockaddr_in6 *)&addr; - inet_ntop(addr.sa_family, &(as6->sin6_addr), addrBuf, len); - } else { - auto as4 = (sockaddr_in *)&addr; - inet_ntop(AF_INET, &(as4->sin_addr), addrBuf, len); - } - - Dart_CObject fdObj; - fdObj.type = Dart_CObject_kInt64; - fdObj.value.as_int64 = sock; - - Dart_CObject addrObj; - addrObj.type = Dart_CObject_kString; - addrObj.value.as_string = addrBuf; - - Dart_CObject *values[2] = {&fdObj, &addrObj}; - - Dart_CObject obj; - obj.type = Dart_CObject_kArray; - obj.value.as_array.length = 2; - obj.value.as_array.values = values; - - // Dart_PostCObject(outPort, &obj); - // Dispatch the fd to the next listener. - auto port = socket->nextPort(); - Dart_PostCObject(port, &obj); - // Dart_PostCObject(outPort, &obj); - } - } -} \ No newline at end of file diff --git a/archived_packages/wings/lib/src/wings_socket.dart b/archived_packages/wings/lib/src/wings_socket.dart deleted file mode 100644 index 303459fe..00000000 --- a/archived_packages/wings/lib/src/wings_socket.dart +++ /dev/null @@ -1,130 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'dart:isolate'; -import 'dart:typed_data'; -import 'dart-ext:angel_wings'; - -int bindWingsIPv4ServerSocket( - String address, - int port, - bool shared, - int backlog, - bool v6Only, - SendPort sendPort) native 'Dart_WingsSocket_bindIPv4'; - -int bindWingsIPv6ServerSocket( - String address, - int port, - bool shared, - int backlog, - bool v6Only, - SendPort sendPort) native 'Dart_WingsSocket_bindIPv6'; - -String getWingsServerSocketAddress(int pointer) - native 'Dart_WingsSocket_getAddress'; - -int getWingsServerSocketPort(int pointer) native 'Dart_WingsSocket_getPort'; - -void writeToNativeSocket(int? fd, Uint8List data) - native 'Dart_WingsSocket_write'; - -void closeNativeSocketDescriptor(int? fd) - native 'Dart_WingsSocket_closeDescriptor'; - -SendPort wingsSocketListen(int pointer) native 'Dart_WingsSocket_listen'; - -void closeWingsSocket(int pointer, SendPort sendPort) - native 'Dart_WingsSocket_close'; - -SendPort wingsParseHttp() native 'Dart_WingsSocket_parseHttp'; - -class WingsClientSocket { - final int? fileDescriptor; - final InternetAddress remoteAddress; - - WingsClientSocket(this.fileDescriptor, this.remoteAddress); -} - -class WingsSocket extends Stream { - final StreamController _ctrl = StreamController(); - late SendPort _acceptor; - InternetAddress? _address; - final int _pointer; - final RawReceivePort _recv; - bool _open = true; - int? _port; - - WingsSocket._(this._pointer, this._recv) { - _acceptor = wingsSocketListen(_pointer); - _recv.handler = (h) { - if (!_ctrl.isClosed) { - _ctrl.add( - WingsClientSocket(h[0] as int?, InternetAddress(h[1] as String))); - _acceptor.send([_recv.sendPort, _pointer]); - } - }; - - _acceptor.send([_recv.sendPort, _pointer]); - } - - static Future bind(address, int port, - {bool shared = false, int backlog = 0, bool v6Only = false}) async { - var recv = RawReceivePort(); - int ptr; - InternetAddress addr; - - if (address is InternetAddress) { - addr = address; - } else if (address is String) { - var addrs = await InternetAddress.lookup(address); - if (addrs.isNotEmpty) { - addr = addrs[0]; - } else { - throw StateError('Internet address lookup failed: $address'); - } - } else { - throw ArgumentError.value( - address, 'address', 'must be an InternetAddress or String'); - } - - try { - if (addr.type == InternetAddressType.IPv6) { - ptr = bindWingsIPv6ServerSocket( - addr.address, port, shared, backlog, v6Only, recv.sendPort); - } else { - ptr = bindWingsIPv4ServerSocket( - addr.address, port, shared, backlog, v6Only, recv.sendPort); - } - - return WingsSocket._(ptr, recv); //.._address = addr; - } catch (e) { - recv.close(); - rethrow; - } - } - - InternetAddress get address => - _address ??= InternetAddress(getWingsServerSocketAddress(_pointer)); - - int get port => _port ??= getWingsServerSocketPort(_pointer); - - @override - StreamSubscription listen( - void Function(WingsClientSocket event)? onData, - {Function? onError, - void Function()? onDone, - bool? cancelOnError}) { - return _ctrl.stream - .listen(onData, onError: onError, cancelOnError: cancelOnError); - } - - Future close(){ - if (_open) { - _open = false; - closeWingsSocket(_pointer, _recv.sendPort); - _recv.close(); - _ctrl.close(); - } - return Future.value(); - } -} diff --git a/archived_packages/wings/lib/src/wings_socket.h b/archived_packages/wings/lib/src/wings_socket.h deleted file mode 100644 index 37336917..00000000 --- a/archived_packages/wings/lib/src/wings_socket.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef WINGS_SOCKET_H -#define WINGS_SOCKET_H -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace wings { -struct WingsSocketInfo { - const char *address; - uint64_t port; - bool shared; - uint64_t backlog; - bool v6Only; - Dart_Handle sendPortHandle; - bool equals(const WingsSocketInfo &right) const; -}; - -class WingsSocket { -public: - WingsSocket(sa_family_t family, int sockfd, const WingsSocketInfo &info); - void incrRef(Dart_Port port); - void decrRef(Dart_Port port); - const WingsSocketInfo &getInfo() const; - void start(Dart_NativeArguments arguments); - int getFD() const; - bool isClosed() const; - sa_family_t getFamily() const; - Dart_Port nextPort(); - -private: - static void threadCallback(Dart_Port dest_port_id, Dart_CObject *message); - WingsSocketInfo info; - std::list::iterator portIterator; - int sockfd; - int refCount; - bool open; - sa_family_t family; - std::unique_ptr workerThread; - std::list sendPorts; -}; - -extern std::vector globalSocketList; -} // namespace wings - -#endif \ No newline at end of file diff --git a/archived_packages/wings/libangel_wings.dylib b/archived_packages/wings/libangel_wings.dylib deleted file mode 100644 index fbcfc38188574ed279f085ca435f002706c97dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196292 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 Vly`l^&VHoSlIZD5cF=L0{|`0zG)Vve diff --git a/archived_packages/wings/libangel_wings.so b/archived_packages/wings/libangel_wings.so deleted file mode 100644 index 92b8f107d8aec0992addc11a120352298eaac5fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157936 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 RgB<)9XBGbT1Ryyr{s;XChK2wD diff --git a/archived_packages/wings/provision.sh b/archived_packages/wings/provision.sh deleted file mode 100644 index 345eb439..00000000 --- a/archived_packages/wings/provision.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -# Install Dart, globally. -sudo apt-get update -sudo apt-get install apt-transport-https -sudo sh -c 'curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' -sudo sh -c 'curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list' -sudo apt-get update -sudo apt-get install -y dart -export PATH="$PATH:/usr/lib/dart/bin" -echo 'export PATH="$PATH:/usr/lib/dart/bin"' >> ~vagrant/.profile - -# Install build tooling, CMake, etc. -sudo apt-get install -y build-essential -sudo apt-get install -y cmake - -# Build the library. -pushd /vagrant -mkdir -p cmake-build-vagrant -pushd cmake-build-vagrant -cmake .. -cmake --build . --target install -popd -popd diff --git a/archived_packages/wings/pubspec.yaml b/archived_packages/wings/pubspec.yaml deleted file mode 100644 index b21d79a3..00000000 --- a/archived_packages/wings/pubspec.yaml +++ /dev/null @@ -1,31 +0,0 @@ -name: angel_wings -version: 1.0.0 -description: Native HTTP driver for Angel, for a nice speed boost. -homepage: https://github.com/angel-dart/wings -publish_to: none -environment: - sdk: '>=2.12.0 <3.0.0' -dependencies: - angel_framework: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/framework - mock_request: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/mock_request -dev_dependencies: - angel_static: #^2.0.0 - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/static - io: ^1.0.0 - lints: ^1.0.0 - pretty_logging: - git: - url: https://github.com/dukefirehawk/angel.git - ref: sdk-2.12.x_nnbd - path: packages/pretty_logging diff --git a/archived_packages/wings/ubuntu-bionic-18.04-cloudimg-console.log b/archived_packages/wings/ubuntu-bionic-18.04-cloudimg-console.log deleted file mode 100644 index 63e6554b..00000000 --- a/archived_packages/wings/ubuntu-bionic-18.04-cloudimg-console.log +++ /dev/null @@ -1,672 +0,0 @@ -[ 0.000000] Linux version 4.15.0-60-generic (buildd@lgw01-amd64-030) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #67-Ubuntu SMP Thu Aug 22 16:55:30 UTC 2019 (Ubuntu 4.15.0-60.67-generic 4.15.18) -[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.15.0-60-generic root=LABEL=cloudimg-rootfs ro console=tty1 console=ttyS0 -[ 0.000000] KERNEL supported cpus: -[ 0.000000] Intel GenuineIntel -[ 0.000000] AMD AuthenticAMD -[ 0.000000] Centaur CentaurHauls -[ 0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' -[ 0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' -[ 0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' -[ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 -[ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. -[ 0.000000] e820: BIOS-provided physical RAM map: -[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable -[ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved -[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved -[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003ffeffff] usable -[ 0.000000] BIOS-e820: [mem 0x000000003fff0000-0x000000003fffffff] ACPI data -[ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved -[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved -[ 0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved -[ 0.000000] NX (Execute Disable) protection: active -[ 0.000000] SMBIOS 2.5 present. -[ 0.000000] DMI: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 -[ 0.000000] Hypervisor detected: KVM -[ 0.000000] e820: last_pfn = 0x3fff0 max_arch_pfn = 0x400000000 -[ 0.000000] MTRR: Disabled -[ 0.000000] x86/PAT: MTRRs disabled, skipping PAT initialization too. -[ 0.000000] CPU MTRRs all blank - virtualized system. -[ 0.000000] x86/PAT: Configuration [0-7]: WB WT UC- UC WB WT UC- UC -[ 0.000000] found SMP MP-table at [mem 0x0009fff0-0x0009ffff] -[ 0.000000] Scanning 1 areas for low memory corruption -[ 0.000000] RAMDISK: [mem 0x35a8b000-0x36d3cfff] -[ 0.000000] ACPI: Early table checksum verification disabled -[ 0.000000] ACPI: RSDP 0x00000000000E0000 000024 (v02 VBOX ) -[ 0.000000] ACPI: XSDT 0x000000003FFF0030 00003C (v01 VBOX VBOXXSDT 00000001 ASL 00000061) -[ 0.000000] ACPI: FACP 0x000000003FFF00F0 0000F4 (v04 VBOX VBOXFACP 00000001 ASL 00000061) -[ 0.000000] ACPI: DSDT 0x000000003FFF0470 0022EA (v02 VBOX VBOXBIOS 00000002 INTL 20100528) -[ 0.000000] ACPI: FACS 0x000000003FFF0200 000040 -[ 0.000000] ACPI: FACS 0x000000003FFF0200 000040 -[ 0.000000] ACPI: APIC 0x000000003FFF0240 00005C (v02 VBOX VBOXAPIC 00000001 ASL 00000061) -[ 0.000000] ACPI: SSDT 0x000000003FFF02A0 0001CC (v01 VBOX VBOXCPUT 00000002 INTL 20100528) -[ 0.000000] No NUMA configuration found -[ 0.000000] Faking a node at [mem 0x0000000000000000-0x000000003ffeffff] -[ 0.000000] NODE_DATA(0) allocated [mem 0x3ffc5000-0x3ffeffff] -[ 0.000000] kvm-clock: cpu 0, msr 0:3ff44001, primary cpu clock -[ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00 -[ 0.000000] kvm-clock: using sched offset of 6313796290 cycles -[ 0.000000] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns -[ 0.000000] Zone ranges: -[ 0.000000] DMA [mem 0x0000000000001000-0x0000000000ffffff] -[ 0.000000] DMA32 [mem 0x0000000001000000-0x000000003ffeffff] -[ 0.000000] Normal empty -[ 0.000000] Device empty -[ 0.000000] Movable zone start for each node -[ 0.000000] Early memory node ranges -[ 0.000000] node 0: [mem 0x0000000000001000-0x000000000009efff] -[ 0.000000] node 0: [mem 0x0000000000100000-0x000000003ffeffff] -[ 0.000000] Reserved but unavailable: 98 pages -[ 0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x000000003ffeffff] -[ 0.000000] ACPI: PM-Timer IO Port: 0x4008 -[ 0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23 -[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) -[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level) -[ 0.000000] Using ACPI (MADT) for SMP configuration information -[ 0.000000] smpboot: Allowing 2 CPUs, 0 hotplug CPUs -[ 0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff] -[ 0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff] -[ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000effff] -[ 0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff] -[ 0.000000] e820: [mem 0x40000000-0xfebfffff] available for PCI devices -[ 0.000000] Booting paravirtualized kernel on KVM -[ 0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns -[ 0.000000] random: get_random_bytes called from start_kernel+0x99/0x4fd with crng_init=0 -[ 0.000000] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:2 nr_cpu_ids:2 nr_node_ids:1 -[ 0.000000] percpu: Embedded 46 pages/cpu s151552 r8192 d28672 u1048576 -[ 0.000000] PV qspinlock hash table entries: 256 (order: 0, 4096 bytes) -[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 257913 -[ 0.000000] Policy zone: DMA32 -[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.15.0-60-generic root=LABEL=cloudimg-rootfs ro console=tty1 console=ttyS0 -[ 0.000000] Memory: 983440K/1048120K available (12300K kernel code, 2481K rwdata, 4172K rodata, 2436K init, 2384K bss, 64680K reserved, 0K cma-reserved) -[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 -[ 0.000000] Kernel/User page tables isolation: enabled -[ 0.000000] ftrace: allocating 39306 entries in 154 pages -[ 0.004000] Hierarchical RCU implementation. -[ 0.004000] RCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=2. -[ 0.004000] Tasks RCU enabled. -[ 0.004000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2 -[ 0.004000] NR_IRQS: 524544, nr_irqs: 440, preallocated irqs: 16 -[ 0.004000] Console: colour VGA+ 80x25 -[ 0.004000] console [tty1] enabled -[ 0.004000] console [ttyS0] enabled -[ 0.004000] ACPI: Core revision 20170831 -[ 0.004000] ACPI: 2 ACPI AML tables successfully acquired and loaded -[ 0.004000] APIC: Switch to symmetric I/O mode setup -[ 0.004000] x2apic enabled -[ 0.004000] Switched APIC routing to physical x2apic. -[ 0.005261] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 -[ 0.008004] tsc: Detected 1799.999 MHz processor -[ 0.012012] Calibrating delay loop (skipped) preset value.. 3599.99 BogoMIPS (lpj=7199996) -[ 0.014430] pid_max: default: 32768 minimum: 301 -[ 0.016036] Security Framework initialized -[ 0.017257] Yama: becoming mindful. -[ 0.018593] AppArmor: AppArmor initialized -[ 0.021844] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes) -[ 0.024088] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes) -[ 0.028022] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes) -[ 0.030085] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes) -[ 0.032346] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8 -[ 0.036002] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4 -[ 0.038331] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization -[ 0.040053] Spectre V2 : Mitigation: Full generic retpoline -[ 0.044003] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch -[ 0.047370] Speculative Store Bypass: Vulnerable -[ 0.048050] MDS: Vulnerable: Clear CPU buffers attempted, no microcode -[ 0.050738] Freeing SMP alternatives memory: 36K -[ 0.060000] smpboot: CPU0: Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz (family: 0x6, model: 0x3d, stepping: 0x4) -[ 0.060095] Performance Events: unsupported p6 CPU model 61 no PMU driver, software events only. -[ 0.063096] Hierarchical SRCU implementation. -[ 0.064650] NMI watchdog: Perf event create on CPU 0 failed with -2 -[ 0.066472] NMI watchdog: Perf NMI watchdog permanently disabled -[ 0.068053] smp: Bringing up secondary CPUs ... -[ 0.069490] x86: Booting SMP configuration: -[ 0.070770] .... node #0, CPUs: #1 -[ 0.004000] kvm-clock: cpu 1, msr 0:3ff44041, secondary cpu clock -[ 0.078095] smp: Brought up 1 node, 2 CPUs -[ 0.078095] smpboot: Max logical packages: 1 -[ 0.080007] smpboot: Total of 2 processors activated (7199.99 BogoMIPS) -[ 0.085029] devtmpfs: initialized -[ 0.085718] x86/mm: Memory block size: 128MB -[ 0.088152] evm: security.selinux -[ 0.089578] evm: security.SMACK64 -[ 0.090723] evm: security.SMACK64EXEC -[ 0.092005] evm: security.SMACK64TRANSMUTE -[ 0.093324] evm: security.SMACK64MMAP -[ 0.094789] evm: security.apparmor -[ 0.096003] evm: security.ima -[ 0.097270] evm: security.capability -[ 0.100127] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns -[ 0.104010] futex hash table entries: 512 (order: 3, 32768 bytes) -[ 0.108000] pinctrl core: initialized pinctrl subsystem -[ 0.108153] RTC time: 4:37:25, date: 09/29/19 -[ 0.112223] NET: Registered protocol family 16 -[ 0.114097] audit: initializing netlink subsys (disabled) -[ 0.116040] audit: type=2000 audit(1569731852.938:1): state=initialized audit_enabled=0 res=1 -[ 0.120020] cpuidle: using governor ladder -[ 0.121972] cpuidle: using governor menu -[ 0.124054] ACPI: bus type PCI registered -[ 0.125660] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5 -[ 0.128144] PCI: Using configuration type 1 for base access -[ 0.132420] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages -[ 0.136070] ACPI: Added _OSI(Module Device) -[ 0.137755] ACPI: Added _OSI(Processor Device) -[ 0.139558] ACPI: Added _OSI(3.0 _SCP Extensions) -[ 0.140012] ACPI: Added _OSI(Processor Aggregator Device) -[ 0.142205] ACPI: Added _OSI(Linux-Dell-Video) -[ 0.144009] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio) -[ 0.146265] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics) -[ 0.148559] ACPI: Executed 1 blocks of module-level executable AML code -[ 0.157460] ACPI: Interpreter enabled -[ 0.159031] ACPI: (supports S0 S5) -[ 0.160004] ACPI: Using IOAPIC for interrupt routing -[ 0.162232] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug -[ 0.164282] ACPI: Enabled 2 GPEs in block 00 to 07 -[ 0.177420] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) -[ 0.179619] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI] -[ 0.180559] acpi PNP0A03:00: _OSC: not requesting OS control; OS requires [ExtendedConfig ASPM ClockPM MSI] -[ 0.184016] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge. -[ 0.188599] PCI host bridge to bus 0000:00 -[ 0.190032] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window] -[ 0.192012] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window] -[ 0.196010] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window] -[ 0.198997] pci_bus 0000:00: root bus resource [mem 0x40000000-0xfdffffff window] -[ 0.200005] pci_bus 0000:00: root bus resource [bus 00-ff] -[ 0.209096] pci 0000:00:01.1: legacy IDE quirk: reg 0x10: [io 0x01f0-0x01f7] -[ 0.212011] pci 0000:00:01.1: legacy IDE quirk: reg 0x14: [io 0x03f6] -[ 0.214198] pci 0000:00:01.1: legacy IDE quirk: reg 0x18: [io 0x0170-0x0177] -[ 0.216011] pci 0000:00:01.1: legacy IDE quirk: reg 0x1c: [io 0x0376] -[ 0.250063] pci 0000:00:07.0: quirk: [io 0x4000-0x403f] claimed by PIIX4 ACPI -[ 0.252032] pci 0000:00:07.0: quirk: [io 0x4100-0x410f] claimed by PIIX4 SMB -[ 0.268428] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 9 10 *11) -[ 0.271342] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 9 *10 11) -[ 0.272177] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 *9 10 11) -[ 0.274371] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 9 10 *11) -[ 0.276529] SCSI subsystem initialized -[ 0.280075] pci 0000:00:02.0: vgaarb: setting as boot VGA device -[ 0.282678] pci 0000:00:02.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none -[ 0.284008] pci 0000:00:02.0: vgaarb: bridge control possible -[ 0.288007] vgaarb: loaded -[ 0.289501] ACPI: bus type USB registered -[ 0.292045] usbcore: registered new interface driver usbfs -[ 0.294316] usbcore: registered new interface driver hub -[ 0.296044] usbcore: registered new device driver usb -[ 0.300127] EDAC MC: Ver: 3.0.0 -[ 0.302311] PCI: Using ACPI for IRQ routing -[ 0.304830] NetLabel: Initializing -[ 0.308006] NetLabel: domain hash size = 128 -[ 0.310637] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO -[ 0.312043] NetLabel: unlabeled traffic allowed by default -[ 0.316129] clocksource: Switched to clocksource kvm-clock -[ 0.338523] VFS: Disk quotas dquot_6.6.0 -[ 0.340526] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes) -[ 0.344063] AppArmor: AppArmor Filesystem Enabled -[ 0.347415] pnp: PnP ACPI init -[ 0.354536] pnp: PnP ACPI: found 3 devices -[ 0.377986] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns -[ 0.384610] NET: Registered protocol family 2 -[ 0.391662] TCP established hash table entries: 8192 (order: 4, 65536 bytes) -[ 0.396743] TCP bind hash table entries: 8192 (order: 5, 131072 bytes) -[ 0.401916] TCP: Hash tables configured (established 8192 bind 8192) -[ 0.406238] UDP hash table entries: 512 (order: 2, 16384 bytes) -[ 0.409854] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) -[ 0.414792] NET: Registered protocol family 1 -[ 0.418002] pci 0000:00:00.0: Limiting direct PCI/PCI transfers -[ 0.423100] pci 0000:00:01.0: Activating ISA DMA hang workarounds -[ 0.427601] pci 0000:00:02.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff] -[ 0.434649] Unpacking initramfs... -[ 0.787407] Freeing initrd memory: 19144K -[ 0.789209] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x19f228ab7a2, max_idle_ns: 440795289252 ns -[ 0.793332] platform rtc_cmos: registered platform RTC device (no PNP device found) -[ 0.796800] Scanning for low memory corruption every 60 seconds -[ 0.799238] Initialise system trusted keyrings -[ 0.801081] Key type blacklist registered -[ 0.802821] workingset: timestamp_bits=36 max_order=18 bucket_order=0 -[ 0.805819] zbud: loaded -[ 0.807186] squashfs: version 4.0 (2009/01/31) Phillip Lougher -[ 0.810037] fuse init (API version 7.26) -[ 0.815469] Key type asymmetric registered -[ 0.816858] Asymmetric key parser 'x509' registered -[ 0.818479] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 246) -[ 0.821254] io scheduler noop registered -[ 0.822470] io scheduler deadline registered -[ 0.823827] io scheduler cfq registered (default) -[ 0.826132] ACPI: AC Adapter [AC] (on-line) -[ 0.827462] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input0 -[ 0.830032] ACPI: Power Button [PWRF] -[ 0.831785] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input1 -[ 0.834809] ACPI: Sleep Button [SLPF] -[ 0.838210] ACPI: Battery Slot [BAT0] (battery present) -[ 0.840233] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled - -  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~[ 0.869459] 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A -[ 0.873870] Linux agpgart interface v0.103 -[ 0.876700] loop: module loaded -[ 0.878775] scsi host0: ata_piix -[ 0.880366] scsi host1: ata_piix -[ 0.881737] ata1: PATA max UDMA/33 cmd 0x1f0 ctl 0x3f6 bmdma 0xd000 irq 14 -[ 0.883885] ata2: PATA max UDMA/33 cmd 0x170 ctl 0x376 bmdma 0xd008 irq 15 -[ 0.886091] libphy: Fixed MDIO Bus: probed -[ 0.887767] tun: Universal TUN/TAP device driver, 1.6 -[ 0.889455] PPP generic driver version 2.4.2 -[ 0.890748] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver -[ 0.892752] ehci-pci: EHCI PCI platform driver -[ 0.894121] ehci-platform: EHCI generic platform driver -[ 0.895894] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver -[ 0.898361] ohci-pci: OHCI PCI platform driver -[ 0.900140] ohci-platform: OHCI generic platform driver -[ 0.902441] uhci_hcd: USB Universal Host Controller Interface driver -[ 0.904865] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f03:PS2M] at 0x60,0x64 irq 1,12 -[ 0.907797] serio: i8042 KBD port at 0x60,0x64 irq 1 -[ 0.909401] serio: i8042 AUX port at 0x60,0x64 irq 12 -[ 0.910962] mousedev: PS/2 mouse device common for all mice -[ 0.913441] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2 -[ 0.916486] rtc_cmos rtc_cmos: rtc core: registered rtc_cmos as rtc0 -[ 0.918365] rtc_cmos rtc_cmos: alarms up to one day, 114 bytes nvram -[ 0.920021] i2c /dev entries driver -[ 0.921365] device-mapper: uevent: version 1.0.3 -[ 0.922803] device-mapper: ioctl: 4.37.0-ioctl (2017-09-20) initialised: dm-devel@redhat.com -[ 0.926126] ledtrig-cpu: registered to indicate activity on CPUs -[ 0.929176] NET: Registered protocol family 10 -[ 0.937552] Segment Routing with IPv6 -[ 0.938709] NET: Registered protocol family 17 -[ 0.940188] Key type dns_resolver registered -[ 0.941836] mce: Using 0 MCE banks -[ 0.943170] RAS: Correctable Errors collector initialized. -[ 0.945569] sched_clock: Marking stable (945543331, 0)->(1319832110, -374288779) -[ 0.948649] registered taskstats version 1 -[ 0.949901] Loading compiled-in X.509 certificates -[ 0.954626] Loaded X.509 cert 'Build time autogenerated kernel key: 9d88e3c0462fa0d2df2917e8bbfdfdd1c55d8ddc' -[ 0.958110] zswap: loaded using pool lzo/zbud -[ 0.964498] Key type big_key registered -[ 0.965808] Key type trusted registered -[ 0.969372] Key type encrypted registered -[ 0.970893] AppArmor: AppArmor sha1 policy hashing enabled -[ 0.973159] ima: No TPM chip found, activating TPM-bypass! (rc=-19) -[ 0.975617] ima: Allocated hash algorithm: sha1 -[ 0.977534] evm: HMAC attrs: 0x1 -[ 0.979719] Magic number: 3:202:617 -[ 0.982579] rtc_cmos rtc_cmos: setting system clock to 2019-09-29 04:37:26 UTC (1569731846) -[ 0.986467] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found -[ 0.988892] EDD information not available. -[ 1.049273] Freeing unused kernel image memory: 2436K -[ 1.064568] Write protecting the kernel read-only data: 20480k -[ 1.067065] Freeing unused kernel image memory: 2008K -[ 1.069111] Freeing unused kernel image memory: 1972K -[ 1.077828] x86/mm: Checked W+X mappings: passed, no W+X pages found. -[ 1.080111] x86/mm: Checking user space page tables -[ 1.089009] x86/mm: Checked W+X mappings: passed, no W+X pages found. -Loading, please wait... -starting version 237 -[ 1.184353] Fusion MPT base driver 3.04.20 -[ 1.186024] Copyright (c) 1999-2008 LSI Corporation -[ 1.196999] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI -[ 1.199908] e1000: Copyright (c) 1999-2006 Intel Corporation. -[ 1.208654] Fusion MPT SPI Host driver 3.04.20 -[ 1.224491] AVX2 version of gcm_enc/dec engaged. -[ 1.231798] AES CTR mode by8 optimization enabled -[ 1.419237] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input4 -[ 1.843515] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 02:ee:0a:3b:45:98 -[ 1.846823] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection -[ 1.851174] mptbase: ioc0: Initiating bringup -[ 1.851551] e1000 0000:00:03.0 enp0s3: renamed from eth0 -[ 1.952561] ioc0: LSI53C1030 A0: Capabilities={Initiator} -[ 2.195418] scsi host2: ioc0: LSI53C1030 A0, FwRev=00000000h, Ports=1, MaxQ=256, IRQ=20 -[ 2.365548] scsi 2:0:0:0: Direct-Access VBOX HARDDISK 1.0 PQ: 0 ANSI: 5 -[ 2.400288] scsi target2:0:0: Beginning Domain Validation -[ 2.405262] scsi target2:0:0: Domain Validation skipping write tests -[ 2.407797] scsi target2:0:0: Ending Domain Validation -[ 2.410045] scsi target2:0:0: asynchronous -[ 2.413130] scsi 2:0:1:0: Direct-Access VBOX HARDDISK 1.0 PQ: 0 ANSI: 5 -[ 2.444548] scsi target2:0:1: Beginning Domain Validation -[ 2.447997] random: fast init done -[ 2.450934] scsi target2:0:1: Domain Validation skipping write tests -[ 2.453478] scsi target2:0:1: Ending Domain Validation -[ 2.455625] scsi target2:0:1: asynchronous -[ 2.466484] random: systemd-udevd: uninitialized urandom read (16 bytes read) -[ 2.466557] sd 2:0:0:0: Attached scsi generic sg0 type 0 -[ 2.469874] random: systemd-udevd: uninitialized urandom read (16 bytes read) -[ 2.472254] sd 2:0:1:0: Attached scsi generic sg1 type 0 -[ 2.475796] sd 2:0:1:0: [sdb] 20480 512-byte logical blocks: (10.5 MB/10.0 MiB) -[ 2.480854] random: systemd-udevd: uninitialized urandom read (16 bytes read) -[ 2.483694] sd 2:0:1:0: [sdb] Write Protect is off -[ 2.483705] sd 2:0:0:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB) -[ 2.491205] sd 2:0:1:0: [sdb] Incomplete mode parameter data -[ 2.496107] sd 2:0:1:0: [sdb] Assuming drive cache: write through -[ 2.496223] sd 2:0:0:0: [sda] Write Protect is off -[ 2.501151] sd 2:0:0:0: [sda] Incomplete mode parameter data -[ 2.503655] sd 2:0:1:0: [sdb] Attached SCSI disk -[ 2.504110] sd 2:0:0:0: [sda] Assuming drive cache: write through -[ 2.512349] sda: sda1 -[ 2.514834] sd 2:0:0:0: [sda] Attached SCSI disk -Begin: Loading essential drivers ... [ 4.120365] raid6: sse2x1 gen() 8070 MB/s -[ 4.168222] raid6: sse2x1 xor() 6016 MB/s -[ 4.216338] raid6: sse2x2 gen() 10374 MB/s -[ 4.264252] raid6: sse2x2 xor() 6295 MB/s -[ 4.312232] raid6: sse2x4 gen() 12057 MB/s -[ 4.360267] raid6: sse2x4 xor() 7732 MB/s -[ 4.408068] raid6: avx2x1 gen() 16441 MB/s -[ 4.456229] raid6: avx2x1 xor() 10055 MB/s -[ 4.504190] raid6: avx2x2 gen() 18760 MB/s -[ 4.552254] raid6: avx2x2 xor() 10226 MB/s -[ 4.600221] raid6: avx2x4 gen() 22732 MB/s -[ 4.648232] raid6: avx2x4 xor() 13132 MB/s -[ 4.649527] raid6: using algorithm avx2x4 gen() 22732 MB/s -[ 4.651588] raid6: .... xor() 13132 MB/s, rmw enabled -[ 4.653647] raid6: using avx2x2 recovery algorithm -[ 4.657327] xor: automatically using best checksumming function avx -[ 4.661178] async_tx: api initialized (async) -done. -Begin: Running /scripts/init-premount ... done. -Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done. -Begin: Running /scripts/local-premount ... [ 4.729105] Btrfs loaded, crc32c=crc32c-intel -Scanning for Btrfs filesystems -done. -Warning: fsck not present, so skipping root file system -[ 4.781118] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) -done. -Begin: Running /scripts/local-bottom ... done. -Begin: Running /scripts/init-bottom ... done. -[ 5.131768] ip_tables: (C) 2000-2006 Netfilter Core Team -[ 5.152384] systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid) -[ 5.159865] systemd[1]: Detected virtualization oracle. -[ 5.161648] systemd[1]: Detected architecture x86-64. - -Welcome to Ubuntu 18.04.3 LTS! - -[ 5.176478] systemd[1]: Set hostname to . -[ 5.185207] systemd[1]: Initializing machine ID from random generator. -[ 5.187205] systemd[1]: Installed transient /etc/machine-id file. -[ 5.680638] systemd[1]: Reached target User and Group Name Lookups. -[ OK ] Reached target User and Group Name Lookups. -[ 5.686276] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point. -[ OK ] Set up automount Arbitrary Executab…rmats File System Automount Point. -[ 5.698844] systemd[1]: Created slice System Slice. -[ OK ] Created slice System Slice. -[ 5.703202] systemd[1]: Created slice system-serial\x2dgetty.slice. -[ OK ] Created slice system-serial\x2dgetty.slice. -[ OK ] Listening on Journal Socket. -[ OK ] Listening on LVM2 poll daemon socket. - Starting Set the console keyboard layout... - Mounting Kernel Debug File System... - Starting Create list of required st…ce nodes for the current kernel... -[ OK ] Listening on Journal Socket (/dev/log). -[ OK ] Listening on LVM2 metadata daemon socket. - Starting Remount Root and Kernel File Systems... -[ OK ] Listening on Device-mapper event daemon FIFOs. - Starting Monitoring of LVM2 mirrors…ng dmeventd or progress polling... -[ OK ] Listening on Syslog Socket. -[ OK ] Listening on Network Service Netlink Socket. -[ OK ] Listening on udev Kernel Socket. - Starting Load Kernel Modules... -[ OK ] Listening on Journal Audit Socket. - Mounting POSIX Message Queue File System... -[ 5.813826] EXT4-fs (sda1): re-mounted. Opts: (null) - Starting Journal Service... -[ OK ] Listening on udev Control Socket. - Starting udev Coldplug all Devices... - Mounting Huge Pages File System... -[ OK ] Listening on /dev/initctl Compatibility Named Pipe. -[ OK ] Reached target System Time Synchronized. -[ OK ] Reached target Swap. -[ OK ] Started Forward Password Requests to Wall Directory Watch. -[ 5.847175] Loading iSCSI transport class v2.0-870. -[ OK ] Created slice User and Session Slice. -[ OK ] Reached target Slices. - Starting Uncomplicated firewall... -[ OK ] Mounted Kernel Debug File System. -[ OK ] Started Create list of required sta…vice nodes for the current kernel. -[ OK ] Started Remount Root and Kernel File Systems. -[ OK ] Mounted POSIX Message Queue File System. -[ OK ] Mounted Huge Pages File System. -[ OK ] Started LVM2 metadata daemon. - Starting Load/Save Random Seed... -[ 5.940173] iscsi: registered transport (tcp) - Starting Create Static Device Nodes in /dev... -[ OK ] Started Uncomplicated firewall. -[ OK ] Started udev Coldplug all Devices. -[ OK ] Started Load/Save Random Seed. -[ OK ] Started Monitoring of LVM2 mirrors,…sing dmeventd or progress polling. -[ OK ] Started Journal Service. - Starting Flush Journal to Persistent Storage... -[ 6.067247] iscsi: registered transport (iser) -[ OK ] Started Set the console keyboard layout. -[ OK ] Started Load Kernel Modules. - Starting Apply Kernel Variables... - Mounting Kernel Configuration File System... - Mounting FUSE Control File System... -[ OK ] Mounted Kernel Configuration File System. -[ OK ] Mounted FUSE Control File System. -[ 6.097472] systemd-journald[397]: Received request to flush runtime journal from PID 1 -[ OK ] Started Create Static Device Nodes in /dev. -[ OK ] Reached target Local File Systems (Pre). -[ OK ] Reached target Local File Systems. - Starting Set console font and keymap... - Starting AppArmor initialization... - Starting Tell Plymouth To Write Out Runtime Data... - Starting ebtables ruleset management... - Starting Commit a transient machine-id on disk... - Starting udev Kernel Device Manager... -[ OK ] Started Set console font and keymap. -[ OK ] Started Tell Plymouth To Write Out Runtime Data. -[ OK ] Started Apply Kernel Variables. -[ OK ] Started Flush Journal to Persistent Storage. -[ OK ] Started Commit a transient machine-id on disk. - Starting Create Volatile Files and Directories... -[ OK ] Started udev Kernel Device Manager. -[ OK ] Started Dispatch Password Requests to Console Directory Watch. -[ OK ] Reached target Local Encrypted Volumes. -[ OK ] Started Create Volatile Files and Directories. - Starting Update UTMP about System Boot/Shutdown... -[ OK ] Started ebtables ruleset management. -[ OK ] Started Update UTMP about System Boot/Shutdown. -[ OK ] Found device /dev/ttyS0. -[ OK ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch. -[ OK ] Started AppArmor initialization. - Starting Initial cloud-init job (pre-networking)... -[ 10.488512] cloud-init[541]: Cloud-init v. 19.1-1-gbaa47854-0ubuntu1~18.04.1 running 'init-local' at Sun, 29 Sep 2019 04:37:35 +0000. Up 10.03 seconds. -[ OK ] Started Initial cloud-init job (pre-networking). -[ OK ] Reached target Network (Pre). - Starting Network Service... -[ OK ] Started Network Service. - Starting Wait for Network to be Configured... - Starting Network Name Resolution... -[ OK ] Started Network Name Resolution. -[ OK ] Reached target Host and Network Name Lookups. -[ OK ] Reached target Network. -[ OK ] Started Wait for Network to be Configured. - Starting Initial cloud-init job (metadata service crawler)... -[ 12.969172] cloud-init[659]: Cloud-init v. 19.1-1-gbaa47854-0ubuntu1~18.04.1 running 'init' at Sun, 29 Sep 2019 04:37:38 +0000. Up 12.79 seconds. -[ 12.988414] cloud-init[659]: ci-info: +++++++++++++++++++++++++++++++++++++Net device info++++++++++++++++++++++++++++++++++++++ -[ 12.994201] cloud-init[659]: ci-info: +--------+------+---------------------------+---------------+--------+-------------------+ -[ 12.999006] cloud-init[659]: ci-info: | Device | Up | Address | Mask | Scope | Hw-Address | -[ 13.004875] cloud-init[659]: ci-info: +--------+------+---------------------------+---------------+--------+-------------------+ -[ 13.020787] cloud-init[659]: ci-info: | enp0s3 | True | 10.0.2.15 | 255.255.255.0 | global | 02:ee:0a:3b:45:98 | -[ 13.025532] cloud-init[659]: ci-info: | enp0s3 | True | fe80::ee:aff:fe3b:4598/64 | . | link | 02:ee:0a:3b:45:98 | -[ 13.031006] cloud-init[659]: ci-info: | lo | True | 127.0.0.1 | 255.0.0.0 | host | . | -[ 13.035312] cloud-init[659]: ci-info: | lo | True | ::1/128 | . | host | . | -[ 13.039598] cloud-init[659]: ci-info: +--------+------+---------------------------+---------------+--------+-------------------+ -[ 13.043951] cloud-init[659]: ci-info: ++++++++++++++++++++++++++++Route IPv4 info+++++++++++++++++++++++++++++ -[ 13.047653] cloud-init[659]: ci-info: +-------+-------------+----------+-----------------+-----------+-------+ -[ 13.051037] cloud-init[659]: ci-info: | Route | Destination | Gateway | Genmask | Interface | Flags | -[ 13.054622] cloud-init[659]: ci-info: +-------+-------------+----------+-----------------+-----------+-------+ -[ 13.058025] cloud-init[659]: ci-info: | 0 | 0.0.0.0 | 10.0.2.2 | 0.0.0.0 | enp0s3 | UG | -[ 13.064532] cloud-init[659]: ci-info: | 1 | 10.0.2.0 | 0.0.0.0 | 255.255.255.0 | enp0s3 | U | -[ 13.068647] cloud-init[659]: ci-info: | 2 | 10.0.2.2 | 0.0.0.0 | 255.255.255.255 | enp0s3 | UH | -[ 13.072784] cloud-init[659]: ci-info: +-------+-------------+----------+-----------------+-----------+-------+ -[ 13.077092] cloud-init[659]: ci-info: +++++++++++++++++++Route IPv6 info+++++++++++++++++++ -[ 13.081258] cloud-init[659]: ci-info: +-------+-------------+---------+-----------+-------+ -[ 13.084694] cloud-init[659]: ci-info: | Route | Destination | Gateway | Interface | Flags | -[ 13.088479] cloud-init[659]: ci-info: +-------+-------------+---------+-----------+-------+ -[ 13.092360] cloud-init[659]: ci-info: | 1 | fe80::/64 | :: | enp0s3 | U | -[ 13.096047] cloud-init[659]: ci-info: | 3 | local | :: | enp0s3 | U | -[ 13.108512] cloud-init[659]: ci-info: | 4 | ff00::/8 | :: | enp0s3 | U | -[ 13.111402] cloud-init[659]: ci-info: +-------+-------------+---------+-----------+-------+ -[ 14.801704] cloud-init[659]: Generating public/private rsa key pair. -[ 14.804063] cloud-init[659]: Your identification has been saved in /etc/ssh/ssh_host_rsa_key. -[ 14.807013] cloud-init[659]: Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub. -[ 14.810006] cloud-init[659]: The key fingerprint is: -[ 14.811799] cloud-init[659]: SHA256:c2pCGhDRoUfEBnPbtaYdQ3UOxcvdbTfhVuLtz0dkmho root@ubuntu-bionic -[ 14.814850] cloud-init[659]: The key's randomart image is: -[ 14.816758] cloud-init[659]: +---[RSA 2048]----+ -[ 14.818333] cloud-init[659]: | =*=. o.ooo | -[ 14.820006] cloud-init[659]: | *+o o . +. ...| -[ 14.821832] cloud-init[659]: | o.o . = ..+.++| -[ 14.823443] cloud-init[659]: | o + o o o+O| -[ 14.825068] cloud-init[659]: | . o S . .Bo| -[ 14.826979] cloud-init[659]: | + + E o o| -[ 14.828571] cloud-init[659]: | . . o o o.| -[ 14.830148] cloud-init[659]: | o . +| -[ 14.831813] cloud-init[659]: | .| -[ 14.833704] cloud-init[659]: +----[SHA256]-----+ -[ 14.835513] cloud-init[659]: Generating public/private dsa key pair. -[ 14.837922] cloud-init[659]: Your identification has been saved in /etc/ssh/ssh_host_dsa_key. -[ 14.841095] cloud-init[659]: Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub. -[ 14.848419] cloud-init[659]: The key fingerprint is: -[ 14.851284] cloud-init[659]: SHA256:MJXByZgiy2fMsy8Xn2zy9OmXy933B3UshTKr+5h33hk root@ubuntu-bionic -[ 14.855140] cloud-init[659]: The key's randomart image is: -[ 14.857583] cloud-init[659]: +---[DSA 1024]----+ -[ 14.859572] cloud-init[659]: | =o+ . | -[ 14.861674] cloud-init[659]: | . . o.= o . .| -[ 14.864198] cloud-init[659]: | . = .o + o | -[ 14.866677] cloud-init[659]: | o * o . . +| -[ 14.868652] cloud-init[659]: | o o S . o.| -[ 14.870808] cloud-init[659]: | . . . . | -[ 14.873495] cloud-init[659]: | . +.. . . E | -[ 14.875623] cloud-init[659]: | . +.=..=+..o=| -[ 14.877971] cloud-init[659]: | o +..*+++o.B| -[ 14.892804] cloud-init[659]: +----[SHA256]-----+ -[ 14.895209] cloud-init[659]: Generating public/private ecdsa key pair. -[ 14.898389] cloud-init[659]: Your identification has been saved in /etc/ssh/ssh_host_ecdsa_key. -[ 14.902293] cloud-init[659]: Your public key has been saved in /etc/ssh/ssh_host_ecdsa_key.pub. -[ 14.906277] cloud-init[659]: The key fingerprint is: -[ 14.908735] cloud-init[659]: SHA256:pO6EMl9WjroVoRc7HUT6TPHWmIwrLWM7cIAbiERyxQY root@ubuntu-bionic -[ 14.913129] cloud-init[659]: The key's randomart image is: -[ 14.915736] cloud-init[659]: +---[ECDSA 256]---+ -[ 14.917760] cloud-init[659]: |ooE+. .+ | -[ 14.919668] cloud-init[659]: |+o .o o = + | -[ 14.921986] cloud-init[659]: |o o.. + = * . | -[ 14.924110] cloud-init[659]: | o o % + | -[ 14.926792] cloud-init[659]: | . o % S | -[ 14.929165] cloud-init[659]: | B @ | -[ 14.931706] cloud-init[659]: | o . X . | -[ 14.938220] cloud-init[659]: | + B . | -[ 14.940944] cloud-init[659]: | +.. | -[ OK ] Started Initial cloud-init job (metadata service crawler). -[ 14.968369] cloud-init[659]: +----[SHA256]-----+ -[ 14.970927] cloud-init[659]: Generating public/private ed25519 key pair. -[ 14.973333] cloud-init[659]: Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.[ OK ] Reached target Cloud-config availability. -[ OK ] Reached target Network is Online. - -[ 14.985253] cloud-init[659]: Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub. -[ 14.988429] cloud-init[659]: The key fingerprint is: -[ 14.990670] cloud-init[659]: SHA256:DRCkk4eijXFIbhkPmPoF+gSbJ3ncPFySperwkyCRpI0 root@ubuntu-bionic[ OK ] Reached target Remote File Systems (Pre). -[ OK ] Reached target Remote File Systems. - - Starting Availability of block devices... -[ 15.016115] cloud-init[659]: The key's randomart image is: -[ OK ] Reached target System Initialization. -[ OK ] Started Daily apt download activities. -[ OK [ 15.018265] cloud-init[659]: +--[ED25519 256]--+ -] Started Daily Cleanup of Temporary Directories. -[ 15.034267] cloud-init[659]: |.* +=. | -[ 15.035916] cloud-init[659]: |O=* o=.. | Starting LXD - unix socket. -[ OK ] Listening on D-Bus System Message Bus Socket. -[ OK ] Started ACPI Events Check. -[ OK ] Listening on ACPID Listen Socket. -[ OK ] Started Daily apt upgrade and clean activities. -[ OK ] Reached target Paths. -[ OK ] Started Discard unused blocks once a week. - Starting Socket activation for snappy daemon. -[ OK ] Listening on UUID daemon activation socket. -[ OK ] Started Message of the Day. -[ OK ] Reached target Timers. -[ OK ] Listening on Open-iSCSI iscsid Socket. - -[ OK ] Started Availability of block devices.[ 15.080554] cloud-init[659]: |E@+**o. . | -[ 15.081867] cloud-init[659]: |OB=o*o o | -[ 15.082301] cloud-init[659]: |*Bo. . S . | -[ 15.082380] cloud-init[659]: |.=o. | -[ 15.082428] cloud-init[659]: | = | -[ 15.082593] cloud-init[659]: | . | -[ 15.082950] cloud-init[659]: | | -[ 15.083005] cloud-init[659]: +----[SHA256]-----+ - -[ OK ] Listening on LXD - unix socket. -[ OK ] Listening on Socket activation for snappy daemon. -[ OK ] Reached target Sockets. -[ OK ] Reached target Basic System. - Starting System Logging Service... -[ OK ] Started FUSE filesystem for LXC. - Starting LSB: Record successful boot for GRUB... - Starting Accounts Service... -[ OK ] Started Regular background program processing daemon. -[ OK ] Started irqbalance daemon. - Starting LSB: automatic crash report generation... -[ OK ] Started D-Bus System Message Bus. - Starting Dispatcher daemon for systemd-networkd... - Starting Permit User Sessions... - Starting LXD - container startup/shutdown... -[ OK ] Started Deferred execution scheduler. - Starting Login Service... - Starting Snappy daemon... - Starting Pollinate to seed the pseudo random number generator... - Starting Virtualbox guest utils... -[ OK ] Started System Logging Service. -[ OK ] Started Permit User Sessions. -[ OK ] Started Login Service. -[ OK ] Started Unattended Upgrades Shutdown. - Starting Authorization Manager... - Starting Hold until boot process finishes up... - Starting Terminate Plymouth Boot Screen... -[ OK ] Started Hold until boot process finishes up. -[ OK ] Started Serial Getty on ttyS0. - Starting Set console scheme... -[ OK ] Started Terminate Plymouth Boot Screen. -[ OK ] Started LSB: automatic crash report generation. -[ OK ] Started Set console scheme. -[ OK ] Created slice system-getty.slice. -[ OK ] Started Getty on tty1. -[ OK ] Reached target Login Prompts. -[ OK ] Started Authorization Manager. -[ OK ] Started Accounts Service. -[ OK ] Started LSB: Record successful boot for GRUB. -[ OK ] Started Virtualbox guest utils. -[ OK ] Started Dispatcher daemon for systemd-networkd. -[ OK ] Started LXD - container startup/shutdown. -[ OK ] Started Snappy daemon. - Starting Wait until snapd is fully seeded... -[ OK ] Started Pollinate to seed the pseudo random number generator. - Starting OpenBSD Secure Shell server... -[ OK ] Started OpenBSD Secure Shell server. -[ OK ] Created slice User Slice of vagrant. - Starting User Manager for UID 1000... -[ OK ] Started Session 1 of user vagrant. -[ OK ] Started User Manager for UID 1000. -[ OK ] Started Wait until snapd is fully seeded. -[ OK ] Reached target Multi-User System. -[ OK ] Reached target Graphical Interface. - Starting Update UTMP about System Runlevel Changes... - Starting Apply the settings specified in cloud-config... -[ OK ] Started Update UTMP about System Runlevel Changes. - -Ubuntu 18.04.3 LTS ubuntu-bionic ttyS0 - -ubuntu-bionic login: [ 22.238032] cloud-init[1248]: Cloud-init v. 19.1-1-gbaa47854-0ubuntu1~18.04.1 running 'modules:config' at Sun, 29 Sep 2019 04:37:46 +0000. Up 20.92 seconds. -ci-info: no authorized ssh keys fingerprints found for user ubuntu. -<14>Sep 29 04:37:48 ec2: -<14>Sep 29 04:37:48 ec2: ############################################################# -<14>Sep 29 04:37:48 ec2: -----BEGIN SSH HOST KEY FINGERPRINTS----- -<14>Sep 29 04:37:48 ec2: 1024 SHA256:MJXByZgiy2fMsy8Xn2zy9OmXy933B3UshTKr+5h33hk root@ubuntu-bionic (DSA) -<14>Sep 29 04:37:48 ec2: 256 SHA256:pO6EMl9WjroVoRc7HUT6TPHWmIwrLWM7cIAbiERyxQY root@ubuntu-bionic (ECDSA) -<14>Sep 29 04:37:48 ec2: 256 SHA256:DRCkk4eijXFIbhkPmPoF+gSbJ3ncPFySperwkyCRpI0 root@ubuntu-bionic (ED25519) -<14>Sep 29 04:37:48 ec2: 2048 SHA256:c2pCGhDRoUfEBnPbtaYdQ3UOxcvdbTfhVuLtz0dkmho root@ubuntu-bionic (RSA) -<14>Sep 29 04:37:49 ec2: -----END SSH HOST KEY FINGERPRINTS----- -<14>Sep 29 04:37:49 ec2: ############################################################# ------BEGIN SSH HOST KEY KEYS----- -ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL1FoJIMczy8dfbRV3RzzcLXkRT/ouhH2qd6HDGf+Akmq+66qodZ0SAF24sVKe32obV1l1ajbBfVR5FpXdvZ+l0= root@ubuntu-bionic -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAO/aUSNVrB6FQOHxHf2DXC19OlkZIgLMoAi8iVDNNpN root@ubuntu-bionic -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/EIXVrXLv5Nzfe/cqvE4IBOGjA097OyEJSTB/chiuHlw/YPuVtTsDRDEOSIvjPGsjzQG/PBzgdJx4nnL1+xV2WUVNZvFDQUmXSyCRuAxPZSO9FwkfLb6ebloPoyuojmiMcqFuhb+ZTiGmJwf5LoPzz9xF8qxrsD1IGadfw8GINfhERoQRaP6rM/lPbIQgnwcK03oPlCs35NMAa09nQ4Qs0sUPEjt+IMOCxifCqoCpsHUMT4bU/FFxQ1c9nr39AuCegjILGM6mtMP+Wutgbpg4ZxpJ7e3uO8J5jrTZa9U13bSzpO7JUSJrri1ol5Lsx1w6S5rVZqJhpyNFjIzsdnXR root@ubuntu-bionic ------END SSH HOST KEY KEYS----- -[ 23.573587] cloud-init[1370]: Cloud-init v. 19.1-1-gbaa47854-0ubuntu1~18.04.1 running 'modules:final' at Sun, 29 Sep 2019 04:37:48 +0000. Up 23.13 seconds. -[ 23.573721] cloud-init[1370]: ci-info: no authorized ssh keys fingerprints found for user ubuntu. -[ 23.588105] cloud-init[1370]: Cloud-init v. 19.1-1-gbaa47854-0ubuntu1~18.04.1 finished at Sun, 29 Sep 2019 04:37:49 +0000. Datasource DataSourceNoCloud [seed=/dev/sdb][dsmode=net]. Up 23.54 seconds diff --git a/archived_packages/wings/web/index.html b/archived_packages/wings/web/index.html deleted file mode 100644 index c0300979..00000000 --- a/archived_packages/wings/web/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Angel Wings - - - -

Hello!!!

- - \ No newline at end of file diff --git a/archived_packages/wings/web/site.css b/archived_packages/wings/web/site.css deleted file mode 100644 index c2140b8b..00000000 --- a/archived_packages/wings/web/site.css +++ /dev/null @@ -1,3 +0,0 @@ -h1 { - color: blue; -} \ No newline at end of file