diff --git a/apps/ai-dial-chat-e2e/tsconfig.json b/apps/ai-dial-chat-e2e/tsconfig.json index 891432bdaf..e873835c62 100644 --- a/apps/ai-dial-chat-e2e/tsconfig.json +++ b/apps/ai-dial-chat-e2e/tsconfig.json @@ -7,7 +7,6 @@ "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, - "noEmit": true, "resolveJsonModule": true, "isolatedModules": true, "incremental": true, diff --git a/apps/ai-dial-chat/Dockerfile b/apps/ai-dial-chat/Dockerfile index 614ef2433a..4e3beebba4 100644 --- a/apps/ai-dial-chat/Dockerfile +++ b/apps/ai-dial-chat/Dockerfile @@ -19,7 +19,7 @@ FROM node:20-alpine AS production RUN apk update && apk upgrade --no-cache libcrypto3 libssl3 WORKDIR /app COPY --from=dependencies /app/node_modules ./node_modules -COPY --from=build /app/.next ./.next +COPY --from=build /app/dist/apps/chat/.next ./dist/apps/chat/.next COPY --from=build /app/public ./public COPY --from=build /app/package*.json ./ COPY --from=build /app/next.config.js ./next.config.js diff --git a/apps/ai-dial-chat/src/pages/index.tsx b/apps/ai-dial-chat/src/pages/index.tsx index 90fb2b5f2f..2a19793993 100644 --- a/apps/ai-dial-chat/src/pages/index.tsx +++ b/apps/ai-dial-chat/src/pages/index.tsx @@ -14,7 +14,7 @@ import { isServerSessionValid } from '@/src/utils/auth/session'; import { timeoutAsync } from '@/src/utils/auth/timeout-async'; import { Translation } from '../types/translation'; -import { Feature } from '@/src/types/features'; +import { Feature } from 'shared'; import { fallbackModelID } from '@/src/types/openai'; import { AuthActions, AuthSelectors } from '../store/auth/auth.reducers'; diff --git a/apps/ai-dial-chat/tsconfig.json b/apps/ai-dial-chat/tsconfig.json index c421977106..73c325e6cf 100644 --- a/apps/ai-dial-chat/tsconfig.json +++ b/apps/ai-dial-chat/tsconfig.json @@ -18,6 +18,7 @@ ], "paths": { "@/*": ["./*"], + "shared": ["../../libs/shared/src/index.ts"], }, "baseUrl": ".", "types": [ @@ -36,6 +37,8 @@ "**/*.jsx", "next-env.d.ts", "postcss.config.js", + "../../libs/shared/src/utils/features.ts", + "../../libs/shared/src/types/features.ts", ], "exclude": ["node_modules"], } diff --git a/apps/overlay-sandbox/tsconfig.json b/apps/overlay-sandbox/tsconfig.json index 8137ae61ec..f3c88d8507 100644 --- a/apps/overlay-sandbox/tsconfig.json +++ b/apps/overlay-sandbox/tsconfig.json @@ -13,11 +13,11 @@ "incremental": true, "plugins": [ { - "name": "next" - } + "name": "next", + }, ], "paths": { - "@epam/ai-dial-overlay": ["../../libs/ai-dial-overlay/src/index.ts"], + "@epam/ai-dial-overlay": ["../../libs/overlay/src/index.ts"], }, }, "include": [ @@ -28,12 +28,12 @@ "../../apps/overlay-sandbox/.next/types/**/*.ts", "../../dist/apps/overlay-sandbox/.next/types/**/*.ts", "next-env.d.ts", - ".next/types/**/*.ts" + ".next/types/**/*.ts", ], "exclude": [ "node_modules", "jest.config.ts", "src/**/*.spec.ts", - "src/**/*.test.ts" - ] + "src/**/*.test.ts", + ], } diff --git a/libs/ai-dial-overlay/project.json b/libs/ai-dial-overlay/project.json deleted file mode 100644 index e7682945e3..0000000000 --- a/libs/ai-dial-overlay/project.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "ai-dial-overlay", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/ai-dial-overlay/src", - "projectType": "library", - "targets": { - "build:ts": { - "cache": true, - "executor": "nx:run-commands", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/libs/ai-dial-overlay", - "commands": ["tsc -p libs/ai-dial-overlay/tsconfig.d.json"] - } - }, - "build:bundle": { - "cache": true, - "executor": "@nx/esbuild:esbuild", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/libs/ai-dial-overlay", - "main": "libs/ai-dial-overlay/src/index.ts", - "tsConfig": "libs/ai-dial-overlay/tsconfig.lib.json", - "assets": ["libs/ai-dial-overlay/*.md"], - "format": ["esm", "cjs"] - } - }, - "build": { - "executor": "nx:noop", - "outputs": ["{options.outputPath}"], - "dependsOn": ["build:ts", "build:bundle"], - "options": { - "outputPath": "dist/libs/ai-dial-overlay" - } - }, - "publish": { - "command": "node tools/publish-lib.mjs ai-dial-overlay {args.ver} {args.tag}", - "dependsOn": ["build"] - }, - "lint": { - "executor": "@nx/eslint:lint", - "outputs": ["{options.outputFile}"] - }, - "test": { - "executor": "@nx/vite:test", - "outputs": ["{options.reportsDirectory}"], - "options": { - "reportsDirectory": "../../coverage/libs/ai-dial-overlay" - } - } - }, - "tags": [] -} diff --git a/libs/ai-dial-overlay/.eslintrc.json b/libs/overlay/.eslintrc.json similarity index 100% rename from libs/ai-dial-overlay/.eslintrc.json rename to libs/overlay/.eslintrc.json diff --git a/libs/ai-dial-overlay/README.md b/libs/overlay/README.md similarity index 100% rename from libs/ai-dial-overlay/README.md rename to libs/overlay/README.md diff --git a/libs/ai-dial-overlay/package.json b/libs/overlay/package.json similarity index 100% rename from libs/ai-dial-overlay/package.json rename to libs/overlay/package.json diff --git a/libs/overlay/project.json b/libs/overlay/project.json new file mode 100644 index 0000000000..431bb23b47 --- /dev/null +++ b/libs/overlay/project.json @@ -0,0 +1,41 @@ +{ + "name": "overlay", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/overlay/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "options": { + "outputPath": "dist/libs/overlay", + "main": "libs/overlay/src/index.ts", + "tsConfig": "libs/overlay/tsconfig.lib.json", + "assets": ["libs/overlay/*.md"], + "clean": false, + "external": "all" + } + }, + "publish": { + "command": "node tools/publish-lib.mjs overlay {args.ver} {args.tag}", + "dependsOn": ["build"] + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "libs/my-lib/**/*.{ts,tsx,js,jsx}", + "libs/my-lib/package.json" + ] + } + }, + "test": { + "executor": "@nx/vite:test", + "outputs": ["{options.reportsDirectory}"], + "options": { + "reportsDirectory": "../../coverage/libs/overlay" + } + } + }, + "tags": [] +} diff --git a/libs/ai-dial-overlay/src/index.ts b/libs/overlay/src/index.ts similarity index 100% rename from libs/ai-dial-overlay/src/index.ts rename to libs/overlay/src/index.ts diff --git a/libs/ai-dial-overlay/src/lib/ChatOverlay.ts b/libs/overlay/src/lib/ChatOverlay.ts similarity index 98% rename from libs/ai-dial-overlay/src/lib/ChatOverlay.ts rename to libs/overlay/src/lib/ChatOverlay.ts index d5ada1fffd..e0e525baec 100644 --- a/libs/ai-dial-overlay/src/lib/ChatOverlay.ts +++ b/libs/overlay/src/lib/ChatOverlay.ts @@ -1,7 +1,9 @@ import { DeferredRequest } from './utils/DeferredRequest'; +import { Task } from './utils/Task'; import { Styles, setStyles } from './utils/styleUtils'; -import { Task } from './utils/Task'; +// eslint-disable-next-line @nx/enforce-module-boundaries +import { Feature } from 'shared'; export interface ChatOverlayOptions { domain: string; @@ -10,7 +12,7 @@ export interface ChatOverlayOptions { theme?: string; modelId?: string; - enabledFeatures?: string; + enabledFeatures?: Feature; requestTimeout?: number; diff --git a/libs/ai-dial-overlay/src/lib/ChatOverlayManager.ts b/libs/overlay/src/lib/ChatOverlayManager.ts similarity index 100% rename from libs/ai-dial-overlay/src/lib/ChatOverlayManager.ts rename to libs/overlay/src/lib/ChatOverlayManager.ts diff --git a/libs/ai-dial-overlay/src/lib/utils/DeferredRequest.ts b/libs/overlay/src/lib/utils/DeferredRequest.ts similarity index 100% rename from libs/ai-dial-overlay/src/lib/utils/DeferredRequest.ts rename to libs/overlay/src/lib/utils/DeferredRequest.ts diff --git a/libs/ai-dial-overlay/src/lib/utils/Task.ts b/libs/overlay/src/lib/utils/Task.ts similarity index 100% rename from libs/ai-dial-overlay/src/lib/utils/Task.ts rename to libs/overlay/src/lib/utils/Task.ts diff --git a/libs/ai-dial-overlay/src/lib/utils/styleUtils.ts b/libs/overlay/src/lib/utils/styleUtils.ts similarity index 100% rename from libs/ai-dial-overlay/src/lib/utils/styleUtils.ts rename to libs/overlay/src/lib/utils/styleUtils.ts diff --git a/libs/ai-dial-overlay/tsconfig.d.json b/libs/overlay/tsconfig.d.json similarity index 84% rename from libs/ai-dial-overlay/tsconfig.d.json rename to libs/overlay/tsconfig.d.json index 893f6a559c..09b263a746 100644 --- a/libs/ai-dial-overlay/tsconfig.d.json +++ b/libs/overlay/tsconfig.d.json @@ -23,7 +23,11 @@ "outDir": "../../dist/out-tsc", "declaration": true, "emitDeclarationOnly": true, - "declarationDir": "../../dist/libs/ai-dial-overlay" + "declarationDir": "../../dist/libs/overlay", + "paths": { + "shared": ["../shared/src/index.ts"] + }, + "declarationMap": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "src/**/*.spec.ts", "src/**/*.test.ts"] diff --git a/libs/overlay/tsconfig.json b/libs/overlay/tsconfig.json new file mode 100644 index 0000000000..c98d465093 --- /dev/null +++ b/libs/overlay/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "baseUrl": ".", + "paths": { + "shared": ["../shared/src/index.ts"], + }, + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json", + }, + { + "path": "./tsconfig.spec.json", + }, + ], +} diff --git a/libs/overlay/tsconfig.lib.json b/libs/overlay/tsconfig.lib.json new file mode 100644 index 0000000000..c31959dd8a --- /dev/null +++ b/libs/overlay/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": ["node"], + "declaration": true, + "sourceMap": true, + "declarationMap": true, + "paths": { + "shared": ["../shared/src/index.ts"] + } + }, + "include": ["src/**/*.ts"], + "exclude": ["vite.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/libs/ai-dial-overlay/tsconfig.spec.json b/libs/overlay/tsconfig.spec.json similarity index 100% rename from libs/ai-dial-overlay/tsconfig.spec.json rename to libs/overlay/tsconfig.spec.json diff --git a/libs/ai-dial-overlay/vite.config.ts b/libs/overlay/vite.config.ts similarity index 81% rename from libs/ai-dial-overlay/vite.config.ts rename to libs/overlay/vite.config.ts index d253a719f0..aff359d5dd 100644 --- a/libs/ai-dial-overlay/vite.config.ts +++ b/libs/overlay/vite.config.ts @@ -3,7 +3,7 @@ import { defineConfig } from 'vite'; export default defineConfig({ root: __dirname, - cacheDir: '../../node_modules/.vite/libs/ai-dial-overlay', + cacheDir: '../../node_modules/.vite/libs/overlay', plugins: [nxViteTsPaths()], @@ -19,7 +19,7 @@ export default defineConfig({ include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], reporters: ['default'], coverage: { - reportsDirectory: '../../coverage/libs/ai-dial-overlay', + reportsDirectory: '../../coverage/libs/overlay', provider: 'v8', }, }, diff --git a/libs/shared/.eslintrc.json b/libs/shared/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/libs/shared/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/libs/shared/project.json b/libs/shared/project.json new file mode 100644 index 0000000000..441b199207 --- /dev/null +++ b/libs/shared/project.json @@ -0,0 +1,20 @@ +{ + "name": "shared", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/shared/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/vite:test", + "outputs": ["{options.reportsDirectory}"], + "options": { + "reportsDirectory": "../../coverage/libs/shared" + } + } + }, + "tags": [] +} diff --git a/libs/shared/src/index.ts b/libs/shared/src/index.ts new file mode 100644 index 0000000000..64cdc82508 --- /dev/null +++ b/libs/shared/src/index.ts @@ -0,0 +1,2 @@ +export * from './types/features'; +export * from './utils/features'; diff --git a/apps/ai-dial-chat/src/types/features.ts b/libs/shared/src/types/features.ts similarity index 100% rename from apps/ai-dial-chat/src/types/features.ts rename to libs/shared/src/types/features.ts diff --git a/apps/ai-dial-chat/src/utils/app/features.ts b/libs/shared/src/utils/features.ts similarity index 62% rename from apps/ai-dial-chat/src/utils/app/features.ts rename to libs/shared/src/utils/features.ts index b7f70306c3..3dc673c8f8 100644 --- a/apps/ai-dial-chat/src/utils/app/features.ts +++ b/libs/shared/src/utils/features.ts @@ -1,4 +1,4 @@ -import { availableFeatures } from '@/src/types/features'; +import { availableFeatures } from '../types/features'; export const validateFeature = (feature: string) => { return feature in availableFeatures; diff --git a/libs/ai-dial-overlay/tsconfig.json b/libs/shared/tsconfig.json similarity index 90% rename from libs/ai-dial-overlay/tsconfig.json rename to libs/shared/tsconfig.json index 0440fa097d..d2b7ec22be 100644 --- a/libs/ai-dial-overlay/tsconfig.json +++ b/libs/shared/tsconfig.json @@ -1,14 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "module": "CommonJS", + "module": "esnext", "forceConsistentCasingInFileNames": true, "strict": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "baseUrl": ".", }, "files": [], "include": [], diff --git a/libs/ai-dial-overlay/tsconfig.lib.json b/libs/shared/tsconfig.lib.json similarity index 61% rename from libs/ai-dial-overlay/tsconfig.lib.json rename to libs/shared/tsconfig.lib.json index ad15943bb8..4de8c33cd3 100644 --- a/libs/ai-dial-overlay/tsconfig.lib.json +++ b/libs/shared/tsconfig.lib.json @@ -1,9 +1,11 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "declaration": true, - "declarationDir": "../../dist/libs/ai-dial-overlay", - "types": ["node"] + "outDir": "../../dist/out-tsc", + "types": ["node"], + "paths": { + "@/*": ["./*"] + } }, "include": ["src/**/*.ts"], "exclude": ["vite.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] diff --git a/libs/shared/tsconfig.spec.json b/libs/shared/tsconfig.spec.json new file mode 100644 index 0000000000..3c002c215a --- /dev/null +++ b/libs/shared/tsconfig.spec.json @@ -0,0 +1,26 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": [ + "vitest/globals", + "vitest/importMeta", + "vite/client", + "node", + "vitest" + ] + }, + "include": [ + "vite.config.ts", + "vitest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] +} diff --git a/libs/shared/vite.config.ts b/libs/shared/vite.config.ts new file mode 100644 index 0000000000..7ed705ec0d --- /dev/null +++ b/libs/shared/vite.config.ts @@ -0,0 +1,26 @@ +import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + root: __dirname, + cacheDir: '../../node_modules/.vite/libs/shared', + + plugins: [nxViteTsPaths()], + + // Uncomment this if you are using workers. + // worker: { + // plugins: [ nxViteTsPaths() ], + // }, + + test: { + globals: true, + cache: { dir: '../../node_modules/.vitest' }, + environment: 'node', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + coverage: { + reportsDirectory: '../../coverage/libs/shared', + provider: 'v8', + }, + }, +}); diff --git a/tsconfig.json b/tsconfig.json index f4723f02cd..9255528a10 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,11 +11,11 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "noEmit": true, "jsx": "preserve", "incremental": true, "paths": { - "@epam/ai-dial-overlay": ["./libs/ai-dial-overlay/src/index.ts"], + "@epam/ai-dial-overlay": ["./libs/overlay/src/index.ts"], + "shared": ["./libs/shared/src/index.ts"], }, }, "exclude": ["node_modules", "src/**/*.spec.ts", "src/**/*.test.ts"],