From 69640da28ec3da1412353a7f37e48797831615aa Mon Sep 17 00:00:00 2001 From: behnam Date: Tue, 29 Oct 2024 19:53:28 +0300 Subject: [PATCH 01/37] Add basic di in client side --- .eslintrc.json | 10 + package.json | 12 +- src/app/layout.tsx | 2 +- src/app/test/page.tsx | 8 + src/app/test/vm/test-button-vm.ts | 17 + src/bootstrap/di/init-di.ts | 18 + src/bootstrap/helpers/type-helper.ts | 8 + src/bootstrap/helpers/view/base-view.tsx | 95 + src/bootstrap/helpers/vm/base-vm.ts | 46 + src/bootstrap/helpers/vm/i-base-vm.ts | 3 + src/bootstrap/helpers/vm/vm-decorator.ts | 9 + src/components/button/button-vm.ts | 6 + src/components/button/button.tsx | 10 + tsconfig.json | 2 + yarn.lock | 2879 ++++++++++++++++++++++ 15 files changed, 3119 insertions(+), 6 deletions(-) create mode 100644 src/app/test/page.tsx create mode 100644 src/app/test/vm/test-button-vm.ts create mode 100644 src/bootstrap/di/init-di.ts create mode 100644 src/bootstrap/helpers/type-helper.ts create mode 100644 src/bootstrap/helpers/view/base-view.tsx create mode 100644 src/bootstrap/helpers/vm/base-vm.ts create mode 100644 src/bootstrap/helpers/vm/i-base-vm.ts create mode 100644 src/bootstrap/helpers/vm/vm-decorator.ts create mode 100644 src/components/button/button-vm.ts create mode 100644 src/components/button/button.tsx create mode 100644 yarn.lock diff --git a/.eslintrc.json b/.eslintrc.json index 3722418..60d067f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,3 +1,13 @@ { + "overrides": [ + { + "files": [ + "src/**/*-vm.ts" + ], + "rules": { + "react-hooks/rules-of-hooks": "off" + } + } + ], "extends": ["next/core-web-vitals", "next/typescript"] } diff --git a/package.json b/package.json index d10c385..2db330d 100644 --- a/package.json +++ b/package.json @@ -5,22 +5,24 @@ "scripts": { "dev": "next dev --turbopack", "build": "next build", - "start": "next start", + "start": "next start --port 4000", "lint": "next lint" }, "dependencies": { + "next": "15.0.1", "react": "19.0.0-rc-69d4b800-20241021", "react-dom": "19.0.0-rc-69d4b800-20241021", - "next": "15.0.1" + "reflect-metadata": "^0.2.2", + "tsyringe": "^4.8.0" }, "devDependencies": { - "typescript": "^5", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "eslint": "^8", + "eslint-config-next": "15.0.1", "postcss": "^8", "tailwindcss": "^3.4.1", - "eslint": "^8", - "eslint-config-next": "15.0.1" + "typescript": "^5" } } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a36cde0..1cd9211 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,7 @@ +import "reflect-metadata" import type { Metadata } from "next"; import localFont from "next/font/local"; import "./globals.css"; - const geistSans = localFont({ src: "./fonts/GeistVF.woff", variable: "--font-geist-sans", diff --git a/src/app/test/page.tsx b/src/app/test/page.tsx new file mode 100644 index 0000000..f08fc5e --- /dev/null +++ b/src/app/test/page.tsx @@ -0,0 +1,8 @@ +"use client" +import "reflect-metadata" +import TestButtonVM from "@/app/test/vm/test-button-vm"; +import Button from "@/components/button/button"; + +export default function Page() { + return