open-index/open-npm huggingface dataset:
npm package: @lab900/typescript-serializer
Description: JSON serialization/deserialization of Typescript objects
Author: Lab900
Latest version: 0.0.5

# Lab900 - Typescript Serializer

## Set up

npm i @lab900/typescript-serializer

Make sure your tsconfig compilerOptions contains following options: 
```
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
```

## How to 

### Annotate classes for serialization

```typescript
import { Entity, JsonProperty } from '@lab900/typescript-serializer';

@Entity()
class MyEntity {
  @JsonProperty()
  public exampleProp: string;

  @JsonProperty({arrayType: string})
  public exampleProp2: string[];

  @JsonProperty()
  public exampleProp2: number;

  /**
   * A custom (de)serializer can be provided  
   */  
  @JsonProperty({ deserializer: (value) => any, serializer: (value) => any })
  public nestedEntity: any;
  
  /**
   * Entities can be nested 
   */  
  @JsonProperty()
  public nestedEntity: OtherEntity;
}

@Entity()
class OtherEntity {
  @JsonProperty()
  public otherProp: string;
}

```

### Serialize & deserialize 

```typescript
import { Entity, JsonProperty, serialize, deserialize } from '@lab900/typescript-serializer';

@Entity()
class MyEntity {
  @JsonProperty()
  public exampleProp: string;
}

// coverts JSON to an instance of MyEntity
const deserializedEntity: MyEntity = deserialize({exampleProp: 'test'}, MyEntity);

// converts an instance of MyEntity to JSON
const serialized: Object = serialize(deserializedEntity, MyEntity);

```

### Angular service example: 
```typescript
import { Serialize, SerializeParam, Deserialize } from '@lab900/typescript-serializer';

@Injectable({
  providedIn: 'root'
})
export class ExampleService {
  private readonly apiUrl = 'http://example.com/api';

  constructor(
    private http: HttpClient,
  ) {}

  @Serialize() // serialize all params with the SerializeParam decorator
  @Deserialize(ResponseEntity) // deserialize the response to ResponseEntity
  public create(
    @SerializeParam(CreateEntity) toCreate: CreateEntity // serialize this param to CreateEntity before the method is applied
  ): Observable<ResponseEntity> {
    return this.http.post<ApiResult<any>>(this.apiUrl, toCreate);
  }

  @Deserialize(ResponseEntity) // deserialize the response to ResponseEntity
  public getAll(): Observable<ResponseEntity[]> {
    return this.http.get<ApiResult<any>>(this.apiUrl);
  }
}
```
npm package: @lab900/ui
Description: This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.6.
Author: Lab900
Latest version: 19.2.7

# Ui

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.6.

## Code scaffolding

Run `ng generate component component-name --project ui` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ui`.

> Note: Don't forget to add `--project ui` or else it will be added to the default project in your `angular.json` file.

## Build

Run `ng build ui` to build the project. The build artifacts will be stored in the `dist/` directory.

## Publishing

After building your library with `ng build ui`, go to the dist folder `cd dist/ui` and run `npm publish`.

## Running unit tests

Run `ng test ui` to execute the unit tests via [Karma](https://karma-runner.github.io).

## Further help

To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).