diff --git a/packages/ant-component-mapper/src/validation-error/validation-error.d.ts b/packages/ant-component-mapper/src/validation-error/validation-error.d.ts index 2a21521c3..685c04bc9 100644 --- a/packages/ant-component-mapper/src/validation-error/validation-error.d.ts +++ b/packages/ant-component-mapper/src/validation-error/validation-error.d.ts @@ -1,5 +1,5 @@ import { Meta } from "@data-driven-forms/react-form-renderer"; -export type validationError = (meta: Meta, validateOnMount?: boolean) => boolean | any | undefined +export function validationError(meta: Meta, validateOnMount?: boolean): boolean | any | undefined export default validationError; diff --git a/packages/mui-component-mapper/src/validation-error/validation-error.d.ts b/packages/mui-component-mapper/src/validation-error/validation-error.d.ts index 873420dd9..acb784add 100644 --- a/packages/mui-component-mapper/src/validation-error/validation-error.d.ts +++ b/packages/mui-component-mapper/src/validation-error/validation-error.d.ts @@ -1,5 +1,5 @@ import { Meta } from "@data-driven-forms/react-form-renderer"; -export type validationError = (meta: Meta, validateOnMount?: boolean) => boolean | any | undefined; +export function validationError(meta: Meta, validateOnMount?: boolean): boolean | any | undefined; export default validationError; diff --git a/packages/react-form-renderer/src/component-types/component-types.d.ts b/packages/react-form-renderer/src/component-types/component-types.d.ts index 879c607b7..a243e8304 100644 --- a/packages/react-form-renderer/src/component-types/component-types.d.ts +++ b/packages/react-form-renderer/src/component-types/component-types.d.ts @@ -1,6 +1,6 @@ export type ComponentType = 'text-field'|'field-array'|'checkbox'|'sub-form'|'radio'|'tabs'|'tab-item'|'date-picker'|'time-picker'|'wizard'|'switch'|'textarea'|'select'|'plain-text'|'button'|'input-addon-group'|'input-addon-button-group'|'dual-list-select'|'slider'; -interface componentTypes { +interface IcomponentTypes { TEXT_FIELD: 'text-field'; FIELD_ARRAY: 'field-array'; CHECKBOX: 'checkbox'; @@ -22,6 +22,6 @@ interface componentTypes { SLIDER: 'slider'; } -declare const componentTypes: componentTypes; +declare const componentTypes: IcomponentTypes; export default componentTypes; diff --git a/packages/react-form-renderer/src/data-types/data-types.d.ts b/packages/react-form-renderer/src/data-types/data-types.d.ts index a32ed1ec9..8b048e83e 100644 --- a/packages/react-form-renderer/src/data-types/data-types.d.ts +++ b/packages/react-form-renderer/src/data-types/data-types.d.ts @@ -1,6 +1,6 @@ export type DataType = 'integer'|'float'|'number'|'boolean'|'string'; -interface dataTypes { +interface IdataTypes { INTEGER: 'integer'; FLOAT: 'float'; NUMBER: 'number'; @@ -8,6 +8,6 @@ interface dataTypes { STRING: 'string'; } -declare const dataTypes: dataTypes; +declare const dataTypes: IdataTypes; export default dataTypes; diff --git a/packages/react-form-renderer/src/validator-types/validator-types.d.ts b/packages/react-form-renderer/src/validator-types/validator-types.d.ts index b5ab63e79..790e4fc42 100644 --- a/packages/react-form-renderer/src/validator-types/validator-types.d.ts +++ b/packages/react-form-renderer/src/validator-types/validator-types.d.ts @@ -1,4 +1,4 @@ -interface validatorTypes { +interface IvalidatorTypes { REQUIRED: 'required'; MIN_LENGTH: 'min-length'; MAX_LENGTH: 'max-length'; @@ -10,6 +10,6 @@ interface validatorTypes { URL: 'url'; } -declare const validatorTypes: validatorTypes; +declare const validatorTypes: IvalidatorTypes; export default validatorTypes; diff --git a/scripts/generate-typings.js b/scripts/generate-typings.js index ffdee0a87..f9a71a3b4 100644 --- a/scripts/generate-typings.js +++ b/scripts/generate-typings.js @@ -19,17 +19,54 @@ async function generateIndexTypes(from, to) { const files = glob .sync(`${from}/*/`) .filter((name) => !name.includes('/tests/')) - .map((path) => - path - .replace(/\/$/, '') - .split('/') - .pop() - ); - const content = `${files.map( - (file) => `export { default as ${kebabToCamel(file.split('/').shift())} } from './${file.split('.').shift()}'; + .map((path) => path.replace(/\/$/, '').split('/').pop()); + const content = `${files.map((file) => { + let module; + let exportName; + const moduleSource = `${from}/${file.split('.').shift()}/${file}.js`.replace('//', '/'); + try { + module = require(`${to}/${file.split('.').shift()}`); + } catch (error) { + console.log('Unable to find module: ', moduleSource); + module = {}; + exportName = kebabToCamel(file.split('/').shift()); + } + + let fileSource; + /** + * Transform default module name to build index.d.ts export name + */ + if (module.default) { + try { + fileSource = fse.readFileSync(moduleSource, { encoding: 'utf-8' }); + } catch (error) { + console.error(`Unable to read file ${moduleSource}`); + exportName = kebabToCamel(file.split('/').shift()); + } + + if (fileSource) { + let name = fileSource.match(/export default *[a-zA-Z\d;]+\n/gm); + if (name !== null) { + name = name.pop().replace('export default', '').replace(/\n/, '').replace(';', '').trim(); + } else { + name = kebabToCamel(file.split('/').shift()); + } + + exportName = name; + if (!name) { + throw new Error(`module name missing!: ${file}\n`); + } + } + } + + if (!exportName) { + exportName = kebabToCamel(file.split('/').shift()); + } + + return `export { default as ${exportName} } from './${file.split('.').shift()}'; export * from './${file.split('.').shift()}'; -` - )}`.replace(/,/g, ''); +`; + })}`.replace(/,/g, ''); return Promise.all([fse.writeFile(path.resolve(to, 'index.d.ts'), content)]); }