From c39c32a7de5d802d4f7bf4ab46d4ca19280ed7c0 Mon Sep 17 00:00:00 2001 From: omrilotan Date: Thu, 24 Oct 2024 11:20:20 +0100 Subject: [PATCH] Improve tree shaking --- CHANGELOG.md | 6 +++++ package.json | 4 ++-- src/flavours/index.ts | 46 ++++++++++++++++++++------------------- src/index.ts | 32 ++++++++++++++++----------- src/isObject/test.ts | 21 ++++++++++++++++++ types/flavours/index.d.ts | 21 +++++++++++++++++- 6 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 src/isObject/test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 148dbf4..e5f162c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# 3.1.2 2023-09-12 + +## Improvement + +Optimise tree shaking: Omit "falvoured" variables if not used. + # 3.1.1 2023-01-26 ## Enhancement diff --git a/package.json b/package.json index 56a78b4..7e1d3ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "paraphrase", - "version": "3.1.1", + "version": "3.1.2", "description": "🧩 Create flavoured string template interpolation", "keywords": [ "string", @@ -55,7 +55,7 @@ }, "devDependencies": { "@types/jest": "^29.4.0", - "esbuild": "^0.19.2", + "esbuild": "^0.24.0", "jest": "^29.4.0", "prettier": "^3.0.3", "ts-jest": "^29.0.5" diff --git a/src/flavours/index.ts b/src/flavours/index.ts index b8b6c74..69147d6 100644 --- a/src/flavours/index.ts +++ b/src/flavours/index.ts @@ -1,22 +1,24 @@ -export const flavours: Record = { - /** - * Template: 'Hello, ${name}' - */ - dollar: /\${([^{}]*)}/gm, - /** - * Template: 'Hello, {{name}}' - */ - double: /{{([^{}]*)}}/gm, - /** - * Template: 'Hello, {name}' - */ - single: /{([^{}]*)}/gm, - /** - * Template: 'Hello, #{name}' - */ - hash: /#{([^{}]*)}/gm, - /** - * Template: 'Hello, %{name}' - */ - percent: /%{([^{}]*)}/gm, -}; +/** + * Template: 'Hello, ${name}' + */ +export const dollarPattern = /\${([^{}]*)}/gm; + +/** + * Template: 'Hello, {{name}}' + */ +export const doublePattern = /{{([^{}]*)}}/gm; + +/** + * Template: 'Hello, {name}' + */ +export const singlePattern = /{([^{}]*)}/gm; + +/** + * Template: 'Hello, #{name}' + */ +export const hashPattern = /#{([^{}]*)}/gm; + +/** + * Template: 'Hello, %{name}' + */ +export const percentPattern = /%{([^{}]*)}/gm; diff --git a/src/index.ts b/src/index.ts index cb614cc..a2a5f4a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,12 @@ import { notate } from "./notate/index"; import { isObject } from "./isObject/index"; -import { flavours } from "./flavours/index"; +import { + dollarPattern, + doublePattern, + percentPattern, + hashPattern, + singlePattern, +} from "./flavours/index"; /** * Valid types of results for the interpolated string @@ -104,8 +110,8 @@ export function paraphrase( return VALID_RESULT_TYPES.includes(typeof replacement as any) ? replacement : options.clean - ? "" - : haystack; + ? "" + : haystack; } const result = (patterns as RegExp[]).reduce( @@ -126,15 +132,15 @@ export function paraphrase( return phraser as Phraser; } -export const dollar = paraphrase(flavours.dollar); -export const double = paraphrase(flavours.double); -export const single = paraphrase(flavours.single); -export const percent = paraphrase(flavours.percent); -export const hash = paraphrase(flavours.hash); +export const dollar = paraphrase(dollarPattern); +export const double = paraphrase(doublePattern); +export const single = paraphrase(singlePattern); +export const percent = paraphrase(percentPattern); +export const hash = paraphrase(hashPattern); export const loose = paraphrase( - flavours.dollar, - flavours.double, - flavours.percent, - flavours.hash, - flavours.single, + dollarPattern, + doublePattern, + percentPattern, + hashPattern, + singlePattern, ); diff --git a/src/isObject/test.ts b/src/isObject/test.ts new file mode 100644 index 0000000..3b2a9e8 --- /dev/null +++ b/src/isObject/test.ts @@ -0,0 +1,21 @@ +/* eslint-env mocha */ + +import { isObject } from "."; + +describe("isObject", (): void => { + test.each([ + [{}, true], + [{ a: 1 }, true], + [[], false], + [null, false], + [undefined, false], + [1, false], + ["", false], + [true, false], + [new Map(), false], + [new Set(), false], + [() => {}, false], + ])("isObject(%p) === %p", (input, expected): void => + expect(isObject(input)).toBe(expected), + ); +}); diff --git a/types/flavours/index.d.ts b/types/flavours/index.d.ts index 9bc4554..3f130f5 100644 --- a/types/flavours/index.d.ts +++ b/types/flavours/index.d.ts @@ -1 +1,20 @@ -export declare const flavours: Record; +/** + * Template: 'Hello, ${name}' + */ +export declare const dollarPattern: RegExp; +/** + * Template: 'Hello, {{name}}' + */ +export declare const doublePattern: RegExp; +/** + * Template: 'Hello, {name}' + */ +export declare const singlePattern: RegExp; +/** + * Template: 'Hello, #{name}' + */ +export declare const hashPattern: RegExp; +/** + * Template: 'Hello, %{name}' + */ +export declare const percentPattern: RegExp;