{"id":19924391,"url":"https://github.com/kontent-ai/model-generator-js","last_synced_at":"2025-05-03T07:31:34.010Z","repository":{"id":41510817,"uuid":"213584977","full_name":"kontent-ai/model-generator-js","owner":"kontent-ai","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-30T11:28:55.000Z","size":1694,"stargazers_count":14,"open_issues_count":5,"forks_count":10,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-30T12:58:57.935Z","etag":null,"topics":["hacktoberfest","kontent-ai","kontent-ai-tool","kontent-model-generator","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/kontent-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-10-08T08:11:01.000Z","updated_at":"2025-04-22T07:02:02.000Z","dependencies_parsed_at":"2025-04-30T12:55:34.631Z","dependency_job_id":null,"html_url":"https://github.com/kontent-ai/model-generator-js","commit_stats":{"total_commits":182,"total_committers":3,"mean_commits":"60.666666666666664","dds":"0.016483516483516536","last_synced_commit":"d1767dd56977797bd1bf731ff50cdd343c472597"},"previous_names":["kentico/kontent-model-generator-js"],"tags_count":78,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kontent-ai%2Fmodel-generator-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kontent-ai%2Fmodel-generator-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kontent-ai%2Fmodel-generator-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kontent-ai%2Fmodel-generator-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kontent-ai","download_url":"https://codeload.github.com/kontent-ai/model-generator-js/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251711856,"owners_count":21631296,"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":["hacktoberfest","kontent-ai","kontent-ai-tool","kontent-model-generator","typescript"],"created_at":"2024-11-12T22:17:16.587Z","updated_at":"2025-05-03T07:31:29.001Z","avatar_url":"https://github.com/kontent-ai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![npm version](https://badge.fury.io/js/%40kontent-ai%2Fmodel-generator.svg)](https://badge.fury.io/js/%40kontent-ai%2Fmodel-generator)\n[![Build](https://github.com/kontent-ai/model-generator-js/actions/workflows/main.yml/badge.svg)](https://github.com/kontent-ai/model-generator-js/actions/workflows/main.yml)\n[![GitHub license](https://img.shields.io/github/license/kontent-ai/model-generator-js.svg)](https://github.com/kontent-ai/model-generator-js)\n\n# Kontent.ai Model Generator\n\nThe purpose of this project is to help you generate `Typescript models` based on [Kontent.ai](https://kontent.ai) item\ntypes. These models can be used with the [Delivery SDK](https://www.npmjs.com/package/@kontent-ai/delivery-sdk) and\nenhances your experience by providing strongly typed models.\n\n## Installation\n\nInstall package globally so you can use it anywhere:\n\n`npm i @kontent-ai/model-generator -g`\n\n## Generate models with CLI\n\nGo to folder where you want to create models and run:\n\n`kontent-generate --environmentId=xxx --apiKey=yyy`\n\nYou may specify other options like:\n\n`kontent-generate --environmentId=xxx --apiKey=yyy --addTimestamp=false --elementResolver=camelCase`\n\n## Generate models in code\n\nApart from generating models via CLI, you may also generate models in code which also gives you some additional\nconfiguration options (such as using custom name resolver).\n\n```typescript\nimport { generateModelsAsync } from '@kontent-ai/model-generator';\n\nawait generateModelsAsync({\n    sdkType: 'delivery',\n    environmentId: 'da5abe9f-fdad-4168-97cd-b3464be2ccb9',\n    isEnterpriseSubscription: true,\n    apiKey: 'yyy',\n    addTimestamp: true,\n    moduleResolution: 'nodeNext',\n    addEnvironmentInfo: true,\n    elementResolver: 'camelCase',\n    sortConfig: {\n        sortTaxonomyTerms: true\n    }\n});\n```\n\n### Customizing generated file names\n\nYou may customize the way filenames are stored on file system using the `contentTypeFileResolver` and / or\n`taxonomyTypeFileResolver` configuration option:\n\n```typescript\nawait generateModelsAsync({\n    sdkType: 'delivery',\n    environmentId: 'da5abe9f-fdad-4168-97cd-b3464be2ccb9',\n    isEnterpriseSubscription: true,\n    addEnvironmentInfo: true,\n    apiKey: 'yyy',\n    moduleResolution: 'nodeNext',\n    addTimestamp: true,\n    elementResolver: 'camelCase',\n    contentTypeFileResolver: (type) =\u003e `content_type_${type.codename}`,\n    taxonomyTypeFileResolver: (taxonomy) =\u003e `taxonomy_${taxonomy.codename}`\n});\n```\n\n### Customizing generated content type names\n\nYou may customize name of content types using the `contentTypeResolver` configuration option and taxonomy types with the\n`taxonomyTypeResolver` option:\n\n```typescript\nawait generateModelsAsync({\n    sdkType: 'delivery',\n    environmentId: 'da5abe9f-fdad-4168-97cd-b3464be2ccb9',\n    isEnterpriseSubscription: true,\n    apiKey: 'yyy',\n    moduleResolution: 'nodeNext',\n    addTimestamp: true,\n    addEnvironmentInfo: true,\n    elementResolver: 'camelCase',\n    contentTypeResolver: (type) =\u003e `${textHelper.toPascalCase(type.codename)}Model`,\n    taxonomyTypeResolver: (taxonomy) =\u003e `${textHelper.toPascalCase(taxonomy.codename)}Taxonomy`\n});\n```\n\n## FAQ\n\n-   If you are getting the `The Subscription API is not supported in your plan` error, set the\n    `isEnterpriseSubscription` option to false\n\n## CLI Configuration\n\n-   `environmentId` - Id of the Kontent.ai environment\n-   `apiKey`- Management API Key\n-   `outputDir`- Directory where files will be created. Defaults to current directory - `--outputDir=./`. Some other\n    examples: `--outputDir=./sample`\n-   `isEnterpriseSubscription` - Indicates if enterprise subscription endpoint can be used to export data.\n-   `addTimestamp`- Indicates if timestamp is added to generated models\n-   `addEnvironmentInfo`- Indicates if environment info stamp is added to generated models\n-   `elementResolver`- Name resolver for elements. Available options are: `camelCase`, `pascalCase`, `snakeCase`\n-   `contentTypeFileResolver`- Name resolver for content type filenames. Available options are: `camelCase`,\n    `pascalCase`, `snakeCase`\n-   `contentTypeSnippetFileResolver`- Name resolver for content type snippet filenames. Available options are:\n    `camelCase`, `pascalCase`, `snakeCase`\n-   `taxonomyTypeFileResolver`- Name resolver for taxonomy filenames. Available options are: `camelCase`, `pascalCase`,\n    `snakeCase`\n-   `contentTypeResolver`- Name resolver for content type names. Available options are: `camelCase`, `pascalCase`,\n    `snakeCase`\n-   `contentTypeSnippetResolver`- Name resolver for content type snippet names. Available options are: `camelCase`,\n    `pascalCase`, `snakeCase`\n-   `taxonomyTypeResolver`- Name resolver for taxonomy type names. Available options are: `camelCase`, `pascalCase`,\n    `snakeCase`\n-   `sdkType`- Type of sdk for which models are generated. Available options are: `delivery`\n-   `exportWebhooks` - Indicates if webhooks are exported\n-   `exportWorkflows` - Indicates if workflows are exported\n-   `exportAssetFolders` - Indicates if asset folders are exported\n-   `exportCollections` - Indicates if collections are exported\n-   `exportLanguages` - Indicates if languages are exported\n-   `exportRoles` - Indicates if roles are exported. \\* Only available for Enterprise subscription plans\n-   `managementApiUrl` - Sets the url of Management API.\n-   `moduleResolution` - Module resolution for imports. Available options are: `node`, `nodeNext`\n\n## Example models\n\nGenerator creates file for each content type in your project. For example:\n\n`movie.ts`\n\n```typescript\nimport { IContentItem, Elements } from '@kontent-ai/delivery-sdk';\nimport { Actor } from './actor';\nimport { ReleaseCategory } from '../taxonomies/releasecategory';\n\n/**\n * Generated by '@kontent-ai/model-generator@5.0.0-3' at 'Thu, 14 Jul 2022 13:58:53 GMT'\n *\n * Movie\n * Id: b0c0f9c2-ffb6-4e62-bac9-34e14172dd8c\n * Codename: movie\n */\nexport type Movie = IContentItem\u003c{\n    /**\n     * Title (text)\n     * Required: true\n     * Id: 3473187e-dc78-eff2-7099-f690f7042d4a\n     * Codename: title\n     */\n    title: Elements.TextElement;\n\n    /**\n     * Plot (rich_text)\n     * Required: false\n     * Id: f7ee4f27-27fd-a19b-3c5c-102aae1c50ce\n     * Codename: plot\n     */\n    plot: Elements.RichTextElement;\n\n    /**\n     * Released (date_time)\n     * Required: false\n     * Id: 5ccf4644-0d65-5d96-9a32-f4ea21974d51\n     * Codename: released\n     */\n    released: Elements.DateTimeElement;\n\n    /**\n     * Length (number)\n     * Required: false\n     * Id: 7e8ecfab-a419-27ee-d8ec-8adb76fd007c\n     * Codename: length\n     */\n    length: Elements.NumberElement;\n\n    /**\n     * Poster (asset)\n     * Required: false\n     * Id: a39a7237-9503-a1ae-8431-5b6cdb85ae9d\n     * Codename: poster\n     */\n    poster: Elements.AssetsElement;\n\n    /**\n     * Category (multiple_choice)\n     * Required: false\n     * Id: 9821c252-6414-f549-c17f-cc171dd87713\n     * Codename: category\n     */\n    category: Elements.MultipleChoiceElement;\n\n    /**\n     * Stars (modular_content)\n     * Required: false\n     * Id: aa26a55d-19f8-7501-fea3-b0d9b1eeac71\n     * Codename: stars\n     */\n    stars: Elements.LinkedItemsElement\u003cActor | Movie\u003e;\n\n    /**\n     * SeoName (url_slug)\n     * Required: false\n     * Id: 756cc91a-a090-60f9-a7f0-f505bfbe046c\n     * Codename: seoname\n     */\n    seoname: Elements.UrlSlugElement;\n\n    /**\n     * ReleaseCategory (taxonomy)\n     * Required: false\n     * Id: 65f2fd44-1856-bc2b-17c2-decb0635e3d2\n     * Codename: releasecategory\n     */\n    releasecategory: Elements.TaxonomyElement\u003cReleaseCategory\u003e;\n}\u003e;\n```\n\n`movietype.ts`\n\n```typescript\n/**\n * Generated by '@kontent-ai/model-generator@5.0.0' at 'Mon, 28 Mar 2022 14:36:32 GMT'\n *\n * MovieType\n * Id: 365a17e6-1929-27ab-9f67-a9273c846717\n * Codename: movietype\n */\nexport type MovieType = 'student' | 'film' | 'tv' | 'blockbuster' | 'cinema_only';\n```\n\nTo learn the complete generator output, see the following folder:\nhttps://github.com/kontent-ai/model-generator-js/tree/master/sample\n\n## Contribution \u0026 Feedback\n\nContributions are welcomed. Simply make a pull request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkontent-ai%2Fmodel-generator-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkontent-ai%2Fmodel-generator-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkontent-ai%2Fmodel-generator-js/lists"}