refactor(bazel): Remove bazel-workspace schematics (#29148)
`bazel-workspace` schematics is no longer needed now that the Bazel files are injected into the project by the Bazel builder. PR Close #29148
This commit is contained in:
parent
36a1550e00
commit
f4f20daee3
|
@ -32,6 +32,10 @@ function testBazel() {
|
|||
ng build
|
||||
ng test
|
||||
ng e2e
|
||||
if [ -e 'WORKSPACE' ] || [ -e 'BUILD.bazel' ]; then
|
||||
echo 'WORKSPACE / BUILD.bazel file should not exist in project'
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function testNonBazel() {
|
||||
|
|
|
@ -40,6 +40,17 @@
|
|||
rxjs "6.3.3"
|
||||
source-map "0.7.3"
|
||||
|
||||
"@angular-devkit/core@7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.3.5.tgz#2a59a913eab358e2385f52ba28132b81435e63b3"
|
||||
integrity sha512-J/Tztq2BZ3tpwUsbiz8N61rf9lwqn85UvJsDui2SPIdzDR9KmPr5ESI2Irc/PEb9i+CBXtVuhr8AIqo7rR6ZTg==
|
||||
dependencies:
|
||||
ajv "6.9.1"
|
||||
chokidar "2.0.4"
|
||||
fast-json-stable-stringify "2.0.0"
|
||||
rxjs "6.3.3"
|
||||
source-map "0.7.3"
|
||||
|
||||
"@angular-devkit/schematics@7.3.2", "@angular-devkit/schematics@^7.3.0-rc.0":
|
||||
version "7.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.3.2.tgz#e9d3c1f2128a56f66ea846ce3f80c69d4c3a9ae9"
|
||||
|
@ -48,15 +59,23 @@
|
|||
"@angular-devkit/core" "7.3.2"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/schematics@7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.3.5.tgz#7b007f8a86dea76e93eef007d4fb6e7d8324b7bb"
|
||||
integrity sha512-BFCCkwRMBC4aFlngaloi1avCTgGrl1MFc/0Av2sCpBh/fdm1FqSVzmOiTfu93dehRVVL/bTrA2qj+xpNsXCxzA==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.3.5"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular/bazel@file:../../dist/packages-dist/bazel":
|
||||
version "8.0.0-beta.6"
|
||||
version "8.0.0-beta.7"
|
||||
dependencies:
|
||||
"@angular-devkit/architect" "^0.13.4"
|
||||
"@angular-devkit/core" "^7.0.4"
|
||||
"@angular-devkit/schematics" "^7.3.0-rc.0"
|
||||
"@bazel/typescript" "^0.26.0"
|
||||
"@microsoft/api-extractor" "^7.0.21"
|
||||
"@schematics/angular" "^7.0.4"
|
||||
"@schematics/angular" "^7.3.5"
|
||||
"@types/node" "6.0.84"
|
||||
semver "^5.6.0"
|
||||
shelljs "0.8.2"
|
||||
|
@ -158,7 +177,7 @@
|
|||
resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.7.tgz#8fb4a9f4fdf01f1469c9fc54b0ad2d36ec57c25d"
|
||||
integrity sha512-0bqNlQT8aR4Iq9xx/OsY579Zeqon9uTZDIuvl+XXu16TPPN2sASeKojwm366jA2MjgXd9iyTWpJM5/P1QJ4Dxg==
|
||||
|
||||
"@schematics/angular@7.3.2", "@schematics/angular@^7.0.4":
|
||||
"@schematics/angular@7.3.2":
|
||||
version "7.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.3.2.tgz#470f972a9d80ab8af9900e33972bce44aa567718"
|
||||
integrity sha512-ClqG1qA919QqsikIXIP/jKl2Boj70lihCbpXhZgjsahLY8UJgq9oh8K1QuvYJtz4AI4GADfG1fGzPdYfy94+kg==
|
||||
|
@ -167,6 +186,15 @@
|
|||
"@angular-devkit/schematics" "7.3.2"
|
||||
typescript "3.2.4"
|
||||
|
||||
"@schematics/angular@^7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.3.5.tgz#7af1cd446b051b2be3fbe59cb4ba140ec06e2d87"
|
||||
integrity sha512-fKNZccf1l2OcDwtDupYj54N/YuiMLCWeaXNxcJNUYvGnBtzxQJ4P2LtSCjB4HDvYCtseQM7iyc7D1Xrr5gI8nw==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.3.5"
|
||||
"@angular-devkit/schematics" "7.3.5"
|
||||
typescript "3.2.4"
|
||||
|
||||
"@schematics/update@0.13.2":
|
||||
version "0.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.13.2.tgz#14ba82076b435814896ac141ba4dfad0dd3dadcd"
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
"@bazel/karma": "0.26.0",
|
||||
"@bazel/typescript": "0.26.0",
|
||||
"@microsoft/api-extractor": "^7.0.21",
|
||||
"@schematics/angular": "^7.3.2",
|
||||
"@schematics/angular": "^7.3.5",
|
||||
"@types/angular": "^1.6.47",
|
||||
"@types/base64-js": "1.2.5",
|
||||
"@types/chokidar": "^1.7.5",
|
||||
|
@ -157,4 +157,4 @@
|
|||
"resolutions": {
|
||||
"natives": "1.1.6"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@ npm_package(
|
|||
"//packages/bazel/src/ng_package:lib",
|
||||
"//packages/bazel/src/ngc-wrapped:ngc_lib",
|
||||
"//packages/bazel/src/protractor/utils",
|
||||
"//packages/bazel/src/schematics/bazel-workspace",
|
||||
"//packages/bazel/src/schematics/ng-add",
|
||||
"//packages/bazel/src/schematics/ng-new",
|
||||
],
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
"@angular-devkit/schematics": "^7.3.0-rc.0",
|
||||
"@bazel/typescript": "^0.26.0",
|
||||
"@microsoft/api-extractor": "^7.0.21",
|
||||
"@schematics/angular": "^7.0.4",
|
||||
"@schematics/angular": "^7.3.5",
|
||||
"@types/node": "6.0.84",
|
||||
"semver": "^5.6.0",
|
||||
"shelljs": "0.8.2",
|
||||
|
|
|
@ -14,7 +14,6 @@ jasmine_node_test(
|
|||
name = "test",
|
||||
bootstrap = ["angular/tools/testing/init_node_spec.js"],
|
||||
deps = [
|
||||
"//packages/bazel/src/schematics/bazel-workspace:test",
|
||||
"//packages/bazel/src/schematics/ng-add:test",
|
||||
"//packages/bazel/src/schematics/ng-new:test",
|
||||
"//packages/bazel/src/schematics/utility:test",
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
load("//tools:defaults.bzl", "ts_library")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
ts_library(
|
||||
name = "bazel-workspace",
|
||||
srcs = [
|
||||
"index.ts",
|
||||
"schema.d.ts",
|
||||
],
|
||||
data = glob(["files/**/*"]) + [
|
||||
"schema.json",
|
||||
],
|
||||
deps = [
|
||||
"@npm//@angular-devkit/core",
|
||||
"@npm//@angular-devkit/schematics",
|
||||
"@npm//@schematics/angular",
|
||||
],
|
||||
)
|
||||
|
||||
ts_library(
|
||||
name = "test",
|
||||
testonly = True,
|
||||
srcs = [
|
||||
"index_spec.ts",
|
||||
],
|
||||
data = [
|
||||
"//packages/bazel/src/schematics:package_assets",
|
||||
],
|
||||
deps = [
|
||||
":bazel-workspace",
|
||||
"@npm//@angular-devkit/schematics",
|
||||
],
|
||||
)
|
|
@ -1,7 +0,0 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
# This export allows targets in other packages to reference files that live
|
||||
# in this package.
|
||||
exports_files([
|
||||
"tsconfig.json",
|
||||
])
|
|
@ -1,63 +0,0 @@
|
|||
# WARNING: This file is generated and it's not meant to be edited.
|
||||
# Before making any changes, please read Bazel documentation.
|
||||
# https://docs.bazel.build/versions/master/be/workspace.html
|
||||
# The WORKSPACE file tells Bazel that this directory is a "workspace", which is like a project root.
|
||||
# The content of this file specifies all the external dependencies Bazel needs to perform a build.
|
||||
|
||||
####################################
|
||||
# ESModule imports (and TypeScript imports) can be absolute starting with the workspace name.
|
||||
# The name of the workspace should match the npm package where we publish, so that these
|
||||
# imports also make sense when referencing the published package.
|
||||
workspace(name = "<%= utils.underscore(name) %>")
|
||||
|
||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||
|
||||
RULES_NODEJS_VERSION = "<%= RULES_NODEJS_VERSION %>"
|
||||
http_archive(
|
||||
name = "build_bazel_rules_nodejs",
|
||||
sha256 = "<%= RULES_NODEJS_SHA256 %>",
|
||||
url = "https://github.com/bazelbuild/rules_nodejs/releases/download/%s/rules_nodejs-%s.tar.gz" % (RULES_NODEJS_VERSION, RULES_NODEJS_VERSION),
|
||||
)
|
||||
|
||||
<% if (sass) { %>
|
||||
# Rules for compiling sass
|
||||
RULES_SASS_VERSION = "<%= RULES_SASS_VERSION %>"
|
||||
http_archive(
|
||||
name = "io_bazel_rules_sass",
|
||||
sha256 = "<%= RULES_SASS_SHA256 %>",
|
||||
url = "https://github.com/bazelbuild/rules_sass/archive/%s.zip" % RULES_SASS_VERSION,
|
||||
strip_prefix = "rules_sass-%s" % RULES_SASS_VERSION,
|
||||
)
|
||||
<% } %>
|
||||
####################################
|
||||
# Load and install our dependencies downloaded above.
|
||||
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install")
|
||||
# 0.18.0 is needed for .bazelignore
|
||||
check_bazel_version("0.18.0")
|
||||
node_repositories()
|
||||
yarn_install(
|
||||
name = "npm",
|
||||
data = ["//:angular-metadata.tsconfig.json"],
|
||||
package_json = "//:package.json",
|
||||
yarn_lock = "//:yarn.lock",
|
||||
)
|
||||
|
||||
load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
|
||||
install_bazel_dependencies()
|
||||
|
||||
load("@npm_bazel_karma//:package.bzl", "rules_karma_dependencies")
|
||||
rules_karma_dependencies()
|
||||
|
||||
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
|
||||
web_test_repositories()
|
||||
|
||||
load("@npm_bazel_karma//:browser_repositories.bzl", "browser_repositories")
|
||||
browser_repositories()
|
||||
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace")
|
||||
ts_setup_workspace()
|
||||
<% if (sass) { %>
|
||||
load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")
|
||||
sass_repositories()
|
||||
<% } %>
|
|
@ -1,2 +0,0 @@
|
|||
dist
|
||||
node_modules
|
|
@ -1,29 +0,0 @@
|
|||
# Make TypeScript and Angular compilation fast, by keeping a few copies of the
|
||||
# compiler running as daemons, and cache SourceFile AST's to reduce parse time.
|
||||
build --strategy=TypeScriptCompile=worker
|
||||
build --strategy=AngularTemplateCompile=worker
|
||||
|
||||
# Don't create bazel-* symlinks in the WORKSPACE directory, except `bazel-out`,
|
||||
# which is mandatory.
|
||||
# These require .gitignore and may scare users.
|
||||
# Also, it's a workaround for https://github.com/bazelbuild/rules_typescript/issues/12
|
||||
# which affects the common case of having `tsconfig.json` in the WORKSPACE directory.
|
||||
#
|
||||
# Instead, the output will appear in `dist/bin`. You'll need to ignore the
|
||||
# `bazel-out` directory that is created in the workspace root.
|
||||
build --symlink_prefix=dist/
|
||||
|
||||
# Turn on --incompatible_strict_action_env which was on by default
|
||||
# in Bazel 0.21.0 but turned off again in 0.22.0. Follow
|
||||
# https://github.com/bazelbuild/bazel/issues/7026 for more details.
|
||||
# This flag is needed to so that the bazel cache is not invalidated
|
||||
# when running bazel via `yarn bazel`.
|
||||
# See https://github.com/angular/angular/issues/27514.
|
||||
build --incompatible_strict_action_env
|
||||
run --incompatible_strict_action_env
|
||||
test --incompatible_strict_action_env
|
||||
|
||||
test --test_output=errors
|
||||
|
||||
# Use the Angular 6 compiler
|
||||
build --define=compile=legacy
|
|
@ -1,50 +0,0 @@
|
|||
load("@npm_bazel_typescript//:index.bzl", "ts_library")
|
||||
load("@npm_angular_bazel//:index.bzl", "protractor_web_test_suite")
|
||||
|
||||
ts_library(
|
||||
name = "e2e_lib",
|
||||
testonly = 1,
|
||||
srcs = glob(["src/**/*.ts"]),
|
||||
tsconfig = ":tsconfig.e2e.json",
|
||||
deps = [
|
||||
"@npm//@types/jasmine",
|
||||
"@npm//@types/jasminewd2",
|
||||
"@npm//@types/node",
|
||||
"@npm//jasmine",
|
||||
"@npm//protractor",
|
||||
"@npm//tslib",
|
||||
],
|
||||
data = [
|
||||
"//:tsconfig.json",
|
||||
],
|
||||
)
|
||||
|
||||
protractor_web_test_suite(
|
||||
name = "prodserver_test",
|
||||
data = [
|
||||
"@npm//@angular/bazel",
|
||||
"@npm//protractor",
|
||||
],
|
||||
on_prepare = ":protractor.on-prepare.js",
|
||||
server = "//src:prodserver",
|
||||
deps = [":e2e_lib"],
|
||||
)
|
||||
|
||||
protractor_web_test_suite(
|
||||
name = "devserver_test",
|
||||
data = [
|
||||
"@npm//@angular/bazel",
|
||||
"@npm//protractor",
|
||||
],
|
||||
on_prepare = ":protractor.on-prepare.js",
|
||||
server = "//src:devserver",
|
||||
deps = [":e2e_lib"],
|
||||
)
|
||||
|
||||
# Default target in this package is to run the e2e tests on the devserver.
|
||||
# This is a faster round-trip but doesn't exercise production optimizations like
|
||||
# code-splitting and lazy loading.
|
||||
alias(
|
||||
name = "e2e",
|
||||
actual = "devserver_test",
|
||||
)
|
|
@ -1,153 +0,0 @@
|
|||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load("@npm_angular_bazel//:index.bzl", "ng_module")
|
||||
load("@npm_bazel_karma//:index.bzl", "ts_web_test_suite")
|
||||
load("@build_bazel_rules_nodejs//:defs.bzl", "rollup_bundle", "history_server")
|
||||
load("@build_bazel_rules_nodejs//internal/web_package:web_package.bzl", "web_package")
|
||||
load("@npm_bazel_typescript//:index.bzl", "ts_devserver", "ts_library")
|
||||
<% if (sass) { %>load("@io_bazel_rules_sass//:defs.bzl", "multi_sass_binary")
|
||||
|
||||
multi_sass_binary(
|
||||
name = "styles",
|
||||
srcs = glob(["**/*.scss"]),
|
||||
)
|
||||
<% } %>
|
||||
ng_module(
|
||||
name = "src",
|
||||
srcs = glob(
|
||||
include = ["**/*.ts"],
|
||||
exclude = [
|
||||
"**/*.spec.ts",
|
||||
"main.ts",
|
||||
"test.ts",
|
||||
"initialize_testbed.ts",
|
||||
],
|
||||
),
|
||||
assets = glob([
|
||||
"**/*.css",
|
||||
"**/*.html",
|
||||
])<% if (sass) { %> + [":styles"]<% } %>,
|
||||
deps = [
|
||||
"@npm//@angular/core",
|
||||
"@npm//@angular/platform-browser",<% if (routing) { %>
|
||||
"@npm//@angular/router",<% } %>
|
||||
"@npm//@types",
|
||||
"@npm//rxjs",
|
||||
],
|
||||
)
|
||||
|
||||
rollup_bundle(
|
||||
name = "bundle",
|
||||
entry_point = "src/main.prod",
|
||||
deps = [
|
||||
"//src",
|
||||
"@npm//rxjs",
|
||||
],
|
||||
)
|
||||
|
||||
web_package(
|
||||
name = "prodapp",
|
||||
assets = [
|
||||
# do not sort
|
||||
"@npm//node_modules/zone.js:dist/zone.min.js",
|
||||
":bundle.min.js",
|
||||
],
|
||||
data = [
|
||||
"favicon.ico",
|
||||
],
|
||||
index_html = "index.html",
|
||||
)
|
||||
|
||||
history_server(
|
||||
name = "prodserver",
|
||||
data = [":prodapp"],
|
||||
templated_args = ["src/prodapp"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "rxjs_umd_modules",
|
||||
srcs = [
|
||||
# do not sort
|
||||
"@npm//node_modules/rxjs:bundles/rxjs.umd.js",
|
||||
":rxjs_shims.js",
|
||||
],
|
||||
)
|
||||
|
||||
ts_devserver(
|
||||
name = "devserver",
|
||||
port = 4200,
|
||||
entry_module = "<%= utils.underscore(name) %>/src/main.dev",
|
||||
serving_path = "/bundle.min.js",
|
||||
scripts = [
|
||||
"@npm//node_modules/@angular/common:bundles/common.umd.js",
|
||||
"@npm//node_modules/@angular/common:bundles/common-http.umd.js",
|
||||
"@npm//node_modules/@angular/core:bundles/core.umd.js",
|
||||
"@npm//node_modules/@angular/platform-browser:bundles/platform-browser.umd.js",
|
||||
"@npm//node_modules/tslib:tslib.js",
|
||||
":rxjs_umd_modules",
|
||||
],
|
||||
static_files = [
|
||||
"@npm//node_modules/zone.js:dist/zone.min.js",
|
||||
],
|
||||
data = [
|
||||
"favicon.ico",
|
||||
],
|
||||
index_html = "index.html",
|
||||
deps = [":src"],
|
||||
)
|
||||
|
||||
ts_library(
|
||||
name = "test_lib",
|
||||
testonly = 1,
|
||||
srcs = glob(["**/*.spec.ts"]),
|
||||
deps = [
|
||||
":src",
|
||||
"@npm//@angular/core",
|
||||
"@npm//@types",
|
||||
],
|
||||
)
|
||||
|
||||
ts_library(
|
||||
name = "initialize_testbed",
|
||||
testonly = 1,
|
||||
srcs = [
|
||||
"initialize_testbed.ts",
|
||||
],
|
||||
deps = [
|
||||
"@npm//@angular/core",
|
||||
"@npm//@angular/platform-browser-dynamic",
|
||||
"@npm//@types",
|
||||
],
|
||||
)
|
||||
|
||||
ts_web_test_suite(
|
||||
name = "test",
|
||||
srcs = [
|
||||
"@npm//node_modules/@angular/common:bundles/common.umd.js",
|
||||
"@npm//node_modules/@angular/compiler:bundles/compiler.umd.js",
|
||||
"@npm//node_modules/@angular/compiler:bundles/compiler-testing.umd.js",
|
||||
"@npm//node_modules/@angular/core:bundles/core.umd.js",
|
||||
"@npm//node_modules/@angular/core:bundles/core-testing.umd.js",
|
||||
"@npm//node_modules/@angular/platform-browser:bundles/platform-browser.umd.js",
|
||||
"@npm//node_modules/@angular/platform-browser:bundles/platform-browser-testing.umd.js",
|
||||
"@npm//node_modules/@angular/platform-browser-dynamic:bundles/platform-browser-dynamic.umd.js",
|
||||
"@npm//node_modules/@angular/platform-browser-dynamic:bundles/platform-browser-dynamic-testing.umd.js",
|
||||
"@npm//node_modules/tslib:tslib.js",
|
||||
],
|
||||
runtime_deps = [
|
||||
":initialize_testbed",
|
||||
],
|
||||
# do not sort
|
||||
bootstrap = [
|
||||
"@npm//node_modules/zone.js:dist/zone-testing-bundle.js",
|
||||
"@npm//node_modules/reflect-metadata:Reflect.js",
|
||||
],
|
||||
browsers = [
|
||||
"@io_bazel_rules_webtesting//browsers:chromium-local",
|
||||
],
|
||||
deps = [
|
||||
":rxjs_umd_modules",
|
||||
":test_lib",
|
||||
"@npm//karma-jasmine",
|
||||
],
|
||||
)
|
|
@ -1,76 +0,0 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*
|
||||
* @fileoverview Schematics for bazel-workspace
|
||||
*/
|
||||
|
||||
import {strings} from '@angular-devkit/core';
|
||||
import {Rule, SchematicContext, Tree, apply, applyTemplates, mergeWith, url} from '@angular-devkit/schematics';
|
||||
import {getWorkspace} from '@schematics/angular/utility/config';
|
||||
import {validateProjectName} from '@schematics/angular/utility/validation';
|
||||
|
||||
import {Schema as BazelWorkspaceOptions} from './schema';
|
||||
|
||||
/**
|
||||
* Clean the version string and return version in the form "1.2.3". Return
|
||||
* null if version string is invalid. This is similar to semver.clean() but
|
||||
* takes characters like '^' and '~' into account.
|
||||
*/
|
||||
export function clean(version: string): string|null {
|
||||
const matches = version.match(/(\d+\.\d+\.\d+)/);
|
||||
return matches && matches.pop() || null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if project contains routing module, false otherwise.
|
||||
*/
|
||||
function hasRoutingModule(host: Tree) {
|
||||
let hasRouting = false;
|
||||
host.visit((file: string) => { hasRouting = hasRouting || file.endsWith('-routing.module.ts'); });
|
||||
return hasRouting;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if project uses SASS stylesheets, false otherwise.
|
||||
*/
|
||||
function hasSassStylesheet(host: Tree) {
|
||||
let hasSass = false;
|
||||
// The proper extension for SASS is .scss
|
||||
host.visit((file: string) => { hasSass = hasSass || file.endsWith('.scss'); });
|
||||
return hasSass;
|
||||
}
|
||||
|
||||
export default function(options: BazelWorkspaceOptions): Rule {
|
||||
return (host: Tree, context: SchematicContext) => {
|
||||
const name = options.name || getWorkspace(host).defaultProject;
|
||||
if (!name) {
|
||||
throw new Error('Please provide a name for Bazel workspace');
|
||||
}
|
||||
validateProjectName(name);
|
||||
|
||||
if (!host.exists('yarn.lock')) {
|
||||
host.create('yarn.lock', '');
|
||||
}
|
||||
|
||||
const workspaceVersions = {
|
||||
'RULES_NODEJS_VERSION': '0.26.0',
|
||||
'RULES_NODEJS_SHA256': '5c86b055c57e15bf32d9009a15bcd6d8e190c41b1ff2fb18037b75e0012e4e7c',
|
||||
'RULES_SASS_VERSION': '1.17.2',
|
||||
'RULES_SASS_SHA256': 'e5316ee8a09d1cbb732d3938b400836bf94dba91a27476e9e27706c4c0edae1f',
|
||||
};
|
||||
|
||||
return mergeWith(apply(url('./files'), [
|
||||
applyTemplates({
|
||||
utils: strings,
|
||||
name,
|
||||
'dot': '.', ...workspaceVersions,
|
||||
routing: hasRoutingModule(host),
|
||||
sass: hasSassStylesheet(host),
|
||||
}),
|
||||
]));
|
||||
};
|
||||
}
|
|
@ -1,120 +0,0 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {HostTree} from '@angular-devkit/schematics';
|
||||
import {SchematicTestRunner, UnitTestTree} from '@angular-devkit/schematics/testing';
|
||||
import {clean} from './index';
|
||||
|
||||
describe('Bazel-workspace Schematic', () => {
|
||||
const schematicRunner =
|
||||
new SchematicTestRunner('@angular/bazel', require.resolve('../collection.json'));
|
||||
const defaultOptions = {
|
||||
name: 'demo',
|
||||
};
|
||||
|
||||
it('should generate Bazel workspace files', () => {
|
||||
const options = {...defaultOptions};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
const files = host.files;
|
||||
expect(files).toContain('/.bazelignore');
|
||||
expect(files).toContain('/.bazelrc');
|
||||
expect(files).toContain('/BUILD.bazel');
|
||||
expect(files).toContain('/src/BUILD.bazel');
|
||||
expect(files).toContain('/WORKSPACE');
|
||||
expect(files).toContain('/yarn.lock');
|
||||
});
|
||||
|
||||
it('should generate empty yarn.lock file', () => {
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', defaultOptions);
|
||||
expect(host.files).toContain('/yarn.lock');
|
||||
expect(host.readContent('/yarn.lock')).toBe('');
|
||||
});
|
||||
|
||||
it('should not replace yarn.lock if it exists', () => {
|
||||
let host = new UnitTestTree(new HostTree());
|
||||
host.create('yarn.lock', 'some content');
|
||||
expect(host.files).toContain('/yarn.lock');
|
||||
host = schematicRunner.runSchematic('bazel-workspace', defaultOptions, host);
|
||||
expect(host.files).toContain('/yarn.lock');
|
||||
expect(host.readContent('/yarn.lock')).toBe('some content');
|
||||
});
|
||||
|
||||
it('should have the correct entry_module for devserver', () => {
|
||||
const options = {...defaultOptions, name: 'demo-app'};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
const {files} = host;
|
||||
expect(files).toContain('/src/BUILD.bazel');
|
||||
const content = host.readContent('/src/BUILD.bazel');
|
||||
expect(content).toContain('entry_module = "demo_app/src/main.dev"');
|
||||
});
|
||||
|
||||
it('should add router if project contains routing module', () => {
|
||||
let host = new UnitTestTree(new HostTree);
|
||||
host.create('/src/app/app-routing.module.ts', '');
|
||||
expect(host.files).toContain('/src/app/app-routing.module.ts');
|
||||
const options = {...defaultOptions};
|
||||
host = schematicRunner.runSchematic('bazel-workspace', options, host);
|
||||
expect(host.files).toContain('/src/BUILD.bazel');
|
||||
const content = host.readContent('/src/BUILD.bazel');
|
||||
expect(content).toContain('@npm//@angular/router');
|
||||
});
|
||||
|
||||
describe('WORKSPACE', () => {
|
||||
it('should contain project name', () => {
|
||||
const options = {...defaultOptions};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
expect(host.files).toContain('/WORKSPACE');
|
||||
const content = host.readContent('/WORKSPACE');
|
||||
expect(content).toContain('workspace(name = "demo")');
|
||||
});
|
||||
|
||||
it('should convert dashes in name to underscore', () => {
|
||||
const options = {...defaultOptions, name: 'demo-project'};
|
||||
const host = schematicRunner.runSchematic('bazel-workspace', options);
|
||||
expect(host.files).toContain('/WORKSPACE');
|
||||
const content = host.readContent('/WORKSPACE');
|
||||
expect(content).toContain('workspace(name = "demo_project"');
|
||||
});
|
||||
});
|
||||
|
||||
describe('SASS', () => {
|
||||
let host = new UnitTestTree(new HostTree);
|
||||
beforeAll(() => {
|
||||
host.create('/src/app/app.component.scss', '');
|
||||
expect(host.files).toContain('/src/app/app.component.scss');
|
||||
const options = {...defaultOptions};
|
||||
host = schematicRunner.runSchematic('bazel-workspace', options, host);
|
||||
expect(host.files).toContain('/WORKSPACE');
|
||||
expect(host.files).toContain('/src/BUILD.bazel');
|
||||
});
|
||||
|
||||
it('should download and load rules_sass in WORKSPACE', () => {
|
||||
const content = host.readContent('/WORKSPACE');
|
||||
expect(content).toContain('RULES_SASS_VERSION');
|
||||
expect(content).toContain(
|
||||
'load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")');
|
||||
});
|
||||
|
||||
it('should add multi_sass_binary rule in src/BUILD', () => {
|
||||
const content = host.readContent('/src/BUILD.bazel');
|
||||
expect(content).toContain('load("@io_bazel_rules_sass//:defs.bzl", "multi_sass_binary")');
|
||||
expect(content).toContain('glob(["**/*.scss"])');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('clean', () => {
|
||||
[['1.2.3', '1.2.3'], [' 1.2.3', '1.2.3'], ['1.2.3 ', '1.2.3'], ['~1.2.3', '1.2.3'],
|
||||
['^1.2.3', '1.2.3'], ['v1.2.3', '1.2.3'], ['1.2', null], ['a.b.c', null],
|
||||
].forEach(([version, want]: [string, string]) => {
|
||||
it(`should match ${version} with ${want}`, () => {
|
||||
const got = clean(version);
|
||||
expect(got).toBe(want);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,13 +0,0 @@
|
|||
|
||||
// THIS FILE IS AUTOMATICALLY GENERATED. TO UPDATE THIS FILE YOU NEED TO CHANGE
|
||||
// THE CORRESPONDING JSON SCHEMA FILE. See README.md.
|
||||
|
||||
// tslint:disable:no-global-tslint-disable
|
||||
// tslint:disable
|
||||
|
||||
export interface Schema {
|
||||
/**
|
||||
* The name of the project.
|
||||
*/
|
||||
name?: string;
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"$schema": "http://json-schema.org/schema",
|
||||
"id": "SchematicsAngularBazelWorkspace",
|
||||
"title": "Angular Bazel Workspace Schema",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "The name of the project.",
|
||||
"type": "string",
|
||||
"format": "html-selector",
|
||||
"$default": {
|
||||
"$source": "argv",
|
||||
"index": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
]
|
||||
}
|
|
@ -11,12 +11,6 @@
|
|||
"factory": "./ng-new",
|
||||
"schema": "./ng-new/schema.json",
|
||||
"description": "Create an Angular project that builds with Bazel."
|
||||
},
|
||||
"bazel-workspace": {
|
||||
"factory": "./bazel-workspace",
|
||||
"schema": "./bazel-workspace/schema.json",
|
||||
"description": "Setup Bazel workspace",
|
||||
"hidden": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ ts_library(
|
|||
"schema.json",
|
||||
],
|
||||
deps = [
|
||||
"//packages/bazel/src/schematics/bazel-workspace",
|
||||
"//packages/bazel/src/schematics/utility",
|
||||
"@npm//@angular-devkit/core",
|
||||
"@npm//@angular-devkit/schematics",
|
||||
|
|
|
@ -61,20 +61,13 @@ function addDevDependenciesToPackageJson(options: Schema) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Append main.dev.ts and main.prod.ts to src directory. These files are needed
|
||||
* by Bazel for devserver and prodserver, respectively. They are different from
|
||||
* main.ts generated by CLI because they use platformBrowser (AOT) instead of
|
||||
* platformBrowserDynamic (JIT).
|
||||
* Append additional Javascript / Typescript files needed to compile an Angular
|
||||
* project under Bazel.
|
||||
*/
|
||||
function addDevAndProdMainForAot(options: Schema) {
|
||||
function addFilesRequiredByBazel(options: Schema) {
|
||||
return (host: Tree) => {
|
||||
return mergeWith(apply(url('./files'), [
|
||||
applyTemplates({
|
||||
utils: strings,
|
||||
...options,
|
||||
'dot': '.',
|
||||
}),
|
||||
move('/src'),
|
||||
applyTemplates({}),
|
||||
]));
|
||||
};
|
||||
}
|
||||
|
@ -331,8 +324,7 @@ export default function(options: Schema): Rule {
|
|||
validateProjectName(options.name);
|
||||
|
||||
return chain([
|
||||
schematic('bazel-workspace', options),
|
||||
addDevAndProdMainForAot(options),
|
||||
addFilesRequiredByBazel(options),
|
||||
addDevDependenciesToPackageJson(options),
|
||||
addPostinstallToGenerateNgSummaries(),
|
||||
backupAngularJson(),
|
||||
|
|
|
@ -17,54 +17,45 @@ describe('ng-add schematic', () => {
|
|||
|
||||
beforeEach(() => {
|
||||
host = new UnitTestTree(new HostTree());
|
||||
host.create(
|
||||
'package.json', JSON.stringify(
|
||||
{
|
||||
name: 'demo',
|
||||
dependencies: {
|
||||
'@angular/core': '1.2.3',
|
||||
'rxjs': '~6.3.3',
|
||||
},
|
||||
devDependencies: {
|
||||
'typescript': '3.2.2',
|
||||
},
|
||||
},
|
||||
null, 2));
|
||||
host.create(
|
||||
'tsconfig.json', JSON.stringify(
|
||||
{
|
||||
compileOnSave: false,
|
||||
compilerOptions: {
|
||||
baseUrl: './',
|
||||
outDir: './dist/out-tsc',
|
||||
}
|
||||
},
|
||||
null, 2));
|
||||
host.create(
|
||||
'angular.json', JSON.stringify(
|
||||
{
|
||||
projects: {
|
||||
'demo': {
|
||||
architect: {
|
||||
build: {},
|
||||
serve: {},
|
||||
test: {},
|
||||
'extract-i18n': {
|
||||
builder: '@angular-devkit/build-angular:extract-i18n',
|
||||
},
|
||||
},
|
||||
},
|
||||
'demo-e2e': {
|
||||
architect: {
|
||||
e2e: {},
|
||||
lint: {
|
||||
builder: '@angular-devkit/build-angular:tslint',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
null, 2));
|
||||
host.create('package.json', JSON.stringify({
|
||||
name: 'demo',
|
||||
dependencies: {
|
||||
'@angular/core': '1.2.3',
|
||||
'rxjs': '~6.3.3',
|
||||
},
|
||||
devDependencies: {
|
||||
'typescript': '3.2.2',
|
||||
},
|
||||
}));
|
||||
host.create('tsconfig.json', JSON.stringify({
|
||||
compileOnSave: false,
|
||||
compilerOptions: {
|
||||
baseUrl: './',
|
||||
outDir: './dist/out-tsc',
|
||||
}
|
||||
}));
|
||||
host.create('angular.json', JSON.stringify({
|
||||
projects: {
|
||||
'demo': {
|
||||
architect: {
|
||||
build: {},
|
||||
serve: {},
|
||||
test: {},
|
||||
'extract-i18n': {
|
||||
builder: '@angular-devkit/build-angular:extract-i18n',
|
||||
},
|
||||
},
|
||||
},
|
||||
'demo-e2e': {
|
||||
architect: {
|
||||
e2e: {},
|
||||
lint: {
|
||||
builder: '@angular-devkit/build-angular:tslint',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}));
|
||||
schematicRunner =
|
||||
new SchematicTestRunner('@angular/bazel', require.resolve('../collection.json'));
|
||||
});
|
||||
|
@ -109,11 +100,11 @@ describe('ng-add schematic', () => {
|
|||
expect(devDeps).toContain('@bazel/karma');
|
||||
});
|
||||
|
||||
it('should create Bazel workspace file', () => {
|
||||
it('should not create Bazel workspace file', () => {
|
||||
host = schematicRunner.runSchematic('ng-add', defaultOptions, host);
|
||||
const {files} = host;
|
||||
expect(files).toContain('/WORKSPACE');
|
||||
expect(files).toContain('/BUILD.bazel');
|
||||
expect(files).not.toContain('/WORKSPACE');
|
||||
expect(files).not.toContain('/BUILD.bazel');
|
||||
});
|
||||
|
||||
it('should produce main.dev.ts and main.prod.ts for AOT', () => {
|
||||
|
@ -225,19 +216,16 @@ describe('ng-add schematic', () => {
|
|||
];
|
||||
for (const [version, upgrade] of cases) {
|
||||
it(`should ${upgrade ? '' : 'not '}upgrade v${version}')`, () => {
|
||||
host.overwrite(
|
||||
'package.json', JSON.stringify(
|
||||
{
|
||||
name: 'demo',
|
||||
dependencies: {
|
||||
'@angular/core': '1.2.3',
|
||||
'rxjs': version,
|
||||
},
|
||||
devDependencies: {
|
||||
'typescript': '3.2.2',
|
||||
},
|
||||
},
|
||||
null, 2));
|
||||
host.overwrite('package.json', JSON.stringify({
|
||||
name: 'demo',
|
||||
dependencies: {
|
||||
'@angular/core': '1.2.3',
|
||||
'rxjs': version,
|
||||
},
|
||||
devDependencies: {
|
||||
'typescript': '3.2.2',
|
||||
},
|
||||
}));
|
||||
host = schematicRunner.runSchematic('ng-add', defaultOptions, host);
|
||||
expect(host.files).toContain('/package.json');
|
||||
const content = host.readContent('/package.json');
|
||||
|
|
|
@ -25,12 +25,11 @@ describe('ng-new schematic', () => {
|
|||
expect(files).toContain('/demo/package.json');
|
||||
});
|
||||
|
||||
it('should call ng-add to generate Bazel files', () => {
|
||||
it('should call ng-add to generate additional files needed by Bazel', () => {
|
||||
const options = {...defaultOptions};
|
||||
const host = schematicRunner.runSchematic('ng-new', options);
|
||||
const {files} = host;
|
||||
expect(files).toContain('/demo/WORKSPACE');
|
||||
expect(files).toContain('/demo/BUILD.bazel');
|
||||
expect(files).toContain('/demo/src/BUILD.bazel');
|
||||
expect(files).toContain('/demo/src/main.dev.ts');
|
||||
expect(files).toContain('/demo/src/main.prod.ts');
|
||||
});
|
||||
});
|
||||
|
|
30
yarn.lock
30
yarn.lock
|
@ -31,6 +31,17 @@
|
|||
rxjs "6.3.3"
|
||||
source-map "0.7.3"
|
||||
|
||||
"@angular-devkit/core@7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-7.3.5.tgz#2a59a913eab358e2385f52ba28132b81435e63b3"
|
||||
integrity sha512-J/Tztq2BZ3tpwUsbiz8N61rf9lwqn85UvJsDui2SPIdzDR9KmPr5ESI2Irc/PEb9i+CBXtVuhr8AIqo7rR6ZTg==
|
||||
dependencies:
|
||||
ajv "6.9.1"
|
||||
chokidar "2.0.4"
|
||||
fast-json-stable-stringify "2.0.0"
|
||||
rxjs "6.3.3"
|
||||
source-map "0.7.3"
|
||||
|
||||
"@angular-devkit/schematics@7.3.2", "@angular-devkit/schematics@^7.3.2":
|
||||
version "7.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.3.2.tgz#e9d3c1f2128a56f66ea846ce3f80c69d4c3a9ae9"
|
||||
|
@ -39,6 +50,14 @@
|
|||
"@angular-devkit/core" "7.3.2"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular-devkit/schematics@7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-7.3.5.tgz#7b007f8a86dea76e93eef007d4fb6e7d8324b7bb"
|
||||
integrity sha512-BFCCkwRMBC4aFlngaloi1avCTgGrl1MFc/0Av2sCpBh/fdm1FqSVzmOiTfu93dehRVVL/bTrA2qj+xpNsXCxzA==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.3.5"
|
||||
rxjs "6.3.3"
|
||||
|
||||
"@angular/bazel@file:./tools/npm/@angular_bazel":
|
||||
version "0.0.0"
|
||||
|
||||
|
@ -265,7 +284,7 @@
|
|||
resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.5.tgz#c448a38902ccb5601c1b2ef3b1a105012ef7712c"
|
||||
integrity sha512-xEAyvLXo4Cter/b0EMCWUZTgXOfLOPJ/Xr52WdjVclPx9eDmNTGFtZl8Pn/nqSnZsQBNcHL0eHk/YyRyyXXpiQ==
|
||||
|
||||
"@schematics/angular@7.3.2", "@schematics/angular@^7.3.2":
|
||||
"@schematics/angular@7.3.2":
|
||||
version "7.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.3.2.tgz#470f972a9d80ab8af9900e33972bce44aa567718"
|
||||
integrity sha512-ClqG1qA919QqsikIXIP/jKl2Boj70lihCbpXhZgjsahLY8UJgq9oh8K1QuvYJtz4AI4GADfG1fGzPdYfy94+kg==
|
||||
|
@ -274,6 +293,15 @@
|
|||
"@angular-devkit/schematics" "7.3.2"
|
||||
typescript "3.2.4"
|
||||
|
||||
"@schematics/angular@^7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-7.3.5.tgz#7af1cd446b051b2be3fbe59cb4ba140ec06e2d87"
|
||||
integrity sha512-fKNZccf1l2OcDwtDupYj54N/YuiMLCWeaXNxcJNUYvGnBtzxQJ4P2LtSCjB4HDvYCtseQM7iyc7D1Xrr5gI8nw==
|
||||
dependencies:
|
||||
"@angular-devkit/core" "7.3.5"
|
||||
"@angular-devkit/schematics" "7.3.5"
|
||||
typescript "3.2.4"
|
||||
|
||||
"@schematics/update@0.13.2":
|
||||
version "0.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.13.2.tgz#14ba82076b435814896ac141ba4dfad0dd3dadcd"
|
||||
|
|
Loading…
Reference in New Issue