{"id":41054983,"url":"https://github.com/typescript-package/data","last_synced_at":"2026-02-19T03:02:54.578Z","repository":{"id":284023056,"uuid":"953143785","full_name":"typescript-package/data","owner":"typescript-package","description":"A lightweight TypeScript library for basic data management.","archived":false,"fork":false,"pushed_at":"2025-12-19T01:52:21.000Z","size":231,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-21T23:49:59.111Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"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/typescript-package.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["angular-package"],"patreon":"angularpackage","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29","https://donate.stripe.com/dR614hfDZcJE3wAcMM"]}},"created_at":"2025-03-22T17:06:55.000Z","updated_at":"2025-12-19T01:49:58.000Z","dependencies_parsed_at":"2025-04-15T17:21:10.190Z","dependency_job_id":"ccd8337b-c415-4402-be19-3b45178c4734","html_url":"https://github.com/typescript-package/data","commit_stats":null,"previous_names":["typescript-package/data"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/typescript-package/data","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescript-package%2Fdata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescript-package%2Fdata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescript-package%2Fdata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescript-package%2Fdata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typescript-package","download_url":"https://codeload.github.com/typescript-package/data/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typescript-package%2Fdata/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28662165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2026-01-22T11:35:39.601Z","updated_at":"2026-02-19T03:02:54.570Z","avatar_url":"https://github.com/typescript-package.png","language":"TypeScript","funding_links":["https://github.com/sponsors/angular-package","https://patreon.com/angularpackage","https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29","https://donate.stripe.com/dR614hfDZcJE3wAcMM","https://github.com/sponsors/angular-package/sponsorships?sponsor=sciborrudnicki\u0026tier_id=83618","https://www.patreon.com/checkout/angularpackage?rid=0\u0026fan_landing=true\u0026view_as=public"],"categories":[],"sub_categories":[],"readme":"\n\u003ca href=\"https://www.typescriptlang.org/\"\u003e\n  \u003cimg\n    src=\"https://avatars.githubusercontent.com/u/189666396?s=150\u0026u=9d55b1eb4ce258974ead76bf07ccf49ef0eb0ea7\u0026v=4\"\n    title=\"The typescript package enhances the development of typescript-based applications by providing well-structured, reusable, easy-to-use packages.\"\n  /\u003e\n\u003c/a\u003e\n\n## @typescript-package/data\n\n\u003c!-- npm badge --\u003e\n[![npm version][typescript-package-npm-badge-svg]][typescript-package-npm-badge]\n[![GitHub issues][typescript-package-badge-issues]][typescript-package-issues]\n[![GitHub license][typescript-package-badge-license]][typescript-package-license]\n\nA lightweight **TypeScript** library for basic data management.\n\n## Features\n\n- **Shape:** The shape of all data objects as `interface`.\n- **Immutability:** Instance methods to freeze, seal, and lock to enforce the data immutability, or determine the state.\n- **Asynchronous:** Synchronous by default, supports switching to asynchronous via the generic variable `R` switchable by `async` param.\n- **Core:** The core abstract implementation build on shape providing standard mutation methods `clear`, `destroy`, and `set`.\n- **Adapter:** Extensible adapter abstraction for the pluggable adapters to customize data logic, hooks and side effects.\n- **Base:** The base abstraction layer combining adapter with direct value handling.\n- **Concrete**: Final concrete implementation to instantiate base functionality.\n\n## Table of contents\n\n- [Installation](#installation)\n- [Api](#api)\n  - Abstract\n    - [`AdapterData`](#adapterdata)\n    - [`BaseData`](#basedata)\n    - [`DataCore`](#datacore)\n    - [`Immutability`](#immutability)\n  - Concrete\n    - [`Data`](#data)\n- [Immutability](#immutability)\n  - [Sealed](#sealed)\n  - [Frozen](#frozen)\n  - [Locked](#locked)\n- [Contributing](#contributing)\n- [Support](#support)\n- [Code of Conduct](#code-of-conduct)\n- [Git](#git)\n  - [Commit](#commit)\n  - [Versioning](#versioning)\n- [License](#license)\n\n## Installation\n\n```bash\nnpm install @typescript-package/data --save-peer\n```\n\n## Api\n\n```typescript\nimport {\n  // Abstract.\n  AdapterData,\n  BaseData,\n  DataCore,\n  Immutability,\n  // Concrete.\n  Data,\n} from '@typescript-package/data';\n```\n\n### Abstract\n\n### `AdapterData`\n\nThe abstract `AdapterData` class extends `DataCore` adding functionality for managing data value by adapter with arbitrary arguments.\nDesigned to create data containers managed by adapters that require constructor arguments.\n\n```typescript\nimport { AdapterData } from '@typescript-package/data';\nimport { DataAdapter } from \"@typedly/data\";\n\n// Create example classes extending AdapterData\nexport class AnyCollectionData\u003c\n  T,\n  E = unknown,\n  R extends boolean = false,\n  A extends DataAdapter\u003cT, R\u003e | undefined = DataAdapter\u003cT, R\u003e,\n\u003e extends AdapterData\u003cT, E[], R, A\u003e {\n  constructor(async: R, adapter: {new (...args: E[]): A},  ...elements: E[]) {\n    super(async, adapter, ...elements);\n  }\n}\n\n// Create the adapter implementation of `DataAdapter` interface.\nexport class AnyCollectionAdapter\u003cT\u003e implements DataAdapter\u003cSet\u003cT\u003e\u003e {\n  #value: Set\u003cT\u003e;\n  constructor(...elements: T[]) {\n    this.#value = new Set(elements) as Set\u003cT\u003e;\n  }\n  clear(): this { return this; }\n  destroy(): this { return this; }\n  lock(): this { return this; }\n  setValue(value: Set\u003cT\u003e): this { this.#value = value; return this; }\n  getValue(): Set\u003cT\u003e { return this.#value; }\n  get value(): Set\u003cT\u003e {\n    return this.#value;\n  }\n}\n\n// Create an instance of `AnyCollectionData`.\n// const anyCollectionData: AnyCollectionData\u003cunknown, number, false, AnyCollectionAdapter\u003cnumber\u003e\u003e\nconst anyCollectionData = new AnyCollectionData(false, AnyCollectionAdapter, 1, 2, 3);\n\nanyCollectionData.adapter;\n\n// Another example class extending `AdapterData` but of specific `Set` type.\nexport class SetCollectionData\u003c\n  T,\n  G extends T[] = T[],\n  R extends boolean = false,\n  A extends DataAdapter\u003cSet\u003cT\u003e, R\u003e | undefined = DataAdapter\u003cSet\u003cT\u003e, R\u003e,\n\u003e extends AdapterData\u003cSet\u003cT\u003e, G, R, A\u003e {\n  constructor(async: R, adapter: {new (...args: G): A},  ...elements: G) {\n    super(async, adapter, ...elements);\n  }\n}\n\n// Create the adapter implementation of `DataAdapter` interface for `Set` type.\nexport class SetCollectionAdapter\u003cT\u003e implements DataAdapter\u003cSet\u003cT\u003e\u003e {\n  #value: Set\u003cT\u003e;\n  constructor(...elements: T[]) {\n    this.#value = new Set(elements) as Set\u003cT\u003e;\n  }\n  clear(): this { return this; }\n  destroy(): this { return this; }\n  lock(): this { return this; }\n  setValue(value: Set\u003cT\u003e): this { this.#value = value; return this; }\n  getValue(): Set\u003cT\u003e { return this.#value; }\n  get value(): Set\u003cT\u003e {\n    return this.#value;\n  }\n}\n\n// Create a new instance of `SetCollectionData`.\n// const collectionData: CollectionData\u003cunknown, [number, number, number], false, SetCollectionAdapter\u003cnumber\u003e\u003e\nconst setCollectionData = new SetCollectionData(false, SetCollectionAdapter, 1, 2, 3);\n\n// SetCollectionAdapter\u003cnumber\u003e | undefined\nsetCollectionData.adapter;\n```\n\n### `BaseData`\n\nThe `BaseData` is an abstract class that extends core features, adding functionality for managing the data value directly or through the adapter.\n\n- It represents a data structure that can hold a value of type `T` and provides methods to manipulate and access that value.\n- The class supports the use of adapters for custom data handling and can operate in both synchronous and asynchronous modes based on the generic parameters provided.\n\n```typescript\nimport { BaseData } from '@typescript-package/data';\nimport { DataAdapter } from \"@typedly/data\";\n\n// Create example classes extending `BaseData`.\nexport class TestBaseData\u003c\n  T,\n  G extends unknown[] = unknown[],\n  R extends boolean = false,\n  A extends DataAdapter\u003cT, R\u003e | undefined = undefined,\n  // C extends {new (...args: G): DataAdapter\u003cT, R\u003e} = {new (...args: G): DataAdapter\u003cT, R\u003e},\n\u003e extends BaseData\u003c\n  T,\n  G,\n  R,\n  A\n  // InstanceType\u003cC\u003e\n\u003e {\n  constructor(\n    async: R,\n    value: T,\n    // adapter: C,\n    adapter: {new (value: T, ...args: G): A} | undefined,\n    ...args: G\n  ) {\n    super(\n      async,\n      value,\n      // adapter as unknown as new (value: T, ...args: G) =\u003e InstanceType\u003cC\u003e,\n      adapter,\n      ...args\n    );\n  }\n}\n\n// Create the adapter implementation of `DataAdapter` interface.\nexport class SetAdapter\u003cE, T extends Set\u003cE\u003e\u003e implements DataAdapter\u003cT, false\u003e {\n  #value: T;\n  constructor(value?: Iterable\u003cE\u003e) {\n    this.#value = new Set(value) as T;\n  }\n  newMethod() {}\n  clear(): this { return this; }\n  destroy(): this { return this; }\n  lock(): this { return this; }\n  getValue(): T { return this.#value; }\n  setValue(value: T): this { this.#value = value; return this; }\n  get value(): T {\n    return this.#value;\n  }\n}\n\n// const setData: TestBaseData\u003cSet\u003cstring\u003e, [], false, DataAdapter\u003cSet\u003cstring\u003e, false\u003e | undefined\u003e\nconst setData = new TestBaseData(false, new Set('a'), SetAdapter);\n\n// Call new method.\nsetData.adapter?.newMethod();\n\n// SetAdapter\u003cunknown, Set\u003cunknown\u003e\u003e | undefined\nsetData.adapter\n\n// Create another adapter implementation of `DataAdapter` interface.\nexport class CollectionAdapter\u003cE, T = Set\u003cE\u003e, G extends E[] = E[]\u003e implements DataAdapter\u003cT\u003e {\n  #value: T;\n  constructor(...elements: G) {\n    this.#value = new Set(elements) as T;\n  }\n  clear(): this { return this; }\n  destroy(): this { return this; }\n  lock(): this { return this; }\n  getValue(): T { return this.#value; }\n  setValue(value: T): this { this.#value = value; return this; }\n  get value(): T {\n    return this.#value;\n  }\n}\n\n// Create a new instance of `CollectionAdapter`.\nconst collectionData = new TestBaseData(\n  false,\n  new Set([1, 2, 3]),\n  CollectionAdapter,\n  1, 2, 3\n);\n\n\n// DataAdapter\u003cSet\u003cnumber\u003e, false\u003e | undefined\ncollectionData.adapter\n```\n\n### `DataCore`\n\nThe **core** abstraction with immutability for handling data-related classes.\n\n```typescript\nimport { DataCore } from '@typescript-package/data';\n```\n\n### `Immutability`\n\nManages the immutability states of `this` current instance.\n\n```typescript\nimport { Immutability } from '@typescript-package/data';\n```\n\n### Concrete\n\n### `Data`\n\nThe `Data` class is a concrete implementation that extends the `BaseData` abstract class, providing instantiable base functionality.\n\n```typescript\nimport { Data } from '@typescript-package/data';\n\n// Example subclass of Data\nclass StringData extends Data\u003cstring\u003e {\n  constructor(value: string) {\n    super(false, value);\n  }\n}\n\nconst stringData = new StringData(\"Hello, world!\");\n\n// Access the current value\nconsole.log(stringData.value); // ➝ Hello, world!\n\n// Update the value\nstringData.setValue(\"New value\");\nconsole.log(stringData.value); // ➝ New value\n\n// Destroy the value\nstringData.destroy();\nconsole.log(stringData.value); // Throws error or undefined (based on how it's handled)\n```\n\nExample with adapter to handle the value with `onSet` hook.\n\n```typescript\nimport { Data } from '@typescript-package/data';\nimport { DataAdapter } from '@typedly/data';\n\n// Create the adapter implementation of `DataAdapter` interface.\nexport class RxDataAdapter\u003c\n  T = string,\n  G extends unknown[] = unknown[]\n\u003e implements DataAdapter\u003cT, false\u003e {\n  #onSet: (value: T) =\u003e T = (value: T) =\u003e value;\n  #value: T;\n  constructor(value: T, ...args: G) {\n    this.#value = value || '' as T;\n    console.log(args);\n  }\n  // New method specific to this reactive adapter.\n  onSet(callbackfn: (value: T) =\u003e T): this { this.#onSet = callbackfn; return this; }\n  clear(): this { return this; }\n  destroy(): this { return this; }\n  lock(): this { return this; }\n  setValue(value: T): this { this.#value = this.#onSet(value); return this; }\n  getValue(): T { return this.#value; }\n  get value(): T {\n    return this.#value;\n  }\n}\n\n// const data: Data\u003cstring, [], false, TestAdapter\u003cstring, []\u003e\u003e\nconst data = new Data(false, 'Initial value' as string, RxDataAdapter);\n\ndata.adapter?.onSet(value =\u003e `Reactive: ${value}`);\ndata.setValue('New value'); // logs: 'Reactive: New value'\n```\n\nExample with asynchronous adapter.\n\n```typescript\nimport { Data } from '@typescript-package/data';\nimport { DataAdapter } from '@typedly/data';\n\n// Create the Async adapter implementation of `DataAdapter` interface.\nexport class AsyncAdapter\u003c\n  T = string,\n  G extends unknown[] = unknown[]\n\u003e implements DataAdapter\u003cT, true\u003e {\n  #value: T;\n  constructor(value: T, ...args: G) {\n    this.#value = value || '' as T;\n    console.log(args);\n  }\n  async ready(): Promise\u003cT\u003e { return Promise.resolve(this.#value); }\n  async clear(): Promise\u003cthis\u003e { return this; }\n  async destroy(): Promise\u003cthis\u003e { return this; }\n  lock(): this { return this; }\n  async setValue(value: T): Promise\u003cthis\u003e { this.#value = value; return this; }\n  async getValue(): Promise\u003cT\u003e { return this.#value; }\n  get value(): T {\n    return this.#value;\n  }\n}\n\n// const asyncData: Data\u003cstring, [], true, AsyncAdapter\u003cstring, []\u003e\u003e\nconst asyncData = new Data(true, 'Initial async value' as string, AsyncAdapter);\n\nasyncData.adapter?.ready().then(value =\u003e {\n  console.log('Async value:', value);\n});\n```\n\n## Immutability\n\n### Sealed\n\nProvides structural immutability, but not value immutability. The least strict form of immutability.\nSealing an object prevents adding or removing properties, but it does not restrict modifying the values of existing properties.\n\n### Frozen\n\nProvides structural and shallow immutability. Stricter than seal.\nFreezing an object prevents changes to the object’s properties at the top level. This means that you cannot modify, add, or delete properties, but nested objects can still be mutated.\n\n### Locked\n\nCombines the features of `freeze`, but extends immutability to nested structures(deep immutability).\nLocking(deep) an object prevents changing any properties at any level, including properties within nested objects.\n\n## Contributing\n\nYour contributions are valued! If you'd like to contribute, please feel free to submit a pull request. Help is always appreciated.\n\n## Support\n\nIf you find this package useful and would like to support its and general development, you can contribute through one of the following payment methods. Your support helps maintain the packages and continue adding new.\n\nSupport via:\n\n- [Stripe](https://donate.stripe.com/dR614hfDZcJE3wAcMM)\n- [Revolut](https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29)\n- [GitHub](https://github.com/sponsors/angular-package/sponsorships?sponsor=sciborrudnicki\u0026tier_id=83618)\n- [DonorBox](https://donorbox.org/become-a-sponsor-to-the-angular-package?default_interval=o)\n- [Patreon](https://www.patreon.com/checkout/angularpackage?rid=0\u0026fan_landing=true\u0026view_as=public)\n\nor via Trust Wallet\n\n- [XLM](https://link.trustwallet.com/send?coin=148\u0026address=GAFFFB7H3LG42O6JA63FJDRK4PP4JCNEOPHLGLLFH625X2KFYQ4UYVM4)\n- [USDT (BEP20)](https://link.trustwallet.com/send?coin=20000714\u0026address=0xA0c22A2bc7E37C1d5992dFDFFeD5E6f9298E1b94\u0026token_id=0x55d398326f99059fF775485246999027B3197955)\n- [ETH](https://link.trustwallet.com/send?coin=60\u0026address=0xA0c22A2bc7E37C1d5992dFDFFeD5E6f9298E1b94)\n- [BTC](https://link.trustwallet.com/send?coin=0\u0026address=bc1qnf709336tfl57ta5mfkf4t9fndhx7agxvv9svn)\n- [BNB](https://link.trustwallet.com/send?coin=20000714\u0026address=0xA0c22A2bc7E37C1d5992dFDFFeD5E6f9298E1b94)\n\nThanks for your support!\n\n## Code of Conduct\n\nBy participating in this project, you agree to follow **[Code of Conduct](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)**.\n\n## GIT\n\n### Commit\n\n- [AngularJS Git Commit Message Conventions][git-commit-angular]\n- [Karma Git Commit Msg][git-commit-karma]\n- [Conventional Commits][git-commit-conventional]\n\n### Versioning\n\n[Semantic Versioning 2.0.0][git-semver]\n\n**Given a version number MAJOR.MINOR.PATCH, increment the:**\n\n- MAJOR version when you make incompatible API changes,\n- MINOR version when you add functionality in a backwards-compatible manner, and\n- PATCH version when you make backwards-compatible bug fixes.\n\nAdditional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.\n\n**FAQ**\nHow should I deal with revisions in the 0.y.z initial development phase?\n\n\u003e The simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release.\n\nHow do I know when to release 1.0.0?\n\n\u003e If your software is being used in production, it should probably already be 1.0.0. If you have a stable API on which users have come to depend, you should be 1.0.0. If you’re worrying a lot about backwards compatibility, you should probably already be 1.0.0.\n\n## License\n\nMIT © typescript-package ([license][typescript-package-license])\n\n## 📦 Related Packages\n\n| Package                   | Description                                       |\n|---------------------------|---------------------------------------------------|\n| [`@typescript-package/async-data`](https://github.com/typescript-package/async-data) | A lightweight **TypeScript** library for basic asynchronous data management. |\n| [`@typescript-package/collection`](https://github.com/typescript-package/collection) | A lightweight **TypeScript** library for data collection management. |\n| [`@typescript-package/map`](https://github.com/typescript-package/map) | A lightweight **TypeScript** library for enhanced `map` management. |\n| [`@typescript-package/set`](https://github.com/typescript-package/set) | A lightweight **TypeScript** library for enhanced `set` management. |\n| [`@typescript-package/weak-data`](https://github.com/typescript-package/weak-data) | A lightweight **TypeScript** library for basic weakly referenced data management. |\n\n## Packages\n\n- **[@typescript-package/affix](https://github.com/typescript-package/affix)**: A **lightweight TypeScript** library for the affix - prefix and suffix.\n- **[@typescript-package/are](https://github.com/typescript-package/are)**: Type-safe `are` checkers for validating value types in TypeScript.\n- **[@typescript-package/descriptor](https://github.com/typescript-package/descriptor)**: A **lightweight TypeScript** library for property descriptor.\n- **[@typescript-package/guard](https://github.com/typescript-package/guard)**: Type-safe guards for guarding the value types in TypeScript.c\n- **[@typescript-package/history](https://github.com/typescript-package/history)**: A **TypeScript** package for tracking history of values.\n- **[@typescript-package/is](https://github.com/typescript-package/is)**: Type-safe is checkers for validating value types in TypeScript.\n- **[@typescript-package/map](https://github.com/typescript-package/map)**: A lightweight **TypeScript** library for enhanced `map` management.\n- **[@typescript-package/name](https://github.com/typescript-package/name)**: A **lightweight TypeScript** library for the name with prefix and suffix.\n- **[@typescript-package/property](https://github.com/typescript-package/property)**: A **lightweight TypeScript** package with features to handle object properties.\n- **[@typescript-package/queue](https://github.com/typescript-package/queue)**: A **lightweight TypeScript** library for managing various queue and stack structures.\n- **[@typescript-package/range](https://github.com/typescript-package/range)**: A **lightweight TypeScript** library for managing various types of ranges.\n- **[@typescript-package/regexp](https://github.com/typescript-package/regexp)**: A **lightweight TypeScript** library for **RegExp**.\n- **[@typescript-package/set](https://github.com/typescript-package/set)**: A lightweight **TypeScript** library for enhanced `set` management.\n- **[@typescript-package/state](https://github.com/typescript-package/state)**: Simple state management for different types in **TypeScript**.\n- **[@typescript-package/storage](https://github.com/typescript-package/storage)**: The storage of data under allowed names.\n- **[@typescript-package/type](https://github.com/typescript-package/type)**: Utility types to enhance and simplify **TypeScript** development.\n- **[@typescript-package/wrapper](https://github.com/typescript-package/wrapper)**: A **lightweight TypeScript** library to wrap the text with the opening and closing chars.\n\n\u003c!-- This package: typescript-package  --\u003e\n  \u003c!-- GitHub: badges --\u003e\n  [typescript-package-badge-issues]: https://img.shields.io/github/issues/typescript-package/data\n  [isscript-package-badge-forks]: https://img.shields.io/github/forks/typescript-package/data\n  [typescript-package-badge-stars]: https://img.shields.io/github/stars/typescript-package/data\n  [typescript-package-badge-license]: https://img.shields.io/github/license/typescript-package/data\n  \u003c!-- GitHub: badges links --\u003e\n  [typescript-package-issues]: https://github.com/typescript-package/data/issues\n  [typescript-package-forks]: https://github.com/typescript-package/data/network\n  [typescript-package-license]: https://github.com/typescript-package/data/blob/master/LICENSE\n  [typescript-package-stars]: https://github.com/typescript-package/data/stargazers\n\u003c!-- This package --\u003e\n\n\u003c!-- Package: typescript-package --\u003e\n  \u003c!-- npm --\u003e\n  [typescript-package-npm-badge-svg]: https://badge.fury.io/js/@typescript-package%2Fdata.svg\n  [typescript-package-npm-badge]: https://badge.fury.io/js/@typescript-package%2Fdata\n\n\u003c!-- GIT --\u003e\n[git-semver]: http://semver.org/\n\n\u003c!-- GIT: commit --\u003e\n[git-commit-angular]: https://gist.github.com/stephenparish/9941e89d80e2bc58a153\n[git-commit-karma]: http://karma-runner.github.io/0.10/dev/git-commit-msg.html\n[git-commit-conventional]: https://www.conventionalcommits.org/en/v1.0.0/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypescript-package%2Fdata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypescript-package%2Fdata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypescript-package%2Fdata/lists"}