{"id":15093174,"url":"https://github.com/angular/angular-devkit-schematics-builds","last_synced_at":"2026-03-15T07:07:57.538Z","repository":{"id":37580121,"uuid":"118981589","full_name":"angular/angular-devkit-schematics-builds","owner":"angular","description":"Build artifacts for @angular-devkit/schematics","archived":false,"fork":false,"pushed_at":"2026-03-09T16:31:01.000Z","size":6551,"stargazers_count":19,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-09T18:28:05.873Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angular.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-01-25T23:53:22.000Z","updated_at":"2026-03-09T15:43:53.000Z","dependencies_parsed_at":"2023-12-10T22:28:39.754Z","dependency_job_id":"57000135-50a8-4fac-8efe-6ed0fbae58eb","html_url":"https://github.com/angular/angular-devkit-schematics-builds","commit_stats":{"total_commits":7435,"total_committers":3,"mean_commits":"2478.3333333333335","dds":0.03765971755211839,"last_synced_commit":"d07c08585585b3d0fc76607d2dc62ff6a87d713e"},"previous_names":[],"tags_count":12730,"template":false,"template_full_name":null,"purl":"pkg:github/angular/angular-devkit-schematics-builds","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fangular-devkit-schematics-builds","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fangular-devkit-schematics-builds/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fangular-devkit-schematics-builds/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fangular-devkit-schematics-builds/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angular","download_url":"https://codeload.github.com/angular/angular-devkit-schematics-builds/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fangular-devkit-schematics-builds/sbom","scorecard":{"id":196327,"data":{"date":"2025-08-11","repo":{"name":"github.com/angular/angular-devkit-schematics-builds","commit":"9c4001e07aea43eda490060cfae3a1d5fa34ab29"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.6,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/angular/.github/SECURITY.md:1","Info: Found linked content: github.com/angular/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/angular/.github/SECURITY.md:1","Info: Found text in security policy: github.com/angular/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: branch 'main' does not require approvers","Warn: codeowners review is not required on branch 'main'","Warn: no status checks found to merge onto branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-16T21:53:53.609Z","repository_id":37580121,"created_at":"2025-08-16T21:53:53.610Z","updated_at":"2025-08-16T21:53:53.610Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30537169,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-15T06:53:40.532Z","status":"ssl_error","status_checked_at":"2026-03-15T06:51:47.131Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-25T11:03:59.342Z","updated_at":"2026-03-15T07:07:57.499Z","avatar_url":"https://github.com/angular.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Snapshot build of @angular-devkit/schematics\n\nThis repository is a snapshot of a commit on the original repository. The original code used to\ngenerate this is located at http://github.com/angular/angular-cli.\n\nWe do not accept PRs or Issues opened on this repository. You should not use this over a tested and\nreleased version of this package.\n\nTo test this snapshot in your own project, use\n\n```bash\nnpm install git+https://github.com/angular/angular-devkit-schematics-builds.git\n```\n\n----\n# Schematics\n\n\u003e A scaffolding library for the modern web.\n\n## Description\n\nSchematics are generators that transform an existing filesystem. They can create files, refactor existing files, or move files around.\n\nWhat distinguishes Schematics from other generators, such as Yeoman or Yarn Create, is that schematics are purely descriptive; no changes are applied to the actual filesystem until everything is ready to be committed. There is no side effect, by design, in Schematics.\n\n# Glossary\n\n| Term           | Description                                                                                                                                                                                                                                                                                                                 |\n| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Schematics** | A generator that executes descriptive code without side effects on an existing file system.                                                                                                                                                                                                                                 |\n| **Collection** | A list of schematics metadata. Schematics can be referred by name inside a collection.                                                                                                                                                                                                                                      |\n| **Tool**       | The code using the Schematics library.                                                                                                                                                                                                                                                                                      |\n| **Tree**       | A staging area for changes, containing the original file system, and a list of changes to apply to it.                                                                                                                                                                                                                      |\n| **Rule**       | A function that applies actions to a `Tree`. It returns a new `Tree` that will contain all transformations to be applied.                                                                                                                                                                                                   |\n| **Source**     | A function that creates an entirely new `Tree` from an empty filesystem. For example, a file source could read files from disk and create a Create Action for each of those.                                                                                                                                                |\n| **Action**     | An atomic operation to be validated and committed to a filesystem or a `Tree`. Actions are created by schematics.                                                                                                                                                                                                           |\n| **Sink**       | The final destination of all `Action`s.                                                                                                                                                                                                                                                                                     |\n| **Task**       | A Task is a way to execute an external command or script in a schematic. A Task can be used to perform actions such as installing dependencies, running tests, or building a project. A Task is created by using the `SchematicContext` object and can be scheduled to run before or after the schematic `Tree` is applied. |\n\n# Tooling\n\nSchematics is a library, and does not work by itself. A [reference CLI](https://github.com/angular/angular-cli/blob/main/packages/angular_devkit/schematics_cli/bin/schematics.ts) is available on this repository, and is published on NPM at [@angular-devkit/schematics-cli](https://www.npmjs.com/package/@angular-devkit/schematics-cli). This document explains the library usage and the tooling API, but does not go into the tool implementation itself.\n\nThe tooling is responsible for the following tasks:\n\n1. Create the Schematic Engine, and pass in a Collection and Schematic loader.\n1. Understand and respect the Schematics metadata and dependencies between collections. Schematics can refer to dependencies, and it's the responsibility of the tool to honor those dependencies. The reference CLI uses NPM packages for its collections.\n1. Create the Options object. Options can be anything, but the schematics can specify a JSON Schema that should be respected. The reference CLI, for example, parses the arguments as a JSON object and validates it with the Schema specified by the collection.\n1. Schematics provides some JSON Schema formats for validation that tooling should add. These validate paths, html selectors and app names. Please check the reference CLI for how these can be added.\n1. Call the schematics with the original Tree. The tree should represent the initial state of the filesystem. The reference CLI uses the current directory for this.\n1. Create a Sink and commit the result of the schematics to the Sink. Many sinks are provided by the library; FileSystemSink and DryRunSink are examples.\n1. Output any logs propagated by the library, including debugging information.\n\nThe tooling API is composed of the following pieces:\n\n## Engine\n\nThe `SchematicEngine` is responsible for loading and constructing `Collection`s and `Schematics`. When creating an engine, the tooling provides an `EngineHost` interface that understands how to create a `CollectionDescription` from a name, and how to create a `SchematicDescription`.\n\n# Schematics (Generators)\n\nSchematics are generators and part of a `Collection`.\n\n## Collection\n\nA Collection is defined by a `collection.json` file (in the reference CLI). This JSON defines the following properties:\n\n| Prop Name   | Type     | Description                 |\n| ----------- | -------- | --------------------------- |\n| **name**    | `string` | The name of the collection. |\n| **version** | `string` | Unused field.               |\n\n## Schematic\n\n# Operators, Sources and Rules\n\nA `Source` is a generator of a `Tree`; it creates an entirely new root tree from nothing. A `Rule` is a transformation from one `Tree` to another. A `Schematic` (at the root) is a `Rule` that is normally applied on the filesystem.\n\n## Operators\n\n`FileOperator`s apply changes to a single `FileEntry` and return a new `FileEntry`. The result follows these rules:\n\n1. If the `FileEntry` returned is null, a `DeleteAction` will be added to the action list.\n1. If the path changed, a `RenameAction` will be added to the action list.\n1. If the content changed, an `OverwriteAction` will be added to the action list.\n\nIt is impossible to create files using a `FileOperator`.\n\n## Provided Operators\n\nThe Schematics library provides multiple `Operator` factories by default that cover basic use cases:\n\n| FileOperator                     | Description                                                          |\n| -------------------------------- | -------------------------------------------------------------------- |\n| `contentTemplate\u003cT\u003e(options: T)` | Apply a content template (see the [Templating](#templating) section) |\n| `pathTemplate\u003cT\u003e(options: T)`    | Apply a path template (see the [Templating](#templating) section)    |\n\n## Provided Sources\n\nThe Schematics library additionally provides multiple `Source` factories by default:\n\n| Source                                 | Description                                                                                                                |\n| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| `empty()`                              | Creates a source that returns an empty `Tree`.                                                                             |\n| `source(tree: Tree)`                   | Creates a `Source` that returns the `Tree` passed in as argument.                                                          |\n| `url(url: string)`                     | Loads a list of files from the given URL and returns a `Tree` with the files as `CreateAction` applied to an empty `Tree`. |\n| `apply(source: Source, rules: Rule[])` | Apply a list of `Rule`s to a source, and return the resulting `Source`.                                                    |\n\n## Provided Rules\n\nThe schematics library also provides `Rule` factories by default:\n\n| Rule                                        | Description                                                                            |\n| ------------------------------------------- | -------------------------------------------------------------------------------------- |\n| `noop()`                                    | Returns the input `Tree` as is.                                                        |\n| `chain(rules: Rule[])`                      | Returns a `Rule` that's the concatenation of other `Rule`s.                            |\n| `forEach(op: FileOperator)`                 | Returns a `Rule` that applies an operator to every file of the input `Tree`.           |\n| `move(root: string)`                        | Moves all the files from the input to a subdirectory.                                  |\n| `merge(other: Tree)`                        | Merge the input `Tree` with the other `Tree`.                                          |\n| `contentTemplate\u003cT\u003e(options: T)`            | Apply a content template (see the Template section) to the entire `Tree`.              |\n| `pathTemplate\u003cT\u003e(options: T)`               | Apply a path template (see the Template section) to the entire `Tree`.                 |\n| `template\u003cT\u003e(options: T)`                   | Apply both path and content templates (see the Template section) to the entire `Tree`. |\n| `filter(predicate: FilePredicate\u003cboolean\u003e)` | Returns the input `Tree` with files that do not pass the `FilePredicate`.              |\n\n# Templating\n\nAs referenced above, some functions are based upon a file templating system, which consists of path and content templating.\n\nThe system operates on placeholders defined inside files or their paths as loaded in the `Tree` and fills these in as defined in the following, using values passed into the `Rule` which applies the templating (i.e. `template\u003cT\u003e(options: T)`).\n\n## Path Templating\n\n| Placeholder             | Description                                                                                                                      |\n| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------- |\n| `__variable__`          | Replaced with the value of `variable`.                                                                                           |\n| `__variable@function__` | Replaced with the result of the call `function(variable)`. Can be chained to the left (`__variable@function1@function2__ ` etc). |\n\n## Content Templating\n\n| Placeholder         | Description                                                                                                                                 |\n| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |\n| `\u003c%= expression %\u003e` | Replaced with the result of the call of the given expression. This only supports direct expressions, no structural (for/if/...) JavaScript. |\n| `\u003c%- expression %\u003e` | Same as above, but the value of the result will be escaped for HTML when inserted (i.e. replacing '\u003c' with '\\\u0026lt;')                         |\n| `\u003c% inline code %\u003e` | Inserts the given code into the template structure, allowing to insert structural JavaScript.                                               |\n| `\u003c%# text %\u003e`       | A comment, which gets entirely dropped.                                                                                                     |\n\n# Examples\n\n## Simple\n\nAn example of a simple Schematics which creates a \"hello world\" file, using an option to determine its path:\n\n```typescript\nimport { Tree } from '@angular-devkit/schematics';\n\nexport default function MySchematic(options: any) {\n  return (tree: Tree) =\u003e {\n    tree.create(options.path + '/hi', 'Hello world!');\n    return tree;\n  };\n}\n```\n\nA few things from this example:\n\n1. The function receives the list of options from the tooling.\n1. It returns a [`Rule`](src/engine/interface.ts#L73), which is a transformation from a `Tree` to another `Tree`.\n\n## Templating\n\nA simplified example of a Schematics which creates a file containing a new Class, using an option to determine its name:\n\n```typescript\n// files/__name@dasherize__.ts\n\nexport class \u003c%= classify(name) %\u003e {\n}\n```\n\n```typescript\n// index.ts\n\nimport { strings } from '@angular-devkit/core';\nimport {\n  Rule,\n  SchematicContext,\n  SchematicsException,\n  Tree,\n  apply,\n  branchAndMerge,\n  mergeWith,\n  template,\n  url,\n} from '@angular-devkit/schematics';\nimport { Schema as ClassOptions } from './schema';\n\nexport default function (options: ClassOptions): Rule {\n  return (tree: Tree, context: SchematicContext) =\u003e {\n    if (!options.name) {\n      throw new SchematicsException('Option (name) is required.');\n    }\n\n    const templateSource = apply(url('./files'), [\n      template({\n        ...strings,\n        ...options,\n      }),\n    ]);\n\n    return branchAndMerge(mergeWith(templateSource));\n  };\n}\n```\n\nAdditional things from this example:\n\n1. `strings` provides the used `dasherize` and `classify` functions, among others.\n1. The files are on-disk in the same root directory as the `index.ts` and loaded into a `Tree`.\n1. Then the `template` `Rule` fills in the specified templating placeholders. For this, it only knows about the variables and functions passed to it via the options-object.\n1. Finally, the resulting `Tree`, containing the new file, is merged with the existing files of the project which the Schematic is run on.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular%2Fangular-devkit-schematics-builds","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangular%2Fangular-devkit-schematics-builds","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular%2Fangular-devkit-schematics-builds/lists"}