strapi-v4-to-typescript
v1.0.2
Published
Convert the strapi schemas to typescript interfaces.
Downloads
80
Maintainers
Readme
Strapi-v4-to-typescript
Convert the Strapi models to TypeScript interfaces by processing each of the ./api/**/models/*/schema.json
recursively.
Install and Run
npm install -g strapi-v4-to-typescript
s4ts path/to/strapi/api/ -o path/to/your/types/dir/
# see all doc
s4ts -h
# external conf. see: strapi-v4-to-typescript/index.d.ts for format
s4ts -c .stsconfig.js
Command line option
s4ts input -g components -o output ...
required
input
Strapi folder(s)/file(s) with models */schema.json
You may define multiple inputs. In case your API models have relations to other plugins like 'users-permissions'.s4ts path/to/strapi/api/ path/to/strapi/plugins/users-permissions/models -o path/to/your/types/dir/
- Order matters, if you have two models with the same name, the last one is used.
- Add '!' to exclude folder or subfolder, ex:
!path/to/strapi/plugins_excluded
.
-g components
Strapi folder(s) with components models
optional
- -o output
Output folder - -n nested - deprecated in Strapi v4 - broke file structure Put all interfaces in a nested tree instead of directly under the output folder
- -u collectionCanBeUndefined
By default, all collection can not be undefined. You can turn this off, so only unrequired collections may be undefined. - -e Enumeration
You may generate enumeration or string literal Example:
// enumeration (with -e option)
export interface IOrder {
payment: IOrderPayment;
}
export enum IOrderPayment {
card = "card",
check = "check",
}
// OR string literal types (by default)
export interface IOrder {
payment: "card" | "check";
}
- -c Advanced configuration
path to configuration file
Advanced configuration
.stsconfig
/**
* @type {import('strapi-v4-to-typescript')}
*/
const config = {
//required
input: [
'api',
'./node_modules/strapi-plugin-users-permissions/models/',
'./node_modules/strapi-plugin-upload/models/',
'./extensions/users-permissions/models/'
],
components: './components/',
output: './sts/',
// optional
enum: true,
nested: false,
excludeField: (interfaceName, fieldName) => fieldName === 'hide_field',
addField: (interfaceName) => [{ name: "created_by", type: "string" }],
// optional, builtin function used if undefined return
fieldType: (fieldType, fieldName, interfaceName) => { if(fieldType == 'datetime') return 'string' },
fieldName: (fieldName) => fieldName.replace('_', ''),
interfaceName: (name) => `X${name}`,
enumName: (name, interfaceName) => `Enum${interfaceName}${name}`,
importAsType: (interfaceName) => interfaceName === 'MyInterfaceThatWantsToImportAsTypes' /* or just true */,
outputFileName: (interfaceName, filename) => interfaceName;
}
module.exports = config;
package.json
{
"//" : "...",
"scripts": {
"sts": "s4ts -c .stsconfig"
},
"///" : "..."
}
Issue
If you want to create an issue. First of all, be nice. Take the time to explain and format your post.
The better solution to explain your issue (and for me, to fix it) is to create a pull request with your data:
- fork this repo with the button "fork" on github website. wait a minute.
- git clone your master branch from the newly created repository.
yarn install
ornpm install
- add your api in
src/test/api
src/test/components
(if necessary) - add your test:
src/test/test<issue id>.config.js
copy an other test and modifyoutput
confsrc/test/test<issue id>.assert.ts
copy another assert and modify the import accordingly to your confoutput
- run your test with
./node_modules/.bin/ts-node src/test.ts test<issue id>
or run all testyarn test
- create pull request on this repo
Explanation
The input folder is recursively processed and each model file is read. When done, the expected output folder is generated, and finally, the Strapi models are converted to TypeScript.
Build
npm install && npm run build
# output files generated in dist folder
Strapi v4 EDIT
Modified this repo to make interfaces from strapi v4 file structure, this breaks original functionality so please use this wisely and on Strapi v4 only.
WARNING
option -n was broken - thus removed
Usage
rm ./.s4ts -rf && s4ts ./src/api ./src/extensions -g ./src/components -o ./.s4ts
KUDOS !!
"Big thanks to all authors and contributors on strapi-to-typescript, without which this fork could not exist!"