Migrate away from class-transfomer
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- javascript, nodejs, typescript
- Lĩnh vực
- developer-experience, tooling
Hướng nghiên cứu
Trước tiên, hãy xem xét issue 68 và ví dụ handlers.ts được đề xuất, sau đó kiểm tra SDK và mã được tạo mà issue cho biết sẽ cần thay đổi. Truy vết quá trình tích hợp class-transformer hiện tại và xác định các entry point bị ảnh hưởng trước khi đánh giá camelcase-keys, AJV và json-schema-to-typescript. Công việc được xem là hoàn tất khi plugin không còn phụ thuộc vào class-transformer, hỗ trợ workflow JavaScript và TypeScript được đề xuất, đồng thời bao gồm các thay đổi cần thiết đối với SDK và mã được tạo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
This is a rethought version of my previous ticket https://github.com/aws-cloudformation/cloudformation-cli-typescript-plugin/issues/68
To resummarize the issues with class-transformer:
- The serialization breaks down in the face of unsupported CloudFormation JSON Schema Features, and increases complexity since JSON Schema features must be manually mapped to the Class Transformer equivalent.
- It ties the implementation to TypeScript's decorators which are soon to be completely deprecated and redesigned entirely, and results in a data model that might be foreign to a lot of JavaScript developers today (outside angular and nestjs)
- Because of the above, it prevents JavaScript from working (though I'd personally always encourage TS over JS) (https://github.com/aws-cloudformation/cloudformation-cli-typescript-plugin/issues/8)
The project isn't also super alive right now: https://github.com/typestack/class-transformer/issues/1272Possibly no longer as valid, it looks like the projects might be getting new maintainers.
The updated proposal proposes swapping class-transformer with three components:
- The package camelcase-keys to handle the CloudFormation-to-JS object key camelcasing.
- The package AJV to handle validating the incoming event properties, provide friendly(er) error messages, as well as automatic type conversion
- The package json-schema-to-typescript to handle consuming the resource definition and outputting type information for a richer experience.
While a very large change, it would uncouple this plugin from TypeScript and an unmaintained library while hopefully simplifying the Dev UX of developing a resource in typescript.
For example, a simple handler like the template default would become (example greatly appreviated):
// handlers.ts
import { Resource, TypeConfiguration } from "./.generated/models";
import { createResource, ProgressEvent, exceptions } from '@amazon-web-services-cloudformation/cloudformation-cli-typescript-lib';
const { entrypoint, testEntrypoint } = createResource<Resource, TypeConfiguration>({
typeName: Resource.TypeName,
schema: Resource.Schema,
// Type information for all the below is automatically infered
async create({ session, properties, request, logger, typeConfiguration }) {
// Example:
try {
const { apiKey } = typeConfiguration;
const response = await fetch(`https://api.someservice.com`, {
method: 'POST',
headers: { 'x-api-key': apiKey },
body: { ...properties },
});
const { id } = await response.json();
properties.id = id;
// else handle error
} catch(err) {
logger.log(err);
// exceptions module lets CloudFormation know the type of failure that occurred
throw new exceptions.InternalFailure(err.message);
// this can also be done by returning a failed progress event
// return ProgressEvent.failed(HandlerErrorCode.InternalFailure, err.message);
}
return properties;
},
/* more handlers.... */
async list({ properties, typeConfiguration }) {
/* ...some list code... */
// Just return a plain array of models, validate via typescript & ajv
return [/* list of plain old javascript models */];
},
});
export { entrypoint, testEntrypoint };
This also externalizes a lot of concerns unnecessary to the user code, infers a lot more of type information automatically, and makes developing resource types much less mentally onerous allowing developers to focus on business logic.
It would require more work with the SDK and generated code however.
- Ngôn ngữ chính
- TypeScript
- Star
- 46
- Fork
- 18
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của aws-cloudformation/cloudformation-cli-typescript-plugin
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 58/100
aws-cloudformation/cloudformation-cli-typescript-plugin#136 · 1 reaction ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 32/100
aws-cloudformation/cloudformation-cli-typescript-plugin#132 · 1 reaction ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
aws-cloudformation/cloudformation-cli-typescript-plugin#121 · 9 bình luận · 1 reaction ·
-
integration tests are broken Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 20/100
aws-cloudformation/cloudformation-cli-typescript-plugin#115 ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
aws-cloudformation/cloudformation-cli-typescript-plugin#113 ·
Tất cả issue của aws-cloudformation/cloudformation-cli-typescript-plugin
Issue tương tự
-
bug(cli): hapi doctor inline-media prints a fabricated B:\ helper-script path in packaged installs Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
Crush Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
catppuccin/catppuccin#3125 ·
-
Add a SECURITY.md Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
ElementsProject/cln-application#167 · 1 bình luận · 1 reaction ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Quantco/pnpm-licenses#17 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100