Skip to content

Commit

Permalink
Merge pull request #7 from ngze/develop
Browse files Browse the repository at this point in the history
  • Loading branch information
ZeevKatz authored Nov 12, 2020
2 parents b85c08e + db40058 commit 1d3861f
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 12 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

## 1.1.0 (2020-11-12)


### Features

* 🎸 get rid of reflect-metadata ([d7056b5](https://github.com/ngze/control-value-transformer/commit/d7056b5e837bb4a392e32dcd0a07527cc13c1304))

## 1.0.0 (2020-11-10)


Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "control-value-transformer",
"version": "1.0.0",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
Expand Down
2 changes: 1 addition & 1 deletion projects/ngze/control-value-transformer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@ngze/control-value-transformer",
"version": "1.0.0",
"version": "1.1.0",
"description": "A proper way for transforming ControlValueAccessor values in two-ways",
"license": "MIT",
"sideEffects": false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { Transformer } from './shared';
/**
* Injection token that used to run {@link registerControlValueTransformers}.
*/
export const REGISTER_CONTROL_VALUE_TRANSFORMERS = new InjectionToken<void>('REGISTER_CONTROL_VALUE_TRANSFORMERS');
export const REGISTER_CONTROL_VALUE_TRANSFORMERS = new InjectionToken('REGISTER_CONTROL_VALUE_TRANSFORMERS');

/**
* Registration factory for new control value transformers.
Expand Down Expand Up @@ -52,5 +52,5 @@ export class ControlValueTransformerModule {
};
}

constructor(@Optional() @Inject(REGISTER_CONTROL_VALUE_TRANSFORMERS) registerControlValueTransformers: void) {}
constructor(@Optional() @Inject(REGISTER_CONTROL_VALUE_TRANSFORMERS) registerControlValueTransformers) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,21 @@ import { ControlValueTransformerMetadata } from './control-value-transformer-met
*/
const CONTROL_VALUE_TRANSFORMER_METADATA = Symbol('CONTROL_VALUE_TRANSFORMER_METADATA');

/**
* Returns metadata property descriptor associate with the given control value transformer.
* @param transformer - Instance of control value transformer that should be decorated.
* @returns Transformer metadata property descriptor.
*/
const getTransformerMetadataPropertyDescriptor = (transformer: Transformer) => {
return Object.getOwnPropertyDescriptor(transformer.constructor, CONTROL_VALUE_TRANSFORMER_METADATA);
};

/**
* Asserts the given transformer class is decorated with {@link Transformer}.
* @param transformer - Instance of control value transformer that should be decorated.
*/
const assertTransformerIsDecorated = (transformer: Transformer) => {
const hasMetadata = Reflect.hasMetadata(CONTROL_VALUE_TRANSFORMER_METADATA, transformer.constructor);

if (!hasMetadata) {
if (!getTransformerMetadataPropertyDescriptor(transformer)) {
throw new TypeError(`"${transformer.constructor}" is not decorated with ControlValueTransformer.`);
}
};
Expand All @@ -28,8 +35,8 @@ const assertTransformerIsDecorated = (transformer: Transformer) => {
*/
export const getControlValueTransformerMetadata = (transformer: Transformer): ControlValueTransformerMetadata => {
assertTransformerIsDecorated(transformer);

return Reflect.getMetadata(CONTROL_VALUE_TRANSFORMER_METADATA, transformer.constructor);
const metadataPropertyDescriptor = getTransformerMetadataPropertyDescriptor(transformer);
return metadataPropertyDescriptor.value;
};

/**
Expand All @@ -41,5 +48,7 @@ export const definedControlValueTransformerMetadata = (
transformerClass: Class<Transformer>,
metadata: ControlValueTransformerMetadata
) => {
return Reflect.defineMetadata(CONTROL_VALUE_TRANSFORMER_METADATA, metadata, transformerClass);
return Object.defineProperty(transformerClass, CONTROL_VALUE_TRANSFORMER_METADATA, {
value: metadata,
});
};
2 changes: 0 additions & 2 deletions projects/ngze/control-value-transformer/src/public-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
* Public API Surface of Control Value Transformer
*/

import 'reflect-metadata';

export {
ControlValueTransformer,
ControlValueTransformerMetadata,
Expand Down

0 comments on commit 1d3861f

Please sign in to comment.