@modern-js/bff-generator 1.1.5 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.handleTemplateFile = exports.default = void 0;
7
+
8
+ var _path = _interopRequireDefault(require("path"));
9
+
10
+ var _generatorUtils = require("@modern-js/generator-utils");
11
+
12
+ var _codesmithApiApp = require("@modern-js/codesmith-api-app");
13
+
14
+ var _codesmithApiJson = require("@modern-js/codesmith-api-json");
15
+
16
+ var _generatorCommon = require("@modern-js/generator-common");
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
+
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
23
+
24
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+
26
+ function isEmptyApiDir(apiDir) {
27
+ const files = _generatorUtils.fs.readdirSync(apiDir);
28
+
29
+ if (files.length === 0) {
30
+ return true;
31
+ }
32
+
33
+ return files.every(file => {
34
+ if (_generatorUtils.fs.statSync(_path.default.join(apiDir, file)).isDirectory()) {
35
+ const childFiles = _generatorUtils.fs.readdirSync(_path.default.join(apiDir, file));
36
+
37
+ return childFiles.length === 0;
38
+ }
39
+
40
+ return false;
41
+ });
42
+ } // eslint-disable-next-line max-statements
43
+
44
+
45
+ const handleTemplateFile = async (context, generator, appApi) => {
46
+ const jsonAPI = new _codesmithApiJson.JsonAPI(generator);
47
+ const ans = await appApi.getInputBySchema(_generatorCommon.BFFSchema, context.config);
48
+ const appDir = context.materials.default.basePath;
49
+
50
+ const apiDir = _path.default.join(appDir, 'api');
51
+
52
+ if (_generatorUtils.fs.existsSync(apiDir) && !isEmptyApiDir(apiDir)) {
53
+ const files = _generatorUtils.fs.readdirSync(apiDir);
54
+
55
+ if (files.length > 0) {
56
+ generator.logger.warn("'api' is already exist");
57
+ throw Error("'api' is already exist");
58
+ }
59
+ }
60
+
61
+ const {
62
+ bffType,
63
+ framework
64
+ } = ans;
65
+ const language = (0, _generatorUtils.isTsProject)(appDir) ? _generatorCommon.Language.TS : _generatorCommon.Language.JS;
66
+
67
+ if (language === _generatorCommon.Language.JS && framework === _generatorCommon.Framework.Nest) {
68
+ generator.logger.warn('nest not support js project');
69
+ throw Error('nest not support js project');
70
+ }
71
+
72
+ let updateInfo = {};
73
+
74
+ if (framework === _generatorCommon.Framework.Express || framework === _generatorCommon.Framework.Koa) {
75
+ updateInfo = {
76
+ [`devDependencies.@types/${framework}`]: `^${await (0, _generatorUtils.getPackageVersion)(`@types/${framework}`)}`
77
+ };
78
+ }
79
+
80
+ if (framework === _generatorCommon.Framework.Nest) {
81
+ updateInfo = {
82
+ 'dependencies.@nestjs/core': `^${await (0, _generatorUtils.getPackageVersion)('@nestjs/core')}`,
83
+ 'dependencies.@nestjs/common': `^${await (0, _generatorUtils.getPackageVersion)('@nestjs/common')}`
84
+ };
85
+
86
+ if (bffType === _generatorCommon.BFFType.Func) {
87
+ updateInfo['dependencies.express'] = `^${await (0, _generatorUtils.getPackageVersion)('express')}`;
88
+ updateInfo['devDependencies.@types/express'] = `^${await (0, _generatorUtils.getPackageVersion)('@types/express')}`;
89
+ }
90
+ } else {
91
+ updateInfo = _objectSpread(_objectSpread({}, updateInfo), {}, {
92
+ [`dependencies.${framework}`]: `^${await (0, _generatorUtils.getPackageVersion)(framework)}`
93
+ });
94
+ }
95
+
96
+ await jsonAPI.update(context.materials.default.get(_path.default.join(appDir, 'package.json')), {
97
+ query: {},
98
+ update: {
99
+ $set: _objectSpread({
100
+ 'dependencies.@modern-js/plugin-bff': `^${await (0, _generatorUtils.getPackageVersion)('@modern-js/plugin-bff')}`,
101
+ [`dependencies.@modern-js/plugin-${framework}`]: `^${await (0, _generatorUtils.getPackageVersion)(`@modern-js/plugin-${framework}`)}`
102
+ }, updateInfo)
103
+ }
104
+ });
105
+
106
+ if (language === _generatorCommon.Language.TS) {
107
+ const tsconfigJSON = (0, _generatorUtils.readTsConfigByFile)(_path.default.join(appDir, 'tsconfig.json'));
108
+
109
+ if (!(tsconfigJSON.include || []).includes('api')) {
110
+ await jsonAPI.update(context.materials.default.get(_path.default.join(appDir, 'tsconfig.json')), {
111
+ query: {},
112
+ update: {
113
+ $set: {
114
+ include: [...(tsconfigJSON.include || []), 'api']
115
+ }
116
+ }
117
+ });
118
+ }
119
+ } else {
120
+ await appApi.forgeTemplate('templates/js-template/**/*', undefined, resourceKey => resourceKey.replace('templates/js-template/', 'api/').replace('.handlebars', `.${language}`));
121
+ }
122
+
123
+ if (bffType === _generatorCommon.BFFType.Func) {
124
+ if (language === _generatorCommon.Language.TS) {
125
+ await jsonAPI.update(context.materials.default.get(_path.default.join(appDir, 'tsconfig.json')), {
126
+ query: {},
127
+ update: {
128
+ $set: {
129
+ 'compilerOptions.paths.@api/*': ['./api/*']
130
+ }
131
+ }
132
+ });
133
+ }
134
+
135
+ await appApi.forgeTemplate('templates/function/base/*', undefined, resourceKey => resourceKey.replace('templates/function/base/', 'api/').replace('.handlebars', `.${language}`));
136
+ await appApi.forgeTemplate(`templates/function/info/*`, resourceKey => resourceKey.includes(language), resourceKey => resourceKey.replace('templates/function/info/', 'api/info/').replace('.handlebars', ``));
137
+ await appApi.forgeTemplate(`templates/function/app/${language}/${framework}.${language}.handlebars`, undefined, resourceKey => resourceKey.replace(`templates/function/app/${language}/${framework}.${language}.handlebars`, `api/_app.${language}`));
138
+ } else {
139
+ if (language === _generatorCommon.Language.TS) {
140
+ await jsonAPI.update(context.materials.default.get(_path.default.join(appDir, 'tsconfig.json')), {
141
+ query: {},
142
+ update: {
143
+ $set: {
144
+ 'compilerOptions.paths.@api/*': ['./api/lambda/*']
145
+ }
146
+ }
147
+ });
148
+ }
149
+
150
+ await appApi.forgeTemplate(`templates/framework/lambda/*`, undefined, resourceKey => resourceKey.replace(`templates/framework/`, 'api/').replace('.handlebars', `.${language}`));
151
+ await appApi.forgeTemplate(`templates/framework/app/${framework}/**/*`, resourceKey => framework === _generatorCommon.Framework.Egg || framework === _generatorCommon.Framework.Koa ? resourceKey.includes(language) : true, resourceKey => resourceKey.replace(`templates/framework/app/${framework}/`, 'api/').replace('.handlebars', framework === _generatorCommon.Framework.Express ? `.${language}` : ''));
152
+ }
153
+
154
+ const appendTypeContent = _generatorCommon.FrameworkAppendTypeContent[framework];
155
+
156
+ if (appendTypeContent) {
157
+ const typePath = _path.default.join(appDir, 'src', 'modern-app-env.d.ts');
158
+
159
+ if (_generatorUtils.fs.existsSync(typePath)) {
160
+ const npmrc = _generatorUtils.fs.readFileSync(typePath, 'utf-8');
161
+
162
+ if (!npmrc.includes(appendTypeContent)) {
163
+ _generatorUtils.fs.writeFileSync(typePath, `${npmrc}${appendTypeContent}\n`, 'utf-8');
164
+ }
165
+ } else {
166
+ _generatorUtils.fs.ensureFileSync(typePath);
167
+
168
+ _generatorUtils.fs.writeFileSync(typePath, appendTypeContent, 'utf-8');
169
+ }
170
+ }
171
+ };
172
+
173
+ exports.handleTemplateFile = handleTemplateFile;
174
+
175
+ var _default = async (context, generator) => {
176
+ const appApi = new _codesmithApiApp.AppAPI(context, generator);
177
+ const {
178
+ locale
179
+ } = context.config;
180
+
181
+ _generatorCommon.i18n.changeLanguage({
182
+ locale
183
+ });
184
+
185
+ appApi.i18n.changeLanguage({
186
+ locale
187
+ });
188
+
189
+ if (!(await appApi.checkEnvironment())) {
190
+ // eslint-disable-next-line no-process-exit
191
+ process.exit(1);
192
+ }
193
+
194
+ generator.logger.debug(`start run @modern-js/bff-generator`);
195
+ generator.logger.debug(`context=${JSON.stringify(context)}`);
196
+ generator.logger.debug(`context.data=${JSON.stringify(context.data)}`);
197
+
198
+ try {
199
+ await handleTemplateFile(context, generator, appApi);
200
+ } catch (e) {
201
+ // eslint-disable-next-line no-process-exit
202
+ process.exit(1);
203
+ }
204
+
205
+ await appApi.runInstall();
206
+ generator.logger.debug(`forge @modern-js/bff-generator succeed `);
207
+ };
208
+
209
+ exports.default = _default;