{"id":14155446,"url":"https://github.com/grantila/typeconv","last_synced_at":"2025-05-16T11:06:00.013Z","repository":{"id":45169730,"uuid":"293245471","full_name":"grantila/typeconv","owner":"grantila","description":"Convert between JSON Schema, TypeScript, GraphQL, Open API and SureType","archived":false,"fork":false,"pushed_at":"2023-06-04T08:16:30.000Z","size":1641,"stargazers_count":439,"open_issues_count":28,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-11T13:06:00.444Z","etag":null,"topics":["converter","graphql","jsonschema","openapi3","suretype","typescript"],"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/grantila.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}},"created_at":"2020-09-06T09:40:04.000Z","updated_at":"2025-05-09T18:01:21.000Z","dependencies_parsed_at":"2024-06-18T14:03:37.776Z","dependency_job_id":"e5bd7d39-824f-48b2-b660-2023776dcb95","html_url":"https://github.com/grantila/typeconv","commit_stats":{"total_commits":47,"total_committers":2,"mean_commits":23.5,"dds":"0.021276595744680882","last_synced_commit":"08bb1876f8baefc34146fa1f43faf98de71b4bd8"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grantila%2Ftypeconv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grantila%2Ftypeconv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grantila%2Ftypeconv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grantila%2Ftypeconv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grantila","download_url":"https://codeload.github.com/grantila/typeconv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518383,"owners_count":22084374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["converter","graphql","jsonschema","openapi3","suretype","typescript"],"created_at":"2024-08-17T08:03:20.137Z","updated_at":"2025-05-16T11:05:55.002Z","avatar_url":"https://github.com/grantila.png","language":"TypeScript","funding_links":[],"categories":["typescript"],"sub_categories":[],"readme":"[![npm version][npm-image]][npm-url]\n[![downloads][downloads-image]][npm-url]\n[![build status][build-image]][build-url]\n[![coverage status][coverage-image]][coverage-url]\n[![Node.JS version][node-version]][node-url]\n\n\n\u003cimg src=\"https://raw.githubusercontent.com/grantila/typeconv/master/assets/logo.svg\" width=\"100%\" /\u003e\n\n**typeconv** is an extremely fast *silver bullet* type conversion utility.\n\nIt converts between any of its supported types, bidirectionally.\n\ntypeconv lets you convert between type systems which have [`core-types`][core-types-github-url] converters, such as JSON Schema, TypeScript, GraphQL, Open API and [SureType][suretype-github-url]. This package can be used as an API programatically or as an application (installed in `node_modules/.bin` or by using e.g. [`npx`](https://www.npmjs.com/package/npx)).\n\nBy taking advantage of the [`core-types`][core-types-github-url] ([npm][core-types-npm-url]) toolbox for generic type handling, typeconv can convert and maintain source code location information, comments, descriptions etc. when converting between the different type systems. It is using the following converter packages:\n * [`core-types-json-schema`][core-types-json-schema-github-url] ([npm][core-types-json-schema-npm-url])\n * [`core-types-ts`][core-types-ts-github-url] ([npm][core-types-ts-npm-url])\n * [`core-types-graphql`][core-types-graphql-github-url] ([npm][core-types-graphql-npm-url])\n * [`core-types-suretype`][core-types-suretype-github-url] ([npm][core-types-suretype-npm-url])\n\nThese type systems don't share the same set of types and constraints. For example, JSON Schema has *value* constraints (like *\"a string must be longer than 5 characters*\") and GraphQL doesn't have `null` or key-value objects as a first-class type. Convertions will therefore produce the smallest common denominator of type information, but still be very useful. See [`core-types`][core-types-github-url] for more information on its supported types, and why not implement a new conversion package yourself!\n\n\n# TL;DR CLI\n\nConvert files from TypeScript (*\"ts\"*) to GraphQL (*\"gql\"*), put the generated files in the `gql-schemas` directory in the same directory structure as the source files:\n\n```zsh\n$ typeconv -f ts -t gql -o gql-schemas 'types/**/*.ts'\n```\n\nThis generates `gql-schemas/*.graphql` for each `.ts` file in `types/` (and sub-directories).\n\n*Note that when using glob patterns, put them in quotes to not have the shell try to expand the pattern - typeconv will do it a lot better!*\n\n\n## SureType\n\nWhen converting *from* SureType, typeconv will extract all *exported* validators.\n\n\n## Versions\n\nSince v2:\n * The package is a pure ESM module, no more CommonJS support. This will likely not affect CLI usages.\n * Node 12 support is dropped.\n\n\n# Contents\n\n * [Conversion example](#conversion-example)\n * [Usage](#usage)\n   * [Command line](#command-line)\n   * [As API](#as-api)\n     * [JSON Schema](#json-schema)\n     * [Open API](#open-api)\n     * [TypeScript](#typescript)\n     * [GraphQL](#graphql)\n     * [SureType](#suretype)\n\n\n# Conversion example\n\n\u003cdetails style=\"padding-left: 32px;border-left: 4px solid gray;\"\u003e\n\u003csummary\u003eConverting the following JSON Schema:\u003c/summary\u003e\n\u003cp\u003e\n\n```json\n{\n\t\"definitions\": {\n\t\t\"User\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"title\": \"User type\",\n\t\t\t\"description\": \"This type holds the user information, such as name\",\n\t\t\t\"properties\": { \"name\": { \"type\": \"string\", \"title\": \"The real name\" } },\n\t\t\t\"required\": [ \"name\" ]\n\t\t},\n\t\t\"ChatLine\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"title\": \"A chat line\",\n\t\t\t\"properties\": {\n\t\t\t\t\"user\": { \"$ref\": \"#/definitions/User\" },\n\t\t\t\t\"line\": { \"type\": \"string\" }\n\t\t\t},\n\t\t\t\"required\": [ \"user\", \"line\" ]\n\t\t}\n\t}\n}\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails style=\"padding-left: 32px;border-left: 4px solid gray;\"\u003e\n\u003csummary\u003e... to TypeScript will produce:\u003c/summary\u003e\n\u003cp\u003e\n\n```ts\n/*User type\n\nThis type holds the user information, such as name*/\nexport interface User {\n\t/*The real name*/\n\tname: string;\n}\n\n/*A chat line*/\nexport interface ChatLine {\n\tuser: User;\n\tline: string;\n}\n```\n\nor if converted into TypeScript _declarations_ (for `.d.ts` files), `export interface` will be `export declare interface`.\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails style=\"padding-left: 32px;border-left: 4px solid gray;\"\u003e\n\u003csummary\u003e... and to GraphQL will produce:\u003c/summary\u003e\n\u003cp\u003e\n\n```graphql\n\"\"\"\n# User type\n\nThis type holds the user information, such as name\n\"\"\"\ntype User {\n\t\"The real name\"\n\tname: String!\n}\n\n\"A chat line\"\ntype ChatLine {\n\tuser: User!\n\tline: String!\n}\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\nConversions are bi-directional, so any of these type systems can convert to any other.\n\n\n# Usage\n\n\n## Command line\n\nYou can depend on `typeconv`, and if so, you'll have `node_modules/.bin/typeconv` installed. Or you run it with on-the-fly installation using `npx`, as `npx typeconv args...`.\n\nUse `-f` (or `--from-type`) to specify *from* which type system to convert, and `-t` (or `--to-type`) to specify which type system to convert *to*. Other options can be used to configure each configuration (both the *from* and the *to*) and these options are usually only available for a specific type system.\n\nThe types supported are `gql` (GraphQL), `ts` (TypeScript), `jsc` (JSON Schema), `oapi` (Open API) and `st` (SureType).\n\n\u003cdetails style=\"padding-left: 32px;border-left: 4px solid gray;\"\u003e\n\u003csummary\u003e\u003ccode\u003e$ typeconv --help\u003c/code\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```\nUsage: typeconv [options] file ...\n\n   Options:\n\n   -h, --help                       Print (this) help screen\n   --version                        Print the program version\n   -v, --verbose                    Verbose informational output (default: false)\n   --dry-run                        Prepare and perform conversion, but write no output (default: false)\n   --(no-)hidden                    Include hidden files, i.e. files in .gitignore,\n                                    files beginning with '.' and the '.git' directory\n                                     (default: true)\n   -f, --from-type \u003ctype\u003e           Type system to convert from\n\n                                       Values:\n                                          ts    TypeScript\n                                          jsc   JSON Schema\n                                          gql   GraphQL\n                                          oapi  Open API\n                                          st    SureType\n                                          ct    core-types\n\n   -t, --to-type \u003ctype\u003e             Type system to convert to\n\n                                       Values:\n                                          ts    TypeScript\n                                          jsc   JSON Schema\n                                          gql   GraphQL\n                                          oapi  Open API\n                                          st    SureType\n                                          ct    core-types\n\n   --(no-)shortcut                  Shortcut conversion if possible (bypassing core-types).\n                                    This is possible between SureType, JSON Schema and Open API\n                                    to preserve all features which would otherwise be erased.\n                                     (default: true)\n   -o, --output-directory \u003cdir\u003e     Output directory. Defaults to the same as the input files.\n   -O, --output-extension \u003cext\u003e     Output filename extension to use.\n                                    Defaults to 'ts'/'d.ts', 'json', 'yaml' and 'graphql'.\n                                    Use '-' to not save a file, but output to stdout instead.\n   --(no-)strip-annotations         Removes all annotations (descriptions, comments, ...) (default: false)\n   TypeScript\n     --(no-)ts-declaration          Output TypeScript declarations (default: false)\n     --(no-)ts-disable-lint-header  Output comments for disabling linting (default: true)\n     --(no-)ts-descriptive-header   Output the header comment (default: true)\n     --(no-)ts-use-unknown          Use 'unknown' type instead of 'any' (default: true)\n     --ts-non-exported \u003cmethod\u003e     Strategy for non-exported types (default: include-if-referenced)\n\n                                       Values:\n                                          fail                   Fail conversion\n                                          ignore                 Don't include non-exported types,\n                                                                 even if referenced\n                                          include                Include non-exported types\n                                          inline                 Don't include non-exported types,\n                                                                 inline them if necessary.\n                                                                 Will fail on cyclic types\n                                          include-if-referenced  Include non-exported types only if they\n                                                                 are referenced from exported types\n\n     --ts-namespaces \u003cmethod\u003e       Namespace strategy. (default: ignore)\n\n                                       Values:\n                                          ignore           Ignore namespaces entirely (default).\n                                                           - When converting from TypeScript, types in namespaces\n                                                           aren't exported.\n                                                           - When converting to TypeScript, no attempt to\n                                                           reconstruct namespaces is performed.\n                                          hoist            When converting from TypeScript, hoist types inside\n                                                           namespaces to top-level, so that the types are\n                                                           included, but without their namespace.\n                                                           This can cause conflicts, in which case deeper\n                                                           declarations will be dropped in favor of more top-\n                                                           level declarations.\n                                                           In case of same-level (namespace depth) declarations\n                                                           with the same name, only one will be exported in a\n                                                           non-deterministic manner.\n                                          dot              When converting from TypeScript, join the namespaces\n                                                           and the exported type with a dot (.).\n                                                           When converting to TypeScript, try to reconstruct\n                                                           namespaces by splitting the name on dot (.).\n                                          underscore       When converting from TypeScript, join the namespaces\n                                                           and the exported type with an underscore (_).\n                                                           When converting to TypeScript, try to reconstruct\n                                                           namespaces by splitting the name on underscore (_).\n                                          reconstruct-all  When converting to TypeScript, try to reconstruct\n                                                           namespaces by splitting the name on both dot and\n                                                           underscore.\n\n   GraphQL\n     --gql-unsupported \u003cmethod\u003e     Method to use for unsupported types\n\n                                       Values:\n                                          ignore  Ignore (skip) type\n                                          warn    Ignore type, but warn\n                                          error   Throw an error\n\n     --gql-null-typename \u003cname\u003e     Custom type name to use for null\n   Open API\n     --oapi-format \u003cfmt\u003e            Output format for Open API (default: yaml)\n\n                                       Values:\n                                          json  JSON\n                                          yaml  YAML ('yml' is also allowed)\n\n     --oapi-title \u003ctitle\u003e           Open API title to use in output document.\n                                    Defaults to the input filename.\n     --oapi-version \u003cversion\u003e       Open API document version to use in output document. (default: 1)\n   SureType\n     --st-ref-method \u003cmethod\u003e       SureType reference export method (default: provided)\n\n                                       Values:\n                                          no-refs   Don't ref anything, inline all types\n                                          provided  Reference types that are explicitly exported\n                                          ref-all   Ref all provided types and those with names\n\n     --st-missing-ref \u003cmethod\u003e      What to do when detecting an unresolvable reference (default: warn)\n\n                                       Values:\n                                          ignore  Ignore; skip type or cast to any\n                                          warn    Same as 'ignore', but warn\n                                          error   Fail conversion\n\n     --(no-)st-inline-types         Inline pretty typescript types aside validator code (default: true)\n     --(no-)st-export-type          Export the deduced types (or the pretty types,\n                                    depending on --st-inline-types)\n                                     (default: true)\n     --(no-)st-export-schema        Export validator schemas (default: false)\n     --(no-)st-export-validator     Export regular validators (default: true)\n     --(no-)st-export-ensurer       Export 'ensurer' validators (default: true)\n     --(no-)st-export-type-guard    Export type guards (is* validators) (default: true)\n     --(no-)st-use-unknown          Use 'unknown' type instead of 'any' (default: true)\n     --(no-)st-forward-schema       Forward the JSON Schema, and create an untyped validator schema\n                                    with the raw JSON Schema under the hood\n                                     (default: false)\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\n## As API\n\nTo convert from one type system to another, you create a *reader* for the type system to convert **from** and a *writer* for the type system to convert **to**. The readers and writers for the different type systems have their own set of options. Some have no options (like the JSON Schema reader), some require options (like the Open API writer).\n\n\n### makeConverter\n\nMaking a converter is done using `makeConverter(reader, writer, options?)`, which takes a reader and a writer, and optionally options:\n\n#### **cwd** (string)\n\nThe current working directory, only useful when working with files.\n\n#### **simplify** (boolean) (default true)\n\nWhen simplify is true, the converter will let core-types\n[*compress*](https://github.com/grantila/core-types#simplify) the\ntypes after having converted from {reader} format to core-types.\nThis is usually recommended, but may cause some annotations (comments)\nto be dropped.\n\n#### **map** (ConvertMapFunction)\n\nCustom map function for transforming each type after it has been\nconverted *from* the source type (and after it has been simplified),\nbut before it's written to the target type system.\n\nType: `(node: NamedType, index: number, array: ReadonlyArray\u003cNamedType\u003e) =\u003e NamedType`\n([NamedType ref](https://github.com/grantila/core-types#specification))\n\nIf `filter` is used as well, this runs before `filter`.\n\nIf `transform` is used as well, this runs before `transform`.\n\n#### **filter** (ConvertFilterFunction)\n\nCustom filter function for filtering types after they have been\nconverted *from* the source type.\n\nType: `(node: NamedType, index: number, array: ReadonlyArray\u003cNamedType\u003e) =\u003e boolean`\n([NamedType ref](https://github.com/grantila/core-types#specification))\n\nIf `map` is used as well, this runs after `map`.\n\nIf `transform` is used as well, this runs before `transform`.\n\n#### **transform** (ConvertTransformFunction)\n\nCustom filter function for filtering types after they have been\nconverted *from* the source type.\n\nType: `( doc: NodeDocument ) =\u003e NodeDocument`\n([NodeDocument ref](https://github.com/grantila/core-types#specification))\n\nIf `map` is used as well, this runs after `map`.\n\nIf `filter` is used as well, this runs after `filter`.\n\n#### **shortcut** (boolean) (default true)\n\nShortcut reader and writer if possible (bypassing core-types).\n\n\n\n### Basic example conversion\n\n```ts\nimport {\n  getTypeScriptReader,\n  getOpenApiWriter,\n  makeConverter,\n} from 'typeconv'\n\nconst reader = getTypeScriptReader( );\nconst writer = getOpenApiWriter( { format: 'yaml', title: 'My API', version: 'v1' } );\nconst { convert } = makeConverter( reader, writer );\nconst { data } = await convert( { data: \"export type Foo = string | number;\" } );\ndata; // This is the Open API yaml as a string\n```\n\n\n### JSON Schema\n\nThere are two exported functions for JSON Schema:\n\n```ts\nimport { getJsonSchemaReader, getJsonSchemaWriter } from 'typeconv'\n\nconst reader = getJsonSchemaReader( );\nconst writer = getJsonSchemaWriter( );\n```\n\nThey don't have any options.\n\ntypeconv expects the JSON Schema to contain **definitions**, i.e. to be in the form:\n\n\u003cdetails style=\"padding-left: 32px;border-left: 4px solid gray;\"\u003e\n\u003csummary\u003eJSON Schema\u003c/summary\u003e\n\u003cp\u003e\n\n```json\n{\n\t\"definitions\": {\n\t\t\"User\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": { \"name\": { \"type\": \"string\" } },\n\t\t\t\"required\": [ \"name\" ]\n\t\t},\n\t\t\"ChatLine\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"user\": { \"$ref\": \"#/definitions/User\" },\n\t\t\t\t\"line\": { \"type\": \"string\" }\n\t\t\t},\n\t\t\t\"required\": [ \"user\", \"line\" ]\n\t\t}\n\t}\n}\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\ntypeconv doesn't support external references (to other files). If you have that, you need to use a reference parser and merge it into one inline-referenced file before using typeconv.\n\n\n### Open API\n\nConverting to or from Open API can be done with both JSON and YAML. The default is JSON.\n\nWhen reading, if the filename ends with `.yml` or `.yaml`, typeconv will interpret the input as YAML.\n\nWriting however, is decided in the writer factory and provided to `getOpenApiWriter`.\n\n```ts\nimport { getOpenApiReader, getOpenApiWriter } from 'typeconv'\n\nconst reader = getOpenApiReader( );\nconst writer = getOpenApiWriter( {\n  format: 'yaml',\n  title: 'My API',\n  version: 'v1',\n  schemaVersion: '3.0.0',\n} );\n```\n\nThe options to `getOpenApiWriter` is:\n\n```ts\ninterface {\n  format?: string;\n  title: string;\n  version: string;\n  schemaVersion?: string;\n}\n```\n\n\n### TypeScript\n\nTypeScript conversion is done using:\n\n```ts\nimport { getTypeScriptReader, getTypeScriptWriter } from 'typeconv'\n\nconst reader = getTypeScriptReader( );\nconst writer = getTypeScriptWriter( );\n```\n\nBoth these take an optional argument.\n\nThe `getTypeScriptReader` takes an optional\n[`FromTsOptions`](https://github.com/grantila/core-types-ts#typescript-to-core-types)\nobject from [`core-types-ts`][core-types-ts-github-url], although `warn` isn't necessary since it's set by typeconv internally.\n\nThe `getTypeScriptWriter` takes an optional\n[`ToTsOptions`](https://github.com/grantila/core-types-ts#core-types-to-typescript)\nobject from [`core-types-ts`][core-types-ts-github-url], although `warn`, `filename`, `sourceFilename`, `userPackage` and `userPackageUrl` aren't necessary since they're set by typeconv internally.\n\n\n### GraphQL\n\nGraphQL conversion is done using;\n\n```ts\nimport { getGraphQLReader, getGraphQLWriter } from 'typeconv'\n\nconst reader = getGraphQLReader( );\nconst writer = getGraphQLWriter( );\n```\n\nBoth these take an optional argument.\n\nThe `getGraphQLReader` takes an optional\n[`GraphqlToCoreTypesOptions`](https://github.com/grantila/core-types-graphql#graphql-to-core-types)\nobject from [`core-types-graphql`][core-types-graphql-github-url], although `warn` isn't necessary since it's set by typeconv internally.\n\nThe `getGraphQLWriter` takes an optional\n[`CoreTypesToGraphqlOptions`](https://github.com/grantila/core-types-graphql#core-types-to-graphql)\nobject from [`core-types-graphql`][core-types-graphql-github-url], although `warn`, `filename`, `sourceFilename`, `userPackage` and `userPackageUrl` aren't necessary since they're set by typeconv internally.\n\n\n### SureType\n\nSureType conversion is done using;\n\n```ts\nimport { getSureTypeReader, getSureTypeWriter } from 'typeconv'\n\nconst reader = getSureTypeReader( );\nconst writer = getSureTypeWriter( );\n```\n\nBoth these take an optional argument from the [`core-types-suretype`][core-types-suretype-github-url] package.\n\nThe `getSureTypeReader` takes an optional\n[`SuretypeToJsonSchemaOptions`](https://github.com/grantila/core-types-suretype#suretype-to-core-types).\n\nThe `getSureTypeWriter` takes an optional\n[`JsonSchemaToSuretypeOptions`](https://github.com/grantila/core-types-suretype#core-types-to-suretype).\n\n\n[npm-image]: https://img.shields.io/npm/v/typeconv.svg\n[npm-url]: https://npmjs.org/package/typeconv\n[downloads-image]: https://img.shields.io/npm/dm/typeconv.svg\n[build-image]: https://img.shields.io/github/actions/workflow/status/grantila/typeconv/master.yml?branch=master\n[build-url]: https://github.com/grantila/typeconv/actions?query=workflow%3AMaster\n[coverage-image]: https://coveralls.io/repos/github/grantila/typeconv/badge.svg?branch=master\n[coverage-url]: https://coveralls.io/github/grantila/typeconv?branch=master\n[node-version]: https://img.shields.io/node/v/typeconv\n[node-url]: https://nodejs.org/en/\n\n[core-types-npm-url]: https://npmjs.org/package/core-types\n[core-types-github-url]: https://github.com/grantila/core-types\n[core-types-json-schema-npm-url]: https://npmjs.org/package/core-types-json-schema\n[core-types-json-schema-github-url]: https://github.com/grantila/core-types-json-schema\n[core-types-ts-npm-url]: https://npmjs.org/package/core-types-ts\n[core-types-ts-github-url]: https://github.com/grantila/core-types-ts\n[core-types-graphql-npm-url]: https://npmjs.org/package/core-types-graphql\n[core-types-graphql-github-url]: https://github.com/grantila/core-types-graphql\n[core-types-suretype-npm-url]: https://npmjs.org/package/core-types-suretype\n[core-types-suretype-github-url]: https://github.com/grantila/core-types-suretype\n[suretype-github-url]: https://github.com/grantila/suretype\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrantila%2Ftypeconv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrantila%2Ftypeconv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrantila%2Ftypeconv/lists"}