Skip to content

Commit 57c1e12

Browse files
authored
Merge pull request #738 from izaera/IFI-2718
feat: migrate shared bundle generation to @liferay/cli
2 parents 41fda2f + 73ce1f2 commit 57c1e12

File tree

10 files changed

+139
-28
lines changed

10 files changed

+139
-28
lines changed

projects/js-toolkit/packages/liferay-cli/src/new/facet-angular/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ import {
1515
import dependencies from '../../dependencies.json';
1616
import ensureOutputFile from '../../util/ensureOutputFile';
1717

18-
import type {Facet, Options} from '../index';
18+
import type {Options} from '../index';
19+
import type {LiferayTargetFacet} from '../target-liferay';
1920

2021
const {
2122
PkgJson: {addDependencies},
2223
Text: {appendLines},
2324
} = TRANSFORM_OPERATIONS;
2425
const {info, print} = format;
2526

26-
const facet: Facet = {
27+
const facet: LiferayTargetFacet = {
28+
isPortlet: true,
29+
2730
async prompt(useDefaults: boolean, options: Options): Promise<Options> {
2831
return options;
2932
},

projects/js-toolkit/packages/liferay-cli/src/new/facet-plain-js/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,17 @@ import {
1313

1414
import ensureOutputFile from '../../util/ensureOutputFile';
1515

16-
import type {Facet, Options} from '../index';
16+
import type {Options} from '../index';
17+
import type {LiferayTargetFacet} from '../target-liferay';
1718

1819
const {
1920
Text: {appendLines},
2021
} = TRANSFORM_OPERATIONS;
2122
const {info, print} = format;
2223

23-
const facet: Facet = {
24+
const facet: LiferayTargetFacet = {
25+
isPortlet: true,
26+
2427
async prompt(useDefaults: boolean, options: Options): Promise<Options> {
2528
return options;
2629
},

projects/js-toolkit/packages/liferay-cli/src/new/facet-react/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ import {
1515
import dependencies from '../../dependencies.json';
1616
import ensureOutputFile from '../../util/ensureOutputFile';
1717

18-
import type {Facet, Options} from '../index';
18+
import type {Options} from '../index';
19+
import type {LiferayTargetFacet} from '../target-liferay';
1920

2021
const {
2122
PkgJson: {addDependencies},
2223
Text: {appendLines},
2324
} = TRANSFORM_OPERATIONS;
2425
const {info, print} = format;
2526

26-
const facet: Facet = {
27+
const facet: LiferayTargetFacet = {
28+
isPortlet: true,
29+
2730
async prompt(useDefaults: boolean, options: Options): Promise<Options> {
2831
return options;
2932
},
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/**
2+
* SPDX-FileCopyrightText: © 2017 Liferay, Inc. <https://liferay.com>
3+
* SPDX-License-Identifier: LGPL-3.0-or-later
4+
*/
5+
6+
import {FilePath, TemplateRenderer, format} from '@liferay/js-toolkit-core';
7+
8+
import prompt from '../../util/prompt';
9+
10+
import type {Options} from '../index';
11+
import type {LiferayTargetFacet} from '../target-liferay';
12+
13+
const {info, print} = format;
14+
15+
const facet: LiferayTargetFacet = {
16+
isPortlet: false,
17+
18+
async prompt(useDefaults: boolean, options: Options): Promise<Options> {
19+
return await prompt(useDefaults, options, [
20+
{
21+
default: false,
22+
message:
23+
'Does your shared bundle need an initializer?\n' +
24+
'\n' +
25+
' 💡 This is usually needed in frameworks which need a single point of\n' +
26+
' initialization.\n' +
27+
' 💡 It may also be useful if you need to load any polyfill that must be\n' +
28+
' loaded just once.\n' +
29+
'\n',
30+
name: 'createInitializer',
31+
type: 'confirm',
32+
},
33+
]);
34+
},
35+
36+
async render(options: Options): Promise<void> {
37+
if (!options['createInitializer']) {
38+
return;
39+
}
40+
41+
print(info`Generating initializer...`);
42+
43+
const renderer = new TemplateRenderer(
44+
new FilePath(__dirname).join('templates'),
45+
options.outputPath
46+
);
47+
48+
print(info` Configuring Babel`);
49+
50+
await renderer.render('.babelrc', options);
51+
52+
print(info` Creating initializer`);
53+
54+
await renderer.render('src/index.js', options);
55+
},
56+
};
57+
58+
export default facet;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["@babel/preset-env"]
3+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* Place any initialization of this shared bundle in this file. That way, you
3+
* can run:
4+
*
5+
* require('<%= name %>');
6+
*
7+
* in your dependent projects, before using this shared bundle and you will make
8+
* sure that this code is executed once.
9+
*/
10+

projects/js-toolkit/packages/liferay-cli/src/new/facet-vuejs/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ import {
1515
import dependencies from '../../dependencies.json';
1616
import ensureOutputFile from '../../util/ensureOutputFile';
1717

18-
import type {Facet, Options} from '../index';
18+
import type {Options} from '../index';
19+
import type {LiferayTargetFacet} from '../target-liferay';
1920

2021
const {
2122
PkgJson: {addDependencies},
2223
Text: {appendLines},
2324
} = TRANSFORM_OPERATIONS;
2425
const {info, print} = format;
2526

26-
const facet: Facet = {
27+
const facet: LiferayTargetFacet = {
28+
isPortlet: true,
29+
2730
async prompt(useDefaults: boolean, options: Options): Promise<Options> {
2831
return options;
2932
},

projects/js-toolkit/packages/liferay-cli/src/new/target-liferay/index.ts

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,25 @@ import facetProject from '../facet-project';
2222
import facetReact from '../facet-react';
2323
import facetSampleConfiguration from '../facet-sample-configuration';
2424
import facetSampleStyles from '../facet-sample-styles';
25+
import facetSharedBundle from '../facet-shared-bundle';
2526
import facetVuejs from '../facet-vuejs';
2627

27-
import type {Options, Target} from '..';
28+
import type {Facet, Options, Target} from '..';
29+
30+
export interface LiferayTargetFacet extends Facet {
31+
isPortlet: boolean;
32+
}
2833

2934
const {
3035
PkgJson: {addDependencies},
3136
} = TRANSFORM_OPERATIONS;
3237
const {info, print} = format;
3338

34-
const frameworkFacets = {
39+
const projectTypeFacets: {[name: string]: LiferayTargetFacet} = {
3540
'Angular': facetAngular,
3641
'Plain JavaScript': facetPlainJs,
3742
'React': facetReact,
43+
'Shared bundle': facetSharedBundle,
3844
'Vue.js': facetVuejs,
3945
};
4046
const platforms = dependencies['target-liferay']['platforms'];
@@ -55,28 +61,40 @@ const target: Target = {
5561
type: 'list',
5662
},
5763
{
58-
choices: Object.keys(frameworkFacets),
64+
choices: Object.keys(projectTypeFacets),
5965
default: 'React',
60-
defaultDescription: 'Using framework: {React}',
61-
message: 'Which will be your application framework?',
62-
name: 'framework',
66+
defaultDescription: 'Using project type: {React}',
67+
message: 'Which will be your project type?',
68+
name: 'projectType',
6369
type: 'list',
6470
},
6571
]);
6672

67-
options = await facetLocalization.prompt(true, options);
68-
options = await facetConfiguration.prompt(true, options);
69-
options = await facetPortlet.prompt(useDefaults, options);
73+
const projectTypeFacet =
74+
projectTypeFacets[options.projectType as string];
75+
76+
options = await facetLocalization.prompt(
77+
useDefaults || projectTypeFacet.isPortlet,
78+
options
79+
);
80+
options = await facetConfiguration.prompt(
81+
useDefaults || projectTypeFacet.isPortlet,
82+
options
83+
);
84+
85+
if (projectTypeFacet.isPortlet) {
86+
options = await facetPortlet.prompt(useDefaults, options);
87+
}
7088

71-
const frameworkFacet = frameworkFacets[options.framework as string];
89+
options = await facetBuildable.prompt(true, options);
90+
options = await projectTypeFacet.prompt(useDefaults, options);
7291

73-
if (frameworkFacet) {
74-
options = await facetBuildable.prompt(true, options);
75-
options = await frameworkFacet.prompt(useDefaults, options);
92+
if (projectTypeFacet.isPortlet) {
7693
options = await facetSampleStyles.prompt(true, options);
77-
options = await facetSampleConfiguration.prompt(true, options);
7894
}
7995

96+
options = await facetSampleConfiguration.prompt(true, options);
97+
8098
return options;
8199
},
82100

@@ -99,18 +117,24 @@ const target: Target = {
99117
})
100118
);
101119

120+
const projectTypeFacet =
121+
projectTypeFacets[options.projectType as string];
122+
102123
await facetLocalization.render(options);
103124
await facetConfiguration.render(options);
104-
await facetPortlet.render(options);
105125

106-
const frameworkFacet = frameworkFacets[options.framework as string];
126+
if (projectTypeFacet.isPortlet) {
127+
await facetPortlet.render(options);
128+
}
107129

108-
if (frameworkFacet) {
109-
await facetBuildable.render(options);
110-
await frameworkFacet.render(options);
130+
await facetBuildable.render(options);
131+
await projectTypeFacet.render(options);
132+
133+
if (projectTypeFacet.isPortlet) {
111134
await facetSampleStyles.render(options);
112-
await facetSampleConfiguration.render(options);
113135
}
136+
137+
await facetSampleConfiguration.render(options);
114138
},
115139
};
116140

projects/js-toolkit/qa/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
/agnostic-angular-portlet
22
/agnostic-plain-js-portlet
33
/agnostic-react-portlet
4+
/agnostic-shared-bundle
45
/agnostic-vuejs-portlet
56

67
/master-angular-portlet
78
/master-plain-js-portlet
89
/master-react-portlet
10+
/master-shared-bundle
911
/master-vuejs-portlet
1012

1113
/angular-cli-portlet

projects/js-toolkit/scripts/qa/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,13 @@ if (argv['generate']) {
4040
'Plain JavaScript'
4141
);
4242
generate('agnostic-react-portlet', 'portal-agnostic', 'React');
43+
generate('agnostic-shared-bundle', 'portal-agnostic', 'Shared bundle');
4344
generate('agnostic-vuejs-portlet', 'portal-agnostic', 'Vue.js');
4445

4546
generate('master-angular-portlet', 'portal-master', 'Angular');
4647
generate('master-plain-js-portlet', 'portal-master', 'Plain JavaScript');
4748
generate('master-react-portlet', 'portal-master', 'React');
49+
generate('master-shared-bundle', 'portal-master', 'Shared bundle');
4850
generate('master-vuejs-portlet', 'portal-master', 'Vue.js');
4951

5052
generateAngularCli('angular-cli-portlet');

0 commit comments

Comments
 (0)