<!--
  BEFORE UPDATING THIS FILE, READ THIS.

  This file is automatically generated during release. It is important for you to not update
  README directly.

  - If you need to change the content, update `scripts/templates/readme.ejs`
  - If you need to add/remove a package or a link, update the .monorepo.json file instead.

  Any changes to README.md directly will result in a failure on CI.
-->

# Angular CLI
### Development tools and libraries specialized for Angular

This is the home of the DevKit and the Angular CLI code. You can find the Angular CLI specific README
[here](https://github.com/angular/angular-cli/blob/master/packages/angular/cli/README.md).

<%# Badges are created here. %>
<% for (const section of monorepo.badges) {
  for (const { label, image, title, url } of section) {
    if (image) {
      %>[![<%= label %>](<%= image %>)]<%
    } else {
      %>[<%= title %>]<%
    }
    %>(<%= url %>) <%
  } %>

<% } %>

### Quick Links
<% for (const link of Object.keys(monorepo.links)) {
  %>[<%= link %>](<%= monorepo.links[link] %>) | <%
} %>
<% for (const link of Object.keys(monorepo.links)) {
%>|---<%
} %>|

----

## The Goal of Angular CLI

The Angular CLI creates, manages, builds and test your Angular projects. It's built on top of the
Angular DevKit.

## The Goal of DevKit

DevKit's goal is to provide a large set of libraries that can be used to manage, develop, deploy and
analyze your code.

# Getting Started - Local Development

## Installation
To get started locally, follow these instructions:

1. If you haven't done it already, [make a fork of this repo](https://github.com/angular/angular-cli/fork).
1. Clone to your local computer using `git`.
1. Make sure that you have Node 10.9 or later installed. See instructions [here](https://nodejs.org/en/download/). The Angular CLI requires Node 8, but development requires Node 10.
1. Make sure that you have `yarn` installed; see instructions [here](https://yarnpkg.com/lang/en/docs/install/).
1. Run `yarn` (no arguments) from the root of your clone of this project.
1. Run `yarn link` to add all custom scripts we use to your global install.

## Creating New Packages
Adding a package to this repository means running two separate commands:

1. `schematics devkit:package PACKAGE_NAME`. This will update the `.monorepo` file, and create the
  base files for the new package (package.json, src/index, etc).
1. `devkit-admin templates`. This will update the README and all other template files that might
  have changed when adding a new package.

For private packages, you will need to add a `"private": true` key to your package.json manually.
This will require re-running the template admin script.

# Packages

This is a monorepo which contains many tools and packages:

<%
  const sections = [
    ...new Set(Object.keys(packages).map(pkgName => monorepo.packages[pkgName].section ))
  ].filter(x => x && x != 'Tooling');
  sections.unshift(undefined);
%>

## Tools

| Project | Package | Version | Links |
|---|---|---|---|
<%
for (const pkgName of Object.keys(packages)) {
  const pkg = packages[pkgName];
  const mrPkg = monorepo.packages[pkgName];

  if (pkg.private) {
    continue;
  }
  if (mrPkg.section != 'Tooling') {
    continue;
  }

%>**<%= mrPkg.name%>**<%
  %> | [`<%= pkgName %>`](https://npmjs.com/package/<%= pkgName %>)<%
  %> | [![latest](https://img.shields.io/npm/v/<%= encode(pkgName) %>/latest.svg)](https://npmjs.com/package/<%= pkgName %>)<%
  %> | <% for (const link of mrPkg.links || []) {
%>[![<%= link.label %>](https://img.shields.io/badge/<%= link.label %>--<%= link.color || 'green' %>.svg)](<%= link.url %>)<%
}
if (mrPkg.snapshotRepo) {
%> [![snapshot](https://img.shields.io/badge/snapshot--blue.svg)](https://github.com/<%= mrPkg.snapshotRepo %>)<%
} %>
<% } %>

## Packages
<% for (const section of sections) {

%><%= section ? '#### ' + section : '' %>

| Project | Package | Version | Links |
|---|---|---|---|
<%
for (const pkgName of Object.keys(packages)) {
  const pkg = packages[pkgName];
  const mrPkg = monorepo.packages[pkgName];

  if (pkg.private) {
    continue;
  }
  if (mrPkg.section != section) {
    continue;
  }

  %>**<%= mrPkg.name%>**<%
  %> | [`<%= pkgName %>`](https://npmjs.com/package/<%= pkgName %>)<%
  %> | [![latest](https://img.shields.io/npm/v/<%= encode(pkgName) %>/latest.svg)](https://npmjs.com/package/<%= pkgName %>)<%
  %> | <% for (const link of mrPkg.links || []) {
    %>[![<%= link.label %>](https://img.shields.io/badge/<%= link.label %>--<%= link.color || 'green' %>.svg)](<%= link.url %>)<%
  } 
  if (mrPkg.snapshotRepo) { 
    %> [![snapshot](https://img.shields.io/badge/snapshot--blue.svg)](https://github.com/<%= mrPkg.snapshotRepo %>)<%
  } %>
<% } %>
<% } %>
