From df3ed4ef51ec8a1d104dac5fb1983ba03f491cd9 Mon Sep 17 00:00:00 2001 From: Igggr Date: Mon, 18 Oct 2021 15:06:54 +0300 Subject: [PATCH 1/6] Add reexports in template --- .../src/metadata-generator.ts | 15 +++++++++------ .../src/metadata-model.ts | 1 + .../src/templates/component.tst | 9 +++++++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/devextreme-angular-generator/src/metadata-generator.ts b/packages/devextreme-angular-generator/src/metadata-generator.ts index 7308d2ed8..d51293fe5 100644 --- a/packages/devextreme-angular-generator/src/metadata-generator.ts +++ b/packages/devextreme-angular-generator/src/metadata-generator.ts @@ -66,6 +66,7 @@ interface WidgetComponent extends ComponentMeta, Container { isEditor: boolean; packageName: string; optionsTypeParams: string[]; + reexports: string[]; } interface Component extends ComponentMeta, Container { @@ -242,7 +243,8 @@ export default class DXComponentMetadataGenerator { packageName: config.wrapperPackageName, imports: buildImports(getValues(widget.Options), config.widgetPackageName), nestedComponents: widgetNestedComponents, - optionsTypeParams: widget.OptionsTypeParams + optionsTypeParams: widget.OptionsTypeParams, + reexports: widget.Reexports, // will write to metadata/generated/*.json }; logger('Write metadata to file ' + outputFilePath); @@ -327,12 +329,12 @@ export default class DXComponentMetadataGenerator { return result; } - private mergeArrayTypes(array1, array2) { + private mergeArrayTypes(array1: T[], array2: T[]): T[] { let newTypes = array2.filter(type => array1.indexOf(type) === -1); return [].concat(array1, newTypes); } - private getExternalObjectInfo(metadata: Metadata, typeName) { + private getExternalObjectInfo(metadata: Metadata, typeName: string) { let externalObject = metadata.ExtraObjects[typeName]; if (!externalObject) { @@ -492,7 +494,7 @@ export default class DXComponentMetadataGenerator { } else { existingComponent.properties = existingComponent.properties .concat(...component.properties) - .reduce((properties, property) => { + .reduce((properties: Property[], property) => { if (properties.filter(p => p.name === property.name).length === 0) { properties.push(property); } else { @@ -515,7 +517,7 @@ export default class DXComponentMetadataGenerator { existingComponent.events = existingComponent.events .concat(...component.events) - .reduce((events, event) => { + .reduce((events: Event[], event) => { if (events.filter(e => e.emit === event.emit).length === 0) { events.push(event); } @@ -535,7 +537,8 @@ export default class DXComponentMetadataGenerator { }, []); normalizedMetadata.forEach(component => { - component.collectionNestedComponents = component.collectionNestedComponents.reduce((result, nestedComponent) => { + component.collectionNestedComponents = component.collectionNestedComponents + .reduce((result: NestedComponent[], nestedComponent) => { if (result.filter(c => nestedComponent.className === c.className).length === 0) { result.push(nestedComponent); } diff --git a/packages/devextreme-angular-generator/src/metadata-model.ts b/packages/devextreme-angular-generator/src/metadata-model.ts index 459ad7bb4..4bd49014a 100644 --- a/packages/devextreme-angular-generator/src/metadata-model.ts +++ b/packages/devextreme-angular-generator/src/metadata-model.ts @@ -45,6 +45,7 @@ export interface Metadata { [optionName: string]: Option; }; OptionsTypeParams: string[]; + Reexports: string[]; } }; ExtraObjects: any[]; diff --git a/packages/devextreme-angular-generator/src/templates/component.tst b/packages/devextreme-angular-generator/src/templates/component.tst index 552d95836..fce165060 100644 --- a/packages/devextreme-angular-generator/src/templates/component.tst +++ b/packages/devextreme-angular-generator/src/templates/component.tst @@ -9,8 +9,17 @@ var implementedInterfaces = ['OnDestroy']; it.isEditor && implementedInterfaces.push('ControlValueAccessor'); collectionProperties.length && implementedInterfaces.push('OnChanges', 'DoCheck'); + +var reexports = it.reexports?.filter(n => n !== 'default'); +var reexportStr = reexports?.join(',\n '); #> +<#? reexports?.length #> +export { + <#= reexportStr #>, +} from '<#= it.module #>'; +<#?#> + import { BrowserTransferStateModule } from '@angular/platform-browser'; import { TransferState } from '@angular/platform-browser'; From 5eb5ded67a18afcaa6940769a05c49c056129c1e Mon Sep 17 00:00:00 2001 From: Igggr Date: Mon, 18 Oct 2021 18:04:11 +0300 Subject: [PATCH 2/6] Add test --- .../spec/tests/metadata-generator.spec.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js b/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js index 99986340b..c7ba7be24 100644 --- a/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js +++ b/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js @@ -210,7 +210,7 @@ describe("metadata-generator", function() { }); it("should generate proper optionsTypeParams", function() { - expect(metas.DxTestWidget.optionsTypeParams).toBe(["T1", "T2"]); + expect(metas.DxTestWidget.optionsTypeParams).toEqual(["T1", "T2"]); }); it("should detect editors", function() { @@ -294,7 +294,8 @@ describe("metadata-generator", function() { ] } }, - Module: 'typed_widget' + Module: 'typed_widget', + Reexports: ['OnClickEvent', 'OnChangeEvent', 'default'], }, dxWidgetWithPromise: { Options: { @@ -358,6 +359,12 @@ describe("metadata-generator", function() { } ]); }); + + it("should generate reexports", function(){ + expect(metas.DxTypedWidget.reexports).toEqual([ + 'OnClickEvent', 'OnChangeEvent', 'default' + ]) + }) }); describe("complex widgets", function() { From c18aaef62c16e1a306ff5c86a705a4fa764dd04e Mon Sep 17 00:00:00 2001 From: Igggr Date: Tue, 19 Oct 2021 13:17:14 +0300 Subject: [PATCH 3/6] Change generation of ree[ports on index.ts - to avoid collisions --- .../src/facade-generator.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/devextreme-angular-generator/src/facade-generator.ts b/packages/devextreme-angular-generator/src/facade-generator.ts index 4d50c859a..003fdec60 100644 --- a/packages/devextreme-angular-generator/src/facade-generator.ts +++ b/packages/devextreme-angular-generator/src/facade-generator.ts @@ -10,13 +10,14 @@ export default class FacadeGenerator { let facadeConfig = config.facades[facadeFilePath], resultContent = ''; - resultContent += `export * from 'devextreme-angular/core'\n`; - resultContent += `export * from './ui/all'\n`; + resultContent += `export * from 'devextreme-angular/core';\n`; + resultContent += `export * from './ui/all';\n`; fs.readdirSync(facadeConfig.sourceDirectories[0]) .filter(fileName => fs.lstatSync(path.join(facadeConfig.sourceDirectories[0], fileName)).isFile()) .forEach(fileName => { const { name } = path.parse(path.join(facadeConfig.sourceDirectories[0], fileName)); - resultContent += `export * from 'devextreme-angular/ui/${name}'\n`; + const formattedName = formatName(name); + resultContent += `export { Dx${formattedName}Component, Dx${formattedName}Module } from 'devextreme-angular/ui/${name}';\n`; }); logger('Write result to ' + facadeFilePath); @@ -24,3 +25,15 @@ export default class FacadeGenerator { }); } } + + +function formatName(name: string): string { + if (!name.includes('-')) { + return capFirst(name); + } + return name.split('-').map(capFirst).join(''); +} + +function capFirst(name: string): string { + return name[0].toUpperCase() + name.substr(1); +} \ No newline at end of file From 4f79c4955d98462f58d060a85b81c3db9559679f Mon Sep 17 00:00:00 2001 From: Igggr Date: Thu, 21 Oct 2021 17:03:02 +0300 Subject: [PATCH 4/6] Requested changes --- .../devextreme-angular-generator/src/facade-generator.ts | 9 +++------ .../src/metadata-generator.ts | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/devextreme-angular-generator/src/facade-generator.ts b/packages/devextreme-angular-generator/src/facade-generator.ts index 003fdec60..637600ae4 100644 --- a/packages/devextreme-angular-generator/src/facade-generator.ts +++ b/packages/devextreme-angular-generator/src/facade-generator.ts @@ -1,6 +1,7 @@ import fs = require('fs'); import path = require('path'); import logger from './logger'; +import inflector = require('inflector-js'); export default class FacadeGenerator { private _encoding = 'utf8'; @@ -29,11 +30,7 @@ export default class FacadeGenerator { function formatName(name: string): string { if (!name.includes('-')) { - return capFirst(name); + return inflector.camelize(name); } - return name.split('-').map(capFirst).join(''); + return name.split('-').map((n) => inflector.camelize(n)).join(''); } - -function capFirst(name: string): string { - return name[0].toUpperCase() + name.substr(1); -} \ No newline at end of file diff --git a/packages/devextreme-angular-generator/src/metadata-generator.ts b/packages/devextreme-angular-generator/src/metadata-generator.ts index d51293fe5..6e9df1d15 100644 --- a/packages/devextreme-angular-generator/src/metadata-generator.ts +++ b/packages/devextreme-angular-generator/src/metadata-generator.ts @@ -244,7 +244,7 @@ export default class DXComponentMetadataGenerator { imports: buildImports(getValues(widget.Options), config.widgetPackageName), nestedComponents: widgetNestedComponents, optionsTypeParams: widget.OptionsTypeParams, - reexports: widget.Reexports, // will write to metadata/generated/*.json + reexports: widget.Reexports, }; logger('Write metadata to file ' + outputFilePath); From 83015ba2d81a7ef265eb5d97379d1c6f12f738f0 Mon Sep 17 00:00:00 2001 From: Igggr Date: Thu, 21 Oct 2021 17:08:06 +0300 Subject: [PATCH 5/6] import only 2 members in index.ts --- .../spec/tests/metadata-generator.spec.js | 10 ++-------- .../src/metadata-generator.ts | 2 -- .../devextreme-angular-generator/src/metadata-model.ts | 1 - .../src/templates/component.tst | 9 --------- 4 files changed, 2 insertions(+), 20 deletions(-) diff --git a/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js b/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js index c7ba7be24..4bdad4b2b 100644 --- a/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js +++ b/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js @@ -294,8 +294,8 @@ describe("metadata-generator", function() { ] } }, - Module: 'typed_widget', - Reexports: ['OnClickEvent', 'OnChangeEvent', 'default'], + Module: 'typed_widget' + }, dxWidgetWithPromise: { Options: { @@ -359,12 +359,6 @@ describe("metadata-generator", function() { } ]); }); - - it("should generate reexports", function(){ - expect(metas.DxTypedWidget.reexports).toEqual([ - 'OnClickEvent', 'OnChangeEvent', 'default' - ]) - }) }); describe("complex widgets", function() { diff --git a/packages/devextreme-angular-generator/src/metadata-generator.ts b/packages/devextreme-angular-generator/src/metadata-generator.ts index 6e9df1d15..b1e3e9a00 100644 --- a/packages/devextreme-angular-generator/src/metadata-generator.ts +++ b/packages/devextreme-angular-generator/src/metadata-generator.ts @@ -66,7 +66,6 @@ interface WidgetComponent extends ComponentMeta, Container { isEditor: boolean; packageName: string; optionsTypeParams: string[]; - reexports: string[]; } interface Component extends ComponentMeta, Container { @@ -244,7 +243,6 @@ export default class DXComponentMetadataGenerator { imports: buildImports(getValues(widget.Options), config.widgetPackageName), nestedComponents: widgetNestedComponents, optionsTypeParams: widget.OptionsTypeParams, - reexports: widget.Reexports, }; logger('Write metadata to file ' + outputFilePath); diff --git a/packages/devextreme-angular-generator/src/metadata-model.ts b/packages/devextreme-angular-generator/src/metadata-model.ts index 4bd49014a..459ad7bb4 100644 --- a/packages/devextreme-angular-generator/src/metadata-model.ts +++ b/packages/devextreme-angular-generator/src/metadata-model.ts @@ -45,7 +45,6 @@ export interface Metadata { [optionName: string]: Option; }; OptionsTypeParams: string[]; - Reexports: string[]; } }; ExtraObjects: any[]; diff --git a/packages/devextreme-angular-generator/src/templates/component.tst b/packages/devextreme-angular-generator/src/templates/component.tst index fce165060..552d95836 100644 --- a/packages/devextreme-angular-generator/src/templates/component.tst +++ b/packages/devextreme-angular-generator/src/templates/component.tst @@ -9,17 +9,8 @@ var implementedInterfaces = ['OnDestroy']; it.isEditor && implementedInterfaces.push('ControlValueAccessor'); collectionProperties.length && implementedInterfaces.push('OnChanges', 'DoCheck'); - -var reexports = it.reexports?.filter(n => n !== 'default'); -var reexportStr = reexports?.join(',\n '); #> -<#? reexports?.length #> -export { - <#= reexportStr #>, -} from '<#= it.module #>'; -<#?#> - import { BrowserTransferStateModule } from '@angular/platform-browser'; import { TransferState } from '@angular/platform-browser'; From e746924192bdc0fbcbb422d97acb9a941b551406 Mon Sep 17 00:00:00 2001 From: Igggr Date: Thu, 21 Oct 2021 17:19:26 +0300 Subject: [PATCH 6/6] Revert "import only 2 members in index.ts" This reverts commit 83015ba2d81a7ef265eb5d97379d1c6f12f738f0. --- .../spec/tests/metadata-generator.spec.js | 10 ++++++++-- .../src/metadata-generator.ts | 2 ++ .../devextreme-angular-generator/src/metadata-model.ts | 1 + .../src/templates/component.tst | 9 +++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js b/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js index 4bdad4b2b..c7ba7be24 100644 --- a/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js +++ b/packages/devextreme-angular-generator/spec/tests/metadata-generator.spec.js @@ -294,8 +294,8 @@ describe("metadata-generator", function() { ] } }, - Module: 'typed_widget' - + Module: 'typed_widget', + Reexports: ['OnClickEvent', 'OnChangeEvent', 'default'], }, dxWidgetWithPromise: { Options: { @@ -359,6 +359,12 @@ describe("metadata-generator", function() { } ]); }); + + it("should generate reexports", function(){ + expect(metas.DxTypedWidget.reexports).toEqual([ + 'OnClickEvent', 'OnChangeEvent', 'default' + ]) + }) }); describe("complex widgets", function() { diff --git a/packages/devextreme-angular-generator/src/metadata-generator.ts b/packages/devextreme-angular-generator/src/metadata-generator.ts index b1e3e9a00..6e9df1d15 100644 --- a/packages/devextreme-angular-generator/src/metadata-generator.ts +++ b/packages/devextreme-angular-generator/src/metadata-generator.ts @@ -66,6 +66,7 @@ interface WidgetComponent extends ComponentMeta, Container { isEditor: boolean; packageName: string; optionsTypeParams: string[]; + reexports: string[]; } interface Component extends ComponentMeta, Container { @@ -243,6 +244,7 @@ export default class DXComponentMetadataGenerator { imports: buildImports(getValues(widget.Options), config.widgetPackageName), nestedComponents: widgetNestedComponents, optionsTypeParams: widget.OptionsTypeParams, + reexports: widget.Reexports, }; logger('Write metadata to file ' + outputFilePath); diff --git a/packages/devextreme-angular-generator/src/metadata-model.ts b/packages/devextreme-angular-generator/src/metadata-model.ts index 459ad7bb4..4bd49014a 100644 --- a/packages/devextreme-angular-generator/src/metadata-model.ts +++ b/packages/devextreme-angular-generator/src/metadata-model.ts @@ -45,6 +45,7 @@ export interface Metadata { [optionName: string]: Option; }; OptionsTypeParams: string[]; + Reexports: string[]; } }; ExtraObjects: any[]; diff --git a/packages/devextreme-angular-generator/src/templates/component.tst b/packages/devextreme-angular-generator/src/templates/component.tst index 552d95836..fce165060 100644 --- a/packages/devextreme-angular-generator/src/templates/component.tst +++ b/packages/devextreme-angular-generator/src/templates/component.tst @@ -9,8 +9,17 @@ var implementedInterfaces = ['OnDestroy']; it.isEditor && implementedInterfaces.push('ControlValueAccessor'); collectionProperties.length && implementedInterfaces.push('OnChanges', 'DoCheck'); + +var reexports = it.reexports?.filter(n => n !== 'default'); +var reexportStr = reexports?.join(',\n '); #> +<#? reexports?.length #> +export { + <#= reexportStr #>, +} from '<#= it.module #>'; +<#?#> + import { BrowserTransferStateModule } from '@angular/platform-browser'; import { TransferState } from '@angular/platform-browser';