🚀 DAY 5 OF LAUNCH WEEK:Introducing Webhook Events for Alert Changes.Learn more →
Socket
Book a DemoInstallSign in
Socket

@huston007/ts-transformer-shape

Package Overview
Dependencies
Maintainers
2
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@huston007/ts-transformer-shape

A custom TypeScript transformation to extract object structure from interface

latest
Source
npmnpm
Version
0.5.0
Version published
Maintainers
2
Created
Source

ts-transformer-shape

A custom TypeScript transformation to extract object structure from interface

Build Status Downloads Run on Repl.it

Requirement

TypeScript >= 2.4.1

How to use this package

This package exports 2 functions. One is shape which is used in TypeScript codes to obtain shape of given type, while the other is a TypeScript custom transformer which is used to compile the shape function correctly.

How to use shape

import { shape } from '@huston007/ts-transformer-shape';

interface Props {
  id: string;
  age: {test: number};
}
const keysOfProps = shape<Props>();

console.log(keysOfProps); // {id: null, age: {test: null}}

How to use the custom transformer

Unfortunately, TypeScript itself does not currently provide any easy way to use custom transformers (See https://github.com/Microsoft/TypeScript/issues/14419). The followings are the example usage of the custom transformer.

webpack (with ts-loader or awesome-typescript-loader)

See examples/webpack for detail.

// webpack.config.js
const shapeTransformer = require('@huston007/ts-transformer-shape/transformer').default;

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.ts$/,
        loader: 'ts-loader', // or 'awesome-typescript-loader'
        options: {
          getCustomTransformers: program => ({
              before: [
                  shapeTransformer(program)
              ]
          })
        }
      }
    ]
  }
};

Rollup (with rollup-plugin-typescript2)

See examples/rollup for detail.

// rollup.config.js
import typescript from 'rollup-plugin-typescript2';
import shapeTransformer from '@huston007/ts-transformer-shape/transformer';

export default {
  // ...
  plugins: [
    typescript({ transformers: [service => ({
      before: [ shapeTransformer(service.getProgram()) ],
      after: []
    })] })
  ]
};

ttypescript

See examples/ttypescript for detail. See ttypescript's README for how to use this with module bundlers such as webpack or Rollup.

// tsconfig.json
{
  "compilerOptions": {
    // ...
    "plugins": [
      { "transform": "ts-transformer-shape/transformer" }
    ]
  },
  // ...
}

TypeScript API

See test for detail. You can try it with $ npm test.

const ts = require('typescript');
const shapeTransformer = require('@huston007/ts-transformer-shape/transformer').default;

const program = ts.createProgram([/* your files to compile */], {
  strict: true,
  noEmitOnError: true,
  target: ts.ScriptTarget.ES5
});

const transformers = {
  before: [shapeTransformer(program)],
  after: []
};
const { emitSkipped, diagnostics } = program.emit(undefined, undefined, undefined, false, transformers);

if (emitSkipped) {
  throw new Error(diagnostics.map(diagnostic => diagnostic.messageText).join('\n'));
}

As a result, the TypeScript code shown here is compiled into the following JavaScript.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ts_transformer_keys_1 = require("ts-transformer-shape");
var keysOfProps = ["id", "name", "age"];
console.log(keysOfProps); // ['id', 'name', 'age']

Note

  • The keys function can only be used as a call expression. Writing something like keys.toString() results in a runtime error.
  • keys does not work with a dynamic type parameter, i.e., keys<T>() in the following code is converted to an empty array([]).
class MyClass<T extends object> {
  keys() {
    return keys<T>();
  }
}

License

MIT

Keywords

TypeScript

FAQs

Package last updated on 14 Apr 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts