{"_id":"@bordeux/ts-transformer-interface","name":"@bordeux/ts-transformer-interface","dist-tags":{"latest":"2.0.0"},"versions":{"2.0.0":{"name":"@bordeux/ts-transformer-interface","version":"2.0.0","description":"A TypeScript custom transformer generating runtime interface info","repository":{"type":"git","url":"git+https://github.com/bordeux/ts-transformer-interface.git"},"keywords":["TypeScript"],"author":{"name":"Yang Liu"},"license":"MIT","scripts":{"parser":"ts-node test/inspect/parser.ts","test":"tsc && node test/compile && mocha test"},"husky":{"hooks":{"pre-commit":"pretty-quick --staged"}},"prettier":{"singleQuote":true,"trailingComma":"all","printWidth":100},"bugs":{"url":"https://github.com/bordeux/ts-transformer-interface/issues"},"homepage":"https://github.com/bordeux/ts-transformer-interface#readme","devDependencies":{"@types/mocha":"^5.2.7","@types/node":"^18.17.15","husky":"^3.1.0","mocha":"^10.2.0","prettier":"^1.19.1","pretty-quick":"^2.0.1","typescript":"^5.0.0"},"peerDependencies":{"typescript":">=5.0"},"_id":"@bordeux/ts-transformer-interface@2.0.0","gitHead":"5e255b88685ce2e47208ecd7205d70e94a582fa1","types":"./index.d.ts","_nodeVersion":"16.20.1","_npmVersion":"9.8.0","dist":{"integrity":"sha512-MayUd/Fpk65KdM2NknpIeyfyzhm/IcnKwZiOH4/AMBPmWZ5A8VaCk5EWjPAHXVaQBA7kOd6iAfdCdy6du7iBHg==","shasum":"09e6ce3ea11e1a95be4488fdadcc9ed5176d89cb","tarball":"https://registry.npmjs.org/@bordeux/ts-transformer-interface/-/ts-transformer-interface-2.0.0.tgz","fileCount":8,"unpackedSize":10792,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFJwOX0aeIeSEEAeHSVG5in6oKFuuNwXoDE1T9CFH/6yAiAyFRYVWsfxtbXAuySA64Xm/dk5UaOmYSNZTq18xm80jg=="}]},"_npmUser":{"name":"bordeux","email":"admin@bordeux.net"},"directories":{},"maintainers":[{"name":"bordeux","email":"admin@bordeux.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ts-transformer-interface_2.0.0_1694532818067_0.9514532027476326"},"_hasShrinkwrap":false}},"time":{"created":"2023-09-12T15:33:37.937Z","2.0.0":"2023-09-12T15:33:38.234Z","modified":"2023-09-12T15:33:38.566Z"},"maintainers":[{"name":"bordeux","email":"admin@bordeux.net"}],"description":"A TypeScript custom transformer generating runtime interface info","homepage":"https://github.com/bordeux/ts-transformer-interface#readme","keywords":["TypeScript"],"repository":{"type":"git","url":"git+https://github.com/bordeux/ts-transformer-interface.git"},"author":{"name":"Yang Liu"},"bugs":{"url":"https://github.com/bordeux/ts-transformer-interface/issues"},"license":"MIT","readme":"# ts-transformer-interface\n\nA TypeScript custom transformer generating runtime interface info. This is mainly for the runtime JSON schema validation.\nSo only a subset of TypeScript types are handled. They're\n\n1. primitive types (string, number, boolean, etc)\n1. special types (null, any, unknown)\n1. type reference (other interface/class)\n1. array type\n1. parameterized type (Box<Box<User[]>>)\n\n## Example\n\nInput\n\n```typescript\nimport { schema } from 'ts-transformer-interface';\n\ninterface Location {\n  lat: number;\n  lng: number;\n}\n\ninterface User {\n  name: string; // required primitive\n  title?: string; // optional primitive\n  houses: string[]; // required array\n  location: Location; // type reference\n  spouse?: User; // optional type reference\n  children: User[]; // type reference array\n  previousLocations?: Location[]; // optional type reference array\n  referrer: User | string; // union type\n  box: Box<Box<User[]>>; // parameterized type\n  marker: google.maps.Marker; // scoped type\n}\n\nconst userSchema = schema<User>();\n```\n\nOutput\n\n```javascript\n'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar index_1 = require('../index');\nvar userSchema = {\n  name: 'User',\n  props: [\n    { name: 'name', optional: false, type: 'string' },\n    { name: 'title', optional: true, type: 'string' },\n    { name: 'houses', optional: false, type: { arrayElementType: 'string' } },\n    { name: 'location', optional: false, type: { referenceName: 'Location' } },\n    { name: 'spouse', optional: true, type: { referenceName: 'User' } },\n    { name: 'children', optional: false, type: { arrayElementType: { referenceName: 'User' } } },\n    {\n      name: 'previousLocations',\n      optional: true,\n      type: { arrayElementType: { referenceName: 'Location' } },\n    },\n    { name: 'referrer', optional: false, type: { union: [{ referenceName: 'User' }, 'string'] } },\n    {\n      name: 'box',\n      optional: false,\n      type: {\n        selfType: 'Box',\n        typeArgumentType: {\n          selfType: 'Box',\n          typeArgumentType: { arrayElementType: { referenceName: 'User' } },\n        },\n      },\n    },\n    { name: 'marker', optional: false, type: { referenceName: 'google.maps.Marker' }\n  ],\n};\n```\n\n## Installation\n\n### ttypescript\n\nI personally use [ts-patch](https://www.npmjs.com/package/ts-patch) to install all the transformers.\n\n```json\n// tsconfig.json\n{\n  \"compilerOptions\": {\n    // ...\n    \"plugins\": [{ \"transform\": \"ts-transformer-interface/transformer\" }]\n  }\n  // ...\n}\n```\n","readmeFilename":"README.md"}