diff --git a/packages/builtinComponent/package.json b/packages/builtinComponent/package.json index d3d61ca33..5beed0d82 100644 --- a/packages/builtinComponent/package.json +++ b/packages/builtinComponent/package.json @@ -4,6 +4,7 @@ "description": "", "main": "dist/index.mjs", "module": "dist/index.mjs", + "types": "dist/index.d.ts", "type": "module", "publishConfig": { "access": "public" @@ -27,7 +28,8 @@ "devDependencies": { "@vitejs/plugin-vue": "^5.1.2", "@vitejs/plugin-vue-jsx": "^4.0.1", - "vite": "^5.4.2" + "vite": "^5.4.2", + "vite-plugin-dts": "^4.5.4" }, "peerDependencies": { "@opentiny/vue": "^3.20.0", diff --git a/packages/builtinComponent/tsconfig.json b/packages/builtinComponent/tsconfig.json new file mode 100644 index 000000000..17484c7e9 --- /dev/null +++ b/packages/builtinComponent/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["./index.ts", "./src/**/*.ts", "./src/**/*.tsx", "./src/**/*.vue"] +} diff --git a/packages/builtinComponent/vite.config.ts b/packages/builtinComponent/vite.config.ts index 4df2eba92..081583f8a 100644 --- a/packages/builtinComponent/vite.config.ts +++ b/packages/builtinComponent/vite.config.ts @@ -14,9 +14,18 @@ import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import vitePluginCssInjectedByJs from 'vite-plugin-css-injected-by-js' +import dts from 'vite-plugin-dts' export default defineConfig({ - plugins: [vue(), vueJsx(), vitePluginCssInjectedByJs()], + plugins: [ + vue(), + vueJsx(), + vitePluginCssInjectedByJs(), + dts({ + tsconfigPath: path.resolve(__dirname, './tsconfig.json'), + rollupTypes: true + }) + ], publicDir: false, build: { sourcemap: true, diff --git a/packages/i18n/package.json b/packages/i18n/package.json index d7456043c..7c6d54c1b 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -15,6 +15,7 @@ "type": "module", "main": "dist/lowcode-design-i18n-host.umd.js", "module": "dist/lowcode-design-i18n-host.es.js", + "types": "dist/lowcode-design-i18n-host.d.ts", "repository": { "type": "git", "url": "https://github.com/opentiny/tiny-engine", @@ -28,7 +29,8 @@ "homepage": "https://opentiny.design/tiny-engine", "devDependencies": { "@vitejs/plugin-vue": "^5.1.2", - "vite": "^5.4.2" + "vite": "^5.4.2", + "vite-plugin-dts": "^4.5.4" }, "peerDependencies": { "vue": "^3.4.15", diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json new file mode 100644 index 000000000..d2e0afe6f --- /dev/null +++ b/packages/i18n/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["./src/**/*.ts", "./src/**/*.tsx", "./src/**/*.vue"], + "exclude": ["./src/test"] +} diff --git a/packages/i18n/vite.config.ts b/packages/i18n/vite.config.ts index 04ebb813d..1acdc1260 100644 --- a/packages/i18n/vite.config.ts +++ b/packages/i18n/vite.config.ts @@ -12,9 +12,14 @@ import vue from '@vitejs/plugin-vue' import path from 'path' +import dts from 'vite-plugin-dts' export default { plugins: [ + dts({ + tsconfigPath: path.resolve(__dirname, './tsconfig.json'), + rollupTypes: true + }), vue({ template: { compilerOptions: { diff --git a/packages/register/package.json b/packages/register/package.json index edeb57c06..87df6ccef 100644 --- a/packages/register/package.json +++ b/packages/register/package.json @@ -5,6 +5,7 @@ "type": "module", "main": "dist/index.js", "module": "dist/index.js", + "types": "dist/index.d.ts", "author": "OpenTiny Team", "license": "MIT", "bugs": { @@ -32,6 +33,7 @@ }, "devDependencies": { "vite": "^5.4.2", + "vite-plugin-dts": "^4.5.4", "vitest": "^1.4.0" }, "keywords": [] diff --git a/packages/register/src/common.ts b/packages/register/src/common.ts index c36b0ebb7..64b135fd4 100644 --- a/packages/register/src/common.ts +++ b/packages/register/src/common.ts @@ -85,7 +85,7 @@ const registryApiAndOptionsMap = (id: string, value: any) => { } } -const genDefaultHashMap = (registry: any) => { +const genDefaultHashMap = (registry: Record) => { Object.entries(registry).forEach(([key, value]) => { if (typeof value === 'object' && value && !isRef(value)) { const { id } = value diff --git a/packages/register/src/external-types.d.ts b/packages/register/src/external-types.d.ts new file mode 100644 index 000000000..44431d5ec --- /dev/null +++ b/packages/register/src/external-types.d.ts @@ -0,0 +1,116 @@ +/** + * 临时类型声明文件 + * + * 此文件为暂未导出类型声明的内部包提供临时类型定义 + * TODO: 当这些包完成类型导出后,应当删除此文件 + * + * 相关包列表: + * - @opentiny/tiny-engine-canvas + * - @opentiny/tiny-engine-layout + * - @opentiny/tiny-engine-plugin-* (block, datasource, help, i18n, materials, page, robot) + * - @opentiny/tiny-engine-setting-props + * - @opentiny/tiny-engine-toolbar-* (breadcrumb, generate-code, redoundo) + * - @opentiny/tiny-engine-common + */ + +// Canvas API - 导出一个返回 API 对象的函数 +declare module '@opentiny/tiny-engine-canvas/DesignCanvas/src/api' { + const useCanvasApi: () => Record + export default useCanvasApi +} + +// Layout Service - 导出包含 apis 属性的服务对象 +declare module '@opentiny/tiny-engine-layout' { + export const LayoutService: { + apis: Record + } +} + +// Plugin: Block - 区块管理服务 +declare module '@opentiny/tiny-engine-plugin-block' { + export const BlockService: { + apis: Record + } +} + +// Plugin: DataSource - 数据源管理服务 +declare module '@opentiny/tiny-engine-plugin-datasource' { + export const DataSourceService: { + apis: Record + } +} + +// Plugin: Help - 帮助服务 +declare module '@opentiny/tiny-engine-plugin-help' { + export const HelpService: { + apis: Record + } +} + +// Plugin: I18n - 国际化翻译服务 +declare module '@opentiny/tiny-engine-plugin-i18n' { + export const TranslateService: { + apis: Record + } +} + +// Plugin: Materials - 物料管理服务(包含两个服务) +declare module '@opentiny/tiny-engine-plugin-materials' { + export const MaterialService: { + apis: Record + } + export const ResourceService: { + apis: Record + } +} + +// Plugin: Page - 页面管理服务 +declare module '@opentiny/tiny-engine-plugin-page' { + export const PageService: { + apis: Record + } +} + +// Plugin: Robot - AI 机器人服务 +declare module '@opentiny/tiny-engine-plugin-robot' { + export const RobotService: { + apis: Record + } +} + +// Setting: Props - 属性配置服务(包含两个服务) +declare module '@opentiny/tiny-engine-setting-props' { + export const PropertiesService: { + apis: Record + } + export const PropertyService: { + apis: Record + } +} + +// Toolbar: Breadcrumb - 面包屑导航服务 +declare module '@opentiny/tiny-engine-toolbar-breadcrumb' { + export const BreadcrumbService: { + apis: Record + } +} + +// Toolbar: Generate Code - 代码生成和本地保存服务 +declare module '@opentiny/tiny-engine-toolbar-generate-code' { + export const SaveLocalService: { + apis: Record + } +} + +// Toolbar: Redo/Undo - 历史记录服务 +declare module '@opentiny/tiny-engine-toolbar-redoundo' { + export const HistoryService: { + apis: Record + } +} + +// Common - 通用工具(Modal 和 Notify) +declare module '@opentiny/tiny-engine-common' { + export const Modal: Record + export const Notify: (...args: any[]) => any +} diff --git a/packages/register/src/index.ts b/packages/register/src/index.ts index 559e44ce6..65ac22d29 100644 --- a/packages/register/src/index.ts +++ b/packages/register/src/index.ts @@ -18,3 +18,5 @@ export { getConfigurator, addConfigurator } from './configurators' export * from './hooks' export { META_APP, META_SERVICE } from './constants' export { defineService, initServices } from './service' + +export type { ServiceOptions } from './service' diff --git a/packages/register/src/service.ts b/packages/register/src/service.ts index 54b5bcb8b..9036f4d4f 100644 --- a/packages/register/src/service.ts +++ b/packages/register/src/service.ts @@ -48,15 +48,18 @@ export const defineService = (serviceOptions: ServiceOptions): Servi id, type, options, - apis: {} + // 使用类型断言,因为 getState 和 setState 会在后面添加 + apis: {} as any } const state = reactive(initialState || {}) + // 使用对象展开运算符合并 apis,避免直接赋值导致类型错误 if (typeof apis === 'object' && apis) { - resultService.apis = apis + resultService.apis = apis as any } else if (typeof apis === 'function') { - resultService.apis = apis({ state }) + // 传递完整的 context 对象,包含 state 和 options + resultService.apis = apis({ state, options }) as any } resultService.apis.setOptions = (kv) => { diff --git a/packages/register/src/useMessage.ts b/packages/register/src/useMessage.ts index 17da43f9c..3bf206e40 100644 --- a/packages/register/src/useMessage.ts +++ b/packages/register/src/useMessage.ts @@ -10,8 +10,66 @@ * */ -let lastMessage: any = null -const subscribers: Record = { '': {} } +// 消息事件类型,用于存储消息数据 +interface MessageEvent { + data: T +} + +// 消息回调函数类型 +type MessageCallback = (data: T) => void + +// 带有 lastEvent 属性的回调数组类型 +interface CallbacksWithLastEvent extends Array> { + lastEvent?: MessageEvent +} + +// 监听器映射类型:topic -> callbacks +type ListenersMap = Record + +// 订阅者映射类型:subscriber -> listeners +type SubscribersMap = Record + +// subscribe 函数参数接口 +interface SubscribeOptions { + topic?: string + subscriber?: string + callback?: MessageCallback +} + +// unsubscribe 函数参数接口 +interface UnsubscribeOptions { + topic?: string + subscriber?: string +} + +// publish 函数参数接口 +interface PublishOptions { + topic?: string + data?: T +} + +// broadcast 函数参数接口(topic 和 data 为必需参数) +interface BroadcastOptions { + topic: string + data: T +} + +// 订阅消息返回的描述符 +interface MessageDescriptor { + topic: string | undefined + subscriber: string | undefined +} + +// useMessage 钩子的返回值类型 +interface UseMessageReturn { + subscribe: (options?: SubscribeOptions) => MessageDescriptor + unsubscribe: (options?: UnsubscribeOptions) => void + publish: (options?: PublishOptions) => void + broadcast: (options: BroadcastOptions) => void +} + +let lastMessage: PublishOptions | null = null +const subscribers: SubscribersMap = { '': {} } /** * 订阅消息。 @@ -23,9 +81,9 @@ const subscribers: Record = { '': {} } * @param {Object} object { topic: 消息名称, subscriber(可选): 消息集合, callback: 接收到消息之后的回调用函数 } * @return {Object} { topic: 消息名称, subscriber: 消息集合 } */ -const subscribe = ({ topic, subscriber, callback } = {}) => { - const root = subscribers[''] - let listeners = root +const subscribe = ({ topic, subscriber, callback }: SubscribeOptions = {}): MessageDescriptor => { + const root: ListenersMap = subscribers[''] + let listeners: ListenersMap = root if (topic && typeof topic === 'string' && typeof callback === 'function') { if (subscriber && typeof subscriber === 'string') { @@ -33,13 +91,13 @@ const subscribe = ({ topic, subscriber, callback } = {}) => { subscribers[subscriber] = listeners } - const callbacks = listeners[topic] || [] + const callbacks: CallbacksWithLastEvent = (listeners[topic] as CallbacksWithLastEvent) || [] listeners[topic] = callbacks callbacks.push(callback) const lastEvent = callbacks.lastEvent || root[topic]?.lastEvent if (lastEvent) { - callback(lastEvent.data) + callback(lastEvent.data as T) } } @@ -61,9 +119,9 @@ const subscribe = ({ topic, subscriber, callback } = {}) => { * @member TinyEditor.message * @param {Object} object { topic: 消息名称, subscriber(可选): 消息集合 } */ -const unsubscribe = ({ topic, subscriber } = {}) => { +const unsubscribe = ({ topic, subscriber }: UnsubscribeOptions = {}): void => { if (topic && typeof topic === 'string') { - const removeListener = (subscriber) => { + const removeListener = (subscriber: string): void => { const listeners = subscribers[subscriber] if (listeners) { delete listeners[topic] @@ -94,23 +152,23 @@ const unsubscribe = ({ topic, subscriber } = {}) => { * @member TinyEditor.message * @param {Object} object { topic: 消息名称, data(string | object): 消息内容 } */ -const publish = ({ topic, data } = {}) => { +const publish = ({ topic, data }: PublishOptions = {}): void => { if (!topic || typeof topic !== 'string') { return } for (const value of Object.values(subscribers)) { - const callbacks = value[topic] || [] + const callbacks: CallbacksWithLastEvent = (value[topic] as CallbacksWithLastEvent) || [] if (callbacks.length) { for (const cb of callbacks) { - cb(data) + cb(data as T) } } else { value[topic] = callbacks } - callbacks.lastEvent = { data } + callbacks.lastEvent = { data: data as T } } } @@ -123,7 +181,7 @@ const publish = ({ topic, data } = {}) => { * @member TinyEditor.message * @param {Object} object { topic: 消息名称, data(string | object): 消息内容 } */ -const broadcast = ({ topic, data }) => { +const broadcast = ({ topic, data }: BroadcastOptions): void => { if (topic && typeof topic === 'string') { lastMessage = { topic, data } @@ -131,7 +189,7 @@ const broadcast = ({ topic, data }) => { } } -export default () => { +export default (): UseMessageReturn => { // 新use的message自动广播上次的异步消息 if (lastMessage) { publish(lastMessage) diff --git a/packages/register/src/vite-env.d.ts b/packages/register/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/packages/register/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/register/tsconfig.json b/packages/register/tsconfig.json new file mode 100644 index 000000000..e8bffe083 --- /dev/null +++ b/packages/register/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["./src/**/*.ts", "./src/**/*.tsx", "./src/**/*.vue"] +} diff --git a/packages/register/vite.config.ts b/packages/register/vite.config.ts index 2a701889e..e2f2b10f1 100644 --- a/packages/register/vite.config.ts +++ b/packages/register/vite.config.ts @@ -12,10 +12,15 @@ import { defineConfig } from 'vite' import path from 'path' - +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [], + plugins: [ + dts({ + tsconfigPath: path.resolve(__dirname, './tsconfig.json'), + rollupTypes: true + }) + ], publicDir: false, resolve: {}, build: { diff --git a/packages/svgs/package.json b/packages/svgs/package.json index b1f566a9d..52b35897e 100644 --- a/packages/svgs/package.json +++ b/packages/svgs/package.json @@ -10,6 +10,7 @@ "type": "module", "main": "dist/index.js", "module": "dist/index.js", + "types": "dist/index.d.ts", "files": [ "dist" ], @@ -28,7 +29,8 @@ "@opentiny/tiny-engine-vite-plugin-meta-comments": "workspace:*", "@vitejs/plugin-vue": "^5.1.2", "@vitejs/plugin-vue-jsx": "^4.0.1", - "vite": "^5.4.2" + "vite": "^5.4.2", + "vite-plugin-dts": "^4.5.4" }, "peerDependencies": { "@opentiny/vue": "^3.20.0", diff --git a/packages/svgs/tsconfig.json b/packages/svgs/tsconfig.json new file mode 100644 index 000000000..17484c7e9 --- /dev/null +++ b/packages/svgs/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["./index.ts", "./src/**/*.ts", "./src/**/*.tsx", "./src/**/*.vue"] +} diff --git a/packages/svgs/vite.config.ts b/packages/svgs/vite.config.ts index 17b23f8ce..21a513dc9 100644 --- a/packages/svgs/vite.config.ts +++ b/packages/svgs/vite.config.ts @@ -15,10 +15,19 @@ import path from 'path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import generateComment from '@opentiny/tiny-engine-vite-plugin-meta-comments' +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [generateComment(), vue(), vueJsx()], + plugins: [ + dts({ + tsconfigPath: path.resolve(__dirname, './tsconfig.json'), + rollupTypes: true + }), + generateComment(), + vue(), + vueJsx() + ], publicDir: false, resolve: {}, build: { diff --git a/packages/theme/base/package.json b/packages/theme/base/package.json index 6a89adc66..276d9cdca 100644 --- a/packages/theme/base/package.json +++ b/packages/theme/base/package.json @@ -9,6 +9,7 @@ }, "type": "module", "main": "dist/index.js", + "types": "dist/index.d.ts", "files": [ "dist" ], @@ -24,6 +25,7 @@ "license": "MIT", "homepage": "https://opentiny.design/tiny-engine", "devDependencies": { - "vite": "^5.4.2" + "vite": "^5.4.2", + "vite-plugin-dts": "^4.5.4" } } diff --git a/packages/theme/base/tsconfig.json b/packages/theme/base/tsconfig.json new file mode 100644 index 000000000..113c8f49b --- /dev/null +++ b/packages/theme/base/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../../tsconfig.base.json", + "include": ["./src/**/*.ts", "./src/**/*.tsx", "./src/**/*.vue"] +} diff --git a/packages/theme/base/vite.config.ts b/packages/theme/base/vite.config.ts index aa721a433..d97ec174a 100644 --- a/packages/theme/base/vite.config.ts +++ b/packages/theme/base/vite.config.ts @@ -12,10 +12,17 @@ import { defineConfig } from 'vite' import path from 'path' +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ export default defineConfig({ publicDir: false, + plugins: [ + dts({ + tsconfigPath: path.resolve(__dirname, './tsconfig.json'), + rollupTypes: true + }) + ], build: { sourcemap: true, lib: { diff --git a/packages/utils/package.json b/packages/utils/package.json index d26780900..ab01f3b9d 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -8,6 +8,7 @@ "type": "module", "main": "dist/index.js", "module": "dist/index.js", + "types": "dist/index.d.ts", "files": [ "dist" ], @@ -28,7 +29,9 @@ "license": "MIT", "homepage": "https://opentiny.design/tiny-engine", "devDependencies": { + "@types/wicg-file-system-access": "^2023.10.6", "vite": "^5.4.2", + "vite-plugin-dts": "^4.5.4", "vitest": "^1.4.0" }, "dependencies": { diff --git a/packages/utils/src/fs/index.ts b/packages/utils/src/fs/index.ts index c521f28f4..cd53801da 100644 --- a/packages/utils/src/fs/index.ts +++ b/packages/utils/src/fs/index.ts @@ -20,11 +20,10 @@ export const isSupportFileSystemAccess = /** * 获取用户选择并授权的文件夹根路径 - * @param {*} options - * mode: 授权模式 e.g. 'readwrite' + * @param {*} options - showDirectoryPicker 的选项 * @returns dirHandle 目录句柄 */ -export const getUserBaseDirHandle = async (options = {}) => { +export const getUserBaseDirHandle = async (options: DirectoryPickerOptions = {}) => { if (!isSupportFileSystemAccess) { return createZip() } @@ -76,15 +75,16 @@ export async function getFileHandle(baseDirHandle: any, filePath: string, { crea /** * 获取用户选择并授权的文件路径 - * @param {*} options - * mode: 授权模式 e.g. 'readwrite' + * @param {*} options - showOpenFilePicker 的选项 * @returns fileHandle 文件句柄 */ -export const getUserFileHandle = async (options = {}) => { +export const getUserFileHandle = async (options: OpenFilePickerOptions & { multiple?: false } = {}) => { if (!isSupportFileSystemAccess) { throw new Error('不支持的浏览器或处于iframe中') } - const [fileHandle] = await window.showOpenFilePicker({ mode: 'readwrite', ...options }) + const [fileHandle] = await window.showOpenFilePicker(options) + // 请求读写权限 + await fileHandle.requestPermission({ mode: 'readwrite' }) return fileHandle } diff --git a/packages/utils/src/utils/index.ts b/packages/utils/src/utils/index.ts index 2a614829c..32f7b4aef 100644 --- a/packages/utils/src/utils/index.ts +++ b/packages/utils/src/utils/index.ts @@ -341,8 +341,8 @@ export const objectToArray = (obj, { keyTo = 'id', orderKey = '_order' }) => { const arr = Object.entries(obj) // 过滤掉非对象的值,防止后面展开对象失败 - .filter(([, value]) => typeof value === 'object' && obj !== null) - .map(([key, value]) => ({ ...value, [keyTo]: key })) + .filter(([, value]) => typeof value === 'object' && value !== null && !Array.isArray(value)) + .map(([key, value]) => ({ ...(value as Record), [keyTo]: key })) .map(({ [orderKey]: order, ...rest }) => ({ ...rest, [orderKey]: order ?? Number.MAX_SAFE_INTEGER })) .sort((a, b) => a[orderKey] - b[orderKey]) diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 000000000..1bf302981 --- /dev/null +++ b/packages/utils/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "types": ["@types/wicg-file-system-access"] + }, + "include": ["./src/**/*.ts", "./src/**/*.tsx", "./src/**/*.vue"] +} diff --git a/packages/utils/vite.config.ts b/packages/utils/vite.config.ts index d93cbeddb..5f6456c5d 100644 --- a/packages/utils/vite.config.ts +++ b/packages/utils/vite.config.ts @@ -12,11 +12,18 @@ import { defineConfig } from 'vite' import path from 'path' +import dts from 'vite-plugin-dts' // https://vitejs.dev/config/ export default defineConfig({ publicDir: false, resolve: {}, + plugins: [ + dts({ + tsconfigPath: path.resolve(__dirname, './tsconfig.json'), + rollupTypes: true + }) + ], build: { sourcemap: true, lib: { diff --git a/tsconfig.app.json b/tsconfig.app.json index 98e534efc..917869083 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -1,18 +1,14 @@ { - "extends": "@vue/tsconfig/tsconfig.dom.json", + "extends": ["@vue/tsconfig/tsconfig.dom.json", "./tsconfig.base.json"], "compilerOptions": { - "composite": true, - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, + "noEmit": true, "noFallthroughCasesInSwitch": true, - "allowJs": true, "baseUrl": "./", - "jsx": "react-jsx", "paths": { "@/*": ["packages/*"], "@opentiny/tiny-engine": ["packages/design-core/index.js"], diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..ce31af132 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "module": "ESNext", + "target": "ESNext", + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "emitDeclarationOnly": true, + "jsx": "preserve", + "useDefineForClassFields": true + } +} + diff --git a/tsconfig.node.json b/tsconfig.node.json index 7e1ecee96..3fe89d78b 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,17 +1,10 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { - "composite": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "target": "ES2022", "lib": ["ES2023"], - "module": "ESNext", "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", "noEmit": true, /* Linting */