From 5c2f15ec1206ca2da01714393c13243071c91f0d Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Mon, 29 Dec 2025 23:39:17 +0000 Subject: [PATCH] chore: improve package data typings --- .../lib/api/packages/data/get-package-data.ts | 5 +++-- .../lib/api/packages/data/set-package-data.ts | 3 ++- frontends/nextjs/src/lib/db/core/types.ts | 4 ++-- .../db/packages/data/get/get-package-data.ts | 5 +++-- .../lib/db/packages/data/set-package-data.ts | 3 ++- .../src/lib/packages/core/package-types.ts | 22 +++++++++++-------- .../nextjs/src/lib/types/builder-types.ts | 4 ++-- frontends/nextjs/src/lib/types/level-types.ts | 10 +++++---- .../nextjs/src/lib/types/schema-types.ts | 2 +- .../nextjs/src/types/monaco-editor-react.d.ts | 1 + 10 files changed, 35 insertions(+), 24 deletions(-) diff --git a/frontends/nextjs/src/lib/api/packages/data/get-package-data.ts b/frontends/nextjs/src/lib/api/packages/data/get-package-data.ts index ad91cd66c..920287b30 100644 --- a/frontends/nextjs/src/lib/api/packages/data/get-package-data.ts +++ b/frontends/nextjs/src/lib/api/packages/data/get-package-data.ts @@ -1,7 +1,8 @@ import { requestJson } from '@/lib/api/request-json' +import { type PackageSeedData } from '@/lib/packages/core/package-types' -export async function getPackageData(packageId: string): Promise> { - const payload = await requestJson<{ data: Record }>( +export async function getPackageData(packageId: string): Promise { + const payload = await requestJson<{ data: PackageSeedData }>( `/api/packages/data/${packageId}` ) return payload.data diff --git a/frontends/nextjs/src/lib/api/packages/data/set-package-data.ts b/frontends/nextjs/src/lib/api/packages/data/set-package-data.ts index 81edebb62..2ae352d86 100644 --- a/frontends/nextjs/src/lib/api/packages/data/set-package-data.ts +++ b/frontends/nextjs/src/lib/api/packages/data/set-package-data.ts @@ -1,8 +1,9 @@ import { requestJson } from '@/lib/api/request-json' +import { type PackageSeedData } from '@/lib/packages/core/package-types' export async function setPackageData( packageId: string, - data: Record + data: PackageSeedData ): Promise { await requestJson<{ saved: boolean }>(`/api/packages/data/${packageId}`, { method: 'PUT', diff --git a/frontends/nextjs/src/lib/db/core/types.ts b/frontends/nextjs/src/lib/db/core/types.ts index 34c0d9cd1..5c01e04ac 100644 --- a/frontends/nextjs/src/lib/db/core/types.ts +++ b/frontends/nextjs/src/lib/db/core/types.ts @@ -34,8 +34,8 @@ export interface ComponentNode { export interface ComponentConfig { id: string componentId: string - props: Record - styles: Record + props: Record + styles: Record events: Record conditionalRendering?: { condition: string diff --git a/frontends/nextjs/src/lib/db/packages/data/get/get-package-data.ts b/frontends/nextjs/src/lib/db/packages/data/get/get-package-data.ts index 5ac3a7174..3a8779ce4 100644 --- a/frontends/nextjs/src/lib/db/packages/data/get/get-package-data.ts +++ b/frontends/nextjs/src/lib/db/packages/data/get/get-package-data.ts @@ -1,13 +1,14 @@ +import { type PackageSeedData } from '../../../../packages/core/package-types' import { getAdapter } from '../../../core/dbal-client' /** * Get package data for a specific package */ -export async function getPackageData(packageId: string): Promise> { +export async function getPackageData(packageId: string): Promise { const adapter = getAdapter() const pkg = (await adapter.findFirst('PackageData', { where: { packageId }, })) as { data: string } | null if (!pkg) return {} - return JSON.parse(pkg.data) + return JSON.parse(pkg.data) as PackageSeedData } diff --git a/frontends/nextjs/src/lib/db/packages/data/set-package-data.ts b/frontends/nextjs/src/lib/db/packages/data/set-package-data.ts index 9849496d8..d5337bee1 100644 --- a/frontends/nextjs/src/lib/db/packages/data/set-package-data.ts +++ b/frontends/nextjs/src/lib/db/packages/data/set-package-data.ts @@ -1,11 +1,12 @@ import { getAdapter } from '../../core/dbal-client' +import { type PackageSeedData } from '../../packages/core/package-types' /** * Set package data (upsert) */ export async function setPackageData( packageId: string, - data: Record + data: PackageSeedData ): Promise { const adapter = getAdapter() await adapter.upsert('PackageData', { diff --git a/frontends/nextjs/src/lib/packages/core/package-types.ts b/frontends/nextjs/src/lib/packages/core/package-types.ts index be9778662..f1803d3f8 100644 --- a/frontends/nextjs/src/lib/packages/core/package-types.ts +++ b/frontends/nextjs/src/lib/packages/core/package-types.ts @@ -24,17 +24,21 @@ export interface PackageManifest { } export interface PackageContent { - schemas: any[] - pages: any[] - workflows: any[] - luaScripts: any[] - componentHierarchy: Record - componentConfigs: Record - cssClasses?: any[] - dropdownConfigs?: any[] - seedData?: Record + schemas: unknown[] + pages: unknown[] + workflows: unknown[] + luaScripts: unknown[] + componentHierarchy: Record + componentConfigs: Record + cssClasses?: unknown[] + dropdownConfigs?: unknown[] + seedData?: PackageSeedData } +export type PackageSeedRecord = Record + +export type PackageSeedData = Record + export interface LuaScriptFile { name: string path: string diff --git a/frontends/nextjs/src/lib/types/builder-types.ts b/frontends/nextjs/src/lib/types/builder-types.ts index dad400840..3d0ef542b 100644 --- a/frontends/nextjs/src/lib/types/builder-types.ts +++ b/frontends/nextjs/src/lib/types/builder-types.ts @@ -39,7 +39,7 @@ export type ComponentType = * @example { className: "mt-4", disabled: true, onClick: fn } */ export interface ComponentProps { - [key: string]: any + [key: string]: unknown } /** @@ -85,7 +85,7 @@ export interface PropDefinition { name: string label: string type: 'string' | 'number' | 'boolean' | 'select' | 'color' | 'dynamic-select' - defaultValue?: any + defaultValue?: unknown options?: Array<{ value: string; label: string }> dynamicSource?: string description?: string diff --git a/frontends/nextjs/src/lib/types/level-types.ts b/frontends/nextjs/src/lib/types/level-types.ts index d44c58047..84a94b529 100644 --- a/frontends/nextjs/src/lib/types/level-types.ts +++ b/frontends/nextjs/src/lib/types/level-types.ts @@ -1,3 +1,5 @@ +import type { ModelSchema } from './schema-types' + /** * UserRole - User permission levels in MetaBuilder * @description Six-level permission hierarchy @@ -58,7 +60,7 @@ export interface WorkflowNode { id: string type: 'trigger' | 'action' | 'condition' | 'lua' | 'transform' label: string - config: Record + config: Record position: { x: number; y: number } } @@ -110,7 +112,7 @@ export interface PageConfig { path: string title: string level: AppLevel - componentTree: any[] + componentTree: unknown[] requiresAuth: boolean requiredRole?: UserRole } @@ -122,14 +124,14 @@ export interface Tenant { createdAt: number homepageConfig?: { pageId: string - customContent?: any + customContent?: unknown } } export interface AppConfiguration { id: string name: string - schemas: any[] + schemas: ModelSchema[] workflows: Workflow[] luaScripts: LuaScript[] pages: PageConfig[] diff --git a/frontends/nextjs/src/lib/types/schema-types.ts b/frontends/nextjs/src/lib/types/schema-types.ts index 2c667f2c5..df8a1cb71 100644 --- a/frontends/nextjs/src/lib/types/schema-types.ts +++ b/frontends/nextjs/src/lib/types/schema-types.ts @@ -48,7 +48,7 @@ export interface FieldSchema { label?: string required?: boolean unique?: boolean - default?: any + default?: unknown choices?: Array<{ value: string; label: string }> relatedModel?: string helpText?: string | string[] diff --git a/frontends/nextjs/src/types/monaco-editor-react.d.ts b/frontends/nextjs/src/types/monaco-editor-react.d.ts index 7482b41f0..5762f439f 100644 --- a/frontends/nextjs/src/types/monaco-editor-react.d.ts +++ b/frontends/nextjs/src/types/monaco-editor-react.d.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ declare module '@monaco-editor/react' { import type { ComponentType } from 'react'