@corva/create-app 0.0.0-b560f33 → 0.0.0-e3730ad
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.
- package/README.md +5 -5
- package/common/python/Makefile +8 -5
- package/common/python/pyproject.toml +25 -0
- package/common/python/uv.lock +381 -0
- package/lib/commands/create.js +5 -5
- package/lib/constants/cli.js +6 -8
- package/lib/constants/manifest.js +3 -3
- package/lib/constants/package.js +51 -13
- package/lib/flows/lib/api.js +23 -8
- package/lib/flows/lib/manifest.js +1 -1
- package/lib/flows/steps/zip-file-list-resolve.js +13 -8
- package/lib/helpers/cli-version.js +14 -1
- package/lib/helpers/resolve-app-runtime.js +30 -15
- package/lib/helpers/utils.js +6 -2
- package/lib/main.js +3 -8
- package/package.json +1 -1
- package/templates/ui/javascript/.codex/config.toml +3 -0
- package/templates/ui/javascript/.cursor/mcp.json +8 -0
- package/templates/ui/javascript/.mcp.json +8 -0
- package/templates/ui/javascript/AGENTS.md +304 -0
- package/templates/ui/javascript/CLAUDE.md +1 -0
- package/templates/ui/javascript/src/App.completion.js +6 -17
- package/templates/ui/javascript/src/App.drilling.js +7 -11
- package/templates/ui/javascript/src/AppSettings.js +6 -20
- package/templates/ui/javascript/src/__tests__/App.test.js +4 -24
- package/templates/ui/javascript/src/__tests__/AppSettings.test.js +12 -5
- package/templates/ui/javascript/src/index.js +1 -0
- package/templates/ui/typescript/.codex/config.toml +3 -0
- package/templates/ui/typescript/.cursor/mcp.json +8 -0
- package/templates/ui/typescript/.mcp.json +8 -0
- package/templates/ui/typescript/AGENTS.md +344 -0
- package/templates/ui/typescript/CLAUDE.md +1 -0
- package/templates/ui/typescript/src/App.completion.tsx +6 -10
- package/templates/ui/typescript/src/App.drilling.tsx +7 -9
- package/templates/ui/typescript/src/AppSettings.tsx +4 -4
- package/templates/ui/typescript/src/__mocks__/mockData.ts +15 -187
- package/templates/ui/typescript/src/__tests__/App.test.tsx +5 -73
- package/templates/ui/typescript/src/__tests__/AppSettings.test.tsx +9 -13
- package/templates/ui/typescript/src/custom.d.ts +10 -0
- package/templates/ui/typescript/src/index.js +1 -0
- package/templates/ui/typescript/src/types.ts +0 -615
- package/common/python/requirements.txt +0 -2
- package/templates/ui/javascript/src/__mocks__/mockAppProps.js +0 -590
- package/templates/ui/javascript/src/__mocks__/mockAppSettingsProps.js +0 -290
- /package/templates/ui/javascript/src/{App.css → App.scss} +0 -0
- /package/templates/ui/typescript/src/{App.css → App.scss} +0 -0
package/lib/constants/package.js
CHANGED
|
@@ -10,7 +10,7 @@ const uiDependencies = {
|
|
|
10
10
|
'@icon-park/react': '1.4.2',
|
|
11
11
|
'classnames': '2.2.6',
|
|
12
12
|
'corva-convert-units': '1.10.33',
|
|
13
|
-
'highcharts': '
|
|
13
|
+
'highcharts': '10.3.3',
|
|
14
14
|
'highcharts-react-official': '2.2.2',
|
|
15
15
|
'lodash': '^4.17.21',
|
|
16
16
|
'mapbox.js': '3.2.1',
|
|
@@ -22,17 +22,17 @@ const uiDependencies = {
|
|
|
22
22
|
|
|
23
23
|
const jsUiDevDependencies = {
|
|
24
24
|
'@corva/dc-platform-shared': 'latest',
|
|
25
|
-
'@corva/eslint-config-browser': '
|
|
25
|
+
'@corva/eslint-config-browser': '0.2.2',
|
|
26
26
|
'@testing-library/jest-dom': '^5.14.1',
|
|
27
27
|
'@testing-library/react': '^12.1.5',
|
|
28
28
|
'@testing-library/react-hooks': '^8.0.1',
|
|
29
29
|
'@testing-library/user-event': '^13.2.1',
|
|
30
|
-
'jest-watch-typeahead': '^1.0.0',
|
|
31
|
-
'jest': '^27.4.3',
|
|
32
30
|
'babel-jest': '^27.4.2',
|
|
33
31
|
'babel-preset-react-app': '^10.0.1',
|
|
34
32
|
'eslint': '7.32.0',
|
|
35
|
-
'
|
|
33
|
+
'identity-obj-proxy': '^3.0.0',
|
|
34
|
+
'jest': '^27.4.3',
|
|
35
|
+
'jest-watch-typeahead': '^1.0.0',
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
const tsUiDevDependencies = {
|
|
@@ -124,12 +124,12 @@ const uiPackage = {
|
|
|
124
124
|
},
|
|
125
125
|
transformIgnorePatterns: [
|
|
126
126
|
'/node_modules/(?!.*@babel/runtime|@icon-park/react/es).+\\.(js|jsx|mjs|cjs|ts|tsx)$',
|
|
127
|
-
'^.+\\.
|
|
127
|
+
'^.+\\.(css|sass|scss)$',
|
|
128
128
|
],
|
|
129
129
|
modulePaths: [],
|
|
130
130
|
moduleNameMapper: {
|
|
131
131
|
'~(.*)': '<rootDir>/src/$1',
|
|
132
|
-
'^.+\\.
|
|
132
|
+
'^.+\\.(css|sass|scss)$': 'identity-obj-proxy',
|
|
133
133
|
'@corva/ui(.*)': '@corva/ui/cjs-bundle/$1',
|
|
134
134
|
},
|
|
135
135
|
watchPlugins: ['jest-watch-typeahead/filename', 'jest-watch-typeahead/testname'],
|
|
@@ -138,6 +138,9 @@ const uiPackage = {
|
|
|
138
138
|
'lint-staged': {
|
|
139
139
|
'src/**/*.{js,jsx,ts,tsx}': 'eslint --fix',
|
|
140
140
|
},
|
|
141
|
+
'resolutions': {
|
|
142
|
+
'@noble/hashes': '1.8.0',
|
|
143
|
+
},
|
|
141
144
|
};
|
|
142
145
|
|
|
143
146
|
const tsUiPackage = {
|
|
@@ -145,29 +148,33 @@ const tsUiPackage = {
|
|
|
145
148
|
devDependencies: tsUiDevDependencies,
|
|
146
149
|
// todo: temporary solution, ref https://github.com/oppia/oppia/issues/22283#issuecomment-2756641371
|
|
147
150
|
resolutions: {
|
|
151
|
+
...uiPackage.resolutions,
|
|
148
152
|
'@types/babel__traverse': '7.20.6',
|
|
149
153
|
},
|
|
150
154
|
};
|
|
151
155
|
|
|
152
156
|
const nodeNpmScripts = {
|
|
153
157
|
'bundle': 'create-corva-app zip .',
|
|
154
|
-
'test': 'npm
|
|
158
|
+
'test': 'npm run unit',
|
|
155
159
|
'unit': 'jest',
|
|
156
160
|
'lint': 'eslint --ext .js,.ts .',
|
|
157
161
|
'lint:fix': 'eslint --ext .js,.ts --fix .',
|
|
158
162
|
};
|
|
159
163
|
|
|
160
164
|
const nodeDependencies = {
|
|
161
|
-
'@corva/node-sdk': '^8.
|
|
165
|
+
'@corva/node-sdk': '^8.5.0',
|
|
162
166
|
};
|
|
163
167
|
|
|
164
168
|
const nodeDevDependencies = {
|
|
165
|
-
'@corva/eslint-config-node': '^
|
|
169
|
+
'@corva/eslint-config-node': '^6.0.0',
|
|
170
|
+
'@typescript-eslint/eslint-plugin': '^8.58.1',
|
|
171
|
+
'@typescript-eslint/parser': '^8.58.1',
|
|
166
172
|
'jest': '^29.7.0',
|
|
167
173
|
'dotenv': '^16.0.3',
|
|
168
174
|
'eslint': '^8.2.0',
|
|
175
|
+
'eslint-plugin-jest': '^27.1.5',
|
|
169
176
|
'prettier': '^2.0.0',
|
|
170
|
-
'typescript': '^5.
|
|
177
|
+
'typescript': '^5.9.3',
|
|
171
178
|
};
|
|
172
179
|
|
|
173
180
|
const nodeTsDevDependencies = {
|
|
@@ -178,7 +185,7 @@ const nodeTsDevDependencies = {
|
|
|
178
185
|
|
|
179
186
|
const nodeYarnScripts = {
|
|
180
187
|
...nodeNpmScripts,
|
|
181
|
-
test: 'yarn
|
|
188
|
+
test: 'yarn unit',
|
|
182
189
|
};
|
|
183
190
|
|
|
184
191
|
const commonTsScripts = {
|
|
@@ -212,6 +219,36 @@ const nodeNpmPackage = {
|
|
|
212
219
|
eslintConfig: {
|
|
213
220
|
root: true,
|
|
214
221
|
extends: '@corva/eslint-config-node',
|
|
222
|
+
overrides: [
|
|
223
|
+
{
|
|
224
|
+
files: ['**/*.ts'],
|
|
225
|
+
parser: '@typescript-eslint/parser',
|
|
226
|
+
parserOptions: {
|
|
227
|
+
project: 'tsconfig.json',
|
|
228
|
+
sourceType: 'module',
|
|
229
|
+
},
|
|
230
|
+
plugins: ['@typescript-eslint/eslint-plugin'],
|
|
231
|
+
rules: {
|
|
232
|
+
'@typescript-eslint/padding-line-between-statements': 'off',
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
files: [
|
|
237
|
+
'**/*.spec.js',
|
|
238
|
+
'**/*.spec.ts',
|
|
239
|
+
'**/*.spec.mjs',
|
|
240
|
+
'**/*.spec.cjs',
|
|
241
|
+
'**/__mocks__/**/*.js',
|
|
242
|
+
'**/__mocks__/**/*.ts',
|
|
243
|
+
'**/__mocks__/**/*.cjs',
|
|
244
|
+
'**/__mocks__/**/*.mjs',
|
|
245
|
+
],
|
|
246
|
+
plugins: ['jest'],
|
|
247
|
+
env: {
|
|
248
|
+
jest: true,
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
],
|
|
215
252
|
},
|
|
216
253
|
};
|
|
217
254
|
|
|
@@ -238,7 +275,8 @@ const nodeTsYarnPackage = {
|
|
|
238
275
|
|
|
239
276
|
const extendWithTsConfig = (packageJson, version) => {
|
|
240
277
|
packageJson.devDependencies = {
|
|
241
|
-
|
|
278
|
+
// New @tsconfig/nodeX package versioning: it starts with X major version
|
|
279
|
+
[`@tsconfig/node${version}`]: `^${version}`,
|
|
242
280
|
...packageJson.devDependencies,
|
|
243
281
|
};
|
|
244
282
|
|
package/lib/flows/lib/api.js
CHANGED
|
@@ -42,15 +42,30 @@ export class Api {
|
|
|
42
42
|
* @returns {object}
|
|
43
43
|
*/
|
|
44
44
|
async getAppByKey(appKey) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
try {
|
|
46
|
+
const { data } = await this.#api.get(`v2/apps/${appKey}`).json();
|
|
47
|
+
|
|
48
|
+
if (!data) {
|
|
49
|
+
throw new StepError(
|
|
50
|
+
`App with key - ${appKey}, does not exist.\nThe key search is case-sensitive. You might need to update the app key in your app to exactly match the key.`,
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return data;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
if (error?.response?.statusCode === 404) {
|
|
57
|
+
throw new StepError(
|
|
58
|
+
`App with key - ${appKey}, does not exist.\nThe key search is case-sensitive. You might need to update the app key in your app to exactly match the key.`,
|
|
59
|
+
{ cause: error },
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
// If error has a response, it's an API exception
|
|
63
|
+
else if (error?.response) {
|
|
64
|
+
throw new StepError(`getAppByKey request failed, code:${error?.response?.statusCode}`);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
throw error;
|
|
51
68
|
}
|
|
52
|
-
|
|
53
|
-
return data;
|
|
54
69
|
}
|
|
55
70
|
|
|
56
71
|
/**
|
|
@@ -11,7 +11,7 @@ const SCHEDULER_MAPPING = [SCHEDULER_TYPE_DATA_TIME, SCHEDULER_TYPE_DEPTH, SCHED
|
|
|
11
11
|
{},
|
|
12
12
|
);
|
|
13
13
|
|
|
14
|
-
const NODE_RUNTIMES = [APP_RUNTIMES.
|
|
14
|
+
const NODE_RUNTIMES = [APP_RUNTIMES.NODE24];
|
|
15
15
|
|
|
16
16
|
export class Manifest {
|
|
17
17
|
constructor(manifest) {
|
|
@@ -98,13 +98,12 @@ const resolveDataToZipUiApp = async (itemsToZip = [], { options, pkg, dirName, m
|
|
|
98
98
|
|
|
99
99
|
itemsToSave.push({
|
|
100
100
|
name: tmpPackageForSourceName,
|
|
101
|
-
content:
|
|
102
|
-
|
|
103
|
-
{
|
|
104
|
-
build:
|
|
101
|
+
content: {
|
|
102
|
+
...pkg,
|
|
103
|
+
scripts: {
|
|
104
|
+
build: pkg.scripts?.build,
|
|
105
105
|
},
|
|
106
|
-
|
|
107
|
-
),
|
|
106
|
+
},
|
|
108
107
|
});
|
|
109
108
|
|
|
110
109
|
const itemsToRemove = [tmpPackageForSourceName];
|
|
@@ -112,7 +111,11 @@ const resolveDataToZipUiApp = async (itemsToZip = [], { options, pkg, dirName, m
|
|
|
112
111
|
itemsToZip.push(
|
|
113
112
|
'manifest.json',
|
|
114
113
|
'config-overrides.js',
|
|
114
|
+
'eslint.config.js',
|
|
115
|
+
'eslint.config.mjs',
|
|
115
116
|
'tsconfig.json',
|
|
117
|
+
'prettier.config.js',
|
|
118
|
+
'.prettierrc',
|
|
116
119
|
'.npmrc',
|
|
117
120
|
'.nvmrc',
|
|
118
121
|
'yarn.lock',
|
|
@@ -184,7 +187,9 @@ const resolveDataForZipNodeJsApp = async (itemsToZip = [], { options, pkg, dirNa
|
|
|
184
187
|
|
|
185
188
|
itemsToZip.push('config', 'manifest.json', 'package.json', '.nvmrc', '.npmrc', '.eslintrc.js');
|
|
186
189
|
|
|
187
|
-
if (packageDirContent.includes('
|
|
190
|
+
if (packageDirContent.includes('pnpm-lock.yaml')) {
|
|
191
|
+
itemsToZip.push('pnpm-lock.yaml');
|
|
192
|
+
} else if (packageDirContent.includes('package-lock.json')) {
|
|
188
193
|
itemsToZip.push('package-lock.json');
|
|
189
194
|
|
|
190
195
|
if (shouldUpdateVersion) {
|
|
@@ -250,7 +255,7 @@ const resolveDataForZipPythonApp = async (itemsToZip = [], { manifest, dirName,
|
|
|
250
255
|
);
|
|
251
256
|
}
|
|
252
257
|
|
|
253
|
-
itemsToZip.push('manifest.json', 'requirements.txt');
|
|
258
|
+
itemsToZip.push('manifest.json', 'pyproject.toml', 'uv.lock', 'requirements.txt');
|
|
254
259
|
|
|
255
260
|
return {
|
|
256
261
|
zipFileName,
|
|
@@ -75,7 +75,20 @@ export async function warnIfOutdated() {
|
|
|
75
75
|
logger.write('Checking for updates...\n');
|
|
76
76
|
|
|
77
77
|
const currentVersion = await getCurrentVersion();
|
|
78
|
-
|
|
78
|
+
|
|
79
|
+
let latestVersion;
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
latestVersion = await getLatestVersion();
|
|
83
|
+
} catch (caughtError) {
|
|
84
|
+
if (!(caughtError instanceof StepError)) {
|
|
85
|
+
throw caughtError;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
logger.write(' ⚠️ Skipping version check (could not reach npm registry).\n');
|
|
89
|
+
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
79
92
|
|
|
80
93
|
// Skip version check if current version is a prerelease (dev or next)
|
|
81
94
|
if (!isRegularVersion(currentVersion)) {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import debugFn from 'debug';
|
|
2
2
|
import { APP_TYPES } from '../constants/cli.js';
|
|
3
|
-
|
|
4
|
-
const debug = debugFn('cca:resolve-app-runtime');
|
|
5
|
-
|
|
6
3
|
import spawn from 'cross-spawn';
|
|
7
4
|
import { promises as fs } from 'fs';
|
|
8
5
|
import os from 'os';
|
|
9
6
|
import semver from 'semver';
|
|
10
7
|
|
|
8
|
+
const debug = debugFn('cca:resolve-app-runtime');
|
|
9
|
+
const DEFAULT_UI_NODE_VERSION = '24';
|
|
10
|
+
const DEFAULT_UI_NODE_RANGE = '>=24 <25';
|
|
11
|
+
|
|
11
12
|
/**
|
|
12
13
|
*
|
|
13
14
|
* @param {string} command
|
|
@@ -38,11 +39,14 @@ const checkCliVersion = async (command, version) =>
|
|
|
38
39
|
|
|
39
40
|
debug(`%s version output: %s`, command, data.toString());
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
const currentVersion = semver.coerce(data.toString('utf-8'));
|
|
43
|
+
const requiredVersion = semver.coerce(semverVersionsMapping.node[version] || version);
|
|
44
|
+
|
|
45
|
+
resolve(semver.gte(currentVersion, requiredVersion));
|
|
42
46
|
});
|
|
43
47
|
});
|
|
44
48
|
|
|
45
|
-
const checkNodeVersion = (
|
|
49
|
+
const checkNodeVersion = (range) => async () => {
|
|
46
50
|
try {
|
|
47
51
|
await fs.access(`${os.homedir()}/.nvm/nvm.sh`);
|
|
48
52
|
|
|
@@ -53,7 +57,7 @@ const checkNodeVersion = (version) => async () => {
|
|
|
53
57
|
debug(e);
|
|
54
58
|
debug('nvm is not installed, checking node version');
|
|
55
59
|
|
|
56
|
-
return checkCliVersion('node',
|
|
60
|
+
return checkCliVersion('node', range);
|
|
57
61
|
}
|
|
58
62
|
};
|
|
59
63
|
|
|
@@ -61,17 +65,22 @@ export const IS_WINDOWS = process.platform === 'win32';
|
|
|
61
65
|
|
|
62
66
|
const semverVersionsMapping = {
|
|
63
67
|
node: {
|
|
64
|
-
18: '18.
|
|
65
|
-
20: '20.
|
|
68
|
+
18: '18.20.8',
|
|
69
|
+
20: '20.20.1',
|
|
70
|
+
24: '24.15.0',
|
|
66
71
|
},
|
|
67
72
|
python: {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
'3.10': '3.10.9',
|
|
71
|
-
'3.11': '3.11.1',
|
|
73
|
+
3.13: '3.13.13',
|
|
74
|
+
3.14: '3.14.4',
|
|
72
75
|
},
|
|
73
76
|
};
|
|
74
77
|
|
|
78
|
+
const nodeVersionRanges = {
|
|
79
|
+
18: '>=18 <19',
|
|
80
|
+
20: '>=20 <21',
|
|
81
|
+
24: '>=24 <25',
|
|
82
|
+
};
|
|
83
|
+
|
|
75
84
|
/**
|
|
76
85
|
* @typedef {Object} Runtime
|
|
77
86
|
* @property {string} language
|
|
@@ -79,17 +88,20 @@ const semverVersionsMapping = {
|
|
|
79
88
|
* @property {string} packageManager
|
|
80
89
|
* @property {string} version
|
|
81
90
|
* @property {string} semver
|
|
91
|
+
* @property {string} [enginesNode]
|
|
82
92
|
*/
|
|
83
93
|
export const resolveAppRuntime = (opts) => {
|
|
84
94
|
if (opts.appType === APP_TYPES.UI) {
|
|
85
|
-
const version =
|
|
95
|
+
const version = DEFAULT_UI_NODE_VERSION;
|
|
86
96
|
|
|
87
97
|
return {
|
|
98
|
+
environment: 'node',
|
|
88
99
|
language: opts.useTypescript ? 'typescript' : 'javascript',
|
|
89
|
-
isRuntimeAvailable: checkNodeVersion(
|
|
100
|
+
isRuntimeAvailable: checkNodeVersion(DEFAULT_UI_NODE_RANGE),
|
|
90
101
|
packageManager: opts.packageManager,
|
|
91
102
|
version,
|
|
92
103
|
semver: semverVersionsMapping.node[version],
|
|
104
|
+
enginesNode: DEFAULT_UI_NODE_RANGE,
|
|
93
105
|
};
|
|
94
106
|
}
|
|
95
107
|
|
|
@@ -97,17 +109,20 @@ export const resolveAppRuntime = (opts) => {
|
|
|
97
109
|
const version = /nodejs(\d{2})\.x/.exec(opts.runtime)[1];
|
|
98
110
|
|
|
99
111
|
return {
|
|
112
|
+
environment: 'node',
|
|
100
113
|
language: opts.useTypescript ? 'typescript' : 'javascript',
|
|
101
|
-
isRuntimeAvailable: checkNodeVersion(version),
|
|
114
|
+
isRuntimeAvailable: checkNodeVersion(nodeVersionRanges[version]),
|
|
102
115
|
packageManager: opts.packageManager,
|
|
103
116
|
version,
|
|
104
117
|
semver: semverVersionsMapping.node[version],
|
|
118
|
+
enginesNode: `^${version}`,
|
|
105
119
|
};
|
|
106
120
|
}
|
|
107
121
|
|
|
108
122
|
const version = /python(\d\.\d+)/.exec(opts.runtime)[1];
|
|
109
123
|
|
|
110
124
|
return {
|
|
125
|
+
environment: 'python',
|
|
111
126
|
language: 'python',
|
|
112
127
|
isRuntimeAvailable: async () => {
|
|
113
128
|
if (!IS_WINDOWS) {
|
package/lib/helpers/utils.js
CHANGED
|
@@ -26,9 +26,13 @@ export const addUiAppFile = (templateFolder, root, runtime, manifest, opts) => {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export const getExcludedFiles = (manifest) => {
|
|
29
|
-
|
|
29
|
+
const excludedFiles = ['.ruff_cache', '.venv', '.pytest_cache', '__pycache__'];
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
if (manifest.isUi()) {
|
|
32
|
+
return [...excludedFiles, 'App.drilling.js', 'App.completion.js', 'App.drilling.tsx', 'App.completion.tsx'];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return excludedFiles;
|
|
32
36
|
};
|
|
33
37
|
|
|
34
38
|
export function copyFileSync(source, target) {
|
package/lib/main.js
CHANGED
|
@@ -13,24 +13,20 @@ import { createCommand } from './commands/create.js';
|
|
|
13
13
|
|
|
14
14
|
import { ERROR_ICON } from './constants/messages.js';
|
|
15
15
|
import { StepError } from './flows/lib/step-error.js';
|
|
16
|
-
import debugFn from 'debug';
|
|
17
|
-
|
|
18
|
-
const debug = debugFn('cca:main');
|
|
19
16
|
|
|
20
17
|
function checkNodeVersion() {
|
|
21
18
|
logger.write('Checking node version...');
|
|
22
19
|
|
|
23
|
-
const unsupportedNodeVersion = !semver.satisfies(process.version, '>=
|
|
20
|
+
const unsupportedNodeVersion = !semver.satisfies(process.version, '>=24 <25');
|
|
24
21
|
|
|
25
22
|
if (unsupportedNodeVersion) {
|
|
26
23
|
logger.log(
|
|
27
24
|
chalk.red(
|
|
28
25
|
`\nYou are using Node ${process.version}.\n\n` +
|
|
29
|
-
`Please update to Node
|
|
26
|
+
`Please update to Node 24.x for a better, fully supported experience.\n`,
|
|
30
27
|
),
|
|
31
28
|
);
|
|
32
29
|
|
|
33
|
-
// Fall back to latest supported react-scripts on Node 4
|
|
34
30
|
return process.exit(1);
|
|
35
31
|
}
|
|
36
32
|
|
|
@@ -58,9 +54,8 @@ export async function run() {
|
|
|
58
54
|
if (e instanceof StepError) {
|
|
59
55
|
console.error(chalk.red(`${ERROR_ICON} ${e.message}`));
|
|
60
56
|
} else {
|
|
61
|
-
debug(e);
|
|
62
|
-
|
|
63
57
|
console.error(chalk.red(`${ERROR_ICON} Unknown error occured, please contact support`));
|
|
58
|
+
console.error(e);
|
|
64
59
|
}
|
|
65
60
|
|
|
66
61
|
process.exit(1);
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@corva/create-app","version":"0.0.0-
|
|
1
|
+
{"name":"@corva/create-app","version":"0.0.0-e3730ad","private":false,"description":"Create an app to use it in CORVA.AI","keywords":["react"],"bugs":{"url":"https://github.com/facebook/create-react-app/issues"},"repository":{"type":"git","url":"https://github.com/corva-ai/create-corva-app","directory":"@corva/create-app"},"license":"MIT","type":"module","bin":{"create-corva-app":"./bin/create-corva-app.cjs"},"files":["bin/**/*.cjs","bin/**/*.js","lib/**/*.js","templates","template_extensions","common"],"scripts":{"build":"echo \"build is not configured for package \\\"×\\\", skipping.\"","get-changelog":"conventional-changelog -r 2 -p angular","lint":"eslint . --resolve-plugins-relative-to $(pwd) --max-warnings 0","lint:fix":"eslint . --fix","release":"git add -A && standard-version -a","release-rc":"npm run release -- --prerelease","run:local-ui-ts-completion":"node ./bin/create-corva-app.cjs ../test-app-ui-ts-completions --appName 'TestAppUiTsCompletions' --segments 'completion' --category 'analytics' --appKey 'corva.testappuitscompletions.ui' --appType 'ui' --runtime 'ui' -t --extensions corva","run:local-ui-ts-drilling":"node ./bin/create-corva-app.cjs ../test-app-ui-ts-drilling --appName 'TestAppUiTsDrilling' --segments 'drilling' --category 'analytics' --appKey 'corva.testappuitsdrilling.ui' --appType 'ui' --runtime 'ui' -t --extensions corva","run:local-ui-ts-intervention":"node ./bin/create-corva-app.cjs ../test-app-ui-ts-intervention --appName 'TestAppUiTsIntervention' --segments 'intervention' --category 'analytics' --appKey 'corva.testappuitsintervention.ui' --appType 'ui' --runtime 'ui' -t --extensions corva","test":"NODE_OPTIONS='--experimental-vm-modules --no-warnings' jest"},"lint-staged":{"*.js":"npm run lint:fix"},"dependencies":{"archiver":"^5.3.0","chalk":"^4.1.0","commander":"^9.1.0","cross-spawn":"^7.0.3","debug":"^4.3.4","dotenv":"^16.0.0","figlet":"^1.5.0","form-data":"^4.0.0","fs-extra":"^9.0.1","glob":"^8.0.1","got":"^12.5.1","inquirer":"^8.2.3","is-glob":"^4.0.3","lodash":"^4.18.1","npm-api":"^1.0.0","semver":"^7.3.2","terminal-link":"^3.0.0"},"devDependencies":{"@babel/core":"^7.11.0","@babel/eslint-parser":"^7.19.1","@babel/plugin-proposal-class-properties":"^7.18.6","@babel/plugin-syntax-import-assertions":"^7.20.0","@babel/preset-react":"^7.18.6","@commitlint/cli":"^17.3.0","@commitlint/config-conventional":"^17.3.0","@corva/eslint-config-browser":"^0.1.7","@corva/eslint-config-node":"^6.0.0","@corva/node-sdk":"^8.5.0","@types/cross-spawn":"^6.0.2","@types/jest":"^29.5.4","@typescript-eslint/eslint-plugin":"^8.58.1","@typescript-eslint/parser":"^8.58.1","conventional-changelog-cli":"^2.1.0","eslint":"^8.2.0","eslint-plugin-jest":"^27.1.5","eslint-config-google":"^0.14.0","eslint-config-prettier":"^8.5.0","eslint-plugin-import":"^2.26.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^4.2.1","eslint-plugin-react":"^7.32.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-require-sort":"^1.3.0","husky":"^8.0.2","jest":"^29.6.4","prettier":"^2.0.0","prettier-plugin-packagejson":"^2.3.0","standard-version":"^9.0.0","typescript":"^5.9.3","zx":"^7.2.3"},"packageManager":"yarn@1.22.19+sha512.ff4579ab459bb25aa7c0ff75b62acebe576f6084b36aa842971cf250a5d8c6cd3bc9420b22ce63c7f93a0857bc6ef29291db39c3e7a23aab5adfd5a4dd6c5d71","engines":{"node":">=24 <25"},"standard-version":{"skip":{"tag":true}}}
|