From 7894c4bd635d1208b612a392f33d0545cb7cf6ed Mon Sep 17 00:00:00 2001 From: "S. Amir Mohammad Najafi" Date: Wed, 3 Jan 2024 21:19:26 +0330 Subject: [PATCH 1/6] feat(nano-build): __package_version__ types --- packages/nano-build/README.md | 2 +- packages/nano-build/global.d.ts | 5 +++++ packages/nano-build/nano-build.cjs | 2 +- packages/nano-build/package.json | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 packages/nano-build/global.d.ts diff --git a/packages/nano-build/README.md b/packages/nano-build/README.md index 1b3d0f65..b26f3dcd 100644 --- a/packages/nano-build/README.md +++ b/packages/nano-build/README.md @@ -43,7 +43,7 @@ Add the following scripts to your `package.json`: js: "/* @package_name v@package_version */" }, define: { - __package_version: `'@package_version'`, + __package_version__: `'@package_version'`, }, } ``` diff --git a/packages/nano-build/global.d.ts b/packages/nano-build/global.d.ts new file mode 100644 index 00000000..6e775516 --- /dev/null +++ b/packages/nano-build/global.d.ts @@ -0,0 +1,5 @@ +export {}; + +declare global { + var __package_version__: string; +} diff --git a/packages/nano-build/nano-build.cjs b/packages/nano-build/nano-build.cjs index 5357c1b7..f020bfe4 100755 --- a/packages/nano-build/nano-build.cjs +++ b/packages/nano-build/nano-build.cjs @@ -36,7 +36,7 @@ const defaultOptions = { js: '/* ' + packageJson.name + ' v' + packageJson.version + ' */', }, define: { - __package_version: `'${packageJson.version}'`, + __package_version__: `'${packageJson.version}'`, }, }; diff --git a/packages/nano-build/package.json b/packages/nano-build/package.json index 0647f43e..0f2e8f0e 100644 --- a/packages/nano-build/package.json +++ b/packages/nano-build/package.json @@ -24,6 +24,8 @@ ], "type": "commonjs", "bin": "./nano-build.cjs", + "main": "", + "types": "./global.d.ts", "license": "MIT", "files": [ "**/*.{js,mjs,cjs,map,d.ts,html,md}", From 77fcdf6fc8701910a7d503b7fba89fd284f36833 Mon Sep 17 00:00:00 2001 From: "S. Amir Mohammad Najafi" Date: Wed, 3 Jan 2024 21:24:24 +0330 Subject: [PATCH 2/6] feat(dedupe): new package --- packages/dedupe/README.md | 11 +++++ packages/dedupe/demo/dedupe.mjs | 14 ++++++ packages/dedupe/package.json | 76 +++++++++++++++++++++++++++++++++ packages/dedupe/src/main.ts | 36 ++++++++++++++++ packages/dedupe/tsconfig.json | 11 +++++ yarn.lock | 14 ++++++ 6 files changed, 162 insertions(+) create mode 100644 packages/dedupe/README.md create mode 100644 packages/dedupe/demo/dedupe.mjs create mode 100644 packages/dedupe/package.json create mode 100644 packages/dedupe/src/main.ts create mode 100644 packages/dedupe/tsconfig.json diff --git a/packages/dedupe/README.md b/packages/dedupe/README.md new file mode 100644 index 00000000..0af28969 --- /dev/null +++ b/packages/dedupe/README.md @@ -0,0 +1,11 @@ +# Dedupe + +A global package manager for defining and managing package versions across different parts of applications to prevent version conflicts. + +## Example usage + +```ts +import {definePackage} from '@alwatr/dedupe'; + +definePackage('@alwatr/logger', '2.0.0'); +``` diff --git a/packages/dedupe/demo/dedupe.mjs b/packages/dedupe/demo/dedupe.mjs new file mode 100644 index 00000000..06250964 --- /dev/null +++ b/packages/dedupe/demo/dedupe.mjs @@ -0,0 +1,14 @@ +import {definePackage, definedPackageList} from '@alwatr/dedupe'; + +// Must throw an error + +console.log('define test1 package') +definePackage('@scope/test1'); + +console.log('define test2 package') +definePackage('@scope/test2', 'v1.0.0'); + +console.log('definedPackageList:', definedPackageList) + +console.log('redefine test2 package') +definePackage('@scope/test2'); diff --git a/packages/dedupe/package.json b/packages/dedupe/package.json new file mode 100644 index 00000000..047d955d --- /dev/null +++ b/packages/dedupe/package.json @@ -0,0 +1,76 @@ +{ + "name": "@alwatr/dedupe", + "version": "2.4.1", + "description": "A global package manager for defining and managing package versions across different parts of applications to prevent version conflicts.", + "author": "S. Ali Mihandoost ", + "keywords": [ + "dedupe", + "define-package", + "deduplicate", + "package", + "cross-platform", + "ECMAScript", + "typescript", + "javascript", + "node", + "nodejs", + "esm", + "module", + "utility", + "util", + "utils", + "nanolib", + "alwatr" + ], + "type": "module", + "main": "./dist/main.cjs", + "module": "./dist/main.mjs", + "types": "./dist/main.d.ts", + "exports": { + ".": { + "import": "./dist/main.mjs", + "require": "./dist/main.cjs", + "types": "./dist/main.d.ts" + } + }, + "license": "MIT", + "files": [ + "**/*.{js,mjs,cjs,map,d.ts,html,md}", + "!demo/**/*" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/Alwatr/nanolib", + "directory": "packages/dedupe" + }, + "homepage": "https://github.com/Alwatr/nanolib/tree/next/packages/dedupe#readme", + "bugs": { + "url": "https://github.com/Alwatr/nanolib/issues" + }, + "prettier": "@alwatr/prettier-config", + "scripts": { + "b": "yarn run build", + "w": "yarn run watch", + "c": "yarn run clean", + "cb": "yarn run clean && yarn run build", + "d": "yarn run build:es && DEBUG=1 yarn node", + "build": "yarn run build:ts & yarn run build:es", + "build:es": "nano-build --preset=module", + "build:ts": "tsc --build", + "watch": "yarn run watch:ts & yarn run watch:es", + "watch:es": "yarn run build:es --watch", + "watch:ts": "yarn run build:ts --watch --preserveWatchOutput", + "clean": "rm -rfv dist *.tsbuildinfo" + }, + "devDependencies": { + "@alwatr/nano-build": "workspace:^", + "@alwatr/prettier-config": "workspace:^", + "@alwatr/tsconfig-base": "workspace:^", + "@alwatr/type-helper": "workspace:^", + "@types/node": "^20.10.6", + "typescript": "^5.3.3" + } +} diff --git a/packages/dedupe/src/main.ts b/packages/dedupe/src/main.ts new file mode 100644 index 00000000..f0710eca --- /dev/null +++ b/packages/dedupe/src/main.ts @@ -0,0 +1,36 @@ +/// + +import type {Dictionary} from '@alwatr/type-helper' + +declare global { + // eslint-disable-next-line no-var + var __dedupe__: true; +} + +if (typeof __dedupe__ !== 'undefined') { + throw new Error('duplicate_dedupe'); +} + +export const definedPackageList: Dictionary = {}; + +/** + * Global define package for managing package versions to prevent version conflicts. + * @param packageName package name including scope. e.g. `@scope/package-name` + * @param version package version (optional) + * + * @example + * ```typescript + * definePackage('@scope/package-name', '2.0.1'); + * ``` + */ +export function definePackage (packageName: string, version = 'v?'): void { + if (packageName in definedPackageList) { + throw new Error('duplicate_package', { + cause: packageName, + }); + } + + definedPackageList[packageName] = version; +} + +definePackage('@alwatr/dedupe', __package_version__); diff --git a/packages/dedupe/tsconfig.json b/packages/dedupe/tsconfig.json new file mode 100644 index 00000000..879b4c5c --- /dev/null +++ b/packages/dedupe/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@alwatr/tsconfig-base/tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "emitDeclarationOnly": true, + "composite": true, + }, + "include": ["src/**/*.ts"], + "references": [] +} diff --git a/yarn.lock b/yarn.lock index 98d528d9..5eafa5b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,6 +26,19 @@ __metadata: languageName: unknown linkType: soft +"@alwatr/dedupe@workspace:^, @alwatr/dedupe@workspace:packages/dedupe": + version: 0.0.0-use.local + resolution: "@alwatr/dedupe@workspace:packages/dedupe" + dependencies: + "@alwatr/nano-build": "workspace:^" + "@alwatr/prettier-config": "workspace:^" + "@alwatr/tsconfig-base": "workspace:^" + "@alwatr/type-helper": "workspace:^" + "@types/node": "npm:^20.10.6" + typescript: "npm:^5.3.3" + languageName: unknown + linkType: soft + "@alwatr/deep-clone@workspace:packages/deep-clone": version: 0.0.0-use.local resolution: "@alwatr/deep-clone@workspace:packages/deep-clone" @@ -110,6 +123,7 @@ __metadata: version: 0.0.0-use.local resolution: "@alwatr/logger@workspace:packages/logger" dependencies: + "@alwatr/dedupe": "workspace:^" "@alwatr/nano-build": "workspace:^" "@alwatr/platform-info": "workspace:^" "@alwatr/prettier-config": "workspace:^" From d89d076c9fd0dd311804831b1ac0ea955efd4b6d Mon Sep 17 00:00:00 2001 From: "S. Amir Mohammad Najafi" Date: Wed, 3 Jan 2024 21:25:39 +0330 Subject: [PATCH 3/6] feat(logger): use alwatr dedupe BREAKING CHANGE: define packages removed and must use @alwatr/dedupe instead --- packages/logger/README.md | 2 +- packages/logger/package.json | 1 + packages/logger/src/main.ts | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/logger/README.md b/packages/logger/README.md index e3e7e9ff..45c637c2 100644 --- a/packages/logger/README.md +++ b/packages/logger/README.md @@ -1,4 +1,4 @@ -# Alwatr Logger - `@alwatr/logger` +# Logger Fancy colorful console debugger with custom scope written in tiny TypeScript, ES module. diff --git a/packages/logger/package.json b/packages/logger/package.json index 0744576e..137476ed 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -73,6 +73,7 @@ "typescript": "^5.3.3" }, "dependencies": { + "@alwatr/dedupe": "workspace:^", "@alwatr/platform-info": "workspace:^" } } diff --git a/packages/logger/src/main.ts b/packages/logger/src/main.ts index a7852117..7e31bb2f 100644 --- a/packages/logger/src/main.ts +++ b/packages/logger/src/main.ts @@ -1,7 +1,12 @@ +/// + +import {definePackage} from '@alwatr/dedupe'; import {platformInfo} from '@alwatr/platform-info'; import type {AlwatrLogger} from './type.js'; +definePackage('@alwatr/dedupe', __package_version__); + export const debugMode = platformInfo.development || platformInfo.isCli ? process.env.DEBUG !== undefined && process.env.DEBUG !== '' : typeof localStorage !== 'undefined' && localStorage.getItem('debug') === '1'; From de8a3f93bdb5a786c42f56324072b4b9520ce3a1 Mon Sep 17 00:00:00 2001 From: Ali Mihandoost Date: Wed, 3 Jan 2024 21:37:48 +0330 Subject: [PATCH 4/6] fix: __package_version__ global type --- packages/dedupe/src/main.ts | 5 +++-- packages/logger/package.json | 8 ++++---- packages/logger/src/main.ts | 2 -- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/dedupe/src/main.ts b/packages/dedupe/src/main.ts index f0710eca..02a0d7ca 100644 --- a/packages/dedupe/src/main.ts +++ b/packages/dedupe/src/main.ts @@ -1,10 +1,11 @@ -/// - import type {Dictionary} from '@alwatr/type-helper' declare global { // eslint-disable-next-line no-var var __dedupe__: true; + + // eslint-disable-next-line no-var + var __package_version__: string; } if (typeof __dedupe__ !== 'undefined') { diff --git a/packages/logger/package.json b/packages/logger/package.json index 137476ed..c1984bde 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -65,15 +65,15 @@ "watch:ts": "yarn run build:ts --watch --preserveWatchOutput", "clean": "rm -rfv dist *.tsbuildinfo" }, + "dependencies": { + "@alwatr/dedupe": "workspace:^", + "@alwatr/platform-info": "workspace:^" + }, "devDependencies": { "@alwatr/nano-build": "workspace:^", "@alwatr/prettier-config": "workspace:^", "@alwatr/tsconfig-base": "workspace:^", "@types/node": "^20.10.6", "typescript": "^5.3.3" - }, - "dependencies": { - "@alwatr/dedupe": "workspace:^", - "@alwatr/platform-info": "workspace:^" } } diff --git a/packages/logger/src/main.ts b/packages/logger/src/main.ts index 7e31bb2f..0c4d0ab8 100644 --- a/packages/logger/src/main.ts +++ b/packages/logger/src/main.ts @@ -1,5 +1,3 @@ -/// - import {definePackage} from '@alwatr/dedupe'; import {platformInfo} from '@alwatr/platform-info'; From dc02ac93a300ec4c2f0619b05118764d3a8e02e3 Mon Sep 17 00:00:00 2001 From: Ali Mihandoost Date: Wed, 3 Jan 2024 21:49:39 +0330 Subject: [PATCH 5/6] docs(dedupe): update desc abd enhance examples --- packages/dedupe/README.md | 8 +++++++- packages/dedupe/package.json | 3 ++- packages/dedupe/src/main.ts | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/dedupe/README.md b/packages/dedupe/README.md index 0af28969..5d3e19c3 100644 --- a/packages/dedupe/README.md +++ b/packages/dedupe/README.md @@ -1,6 +1,6 @@ # Dedupe -A global package manager for defining and managing package versions across different parts of applications to prevent version conflicts. +A package manager helper tool for debug list of defined (imported) packages in your ecosystem and prevent to duplicate import (install) multiple versions of the same package in your project (deduplicate packages). ## Example usage @@ -9,3 +9,9 @@ import {definePackage} from '@alwatr/dedupe'; definePackage('@alwatr/logger', '2.0.0'); ``` + +You can use __package_version__ to automatically obtain the version of the package if you are using @alwatr/nano-build to build your package. + +```ts +definePackage('@alwatr/logger', __package_version__); +``` diff --git a/packages/dedupe/package.json b/packages/dedupe/package.json index 047d955d..13084c51 100644 --- a/packages/dedupe/package.json +++ b/packages/dedupe/package.json @@ -1,13 +1,14 @@ { "name": "@alwatr/dedupe", "version": "2.4.1", - "description": "A global package manager for defining and managing package versions across different parts of applications to prevent version conflicts.", + "description": "A package manager helper tool for debug list of defined (imported) packages in your ecosystem and prevent to duplicate import (install) multiple versions of the same package in your project (deduplicate packages).", "author": "S. Ali Mihandoost ", "keywords": [ "dedupe", "define-package", "deduplicate", "package", + "package-manager", "cross-platform", "ECMAScript", "typescript", diff --git a/packages/dedupe/src/main.ts b/packages/dedupe/src/main.ts index 02a0d7ca..a53f3aed 100644 --- a/packages/dedupe/src/main.ts +++ b/packages/dedupe/src/main.ts @@ -21,7 +21,7 @@ export const definedPackageList: Dictionary = {}; * * @example * ```typescript - * definePackage('@scope/package-name', '2.0.1'); + * definePackage('@scope/package-name', __package_version__); * ``` */ export function definePackage (packageName: string, version = 'v?'): void { From e2e5c6c8175d6f7bfba1d103c1cac2f647aa6116 Mon Sep 17 00:00:00 2001 From: Ali Mihandoost Date: Wed, 3 Jan 2024 21:51:07 +0330 Subject: [PATCH 6/6] fix(logger): definePackage --- packages/logger/src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/logger/src/main.ts b/packages/logger/src/main.ts index 0c4d0ab8..de8e611b 100644 --- a/packages/logger/src/main.ts +++ b/packages/logger/src/main.ts @@ -3,7 +3,7 @@ import {platformInfo} from '@alwatr/platform-info'; import type {AlwatrLogger} from './type.js'; -definePackage('@alwatr/dedupe', __package_version__); +definePackage('@alwatr/logger', __package_version__); export const debugMode = platformInfo.development || platformInfo.isCli ? process.env.DEBUG !== undefined && process.env.DEBUG !== ''