ts-dynamodb-attributes-transformer: DynamoDB 속성에 대한 TypeScript 객체의 코드 변환기

8209 단어 dynamodbtypescript
저는 TypsScript 객체를 Amazon DynamoDB 속성으로 변환하는 "ts-dynamodb-attributes-transformer"를 게시했습니다(정확히 이 속성 유형은 aws-sdk-js-v3 에 정의된 Record<string, AttributeValue>입니다).

https://github.com/moznion/ts-dynamodb-attributes-transformer

그리고 이것은 npm에서도 사용할 수 있습니다.

https://www.npmjs.com/package/@moznion/ts-dynamodb-attributes-transformer

ts-dynamodb-attributes-transformer는 TypeScript Compiler API을 사용하는 코드 변환기 플러그인입니다.

이 변압기가 어떻게 작동하는지 봅시다.
이 변환기에 다음 TypeScript 코드를 제공하면,

import { AttributeValue } from '@aws-sdk/client-dynamodb';
import { dynamodbRecord } from '@moznion/ts-dynamodb-attributes-transformer';

interface User {
  readonly id: number;
  readonly name: string;
  readonly tags: Map<string, string>;
}

const record: Record<keyof User, AttributeValue> = dynamodbRecord<User>({
  id: 12345,
  name: 'John Doe',
  tags: new Map<string, string>([
    ['foo', 'bar'],
    ['buz', 'qux'],
  ]),
});


이 변환기는 dynamodbRecord<T>(obj: T)(이 경우 dynamodbRecord<User>(...)) 함수 호출을 감지하고 유형 매개변수T(이 경우 User)의 필드 정의를 분석하고 다음에 따라 다음과 같은 JavaScript 코드를 생성합니다. 매개변수로 주어진 T 유형 객체.

const record = function (arg) {
    return {
        id: {
            N: arg.id.toString()
        },
        name: {
            S: arg.name
        },
        tags: {
            M: function () {
                var m;
                m = {}
                for (const kv of arg.tags) {
                    m[kv[0]] = { S: kv[1] }
                }
                return m;
            }()
        }
    };
}({
    id: 12345,
    name: 'John Doe',
    tags: new Map([
        ['foo', 'bar'],
        ['buz', 'qux'],
    ]),
});


이 동작은 호출dynamodbRecord<T>(obj: T)을 DynamoDB 속성에 대한 생성기 함수로 완전히 대체하는 것과 같습니다.

위에서 언급했듯이 이것은 TypeScript 변환기 플러그인이므로 TypeScript 컴파일 단계에서 이 플러그인을 연결해야 합니다. 가장 쉬운 방법 중 하나는 ttypescript을 사용하는 것이라고 가정합니다. 이는 컴파일에서 변환기 플러그인을 연결할 수 있는 사용자 지정 TypeScript 컴파일러입니다. README의 "How to use this transformer" 섹션도 참조하십시오.

당연히 이 플러그인은 해당 객체의 유형 정의에 따라 대상 객체를 DynamoDB 속성으로 변환할 수 있습니다. 그리고 이것은 TypeScript Compiler API를 사용하여 코드를 변환하므로 컴파일 시 정적으로 생성할 코드를 결정할 수 있으므로 DynamoDB 속성 객체를 구성하기 위해 즉석에서 리플렉션이나 무언가를 수행할 필요가 없습니다. 이것은 좋은 성능에 기여합니다.

현재 이 플러그인은 내 사용 사례를 만족하지만 개선 아이디어가 있거나 문제를 발견하면 제안해 주시면 감사하겠습니다!

좋은 웹페이지 즐겨찾기