From 05a1e24b43ba57974da0b03f1e19d8fa7e4ba707 Mon Sep 17 00:00:00 2001 From: Max Mykal Date: Thu, 31 Jul 2025 10:38:51 -0700 Subject: [PATCH] init --- web/shared_ui/.gitignore | 3 +++ web/shared_ui/package.json | 41 ++++++++++++++++++++++++++++++++ web/shared_ui/src/index.ts | 2 ++ web/shared_ui/src/types/index.ts | 3 +++ web/shared_ui/src/utils/index.ts | 8 +++++++ web/shared_ui/tsconfig.json | 35 +++++++++++++++++++++++++++ web/shared_ui/vite.config.js | 36 ++++++++++++++++++++++++++++ 7 files changed, 128 insertions(+) create mode 100644 web/shared_ui/.gitignore create mode 100644 web/shared_ui/package.json create mode 100644 web/shared_ui/src/index.ts create mode 100644 web/shared_ui/src/types/index.ts create mode 100644 web/shared_ui/src/utils/index.ts create mode 100644 web/shared_ui/tsconfig.json create mode 100644 web/shared_ui/vite.config.js diff --git a/web/shared_ui/.gitignore b/web/shared_ui/.gitignore new file mode 100644 index 0000000000..0a4ebc2eae --- /dev/null +++ b/web/shared_ui/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +dist +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/web/shared_ui/package.json b/web/shared_ui/package.json new file mode 100644 index 0000000000..dcc0449d0e --- /dev/null +++ b/web/shared_ui/package.json @@ -0,0 +1,41 @@ +{ + "name": "sqlmesh-shared-ui", + "version": "0.0.1", + "private": false, + "type": "module", + "files": [ + "/dist" + ], + "main": "dist/sqlmesh-shared-ui.umd.js", + "module": "dist/sqlmesh-shared-ui.es.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/sqlmesh-shared-ui.es.js", + "require": "./dist/sqlmesh-shared-ui.umd.js" + } + }, + "scripts": { + "build": "tsc -b && vite build --base './'", + "build:storybook": "storybook build", + "dev": "storybook dev -p 6006", + "lint": "eslint --max-warnings 0 --fix .", + "pretty": "prettier --write .", + "format": "pnpm run pretty && pnpm run lint", + "test": "vitest", + "test:watch": "vitest watch", + "test:ui": "vitest --ui" + }, + "devDependencies": { + "@types/react": "^18.3.23", + "@types/react-dom": "^18.3.7", + "@vitejs/plugin-react": "^4.7.0", + "typescript": "^5.8.3", + "vite": "^6.3.5", + "vite-plugin-dts": "^4.5.4" + }, + "peerDependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + } +} diff --git a/web/shared_ui/src/index.ts b/web/shared_ui/src/index.ts new file mode 100644 index 0000000000..f486364817 --- /dev/null +++ b/web/shared_ui/src/index.ts @@ -0,0 +1,2 @@ +export * from '@/utils' +export * from '@/types' diff --git a/web/shared_ui/src/types/index.ts b/web/shared_ui/src/types/index.ts new file mode 100644 index 0000000000..a2d8ca7e51 --- /dev/null +++ b/web/shared_ui/src/types/index.ts @@ -0,0 +1,3 @@ +export type Nil = undefined | null +export type Optional = T | undefined +export type Maybe = T | Nil diff --git a/web/shared_ui/src/utils/index.ts b/web/shared_ui/src/utils/index.ts new file mode 100644 index 0000000000..f967d48da4 --- /dev/null +++ b/web/shared_ui/src/utils/index.ts @@ -0,0 +1,8 @@ +import type { Nil } from '@/types' + +export function isNil(value: unknown): value is Nil { + return value == null +} +export function notNil(value: unknown): value is NonNullable { + return value != null +} diff --git a/web/shared_ui/tsconfig.json b/web/shared_ui/tsconfig.json new file mode 100644 index 0000000000..dfbf2261bd --- /dev/null +++ b/web/shared_ui/tsconfig.json @@ -0,0 +1,35 @@ +{ + "include": ["**/*.ts", "**/*.tsx", "vitest.config.js"], + "compilerOptions": { + "target": "ES2022", + "jsx": "react-jsx", + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + /* Linting */ + "skipLibCheck": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + + /* Declaration */ + "declaration": true, + "declarationDir": "./dist", + "emitDeclarationOnly": false, + + /* Paths */ + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/web/shared_ui/vite.config.js b/web/shared_ui/vite.config.js new file mode 100644 index 0000000000..a5ec9df8ca --- /dev/null +++ b/web/shared_ui/vite.config.js @@ -0,0 +1,36 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import path from 'path' +import dts from 'vite-plugin-dts' + +export default defineConfig({ + plugins: [ + react(), + dts({ + insertTypesEntry: true, + }), + ], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + build: { + lib: { + entry: path.resolve(__dirname, 'src/index.ts'), + name: 'sqlmesh-shared-ui', + fileName: format => `sqlmesh-shared-ui.${format}.js`, + }, + rollupOptions: { + external: ['react', 'react-dom'], + output: { + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + }, + }, + }, + sourcemap: true, + outDir: 'dist', + }, +})