diff --git a/package.json b/package.json index aefb0da..6279a47 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@repixelcorp/hyper-pwt", - "version": "0.3.1", + "version": "0.3.2", "description": "A faster, more modern, superior alternative for Mendix PWT.", "repository": { "type": "git", diff --git a/src/commands/start/web/index.ts b/src/commands/start/web/index.ts index 395b21b..c825766 100644 --- a/src/commands/start/web/index.ts +++ b/src/commands/start/web/index.ts @@ -13,6 +13,7 @@ import getViteUserConfiguration from '../../../utils/getViteUserConfiguration'; import { generateTypesFromFile } from '../../../type-generator'; import { mendixHotreloadReactPlugin } from '../../../configurations/vite/plugins/mendix-hotreload-react-plugin'; import { mendixPatchViteClientPlugin } from '../../../configurations/vite/plugins/mendix-patch-vite-client-plugin'; +import typescript from 'rollup-plugin-typescript2'; const generateTyping = async () => { const widgetName = await getWidgetName(); @@ -71,6 +72,20 @@ const startWebCommand = async () => { }, }, plugins: [ + typescript({ + tsconfig: path.join(PROJECT_DIRECTORY, 'tsconfig.json'), + tsconfigOverride: { + compilerOptions: { + jsx: 'preserve', + preserveConstEnums: false, + isolatedModules: false, + declaration: false + } + }, + include: ["src/**/*.ts", "src/**/*.tsx"], + exclude: ["node_modules/**", "src/**/*.d.ts"], + check: false, + }), ...resultViteConfig.plugins as PluginOption[], mendixHotreloadReactPlugin(), mendixPatchViteClientPlugin(), @@ -84,7 +99,7 @@ const startWebCommand = async () => { }); } }, - ] + ], }); await viteServer.listen(); diff --git a/src/type-generator/mendix-types.ts b/src/type-generator/mendix-types.ts index 6202b37..624d9b9 100644 --- a/src/type-generator/mendix-types.ts +++ b/src/type-generator/mendix-types.ts @@ -180,7 +180,11 @@ export function mapPropertyToMendixType(property: Property, platform: GenerateTa function mapAttributeToMendixType(property: Property, imports: Set): string { const baseType = getAttributeBaseType(property.attributeTypes || []); - + + if (baseType.includes('Big')) { + imports.add('Big'); + } + if (property.dataSource) { imports.add('ListAttributeValue'); @@ -194,7 +198,11 @@ function mapAttributeToMendixType(property: Property, imports: Set): str function mapExpressionToMendixType(property: Property, imports: Set): string { const baseType = property.returnType ? mapReturnTypeToTS(property.returnType.type) : 'string'; - + + if (baseType.includes('Big')) { + imports.add('Big'); + } + if (property.dataSource) { imports.add('ListExpressionValue'); @@ -268,7 +276,7 @@ function mapSelectionToMendixType(property: Property, imports: Set): str function getAttributeBaseType(attributeTypes: AttributeType[]): string { if (attributeTypes.length === 0) return 'any'; - + const types = attributeTypes.map(type => { switch (type) { case 'String': @@ -280,11 +288,11 @@ function getAttributeBaseType(attributeTypes: AttributeType[]): string { case 'Integer': case 'Long': case 'AutoNumber': - case 'Float': case 'Currency': - return 'number'; case 'Decimal': return 'Big'; + case 'Float': + return 'number'; case 'DateTime': return 'Date'; case 'Binary': @@ -305,10 +313,12 @@ function mapReturnTypeToTS(returnType: string): string { case 'Boolean': return 'boolean'; case 'Integer': - case 'Float': - return 'number'; + case 'Long': + case 'AutoNumber': case 'Decimal': return 'Big'; + case 'Float': + return 'number'; case 'DateTime': return 'Date'; case 'String': @@ -326,22 +336,24 @@ function generateObjectInterface(property: Property): string { export function generateMendixImports(imports: string[]): string { if (imports.length === 0) return ''; - - const mendixImports = imports.filter(imp => - !['ReactNode'].includes(imp) - ); - + const reactImports = imports.filter(imp => imp === 'ReactNode'); - + const bigJsImports = imports.filter(imp => imp === 'Big'); + const mendixImports = imports.filter(imp => imp !== 'ReactNode' && imp !== 'Big'); + let output = ''; - + if (reactImports.length > 0) { output += `import { ${reactImports.join(', ')} } from 'react';\n`; } - + if (mendixImports.length > 0) { output += `import { ${mendixImports.join(', ')} } from 'mendix';\n`; } - + + if (bigJsImports.length > 0) { + output += `import { ${bigJsImports.join(', ')} } from 'big.js';\n`; + } + return output; -} \ No newline at end of file +} diff --git a/src/type-generator/utils.ts b/src/type-generator/utils.ts index bb67c80..bb87078 100644 --- a/src/type-generator/utils.ts +++ b/src/type-generator/utils.ts @@ -11,53 +11,57 @@ export function mapPropertyTypeToTS(property: Property, target?: GenerateTargetP return mapping.type; } -export function mapAttributeTypeToTS(attributeType: AttributeType): string { - switch (attributeType) { - case 'String': - case 'HashString': - case 'Enum': - return 'string'; - case 'Boolean': - return 'boolean'; - case 'Integer': - case 'Long': - case 'AutoNumber': - case 'Float': - case 'Currency': - case 'Decimal': - return 'number'; +export function mapAttributeTypeToTS(attributeType: AttributeType): string { + switch (attributeType) { + case 'String': + case 'HashString': + case 'Enum': + return 'string'; + case 'Boolean': + return 'boolean'; + case 'Integer': + case 'Long': + case 'AutoNumber': + case 'Currency': + case 'Decimal': + return 'Big'; + case 'Float': + return 'number'; + + case 'DateTime': + return 'Date | string'; + + case 'Binary': + return 'Blob | string'; + + default: + return 'any'; + } +} - case 'DateTime': - return 'Date | string'; - - case 'Binary': - return 'Blob | string'; - - default: - return 'any'; - } -} - -export function mapReturnTypeToTS(returnType: string): string { - switch (returnType) { - case 'Void': - return 'void'; - case 'Boolean': - return 'boolean'; - case 'Integer': - case 'Float': - case 'Decimal': - return 'number'; - case 'DateTime': - return 'Date | string'; - case 'String': - return 'string'; - case 'Object': - return 'object'; - default: - return 'any'; - } -} +export function mapReturnTypeToTS(returnType: string): string { + switch (returnType) { + case 'Void': + return 'void'; + case 'Boolean': + return 'boolean'; + case 'Integer': + case 'Long': + case 'AutoNumber': + case 'Decimal': + return 'Big'; + case 'Float': + return 'number'; + case 'DateTime': + return 'Date | string'; + case 'String': + return 'string'; + case 'Object': + return 'object'; + default: + return 'any'; + } +} export function ensureArray(value: T | T[] | undefined): T[] { if (!value) return []; @@ -85,4 +89,4 @@ export function formatDescription(description: string): string { .map(line => line.trim()) .filter(line => line.length > 0) .join(' '); -} \ No newline at end of file +}