From 8e9915200cecb51e56c84b22e37fe1faf78a0ca7 Mon Sep 17 00:00:00 2001 From: Huy-DNA Date: Tue, 30 Jul 2024 11:05:53 +0700 Subject: [PATCH 1/3] feat: add isOk_and to Option type --- packages/dbml-parse/src/lib/option.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/dbml-parse/src/lib/option.ts b/packages/dbml-parse/src/lib/option.ts index 60d443f54..42ad40672 100644 --- a/packages/dbml-parse/src/lib/option.ts +++ b/packages/dbml-parse/src/lib/option.ts @@ -26,6 +26,10 @@ export class Some { return new Some(callback(this.value)); } + isOk_and(callback: (_: T) => boolean): boolean { + return callback(this.value); + } + // eslint-disable-next-line class-methods-use-this isOk(): boolean { return true; @@ -53,6 +57,11 @@ export class None { return new None(); } + // eslint-disable-next-line class-methods-use-this + isOk_and(callback: (_: T) => boolean): boolean { + return false; + } + // eslint-disable-next-line class-methods-use-this isOk(): boolean { return false; From e7c91e1a1e2044e8b7bb9d31687859f433b50e94 Mon Sep 17 00:00:00 2001 From: Huy-DNA Date: Tue, 30 Jul 2024 11:06:42 +0700 Subject: [PATCH 2/3] fix: safe comparison in convertFuncAppToElem --- packages/dbml-parse/src/lib/parser/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dbml-parse/src/lib/parser/utils.ts b/packages/dbml-parse/src/lib/parser/utils.ts index 5c80284f2..90ebb14ab 100644 --- a/packages/dbml-parse/src/lib/parser/utils.ts +++ b/packages/dbml-parse/src/lib/parser/utils.ts @@ -48,7 +48,7 @@ export function convertFuncAppToElem( const attributeList = _.last(cpArgs) instanceof ListExpressionNode ? (cpArgs.pop() as ListExpressionNode) : undefined; - if (cpArgs.length === 3 && extractVariableNode(cpArgs[1]).unwrap().value === 'as') { + if (cpArgs.length === 3 && extractVariableNode(cpArgs[1]).isOk_and((token) => token.value === 'as')) { return new Some( factory.create(ElementDeclarationNode, { type, From 40aefd7ecd6989dc623b9edee73c314df16d9841 Mon Sep 17 00:00:00 2001 From: Huy-DNA Date: Tue, 30 Jul 2024 12:10:17 +0700 Subject: [PATCH 3/3] fix: rename isOk_and for consistency with the Rust method name --- packages/dbml-parse/src/lib/option.ts | 4 ++-- packages/dbml-parse/src/lib/parser/utils.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/dbml-parse/src/lib/option.ts b/packages/dbml-parse/src/lib/option.ts index 42ad40672..ed088caa9 100644 --- a/packages/dbml-parse/src/lib/option.ts +++ b/packages/dbml-parse/src/lib/option.ts @@ -26,7 +26,7 @@ export class Some { return new Some(callback(this.value)); } - isOk_and(callback: (_: T) => boolean): boolean { + is_some_and(callback: (_: T) => boolean): boolean { return callback(this.value); } @@ -58,7 +58,7 @@ export class None { } // eslint-disable-next-line class-methods-use-this - isOk_and(callback: (_: T) => boolean): boolean { + is_some_and(callback: (_: T) => boolean): boolean { return false; } diff --git a/packages/dbml-parse/src/lib/parser/utils.ts b/packages/dbml-parse/src/lib/parser/utils.ts index 90ebb14ab..595fa3246 100644 --- a/packages/dbml-parse/src/lib/parser/utils.ts +++ b/packages/dbml-parse/src/lib/parser/utils.ts @@ -48,7 +48,7 @@ export function convertFuncAppToElem( const attributeList = _.last(cpArgs) instanceof ListExpressionNode ? (cpArgs.pop() as ListExpressionNode) : undefined; - if (cpArgs.length === 3 && extractVariableNode(cpArgs[1]).isOk_and((token) => token.value === 'as')) { + if (cpArgs.length === 3 && extractVariableNode(cpArgs[1]).is_some_and((token) => token.value === 'as')) { return new Some( factory.create(ElementDeclarationNode, { type,