Added BUILD file for gui2-fw-lib bazel build

This is another step along the way of having Native Bazel builds for Angular
Not fully there yet - waiting for Angular v9 in next 2 weeks
but don't want to wait that long to merge all of this

For most people the main concern is updates to WORKSPACE

Change-Id: I28170b8f8daaa2959327c259fe6a10df075113bb
diff --git a/web/gui2-fw-lib/src/app/app.component.ts b/web/gui2-fw-lib/src/app/app.component.ts
index 34d2728..e60fc6d 100644
--- a/web/gui2-fw-lib/src/app/app.component.ts
+++ b/web/gui2-fw-lib/src/app/app.component.ts
@@ -15,7 +15,7 @@
  */
 
 import {Component} from '@angular/core';
-import {FnService, KeysService, LogService, LionService, WebSocketService, WsOptions} from 'gui2-fw-lib';
+import {FnService, KeysService, LogService, LionService, WebSocketService, WsOptions} from '../../projects/gui2-fw-lib/src/public_api';
 
 @Component({
   selector: 'app-root',
diff --git a/web/gui2-fw-lib/src/app/app.module.ts b/web/gui2-fw-lib/src/app/app.module.ts
index dab7c37..0cdd9fe 100644
--- a/web/gui2-fw-lib/src/app/app.module.ts
+++ b/web/gui2-fw-lib/src/app/app.module.ts
@@ -18,7 +18,7 @@
 import { NgModule } from '@angular/core';
 import { RouterModule, Routes } from '@angular/router';
 import { AppComponent } from './app.component';
-import { Gui2FwLibModule, ConsoleLoggerService, LogService } from 'gui2-fw-lib';
+import { Gui2FwLibModule, ConsoleLoggerService, LogService } from '../../projects/gui2-fw-lib/src/public_api';
 import {HttpClientModule} from '@angular/common/http';
 import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
 
diff --git a/web/gui2-fw-lib/src/initialize_testbed.ts b/web/gui2-fw-lib/src/initialize_testbed.ts
new file mode 100644
index 0000000..25cca1d
--- /dev/null
+++ b/web/gui2-fw-lib/src/initialize_testbed.ts
@@ -0,0 +1,9 @@
+/**
+ * @fileoverview Provides a script to initialize TestBed before tests are run.
+ * This file should be included in the "runtime_deps" of a "ts_web_test_suite"
+ * rule.
+ */
+import {TestBed} from '@angular/core/testing';
+import {BrowserDynamicTestingModule, platformBrowserDynamicTesting} from '@angular/platform-browser-dynamic/testing';
+
+TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
diff --git a/web/gui2-fw-lib/src/main.dev.ts b/web/gui2-fw-lib/src/main.dev.ts
new file mode 100644
index 0000000..32bd701
--- /dev/null
+++ b/web/gui2-fw-lib/src/main.dev.ts
@@ -0,0 +1,4 @@
+import {platformBrowser} from '@angular/platform-browser';
+import {AppModuleNgFactory} from './app/app.module.ngfactory';
+
+platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
diff --git a/web/gui2-fw-lib/src/main.prod.ts b/web/gui2-fw-lib/src/main.prod.ts
new file mode 100644
index 0000000..70fd120
--- /dev/null
+++ b/web/gui2-fw-lib/src/main.prod.ts
@@ -0,0 +1,6 @@
+import {enableProdMode} from '@angular/core';
+import {platformBrowser} from '@angular/platform-browser';
+import {AppModuleNgFactory} from './app/app.module.ngfactory';
+
+enableProdMode();
+platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
diff --git a/web/gui2-fw-lib/src/noBUILD.bazel b/web/gui2-fw-lib/src/noBUILD.bazel
new file mode 100644
index 0000000..398c403
--- /dev/null
+++ b/web/gui2-fw-lib/src/noBUILD.bazel
@@ -0,0 +1,168 @@
+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", "history_server", "rollup_bundle")
+load("@build_bazel_rules_nodejs//internal/web_package:web_package.bzl", "web_package")
+load("@npm_bazel_typescript//:index.bzl", "ts_devserver", "ts_library")
+load("@io_bazel_rules_sass//:defs.bzl", "multi_sass_binary", "sass_binary")
+
+sass_binary(
+    name = "global_stylesheet",
+    src = glob([
+        "styles.css",
+        "styles.scss",
+    ])[0],
+    output_name = "global_stylesheet.css",
+)
+
+multi_sass_binary(
+    name = "styles",
+    srcs = glob(
+        include = ["**/*.scss"],
+        exclude = ["styles.scss"],
+    ),
+)
+
+ng_module(
+    name = "src",
+    srcs = glob(
+        include = ["**/*.ts"],
+        exclude = [
+            "**/*.spec.ts",
+            "main.ts",
+            "test.ts",
+            "initialize_testbed.ts",
+        ],
+    ),
+    assets = glob([
+        "**/*.css",
+        "**/*.html",
+    ]) + ([":styles"] if len(glob(["**/*.scss"])) else []),
+    tsconfig = "tsconfig.app.json",
+    deps = [
+        "//web/gui2-fw-lib/projects/gui2-fw-lib",
+        "@npm//@angular/animations",
+        "@npm//@angular/core",
+        "@npm//@angular/platform-browser",
+        "@npm//@angular/router",
+        "@npm//@types",
+        "@npm//rxjs",
+    ],
+)
+
+rollup_bundle(
+    name = "bundle",
+    entry_point = ":main.prod.ts",
+    deps = [
+        "//src",
+        "@npm//@angular/router",
+        "@npm//rxjs",
+    ],
+)
+
+web_package(
+    name = "prodapp",
+    assets = [
+        # do not sort
+        "@npm//:node_modules/zone.js/dist/zone.min.js",
+        ":bundle.min.js",
+        ":global_stylesheet",
+    ],
+    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",
+    ],
+)
+
+genrule(
+    name = "d3-copy",
+    srcs = ["@npm//:node_modules/d3/dist/d3.js"],
+    outs = ["d3.js"],
+    cmd = "cp $< $@",
+    output_to_bindir = 1,
+)
+
+ts_devserver(
+    name = "devserver",
+    data = [
+        "favicon.ico",
+    ],
+    entry_module = "org_onosproject_onos/web/gui2-fw-lib/src/main.dev",
+    index_html = "index.html",
+    port = 4200,
+    scripts = [
+        "@npm//:node_modules/tslib/tslib.js",
+        ":rxjs_umd_modules",
+    ],
+    serving_path = "/bundle.min.js",
+    static_files = [
+        "@npm//:node_modules/zone.js/dist/zone.min.js",
+        ":global_stylesheet",
+        ":d3-copy",
+    ],
+    deps = [":src"],
+)
+
+ts_library(
+    name = "test_lib",
+    testonly = 1,
+    srcs = glob(["**/*.spec.ts"]),
+    deps = [
+        ":src",
+        "@npm//@angular/core",
+        "@npm//@angular/router",
+        "@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/tslib/tslib.js",
+    ],
+    # 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",
+    ],
+    runtime_deps = [
+        ":initialize_testbed",
+    ],
+    deps = [
+        ":rxjs_umd_modules",
+        ":test_lib",
+        "@npm//karma-jasmine",
+    ],
+)
diff --git a/web/gui2-fw-lib/src/rxjs_shims.js b/web/gui2-fw-lib/src/rxjs_shims.js
new file mode 100644
index 0000000..a317127
--- /dev/null
+++ b/web/gui2-fw-lib/src/rxjs_shims.js
@@ -0,0 +1,32 @@
+/**
+ * @fileoverview Provides named UMD shims for `rxjs/operators` and `rxjs/testing`.
+ * This file should be included in the "scripts" of a "ts_devserver"
+ * rule and the "deps" of a "ts_web_test_suite" rule.
+ */
+// rxjs/operators
+(function(factory) {
+    if (typeof module === 'object' && typeof module.exports === 'object') {
+        var v = factory(require, exports);
+        if (v !== undefined) module.exports = v;
+    } else if (typeof define === 'function' && define.amd) {
+        define('rxjs/operators', ['exports', 'rxjs'], factory);
+    }
+})(function(exports, rxjs) {
+    'use strict';
+    Object.keys(rxjs.operators).forEach(function(key) { exports[key] = rxjs.operators[key]; });
+    Object.defineProperty(exports, '__esModule', {value: true});
+});
+
+// rxjs/testing
+(function(factory) {
+    if (typeof module === 'object' && typeof module.exports === 'object') {
+        var v = factory(require, exports);
+        if (v !== undefined) module.exports = v;
+    } else if (typeof define === 'function' && define.amd) {
+        define('rxjs/testing', ['exports', 'rxjs'], factory);
+    }
+})(function(exports, rxjs) {
+    'use strict';
+    Object.keys(rxjs.testing).forEach(function(key) { exports[key] = rxjs.testing[key]; });
+    Object.defineProperty(exports, '__esModule', {value: true});
+});