Refactor: changing namespace, imports, re-branding
This commit is contained in:
parent
3865bd41df
commit
67d5f183c1
106 changed files with 193 additions and 193 deletions
|
@ -141,7 +141,7 @@
|
||||||
|
|
||||||
## 2.0.0-alpha
|
## 2.0.0-alpha
|
||||||
|
|
||||||
* Depend on Dart 2 and Angel 2.
|
* Depend on Dart 2 and Protevus 2.
|
||||||
* Remove `dart2_constant`.
|
* Remove `dart2_constant`.
|
||||||
* Remove `requireAuth`.
|
* Remove `requireAuth`.
|
||||||
* Remove `userKey`, instead favoring generic parameters.
|
* Remove `userKey`, instead favoring generic parameters.
|
||||||
|
|
|
@ -17,7 +17,7 @@ A complete authentication plugin for Protevus. Inspired by Passport. More detail
|
||||||
Ensure you have read the [User Guide](https://angel3-docs.dukefirehawk.com/guides/authentication).
|
Ensure you have read the [User Guide](https://angel3-docs.dukefirehawk.com/guides/authentication).
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
var auth = AngelAuth<User>(
|
var auth = AngelAuth<User>(
|
||||||
serializer: (user) => user.id ?? '',
|
serializer: (user) => user.id ?? '',
|
||||||
deserializer: (id) => fetchAUserByIdSomehow(id
|
deserializer: (id) => fetchAUserByIdSomehow(id
|
||||||
|
@ -27,7 +27,7 @@ configureServer(Angel app) async {
|
||||||
// POST route to handle username+password
|
// POST route to handle username+password
|
||||||
app.post('/local', auth.authenticate('local'));
|
app.post('/local', auth.authenticate('local'));
|
||||||
|
|
||||||
// Using Angel's asynchronous injections, we can parse the JWT
|
// Using Protevus's asynchronous injections, we can parse the JWT
|
||||||
// on demand. It won't be parsed until we check.
|
// on demand. It won't be parsed until we check.
|
||||||
app.get('/profile', ioc((User user) {
|
app.get('/profile', ioc((User user) {
|
||||||
print(user.description);
|
print(user.description);
|
||||||
|
@ -55,7 +55,7 @@ configureServer(Angel app) async {
|
||||||
A frequent use case within SPA's is opening OAuth login endpoints in a separate window. [`angel3_client`](https://pub.dev/packages/angel3_client) provides a facility for this, which works perfectly with the default callback provided in this package.
|
A frequent use case within SPA's is opening OAuth login endpoints in a separate window. [`angel3_client`](https://pub.dev/packages/angel3_client) provides a facility for this, which works perfectly with the default callback provided in this package.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
var handler = auth.authenticate(
|
var handler = auth.authenticate(
|
||||||
'facebook',
|
'facebook',
|
||||||
AngelAuthOptions(callback: confirmPopupAuthentication()));
|
AngelAuthOptions(callback: confirmPopupAuthentication()));
|
||||||
|
|
|
@ -9,7 +9,7 @@ import 'auth_token.dart';
|
||||||
import 'options.dart';
|
import 'options.dart';
|
||||||
import 'strategy.dart';
|
import 'strategy.dart';
|
||||||
|
|
||||||
/// Handles authentication within an Angel application.
|
/// Handles authentication within an Protevus application.
|
||||||
class AngelAuth<User> {
|
class AngelAuth<User> {
|
||||||
final _log = Logger('AngelAuth');
|
final _log = Logger('AngelAuth');
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ class AngelAuth<User> {
|
||||||
_jwtLifeSpan = jwtLifeSpan.toInt();
|
_jwtLifeSpan = jwtLifeSpan.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Configures an Angel server to decode and validate JSON Web tokens on demand,
|
/// Configures an Protevus server to decode and validate JSON Web tokens on demand,
|
||||||
/// whenever an instance of [User] is injected.
|
/// whenever an instance of [User] is injected.
|
||||||
Future<void> configureServer(Protevus app) async {
|
Future<void> configureServer(Protevus app) async {
|
||||||
/*
|
/*
|
||||||
|
@ -111,7 +111,7 @@ class AngelAuth<User> {
|
||||||
if (app.container == null) {
|
if (app.container == null) {
|
||||||
_log.severe('Protevus container is null');
|
_log.severe('Protevus container is null');
|
||||||
throw StateError(
|
throw StateError(
|
||||||
'Angel.container is null. All authentication will fail.');
|
'Protevus.container is null. All authentication will fail.');
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
var appContainer = app.container;
|
var appContainer = app.container;
|
||||||
|
@ -184,7 +184,7 @@ class AngelAuth<User> {
|
||||||
///
|
///
|
||||||
/// Now that `package:angel_framework` supports asynchronous injections, this middleware
|
/// Now that `package:angel_framework` supports asynchronous injections, this middleware
|
||||||
/// is no longer directly necessary. Instead, call [configureServer]. You can then use
|
/// is no longer directly necessary. Instead, call [configureServer]. You can then use
|
||||||
/// `makeAsync<User>`, or Angel's injections directly:
|
/// `makeAsync<User>`, or Protevus's injections directly:
|
||||||
///
|
///
|
||||||
/// ```dart
|
/// ```dart
|
||||||
/// var auth = AngelAuth<User>(...);
|
/// var auth = AngelAuth<User>(...);
|
||||||
|
|
|
@ -2,7 +2,7 @@ import 'dart:async';
|
||||||
import 'package:angel3_framework/angel3_framework.dart';
|
import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'options.dart';
|
import 'options.dart';
|
||||||
|
|
||||||
/// A function that handles login and signup for an Angel application.
|
/// A function that handles login and signup for an Protevus application.
|
||||||
abstract class AuthStrategy<User> {
|
abstract class AuthStrategy<User> {
|
||||||
/// Authenticates or rejects an incoming user.
|
/// Authenticates or rejects an incoming user.
|
||||||
FutureOr<User?> authenticate(RequestContext req, ResponseContext res,
|
FutureOr<User?> authenticate(RequestContext req, ResponseContext res,
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
|
|
||||||
## 2.1.0
|
## 2.1.0
|
||||||
|
|
||||||
* Angel 2 + Dart 2 update
|
* Protevus 2 + Dart 2 update
|
||||||
* Support for handling errors + rejections.
|
* Support for handling errors + rejections.
|
||||||
* Use `ExternalAuthOptions`.
|
* Use `ExternalAuthOptions`.
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 + Dart 2 updates.
|
* Protevus 2 + Dart 2 updates.
|
||||||
|
|
||||||
## 1.0.2
|
## 1.0.2
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ Protevus library for authenticating users with remote identity providers via OAu
|
||||||
First, create an options object:
|
First, create an options object:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
// Load from a Map, i.e. app config:
|
// Load from a Map, i.e. app config:
|
||||||
var opts = ExternalAuthOptions.fromMap(app.configuration['auth0'] as Map);
|
var opts = ExternalAuthOptions.fromMap(app.configuration['auth0'] as Map);
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ OAuth2Verifier oauth2verifier(Service<User> userService) {
|
||||||
Now, initialize an `OAuth2Strategy`, using the options and verifier. You'll also need to provide a name for this instance of the strategy. Consider using the name of the remote authentication provider (ex. `facebook`).
|
Now, initialize an `OAuth2Strategy`, using the options and verifier. You'll also need to provide a name for this instance of the strategy. Consider using the name of the remote authentication provider (ex. `facebook`).
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) {
|
configureServer(Protevus app) {
|
||||||
auth.strategies['github'] = OAuth2Strategy(
|
auth.strategies['github'] = OAuth2Strategy(
|
||||||
options,
|
options,
|
||||||
authorizationEndpoint,
|
authorizationEndpoint,
|
||||||
|
@ -71,7 +71,7 @@ configureServer(Angel app) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Lastly, connect it to an `AngelAuth` instance, and wire it up to an `Angel` server. Set up two routes:
|
Lastly, connect it to an `AngelAuth` instance, and wire it up to an `Protevus` server. Set up two routes:
|
||||||
|
|
||||||
1. Redirect users to the external provider
|
1. Redirect users to the external provider
|
||||||
2. Acts as a callback and handles an access code
|
2. Acts as a callback and handles an access code
|
||||||
|
@ -79,7 +79,7 @@ Lastly, connect it to an `AngelAuth` instance, and wire it up to an `Angel` serv
|
||||||
In the case of the callback route, you may want to display an HTML page that closes a popup window. In this case, use `confirmPopupAuthentication`, which is bundled with `package:angel3_auth`, as a `callback` function:
|
In the case of the callback route, you may want to display an HTML page that closes a popup window. In this case, use `confirmPopupAuthentication`, which is bundled with `package:angel3_auth`, as a `callback` function:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
// ...
|
// ...
|
||||||
var auth = AngelAuth<User>();
|
var auth = AngelAuth<User>();
|
||||||
auth.strategies['github'] = oauth2Strategy;
|
auth.strategies['github'] = oauth2Strategy;
|
||||||
|
@ -103,7 +103,7 @@ configureServer(Angel app) async {
|
||||||
This package should work out-of-the-box for most OAuth2 providers, such as Github or Dropbox. However, if your OAuth2 scopes are separated by a delimiter other than the default (`' '`), you can add it in the `OAuth2Strategy` constructor:
|
This package should work out-of-the-box for most OAuth2 providers, such as Github or Dropbox. However, if your OAuth2 scopes are separated by a delimiter other than the default (`' '`), you can add it in the `OAuth2Strategy` constructor:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
OAuth2Strategy(..., delimiter: ' ');
|
OAuth2Strategy(..., delimiter: ' ');
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -6,7 +6,7 @@ import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'package:http_parser/http_parser.dart';
|
import 'package:http_parser/http_parser.dart';
|
||||||
import 'package:oauth2/oauth2.dart' as oauth2;
|
import 'package:oauth2/oauth2.dart' as oauth2;
|
||||||
|
|
||||||
/// An Angel [AuthStrategy] that signs users in via a third-party service that speaks OAuth 2.0.
|
/// An Protevus [AuthStrategy] that signs users in via a third-party service that speaks OAuth 2.0.
|
||||||
class OAuth2Strategy<User> implements AuthStrategy<User> {
|
class OAuth2Strategy<User> implements AuthStrategy<User> {
|
||||||
/// A callback that uses the third-party service to authenticate a [User].
|
/// A callback that uses the third-party service to authenticate a [User].
|
||||||
///
|
///
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 + Dart 2 suppport.
|
* Protevus 2 + Dart 2 suppport.
|
||||||
* Use `package:twitter` instead of `package:twit`.
|
* Use `package:twitter` instead of `package:twit`.
|
||||||
* Add `TwitterAuthorizationException`.
|
* Add `TwitterAuthorizationException`.
|
||||||
* Add `onError` callback.
|
* Add `onError` callback.
|
||||||
|
|
6
packages/cache/README.md
vendored
6
packages/cache/README.md
vendored
|
@ -19,7 +19,7 @@ This can improve the performance of sending objects that are complex to serializ
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel()..lazyParseBodies = true;
|
var app = Protevus()..lazyParseBodies = true;
|
||||||
|
|
||||||
app.use(
|
app.use(
|
||||||
'/api/todos',
|
'/api/todos',
|
||||||
|
@ -49,7 +49,7 @@ Supports the `If-Modified-Since` header, as well as storing the contents of resp
|
||||||
To initialize a simple cache:
|
To initialize a simple cache:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
Future configureServer(Angel app) async {
|
Future configureServer(Protevus app) async {
|
||||||
// Simple instance.
|
// Simple instance.
|
||||||
var cache = ResponseCache();
|
var cache = ResponseCache();
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ Call `invalidate` to remove a resource from a `ResponseCache`.
|
||||||
Some servers expect a reverse proxy or caching layer to support `PURGE` requests. If this is your case, make sure to include some sort of validation (maybe IP-based) to ensure no arbitrary attacker can hack your cache:
|
Some servers expect a reverse proxy or caching layer to support `PURGE` requests. If this is your case, make sure to include some sort of validation (maybe IP-based) to ensure no arbitrary attacker can hack your cache:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
Future configureServer(Angel app) async {
|
Future configureServer(Protevus app) async {
|
||||||
app.addRoute('PURGE', '*', (req, res) {
|
app.addRoute('PURGE', '*', (req, res) {
|
||||||
if (req.ip != '127.0.0.1')
|
if (req.ip != '127.0.0.1')
|
||||||
throw AngelHttpException.forbidden();
|
throw AngelHttpException.forbidden();
|
||||||
|
|
2
packages/cache/lib/src/cache.dart
vendored
2
packages/cache/lib/src/cache.dart
vendored
|
@ -4,7 +4,7 @@ import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'package:pool/pool.dart';
|
import 'package:pool/pool.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
/// A flexible response cache for Angel.
|
/// A flexible response cache for Protevus.
|
||||||
///
|
///
|
||||||
/// Use this to improve real and perceived response of Web applications,
|
/// Use this to improve real and perceived response of Web applications,
|
||||||
/// as well as to memorize expensive responses.
|
/// as well as to memorize expensive responses.
|
||||||
|
|
2
packages/cache/lib/src/cache_service.dart
vendored
2
packages/cache/lib/src/cache_service.dart
vendored
|
@ -2,7 +2,7 @@ import 'dart:async';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:angel3_framework/angel3_framework.dart';
|
import 'package:angel3_framework/angel3_framework.dart';
|
||||||
|
|
||||||
/// An Angel [Service] that caches data from another service.
|
/// An Protevus [Service] that caches data from another service.
|
||||||
///
|
///
|
||||||
/// This is useful for applications of scale, where network latency
|
/// This is useful for applications of scale, where network latency
|
||||||
/// can have real implications on application performance.
|
/// can have real implications on application performance.
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Deprecate `basePath` in favor of `baseUrl`.
|
* Deprecate `basePath` in favor of `baseUrl`.
|
||||||
* `Angel` now extends `http.Client`.
|
* `Protevus` now extends `http.Client`.
|
||||||
* Deprecate `auth_types`.
|
* Deprecate `auth_types`.
|
||||||
|
|
||||||
## 2.0.0-alpha.2
|
## 2.0.0-alpha.2
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
## 2.0.0-alpha
|
## 2.0.0-alpha
|
||||||
|
|
||||||
* Depend on Dart 2.
|
* Depend on Dart 2.
|
||||||
* Depend on Angel 2.
|
* Depend on Protevus 2.
|
||||||
* Remove `dart2_constant`.
|
* Remove `dart2_constant`.
|
||||||
|
|
||||||
## 1.2.0+2
|
## 1.2.0+2
|
||||||
|
|
|
@ -16,7 +16,7 @@ import 'package:angel3_client/browser.dart';
|
||||||
import 'package:angel3_client/flutter.dart';
|
import 'package:angel3_client/flutter.dart';
|
||||||
|
|
||||||
main() async {
|
main() async {
|
||||||
Angel app = Rest("http://localhost:3000");
|
Protevus app = Rest("http://localhost:3000");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// Client library for the Angel framework.
|
/// Client library for the Protevus framework.
|
||||||
library angel3_client;
|
library angel3_client;
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
@ -17,9 +17,9 @@ typedef ProtevusConfigurer = FutureOr<void> Function(Protevus app);
|
||||||
/// doesn't work.
|
/// doesn't work.
|
||||||
typedef ProtevusDeserializer<T> = T? Function(dynamic x);
|
typedef ProtevusDeserializer<T> = T? Function(dynamic x);
|
||||||
|
|
||||||
/// Represents an Angel server that we are querying.
|
/// Represents an Protevus server that we are querying.
|
||||||
abstract class Protevus extends http.BaseClient {
|
abstract class Protevus extends http.BaseClient {
|
||||||
//final _log = Logger('Angel');
|
//final _log = Logger('Protevus');
|
||||||
|
|
||||||
/// A mutable member. When this is set, it holds a JSON Web Token
|
/// A mutable member. When this is set, it holds a JSON Web Token
|
||||||
/// that is automatically attached to every request sent.
|
/// that is automatically attached to every request sent.
|
||||||
|
@ -72,7 +72,7 @@ abstract class Protevus extends http.BaseClient {
|
||||||
|
|
||||||
/// Creates a [Service] instance that queries a given path on the server.
|
/// Creates a [Service] instance that queries a given path on the server.
|
||||||
///
|
///
|
||||||
/// This expects that there is an Angel `Service` mounted on the server.
|
/// This expects that there is an Protevus `Service` mounted on the server.
|
||||||
///
|
///
|
||||||
/// In other words, all endpoints will return [Data], except for the root of
|
/// In other words, all endpoints will return [Data], except for the root of
|
||||||
/// [path], which returns a [List<Data>].
|
/// [path], which returns a [List<Data>].
|
||||||
|
@ -104,7 +104,7 @@ abstract class Protevus extends http.BaseClient {
|
||||||
{body, Map<String, String>? headers, Encoding? encoding});
|
{body, Map<String, String>? headers, Encoding? encoding});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Represents the result of authentication with an Angel server.
|
/// Represents the result of authentication with an Protevus server.
|
||||||
class ProtevusAuthResult {
|
class ProtevusAuthResult {
|
||||||
String? _token;
|
String? _token;
|
||||||
final Map<String, dynamic> data = {};
|
final Map<String, dynamic> data = {};
|
||||||
|
@ -150,7 +150,7 @@ class ProtevusAuthResult {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Queries a service on an Angel server, with the same API.
|
/// Queries a service on an Protevus server, with the same API.
|
||||||
abstract class Service<Id, Data> {
|
abstract class Service<Id, Data> {
|
||||||
/// Fired on `indexed` events.
|
/// Fired on `indexed` events.
|
||||||
Stream<List<Data>> get onIndexed;
|
Stream<List<Data>> get onIndexed;
|
||||||
|
@ -170,7 +170,7 @@ abstract class Service<Id, Data> {
|
||||||
/// Fired on `removed` events.
|
/// Fired on `removed` events.
|
||||||
Stream<Data> get onRemoved;
|
Stream<Data> get onRemoved;
|
||||||
|
|
||||||
/// The Angel instance powering this service.
|
/// The Protevus instance powering this service.
|
||||||
Protevus get app;
|
Protevus get app;
|
||||||
|
|
||||||
Future close();
|
Future close();
|
||||||
|
|
|
@ -28,14 +28,14 @@ ProtevusHttpException failure(Response response,
|
||||||
} else {
|
} else {
|
||||||
return ProtevusHttpException(
|
return ProtevusHttpException(
|
||||||
message: message ??
|
message: message ??
|
||||||
'Unhandled exception while connecting to Angel backend.',
|
'Unhandled exception while connecting to Protevus backend.',
|
||||||
statusCode: response.statusCode,
|
statusCode: response.statusCode,
|
||||||
stackTrace: stack);
|
stackTrace: stack);
|
||||||
}
|
}
|
||||||
} catch (e, st) {
|
} catch (e, st) {
|
||||||
return ProtevusHttpException(
|
return ProtevusHttpException(
|
||||||
message: message ??
|
message: message ??
|
||||||
'Angel backend did not return JSON - an error likely occurred.',
|
'Protevus backend did not return JSON - an error likely occurred.',
|
||||||
statusCode: response.statusCode,
|
statusCode: response.statusCode,
|
||||||
stackTrace: stack ?? st);
|
stackTrace: stack ?? st);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// Browser client library for the Angel framework.
|
/// Browser client library for the Protevus framework.
|
||||||
library angel_client.browser;
|
library angel_client.browser;
|
||||||
|
|
||||||
import 'dart:async'
|
import 'dart:async'
|
||||||
|
@ -11,7 +11,7 @@ import 'angel3_client.dart';
|
||||||
import 'base_angel_client.dart';
|
import 'base_angel_client.dart';
|
||||||
export 'angel3_client.dart';
|
export 'angel3_client.dart';
|
||||||
|
|
||||||
/// Queries an Angel server via REST.
|
/// Queries an Protevus server via REST.
|
||||||
class Rest extends BaseProtevusClient {
|
class Rest extends BaseProtevusClient {
|
||||||
Rest(String basePath) : super(http.BrowserClient(), basePath);
|
Rest(String basePath) : super(http.BrowserClient(), basePath);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// Flutter-compatible client library for the Angel framework.
|
/// Flutter-compatible client library for the Protevus framework.
|
||||||
library angel_client.flutter;
|
library angel_client.flutter;
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
@ -6,7 +6,7 @@ import 'package:http/http.dart' as http;
|
||||||
import 'base_angel_client.dart';
|
import 'base_angel_client.dart';
|
||||||
export 'angel3_client.dart';
|
export 'angel3_client.dart';
|
||||||
|
|
||||||
/// Queries an Angel server via REST.
|
/// Queries an Protevus server via REST.
|
||||||
class Rest extends BaseProtevusClient {
|
class Rest extends BaseProtevusClient {
|
||||||
Rest(String basePath) : super(http.Client() as http.BaseClient, basePath);
|
Rest(String basePath) : super(http.Client() as http.BaseClient, basePath);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// Command-line client library for the Angel framework.
|
/// Command-line client library for the Protevus framework.
|
||||||
library angel_client.cli;
|
library angel_client.cli;
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
@ -10,7 +10,7 @@ import 'angel3_client.dart';
|
||||||
import 'base_angel_client.dart';
|
import 'base_angel_client.dart';
|
||||||
export 'angel3_client.dart';
|
export 'angel3_client.dart';
|
||||||
|
|
||||||
/// Queries an Angel server via REST.
|
/// Queries an Protevus server via REST.
|
||||||
class Rest extends BaseProtevusClient {
|
class Rest extends BaseProtevusClient {
|
||||||
//final _log = Logger('REST');
|
//final _log = Logger('REST');
|
||||||
final List<Service> _services = [];
|
final List<Service> _services = [];
|
||||||
|
@ -42,7 +42,7 @@ class Rest extends BaseProtevusClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Queries an Angel service via REST.
|
/// Queries an Protevus service via REST.
|
||||||
class RestService<Id, Data> extends BaseProtevusService<Id, Data> {
|
class RestService<Id, Data> extends BaseProtevusService<Id, Data> {
|
||||||
final _log = Logger('RestService');
|
final _log = Logger('RestService');
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "angel_client",
|
"name": "angel_client",
|
||||||
"version": "1.0.0-dev",
|
"version": "1.0.0-dev",
|
||||||
"description": "Client library for the Angel framework.",
|
"description": "Client library for the Protevus framework.",
|
||||||
"main": "build/angel_client.js",
|
"main": "build/angel_client.js",
|
||||||
"jsnext:main": "lib/angel_client.js",
|
"jsnext:main": "lib/angel_client.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
|
|
@ -61,7 +61,7 @@ but instead throw an exception.
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Use Angel 2.
|
* Use Protevus 2.
|
||||||
|
|
||||||
## 1.2.0-rc.0
|
## 1.2.0-rc.0
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: angel3_configuration
|
name: angel3_configuration
|
||||||
version: 8.2.0
|
version: 8.2.0
|
||||||
description: Automatic YAML application configuration loader for Angel 3, with .env support.
|
description: Automatic YAML application configuration loader for Protevus 3, with .env support.
|
||||||
homepage: https://angel3-framework.web.app/
|
homepage: https://angel3-framework.web.app/
|
||||||
repository: https://github.com/dart-backend/protevus/tree/master/packages/configuration
|
repository: https://github.com/dart-backend/protevus/tree/master/packages/configuration
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -32,7 +32,7 @@ A better IoC container for Protevus, ultimately allowing Protevus to be used wit
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
// Using Mirror Reflector
|
// Using Mirror Reflector
|
||||||
var app = Angel(reflector: MirrorsReflector());
|
var app = Protevus(reflector: MirrorsReflector());
|
||||||
|
|
||||||
// Sales Controller
|
// Sales Controller
|
||||||
app.container.registerSingleton<SalesController>(SalesController());
|
app.container.registerSingleton<SalesController>(SalesController());
|
||||||
|
|
|
@ -195,7 +195,7 @@ handlers to run, even after the response was closed.
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2! :protevus: :rocket:
|
* Protevus 2! :protevus: :rocket:
|
||||||
|
|
||||||
## 2.0.0-rc.10
|
## 2.0.0-rc.10
|
||||||
|
|
||||||
|
@ -247,7 +247,7 @@ the outputs of `before` events.
|
||||||
|
|
||||||
* Log a warning when no `reflector` is provided.
|
* Log a warning when no `reflector` is provided.
|
||||||
* Add `AngelEnvironment` class.
|
* Add `AngelEnvironment` class.
|
||||||
* Add `Angel.environment`.
|
* Add `Protevus.environment`.
|
||||||
* Deprecated `app.isProduction` in favor of `app.environment.isProduction`.
|
* Deprecated `app.isProduction` in favor of `app.environment.isProduction`.
|
||||||
* Allow setting of `bodyAsObject`, `bodyAsMap`, or `bodyAsList` **exactly once**.
|
* Allow setting of `bodyAsObject`, `bodyAsMap`, or `bodyAsList` **exactly once**.
|
||||||
* Resolve named singletons in `resolveInjection`.
|
* Resolve named singletons in `resolveInjection`.
|
||||||
|
@ -257,7 +257,7 @@ the outputs of `before` events.
|
||||||
## 2.0.0-alpha.24
|
## 2.0.0-alpha.24
|
||||||
|
|
||||||
* Add `AngelEnv` class to `core`.
|
* Add `AngelEnv` class to `core`.
|
||||||
* Deprecate `Angel.isProduction`, in favor of `AngelEnv`.
|
* Deprecate `Protevus.isProduction`, in favor of `AngelEnv`.
|
||||||
|
|
||||||
## 2.0.0-alpha.23
|
## 2.0.0-alpha.23
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ stable, there'll be a conversion, perhaps.
|
||||||
* `RequestContext` now exposes a `Stream<List<int>> get body` getter.
|
* `RequestContext` now exposes a `Stream<List<int>> get body` getter.
|
||||||
* Calling `RequestContext.parseBody()` parses its contents.
|
* Calling `RequestContext.parseBody()` parses its contents.
|
||||||
* Added `bodyAsMap`, `bodyAsList`, `bodyAsObject`, and `uploadedFiles` to `RequestContext`.
|
* Added `bodyAsMap`, `bodyAsList`, `bodyAsObject`, and `uploadedFiles` to `RequestContext`.
|
||||||
* Removed `Angel.keepRawRequestBuffers` and anything that had to do with buffering request bodies.
|
* Removed `Protevus.keepRawRequestBuffers` and anything that had to do with buffering request bodies.
|
||||||
|
|
||||||
## 2.0.0-alpha.14
|
## 2.0.0-alpha.14
|
||||||
|
|
||||||
|
@ -319,15 +319,15 @@ stable, there'll be a conversion, perhaps.
|
||||||
## 2.0.0-alpha.12
|
## 2.0.0-alpha.12
|
||||||
|
|
||||||
* Remove `ResponseContext.sendFile`.
|
* Remove `ResponseContext.sendFile`.
|
||||||
* Add `Angel.mimeTypeResolver`.
|
* Add `Protevus.mimeTypeResolver`.
|
||||||
* Fix a bug where an unknown MIME type on `streamFile` would return a 500.
|
* Fix a bug where an unknown MIME type on `streamFile` would return a 500.
|
||||||
|
|
||||||
## 2.0.0-alpha.11
|
## 2.0.0-alpha.11
|
||||||
|
|
||||||
* Add `readMany` to `Service`.
|
* Add `readMany` to `Service`.
|
||||||
* Allow `ResponseContext.redirect` to take a `Uri`.
|
* Allow `ResponseContext.redirect` to take a `Uri`.
|
||||||
* Add `Angel.mountController`.
|
* Add `Protevus.mountController`.
|
||||||
* Add `Angel.findServiceOf`.
|
* Add `Protevus.findServiceOf`.
|
||||||
* Roll in HTTP/2. See `pkg:angel_framework/http2.dart`.
|
* Roll in HTTP/2. See `pkg:angel_framework/http2.dart`.
|
||||||
|
|
||||||
## 2.0.0-alpha.10
|
## 2.0.0-alpha.10
|
||||||
|
@ -379,10 +379,10 @@ stable, there'll be a conversion, perhaps.
|
||||||
|
|
||||||
## 2.0.0-alpha.1
|
## 2.0.0-alpha.1
|
||||||
|
|
||||||
* Removed `Angel.injectEncoders`.
|
* Removed `Protevus.injectEncoders`.
|
||||||
* Added `Providers.toJson`.
|
* Added `Providers.toJson`.
|
||||||
* Moved `Providers.graphql` to `Providers.graphQL`.
|
* Moved `Providers.graphql` to `Providers.graphQL`.
|
||||||
* `Angel.optimizeForProduction` no longer calls `preInject`,
|
* `Protevus.optimizeForProduction` no longer calls `preInject`,
|
||||||
as it does not need to.
|
as it does not need to.
|
||||||
* Rename `ResponseContext.enableBuffer` to `ResponseContext.useBuffer`.
|
* Rename `ResponseContext.enableBuffer` to `ResponseContext.useBuffer`.
|
||||||
|
|
||||||
|
@ -409,15 +409,15 @@ stable, there'll be a conversion, perhaps.
|
||||||
gone.
|
gone.
|
||||||
* `HttpRequestContextImpl` and `HttpResponseContextImpl` were renamed to
|
* `HttpRequestContextImpl` and `HttpResponseContextImpl` were renamed to
|
||||||
`HttpRequestContext` and `HttpResponseContext`.
|
`HttpRequestContext` and `HttpResponseContext`.
|
||||||
* Lazy-parsing request bodies is now the default; `Angel.lazyParseBodies` was replaced
|
* Lazy-parsing request bodies is now the default; `Protevus.lazyParseBodies` was replaced
|
||||||
with `Angel.eagerParseRequestBodies`.
|
with `Protevus.eagerParseRequestBodies`.
|
||||||
* `Angel.storeOriginalBuffer` -> `Angel.storeRawRequestBuffers`.
|
* `Protevus.storeOriginalBuffer` -> `Protevus.storeRawRequestBuffers`.
|
||||||
* The methods `lazyBody`, `lazyFiles`, and `lazyOriginalBuffer` on `ResponseContext` were all
|
* The methods `lazyBody`, `lazyFiles`, and `lazyOriginalBuffer` on `ResponseContext` were all
|
||||||
replaced with `parseBody`, `parseUploadedFiles`, and `parseRawRequestBuffer`, respectively.
|
replaced with `parseBody`, `parseUploadedFiles`, and `parseRawRequestBuffer`, respectively.
|
||||||
* Removed the synchronous equivalents of the above methods (`body`, `files`, and `originalBuffer`),
|
* Removed the synchronous equivalents of the above methods (`body`, `files`, and `originalBuffer`),
|
||||||
as well as `query`.
|
as well as `query`.
|
||||||
* Removed `Angel.injections` and `RequestContext.injections`.
|
* Removed `Protevus.injections` and `RequestContext.injections`.
|
||||||
* Removed `Angel.inject` and `RequestContext.inject`.
|
* Removed `Protevus.inject` and `RequestContext.inject`.
|
||||||
* Removed a dependency on `package:pool`, which also meant removing `AngelHttp.throttle`.
|
* Removed a dependency on `package:pool`, which also meant removing `AngelHttp.throttle`.
|
||||||
* Remove the `RequestMiddleware` typedef; from now on, one should use `ResponseContext.end`
|
* Remove the `RequestMiddleware` typedef; from now on, one should use `ResponseContext.end`
|
||||||
exclusively to close responses.
|
exclusively to close responses.
|
||||||
|
@ -434,9 +434,9 @@ stable, there'll be a conversion, perhaps.
|
||||||
* Removed `RequestContext.properties`.
|
* Removed `RequestContext.properties`.
|
||||||
* Removed the defunct `debug` property where it still existed.
|
* Removed the defunct `debug` property where it still existed.
|
||||||
* `Routable.use` now only accepts a `Service`.
|
* `Routable.use` now only accepts a `Service`.
|
||||||
* Removed `Angel.createZoneForRequest`.
|
* Removed `Protevus.createZoneForRequest`.
|
||||||
* Removed `Angel.defaultZoneCreator`.
|
* Removed `Protevus.defaultZoneCreator`.
|
||||||
* Added all flags to the `Angel` constructor, ex. `Angel.eagerParseBodies`.
|
* Added all flags to the `Protevus` constructor, ex. `Protevus.eagerParseBodies`.
|
||||||
* Fix a bug where synchronous errors in `handleRequest` would not be caught.
|
* Fix a bug where synchronous errors in `handleRequest` would not be caught.
|
||||||
* `AngelHttp.useZone` now defaults to `false`.
|
* `AngelHttp.useZone` now defaults to `false`.
|
||||||
* `ResponseContext` now starts in streaming mode by default; the response buffer is opt-in,
|
* `ResponseContext` now starts in streaming mode by default; the response buffer is opt-in,
|
||||||
|
@ -448,5 +448,5 @@ stable, there'll be a conversion, perhaps.
|
||||||
* Removed the now-obsolete `ResponseContext.end`.
|
* Removed the now-obsolete `ResponseContext.end`.
|
||||||
* Removed the now-obsolete `ResponseContext.releaseCorrespondingRequest`.
|
* Removed the now-obsolete `ResponseContext.releaseCorrespondingRequest`.
|
||||||
* `preInject` now takes a `Reflector` as its second argument.
|
* `preInject` now takes a `Reflector` as its second argument.
|
||||||
* `Angel.reflector` defaults to `const EmptyReflector()`, disabling
|
* `Protevus.reflector` defaults to `const EmptyReflector()`, disabling
|
||||||
reflection out-of-the-box.
|
reflection out-of-the-box.
|
||||||
|
|
|
@ -74,7 +74,7 @@ The performance benchmark can be found at
|
||||||
|
|
||||||
[TechEmpower Framework Benchmarks Round 21](https://www.techempower.com/benchmarks/#section=data-r21&test=composite)
|
[TechEmpower Framework Benchmarks Round 21](https://www.techempower.com/benchmarks/#section=data-r21&test=composite)
|
||||||
|
|
||||||
### Migrating from Angel to Protevus
|
### Migrating from Protevus to Protevus
|
||||||
|
|
||||||
Check out [Migrating to Protevus](https://angel3-docs.dukefirehawk.com/migration/protevus-2.x.x-to-angel3/migration-guide-3)
|
Check out [Migrating to Protevus](https://angel3-docs.dukefirehawk.com/migration/protevus-2.x.x-to-angel3/migration-guide-3)
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ window.onload = function() {
|
||||||
$app.appendChild($h1);
|
$app.appendChild($h1);
|
||||||
$app.appendChild($button);
|
$app.appendChild($button);
|
||||||
|
|
||||||
$h1.textContent = '~Angel HTTP/2 server push~';
|
$h1.textContent = '~Protevus HTTP/2 server push~';
|
||||||
|
|
||||||
$button.textContent = 'Change color';
|
$button.textContent = 'Change color';
|
||||||
$button.onclick = function() {
|
$button.onclick = function() {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Angel HTTP/2</title>
|
<title>Protevus HTTP/2</title>
|
||||||
<style>
|
<style>
|
||||||
input:not([type="submit"]) {
|
input:not([type="submit"]) {
|
||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Angel HTTP/2</title>
|
<title>Protevus HTTP/2</title>
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -26,7 +26,7 @@ void main() async {
|
||||||
|
|
||||||
serverMain(null);
|
serverMain(null);
|
||||||
|
|
||||||
print('Angel listening at http://localhost:3000');
|
print('Protevus listening at http://localhost:3000');
|
||||||
await c.future;
|
await c.future;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ void main() async {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Index route. Returns JSON.
|
// Index route. Returns JSON.
|
||||||
app.get('/', (req, res) => 'Welcome to Angel!');
|
app.get('/', (req, res) => 'Welcome to Protevus!');
|
||||||
|
|
||||||
// Accepts a URL like /greet/foo or /greet/bob.
|
// Accepts a URL like /greet/foo or /greet/bob.
|
||||||
app.get(
|
app.get(
|
||||||
|
@ -50,7 +50,7 @@ void main() async {
|
||||||
var server = await http.startServer('127.0.0.1', 3000);
|
var server = await http.startServer('127.0.0.1', 3000);
|
||||||
var url = 'http://${server.address.address}:${server.port}';
|
var url = 'http://${server.address.address}:${server.port}';
|
||||||
print('Listening at $url');
|
print('Listening at $url');
|
||||||
print('Visit these pages to see Angel in action:');
|
print('Visit these pages to see Protevus in action:');
|
||||||
print('* $url/greet/bob');
|
print('* $url/greet/bob');
|
||||||
print('* $url/greet/?name=emoji');
|
print('* $url/greet/?name=emoji');
|
||||||
print('* $url/greet/?name=jack');
|
print('* $url/greet/?name=jack');
|
||||||
|
|
|
@ -14,7 +14,7 @@ class Controller {
|
||||||
/// The [Protevus] application powering this controller.
|
/// The [Protevus] application powering this controller.
|
||||||
Protevus get app {
|
Protevus get app {
|
||||||
if (_app == null) {
|
if (_app == null) {
|
||||||
throw ArgumentError("Angel is not instantiated.");
|
throw ArgumentError("Protevus is not instantiated.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return _app!;
|
return _app!;
|
||||||
|
|
|
@ -8,7 +8,7 @@ import 'package:stack_trace/stack_trace.dart';
|
||||||
import 'package:tuple/tuple.dart';
|
import 'package:tuple/tuple.dart';
|
||||||
import 'core.dart';
|
import 'core.dart';
|
||||||
|
|
||||||
/// Base driver class for Angel implementations.
|
/// Base driver class for Protevus implementations.
|
||||||
///
|
///
|
||||||
/// Powers both AngelHttp and AngelHttp2.
|
/// Powers both AngelHttp and AngelHttp2.
|
||||||
abstract class Driver<
|
abstract class Driver<
|
||||||
|
|
|
@ -131,7 +131,7 @@ abstract class RequestContext<RawRequest> {
|
||||||
|
|
||||||
/// This setter allows you to explicitly set the request body **exactly once**.
|
/// This setter allows you to explicitly set the request body **exactly once**.
|
||||||
///
|
///
|
||||||
/// Use this if the format of the body is not natively parsed by Angel.
|
/// Use this if the format of the body is not natively parsed by Protevus.
|
||||||
set bodyAsMap(Map<String, dynamic>? value) => bodyAsObject = value;
|
set bodyAsMap(Map<String, dynamic>? value) => bodyAsObject = value;
|
||||||
|
|
||||||
/// Returns a *mutable* [List] parsed from the request [body].
|
/// Returns a *mutable* [List] parsed from the request [body].
|
||||||
|
@ -151,7 +151,7 @@ abstract class RequestContext<RawRequest> {
|
||||||
|
|
||||||
/// This setter allows you to explicitly set the request body **exactly once**.
|
/// This setter allows you to explicitly set the request body **exactly once**.
|
||||||
///
|
///
|
||||||
/// Use this if the format of the body is not natively parsed by Angel.
|
/// Use this if the format of the body is not natively parsed by Protevus.
|
||||||
set bodyAsList(List? value) => bodyAsObject = value;
|
set bodyAsList(List? value) => bodyAsObject = value;
|
||||||
|
|
||||||
/// Returns the parsed request body, whatever it may be (typically a [Map] or [List]).
|
/// Returns the parsed request body, whatever it may be (typically a [Map] or [List]).
|
||||||
|
@ -167,7 +167,7 @@ abstract class RequestContext<RawRequest> {
|
||||||
|
|
||||||
/// This setter allows you to explicitly set the request body **exactly once**.
|
/// This setter allows you to explicitly set the request body **exactly once**.
|
||||||
///
|
///
|
||||||
/// Use this if the format of the body is not natively parsed by Angel.
|
/// Use this if the format of the body is not natively parsed by Protevus.
|
||||||
set bodyAsObject(value) {
|
set bodyAsObject(value) {
|
||||||
if (_bodyObject != null) {
|
if (_bodyObject != null) {
|
||||||
throw StateError(
|
throw StateError(
|
||||||
|
|
|
@ -84,9 +84,9 @@ abstract class ResponseContext<RawResponse>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns `true` if the response is still available for processing by Angel.
|
/// Returns `true` if the response is still available for processing by Protevus.
|
||||||
///
|
///
|
||||||
/// If it is `false`, then Angel will stop executing handlers, and will only run
|
/// If it is `false`, then Protevus will stop executing handlers, and will only run
|
||||||
/// response finalizers if the response [isBuffered].
|
/// response finalizers if the response [isBuffered].
|
||||||
bool get isOpen;
|
bool get isOpen;
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ abstract class ResponseContext<RawResponse>
|
||||||
/// The underlying [RawResponse] under this instance.
|
/// The underlying [RawResponse] under this instance.
|
||||||
RawResponse get rawResponse;
|
RawResponse get rawResponse;
|
||||||
|
|
||||||
/// Signals Angel that the response is being held alive deliberately, and that the framework should not automatically close it.
|
/// Signals Protevus that the response is being held alive deliberately, and that the framework should not automatically close it.
|
||||||
///
|
///
|
||||||
/// This is mostly used in situations like WebSocket handlers, where the connection should remain
|
/// This is mostly used in situations like WebSocket handlers, where the connection should remain
|
||||||
/// open indefinitely.
|
/// open indefinitely.
|
||||||
|
|
|
@ -321,7 +321,7 @@ class Protevus extends Routable {
|
||||||
void optimizeForProduction({bool force = false}) {
|
void optimizeForProduction({bool force = false}) {
|
||||||
if (environment.isProduction || force == true) {
|
if (environment.isProduction || force == true) {
|
||||||
_flattened ??= flatten(this);
|
_flattened ??= flatten(this);
|
||||||
logger.info('Angel is running in production mode.');
|
logger.info('Protevus is running in production mode.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,7 +412,7 @@ class Protevus extends Routable {
|
||||||
|
|
||||||
if (reflector is EmptyReflector || reflector is ThrowingReflector) {
|
if (reflector is EmptyReflector || reflector is ThrowingReflector) {
|
||||||
var msg =
|
var msg =
|
||||||
'No `reflector` was passed to the Angel constructor, so reflection will not be available.\n$_reflectionInfo';
|
'No `reflector` was passed to the Protevus constructor, so reflection will not be available.\n$_reflectionInfo';
|
||||||
this.logger.warning(msg);
|
this.logger.warning(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ class Service<Id, Data> extends Routable {
|
||||||
|
|
||||||
Protevus get app {
|
Protevus get app {
|
||||||
if (_app == null) {
|
if (_app == null) {
|
||||||
throw ArgumentError("Angel is not initialized");
|
throw ArgumentError("Protevus is not initialized");
|
||||||
}
|
}
|
||||||
return _app!;
|
return _app!;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ final RegExp _straySlashes = RegExp(r'(^/+)|(/+$)');
|
||||||
|
|
||||||
typedef ServerGeneratorType = Future<HttpServer> Function(dynamic, int);
|
typedef ServerGeneratorType = Future<HttpServer> Function(dynamic, int);
|
||||||
|
|
||||||
/// Adapts `dart:io`'s [HttpServer] to serve Angel.
|
/// Adapts `dart:io`'s [HttpServer] to serve Protevus.
|
||||||
class ProtevusHttp extends Driver<HttpRequest, HttpResponse, HttpServer,
|
class ProtevusHttp extends Driver<HttpRequest, HttpResponse, HttpServer,
|
||||||
HttpRequestContext, HttpResponseContext> {
|
HttpRequestContext, HttpResponseContext> {
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -15,7 +15,7 @@ Future<SecureServerSocket> startSharedHttp2(
|
||||||
return SecureServerSocket.bind(address, port, ctx, shared: true);
|
return SecureServerSocket.bind(address, port, ctx, shared: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Adapts `package:http2`'s [ServerTransportConnection] to serve Angel.
|
/// Adapts `package:http2`'s [ServerTransportConnection] to serve Protevus.
|
||||||
class ProtevusHttp2 extends Driver<Socket, ServerTransportStream,
|
class ProtevusHttp2 extends Driver<Socket, ServerTransportStream,
|
||||||
SecureServerSocket, Http2RequestContext, Http2ResponseContext> {
|
SecureServerSocket, Http2RequestContext, Http2ResponseContext> {
|
||||||
final ServerSettings? settings;
|
final ServerSettings? settings;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
# Angel Performance Results
|
# Protevus Performance Results
|
||||||
|
|
||||||
5 consecutive trials run on a Windows 10 box with 4GB RAM, and several programs open in the background.
|
5 consecutive trials run on a Windows 10 box with 4GB RAM, and several programs open in the background.
|
||||||
|
|
||||||
Setup:
|
Setup:
|
||||||
|
|
||||||
* Angel framework `1.0.8`
|
* Protevus framework `1.0.8`
|
||||||
* Running `wrk` 4.0.2.2
|
* Running `wrk` 4.0.2.2
|
||||||
* 2 threads
|
* 2 threads
|
||||||
* 256 connections
|
* 256 connections
|
||||||
|
|
|
@ -22,7 +22,7 @@ void main() {
|
||||||
var rs = rq.response;
|
var rs = rq.response;
|
||||||
var body = await rs.transform(utf8.decoder).join();
|
var body = await rs.transform(utf8.decoder).join();
|
||||||
expect(body, json.encode('bar'));
|
expect(body, json.encode('bar'));
|
||||||
}, skip: 'Angel no longer has to preinject functions');
|
}, skip: 'Protevus no longer has to preinject functions');
|
||||||
}
|
}
|
||||||
|
|
||||||
String echoAppFoo(String foo) => foo;
|
String echoAppFoo(String foo) => foo;
|
||||||
|
|
|
@ -141,13 +141,13 @@ void main() {
|
||||||
expect(response.body, equals('abc'));
|
expect(response.body, equals('abc'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Can nest another Angel instance', () async {
|
test('Can nest another Protevus instance', () async {
|
||||||
var response = await client.post(Uri.parse('$url/nes/ted/foo'));
|
var response = await client.post(Uri.parse('$url/nes/ted/foo'));
|
||||||
var json_ = json.decode(response.body);
|
var json_ = json.decode(response.body);
|
||||||
expect(json_['route'], equals('foo'));
|
expect(json_['route'], equals('foo'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Can parse parameters from a nested Angel instance', () async {
|
test('Can parse parameters from a nested Protevus instance', () async {
|
||||||
var response = await client.get(Uri.parse('$url/todos/1337/action/test'));
|
var response = await client.get(Uri.parse('$url/todos/1337/action/test'));
|
||||||
var json_ = json.decode(response.body);
|
var json_ = json.decode(response.body);
|
||||||
print('JSON: $json_');
|
print('JSON: $json_');
|
||||||
|
|
|
@ -80,4 +80,4 @@
|
||||||
## 1.0.3
|
## 1.0.3
|
||||||
|
|
||||||
* Dart2 fixes
|
* Dart2 fixes
|
||||||
* Apparently fix hangs that break Angel tests
|
* Apparently fix hangs that break Protevus tests
|
||||||
|
|
|
@ -9,7 +9,7 @@ void main() {
|
||||||
//var uri = Uri.parse('http://localhost:3000');
|
//var uri = Uri.parse('http://localhost:3000');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
var app = Angel()
|
var app = Protevus()
|
||||||
..get('/foo', (req, res) => 'Hello, world!')
|
..get('/foo', (req, res) => 'Hello, world!')
|
||||||
..post('/body',
|
..post('/body',
|
||||||
(req, res) => req.parseBody().then((_) => req.bodyAsMap.length))
|
(req, res) => req.parseBody().then((_) => req.bodyAsMap.length))
|
||||||
|
|
|
@ -9,7 +9,7 @@ A powerful, isomorphic routing library for Dart.
|
||||||
|
|
||||||
`angel3_route` exposes a routing system that takes the shape of a tree. This tree structure can be easily navigated, in a fashion somewhat similar to a filesystem. The `Router` API is a very straightforward interface that allows for your code to take a shape similar to the route tree. Users of Laravel and Express will be very happy.
|
`angel3_route` exposes a routing system that takes the shape of a tree. This tree structure can be easily navigated, in a fashion somewhat similar to a filesystem. The `Router` API is a very straightforward interface that allows for your code to take a shape similar to the route tree. Users of Laravel and Express will be very happy.
|
||||||
|
|
||||||
`angel3_route` does not require the use of [Angel 3](https://pub.dev/packages/angel3_framework), and has minimal dependencies. Thus, it can be used in any application, regardless of framework. This includes Web apps, Flutter apps, CLI apps, and smaller servers which do not need all the features of the Angel framework.
|
`angel3_route` does not require the use of [Protevus 3](https://pub.dev/packages/angel3_framework), and has minimal dependencies. Thus, it can be used in any application, regardless of framework. This includes Web apps, Flutter apps, CLI apps, and smaller servers which do not need all the features of the Protevus framework.
|
||||||
|
|
||||||
## Contents
|
## Contents
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ A powerful, isomorphic routing library for Dart.
|
||||||
|
|
||||||
### Routing
|
### Routing
|
||||||
|
|
||||||
If you use [Protevus](https://pub.dev/packages/angel3_framework), every `Angel` instance is a `Router` in itself.
|
If you use [Protevus](https://pub.dev/packages/angel3_framework), every `Protevus` instance is a `Router` in itself.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
void main() {
|
void main() {
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Angel Route Samples</title>
|
<title>Protevus Route Samples</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Angel Route Samples</h1>
|
<h1>Protevus Route Samples</h1>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="hash/basic.html">Hash-based</a></li>
|
<li><a href="hash/basic.html">Hash-based</a></li>
|
||||||
<li><a href="push_state/basic.html">Push-state</a></li>
|
<li><a href="push_state/basic.html">Push-state</a></li>
|
||||||
|
|
|
@ -53,4 +53,4 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Updates for Dart 2 and Angel 2.
|
* Updates for Dart 2 and Protevus 2.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// Angel CORS middleware.
|
/// Protevus CORS middleware.
|
||||||
library angel3_cors;
|
library angel3_cors;
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Dart/Angel 2 update.
|
* Dart/Protevus 2 update.
|
||||||
* Remove `package:dart2_constant`
|
* Remove `package:dart2_constant`
|
||||||
* Update `package:file` to `^5.0.0`.
|
* Update `package:file` to `^5.0.0`.
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
||||||
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/file_service/LICENSE)
|
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/file_service/LICENSE)
|
||||||
|
|
||||||
Angel service that persists data to a file on disk, stored as a JSON list. It uses a simple mutex to prevent race conditions, and caches contents in memory until changes are made.
|
Protevus service that persists data to a file on disk, stored as a JSON list. It uses a simple mutex to prevent race conditions, and caches contents in memory until changes are made.
|
||||||
|
|
||||||
The file will be created on read/write, if it does not already exist.
|
The file will be created on read/write, if it does not already exist.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ While not necessarily *slow*, this package makes no promises about performance.
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
// Just like a normal service
|
// Just like a normal service
|
||||||
app.use(
|
app.use(
|
||||||
'/api/todos',
|
'/api/todos',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: angel3_file_service
|
name: angel3_file_service
|
||||||
version: 8.2.0
|
version: 8.2.0
|
||||||
description: Angel service that persists data to a file on disk, stored as a JSON list.
|
description: Protevus service that persists data to a file on disk, stored as a JSON list.
|
||||||
homepage: https://angel3-framework.web.app/
|
homepage: https://angel3-framework.web.app/
|
||||||
repository: https://github.com/dart-backend/protevus/tree/master/packages/file_service
|
repository: https://github.com/dart-backend/protevus/tree/master/packages/file_service
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -106,7 +106,7 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Update for Dart 2 + Angel 2.
|
* Update for Dart 2 + Protevus 2.
|
||||||
|
|
||||||
## 1.1.1+1
|
## 1.1.1+1
|
||||||
|
|
||||||
|
@ -115,5 +115,5 @@
|
||||||
## 1.1.1
|
## 1.1.1
|
||||||
|
|
||||||
* Disable the observatory from pausing the isolate
|
* Disable the observatory from pausing the isolate
|
||||||
on exceptions, because Angel already handles
|
on exceptions, because Protevus already handles
|
||||||
all exceptions by itself.
|
all exceptions by itself.
|
||||||
|
|
|
@ -23,7 +23,7 @@ dependencies:
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
This package is dependent on the Dart VM service, so you *must* run Dart with the `--observe` (or `--enable-vm-service`) argument. Usage is fairly simple. Pass a function that creates an `Angel` server, along with a collection of paths to watch, to the `HotReloader` constructor. The recommended pattern is to only use hot-reloading in your application entry point. Create your `Angel` instance within a separate function, conventionally named `createServer`.
|
This package is dependent on the Dart VM service, so you *must* run Dart with the `--observe` (or `--enable-vm-service`) argument. Usage is fairly simple. Pass a function that creates an `Protevus` server, along with a collection of paths to watch, to the `HotReloader` constructor. The recommended pattern is to only use hot-reloading in your application entry point. Create your `Protevus` instance within a separate function, conventionally named `createServer`.
|
||||||
|
|
||||||
You can watch:
|
You can watch:
|
||||||
|
|
||||||
|
@ -51,8 +51,8 @@ main() async {
|
||||||
await hot.startServer('127.0.0.1', 3000);
|
await hot.startServer('127.0.0.1', 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Angel> createServer() async {
|
Future<Protevus> createServer() async {
|
||||||
var app = Angel()..serializer = json.encode;
|
var app = Protevus()..serializer = json.encode;
|
||||||
|
|
||||||
// Edit this line, and then refresh the page in your browser!
|
// Edit this line, and then refresh the page in your browser!
|
||||||
app.get('/', (req, res) => {'hello': 'hot world!'});
|
app.get('/', (req, res) => {'hello': 'hot world!'});
|
||||||
|
|
|
@ -18,7 +18,7 @@ import 'package:vm_service/vm_service.dart' as vm;
|
||||||
import 'package:vm_service/vm_service_io.dart' as vm;
|
import 'package:vm_service/vm_service_io.dart' as vm;
|
||||||
import 'package:watcher/watcher.dart';
|
import 'package:watcher/watcher.dart';
|
||||||
|
|
||||||
/// A utility class that watches the filesystem for changes, and starts new instances of an Angel server.
|
/// A utility class that watches the filesystem for changes, and starts new instances of an Protevus server.
|
||||||
class HotReloader {
|
class HotReloader {
|
||||||
final StreamController<WatchEvent> _onChange =
|
final StreamController<WatchEvent> _onChange =
|
||||||
StreamController<WatchEvent>.broadcast();
|
StreamController<WatchEvent>.broadcast();
|
||||||
|
|
|
@ -34,4 +34,4 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 + Dart 2 updates.
|
* Protevus 2 + Dart 2 updates.
|
||||||
|
|
|
@ -27,7 +27,7 @@ Node myDom = html(lang: 'en', c: [
|
||||||
]);
|
]);
|
||||||
```
|
```
|
||||||
|
|
||||||
This plug-in means that you can now `return` these AST's, and Angel will automatically send them to clients. Ultimately, the implication is that you can use `belatuk_html_builder` as a substitute for a templating system within Dart. With [hot reloading](https://pub.dev/packages/angel3_hot), you won't even need to reload your server (as it should be).
|
This plug-in means that you can now `return` these AST's, and Protevus will automatically send them to clients. Ultimately, the implication is that you can use `belatuk_html_builder` as a substitute for a templating system within Dart. With [hot reloading](https://pub.dev/packages/angel3_hot), you won't even need to reload your server (as it should be).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ dependencies:
|
||||||
The `renderHtml` function does all the magic for you.
|
The `renderHtml` function does all the magic for you.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
// Wire it up!
|
// Wire it up!
|
||||||
app.fallback(renderHtml());
|
app.fallback(renderHtml());
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ configureServer(Angel app) async {
|
||||||
By default, `renderHtml` will ignore the client's `Accept` header. However, if you pass `enforceAcceptHeader` as `true`, then a `406 Not Acceptable` error will be thrown if the client doesn't accept `*/*` or `text/html`.
|
By default, `renderHtml` will ignore the client's `Accept` header. However, if you pass `enforceAcceptHeader` as `true`, then a `406 Not Acceptable` error will be thrown if the client doesn't accept `*/*` or `text/html`.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
// Wire it up!
|
// Wire it up!
|
||||||
app.fallback(renderHtml(enforceAcceptHeader: true));
|
app.fallback(renderHtml(enforceAcceptHeader: true));
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: angel3_html
|
name: angel3_html
|
||||||
version: 8.1.0
|
version: 8.1.0
|
||||||
description: Support for rendering html_builder AST's as responses in Angel.
|
description: Support for rendering html_builder AST's as responses in Protevus.
|
||||||
homepage: https://angel3-framework.web.app/
|
homepage: https://angel3-framework.web.app/
|
||||||
repository: https://github.com/dart-backend/protevus/tree/angel3/packages/html_builder
|
repository: https://github.com/dart-backend/protevus/tree/angel3/packages/html_builder
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 and Dart 2 updates.
|
* Protevus 2 and Dart 2 updates.
|
||||||
* Default to `.jael` instead of `.jl`.
|
* Default to `.jael` instead of `.jl`.
|
||||||
|
|
||||||
## 1.0.3
|
## 1.0.3
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
||||||
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/jael/angel_jael/LICENSE)
|
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/jael/angel_jael/LICENSE)
|
||||||
|
|
||||||
[Angel 3](https://pub.dev/packages/angel3_framework) support for [Jael 3](https://pub.dev/packages/jael3).
|
[Protevus 3](https://pub.dev/packages/angel3_framework) support for [Jael 3](https://pub.dev/packages/jael3).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ dependencies:
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Just like `mustache` and other renderers, configuring Angel to use Jael is as simple as calling `app.configure`:
|
Just like `mustache` and other renderers, configuring Protevus to use Jael is as simple as calling `app.configure`:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
import 'package:angel3_framework/angel3_framework.dart';
|
import 'package:angel3_framework/angel3_framework.dart';
|
||||||
|
@ -26,7 +26,7 @@ import 'package:angel3_jael/angel3_jael.dart';
|
||||||
import 'package:file/file.dart';
|
import 'package:file/file.dart';
|
||||||
|
|
||||||
AngelConfigurer myPlugin(FileSystem fileSystem) {
|
AngelConfigurer myPlugin(FileSystem fileSystem) {
|
||||||
return (Angel app) async {
|
return (Protevus app) async {
|
||||||
// Connect Jael to your server...
|
// Connect Jael to your server...
|
||||||
await app.configure(
|
await app.configure(
|
||||||
jael(fileSystem.directory('views')),
|
jael(fileSystem.directory('views')),
|
||||||
|
@ -52,7 +52,7 @@ import 'package:file/local.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel();
|
var app = Protevus();
|
||||||
var fileSystem = const LocalFileSystem();
|
var fileSystem = const LocalFileSystem();
|
||||||
|
|
||||||
await app.configure(
|
await app.configure(
|
||||||
|
|
|
@ -5,7 +5,7 @@ import 'package:jael3/jael3.dart';
|
||||||
import 'package:jael3_preprocessor/jael3_preprocessor.dart';
|
import 'package:jael3_preprocessor/jael3_preprocessor.dart';
|
||||||
import 'package:belatuk_symbol_table/belatuk_symbol_table.dart';
|
import 'package:belatuk_symbol_table/belatuk_symbol_table.dart';
|
||||||
|
|
||||||
/// Configures an Angel server to use Jael to render templates.
|
/// Configures an Protevus server to use Jael to render templates.
|
||||||
///
|
///
|
||||||
/// To enable "minified" output, set minified to true
|
/// To enable "minified" output, set minified to true
|
||||||
///
|
///
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: angel3_jael
|
name: angel3_jael
|
||||||
version: 8.2.0
|
version: 8.2.0
|
||||||
description: Angel support for the Jael templating engine, similar to Blade or Liquid.
|
description: Protevus support for the Jael templating engine, similar to Blade or Liquid.
|
||||||
homepage: https://angel3-framework.web.app/
|
homepage: https://angel3-framework.web.app/
|
||||||
repository: https://github.com/dart-backend/protevus/tree/master/packages/jael/angel_jael
|
repository: https://github.com/dart-backend/protevus/tree/master/packages/jael/angel_jael
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -33,7 +33,7 @@ void main() {
|
||||||
|
|
||||||
// e.jl
|
// e.jl
|
||||||
fileSystem.file('e.jl').writeAsStringSync(
|
fileSystem.file('e.jl').writeAsStringSync(
|
||||||
'<extend src="c.jl"><block name="greeting">Angel <b><block name="name">default</block></b></block></extend>');
|
'<extend src="c.jl"><block name="greeting">Protevus <b><block name="name">default</block></b></block></extend>');
|
||||||
|
|
||||||
// fox.jl
|
// fox.jl
|
||||||
fileSystem.file('fox.jl').writeAsStringSync(
|
fileSystem.file('fox.jl').writeAsStringSync(
|
||||||
|
|
|
@ -17,7 +17,7 @@ import 'package:angel_jinja/angel_jinja.dart';
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel();
|
var app = Protevus();
|
||||||
var http = AngelHttp(app);
|
var http = AngelHttp(app);
|
||||||
var viewsDir = p.join(
|
var viewsDir = p.join(
|
||||||
p.dirname(
|
p.dirname(
|
||||||
|
|
|
@ -2,7 +2,7 @@ import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'package:jinja/jinja.dart';
|
import 'package:jinja/jinja.dart';
|
||||||
import 'package:jinja/loaders.dart';
|
import 'package:jinja/loaders.dart';
|
||||||
|
|
||||||
/// Configures an Angel server to use Jinja2 to render templates.
|
/// Configures an Protevus server to use Jinja2 to render templates.
|
||||||
///
|
///
|
||||||
/// By default, templates are loaded from the filesystem;
|
/// By default, templates are loaded from the filesystem;
|
||||||
/// pass your own [createLoader] callback to override this.
|
/// pass your own [createLoader] callback to override this.
|
||||||
|
|
|
@ -49,5 +49,5 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 + Dart 2 updates.
|
* Protevus 2 + Dart 2 updates.
|
||||||
* Use `package:file`.
|
* Use `package:file`.
|
||||||
|
|
|
@ -21,10 +21,10 @@ dependencies:
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
It's very straightforward to configure an Angel server to use Markdown. Keep in mind to use `package:file` instead of `dart:io`:
|
It's very straightforward to configure an Protevus server to use Markdown. Keep in mind to use `package:file` instead of `dart:io`:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
var fs = LocalFileSystem();
|
var fs = LocalFileSystem();
|
||||||
await app.configure(markdown(
|
await app.configure(markdown(
|
||||||
// The directory where your views are located.
|
// The directory where your views are located.
|
||||||
|
@ -36,7 +36,7 @@ configureServer(Angel app) async {
|
||||||
You can then generate HTML on-the-fly in a request handler. Assuming your view directory contained a file named `hello.md`, the following would render it as an HTML response:
|
You can then generate HTML on-the-fly in a request handler. Assuming your view directory contained a file named `hello.md`, the following would render it as an HTML response:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
app.get('/hello', (res) => res.render('hello'));
|
app.get('/hello', (res) => res.render('hello'));
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -72,7 +72,7 @@ You might want to wrap the content of pages in a custom template to apply pretty
|
||||||
CSS and JS, etc:
|
CSS and JS, etc:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
await app.configure(
|
await app.configure(
|
||||||
markdown(
|
markdown(
|
||||||
// The directory where your views are located.
|
// The directory where your views are located.
|
||||||
|
|
|
@ -68,4 +68,4 @@
|
||||||
## 2.0.0-
|
## 2.0.0-
|
||||||
|
|
||||||
* Delete `mongo_service_typed`.
|
* Delete `mongo_service_typed`.
|
||||||
* Update for Angel 2.
|
* Update for Protevus 2.
|
||||||
|
|
|
@ -22,7 +22,7 @@ This library exposes one main class: `MongoService`.
|
||||||
|
|
||||||
## Model
|
## 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.
|
`Model` is class with no real functionality; however, it represents a basic document, and your services should host inherited classes. Other Protevus service providers host `Model` as well, so you will easily be able to modify your application if you ever switch databases.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
class User extends Model {
|
class User extends Model {
|
||||||
|
|
|
@ -49,4 +49,4 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 and Dart 2 support.
|
* Protevus 2 and Dart 2 support.
|
||||||
|
|
|
@ -23,7 +23,7 @@ dependencies:
|
||||||
```dart
|
```dart
|
||||||
const FileSystem fs = const LocalFileSystem();
|
const FileSystem fs = const LocalFileSystem();
|
||||||
|
|
||||||
configureServer(Angel app) async {
|
configureServer(Protevus app) async {
|
||||||
// Run the plug-in
|
// Run the plug-in
|
||||||
await app.configure(mustache(fs.directory('views')));
|
await app.configure(mustache(fs.directory('views')));
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 support.
|
* Protevus 2 support.
|
||||||
|
|
||||||
## 1.0.0+1
|
## 1.0.0+1
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
||||||
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/oauth2/LICENSE)
|
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/oauth2/LICENSE)
|
||||||
|
|
||||||
A class containing handlers that can be used within [Angel](https://angel3-framework.web.app/) to build a spec-compliant OAuth 2.0 server, including PKCE support.
|
A class containing handlers that can be used within [Protevus](https://angel3-framework.web.app/) to build a spec-compliant OAuth 2.0 server, including PKCE support.
|
||||||
|
|
||||||
- [Protevus OAuth2 Server](#angel3-oauth2-server)
|
- [Protevus OAuth2 Server](#angel3-oauth2-server)
|
||||||
- [Installation](#installation)
|
- [Installation](#installation)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:angel3_http_exception/angel3_http_exception.dart';
|
import 'package:angel3_http_exception/angel3_http_exception.dart';
|
||||||
|
|
||||||
/// An Angel-friendly wrapper around OAuth2 [ErrorResponse] instances.
|
/// An Protevus-friendly wrapper around OAuth2 [ErrorResponse] instances.
|
||||||
class AuthorizationException extends ProtevusHttpException {
|
class AuthorizationException extends ProtevusHttpException {
|
||||||
final ErrorResponse errorResponse;
|
final ErrorResponse errorResponse;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: angel3_oauth2
|
name: angel3_oauth2
|
||||||
version: 8.2.0
|
version: 8.2.0
|
||||||
description: A class containing handlers that can be used within Angel to build a spec-compliant OAuth 2.0 server.
|
description: A class containing handlers that can be used within Protevus to build a spec-compliant OAuth 2.0 server.
|
||||||
homepage: https://angel3-framework.web.app/
|
homepage: https://angel3-framework.web.app/
|
||||||
repository: https://github.com/dart-backend/protevus/tree/master/packages/oauth2
|
repository: https://github.com/dart-backend/protevus/tree/master/packages/oauth2
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -96,10 +96,10 @@ import 'package:angel3_orm/angel3_orm.dart';
|
||||||
import 'car.dart';
|
import 'car.dart';
|
||||||
import 'car.orm.g.dart';
|
import 'car.orm.g.dart';
|
||||||
|
|
||||||
/// Returns an Angel plug-in that connects to a database, and sets up a controller connected to it...
|
/// Returns an Protevus plug-in that connects to a database, and sets up a controller connected to it...
|
||||||
AngelConfigurer connectToCarsTable(QueryExecutor executor) {
|
AngelConfigurer connectToCarsTable(QueryExecutor executor) {
|
||||||
return (Angel app) async {
|
return (Protevus app) async {
|
||||||
// Register the connection with Angel's dependency injection system.
|
// Register the connection with Protevus's dependency injection system.
|
||||||
//
|
//
|
||||||
// This means that we can use it as a parameter in routes and controllers.
|
// This means that we can use it as a parameter in routes and controllers.
|
||||||
app.container.registerSingleton(executor);
|
app.container.registerSingleton(executor);
|
||||||
|
|
|
@ -2,7 +2,7 @@ import 'dart:async';
|
||||||
import 'package:args/command_runner.dart';
|
import 'package:args/command_runner.dart';
|
||||||
import 'runner.dart';
|
import 'runner.dart';
|
||||||
|
|
||||||
/// Runs the Angel Migration CLI.
|
/// Runs the Protevus Migration CLI.
|
||||||
Future runMigrations(MigrationRunner migrationRunner, List<String> args) {
|
Future runMigrations(MigrationRunner migrationRunner, List<String> args) {
|
||||||
var cmd = CommandRunner('migration_runner', 'Executes Protevus migrations.')
|
var cmd = CommandRunner('migration_runner', 'Executes Protevus migrations.')
|
||||||
..addCommand(_UpCommand(migrationRunner))
|
..addCommand(_UpCommand(migrationRunner))
|
||||||
|
|
|
@ -3,7 +3,7 @@ import 'package:angel3_framework/angel3_framework.dart' hide Query;
|
||||||
import 'package:angel3_orm/angel3_orm.dart';
|
import 'package:angel3_orm/angel3_orm.dart';
|
||||||
|
|
||||||
/// A [Service] implementation that wraps over a [Query] class generated
|
/// A [Service] implementation that wraps over a [Query] class generated
|
||||||
/// via the Angel ORM.
|
/// via the Protevus ORM.
|
||||||
class OrmService<Id, Data, TQuery extends Query<Data, QueryWhere>>
|
class OrmService<Id, Data, TQuery extends Query<Data, QueryWhere>>
|
||||||
extends Service<Id, Data> {
|
extends Service<Id, Data> {
|
||||||
/// The [QueryExecutor] used to communicate with a database.
|
/// The [QueryExecutor] used to communicate with a database.
|
||||||
|
|
|
@ -161,7 +161,7 @@ void standaloneTests(FutureOr<QueryExecutor> Function() createExecutor,
|
||||||
});
|
});
|
||||||
|
|
||||||
test('update car', () async {
|
test('update car', () async {
|
||||||
var cloned = ferrari!.copyWith(make: 'Angel');
|
var cloned = ferrari!.copyWith(make: 'Protevus');
|
||||||
var query = CarQuery()..values.copyFrom(cloned);
|
var query = CarQuery()..values.copyFrom(cloned);
|
||||||
var carOpt = await (query.updateOne(executor!));
|
var carOpt = await (query.updateOne(executor!));
|
||||||
expect(carOpt.isPresent, true);
|
expect(carOpt.isPresent, true);
|
||||||
|
|
|
@ -25,7 +25,7 @@ import 'package:angel3_production/angel3_production.dart';
|
||||||
|
|
||||||
void main(List<String> args) => Runner('example', configureServer).run(args);
|
void main(List<String> args) => Runner('example', configureServer).run(args);
|
||||||
|
|
||||||
Future configureServer(Angel app) async {
|
Future configureServer(Protevus app) async {
|
||||||
app.get('/', (req, res) => 'Hello, production world!');
|
app.get('/', (req, res) => 'Hello, production world!');
|
||||||
|
|
||||||
app.get('/crash', (req, res) {
|
app.get('/crash', (req, res) {
|
||||||
|
|
|
@ -15,7 +15,7 @@ import 'package:logging/logging.dart';
|
||||||
import 'instance_info.dart';
|
import 'instance_info.dart';
|
||||||
import 'options.dart';
|
import 'options.dart';
|
||||||
|
|
||||||
/// A command-line utility for easier running of multiple instances of an Angel application.
|
/// A command-line utility for easier running of multiple instances of an Protevus application.
|
||||||
///
|
///
|
||||||
/// Makes it easy to do things like configure SSL, log messages, and send messages between
|
/// Makes it easy to do things like configure SSL, log messages, and send messages between
|
||||||
/// all running instances.
|
/// all running instances.
|
||||||
|
@ -156,7 +156,7 @@ class Runner {
|
||||||
.whenComplete(onLogRecord.close);
|
.whenComplete(onLogRecord.close);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Starts a number of isolates, running identical instances of an Angel application.
|
/// Starts a number of isolates, running identical instances of an Protevus application.
|
||||||
Future run(List<String> args) async {
|
Future run(List<String> args) async {
|
||||||
Server? server;
|
Server? server;
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ optional parameter.
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Updates for Angel 2. Big thanks to @denkuy!
|
* Updates for Protevus 2. Big thanks to @denkuy!
|
||||||
* Use `package:path` for better path resolution.
|
* Use `package:path` for better path resolution.
|
||||||
|
|
||||||
## 1.1.1
|
## 1.1.1
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: angel3_proxy
|
name: angel3_proxy
|
||||||
version: 8.2.0
|
version: 8.2.0
|
||||||
description: Angel middleware to forward requests to another server (i.e. pub serve).
|
description: Protevus middleware to forward requests to another server (i.e. pub serve).
|
||||||
homepage: https://angel3-framework.web.app/
|
homepage: https://angel3-framework.web.app/
|
||||||
repository: https://github.com/dart-backend/protevus/tree/master/packages/proxy
|
repository: https://github.com/dart-backend/protevus/tree/master/packages/proxy
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -4,7 +4,7 @@ import 'package:angel3_framework/angel3_framework.dart';
|
||||||
import 'package:resp_client/resp_client.dart';
|
import 'package:resp_client/resp_client.dart';
|
||||||
import 'package:resp_client/resp_commands.dart';
|
import 'package:resp_client/resp_commands.dart';
|
||||||
|
|
||||||
/// An Angel service that reads and writes JSON within a Redis store.
|
/// An Protevus service that reads and writes JSON within a Redis store.
|
||||||
class RedisService extends Service<String, Map<String, dynamic>> {
|
class RedisService extends Service<String, Map<String, dynamic>> {
|
||||||
final RespCommandsTier2 respCommands;
|
final RespCommandsTier2 respCommands;
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ a problem, as it lowers the number of events that need to be handled on the clie
|
||||||
|
|
||||||
## Model
|
## 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.
|
`Model` is class with no real functionality; however, it represents a basic document, and your services should host inherited classes. Other Protevus service providers host `Model` as well, so you will easily be able to modify your application if you ever switch databases.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
class User extends Model {
|
class User extends Model {
|
||||||
|
|
|
@ -57,5 +57,5 @@
|
||||||
|
|
||||||
## 2.0.0-alpha
|
## 2.0.0-alpha
|
||||||
|
|
||||||
* Angel 2 updates. Remove previous functionality.
|
* Protevus 2 updates. Remove previous functionality.
|
||||||
* Add `CookieSigner`, `RateLimiter`/`InMemoryRateLimiter`/`ServiceRateLimiter`
|
* Add `CookieSigner`, `RateLimiter`/`InMemoryRateLimiter`/`ServiceRateLimiter`
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 updates.
|
* Protevus 2 updates.
|
||||||
|
|
||||||
## 1.0.0
|
## 1.0.0
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
[![Discord](https://img.shields.io/discord/1060322353214660698)](https://discord.gg/3X6bxTUdCM)
|
||||||
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/seo/LICENSE)
|
[![License](https://img.shields.io/github/license/dart-backend/protevus)](https://github.com/dart-backend/protevus/tree/master/packages/seo/LICENSE)
|
||||||
|
|
||||||
Helpers for building SEO-friendly Web pages in Angel. The goal of `package:angel3_seo` is to speed up perceived client page loads, prevent the infamous [flash of unstyled content](https://en.wikipedia.org/wiki/Flash_of_unstyled_content), and other SEO optimizations that can easily become tedious to perform by hand.
|
Helpers for building SEO-friendly Web pages in Protevus. The goal of `package:angel3_seo` is to speed up perceived client page loads, prevent the infamous [flash of unstyled content](https://en.wikipedia.org/wiki/Flash_of_unstyled_content), and other SEO optimizations that can easily become tedious to perform by hand.
|
||||||
|
|
||||||
## Disabling inlining per-element
|
## Disabling inlining per-element
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ import 'package:angel3_static/angel3_static.dart';
|
||||||
import 'package:file/local.dart';
|
import 'package:file/local.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel()..lazyParseBodies = true;
|
var app = Protevus()..lazyParseBodies = true;
|
||||||
var fs = const LocalFileSystem();
|
var fs = const LocalFileSystem();
|
||||||
var http = AngelHttp(app);
|
var http = AngelHttp(app);
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ import 'package:angel3_static/angel3_static.dart';
|
||||||
import 'package:file/local.dart';
|
import 'package:file/local.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel()..lazyParseBodies = true;
|
var app = Protevus()..lazyParseBodies = true;
|
||||||
var fs = const LocalFileSystem();
|
var fs = const LocalFileSystem();
|
||||||
var http = AngelHttp(app);
|
var http = AngelHttp(app);
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
<link rel="stylesheet" href="not-inlined.css" data-no-inline>
|
<link rel="stylesheet" href="not-inlined.css" data-no-inline>
|
||||||
<script src="site.js"></script>
|
<script src="site.js"></script>
|
||||||
<script src="not-inlined.js" data-no-inline></script>
|
<script src="not-inlined.js" data-no-inline></script>
|
||||||
<title>Angel SEO</title>
|
<title>Protevus SEO</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Angel SEO</h1>
|
<h1>Protevus SEO</h1>
|
||||||
<p>Embrace the power of inlined styles, etc.</p>
|
<p>Embrace the power of inlined styles, etc.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -134,10 +134,10 @@ var contents = <String, String>{
|
||||||
<link data-foo="bar" rel="stylesheet" href="not-inlined.css" data-no-inline>
|
<link data-foo="bar" rel="stylesheet" href="not-inlined.css" data-no-inline>
|
||||||
<script data-foo="bar" src="site.js"></script>
|
<script data-foo="bar" src="site.js"></script>
|
||||||
<script type="text/javascript" src="not-inlined.js" data-no-inline></script>
|
<script type="text/javascript" src="not-inlined.js" data-no-inline></script>
|
||||||
<title>Angel SEO</title>
|
<title>Protevus SEO</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Angel SEO</h1>
|
<h1>Protevus SEO</h1>
|
||||||
<p>Embrace the power of inlined styles, etc.</p>
|
<p>Embrace the power of inlined styles, etc.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>''',
|
</html>''',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: angel3_serialize_generator
|
name: angel3_serialize_generator
|
||||||
version: 8.3.1
|
version: 8.3.1
|
||||||
description: Protevus model serialization generators, designed for use with Angel. Combine with angel_serialize for flexible modeling.
|
description: Protevus model serialization generators, designed for use with Protevus. Combine with angel_serialize for flexible modeling.
|
||||||
homepage: https://angel3-framework.web.app/
|
homepage: https://angel3-framework.web.app/
|
||||||
repository: https://github.com/dart-backend/protevus/tree/master/packages/serialize/angel_serialize_generator
|
repository: https://github.com/dart-backend/protevus/tree/master/packages/serialize/angel_serialize_generator
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
## 2.1.0
|
## 2.1.0
|
||||||
|
|
||||||
* `pedantic` lints.
|
* `pedantic` lints.
|
||||||
* Add the `AngelShelf` driver class, which allows you to embed Angel within shelf.
|
* Add the `AngelShelf` driver class, which allows you to embed Protevus within shelf.
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
|
|
|
@ -7,19 +7,19 @@
|
||||||
|
|
||||||
**Replacement of `package:angel_shelf` with breaking changes to support NNBD.**
|
**Replacement of `package:angel_shelf` with breaking changes to support NNBD.**
|
||||||
|
|
||||||
Shelf interop with Protevus. This package lets you run `package:shelf` handlers via a custom adapter. Use the code in this repo to embed existing Angel/shelf apps into other Angel/shelf applications. This way, you can migrate legacy applications without having to rewrite your business logic. This will make it easy to layer your API over a production application, rather than having to port code.
|
Shelf interop with Protevus. This package lets you run `package:shelf` handlers via a custom adapter. Use the code in this repo to embed existing Protevus/shelf apps into other Protevus/shelf applications. This way, you can migrate legacy applications without having to rewrite your business logic. This will make it easy to layer your API over a production application, rather than having to port code.
|
||||||
|
|
||||||
- [Protevus Shelf](#angel3-shelf)
|
- [Protevus Shelf](#angel3-shelf)
|
||||||
- [Usage](#usage)
|
- [Usage](#usage)
|
||||||
- [embedShelf](#embedshelf)
|
- [embedShelf](#embedshelf)
|
||||||
- [Communicating with Angel with embedShelf](#communicating-with-protevus-with-embedshelf)
|
- [Communicating with Protevus with embedShelf](#communicating-with-protevus-with-embedshelf)
|
||||||
- [AngelShelf](#angelshelf)
|
- [AngelShelf](#angelshelf)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### embedShelf
|
### embedShelf
|
||||||
|
|
||||||
This is a compliant `shelf` adapter that acts as an Angel request handler. You can use it as a middleware,
|
This is a compliant `shelf` adapter that acts as an Protevus request handler. You can use it as a middleware,
|
||||||
or attach it to individual routes.
|
or attach it to individual routes.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
|
@ -30,10 +30,10 @@ import 'package:shelf/shelf.dart' as shelf;
|
||||||
import 'api/api.dart';
|
import 'api/api.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel();
|
var app = Protevus();
|
||||||
var http = AngelHttp(app);
|
var http = AngelHttp(app);
|
||||||
|
|
||||||
// Angel routes on top
|
// Protevus routes on top
|
||||||
await app.mountController<ApiController>();
|
await app.mountController<ApiController>();
|
||||||
|
|
||||||
// Re-route all other traffic to an
|
// Re-route all other traffic to an
|
||||||
|
@ -52,13 +52,13 @@ void main() async {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Communicating with Angel with embedShelf
|
### Communicating with Protevus with embedShelf
|
||||||
|
|
||||||
You can communicate with Protevus:
|
You can communicate with Protevus:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
handleRequest(shelf.Request request) {
|
handleRequest(shelf.Request request) {
|
||||||
// Access original Angel request...
|
// Access original Protevus request...
|
||||||
var req = request.context['angel_shelf.request'] as RequestContext;
|
var req = request.context['angel_shelf.request'] as RequestContext;
|
||||||
|
|
||||||
// ... And then interact with it.
|
// ... And then interact with it.
|
||||||
|
@ -72,7 +72,7 @@ handleRequest(shelf.Request request) {
|
||||||
|
|
||||||
### AngelShelf
|
### AngelShelf
|
||||||
|
|
||||||
Protevus brought about the generic `Driver` class, which is implemented by `AngelHttp`, `AngelHttp2`, `AngelGopher`, etc., and provides the core infrastructure for request handling in Angel. `AngelShelf` is an implementation that wraps shelf requests and responses in their Angel equivalents. Using it is as simple using as using `AngelHttp`, or any other driver:
|
Protevus brought about the generic `Driver` class, which is implemented by `AngelHttp`, `AngelHttp2`, `AngelGopher`, etc., and provides the core infrastructure for request handling in Protevus. `AngelShelf` is an implementation that wraps shelf requests and responses in their Protevus equivalents. Using it is as simple using as using `AngelHttp`, or any other driver:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
// Create an AngelShelf driver.
|
// Create an AngelShelf driver.
|
||||||
|
@ -89,7 +89,7 @@ await shelf_io.serve(angelShelf.handler, InternetAddress.loopbackIPv4, 8081);
|
||||||
|
|
||||||
You can also use the `AngelShelf` driver as a shelf middleware - just use
|
You can also use the `AngelShelf` driver as a shelf middleware - just use
|
||||||
`angelShelf.middleware` instead of `angelShelf.handler`. When used as a middleware,
|
`angelShelf.middleware` instead of `angelShelf.handler`. When used as a middleware,
|
||||||
if the Angel response context is still open after all handlers run (i.e. no routes were
|
if the Protevus response context is still open after all handlers run (i.e. no routes were
|
||||||
matched), the next shelf handler will be called.
|
matched), the next shelf handler will be called.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
|
|
|
@ -27,7 +27,7 @@ import 'package:angel3_static/angel3_static.dart';
|
||||||
import 'package:file/local.dart';
|
import 'package:file/local.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel();
|
var app = Protevus();
|
||||||
var fs = const LocalFileSystem();
|
var fs = const LocalFileSystem();
|
||||||
|
|
||||||
// Normal static server
|
// Normal static server
|
||||||
|
|
|
@ -50,5 +50,5 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Dart 2 + Angel 2 updates.
|
* Dart 2 + Protevus 2 updates.
|
||||||
* Extend `StreamChannel`, instead of the defunct `WebSocketSynchronizer`.
|
* Extend `StreamChannel`, instead of the defunct `WebSocketSynchronizer`.
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
|
|
||||||
## 2.0.0-alpha
|
## 2.0.0-alpha
|
||||||
|
|
||||||
* Depend on Dart 2 and Angel 2.
|
* Depend on Dart 2 and Protevus 2.
|
||||||
|
|
||||||
## 1.1.0+1
|
## 1.1.0+1
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ ws.onData.listen(...);
|
||||||
|
|
||||||
## Matchers
|
## Matchers
|
||||||
|
|
||||||
Several `Matcher`s are bundled with this package, and run on any `package:http` `Response`, not just those returned by Angel.
|
Several `Matcher`s are bundled with this package, and run on any `package:http` `Response`, not just those returned by Protevus.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
void test('foo', () async {
|
void test('foo', () async {
|
||||||
|
|
|
@ -41,4 +41,4 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Angel 2 + Dart 2 updates
|
* Protevus 2 + Dart 2 updates
|
||||||
|
|
|
@ -78,11 +78,11 @@
|
||||||
|
|
||||||
## 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Finish update for Angel 2.
|
* Finish update for Protevus 2.
|
||||||
|
|
||||||
## 2.0.0-alpha.1
|
## 2.0.0-alpha.1
|
||||||
|
|
||||||
* Update for Angel 2.
|
* Update for Protevus 2.
|
||||||
|
|
||||||
## 1.0.5-beta
|
## 1.0.5-beta
|
||||||
|
|
||||||
|
|
|
@ -284,7 +284,7 @@ final Validator todo = Validator({
|
||||||
});
|
});
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel();
|
var app = Protevus();
|
||||||
|
|
||||||
app.chain([validate(echo)]).post('/echo', (req, res) async {
|
app.chain([validate(echo)]).post('/echo', (req, res) async {
|
||||||
res.write('You said: "${req.bodyAsMap["message"]}"');
|
res.write('You said: "${req.bodyAsMap["message"]}"');
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// Support for using `angel_validate` with the Angel Framework.
|
/// Support for using `angel_validate` with the Protevus Framework.
|
||||||
library angel3_validate.server;
|
library angel3_validate.server;
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
|
|
||||||
## 2.0.0-alpha.3
|
## 2.0.0-alpha.3
|
||||||
|
|
||||||
* Directly import Angel HTTP.
|
* Directly import Protevus HTTP.
|
||||||
|
|
||||||
## 2.0.0-alpha.2
|
## 2.0.0-alpha.2
|
||||||
|
|
||||||
|
@ -113,12 +113,12 @@
|
||||||
|
|
||||||
## 2.0.0-alpha.1
|
## 2.0.0-alpha.1
|
||||||
|
|
||||||
* Refactorings for updated Angel 2 versions.
|
* Refactorings for updated Protevus 2 versions.
|
||||||
* Remove `package:dart2_constant`.
|
* Remove `package:dart2_constant`.
|
||||||
|
|
||||||
## 2.0.0-alpha
|
## 2.0.0-alpha
|
||||||
|
|
||||||
* Depend on Dart 2 and Angel 2.
|
* Depend on Dart 2 and Protevus 2.
|
||||||
|
|
||||||
## 1.1.2
|
## 1.1.2
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ import "package:angel3_framework/angel3_framework.dart";
|
||||||
import "package:angel3_websocket/server.dart";
|
import "package:angel3_websocket/server.dart";
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
var app = Angel();
|
var app = Protevus();
|
||||||
|
|
||||||
var ws = AngelWebSocket();
|
var ws = AngelWebSocket();
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ Clients can even perform authentication over WebSockets.
|
||||||
import "package:angel3_websocket/browser.dart";
|
import "package:angel3_websocket/browser.dart";
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
Angel app = WebSockets("/ws");
|
Protevus app = WebSockets("/ws");
|
||||||
await app.connect();
|
await app.connect();
|
||||||
|
|
||||||
var Cars = app.service("api/cars");
|
var Cars = app.service("api/cars");
|
||||||
|
@ -134,7 +134,7 @@ class Car extends Model {
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
Angel app = WebSockets("/ws");
|
Protevus app = WebSockets("/ws");
|
||||||
|
|
||||||
// Wait for WebSocket connection...
|
// Wait for WebSocket connection...
|
||||||
await app.connect();
|
await app.connect();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue