From dbf166cedcc648b737a3537fb1705057ff083f06 Mon Sep 17 00:00:00 2001 From: NGBAMA William Date: Sat, 25 Jan 2025 09:29:26 +0100 Subject: [PATCH 1/6] refactor(core): rename $switch to $match --- .../core/__tests__/conditional/switch.spec.ts | 154 +++++++++--------- ...SwitchEvaluation.ts => MatchEvaluation.ts} | 8 +- packages/core/src/conditional/index.ts | 10 +- 3 files changed, 85 insertions(+), 87 deletions(-) rename packages/core/src/conditional/{SwitchEvaluation.ts => MatchEvaluation.ts} (95%) diff --git a/packages/core/__tests__/conditional/switch.spec.ts b/packages/core/__tests__/conditional/switch.spec.ts index b554666..1073c50 100644 --- a/packages/core/__tests__/conditional/switch.spec.ts +++ b/packages/core/__tests__/conditional/switch.spec.ts @@ -1,43 +1,43 @@ -import { $switch } from "../../src"; +import { $match } from "../../src"; describe('$match test suite', () => { it('should match primitive cases', () => { let input; let result; input = 0; - result = $switch(input) - .case(0, 'zero') - .case(1, 'one') - .case(2, 'two') + result = $match(input) + .with(0, 'zero') + .with(1, 'one') + .with(2, 'two') .default(null); expect(result).toBe('zero'); input = 1; - result = $switch(input) - .case(0, 'zero') - .case(1, 'one') - .case(2, 'two') + result = $match(input) + .with(0, 'zero') + .with(1, 'one') + .with(2, 'two') .default(null); expect(result).toBe('one'); input = 2; - result = $switch(input) - .case(0, 'zero') - .case(1, 'one') - .case(2, 'two') + result = $match(input) + .with(0, 'zero') + .with(1, 'one') + .with(2, 'two') .default(null); expect(result).toBe('two'); input = -1; - result = $switch(input) - .case(0, 'zero') - .case(1, 'one') - .case(2, 'two') + result = $match(input) + .with(0, 'zero') + .with(1, 'one') + .with(2, 'two') .default(null); @@ -46,63 +46,63 @@ describe('$match test suite', () => { it('should match grouped primitive cases', () => { let result; - result = $switch(0) - .case(0, 'zero') - .case(1, 'one') - .case(2, 3, 4, 5, '2-5') + result = $match(0) + .with(0, 'zero') + .with(1, 'one') + .with(2, 3, 4, 5, '2-5') .default(null); expect(result).toBe('zero'); - result = $switch(1) - .case(0, 'zero') - .case(1, 'one') - .case(2, 3, 4, 5, '2-5') + result = $match(1) + .with(0, 'zero') + .with(1, 'one') + .with(2, 3, 4, 5, '2-5') .default(null); expect(result).toBe('one'); - result = $switch(2) - .case(0, 'zero') - .case(1, 'one') - .case(2, 3, 4, 5, '2-5') + result = $match(2) + .with(0, 'zero') + .with(1, 'one') + .with(2, 3, 4, 5, '2-5') .default(null); expect(result).toBe('2-5'); - result = $switch(3) - .case(0, 'zero') - .case(1, 'one') - .case(2, 3, 4, 5, '2-5') + result = $match(3) + .with(0, 'zero') + .with(1, 'one') + .with(2, 3, 4, 5, '2-5') .default(null); expect(result).toBe('2-5'); - result = $switch(4) - .case(0, 'zero') - .case(1, 'one') - .case(2, 3, 4, 5, '2-5') + result = $match(4) + .with(0, 'zero') + .with(1, 'one') + .with(2, 3, 4, 5, '2-5') .default(null); expect(result).toBe('2-5'); - result = $switch(5) - .case(0, 'zero') - .case(1, 'one') - .case(2, 3, 4, 5, '2-5') + result = $match(5) + .with(0, 'zero') + .with(1, 'one') + .with(2, 3, 4, 5, '2-5') .default(null); expect(result).toBe('2-5'); - result = $switch(6) - .case(0, 'zero') - .case(1, 'one') - .case(2, 3, 4, 5, '2-5') + result = $match(6) + .with(0, 'zero') + .with(1, 'one') + .with(2, 3, 4, 5, '2-5') .default(null); expect(result).toBe(null); @@ -141,36 +141,36 @@ describe('$match test suite', () => { LOADING, ERROR } - let result = $switch(pending) - .case({ status: { value: 'success' } }, Result.SUCCESS) - .case({ status: { value: "error" } }, Result.ERROR) - .case({ status: { value: 'pending' } }, Result.LOADING) + let result = $match(pending) + .with({ status: { value: 'success' } }, Result.SUCCESS) + .with({ status: { value: "error" } }, Result.ERROR) + .with({ status: { value: 'pending' } }, Result.LOADING) .default(null); expect(result).toBe(Result.LOADING); - result = $switch(error) - .case({ status: { value: 'success' } }, Result.SUCCESS) - .case({ status: { value: "error" } }, Result.ERROR) - .case({ status: { value: 'pending' } }, Result.LOADING) + result = $match(error) + .with({ status: { value: 'success' } }, Result.SUCCESS) + .with({ status: { value: "error" } }, Result.ERROR) + .with({ status: { value: 'pending' } }, Result.LOADING) .default(null); expect(result).toBe(Result.ERROR); - result = $switch(success) - .case({ status: { value: 'success' } }, Result.SUCCESS) - .case({ status: { value: "error" } }, Result.ERROR) - .case({ status: { value: 'pending' } }, Result.LOADING) + result = $match(success) + .with({ status: { value: 'success' } }, Result.SUCCESS) + .with({ status: { value: "error" } }, Result.ERROR) + .with({ status: { value: 'pending' } }, Result.LOADING) .default(null); expect(result).toBe(Result.SUCCESS); - result = $switch(nope) - .case({ status: { value: 'success' } }, Result.SUCCESS) - .case({ status: { value: "error" } }, Result.ERROR) - .case({ status: { value: 'pending' } }, Result.LOADING) + result = $match(nope) + .with({ status: { value: 'success' } }, Result.SUCCESS) + .with({ status: { value: "error" } }, Result.ERROR) + .with({ status: { value: 'pending' } }, Result.LOADING) .default(null); @@ -210,36 +210,36 @@ describe('$match test suite', () => { LOADING, ERROR } - let result = $switch(pending) - .case({ status: 'success' }, Result.SUCCESS) - .case({ status: 'error' }, Result.ERROR) - .case({ status: 'pending' }, Result.LOADING) + let result = $match(pending) + .with({ status: 'success' }, Result.SUCCESS) + .with({ status: 'error' }, Result.ERROR) + .with({ status: 'pending' }, Result.LOADING) .default(null); expect(result).toBe(Result.LOADING); - result = $switch(error) - .case({ status: 'success' }, Result.SUCCESS) - .case({ status: 'error' }, Result.ERROR) - .case({ status: 'pending' }, Result.LOADING) + result = $match(error) + .with({ status: 'success' }, Result.SUCCESS) + .with({ status: 'error' }, Result.ERROR) + .with({ status: 'pending' }, Result.LOADING) .default(null); expect(result).toBe(Result.ERROR); - result = $switch(success) - .case({ status: 'success' }, Result.SUCCESS) - .case({ status: 'error' }, Result.ERROR) - .case({ status: 'pending' }, Result.LOADING) + result = $match(success) + .with({ status: 'success' }, Result.SUCCESS) + .with({ status: 'error' }, Result.ERROR) + .with({ status: 'pending' }, Result.LOADING) .default(null); expect(result).toBe(Result.SUCCESS); - result = $switch(nope) - .case({ status: 'success' }, Result.SUCCESS) - .case({ status: 'error' }, Result.ERROR) - .case({ status: 'pending' }, Result.LOADING) + result = $match(nope) + .with({ status: 'success' }, Result.SUCCESS) + .with({ status: 'error' }, Result.ERROR) + .with({ status: 'pending' }, Result.LOADING) .default(null); diff --git a/packages/core/src/conditional/SwitchEvaluation.ts b/packages/core/src/conditional/MatchEvaluation.ts similarity index 95% rename from packages/core/src/conditional/SwitchEvaluation.ts rename to packages/core/src/conditional/MatchEvaluation.ts index 9fc3c09..3979a6e 100644 --- a/packages/core/src/conditional/SwitchEvaluation.ts +++ b/packages/core/src/conditional/MatchEvaluation.ts @@ -2,14 +2,14 @@ type DeepPartial = T extends object ? { [P in keyof T]?: DeepPartial; } : T; type CaseParams = T extends object ? [...(DeepPartial | boolean)[], any] : [...(T | boolean)[], any]; -class SwitchEvaluation { +export default class MatchEvaluation { #input: T; #result: any; constructor(input: T) { this.#input = input; } - case(...args: CaseParams) { + with(...args: CaseParams) { const patterns = args.slice(0, -1); const expression = args.at(-1); if (this.#result !== undefined) return this; @@ -57,6 +57,4 @@ class SwitchEvaluation { if (typeof result === "function") return result(this.#input); return result; } -} - -export default SwitchEvaluation; \ No newline at end of file +} \ No newline at end of file diff --git a/packages/core/src/conditional/index.ts b/packages/core/src/conditional/index.ts index acb6904..9339798 100644 --- a/packages/core/src/conditional/index.ts +++ b/packages/core/src/conditional/index.ts @@ -1,11 +1,11 @@ -import LogicalEvaluation from "./LogicalEvaluation"; -import MatchingEvaluation from "./SwitchEvaluation"; +import IfEvaluation from "./IfEvaluation"; +import MatchingEvaluation from "./MatchEvaluation"; export function $if(bool: boolean) { - return new LogicalEvaluation(bool); + return new IfEvaluation(bool); } -export function $switch(input: T) { +export function $match(input: T) { return new MatchingEvaluation(input); } @@ -13,4 +13,4 @@ export function v(value: T) { return { value }; } -export type { LogicalEvaluation, MatchingEvaluation }; \ No newline at end of file +export type { IfEvaluation, MatchingEvaluation }; \ No newline at end of file From c44f3617ec7ba08a246966ac4ad75ae6a8d50124 Mon Sep 17 00:00:00 2001 From: NGBAMA William Date: Sat, 25 Jan 2025 09:29:38 +0100 Subject: [PATCH 2/6] refactor(vue): rename $switch to $match --- packages/vue/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 7d147a1..0d4ef2d 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -3,7 +3,7 @@ export { createReactHook, useUnison, $if, - $switch, + $match, v, nextTick, getCurrentInstance, From 6708133ea4b3dbbd1f547ce0ca3513805a198117 Mon Sep 17 00:00:00 2001 From: NGBAMA William Date: Sat, 25 Jan 2025 09:30:08 +0100 Subject: [PATCH 3/6] refactor(core): rename LogicalEvaluation to IfEvaluation --- .../conditional/{LogicalEvaluation.ts => IfEvaluation.ts} | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) rename packages/core/src/conditional/{LogicalEvaluation.ts => IfEvaluation.ts} (92%) diff --git a/packages/core/src/conditional/LogicalEvaluation.ts b/packages/core/src/conditional/IfEvaluation.ts similarity index 92% rename from packages/core/src/conditional/LogicalEvaluation.ts rename to packages/core/src/conditional/IfEvaluation.ts index 5109b63..4f76206 100644 --- a/packages/core/src/conditional/LogicalEvaluation.ts +++ b/packages/core/src/conditional/IfEvaluation.ts @@ -1,4 +1,4 @@ -class LogicalEvaluation { +export default class IfEvaluation { #state = false; #onTrue: any; #alternative: any; @@ -31,6 +31,4 @@ class LogicalEvaluation { if (typeof result === "function") return result(); return result; } -} - -export default LogicalEvaluation; \ No newline at end of file +} \ No newline at end of file From 7960430ca5c73e8ec890d1d4e5b7af7baa020e50 Mon Sep 17 00:00:00 2001 From: NGBAMA William Date: Sat, 25 Jan 2025 09:37:40 +0100 Subject: [PATCH 4/6] test: include file test in folders --- vitest.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vitest.config.ts b/vitest.config.ts index 1262908..6994a3a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -36,8 +36,8 @@ export default defineConfig({ setupFiles: 'scripts/setup-vitest.ts', environment: 'jsdom', include: [ - 'packages/core/__tests__/*.spec.{js,jsx,ts,tsx}', - 'packages/vue/__tests__/*.spec.{js,jsx,ts,tsx}', + 'packages/core/__tests__/**/*.spec.{js,jsx,ts,tsx}', + 'packages/vue/__tests__/**/*.spec.{js,jsx,ts,tsx}', ], }, }) From d46d0ea805821befccb6c96201298908d91200eb Mon Sep 17 00:00:00 2001 From: NGBAMA William Date: Sat, 25 Jan 2025 09:38:44 +0100 Subject: [PATCH 5/6] test(core): rename switch to match --- .../core/__tests__/conditional/{switch.spec.ts => match.spec.ts} | 1 - 1 file changed, 1 deletion(-) rename packages/core/__tests__/conditional/{switch.spec.ts => match.spec.ts} (99%) diff --git a/packages/core/__tests__/conditional/switch.spec.ts b/packages/core/__tests__/conditional/match.spec.ts similarity index 99% rename from packages/core/__tests__/conditional/switch.spec.ts rename to packages/core/__tests__/conditional/match.spec.ts index 1073c50..38f7de0 100644 --- a/packages/core/__tests__/conditional/switch.spec.ts +++ b/packages/core/__tests__/conditional/match.spec.ts @@ -245,5 +245,4 @@ describe('$match test suite', () => { expect(result).toBe(null); }) - }) \ No newline at end of file From a1134904a817bf1f3ff9a5d07be4b21373cdc4fb Mon Sep 17 00:00:00 2001 From: NGBAMA William Date: Sat, 25 Jan 2025 09:39:05 +0100 Subject: [PATCH 6/6] chore: add changeset --- .changeset/heavy-seas-sparkle.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/heavy-seas-sparkle.md diff --git a/.changeset/heavy-seas-sparkle.md b/.changeset/heavy-seas-sparkle.md new file mode 100644 index 0000000..fe38a74 --- /dev/null +++ b/.changeset/heavy-seas-sparkle.md @@ -0,0 +1,6 @@ +--- +'@unisonjs/core': patch +'@unisonjs/vue': patch +--- + +Rename $switch to $match