Skip to content

Commit 8e85d78

Browse files
committed
Reorganized package, put example it it's own directory, etc
1 parent bf1e804 commit 8e85d78

20 files changed

+99
-80
lines changed

.gitignore

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
packages
2-
/*/build/
3-
.pub/
4-
pubspec.lock
5-
6-
# Files generated by dart tools
71
.dart_tool
8-
doc/
2+
.packages
3+
pubspec.lock
File renamed without changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div>Hello World</div>

example/pubspec.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
name: webdev_example_app
2+
description: A web app example for webdev CLI.
3+
4+
environment:
5+
sdk: ">=2.0.0-dev.32.0 <2.0.0"
6+
7+
dependencies:
8+
angular: ^5.0.0-alpha+3
9+
10+
dev_dependencies:
11+
build_runner: ^0.8.0
12+
build_web_compilers: ^0.3.4

webdev/example/web/index.html renamed to example/web/index.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
<title>webdev example</title>
55
<meta charset="utf-8">
66
<meta name="viewport" content="width=device-width, initial-scale=1">
7-
<script defer src="main.dart" type="application/dart"></script>
8-
<script defer src="packages/browser/dart.js"></script>
7+
<script defer src="main.dart.js"></script>
98
<link rel="stylesheet" href="styles.css">
109
</head>
1110
<body>

example/web/main.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import 'package:angular/experimental.dart';
2+
3+
// ignore: uri_has_not_been_generated
4+
import 'package:webdev_example_app/app_component.template.dart' as ng;
5+
6+
main() {
7+
// ignore: argument_type_not_assignable
8+
bootstrapFactory(ng.AppComponentNgFactory);
9+
}
File renamed without changes.

webdev/bin/webdev.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:async';
22

3-
import 'package:webdev/webdev.dart';
3+
import 'package:webdev/src/webdev_command_runner.dart';
44

55
Future main(List<String> args) async {
66
await webdevCommandRunner().run(args);

webdev/example/lib/src/hello_world/hello_world.html

Lines changed: 0 additions & 1 deletion
This file was deleted.

webdev/example/pubspec.yaml

Lines changed: 0 additions & 25 deletions
This file was deleted.

webdev/example/web/main.dart

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import 'dart:async';
2-
import 'dart:isolate';
3-
42
import 'build_runner_command_base.dart';
53

64
/// Command to execute pub run build_runner build.
@@ -12,12 +10,5 @@ class BuildCommand extends BuildRunnerCommandBase {
1210
final description = 'Run builders to build a package.';
1311

1412
@override
15-
Future run() async {
16-
final arguments = ['build'];
17-
arguments.addAll(argResults.arguments);
18-
var exitPort = new ReceivePort();
19-
await Isolate.spawnUri(await buildRunnerScript, arguments, null,
20-
onExit: exitPort.sendPort, automaticPackageResolution: true);
21-
await exitPort.first;
22-
}
13+
Future run() => runCore('build');
2314
}

webdev/lib/src/command/build_runner_command_base.dart

Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:async';
22
import 'dart:io';
3+
import 'dart:isolate';
34

45
import 'package:args/command_runner.dart';
56

@@ -19,13 +20,66 @@ abstract class BuildRunnerCommandBase extends Command {
1920
help: 'Enables verbose logging.');
2021
}
2122

22-
Future<Uri> get buildRunnerScript async {
23-
// TODO(nshahan) build_runner will expose this as a function call that will
24-
// be imported to avoid running a binary in a transitive dependency with
25-
// pub run.
26-
final executable = 'pub';
27-
final arguments = ['run', 'build_runner', 'generate-build-script'];
28-
final results = await Process.run(executable, arguments);
29-
return new Uri.file(results.stdout.toString().trim());
23+
Future runCore(String command) async {
24+
final arguments = [command]..addAll(argResults.arguments);
25+
var exitPort = new ReceivePort();
26+
await Isolate.spawnUri(await _buildRunnerScript, arguments, null,
27+
onExit: exitPort.sendPort, automaticPackageResolution: true);
28+
await exitPort.first;
3029
}
3130
}
31+
32+
Future<Uri> get _buildRunnerScript async {
33+
var dataUri = new Uri.dataFromString(_bootstrapScript);
34+
35+
var messagePort = new ReceivePort();
36+
var exitPort = new ReceivePort();
37+
var errorPort = new ReceivePort();
38+
39+
await Isolate.spawnUri(dataUri, [], messagePort.sendPort,
40+
onExit: exitPort.sendPort,
41+
onError: errorPort.sendPort,
42+
errorsAreFatal: true,
43+
packageConfig: new Uri.file('.packages'));
44+
45+
var allErrorsFuture = errorPort.forEach((error) {
46+
var errorList = error as List;
47+
var message = errorList[0] as String;
48+
var stack = new StackTrace.fromString(errorList[1] as String);
49+
50+
stderr.writeln(message);
51+
stderr.writeln(stack);
52+
});
53+
54+
var items = await Future.wait([
55+
messagePort.toList(),
56+
allErrorsFuture,
57+
exitPort.first.whenComplete(() {
58+
messagePort.close();
59+
errorPort.close();
60+
})
61+
]);
62+
63+
var messages = items[0] as List;
64+
if (messages.isEmpty) {
65+
throw new StateError('An error occurred while running booting.');
66+
}
67+
68+
assert(messages.length == 1);
69+
return new Uri.file(messages.single as String);
70+
}
71+
72+
const _bootstrapScript = r'''
73+
import 'dart:io';
74+
import 'dart:isolate';
75+
76+
import 'package:build_runner/build_script_generate.dart';
77+
import 'package:path/path.dart' as p;
78+
79+
void main(List<String> args, [SendPort sendPort]) async {
80+
var buildScript = await generateBuildScript();
81+
var scriptFile = new File(scriptLocation)..createSync(recursive: true);
82+
scriptFile.writeAsStringSync(buildScript);
83+
sendPort.send(p.absolute(scriptLocation));
84+
}
85+
''';
Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'dart:async';
2-
import 'dart:isolate';
32

43
import 'build_runner_command_base.dart';
54

@@ -17,16 +16,13 @@ class ServeCommand extends BuildRunnerCommandBase {
1716
// build_runner might expose args for use in wrapping scripts like this one.
1817
argParser
1918
..addOption('hostname',
20-
defaultsTo: 'localhost', help: 'Specify the hostname to serve on.');
19+
help: 'Specify the hostname to serve on', defaultsTo: 'localhost')
20+
..addFlag('log-requests',
21+
defaultsTo: false,
22+
negatable: false,
23+
help: 'Enables logging for each request to the server.');
2124
}
2225

2326
@override
24-
Future run() async {
25-
final arguments = ['serve'];
26-
arguments.addAll(argResults.arguments);
27-
var exitPort = new ReceivePort();
28-
await Isolate.spawnUri(await buildRunnerScript, arguments, null,
29-
onExit: exitPort.sendPort, automaticPackageResolution: true);
30-
await exitPort.first;
31-
}
27+
Future run() => runCore('serve');
3228
}

webdev/lib/webdev.dart

Lines changed: 0 additions & 1 deletion
This file was deleted.

webdev/pubspec.yaml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@ name: webdev
22
description: A CLI for Dart web development.
33
author: Dart Team <misc@dartlang.org>
44
homepage: https://github.com/dart-lang/webdev
5+
version: 0.1.0-dev
56

67
environment:
7-
sdk: ">=2.0.0-dev.3.0 <2.0.0"
8+
sdk: ">=2.0.0-dev.32.0 <2.0.0"
89

910
dependencies:
1011
args: ^1.2.0
11-
build_runner:
12-
git:
13-
url: https://github.com/dart-lang/build.git
14-
path: build_runner
15-
build_web_compilers: ^0.1.1
1612

17-
dev_dependencies:
18-
test: "^0.12.0"
13+
executables:
14+
webdev:

0 commit comments

Comments
 (0)