├── .all-contributorsrc
├── .browserslistrc
├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── angular.json
├── cli.png
├── karma.conf.js
├── ngsw-config.json
├── package.json
├── renovate.json
├── screenshot.png
├── src
├── _redirects
├── app
│ ├── Utils
│ │ └── components
│ │ │ └── search-bar
│ │ │ ├── search-bar.component.css
│ │ │ ├── search-bar.component.html
│ │ │ ├── search-bar.component.spec.ts
│ │ │ └── search-bar.component.ts
│ ├── app-routing.module.ts
│ ├── app.component.css
│ ├── app.component.html
│ ├── app.component.spec.ts
│ ├── app.component.ts
│ ├── app.module.ts
│ ├── dashboard
│ │ ├── dashboard.component.css
│ │ ├── dashboard.component.html
│ │ ├── dashboard.component.spec.ts
│ │ ├── dashboard.component.ts
│ │ ├── ibuilderdata.ts
│ │ └── service
│ │ │ ├── builder-data.service.spec.ts
│ │ │ └── builder-data.service.ts
│ ├── main-nav
│ │ ├── main-nav.component.css
│ │ ├── main-nav.component.html
│ │ ├── main-nav.component.spec.ts
│ │ └── main-nav.component.ts
│ └── references
│ │ ├── reference.ts
│ │ ├── references-routing.module.ts
│ │ ├── references.component.css
│ │ ├── references.component.html
│ │ ├── references.component.spec.ts
│ │ ├── references.component.ts
│ │ ├── references.module.ts
│ │ └── service
│ │ ├── reference.service.spec.ts
│ │ └── reference.service.ts
├── assets
│ ├── .gitkeep
│ ├── builders.json
│ ├── icons
│ │ ├── icon-128x128.png
│ │ ├── icon-144x144.png
│ │ ├── icon-152x152.png
│ │ ├── icon-192x192.png
│ │ ├── icon-384x384.png
│ │ ├── icon-512x512.png
│ │ ├── icon-72x72.png
│ │ ├── icon-96x96.png
│ │ ├── search-1x.png
│ │ └── search-2x.png
│ └── references.json
├── environments
│ ├── environment.prod.ts
│ └── environment.ts
├── favicon.ico
├── index.html
├── main.ts
├── manifest.webmanifest
├── polyfills.ts
├── styles.css
└── test.ts
├── tsconfig.app.json
├── tsconfig.json
└── tsconfig.spec.json
/.all-contributorsrc:
--------------------------------------------------------------------------------
1 | {
2 | "projectName": "angular-builder",
3 | "projectOwner": "ngx-builders",
4 | "repoType": "github",
5 | "repoHost": "https://github.com",
6 | "files": [
7 | "README.md"
8 | ],
9 | "imageSize": 100,
10 | "commit": false,
11 | "commitConvention": "angular",
12 | "contributors": [
13 | {
14 | "login": "santoshyadav198613",
15 | "name": "Santosh Yadav",
16 | "avatar_url": "https://avatars3.githubusercontent.com/u/11923975?v=4",
17 | "profile": "http://santoshyadavblog.com",
18 | "contributions": [
19 | "code",
20 | "content",
21 | "design",
22 | "doc"
23 | ]
24 | },
25 | {
26 | "login": "nitishk72",
27 | "name": "Nitish Kumar Singh",
28 | "avatar_url": "https://avatars2.githubusercontent.com/u/15886737?v=4",
29 | "profile": "https://www.youtube.com/c/NitishKumarSingh",
30 | "contributions": [
31 | "code",
32 | "design"
33 | ]
34 | },
35 | {
36 | "login": "patel-manas",
37 | "name": "patel-manas",
38 | "avatar_url": "https://avatars1.githubusercontent.com/u/40213997?v=4",
39 | "profile": "https://github.com/patel-manas",
40 | "contributions": [
41 | "code"
42 | ]
43 | },
44 | {
45 | "login": "BojanKogoj",
46 | "name": "Bojan Kogoj",
47 | "avatar_url": "https://avatars3.githubusercontent.com/u/634075?v=4",
48 | "profile": "https://github.com/BojanKogoj",
49 | "contributions": [
50 | "code"
51 | ]
52 | },
53 | {
54 | "login": "Jefiozie",
55 | "name": "Jeffrey Bosch",
56 | "avatar_url": "https://avatars0.githubusercontent.com/u/17835373?v=4",
57 | "profile": "https://jefiozie.github.io",
58 | "contributions": [
59 | "doc"
60 | ]
61 | }
62 | ],
63 | "contributorsPerLine": 7,
64 | "skipCi": true
65 | }
66 |
--------------------------------------------------------------------------------
/.browserslistrc:
--------------------------------------------------------------------------------
1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 |
5 | # For the full list of supported browsers by the Angular framework, please see:
6 | # https://angular.io/guide/browser-support
7 |
8 | # You can see what browsers were selected by your queries by running:
9 | # npx browserslist
10 |
11 | last 1 Chrome version
12 | last 1 Firefox version
13 | last 2 Edge major versions
14 | last 2 Safari major versions
15 | last 2 iOS major versions
16 | Firefox ESR
17 | not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.
18 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | # Only exists if Bazel was run
8 | /bazel-out
9 |
10 | # dependencies
11 | /node_modules
12 | package-lock.json
13 |
14 | # profiling files
15 | chrome-profiler-events.json
16 | speed-measure-plugin.json
17 |
18 | # IDEs and editors
19 | /.idea
20 | .project
21 | .classpath
22 | .c9/
23 | *.launch
24 | .settings/
25 | *.sublime-workspace
26 |
27 | # IDE - VSCode
28 | .vscode/*
29 | !.vscode/settings.json
30 | !.vscode/tasks.json
31 | !.vscode/launch.json
32 | !.vscode/extensions.json
33 | .history/*
34 |
35 | # misc
36 | /.angular/cache
37 | /.sass-cache
38 | /connect.lock
39 | /coverage
40 | /libpeerconnection.log
41 | npm-debug.log
42 | yarn-error.log
43 | testem.log
44 | /typings
45 |
46 | # System Files
47 | .DS_Store
48 | Thumbs.db
49 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 ngx-builders
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Angular Builders
2 | [](#contributors-)
3 |
4 | 
5 |
6 | Click [here](https://angular-builders.dev) to see list of builders.
7 |
8 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.0.3.
9 |
10 | ## Adding a new builder
11 |
12 | 1. Find the `builders.json` in `assets` folder.
13 | 2. Provide the data for new builder in below `json` format
14 |
15 | ```json
16 | {
17 | "name": "Bazel Build",
18 | "description": "Bazel is an open-source build and test tool similar to Make, Maven, and Gradle. It uses a human-readable, high-level build language. Bazel supports projects in multiple languages and builds outputs for multiple platforms. Bazel supports large codebases across multiple repositories, and large numbers of users.",
19 | "repository": "https://github.com/bazelbuild/bazel"
20 | }
21 | ```
22 |
23 | ## Development server
24 |
25 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
26 |
27 |
28 | ## Become a contributor
29 |
30 | #### Missing a builder, found bug or typo in docs?
31 |
32 | Please, feel free to open an [issue](https://github.com/santoshyadav198613/angular-builder/issues)
33 | or submit a [pull request](https://github.com/santoshyadav198613/angular-builder/pulls) to make this project better for everyone!
34 |
35 | ## Contributors ✨
36 |
37 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
38 |
39 |
40 |
41 |
42 |
51 |
52 |
53 |
54 |
55 |
56 | This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
57 |
--------------------------------------------------------------------------------
/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "angular-builders": {
7 | "projectType": "application",
8 | "schematics": {
9 | "@schematics/angular:application": {
10 | "strict": true
11 | }
12 | },
13 | "root": "",
14 | "sourceRoot": "src",
15 | "prefix": "app",
16 | "architect": {
17 | "build": {
18 | "builder": "@angular-devkit/build-angular:browser",
19 | "options": {
20 | "outputPath": "dist/angular-builders",
21 | "index": "src/index.html",
22 | "main": "src/main.ts",
23 | "polyfills": "src/polyfills.ts",
24 | "tsConfig": "tsconfig.app.json",
25 | "assets": [
26 | "src/favicon.ico",
27 | "src/assets",
28 | "src/_redirects",
29 | "src/manifest.webmanifest"
30 | ],
31 | "styles": [
32 | "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
33 | "src/styles.css"
34 | ],
35 | "scripts": [],
36 | "serviceWorker": true,
37 | "ngswConfigPath": "ngsw-config.json"
38 | },
39 | "configurations": {
40 | "production": {
41 | "budgets": [
42 | {
43 | "type": "initial",
44 | "maximumWarning": "500kb",
45 | "maximumError": "1mb"
46 | },
47 | {
48 | "type": "anyComponentStyle",
49 | "maximumWarning": "2kb",
50 | "maximumError": "4kb"
51 | }
52 | ],
53 | "fileReplacements": [
54 | {
55 | "replace": "src/environments/environment.ts",
56 | "with": "src/environments/environment.prod.ts"
57 | }
58 | ],
59 | "outputHashing": "all"
60 | },
61 | "development": {
62 | "buildOptimizer": false,
63 | "optimization": false,
64 | "vendorChunk": true,
65 | "extractLicenses": false,
66 | "sourceMap": true,
67 | "namedChunks": true
68 | }
69 | },
70 | "defaultConfiguration": "production"
71 | },
72 | "serve": {
73 | "builder": "@angular-devkit/build-angular:dev-server",
74 | "configurations": {
75 | "production": {
76 | "browserTarget": "angular-builders:build:production"
77 | },
78 | "development": {
79 | "browserTarget": "angular-builders:build:development"
80 | }
81 | },
82 | "defaultConfiguration": "development"
83 | },
84 | "extract-i18n": {
85 | "builder": "@angular-devkit/build-angular:extract-i18n",
86 | "options": {
87 | "browserTarget": "angular-builders:build"
88 | }
89 | },
90 | "test": {
91 | "builder": "@angular-devkit/build-angular:karma",
92 | "options": {
93 | "main": "src/test.ts",
94 | "polyfills": "src/polyfills.ts",
95 | "tsConfig": "tsconfig.spec.json",
96 | "karmaConfig": "karma.conf.js",
97 | "assets": [
98 | "src/favicon.ico",
99 | "src/assets",
100 | "src/manifest.webmanifest"
101 | ],
102 | "styles": [
103 | "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
104 | "src/styles.css"
105 | ],
106 | "scripts": []
107 | }
108 | }
109 | }
110 | }
111 | },
112 | "defaultProject": "angular-builders"
113 | }
114 |
--------------------------------------------------------------------------------
/cli.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/cli.png
--------------------------------------------------------------------------------
/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration file, see link for more information
2 | // https://karma-runner.github.io/1.0/config/configuration-file.html
3 |
4 | module.exports = function (config) {
5 | config.set({
6 | basePath: '',
7 | frameworks: ['jasmine', '@angular-devkit/build-angular'],
8 | plugins: [
9 | require('karma-jasmine'),
10 | require('karma-chrome-launcher'),
11 | require('karma-jasmine-html-reporter'),
12 | require('karma-coverage-istanbul-reporter'),
13 | require('@angular-devkit/build-angular/plugins/karma')
14 | ],
15 | client: {
16 | clearContext: false // leave Jasmine Spec Runner output visible in browser
17 | },
18 | coverageIstanbulReporter: {
19 | dir: require('path').join(__dirname, './coverage/angular-builders'),
20 | reports: ['html', 'lcovonly', 'text-summary'],
21 | fixWebpackSourcePaths: true
22 | },
23 | reporters: ['progress', 'kjhtml'],
24 | port: 9876,
25 | colors: true,
26 | logLevel: config.LOG_INFO,
27 | autoWatch: true,
28 | browsers: ['Chrome'],
29 | singleRun: false,
30 | restartOnFileChange: true
31 | });
32 | };
33 |
--------------------------------------------------------------------------------
/ngsw-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/service-worker/config/schema.json",
3 | "index": "/index.html",
4 | "assetGroups": [
5 | {
6 | "name": "app",
7 | "installMode": "prefetch",
8 | "resources": {
9 | "files": [
10 | "/favicon.ico",
11 | "/index.html",
12 | "/*.css",
13 | "/*.js",
14 | "/manifest.webmanifest"
15 | ]
16 | }
17 | }, {
18 | "name": "assets",
19 | "installMode": "lazy",
20 | "updateMode": "prefetch",
21 | "resources": {
22 | "files": [
23 | "/assets/**",
24 | "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
25 | ]
26 | }
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-builders",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "build": "ng build",
8 | "watch": "ng build --watch --configuration development",
9 | "test": "ng test",
10 | "contributors:add": "all-contributors add",
11 | "contributors:check": "all-contributors check"
12 | },
13 | "private": true,
14 | "dependencies": {
15 | "@angular/animations": "13.0.0",
16 | "@angular/cdk": "13.0.0",
17 | "@angular/common": "13.0.0",
18 | "@angular/compiler": "13.0.0",
19 | "@angular/core": "13.0.0",
20 | "@angular/forms": "13.0.0",
21 | "@angular/material": "13.0.0",
22 | "@angular/platform-browser": "13.0.0",
23 | "@angular/platform-browser-dynamic": "13.0.0",
24 | "@angular/router": "13.0.0",
25 | "@angular/service-worker": "13.0.0",
26 | "rxjs": "6.6.7",
27 | "tslib": "2.2.0",
28 | "zone.js": "0.11.4"
29 | },
30 | "devDependencies": {
31 | "@angular-devkit/build-angular": "13.0.1",
32 | "@angular/cli": "13.0.1",
33 | "@angular/compiler-cli": "13.0.0",
34 | "@types/jasmine": "3.7.6",
35 | "@types/node": "14.17.1",
36 | "all-contributors-cli": "6.20.0",
37 | "jasmine-core": "3.7.1",
38 | "karma": "6.3.2",
39 | "karma-chrome-launcher": "3.1.0",
40 | "karma-coverage": "2.0.3",
41 | "karma-jasmine": "4.0.1",
42 | "karma-jasmine-html-reporter": "1.6.0",
43 | "karma-coverage-istanbul-reporter": "3.0.3",
44 | "jasmine-spec-reporter": "7.0.0",
45 | "typescript": "4.4.4"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "config:base"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/screenshot.png
--------------------------------------------------------------------------------
/src/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/src/app/Utils/components/search-bar/search-bar.component.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | input {
4 | outline: none;
5 | }
6 | input[type=search] {
7 | -webkit-appearance: textfield;
8 | font-family: Roboto,"Helvetica Neue",sans-serif;
9 | font-size: 16px;
10 | }
11 | input::-webkit-search-decoration,
12 | input::-webkit-search-cancel-button {
13 | display: none;
14 | }
15 |
16 |
17 | input[type=search] {
18 | background: #ededed url('../../../../assets/icons/search-1x.png') no-repeat;
19 | background-position: right 10px top 8px;
20 | border: solid 1px #ccc;
21 | padding: 9px 10px 9px 32px;
22 | width: 85px;
23 |
24 | -webkit-border-radius: 8em;
25 | -moz-border-radius: 8em;
26 | border-radius: 8em;
27 |
28 | -webkit-transition: all .5s;
29 | -moz-transition: all .5s;
30 | transition: all .5s;
31 | }
32 |
33 | /* Demo 2 */
34 | #expand-search {
35 | display: flex;
36 | }
37 |
38 | #expand-search .clear-icon{
39 | cursor: pointer;
40 | color: red;
41 | font-weight: bold;
42 | padding-left: 1rem;
43 | }
44 |
45 | #expand-search input[type=search] {
46 | width: 180px;
47 | height: 34px;
48 | padding-left: 10px;
49 | color: transparent;
50 | cursor: pointer;
51 | font-size: 16px;
52 | }
53 |
54 | #expand-search input[type=search]:hover {
55 | background-color: #fff;
56 | }
57 | #expand-search input[type=search]:focus {
58 | color: #000;
59 | background-color: #fff;
60 | cursor: auto;
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/src/app/Utils/components/search-bar/search-bar.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/app/Utils/components/search-bar/search-bar.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2 | import { BuilderDataService } from 'src/app/dashboard/service/builder-data.service';
3 |
4 | import { SearchBarComponent } from './search-bar.component';
5 |
6 | describe('SearchBarComponent', () => {
7 | let component: SearchBarComponent;
8 | let fixture: ComponentFixture;
9 | let builderDataServiceStub: Partial;
10 |
11 | builderDataServiceStub = {
12 | getBuilderData: jasmine.createSpy(),
13 | filterText: jasmine.createSpy()
14 | };
15 |
16 | beforeEach(waitForAsync(() => {
17 | TestBed.configureTestingModule({
18 | declarations: [ SearchBarComponent ],
19 | providers: [ { provide: BuilderDataService, useValue: builderDataServiceStub } ],
20 | })
21 | .compileComponents();
22 | }));
23 |
24 | beforeEach(() => {
25 | fixture = TestBed.createComponent(SearchBarComponent);
26 | component = fixture.componentInstance;
27 | fixture.detectChanges();
28 | });
29 |
30 | it('should create', () => {
31 | expect(component).toBeTruthy();
32 | });
33 | });
34 |
--------------------------------------------------------------------------------
/src/app/Utils/components/search-bar/search-bar.component.ts:
--------------------------------------------------------------------------------
1 | import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
2 | import { Component, OnInit, Output, EventEmitter, ViewChild } from '@angular/core';
3 | import { Subject } from 'rxjs';
4 | import { BuilderDataService } from 'src/app/dashboard/service/builder-data.service';
5 |
6 | @Component({
7 | selector: 'app-search-bar',
8 | templateUrl: './search-bar.component.html',
9 | styleUrls: ['./search-bar.component.css'],
10 | exportAs: 'searchBar'
11 | })
12 | export class SearchBarComponent implements OnInit {
13 | @ViewChild('inputRef', {static: true}) inputRef: HTMLElement;
14 | @Output() onChange: EventEmitter = new EventEmitter();
15 | emmiter: Subject = new Subject();
16 |
17 | constructor(private dataService: BuilderDataService) {}
18 |
19 | ngOnInit() {
20 | this.emmiter
21 | .pipe(
22 | debounceTime(500),
23 | distinctUntilChanged()
24 | ).subscribe(val => this.onChange.emit(val));
25 | }
26 |
27 | onInputChange(event:any) {
28 | const searchText = ('' + event.target.value).toUpperCase();
29 | this.dataService.filterText(searchText);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 | import { DashboardComponent } from './dashboard/dashboard.component';
4 | import { ReferencesComponent } from './references/references.component';
5 |
6 | const routes: Routes = [
7 | { path: 'home', component: DashboardComponent },
8 | {
9 | path: 'reference',
10 | loadChildren: () => import('./references/references.module').then(m => m.ReferencesModule)
11 | },
12 | { path: '', redirectTo: 'home', pathMatch: 'full' }
13 | ];
14 |
15 | @NgModule({
16 | imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })],
17 | exports: [RouterModule]
18 | })
19 | export class AppRoutingModule { }
20 |
--------------------------------------------------------------------------------
/src/app/app.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/app/app.component.css
--------------------------------------------------------------------------------
/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed, waitForAsync } from '@angular/core/testing';
2 | import { RouterTestingModule } from '@angular/router/testing';
3 | import { AppComponent } from './app.component';
4 |
5 | describe('AppComponent', () => {
6 | beforeEach(waitForAsync(() => {
7 | TestBed.configureTestingModule({
8 | imports: [
9 | RouterTestingModule
10 | ],
11 | declarations: [
12 | AppComponent
13 | ],
14 | }).compileComponents();
15 | }));
16 |
17 | it('should create the app', () => {
18 | const fixture = TestBed.createComponent(AppComponent);
19 | const app = fixture.debugElement.componentInstance;
20 | expect(app).toBeTruthy();
21 | });
22 |
23 | it(`should have as title 'angular-builders'`, () => {
24 | const fixture = TestBed.createComponent(AppComponent);
25 | const app = fixture.debugElement.componentInstance;
26 | expect(app.title).toEqual('angular-builders');
27 | });
28 |
29 | });
30 |
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | templateUrl: './app.component.html',
6 | styleUrls: ['./app.component.css']
7 | })
8 | export class AppComponent {
9 | title = 'angular-builders';
10 | }
11 |
--------------------------------------------------------------------------------
/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { NgModule } from '@angular/core';
3 | import { HttpClientModule } from '@angular/common/http';
4 |
5 | import { AppRoutingModule } from './app-routing.module';
6 | import { AppComponent } from './app.component';
7 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
8 | import { DashboardComponent } from './dashboard/dashboard.component';
9 | import { MatGridListModule } from '@angular/material/grid-list';
10 | import { MatCardModule } from '@angular/material/card';
11 | import { MatMenuModule } from '@angular/material/menu';
12 | import { MatIconModule } from '@angular/material/icon';
13 | import { MatButtonModule } from '@angular/material/button';
14 | import { LayoutModule } from '@angular/cdk/layout';
15 | import { MainNavComponent } from './main-nav/main-nav.component';
16 | import { MatToolbarModule } from '@angular/material/toolbar';
17 | import { MatSidenavModule } from '@angular/material/sidenav';
18 | import { MatListModule } from '@angular/material/list';
19 | import { ReferencesComponent } from './references/references.component';
20 | import { ServiceWorkerModule } from '@angular/service-worker';
21 | import { environment } from '../environments/environment';
22 | import { MatExpansionModule } from '@angular/material/expansion';
23 | import { SearchBarComponent } from './Utils/components/search-bar/search-bar.component';
24 |
25 | @NgModule({
26 | declarations: [
27 | AppComponent,
28 | DashboardComponent,
29 | MainNavComponent,
30 | SearchBarComponent
31 | ],
32 | imports: [
33 | BrowserModule,
34 | AppRoutingModule,
35 | HttpClientModule,
36 | BrowserAnimationsModule,
37 | MatGridListModule,
38 | MatCardModule,
39 | MatMenuModule,
40 | MatIconModule,
41 | MatButtonModule,
42 | LayoutModule,
43 | MatToolbarModule,
44 | MatSidenavModule,
45 | MatListModule,
46 | MatExpansionModule,
47 | ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
48 | ],
49 | providers: [],
50 | bootstrap: [AppComponent]
51 | })
52 | export class AppModule { }
53 |
--------------------------------------------------------------------------------
/src/app/dashboard/dashboard.component.css:
--------------------------------------------------------------------------------
1 | accordion-group {
2 | margin-bottom: 20px;
3 | }
4 |
5 | .heading {
6 | padding: 10px 0px;
7 | display: flex;
8 | justify-content: flex-start;
9 | align-items: center;
10 | }
11 |
12 | .heading app-search-bar {
13 | padding-left: 1rem;
14 | }
15 |
16 | mat-expansion-panel-header {
17 | background-color: #3f51b5 !important;
18 | }
19 |
20 | .mat-expansion-panel-header.mat-expanded:focus,
21 | .mat-expansion-panel-header.mat-expanded:hover {
22 | background-color: #3f51b5;
23 | }
24 |
25 | div {
26 | padding-top: 16px;
27 | }
28 |
29 | mat-panel-title {
30 | color: white;
31 | font-size: 17px;
32 | line-height: 34px;
33 | width: 100%;
34 | }
35 |
36 | mat-expansion-panel-header.mat-expanded {
37 | height: 45px;
38 | }
39 |
--------------------------------------------------------------------------------
/src/app/dashboard/dashboard.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{builder.name}}
8 |
9 |
10 |
11 |
12 | Repository
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/app/dashboard/dashboard.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { LayoutModule } from '@angular/cdk/layout';
2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations';
3 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
4 | import { MatButtonModule } from '@angular/material/button';
5 | import { MatCardModule } from '@angular/material/card';
6 | import { MatGridListModule } from '@angular/material/grid-list';
7 | import { MatIconModule } from '@angular/material/icon';
8 | import { MatMenuModule } from '@angular/material/menu';
9 |
10 | import { DashboardComponent } from './dashboard.component';
11 | import { BuilderDataService } from './service/builder-data.service';
12 | import { of, Subject } from 'rxjs';
13 |
14 | describe('DashboardComponent', () => {
15 | let component: DashboardComponent;
16 | let fixture: ComponentFixture;
17 | let builderDataServiceStub: Partial;
18 | let searchText = new Subject();
19 | builderDataServiceStub = {
20 | getBuilderData: jasmine.createSpy().and.returnValue(of([])),
21 | filterText$: searchText.asObservable()
22 | };
23 |
24 | beforeEach(waitForAsync(() => {
25 | TestBed.configureTestingModule({
26 | declarations: [DashboardComponent],
27 | imports: [
28 | NoopAnimationsModule,
29 | LayoutModule,
30 | MatButtonModule,
31 | MatCardModule,
32 | MatGridListModule,
33 | MatIconModule,
34 | MatMenuModule,
35 | ],
36 | providers: [ { provide: BuilderDataService, useValue: builderDataServiceStub } ],
37 | }).compileComponents();
38 | }));
39 |
40 | beforeEach(() => {
41 | fixture = TestBed.createComponent(DashboardComponent);
42 | component = fixture.componentInstance;
43 | fixture.detectChanges();
44 | });
45 |
46 | it('should compile', () => {
47 | expect(component).toBeTruthy();
48 | });
49 | });
50 |
--------------------------------------------------------------------------------
/src/app/dashboard/dashboard.component.ts:
--------------------------------------------------------------------------------
1 | import { SearchBarComponent } from './../Utils/components/search-bar/search-bar.component';
2 | import { Component, OnInit, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';
3 | import { BuilderDataService } from './service/builder-data.service';
4 | import { shareReplay } from 'rxjs/operators';
5 | import { IBuilderData } from './ibuilderdata';
6 |
7 | @Component({
8 | selector: 'app-dashboard',
9 | templateUrl: './dashboard.component.html',
10 | styleUrls: ['./dashboard.component.css']
11 | })
12 | export class DashboardComponent implements OnInit, AfterViewInit {
13 | builders$ = this.dataService.getBuilderData().pipe(shareReplay());
14 | allBuilders: IBuilderData[] = [];
15 |
16 | @ViewChild('sb', { static: true }) sb: SearchBarComponent;
17 | constructor(private dataService: BuilderDataService) {}
18 |
19 | ngOnInit(): void {
20 | this.getBuilderData('');
21 |
22 | this.dataService.filterText$.subscribe(searchText=> {
23 | this.getBuilderData(searchText);
24 | })
25 | }
26 |
27 | ngAfterViewInit(): void {}
28 |
29 | private getBuilderData(searchText:string) {
30 | this.builders$.subscribe(res => {
31 | this.allBuilders = res.filter(
32 | builder =>
33 | (builder.name + '' + builder.description).toUpperCase().indexOf(searchText) > -1
34 | );
35 | });
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/app/dashboard/ibuilderdata.ts:
--------------------------------------------------------------------------------
1 | export interface IBuilderData {
2 | name: string;
3 | description: string;
4 | repository: string;
5 | }
6 |
--------------------------------------------------------------------------------
/src/app/dashboard/service/builder-data.service.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 | import {HttpClientTestingModule} from '@angular/common/http/testing';
3 | import { BuilderDataService } from './builder-data.service';
4 |
5 | describe('BuilderDataService', () => {
6 | beforeEach(() => TestBed.configureTestingModule({
7 | imports: [ HttpClientTestingModule ]
8 | }));
9 |
10 | it('should be created', () => {
11 | const service: BuilderDataService = TestBed.get(BuilderDataService);
12 | expect(service).toBeTruthy();
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/src/app/dashboard/service/builder-data.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from '@angular/core';
2 | import { HttpClient } from '@angular/common/http';
3 | import { IBuilderData } from '../ibuilderdata';
4 | import { Subject } from 'rxjs';
5 |
6 | @Injectable({
7 | providedIn: 'root'
8 | })
9 | export class BuilderDataService {
10 |
11 | private searchText = new Subject();
12 | filterText$ = this.searchText.asObservable();
13 | dataPath = '/assets/builders.json';
14 |
15 | constructor(private http: HttpClient) { }
16 |
17 | getBuilderData() {
18 | return this.http.get(this.dataPath);
19 | }
20 |
21 | filterText(text:string) {
22 | this.searchText.next(text)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/app/main-nav/main-nav.component.css:
--------------------------------------------------------------------------------
1 | .drawer-container {
2 | height: auto !important;
3 | }
4 |
5 | .sidenav-content {
6 | display: flex;
7 | height: 100%;
8 |
9 | }
10 |
11 | .sidenav {
12 | padding: 20px;
13 | width: 200px;
14 | top: 64px;
15 | }
16 |
17 | .container {
18 | margin: 20px !important;
19 | padding: 50px 1rem;
20 | width: 100%;
21 | }
22 |
23 | .spacer {
24 | flex: 1 1 auto;
25 | }
26 |
27 | .fixed-header {
28 | position: fixed;
29 | width: 100%;
30 | z-index: 99999;
31 | }
--------------------------------------------------------------------------------
/src/app/main-nav/main-nav.component.html:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 | Builders
21 | References
22 |
23 |
24 |
25 |
30 |
--------------------------------------------------------------------------------
/src/app/main-nav/main-nav.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { LayoutModule } from '@angular/cdk/layout';
2 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
3 | import { NoopAnimationsModule } from '@angular/platform-browser/animations';
4 | import { MatButtonModule } from '@angular/material/button';
5 | import { MatIconModule } from '@angular/material/icon';
6 | import { MatListModule } from '@angular/material/list';
7 | import { MatSidenavModule } from '@angular/material/sidenav';
8 | import { MatToolbarModule } from '@angular/material/toolbar';
9 |
10 | import { MainNavComponent } from './main-nav.component';
11 |
12 | describe('MainNavComponent', () => {
13 | let component: MainNavComponent;
14 | let fixture: ComponentFixture;
15 |
16 | beforeEach(waitForAsync(() => {
17 | TestBed.configureTestingModule({
18 | declarations: [MainNavComponent],
19 | imports: [
20 | NoopAnimationsModule,
21 | LayoutModule,
22 | MatButtonModule,
23 | MatIconModule,
24 | MatListModule,
25 | MatSidenavModule,
26 | MatToolbarModule,
27 | ]
28 | }).compileComponents();
29 | }));
30 |
31 | beforeEach(() => {
32 | fixture = TestBed.createComponent(MainNavComponent);
33 | component = fixture.componentInstance;
34 | fixture.detectChanges();
35 | });
36 |
37 | it('should compile', () => {
38 | expect(component).toBeTruthy();
39 | });
40 | });
41 |
--------------------------------------------------------------------------------
/src/app/main-nav/main-nav.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, HostListener } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-main-nav',
5 | templateUrl: './main-nav.component.html',
6 | styleUrls: ['./main-nav.component.css']
7 | })
8 | export class MainNavComponent {
9 | desktopViewWidth : number = 1000;
10 | showNavbar: boolean = false;
11 | get isOpened() { return this.showNavbar; }
12 |
13 | constructor() {}
14 |
15 | ngOnInit() {
16 | this.onResize(window.innerWidth);
17 | }
18 |
19 | @HostListener('window:resize', ['$event.target.innerWidth'])
20 | onResize(width: number) {
21 | this.showNavbar = width >= this.desktopViewWidth;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/app/references/reference.ts:
--------------------------------------------------------------------------------
1 | export interface IReference {
2 | resources: IResource[]
3 | }
4 |
5 | export interface IResource {
6 | name: string;
7 | description: string;
8 | type: string;
9 | link:string;
10 | }
11 |
12 | export interface IBlogs {
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/app/references/references-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes, RouterModule } from '@angular/router';
3 | import { ReferencesComponent } from './references.component';
4 |
5 |
6 | const routes: Routes = [
7 | {
8 | path: '' , component: ReferencesComponent
9 | }
10 | ];
11 |
12 | @NgModule({
13 | imports: [RouterModule.forChild(routes)],
14 | exports: [RouterModule]
15 | })
16 | export class ReferencesRoutingModule { }
17 |
--------------------------------------------------------------------------------
/src/app/references/references.component.css:
--------------------------------------------------------------------------------
1 |
2 | mat-expansion-panel-header {
3 | background-color: #3f51b5 !important;
4 | }
5 |
6 | .mat-expansion-panel-header.mat-expanded:focus,
7 | .mat-expansion-panel-header.mat-expanded:hover {
8 | background-color: #3f51b5;
9 | }
10 |
11 | mat-panel-title {
12 | color: white;
13 | font-size: 18px;
14 | }
15 |
--------------------------------------------------------------------------------
/src/app/references/references.component.html:
--------------------------------------------------------------------------------
1 | Builder Resources
2 |
3 |
4 |
5 | {{reference.name}}
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/app/references/references.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2 |
3 | import { ReferencesComponent } from './references.component';
4 | import { ReferenceService } from './service/reference.service';
5 |
6 | describe('ReferencesComponent', () => {
7 | let component: ReferencesComponent;
8 | let fixture: ComponentFixture;
9 | let referenceServiceStub: Partial;
10 |
11 | referenceServiceStub = {
12 | getReferenceData: jasmine.createSpy()
13 | };
14 |
15 | beforeEach(waitForAsync(() => {
16 | TestBed.configureTestingModule({
17 | declarations: [ ReferencesComponent ],
18 | providers: [ { provide: ReferenceService, useValue: referenceServiceStub } ],
19 | })
20 | .compileComponents();
21 | }));
22 |
23 | beforeEach(() => {
24 | fixture = TestBed.createComponent(ReferencesComponent);
25 | component = fixture.componentInstance;
26 | fixture.detectChanges();
27 | });
28 |
29 | it('should create', () => {
30 | expect(component).toBeTruthy();
31 | });
32 | });
33 |
--------------------------------------------------------------------------------
/src/app/references/references.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { ReferenceService } from './service/reference.service';
3 |
4 | @Component({
5 | selector: 'app-references',
6 | templateUrl: './references.component.html',
7 | styleUrls: ['./references.component.css']
8 | })
9 | export class ReferencesComponent {
10 |
11 | references$ = this.referenceService.getReferenceData();
12 |
13 | constructor(private referenceService: ReferenceService) { }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/app/references/references.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 |
4 | import { ReferencesRoutingModule } from './references-routing.module';
5 | import { ReferencesComponent } from './references.component';
6 | import { MatListModule } from '@angular/material/list';
7 |
8 |
9 | @NgModule({
10 | declarations: [ReferencesComponent],
11 | imports: [
12 | CommonModule,
13 | ReferencesRoutingModule,
14 | MatListModule
15 | ]
16 | })
17 | export class ReferencesModule { }
18 |
--------------------------------------------------------------------------------
/src/app/references/service/reference.service.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 |
3 | import { ReferenceService } from './reference.service';
4 | import {HttpClientTestingModule} from '@angular/common/http/testing';
5 |
6 | describe('ReferenceService', () => {
7 | beforeEach(() => TestBed.configureTestingModule({
8 | imports: [ HttpClientTestingModule ]
9 | }));
10 |
11 | it('should be created', () => {
12 | const service: ReferenceService = TestBed.get(ReferenceService);
13 | expect(service).toBeTruthy();
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/src/app/references/service/reference.service.ts:
--------------------------------------------------------------------------------
1 | import { HttpClient } from '@angular/common/http';
2 | import { Injectable } from '@angular/core';
3 | import { IReference } from '../reference';
4 |
5 | @Injectable({
6 | providedIn: 'root'
7 | })
8 | export class ReferenceService {
9 | referencePath = "/assets/references.json";
10 |
11 | constructor(private http: HttpClient) { }
12 |
13 | getReferenceData() {
14 | return this.http.get(this.referencePath);
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/.gitkeep
--------------------------------------------------------------------------------
/src/assets/builders.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "name": "Custom Webpack Builder",
4 | "description": "Extended @angular-devkit/build-angular:browser builder that allows to specify additional webpack configuration (on top of the existing under the hood) and index.html tranformations. The builder will run the same build as @angular-devkit/build-angular:browser does with extra parameters that are specified in the provided webpack configuration. It will also run transformation on index.html if specified.Builders @angular-builders/custom-webpack:browser @angular-builders/custom-webpack:server @angular-builders/custom-webpack:karma @angular-builders/custom-webpack:dev-serve ",
5 | "repository": "https://github.com/just-jeb/angular-builders/tree/master/packages/custom-webpack"
6 | },
7 | {
8 | "name": "Jest Builder",
9 | "description": "Allows running ng test with Jest instead of Karma & Jasmine. The builder comes to provide zero configuration setup for Jest while keeping the workspace clear of boilerplate code. ",
10 | "repository": "https://github.com/just-jeb/angular-builders/blob/master/packages/jest"
11 | },
12 | {
13 | "name": "Ngx Build Plus",
14 | "description": "Extend the Angular CLI's default build behavior without ejecting:Extend the default behavior by providing a partial config that just contains your additional settings Alternative: Extend the default behavior by providing a custom function Optional: Build a single bundle (e. g. for Angular Elements) Inherits from the default builder, hence you have the same options Simple to use No eject needed ",
15 | "repository": "https://github.com/manfredsteyer/ngx-build-plus"
16 | },
17 | {
18 | "name": "ngx-gh(Deprecated)",
19 | "description": "Deploy your Angular app to GitHub pages directly from the Angular CLI!",
20 | "repository": "https://github.com/mgechev/ngx-gh"
21 | },
22 | {
23 | "name": "angular-cli-ghpages",
24 | "description": "Deploy your Angular app to GitHub pages directly from the Angular CLI!ng new your-angular-project --defaults git remote add origin https://github.com//.git ng add angular-cli-ghpages ng deploy ",
25 | "repository": "https://github.com/angular-schule/angular-cli-ghpages"
26 | },
27 | {
28 | "name": "ng-deploy-azure",
29 | "description": "Deploy Angular apps to Azure using the Angular CLI",
30 | "repository": "https://github.com/Azure/ng-deploy-azure"
31 | },
32 | {
33 | "name": "@angular/fire:deploy",
34 | "description": "Deploy your application on Firebase Hostingng add @angular/fire to your project ng run [ANGULAR_PROJECT_NAME]:deploy to deploy ",
35 | "repository": "https://github.com/angular/angularfire2/blob/master/docs/deploy/getting-started.md"
36 | },
37 | {
38 | "name": "Bazel Build",
39 | "description": "Bazel is an open-source build and test tool similar to Make, Maven, and Gradle. It uses a human-readable, high-level build language. Bazel supports projects in multiple languages and builds outputs for multiple platforms. Bazel supports large codebases across multiple repositories, and large numbers of users.",
40 | "repository": "https://github.com/bazelbuild/bazel"
41 | },
42 | {
43 | "name": "@nrwl/builders",
44 | "description": "This package is part of their Nx Modern tools. You can add this package via npm i @nrwl/builders or yarn add -D @nrwl/builders. Having Nx workspace is not compulsory as they seamlessly integrate with angular cli. ",
45 | "repository": "https://github.com/nrwl/nx"
46 | },
47 | {
48 | "name": "@zeit/ng-deploy",
49 | "description": "Deploy your application on ZEIT Nowyarn global add @angular/cli ng add @zeit/ng-deploy ng run hello-world:deploy ",
50 | "repository": "https://github.com/zeit/ng-deploy-now"
51 | },
52 | {
53 | "name": "ng-builder-file-remover",
54 | "description": "Remove files and folders from your project. Useful for removing any assets you don't want in a production build.",
55 | "repository": "https://github.com/BojanKogoj/ng-builder-file-remover"
56 | },
57 | {
58 | "name": "@netlify-builder/deploy",
59 | "description": "Deploy your application on Netlify with Angular CLIng add @netlify-build/deploy ng deploy ",
60 | "repository": "https://github.com/ngx-builders/netlify-builder"
61 | },
62 | {
63 | "name": "ng-builder-google-maps",
64 | "description": "Angular CLI builder that adds the Google Maps API into your Angular application.",
65 | "repository": "https://github.com/Developer-Plexscape/ng-builder-google-maps"
66 | },
67 | {
68 | "name": "ngx-aws-deploy",
69 | "description": "Deploy Angular apps to Amazon S3 using the Angular CLI",
70 | "repository": "https://github.com/Jefiozie/ngx-aws-deploy"
71 | },
72 | {
73 | "name": "ng-process-env",
74 | "description": "Retrieve values from System Environment (OS) variables and update relevant environment.ts
file.Install: ng add ng-process-env
or manually ng g ng-process-env:process-env
Collect vars: ng run my-app:collect-vars
",
75 | "repository": "https://github.com/danduh/ng-process-env"
76 | },
77 | {
78 | "name": "ngx-electronify",
79 | "description": "Serve your Angular application in the desktop using Electron",
80 | "repository": "https://github.com/bampakoa/ngx-electronify"
81 | },
82 | {
83 | "name": "@ngx-env/builder",
84 | "description": "Easily inject environment variables into your Angular applications Add @ngx-env to your CLI project ng add @ngx-env/builder
Define Environment Variables in
.env NG_APP_ENABLE_ANALYTICS=false NG_APP_VERSION=$npm_package_version NG_APP_COMMIT=$GITHUB_SHA
Use in TypeScript @Component({ selector: \"app-footer\", }) export class FooterComponent { version = process.env.NG_APP_VERSION; branch = process.env.NG_APP_BRANCH_NAME; commit = process.env.NG_APP_COMMIT; analyticsFlag = process.env.NG_APP_ENABLE_ANALYTICS; }
Run CLI commands npm start NG_APP_BRANCH_NAME=$GITHUB_HEAD_REF ng test NG_APP_BRANCH_NAME=`git branch --show-current` npm run build
",
85 | "repository": "https://github.com/chihab/ngx-env"
86 | }
87 | ]
88 |
--------------------------------------------------------------------------------
/src/assets/icons/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-128x128.png
--------------------------------------------------------------------------------
/src/assets/icons/icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-144x144.png
--------------------------------------------------------------------------------
/src/assets/icons/icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-152x152.png
--------------------------------------------------------------------------------
/src/assets/icons/icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-192x192.png
--------------------------------------------------------------------------------
/src/assets/icons/icon-384x384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-384x384.png
--------------------------------------------------------------------------------
/src/assets/icons/icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-512x512.png
--------------------------------------------------------------------------------
/src/assets/icons/icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-72x72.png
--------------------------------------------------------------------------------
/src/assets/icons/icon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/icon-96x96.png
--------------------------------------------------------------------------------
/src/assets/icons/search-1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/search-1x.png
--------------------------------------------------------------------------------
/src/assets/icons/search-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/assets/icons/search-2x.png
--------------------------------------------------------------------------------
/src/assets/references.json:
--------------------------------------------------------------------------------
1 | {
2 | "resources": [
3 | {
4 | "name": "Angular CLI Builder",
5 | "description": "Official documentation for Angular Builders.",
6 | "link": "https://angular.io/guide/cli-builder"
7 | },
8 | {
9 | "name": "Sample Builder GitHub Repo",
10 | "description": "This repository contains the sample code to the builders.",
11 | "link": "https://github.com/mgechev/cli-builders-demo"
12 | },
13 | {
14 | "name": "Introducing CLI Builders",
15 | "description": "Blog on CLI builders.",
16 | "link": "https://blog.angular.io/introducing-cli-builders-d012d4489f1b"
17 | },
18 | {
19 | "name": "Builders Demystified v2",
20 | "description": "Blog on CLI builders.",
21 | "link": "https://medium.com/angular-in-depth/angular-cli-under-the-hood-builders-demystified-v2-e73ee0f2d811"
22 | },
23 | {
24 | "name": "Angular CLI Builders",
25 | "description": "Angular CLI Builders",
26 | "link": "https://indepth.dev/angular-cli-builders/"
27 | }
28 | ],
29 | "blogs": []
30 | }
31 |
--------------------------------------------------------------------------------
/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | // This file can be replaced during build by using the `fileReplacements` array.
2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`.
3 | // The list of file replacements can be found in `angular.json`.
4 |
5 | export const environment = {
6 | production: false
7 | };
8 |
9 | /*
10 | * For easier debugging in development mode, you can import the following file
11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
12 | *
13 | * This import should be commented out in production mode because it will have a negative impact
14 | * on performance if an error is thrown.
15 | */
16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
17 |
--------------------------------------------------------------------------------
/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngx-builders/angular-builder/f89d4cafe47c154e02056cdc2aeef342e3e19dd0/src/favicon.ico
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Angular Builders
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Please enable JavaScript to continue using this application.
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic().bootstrapModule(AppModule)
12 | .catch(err => console.error(err));
13 |
--------------------------------------------------------------------------------
/src/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Angular Builders",
3 | "short_name": "Builders",
4 | "theme_color": "#1976d2",
5 | "background_color": "#fafafa",
6 | "display": "standalone",
7 | "scope": "./",
8 | "start_url": "./",
9 | "icons": [
10 | {
11 | "src": "assets/icons/icon-72x72.png",
12 | "sizes": "72x72",
13 | "type": "image/png",
14 | "purpose": "maskable any"
15 | },
16 | {
17 | "src": "assets/icons/icon-96x96.png",
18 | "sizes": "96x96",
19 | "type": "image/png",
20 | "purpose": "maskable any"
21 | },
22 | {
23 | "src": "assets/icons/icon-128x128.png",
24 | "sizes": "128x128",
25 | "type": "image/png",
26 | "purpose": "maskable any"
27 | },
28 | {
29 | "src": "assets/icons/icon-144x144.png",
30 | "sizes": "144x144",
31 | "type": "image/png",
32 | "purpose": "maskable any"
33 | },
34 | {
35 | "src": "assets/icons/icon-152x152.png",
36 | "sizes": "152x152",
37 | "type": "image/png",
38 | "purpose": "maskable any"
39 | },
40 | {
41 | "src": "assets/icons/icon-192x192.png",
42 | "sizes": "192x192",
43 | "type": "image/png",
44 | "purpose": "maskable any"
45 | },
46 | {
47 | "src": "assets/icons/icon-384x384.png",
48 | "sizes": "384x384",
49 | "type": "image/png",
50 | "purpose": "maskable any"
51 | },
52 | {
53 | "src": "assets/icons/icon-512x512.png",
54 | "sizes": "512x512",
55 | "type": "image/png",
56 | "purpose": "maskable any"
57 | }
58 | ]
59 | }
60 |
--------------------------------------------------------------------------------
/src/polyfills.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This file includes polyfills needed by Angular and is loaded before the app.
3 | * You can add your own extra polyfills to this file.
4 | *
5 | * This file is divided into 2 sections:
6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
8 | * file.
9 | *
10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
13 | *
14 | * Learn more in https://angular.io/guide/browser-support
15 | */
16 |
17 | /***************************************************************************************************
18 | * BROWSER POLYFILLS
19 | */
20 |
21 | /**
22 | * By default, zone.js will patch all possible macroTask and DomEvents
23 | * user can disable parts of macroTask/DomEvents patch by setting following flags
24 | * because those flags need to be set before `zone.js` being loaded, and webpack
25 | * will put import in the top of bundle, so user need to create a separate file
26 | * in this directory (for example: zone-flags.ts), and put the following flags
27 | * into that file, and then add the following code before importing zone.js.
28 | * import './zone-flags';
29 | *
30 | * The flags allowed in zone-flags.ts are listed here.
31 | *
32 | * The following flags will work for all browsers.
33 | *
34 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
35 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
36 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
37 | *
38 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
39 | * with the following flag, it will bypass `zone.js` patch for IE/Edge
40 | *
41 | * (window as any).__Zone_enable_cross_context_check = true;
42 | *
43 | */
44 |
45 | /***************************************************************************************************
46 | * Zone JS is required by default for Angular itself.
47 | */
48 | import 'zone.js'; // Included with Angular CLI.
49 |
50 |
51 | /***************************************************************************************************
52 | * APPLICATION IMPORTS
53 | */
54 |
--------------------------------------------------------------------------------
/src/styles.css:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
3 | html, body { height: 100%; }
4 | body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }
5 |
6 |
7 | body {
8 | font-family: Roboto, Arial, sans-serif;
9 | margin: 0;
10 | }
11 |
12 | .basic-container {
13 | padding: 30px;
14 | }
15 |
16 | .version-info {
17 | font-size: 8pt;
18 | float: right;
19 | }
20 |
21 | .mat-expansion-indicator::after {
22 | color: white
23 | }
24 |
25 |
26 | @media only screen and (max-width: 490px) {
27 | .hide-search-bar-sm {
28 | display: none;
29 | }
30 | }
31 |
32 |
33 | @media only screen and (min-width: 490px) {
34 | .hide-search-bar-md {
35 | display: none;
36 | }
37 | }
38 |
39 | .hide-search-bar-md #expand-search input[type=search]{
40 | width: 100% !important;
41 | margin-bottom: 20px !important;
42 | }
43 |
--------------------------------------------------------------------------------
/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import 'zone.js/testing';
4 | import { getTestBed } from '@angular/core/testing';
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting
8 | } from '@angular/platform-browser-dynamic/testing';
9 |
10 | declare const require: {
11 | context(path: string, deep?: boolean, filter?: RegExp): {
12 | keys(): string[];
13 | (id: string): T;
14 | };
15 | };
16 |
17 | // First, initialize the Angular testing environment.
18 | getTestBed().initTestEnvironment(
19 | BrowserDynamicTestingModule,
20 | platformBrowserDynamicTesting(), {
21 | teardown: { destroyAfterEach: false }
22 | }
23 | );
24 | // Then we find all the tests.
25 | const context = require.context('./', true, /\.spec\.ts$/);
26 | // And load the modules.
27 | context.keys().map(context);
28 |
--------------------------------------------------------------------------------
/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/app",
5 | "types": []
6 | },
7 | "files": [
8 | "src/main.ts",
9 | "src/polyfills.ts"
10 | ],
11 | "include": [
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "compileOnSave": false,
4 | "compilerOptions": {
5 | "baseUrl": "./",
6 | "outDir": "./dist/out-tsc",
7 | "strictPropertyInitialization": false,
8 | "forceConsistentCasingInFileNames": true,
9 | "strict": true,
10 | "noImplicitReturns": true,
11 | "noFallthroughCasesInSwitch": true,
12 | "sourceMap": true,
13 | "declaration": false,
14 | "downlevelIteration": true,
15 | "experimentalDecorators": true,
16 | "moduleResolution": "node",
17 | "importHelpers": true,
18 | "target": "es2017",
19 | "module": "es2020",
20 | "lib": [
21 | "es2018",
22 | "dom"
23 | ]
24 | },
25 | "angularCompilerOptions": {
26 | "enableI18nLegacyMessageIdFormat": false,
27 | "strictInjectionParameters": true,
28 | "strictInputAccessModifiers": true,
29 | "strictTemplates": true
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/spec",
5 | "types": [
6 | "jasmine",
7 | "node"
8 | ]
9 | },
10 | "files": [
11 | "src/test.ts",
12 | "src/polyfills.ts"
13 | ],
14 | "include": [
15 | "src/**/*.spec.ts",
16 | "src/**/*.d.ts"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------