From 475edfc3a88dc19b7d4bd2fdc39ee4b2e9d5f5ed Mon Sep 17 00:00:00 2001 From: klmhyeonwoo Date: Thu, 28 Aug 2025 22:02:46 +0900 Subject: [PATCH 1/4] feat: building a deployment environment --- README.md | 21 +++++++++++++++------ dori-utils-0.0.1.tgz | Bin 44324 -> 0 bytes package.json | 43 +++++++++++++++++++++++++++++++++---------- pnpm-lock.yaml | 16 +++------------- vite.config.ts | 2 +- 5 files changed, 52 insertions(+), 30 deletions(-) delete mode 100644 dori-utils-0.0.1.tgz diff --git a/README.md b/README.md index 9952f6e..4948765 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# @dori/utils +# corekit A comprehensive collection of TypeScript utility functions for modern web development. ## Features -- ๐Ÿ› ๏ธ **Comprehensive**: String, object, cookie, number, and validation utilities +- ๐Ÿ› ๏ธ **Comprehensive**: String, object, cookie, number, validation, and common utilities - ๐Ÿ“ฆ **Tree-shakable**: Import only what you need - ๐Ÿ”’ **Type-safe**: Full TypeScript support with type definitions - โšก **Lightweight**: Minimal dependencies and optimized for performance @@ -13,11 +13,11 @@ A comprehensive collection of TypeScript utility functions for modern web develo ## Installation ```bash -npm install @dori/utils +npm install corekit # or -pnpm add @dori/utils +pnpm add corekit # or -yarn add @dori/utils +yarn add corekit ``` ## Usage @@ -29,7 +29,8 @@ import { cookieUtil, numberUtil, validationUtil, -} from "@dori/utils"; + commonUtil, +} from "corekit"; // String utilities const escaped = stringUtil.escapeHtml("
Hello
"); @@ -47,6 +48,10 @@ const difference = numberUtil.subtract(10, 3); // 7 const isValid = validationUtil.checkEmail("user@example.com"); // true const isHttpUrl = validationUtil.checkHttpUrl("https://example.com"); // true +// Common utilities +const empty = commonUtil.isEmpty(""); // true +const notEmpty = commonUtil.isEmpty("hello"); // false + // Cookie utilities cookieUtil.setCookie("theme", "dark"); const theme = cookieUtil.getCookie("theme"); @@ -74,6 +79,10 @@ const theme = cookieUtil.getCookie("theme"); - `checkEmail(email: string): boolean` - Validates email format - `checkHttpUrl(url: string): boolean` - Validates HTTP/HTTPS URL format +### CommonUtil + +- `isEmpty(value: unknown): boolean` - Checks if a value is empty (null, undefined, "", 0, [], {}, empty Set/Map, NaN, or invalid Date) + ### CookieUtil - `setCookie(name: string, value: string, options?: object): void` - Sets a cookie diff --git a/dori-utils-0.0.1.tgz b/dori-utils-0.0.1.tgz deleted file mode 100644 index 287c8ce6e9408b88973e680bf948e77722fd0dfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44324 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

`i$=SzcDM~^6 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 diff --git a/package.json b/package.json index 64ee9c1..d443318 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,53 @@ { - "name": "@dori/utils", + "name": "corekit", "version": "0.0.1", - "main": "dist/bundle/dori-utils.js", + "description": "A lightweight and modern utility toolkit for JavaScript and TypeScript. CoreKit provides essential functions for strings, arrays, objects, and more, designed for simplicity and productivity.", + "keywords": [ + "javascript", + "typescript", + "utilities", + "utility-functions", + "toolkit", + "helper", + "lodash", + "es-toolkit", + "string-utils", + "array-utils", + "object-utils", + "functional", + "corekit", + "esm", + "cjs" + ], + "license": "MIT", + "type": "module", + "main": "dist/bundle/corekit.js", "exports": { ".": { "types": "./dist/types/index.d.ts", - "require": "./dist/bundle/dori-utils.cjs", - "import": "./dist/bundle/dori-utils.js" + "require": "./dist/bundle/corekit.cjs", + "import": "./dist/bundle/corekit.js" } }, - "license": "MIT", - "type": "module", "scripts": { "build": "tsc && vite build", "preview": "vite preview", "test": "vitest", "coverage": "vitest run --coverage" }, + "repository": { + "type": "git", + "url": "https://github.com/klmhyeonwoo/corekit" + }, + "bugs": { + "url": "https://github.com/klmhyeonwoo/corekit/issues" + }, + "homepage": "https://github.com/klmhyeonwoo/corekit#readme", "devDependencies": { "@types/node": "^24.3.0", + "@vitest/coverage-v8": "^3.2.4", "typescript": "~5.8.3", "vite": "^7.1.2", "vitest": "^3.2.4" - }, - "dependencies": { - "@dori/utils": "file:dori-utils-0.0.1.tgz", - "@vitest/coverage-v8": "^3.2.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90c7a78..77205f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,17 +7,13 @@ settings: importers: .: - dependencies: - '@dori/utils': - specifier: file:dori-utils-0.0.1.tgz - version: file:dori-utils-0.0.1.tgz - '@vitest/coverage-v8': - specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4(@types/node@24.3.0)) devDependencies: '@types/node': specifier: ^24.3.0 version: 24.3.0 + '@vitest/coverage-v8': + specifier: ^3.2.4 + version: 3.2.4(vitest@3.2.4(@types/node@24.3.0)) typescript: specifier: ~5.8.3 version: 5.8.3 @@ -55,10 +51,6 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@dori/utils@file:dori-utils-0.0.1.tgz': - resolution: {integrity: sha512-g/tJ39NM0Apm8eEXtbknLmZeNYdSTc/W5YbhY3/mnIFvxuVJQMFVmhYMQPzU0W3qNHV1sU8Nc1mG3TEphN4heA==, tarball: file:dori-utils-0.0.1.tgz} - version: 0.0.1 - '@esbuild/aix-ppc64@0.25.9': resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} @@ -803,8 +795,6 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@dori/utils@file:dori-utils-0.0.1.tgz': {} - '@esbuild/aix-ppc64@0.25.9': optional: true diff --git a/vite.config.ts b/vite.config.ts index 24a7047..99d568b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ lib: { entry: "package/index.ts", name: "DoriUtils", - fileName: "dori-utils", + fileName: "corekit", }, }, }); From e60d4842040b3d6f207aa6819971d73b097e2788 Mon Sep 17 00:00:00 2001 From: klmhyeonwoo Date: Thu, 28 Aug 2025 22:05:13 +0900 Subject: [PATCH 2/4] fix: build error --- vitest-report.xml | 108 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 90 insertions(+), 18 deletions(-) diff --git a/vitest-report.xml b/vitest-report.xml index 8f2c647..1c34363 100644 --- a/vitest-report.xml +++ b/vitest-report.xml @@ -1,37 +1,109 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ee16ae024058606a940eedd33a4678fdb917fadf Mon Sep 17 00:00:00 2001 From: klmhyeonwoo Date: Thu, 28 Aug 2025 22:07:29 +0900 Subject: [PATCH 3/4] fix: build error --- .github/workflows/test_coverage.yml | 7 -- vitest-report.xml | 109 ---------------------------- 2 files changed, 116 deletions(-) delete mode 100644 vitest-report.xml diff --git a/.github/workflows/test_coverage.yml b/.github/workflows/test_coverage.yml index cdbcb0f..c9fcad1 100644 --- a/.github/workflows/test_coverage.yml +++ b/.github/workflows/test_coverage.yml @@ -19,14 +19,7 @@ jobs: - name: pnpm ์„ค์น˜ run: npm install -g pnpm - run: pnpm install - - run: pnpm test -- --reporter=junit --outputFile=vitest-report.xml - run: pnpm coverage -- package/**/*.test.ts - - name: ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ PR์— ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ - uses: test-summary/action@v2 - with: - paths: /home/runner/work/utils/utils/vitest-report.xml - github-token: ${{ secrets.PR_WRITE_TOKEN }} - if: always() - name: ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒฐ๊ณผ PR์— ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€ํ•˜๊ธฐ uses: davelosert/vitest-coverage-report-action@v2 with: diff --git a/vitest-report.xml b/vitest-report.xml deleted file mode 100644 index 1c34363..0000000 --- a/vitest-report.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 235cefabe1006e659d1b5a5a8430acee55f0ea1f Mon Sep 17 00:00:00 2001 From: klmhyeonwoo Date: Thu, 28 Aug 2025 22:10:21 +0900 Subject: [PATCH 4/4] Update vite.config.ts --- vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index 99d568b..cd15813 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -13,7 +13,7 @@ export default defineConfig({ outDir: "dist/bundle", lib: { entry: "package/index.ts", - name: "DoriUtils", + name: "corekit", fileName: "corekit", }, },