diff --git a/.analysis_options b/.analysis_options
index e243eaf..ae7799e 100644
--- a/.analysis_options
+++ b/.analysis_options
@@ -1,4 +1,4 @@
analyzer:
strong-mode: true
exclude:
- - bin/template
\ No newline at end of file
+ - bin/template/**
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c69216b..5ab1922 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+## 0.2.0
+* Add `init` command to create a config file inside an existing project
+* Update `Angular2`
+* move all libraries export to `lib/`
+* simplify generated file name (no '_component.dart', '_service.dart'...)
+* `sass` support
+* `less` support
+* refactor `Route` defintion
+* bugfix
+
+
## 0.1.0
### Add full application generation with `new` command
diff --git a/README.md b/README.md
index 6133636..424ef77 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,7 @@ pub global run ng2gen:new app
- `ng2gen service my_service`
- `ng2gen pipe my_pipe`
- `ng2gen route home /home_path`
+- `ng2gen init`
## Create an Application
diff --git a/bin/app.dart b/bin/app.dart
index 85cffc8..8e78623 100644
--- a/bin/app.dart
+++ b/bin/app.dart
@@ -6,11 +6,11 @@ import "dart:io";
import 'dart:async';
import "package:dev_string_converter/dev_string_converter.dart";
-import "utils.dart";
import "package:stagehand/stagehand.dart";
import "package:stagehand/src/common.dart";
-import "app_template_data.dart" as template;
import 'package:path/path.dart' as path;
+import "app_template_data.dart" as template;
+import "utils.dart";
class _DirectoryGeneratorTarget extends GeneratorTarget {
final Directory dir;
diff --git a/bin/app_template_data.dart b/bin/app_template_data.dart
index 71b8fc1..5883b8e 100644
--- a/bin/app_template_data.dart
+++ b/bin/app_template_data.dart
@@ -1,68 +1,47 @@
-// Copyright (c) 2014, Google Inc. Please see the AUTHORS file for details.
-// All rights reserved. Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
const List data = const [
".gitignore",
"text",
"LnBhY2thZ2VzCnB1YnNwZWMubG9jawoucHViCnBhY2thZ2VzCmJ1aWxkCi5pZGVh",
"angular.config.yaml",
"text",
- "cHJvamVjdDoKICBuYW1lOiAiX19wcm9qZWN0TmFtZV9fIgogIGNvbXBvbmVudHM6ICJsaWIvY29tcG9uZW50cyIKICBkaXJlY3RpdmVzOiAibGliL2RpcmVjdGl2ZXMiCiAgc2VydmljZXM6ICJsaWIvc2VydmljZXMiCiAgcm91dGVzOiAibGliL3JvdXRlcyIKICBwaXBlczogImxpYi9waXBlcyIKCnNlcnZlcjoKICBob3N0bmFtZTogIjAuMC4wLjAiCiAgcG9ydDogMTMzNw==",
- "lib/__projectName__.dart",
+ "cHJvamVjdDoKICByb290OiAiYXBwLmRhcnQiCiAgY29tcG9uZW50czogImNvbXBvbmVudHMiCiAgZGlyZWN0aXZlczogImRpcmVjdGl2ZXMiCiAgc2VydmljZXM6ICJzZXJ2aWNlcyIKICByb3V0ZXM6ICJyb3V0ZXMiCiAgcGlwZXM6ICJwaXBlcyIKICBzYXNzOiBmYWxzZQogIGxlc3M6IGZhbHNlCgpzZXJ2ZXI6CiAgaG9zdG5hbWU6ICIwLjAuMC4wIgogIHBvcnQ6IDEzMzc=",
+ "lib/app.dart",
"text",
- "bGlicmFyeSBfX3Byb2plY3ROYW1lX187CgppbXBvcnQgJ3BhY2thZ2U6YW5ndWxhcjIvY29yZS5kYXJ0JzsKaW1wb3J0ICJwYWNrYWdlOmFuZ3VsYXIyL3JvdXRlci5kYXJ0IjsKCmV4cG9ydCAibW9kZWxzLmRhcnQiOwpleHBvcnQgImNvbnZlcnQvY29udmVydC5kYXJ0IjsKZXhwb3J0ICJzZXJ2aWNlcy9zZXJ2aWNlcy5kYXJ0IjsKZXhwb3J0ICJwaXBlcy9waXBlcy5kYXJ0IjsKZXhwb3J0ICJkaXJlY3RpdmVzL2RpcmVjdGl2ZXMuZGFydCI7CmV4cG9ydCAicm91dGVzL3JvdXRlcy5kYXJ0IjsKZXhwb3J0ICJjb21wb25lbnRzL2NvbXBvbmVudHMuZGFydCI7CgppbXBvcnQgInJvdXRlcy9yb3V0ZXMuZGFydCI7CgpAQ29tcG9uZW50KAogICAgc2VsZWN0b3I6ICdteS1hcHAnLAogICAgdGVtcGxhdGVVcmw6ICJfX3Byb2plY3ROYW1lX18uaHRtbCIsCiAgICBkaXJlY3RpdmVzOiBjb25zdCBbUk9VVEVSX0RJUkVDVElWRVNdKQpAUm91dGVDb25maWcoY29uc3QgWwogIGNvbnN0IFJvdXRlKAogICAgICB1c2VBc0RlZmF1bHQ6IGZhbHNlLCBwYXRoOiAnL2hvbWUnLCBuYW1lOiAnSG9tZScsIGNvbXBvbmVudDogSG9tZVJvdXRlKQpdKQpjbGFzcyBBcHBDb21wb25lbnQge30K",
- "lib/__projectName__.html",
+ "bGlicmFyeSBfX3Byb2plY3ROYW1lX187CgppbXBvcnQgJ3BhY2thZ2U6YW5ndWxhcjIvY29yZS5kYXJ0JzsKaW1wb3J0ICJwYWNrYWdlOmFuZ3VsYXIyL3JvdXRlci5kYXJ0IjsKaW1wb3J0ICJyb3V0ZXMuZGFydCI7CgpAQ29tcG9uZW50KAogICAgc2VsZWN0b3I6ICdteS1hcHAnLAogICAgdGVtcGxhdGVVcmw6ICJhcHAuaHRtbCIsCiAgICBkaXJlY3RpdmVzOiBjb25zdCA8ZHluYW1pYz5bUk9VVEVSX0RJUkVDVElWRVNdKQpAUm91dGVDb25maWcoY29uc3QgPGR5bmFtaWM+WwogIC8qSW5zZXJ0IFJvdXRlcyBoZXJlKi8KXSkKY2xhc3MgQXBwQ29tcG9uZW50IHt9Cg==",
+ "lib/app.html",
"text",
- "PGgxPk15IEZpcnN0IEFuZ3VsYXIgMiBBcHA8L2gxPgo8bmF2PgogICAgPGEgW3JvdXRlckxpbmtdPSJbJ0hvbWUnXSI+SG9tZTwvYT4KPC9uYXY+Cjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD4K",
- "lib/components/components.dart",
+ "PGgxPk15IEZpcnN0IEFuZ3VsYXIgMiBBcHA8L2gxPgo8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+Cg==",
+ "lib/components.dart",
"text",
- "bGlicmFyeSBfX3Byb2plY3ROYW1lX18uY29tcG9uZW50czsK",
- "lib/convert/convert.dart",
- "text",
- "Ly8gR2VuZXJhdGVkIGJ5IERvZ21hIERhcnQuIERPIE5PVCBNT0RJRlkhCi8vIDIwMTYtMDUtMDYgMjE6MzI6MzYuMDUyNDMwCgpsaWJyYXJ5IF9fcHJvamVjdE5hbWVfXy5jb252ZXJ0LmNvbnZlcnQ7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBFeHBvcnRzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpleHBvcnQgJ2RhdGFfY29udmVydC5kYXJ0JzsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIExpYnJhcnkgY29udGVudHMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K",
- "lib/convert/data_convert.dart",
- "text",
- "Ly8gR2VuZXJhdGVkIGJ5IERvZ21hIERhcnQuIERPIE5PVCBNT0RJRlkhCi8vIDIwMTYtMDUtMDYgMjE6MzI6MzYuMDUyNDMwCgpsaWJyYXJ5IF9fcHJvamVjdE5hbWVfXy5jb252ZXJ0LmRhdGFfY29udmVydDsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFN0YW5kYXJkIGxpYnJhcmllcwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gSW1wb3J0cwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaW1wb3J0ICdwYWNrYWdlOl9fcHJvamVjdE5hbWVfXy9tb2RlbHMuZGFydCc7CmltcG9ydCAncGFja2FnZTpkb2dtYV9jb252ZXJ0L2NvbnZlcnQuZGFydCc7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBMaWJyYXJ5IGNvbnRlbnRzCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLy8gQSBbTW9kZWxEZWNvZGVyXSBmb3IgW0RhdGFdLgpjbGFzcyBEYXRhRGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxNYXAsIERhdGE+IGltcGxlbWVudHMgTW9kZWxEZWNvZGVyPERhdGE+IHsKICBAb3ZlcnJpZGUKICBEYXRhIGNyZWF0ZSgpID0+IG5ldyBEYXRhKCk7CiAgQG92ZXJyaWRlCiAgRGF0YSBjb252ZXJ0KE1hcCBpbnB1dCwgW0RhdGEgbW9kZWxdKSB7CiAgICBtb2RlbCA/Pz0gY3JlYXRlKCk7CgogICAgbW9kZWwuZm9vID0gaW5wdXRbJ2ZvbyddOwogICAgcmV0dXJuIG1vZGVsOwogIH0KfQoKLy8vIEEgW01vZGVsRW5jb2Rlcl0gZm9yIFtEYXRhXS4KY2xhc3MgRGF0YUVuY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8RGF0YSwgTWFwPiBpbXBsZW1lbnRzIE1vZGVsRW5jb2RlcjxEYXRhPiB7CiAgQG92ZXJyaWRlCiAgTWFwIGNvbnZlcnQoRGF0YSBpbnB1dCkgewogICAgdmFyIG1vZGVsID0ge307CgogICAgbW9kZWxbJ2ZvbyddID0gaW5wdXQuZm9vOwoKICAgIHJldHVybiBtb2RlbDsKICB9Cn0K",
- "lib/directives/directives.dart",
- "text",
- "bGlicmFyeSBfX3Byb2plY3ROYW1lX18uZGlyZWN0aXZlczsK",
- "lib/models/data.dart",
+ "",
+ "lib/directives.dart",
"text",
- "LyoqCiAqIENyZWF0ZWQgYnkgbGVqYXJkX2ggb24gMDYvMDUvMTYuCiAqLwoKY2xhc3MgRGF0YSB7CgogICAgU3RyaW5nIGZvbyA9ICJiYXIiOwoKfQ==",
+ "",
"lib/models.dart",
"text",
- "bGlicmFyeSBfX3Byb2plY3ROYW1lX18ubW9kZWxzOwoKZXhwb3J0ICdtb2RlbHMvZGF0YS5kYXJ0Jzs=",
- "lib/pipes/pipes.dart",
- "text",
- "bGlicmFyeSBfX3Byb2plY3ROYW1lX18ucGlwZXM7Cg==",
- "lib/routes/home_route/home_route.css",
- "text",
"",
- "lib/routes/home_route/home_route.dart",
+ "lib/pipes.dart",
+ "text",
+ "Cg==",
+ "lib/routes.dart",
"text",
- "Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCA8eW91ciBuYW1lPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUKLy8gaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmFuZ3VsYXIyL2NvcmUuZGFydCc7CgpAQ29tcG9uZW50KAogIHNlbGVjdG9yOiAnaG9tZS1yb3V0ZScsCiAgdGVtcGxhdGU6ICcnJwogICAgICAgIDxwPgogICAgICAgICAgaG9tZS1yb3V0ZSB3b3JrcyEKICAgICAgICA8L3A+CiAgICAgICAgJycnLAogIHN0eWxlVXJsczogY29uc3QgWydob21lX3JvdXRlLmNzcyddKQpjbGFzcyBIb21lUm91dGUgaW1wbGVtZW50cyBPbkluaXQgewoKICBIb21lUm91dGUoKTsKCiAgbmdPbkluaXQoKSB7fQoKfQo=",
- "lib/routes/routes.dart",
+ "Cg==",
+ "lib/services.dart",
"text",
- "bGlicmFyeSBfX3Byb2plY3ROYW1lX18ucm91dGVzOwoKZXhwb3J0ICJob21lX3JvdXRlL2hvbWVfcm91dGUuZGFydCI7Cg==",
- "lib/services/services.dart",
+ "Cg==",
+ "lib/styles/styles.css",
"text",
- "bGlicmFyeSBfX3Byb2plY3ROYW1lX18uc2VydmljZXM7Cg==",
+ "Cg==",
"pubspec.yaml",
"text",
- "bmFtZTogX19wcm9qZWN0TmFtZV9fCnZlcnNpb246IDAuMC4xCmRlc2NyaXB0aW9uOgphdXRob3I6CmhvbWVwYWdlOgoKZGVwZW5kZW5jaWVzOgogICAgYW5ndWxhcjI6IDIuMC4wLWJldGEuMTcKICAgIGJyb3dzZXI6IF4wLjEwLjAKICAgIGRhcnRfdG9fanNfc2NyaXB0X3Jld3JpdGVyOiBeMS4wLjEKCmRldl9kZXBlbmRlbmNpZXM6CiAgICBncmluZGVyOiAiXjAuOC4wKzIiCiAgICB0ZXN0OiAiXjAuMTIuMTMrMSIKICAgIHdhdGNoZXI6ICJeMC45LjcrMiIKICAgIHlhbWw6ICJeMi4xLjkiCiAgICBkb2dtYV9jb2RlZ2VuOiAnPj0wLjAuMiA8MC4xLjAnCgp0cmFuc2Zvcm1lcnM6CiAgICAtIGFuZ3VsYXIyOgogICAgICAgIGVudHJ5X3BvaW50czogd2ViL21haW4uZGFydAogICAgLSBkYXJ0X3RvX2pzX3NjcmlwdF9yZXdyaXRlcgogICAgLSAkZGFydDJqczoKICAgICAgICBtaW5pZnk6IHRydWUKICAgICAgICBjb21tYW5kTGluZU9wdGlvbnM6CiAgICAgICAgICAgIC0gLS10cnVzdC10eXBlLWFubm90YXRpb25zCiAgICAgICAgICAgIC0gLS10cnVzdC1wcmltaXRpdmVzCg==",
+ "bmFtZTogX19wcm9qZWN0TmFtZV9fCnZlcnNpb246IDAuMC4xCmRlc2NyaXB0aW9uOgphdXRob3I6CmhvbWVwYWdlOgoKZGVwZW5kZW5jaWVzOgogICAgYW5ndWxhcjI6IF4yLjAuMC1iZXRhLjIyCiAgICBicm93c2VyOiBeMC4xMC4wCiAgICBkYXJ0X3RvX2pzX3NjcmlwdF9yZXdyaXRlcjogXjEuMC4xCiAgICAjIHNhc3NfdHJhbnNmb3JtZXI6IF4wLjEuMCAjIyBpZiB5b3UgdXNlIHNhc3MKICAgICMgbGVzc19kYXJ0OiBeMC4zLjQgIyMgaWYgeW91IHVzZSBsZXNzCgpkZXZfZGVwZW5kZW5jaWVzOgogICAgdGVzdDogIl4wLjEyLjEzKzEiCiAgICB5YW1sOiAiXjIuMS45IgoKdHJhbnNmb3JtZXJzOgogICAgIy0gc2Fzc190cmFuc2Zvcm1lciAjIyBpZiB5b3UgdXNlIHNhc3MKICAgICMtIGxlc3NfZGFydCAjIyBpZiB5b3UgdXNlIGxlc3MKICAgIC0gYW5ndWxhcjI6CiAgICAgICAgcGxhdGZvcm1fZGlyZWN0aXZlczoKICAgICAgICAgIC0gJ3BhY2thZ2U6YW5ndWxhcjIvY29tbW9uLmRhcnQjQ09NTU9OX0RJUkVDVElWRVMnCiAgICAgICAgcGxhdGZvcm1fcGlwZXM6CiAgICAgICAgICAtICdwYWNrYWdlOmFuZ3VsYXIyL2NvbW1vbi5kYXJ0I0NPTU1PTl9QSVBFUycKICAgICAgICBlbnRyeV9wb2ludHM6IHdlYi9tYWluLmRhcnQKICAgIC0gZGFydF90b19qc19zY3JpcHRfcmV3cml0ZXIKICAgIC0gJGRhcnQyanM6CiAgICAgICAgbWluaWZ5OiB0cnVlCiAgICAgICAgY29tbWFuZExpbmVPcHRpb25zOgogICAgICAgICAgICAtIC0tdHJ1c3QtdHlwZS1hbm5vdGF0aW9ucwogICAgICAgICAgICAtIC0tdHJ1c3QtcHJpbWl0aXZlcwo=",
"test/main.dart",
"text",
"aW1wb3J0ICdwYWNrYWdlOnRlc3QvdGVzdC5kYXJ0JzsKCm1haW4oKSB7fQo=",
- "tool/grind.dart",
- "text",
- "aW1wb3J0ICJkYXJ0OmlvIjsKaW1wb3J0ICJwYWNrYWdlOmdyaW5kZXIvZ3JpbmRlci5kYXJ0IjsKaW1wb3J0ICJwYWNrYWdlOnlhbWwveWFtbC5kYXJ0IjsKaW1wb3J0ICJwYWNrYWdlOmRvZ21hX2NvZGVnZW4vYnVpbGQuZGFydCIgYXMgZG9nbWFfYnVpbGQ7CmltcG9ydCAicGFja2FnZTp3YXRjaGVyL3dhdGNoZXIuZGFydCI7CgpjbGFzcyBDb25maWdGaWxlIHsKICBzdGF0aWMgTWFwPFN0cmluZywgZHluYW1pYz4gX2NvbmZpZzsKCiAgQ29uZmlnRmlsZSgpIHsKICAgIGlmIChfY29uZmlnID09IG51bGwpIHsKICAgICAgRmlsZSBfY29uZmlnRmlsZSA9IG5ldyBGaWxlKCJhbmd1bGFyLmNvbmZpZy55YW1sIik7CiAgICAgIGlmIChfY29uZmlnRmlsZS5leGlzdHNTeW5jKCkpIHsKICAgICAgICBfY29uZmlnID0gbG9hZFlhbWwoX2NvbmZpZ0ZpbGUucmVhZEFzU3RyaW5nU3luYygpKSBhcyBNYXA8U3RyaW5nLCBkeW5hbWljPjsKICAgICAgfQogICAgfQogIH0KCiAgU3RyaW5nIGdldCBwcm9qZWN0TmFtZSB7CiAgICBpZiAoX2NvbmZpZyAhPSBudWxsICAmJiBfY29uZmlnLmNvbnRhaW5zS2V5KCJwcm9qZWN0IikpIHsKICAgICAgcmV0dXJuIF9jb25maWdbInByb2plY3QiXVsibmFtZSJdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBpbnQgZ2V0IHNlcnZlclBvcnQgewogICAgaWYgKF9jb25maWcgIT0gbnVsbCAgJiYgX2NvbmZpZy5jb250YWluc0tleSgic2VydmVyIikpIHsKICAgICAgcmV0dXJuIF9jb25maWdbInNlcnZlciJdWyJwb3J0Il07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFN0cmluZyBnZXQgc2VydmVySG9zdG5hbWUgewogICAgaWYgKF9jb25maWcgIT0gbnVsbCAgJiYgX2NvbmZpZy5jb250YWluc0tleSgic2VydmVyIikpIHsKICAgICAgcmV0dXJuIF9jb25maWdbInNlcnZlciJdWyJob3N0bmFtZSJdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTdHJpbmcgZ2V0IGNvbXBvbmVudHNQYXRoIHsKICAgIGlmIChfY29uZmlnICE9IG51bGwgICYmIF9jb25maWcuY29udGFpbnNLZXkoInByb2plY3QiKSkgewogICAgICByZXR1cm4gX2NvbmZpZ1sicHJvamVjdCJdWyJjb21wb25lbnRzIl07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFN0cmluZyBnZXQgc2VydmljZXNQYXRoIHsKICAgIGlmIChfY29uZmlnICE9IG51bGwgICYmIF9jb25maWcuY29udGFpbnNLZXkoInByb2plY3QiKSkgewogICAgICByZXR1cm4gX2NvbmZpZ1sicHJvamVjdCJdWyJzZXJ2aWNlcyJdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTdHJpbmcgZ2V0IHBpcGVzUGF0aCB7CiAgICBpZiAoX2NvbmZpZyAhPSBudWxsICAmJiBfY29uZmlnLmNvbnRhaW5zS2V5KCJwcm9qZWN0IikpIHsKICAgICAgcmV0dXJuIF9jb25maWdbInByb2plY3QiXVsicGlwZXMiXTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgU3RyaW5nIGdldCByb3V0ZXNQYXRoIHsKICAgIGlmIChfY29uZmlnICE9IG51bGwgICYmIF9jb25maWcuY29udGFpbnNLZXkoInByb2plY3QiKSkgewogICAgICByZXR1cm4gX2NvbmZpZ1sicHJvamVjdCJdWyJyb3V0ZXMiXTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgU3RyaW5nIGdldCBkaXJlY3RpdmVzUGF0aCB7CiAgICBpZiAoX2NvbmZpZyAhPSBudWxsICAmJiBfY29uZmlnLmNvbnRhaW5zS2V5KCJwcm9qZWN0IikpIHsKICAgICAgcmV0dXJuIF9jb25maWdbInByb2plY3QiXVsiZGlyZWN0aXZlcyJdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTdHJpbmcgZ2V0IG1vZGVsc1BhdGggewogICAgaWYgKF9jb25maWcgIT0gbnVsbCAgJiYgX2NvbmZpZy5jb250YWluc0tleSgicHJvamVjdCIpKSB7CiAgICAgIHJldHVybiBfY29uZmlnWyJwcm9qZWN0Il1bIm1vZGVscyJdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpDb25maWdGaWxlIGNvbmZpZyA9IG5ldyBDb25maWdGaWxlKCk7CgptYWluKExpc3Q8U3RyaW5nPiBhcmdzKSBhc3luYyA9PiBhd2FpdCBncmluZChhcmdzKTsKCkBUYXNrKCJtb2RlbHMiKQpjb2RlZ2VuKCkgYXN5bmMgewogIGF3YWl0IGRvZ21hX2J1aWxkLmJ1aWxkKFtdLAogICAgICBtb2RlbExpYnJhcnk6ICJsaWIvbW9kZWxzLmRhcnQiLAogICAgICBtb2RlbFBhdGg6ICJsaWIvbW9kZWxzLyIsCiAgICAgIGNvbnZlcnRQYXRoOiAibGliL2NvbnZlcnQiLAogICAgICBjb252ZXJ0TGlicmFyeTogImxpYi9jb252ZXJ0L2NvbnZlcnQuZGFydCIsCiAgICAgIG1hcHBlcjogZmFsc2UsCiAgICAgIHVubW9kaWZpYWJsZTogZmFsc2UpOwp9CgpAVGFzaygid2F0Y2hNb2RlbHMiKQp3YXRjaE1vZGVscygpIHsKICBuZXcgV2F0Y2hlcigibGliL21vZGVscyIpLmV2ZW50cy5saXN0ZW4oKFdhdGNoRXZlbnQgXykgewogICAgcHJpbnQoIltjb2RlZ2VuXSIpOwogICAgY29kZWdlbigpOwogIH0pOwp9CgpAVGFzaygic2VydmUiKQpARGVwZW5kcyhjb2RlZ2VuLCB3YXRjaE1vZGVscykKc2VydmUoKSBhc3luYyB7CiAgUHJvY2VzcyBfc2VydmVyID0gYXdhaXQgUHJvY2Vzcy5zdGFydCgKICAgICAgInB1YiIsCiAgICAgIFsKICAgICAgICAic2VydmUiLAogICAgICAgICItLWhvc3RuYW1lPSR7Y29uZmlnLnNlcnZlckhvc3RuYW1lfSIsCiAgICAgICAgIi0tcG9ydD0ke2NvbmZpZy5zZXJ2ZXJQb3J0fSIKICAgICAgXSwKICAgICAgcnVuSW5TaGVsbDogdHJ1ZSk7CiAgcHJpbnQoIlNlcnZpbmcgaHR0cDovLyR7Y29uZmlnLnNlcnZlckhvc3RuYW1lfToke2NvbmZpZy5zZXJ2ZXJQb3J0fSIpOwoKICBQcm9jZXNzIGRhcnRpdW07CgogIF9zZXJ2ZXIuc3Rkb3V0Lmxpc3RlbigoTGlzdDxpbnQ+IGRhdGEpIGFzeW5jIHsKICAgIFN0cmluZyBtZXNzYWdlID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEpOwogICAgc3Rkb3V0LndyaXRlKG1lc3NhZ2UpOwogICAgaWYgKG1lc3NhZ2UgPT0gIkJ1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIgJiYgZGFydGl1bSA9PSBudWxsKSB7CiAgICAgIGRhcnRpdW0gPSBhd2FpdCBQcm9jZXNzLnN0YXJ0KAogICAgICAgICAgImRhcnRpdW0iLCBbImh0dHA6Ly8ke2NvbmZpZy5zZXJ2ZXJIb3N0bmFtZX06JHtjb25maWcuc2VydmVyUG9ydH0iXSwKICAgICAgICAgIHJ1bkluU2hlbGw6IHRydWUpOwogICAgfQogIH0pOwoKICBfc2VydmVyLnN0ZGVyci5saXN0ZW4oKExpc3Q8aW50PiBkYXRhKSB7CiAgICBzdGRlcnIud3JpdGUobmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEpKTsKICB9KTsKICBhd2FpdCBfc2VydmVyLmV4aXRDb2RlOwp9CgpAVGFzaygiZG9jIikKZG9jKCkgewogIERhcnREb2MuZG9jKCk7Cn0KCkBUYXNrKCJidWlsZCIpCmJ1aWxkKCkgYXN5bmMgewogIFByb2Nlc3MgcCA9IGF3YWl0IFByb2Nlc3Muc3RhcnQoInB1YiIsIFsiYnVpbGQiLCAiLS1tb2RlPXJlbGVhc2UiLCAiLURQUk9EVUNUSU9OPXRydWUiXSk7CiAgcC5zdGRvdXQubGlzdGVuKChMaXN0PGludD4gZGF0YSkgYXN5bmMgewogICAgc3Rkb3V0LndyaXRlKG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhKSk7CiAgfSk7CiAgcC5zdGRlcnIubGlzdGVuKChMaXN0PGludD4gZGF0YSkgewogICAgc3RkZXJyLndyaXRlKG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhKSk7CiAgfSk7CiAgYXdhaXQgcC5leGl0Q29kZTsKfQoKQFRhc2soInRlc3QiKQp0ZXN0KCkgewogIG5ldyBQdWJBcHAubG9jYWwoJ3Rlc3QnKS5ydW4oW10pOwp9CgpAVGFzaygiZGVwbG95IikKQERlcGVuZHModGVzdCwgZG9jLCBjb2RlZ2VuLCBidWlsZCkKZGVwbG95KCkgYXN5bmMge30KCkBUYXNrKCJjbGVhbiIpCnZvaWQgY2xlYW4oKSA9PiBkZWZhdWx0Q2xlYW4oKTs=",
"web/index.html",
"text",
- "PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPGJhc2UgaHJlZj0iLyI+CiAgICA8dGl0bGU+QW5ndWxhciAyPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLmNzcyI+CiAgICA8c2NyaXB0IGFzeW5jIHNyYz0ibWFpbi5kYXJ0IiB0eXBlPSJhcHBsaWNhdGlvbi9kYXJ0Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgYXN5bmMgc3JjPSJwYWNrYWdlcy9icm93c2VyL2RhcnQuanMiPjwvc2NyaXB0PgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxteS1hcHA+TG9hZGluZy4uLjwvbXktYXBwPgogIDwvYm9keT4KPC9odG1sPgo=",
+ "PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPGJhc2UgaHJlZj0iLyI+CiAgICA8dGl0bGU+QW5ndWxhciAyPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icGFja2FnZXMvX19wcm9qZWN0TmFtZV9fL3N0eWxlcy9zdHlsZXMuY3NzIj4KICAgIDxzY3JpcHQgYXN5bmMgc3JjPSJtYWluLmRhcnQiIHR5cGU9ImFwcGxpY2F0aW9uL2RhcnQiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBhc3luYyBzcmM9InBhY2thZ2VzL2Jyb3dzZXIvZGFydC5qcyI+PC9zY3JpcHQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPG15LWFwcD5Mb2FkaW5nLi4uPC9teS1hcHA+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==",
"web/main.dart",
"text",
- "aW1wb3J0ICJkYXJ0OmNvcmUiOwoKaW1wb3J0ICdwYWNrYWdlOmFuZ3VsYXIyL3BsYXRmb3JtL2Jyb3dzZXIuZGFydCc7CmltcG9ydCAicGFja2FnZTphbmd1bGFyMi9jb3JlLmRhcnQiOwppbXBvcnQgJ3BhY2thZ2U6YW5ndWxhcjIvc3JjL2NvcmUvcmVmbGVjdGlvbi9yZWZsZWN0aW9uLmRhcnQnOwppbXBvcnQgInBhY2thZ2U6YW5ndWxhcjIvcm91dGVyLmRhcnQiOwppbXBvcnQgInBhY2thZ2U6YW5ndWxhcjIvc3JjL3BsYXRmb3JtL2Jyb3dzZXIvbG9jYXRpb24vaGFzaF9sb2NhdGlvbl9zdHJhdGVneS5kYXJ0IjsKaW1wb3J0ICJwYWNrYWdlOmFuZ3VsYXIyL3BsYXRmb3JtL2NvbW1vbi5kYXJ0IjsKCmltcG9ydCAicGFja2FnZTpfX3Byb2plY3ROYW1lX18vX19wcm9qZWN0TmFtZV9fLmRhcnQiOwoKYm9vbCBnZXQgaXNEZWJ1ZyA9PiAoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgiUFJPRFVDVElPTiIsIGRlZmF1bHRWYWx1ZTogImZhbHNlIikpICE9ICJ0cnVlIjsKCm1haW4oKSBhc3luYyB7CiAgaWYgKGlzRGVidWcpIHsKICAgIHJlZmxlY3Rvci50cmFja1VzYWdlKCk7CiAgfQogIENvbXBvbmVudFJlZiByZWYgPSBhd2FpdCBib290c3RyYXAoCiAgICAgIEFwcENvbXBvbmVudCwgW1JPVVRFUl9QUk9WSURFUlMsIGNvbnN0IFByb3ZpZGVyKExvY2F0aW9uU3RyYXRlZ3ksIHVzZUNsYXNzOiBIYXNoTG9jYXRpb25TdHJhdGVneSldKTsKCiAgaWYgKGlzRGVidWcpIHsKICAgIHByaW50KCJBcHBsaWNhdGlvbiBpbiBEZWJ1Z01vZGUiKTsKICAgIGVuYWJsZURlYnVnVG9vbHMocmVmKTsKICAgIHByaW50KCdVbnVzZWQga2V5czogJHtyZWZsZWN0b3IubGlzdFVudXNlZEtleXMoKX0nKTsKICB9Cn0K",
- "web/styles.css",
- "text",
- "Cg=="
+ "aW1wb3J0ICJkYXJ0OmNvcmUiOwoKaW1wb3J0ICdwYWNrYWdlOmFuZ3VsYXIyL3BsYXRmb3JtL2Jyb3dzZXIuZGFydCc7CmltcG9ydCAicGFja2FnZTphbmd1bGFyMi9jb3JlLmRhcnQiOwppbXBvcnQgJ3BhY2thZ2U6YW5ndWxhcjIvc3JjL2NvcmUvcmVmbGVjdGlvbi9yZWZsZWN0aW9uLmRhcnQnOwppbXBvcnQgInBhY2thZ2U6YW5ndWxhcjIvcm91dGVyLmRhcnQiOwppbXBvcnQgInBhY2thZ2U6YW5ndWxhcjIvc3JjL3BsYXRmb3JtL2Jyb3dzZXIvbG9jYXRpb24vaGFzaF9sb2NhdGlvbl9zdHJhdGVneS5kYXJ0IjsKaW1wb3J0ICJwYWNrYWdlOmFuZ3VsYXIyL3BsYXRmb3JtL2NvbW1vbi5kYXJ0IjsKCmltcG9ydCAicGFja2FnZTpfX3Byb2plY3ROYW1lX18vYXBwLmRhcnQiOwoKYm9vbCBnZXQgaXNEZWJ1ZyA9PiAoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgiUFJPRFVDVElPTiIsIGRlZmF1bHRWYWx1ZTogImZhbHNlIikpICE9ICJ0cnVlIjsKCm1haW4oKSBhc3luYyB7CiAgaWYgKGlzRGVidWcpIHsKICAgIHJlZmxlY3Rvci50cmFja1VzYWdlKCk7CiAgfQogIENvbXBvbmVudFJlZiByZWYgPSBhd2FpdCBib290c3RyYXAoCiAgICAgIEFwcENvbXBvbmVudCwgW1JPVVRFUl9QUk9WSURFUlMsIGNvbnN0IFByb3ZpZGVyKExvY2F0aW9uU3RyYXRlZ3ksIHVzZUNsYXNzOiBIYXNoTG9jYXRpb25TdHJhdGVneSldKTsKCiAgaWYgKGlzRGVidWcpIHsKICAgIHByaW50KCJBcHBsaWNhdGlvbiBpbiBEZWJ1Z01vZGUiKTsKICAgIGVuYWJsZURlYnVnVG9vbHMocmVmKTsKICAgIHByaW50KCdVbnVzZWQga2V5czogJHtyZWZsZWN0b3IubGlzdFVudXNlZEtleXMoKX0nKTsKICB9Cn0K"
];
diff --git a/bin/component.dart b/bin/component.dart
index 6f0698d..aa91e14 100644
--- a/bin/component.dart
+++ b/bin/component.dart
@@ -11,38 +11,39 @@ main(List args) async {
if (config?.componentsPath != null) {
path = "${config.componentsPath}/${toTableName(name)}";
- lib = "${config.componentsPath}/components.dart";
+ lib = "lib/components.dart";
}
- String dartPath = '$path/${toTableName(name)}_component.dart';
- String htmlPath = '$path/${toTableName(name)}_component.html';
- String cssPath = '$path/${toTableName(name)}_component.css';
+ String prefix = config?.componentsPath != null ? "lib/" : "";
+ String filePath = '$prefix$path/${toTableName(name)}';
+
+ String dartPath = '$filePath.dart';
+ String htmlPath = '$filePath.html';
+ String cssPath = '$filePath.${config.styleFileType}';
await writeInFile(dartPath, componentTemplateDart(name));
await writeInFile(htmlPath, componentTemplateHtml(name));
await createFile(cssPath);
if (lib != null) {
- addToLibrary("${toTableName(name)}/${toTableName(name)}_component.dart", lib);
+ addToLibrary("$path/${toTableName(name)}.dart", lib);
}
}
String componentTemplateDart(String name) =>
- '''// Copyright (c) 2016, . All rights reserved. Use of this source code
-// is governed by a BSD-style license that can be found in the LICENSE file.
-
-import 'package:angular2/core.dart';
+ '''import 'package:angular2/core.dart';
@Component(
selector: '${toPolyName(name)}',
- templateUrl: '${toTableName(name)}_component.html',
- styleUrls: const ['${toTableName(name)}_component.css'])
+ templateUrl: '${toTableName(name)}.html',
+ styleUrls: const ['${toTableName(name)}.css'])
class ${toUpperCamelCase(name)} implements OnInit {
${toUpperCamelCase(name)}();
- ngOnInit() {}
+ @override
+ void ngOnInit() {}
}
''';
diff --git a/bin/component_inline.dart b/bin/component_inline.dart
index 210cb1c..d9fdd76 100644
--- a/bin/component_inline.dart
+++ b/bin/component_inline.dart
@@ -11,26 +11,26 @@ main(List args) async {
if (config?.componentsPath != null) {
path = "${config.componentsPath}/${toTableName(name)}";
- lib = "${config.componentsPath}/components.dart";
+ lib = "lib/components.dart";
}
- String dartPath = '$path/${toTableName(name)}_component.dart';
- String cssPath = '$path/${toTableName(name)}_component.css';
+ String prefix = config?.componentsPath != null ? "lib/" : "";
+ String filePath = '$prefix$path/${toTableName(name)}';
+
+ String dartPath = '$filePath.dart';
+ String cssPath = '$filePath.${config.styleFileType}';
await writeInFile(dartPath, componentTemplateDart(name));
await createFile(cssPath);
if (lib != null) {
- addToLibrary("${toTableName(name)}/${toTableName(name)}_component.dart", lib);
+ addToLibrary("$path/${toTableName(name)}.dart", lib);
}
}
String componentTemplateDart(String name) =>
- '''// Copyright (c) 2016, . All rights reserved. Use of this source code
-// is governed by a BSD-style license that can be found in the LICENSE file.
-
-import 'package:angular2/core.dart';
+ '''import 'package:angular2/core.dart';
@Component(
selector: '${toPolyName(name)}',
@@ -39,12 +39,13 @@ import 'package:angular2/core.dart';
${toPolyName(name)} works!
\'\'\',
- styleUrls: const ['${toTableName(name)}_component.css'])
+ styleUrls: const ['${toTableName(name)}.css'])
class ${toUpperCamelCase(name)} implements OnInit {
${toUpperCamelCase(name)}();
- ngOnInit() {}
+ @override
+ void ngOnInit() {}
}
''';
\ No newline at end of file
diff --git a/bin/directive.dart b/bin/directive.dart
index 2c28718..006ef48 100644
--- a/bin/directive.dart
+++ b/bin/directive.dart
@@ -11,23 +11,22 @@ main(List args) async {
if (config?.directivesPath != null) {
path = "${config.directivesPath}";
- lib = "${config.directivesPath}/directives.dart";
+ lib = "lib/directives.dart";
}
- String dartPath = '$path/${toTableName(name)}_directive.dart';
+ String prefix = config?.directivesPath != null ? "lib/" : "";
+
+ String dartPath = '$prefix$path/${toTableName(name)}.dart';
await writeInFile(dartPath, directiveTemplate(name));
if (lib != null) {
- addToLibrary("${toTableName(name)}_directive.dart", lib);
+ addToLibrary("$path/${toTableName(name)}.dart", lib);
}
}
String directiveTemplate(String name) => '''
-// Copyright (c) 2016, . All rights reserved. Use of this source code
-// is governed by a BSD-style license that can be found in the LICENSE file.
-
import "package:angular2/core.dart";
@Directive(
diff --git a/bin/init.dart b/bin/init.dart
new file mode 100644
index 0000000..0b44a61
--- /dev/null
+++ b/bin/init.dart
@@ -0,0 +1,29 @@
+import 'dart:io';
+import 'package:yaml/yaml.dart';
+import "utils.dart";
+
+main(List _) async {
+ File pubspec = new File("pubspec.yaml");
+ if (!(await pubspec.exists())) {
+ output("'pubspec.yaml' not found.", Color.red);
+ } else {
+ File config = new File(config_file_name);
+ if (config.existsSync()) {
+ output("'$config_file_name' already exist.", Color.red);
+ } else {
+ config.writeAsString(configYaml);
+ }
+ }
+}
+
+String get configYaml =>
+'''project:
+ root: "app.dart"
+ components: "lib/components"
+ directives: "lib/directives"
+ services: "lib/services"
+ routes: "lib/routes"
+ pipes: "lib/pipes"
+ sass: false
+ less: false
+ ''';
diff --git a/bin/main.dart b/bin/main.dart
index e16542c..5b8bd90 100644
--- a/bin/main.dart
+++ b/bin/main.dart
@@ -7,11 +7,16 @@ import 'pipe.dart' as pipe;
import 'app.dart' as app;
import 'component_inline.dart' as component_inline;
import 'route.dart' as route;
+import 'init.dart' as init;
/// Creates a
main(List args) {
_showHelp(args, 0);
switch(args[0]) {
+ case 'init':
+ _showHelp(args, 0);
+ init.main(args.getRange(1, args.length).toList());
+ break;
case 'component':
_showHelp(args, 1);
component.main(args.getRange(1, args.length).toList());
@@ -59,6 +64,7 @@ USAGE:
service : create a new service.
pipe : create a new pipe.
route : create a new route.
+ init : init an existing project with ng2gen
''');
exit(0);
}
diff --git a/bin/pipe.dart b/bin/pipe.dart
index c314eb1..8818dcd 100644
--- a/bin/pipe.dart
+++ b/bin/pipe.dart
@@ -11,33 +11,33 @@ main(List args) async {
if (config?.pipesPath != null) {
path = "${config.pipesPath}";
- lib = "${config.pipesPath}/pipes.dart";
+ lib = "lib/pipes.dart";
}
- String dartPath = '$path/${toTableName(name)}_pipe.dart';
+ String prefix = config?.pipesPath != null ? "lib/" : "";
+
+ String dartPath = '$prefix$path/${toTableName(name)}.dart';
await writeInFile(dartPath, pipeTemplate(name));
if (lib != null) {
- addToLibrary("${toTableName(name)}_pipe.dart", lib);
+ addToLibrary("$path/${toTableName(name)}.dart", lib);
}
}
String pipeTemplate(String name) => '''
-// Copyright (c) 2016, . All rights reserved. Use of this source code
-// is governed by a BSD-style license that can be found in the LICENSE file.
-
import "package:angular2/core.dart";
@Pipe(
- name: '${toUpperCamelCase(name)}'
+ name: '${toLowerCamelCase(name)}'
)
@Injectable()
class ${toUpperCamelCase(name)} implements PipeTransform {
const ${toUpperCamelCase(name)}();
+ @override
dynamic transform(dynamic value, [List args = null]) {
return value;
}
diff --git a/bin/route.dart b/bin/route.dart
index 93431dd..5449a07 100644
--- a/bin/route.dart
+++ b/bin/route.dart
@@ -8,41 +8,69 @@ import "component.dart";
ConfigFile config = new ConfigFile();
main(List args) async {
+ String name = args[0];
+ String routePath = args[1];
+ String lib;
+ String path = "${toTableName(name)}";
- String name = "${args[0]}-route";
- String lib;
- String path = "${toTableName(name)}";
+ if (config?.routesPath != null) {
+ path = "${config.routesPath}/${toTableName(name)}";
+ lib = "lib/routes.dart";
+ }
- if (config?.routesPath != null) {
- path = "${config.routesPath}/${toTableName(name)}";
- lib = "${config.routesPath}/routes.dart";
- }
+ String prefix = config?.routesPath != null ? "lib/" : "";
+ String filePath = '$prefix$path/${toTableName(name)}';
- String dartPath = '$path/${toTableName(name)}_component.dart';
- String htmlPath = '$path/${toTableName(name)}_component.html';
- String cssPath = '$path/${toTableName(name)}_component.css';
+ String dartPath = '$filePath.dart';
+ String htmlPath = '$filePath.html';
+ String cssPath = '$filePath.${config.styleFileType}';
- await writeInFile(dartPath, componentTemplateDart(name));
- await writeInFile(htmlPath, componentTemplateHtml(name));
- await createFile(cssPath);
+ await writeInFile(dartPath, componentRouteTemplateDart(name, routePath));
+ await writeInFile(htmlPath, componentTemplateHtml(name));
+ await createFile(cssPath);
- if (lib != null) {
- addToLibrary("${toTableName(name)}/${toTableName(name)}_component.dart", lib);
- addToRouteConfig(toUpperCamelCase(name), toUpperCamelCase(args[0]), args[1]);
- }
+ if (lib != null) {
+ addToLibrary("$path/${toTableName(name)}.dart", lib);
+ addToRouteConfig(toUpperCamelCase(name), config?.rootPath);
+ }
+}
+
+String componentRouteTemplateDart(String name, String path) => '''import 'package:angular2/core.dart';
+import 'package:angular2/router.dart';
+
+@Component(
+ selector: '${name.replaceAll("_", "-")}',
+ templateUrl: '${toTableName(name)}.html',
+ styleUrls: const ['${toTableName(name)}.css'])
+class ${toUpperCamelCase(name)} implements OnInit {
+
+ static const String route_name = "${toUpperCamelCase(name)}";
+ static const String route_path = "$path";
+ static const Route route = const Route(path: ${toUpperCamelCase(name)}.route_path,
+ component: ${toUpperCamelCase(name)},
+ name: ${toUpperCamelCase(name)}.route_name);
+
+ ${toUpperCamelCase(name)}();
+
+ @override
+ void ngOnInit() {}
}
+''';
-addToRouteConfig(String className, String name, String path) {
- File rootComponent = new File("lib/${config.projectName}.dart");
+addToRouteConfig(String className, String rootPath) {
+ File rootComponent = new File("lib/$rootPath");
- if (rootComponent.existsSync()) {
- String content = rootComponent.readAsStringSync();
- content = formatter.format(content);
- content = content.replaceFirst("@RouteConfig(const [", '''
- @RouteConfig(const [
- const Route(useAsDefault: false, path: '$path', name: '$name', component: $className),
+ if (rootComponent.existsSync()) {
+ String content = rootComponent.readAsStringSync();
+ content = formatter.format(content);
+ content = content.replaceFirst(
+ "/*Insert Routes here*/",
+ '''
+ /*Insert Routes here*/
+ $className.route,
''');
- rootComponent.writeAsStringSync(formatter.format(content));
- }
-}
\ No newline at end of file
+ rootComponent.writeAsStringSync(formatter.format(content));
+ output("Route Inserted into root component.\n", Color.yellow);
+ }
+}
diff --git a/bin/service.dart b/bin/service.dart
index cca99eb..b85e732 100644
--- a/bin/service.dart
+++ b/bin/service.dart
@@ -11,23 +11,23 @@ main(List args) async {
if (config?.servicesPath != null) {
path = "${config.servicesPath}";
- lib = "${config.servicesPath}/services.dart";
+ lib = "lib/services.dart";
}
- String dartPath = '$path/${toTableName(name)}_service.dart';
+ String prefix = config?.servicesPath != null ? "lib/" : "";
+
+ String dartPath = '$prefix$path/${toTableName(name)}.dart';
await writeInFile(dartPath, serviceTemplate(name));
if (lib != null) {
- addToLibrary("${toTableName(name)}_service.dart", lib);
+ addToLibrary("$path/${toTableName(name)}", lib);
}
}
String serviceTemplate(String name) =>
- '''// Copyright (c) 2016, . All rights reserved. Use of this source code
-// is governed by a BSD-style license that can be found in the LICENSE file.
-
+ '''
import "package:angular2/core.dart";
@Injectable()
diff --git a/bin/template/.analysis_options b/bin/template/.analysis_options
index 09fde6e..b1c49b9 100644
--- a/bin/template/.analysis_options
+++ b/bin/template/.analysis_options
@@ -1,7 +1,5 @@
analyzer:
strong-mode: true
- exclude:
- - lib/convert
linter:
rules:
diff --git a/bin/template/angular.config.yaml b/bin/template/angular.config.yaml
index 5a4a8ca..6e9cca5 100644
--- a/bin/template/angular.config.yaml
+++ b/bin/template/angular.config.yaml
@@ -1,10 +1,12 @@
project:
- name: "__projectName__"
- components: "lib/components"
- directives: "lib/directives"
- services: "lib/services"
- routes: "lib/routes"
- pipes: "lib/pipes"
+ root: "app.dart"
+ components: "components"
+ directives: "directives"
+ services: "services"
+ routes: "routes"
+ pipes: "pipes"
+ sass: false
+ less: false
server:
hostname: "0.0.0.0"
diff --git a/bin/template/lib/__projectName__.dart b/bin/template/lib/__projectName__.dart
deleted file mode 100644
index d70d210..0000000
--- a/bin/template/lib/__projectName__.dart
+++ /dev/null
@@ -1,24 +0,0 @@
-library __projectName__;
-
-import 'package:angular2/core.dart';
-import "package:angular2/router.dart";
-
-export "models.dart";
-export "convert/convert.dart";
-export "services/services.dart";
-export "pipes/pipes.dart";
-export "directives/directives.dart";
-export "routes/routes.dart";
-export "components/components.dart";
-
-import "routes/routes.dart";
-
-@Component(
- selector: 'my-app',
- templateUrl: "__projectName__.html",
- directives: const [ROUTER_DIRECTIVES])
-@RouteConfig(const [
- const Route(
- useAsDefault: false, path: '/home', name: 'Home', component: HomeRoute)
-])
-class AppComponent {}
diff --git a/bin/template/lib/app.dart b/bin/template/lib/app.dart
new file mode 100644
index 0000000..2258297
--- /dev/null
+++ b/bin/template/lib/app.dart
@@ -0,0 +1,14 @@
+library __projectName__;
+
+import 'package:angular2/core.dart';
+import "package:angular2/router.dart";
+import "routes.dart";
+
+@Component(
+ selector: 'my-app',
+ templateUrl: "app.html",
+ directives: const [ROUTER_DIRECTIVES])
+@RouteConfig(const [
+ /*Insert Routes here*/
+])
+class AppComponent {}
diff --git a/bin/template/lib/__projectName__.html b/bin/template/lib/app.html
similarity index 54%
rename from bin/template/lib/__projectName__.html
rename to bin/template/lib/app.html
index 7928ea2..953fbf0 100644
--- a/bin/template/lib/__projectName__.html
+++ b/bin/template/lib/app.html
@@ -1,5 +1,2 @@
My First Angular 2 App
-
diff --git a/bin/template/lib/routes/home_route/home_route.css b/bin/template/lib/components.dart
similarity index 100%
rename from bin/template/lib/routes/home_route/home_route.css
rename to bin/template/lib/components.dart
diff --git a/bin/template/lib/components/components.dart b/bin/template/lib/components/components.dart
deleted file mode 100644
index 37eb8aa..0000000
--- a/bin/template/lib/components/components.dart
+++ /dev/null
@@ -1 +0,0 @@
-library __projectName__.components;
diff --git a/bin/template/lib/convert/convert.dart b/bin/template/lib/convert/convert.dart
deleted file mode 100644
index b195ded..0000000
--- a/bin/template/lib/convert/convert.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Generated by Dogma Dart. DO NOT MODIFY!
-// 2016-05-06 21:32:36.052430
-
-library __projectName__.convert.convert;
-
-//---------------------------------------------------------------------
-// Exports
-//---------------------------------------------------------------------
-
-export 'data_convert.dart';
-
-//---------------------------------------------------------------------
-// Library contents
-//---------------------------------------------------------------------
diff --git a/bin/template/lib/convert/data_convert.dart b/bin/template/lib/convert/data_convert.dart
deleted file mode 100644
index 3938b92..0000000
--- a/bin/template/lib/convert/data_convert.dart
+++ /dev/null
@@ -1,46 +0,0 @@
-// Generated by Dogma Dart. DO NOT MODIFY!
-// 2016-05-06 21:32:36.052430
-
-library __projectName__.convert.data_convert;
-
-//---------------------------------------------------------------------
-// Standard libraries
-//---------------------------------------------------------------------
-
-import 'dart:convert';
-
-//---------------------------------------------------------------------
-// Imports
-//---------------------------------------------------------------------
-
-import 'package:__projectName__/models.dart';
-import 'package:dogma_convert/convert.dart';
-
-//---------------------------------------------------------------------
-// Library contents
-//---------------------------------------------------------------------
-
-/// A [ModelDecoder] for [Data].
-class DataDecoder extends Converter