@corva/create-app 0.0.0-ce43383 → 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.
Files changed (48) hide show
  1. package/README.md +5 -5
  2. package/common/python/Makefile +8 -5
  3. package/common/python/pyproject.toml +25 -0
  4. package/common/python/uv.lock +381 -0
  5. package/lib/commands/create.js +5 -5
  6. package/lib/constants/cli.js +6 -8
  7. package/lib/constants/manifest.js +3 -3
  8. package/lib/constants/package.js +44 -10
  9. package/lib/flows/lib/api.js +23 -8
  10. package/lib/flows/lib/manifest.js +1 -1
  11. package/lib/flows/steps/zip-file-list-resolve.js +8 -2
  12. package/lib/helpers/cli-version.js +14 -1
  13. package/lib/helpers/resolve-app-runtime.js +28 -13
  14. package/lib/helpers/utils.js +6 -2
  15. package/lib/main.js +2 -6
  16. package/package.json +1 -107
  17. package/templates/ui/javascript/.codex/config.toml +3 -0
  18. package/templates/ui/javascript/.cursor/mcp.json +8 -0
  19. package/templates/ui/javascript/.mcp.json +8 -0
  20. package/templates/ui/javascript/AGENTS.md +304 -0
  21. package/templates/ui/javascript/CLAUDE.md +1 -0
  22. package/templates/ui/javascript/src/App.completion.js +6 -17
  23. package/templates/ui/javascript/src/App.drilling.js +7 -11
  24. package/templates/ui/javascript/src/AppSettings.js +6 -20
  25. package/templates/ui/javascript/src/__tests__/App.test.js +4 -24
  26. package/templates/ui/javascript/src/__tests__/AppSettings.test.js +12 -5
  27. package/templates/ui/javascript/src/__tests__/TestsExample.test.js +2 -2
  28. package/templates/ui/javascript/src/index.js +1 -0
  29. package/templates/ui/typescript/.codex/config.toml +3 -0
  30. package/templates/ui/typescript/.cursor/mcp.json +8 -0
  31. package/templates/ui/typescript/.mcp.json +8 -0
  32. package/templates/ui/typescript/AGENTS.md +344 -0
  33. package/templates/ui/typescript/CLAUDE.md +1 -0
  34. package/templates/ui/typescript/src/App.completion.tsx +6 -10
  35. package/templates/ui/typescript/src/App.drilling.tsx +7 -9
  36. package/templates/ui/typescript/src/AppSettings.tsx +4 -4
  37. package/templates/ui/typescript/src/__mocks__/mockData.ts +15 -187
  38. package/templates/ui/typescript/src/__tests__/App.test.tsx +5 -73
  39. package/templates/ui/typescript/src/__tests__/AppSettings.test.tsx +9 -13
  40. package/templates/ui/typescript/src/__tests__/TestsExample.test.tsx +2 -2
  41. package/templates/ui/typescript/src/custom.d.ts +10 -0
  42. package/templates/ui/typescript/src/index.js +1 -0
  43. package/templates/ui/typescript/src/types.ts +0 -615
  44. package/common/python/requirements.txt +0 -2
  45. package/templates/ui/javascript/src/__mocks__/mockAppProps.js +0 -590
  46. package/templates/ui/javascript/src/__mocks__/mockAppSettingsProps.js +0 -290
  47. /package/templates/ui/javascript/src/{App.css → App.scss} +0 -0
  48. /package/templates/ui/typescript/src/{App.css → App.scss} +0 -0
@@ -22,17 +22,17 @@ const uiDependencies = {
22
22
 
23
23
  const jsUiDevDependencies = {
24
24
  '@corva/dc-platform-shared': 'latest',
25
- '@corva/eslint-config-browser': 'latest',
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
- 'postcss-loader': '4.1.0',
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
- '^.+\\.module\\.(css|sass|scss)$',
127
+ '^.+\\.(css|sass|scss)$',
128
128
  ],
129
129
  modulePaths: [],
130
130
  moduleNameMapper: {
131
131
  '~(.*)': '<rootDir>/src/$1',
132
- '^.+\\.module\\.(css|sass|scss)$': 'identity-obj-proxy',
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'],
@@ -162,16 +162,19 @@ const nodeNpmScripts = {
162
162
  };
163
163
 
164
164
  const nodeDependencies = {
165
- '@corva/node-sdk': '^8.3.0',
165
+ '@corva/node-sdk': '^8.5.0',
166
166
  };
167
167
 
168
168
  const nodeDevDependencies = {
169
- '@corva/eslint-config-node': '^5.1.1',
169
+ '@corva/eslint-config-node': '^6.0.0',
170
+ '@typescript-eslint/eslint-plugin': '^8.58.1',
171
+ '@typescript-eslint/parser': '^8.58.1',
170
172
  'jest': '^29.7.0',
171
173
  'dotenv': '^16.0.3',
172
174
  'eslint': '^8.2.0',
175
+ 'eslint-plugin-jest': '^27.1.5',
173
176
  'prettier': '^2.0.0',
174
- 'typescript': '^5.5.4',
177
+ 'typescript': '^5.9.3',
175
178
  };
176
179
 
177
180
  const nodeTsDevDependencies = {
@@ -216,6 +219,36 @@ const nodeNpmPackage = {
216
219
  eslintConfig: {
217
220
  root: true,
218
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
+ ],
219
252
  },
220
253
  };
221
254
 
@@ -242,7 +275,8 @@ const nodeTsYarnPackage = {
242
275
 
243
276
  const extendWithTsConfig = (packageJson, version) => {
244
277
  packageJson.devDependencies = {
245
- [`@tsconfig/node${version}`]: `^${version === '12' ? '1.0.9' : '1.0.1'}`,
278
+ // New @tsconfig/nodeX package versioning: it starts with X major version
279
+ [`@tsconfig/node${version}`]: `^${version}`,
246
280
  ...packageJson.devDependencies,
247
281
  };
248
282
 
@@ -42,15 +42,30 @@ export class Api {
42
42
  * @returns {object}
43
43
  */
44
44
  async getAppByKey(appKey) {
45
- const { data } = await this.#api.get(`v2/apps/${appKey}`).json();
46
-
47
- if (!data) {
48
- throw new StepError(
49
- `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.`,
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.NODE18, APP_RUNTIMES.NODE20, APP_RUNTIMES.NODE22];
14
+ const NODE_RUNTIMES = [APP_RUNTIMES.NODE24];
15
15
 
16
16
  export class Manifest {
17
17
  constructor(manifest) {
@@ -111,7 +111,11 @@ const resolveDataToZipUiApp = async (itemsToZip = [], { options, pkg, dirName, m
111
111
  itemsToZip.push(
112
112
  'manifest.json',
113
113
  'config-overrides.js',
114
+ 'eslint.config.js',
115
+ 'eslint.config.mjs',
114
116
  'tsconfig.json',
117
+ 'prettier.config.js',
118
+ '.prettierrc',
115
119
  '.npmrc',
116
120
  '.nvmrc',
117
121
  'yarn.lock',
@@ -183,7 +187,9 @@ const resolveDataForZipNodeJsApp = async (itemsToZip = [], { options, pkg, dirNa
183
187
 
184
188
  itemsToZip.push('config', 'manifest.json', 'package.json', '.nvmrc', '.npmrc', '.eslintrc.js');
185
189
 
186
- if (packageDirContent.includes('package-lock.json')) {
190
+ if (packageDirContent.includes('pnpm-lock.yaml')) {
191
+ itemsToZip.push('pnpm-lock.yaml');
192
+ } else if (packageDirContent.includes('package-lock.json')) {
187
193
  itemsToZip.push('package-lock.json');
188
194
 
189
195
  if (shouldUpdateVersion) {
@@ -249,7 +255,7 @@ const resolveDataForZipPythonApp = async (itemsToZip = [], { manifest, dirName,
249
255
  );
250
256
  }
251
257
 
252
- itemsToZip.push('manifest.json', 'requirements.txt');
258
+ itemsToZip.push('manifest.json', 'pyproject.toml', 'uv.lock', 'requirements.txt');
253
259
 
254
260
  return {
255
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
- const latestVersion = await getLatestVersion();
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)) {
@@ -6,6 +6,8 @@ import os from 'os';
6
6
  import semver from 'semver';
7
7
 
8
8
  const debug = debugFn('cca:resolve-app-runtime');
9
+ const DEFAULT_UI_NODE_VERSION = '24';
10
+ const DEFAULT_UI_NODE_RANGE = '>=24 <25';
9
11
 
10
12
  /**
11
13
  *
@@ -37,11 +39,14 @@ const checkCliVersion = async (command, version) =>
37
39
 
38
40
  debug(`%s version output: %s`, command, data.toString());
39
41
 
40
- resolve(semver.satisfies(semver.coerce(data.toString('utf-8')), version));
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));
41
46
  });
42
47
  });
43
48
 
44
- const checkNodeVersion = (version) => async () => {
49
+ const checkNodeVersion = (range) => async () => {
45
50
  try {
46
51
  await fs.access(`${os.homedir()}/.nvm/nvm.sh`);
47
52
 
@@ -52,7 +57,7 @@ const checkNodeVersion = (version) => async () => {
52
57
  debug(e);
53
58
  debug('nvm is not installed, checking node version');
54
59
 
55
- return checkCliVersion('node', version);
60
+ return checkCliVersion('node', range);
56
61
  }
57
62
  };
58
63
 
@@ -60,18 +65,22 @@ export const IS_WINDOWS = process.platform === 'win32';
60
65
 
61
66
  const semverVersionsMapping = {
62
67
  node: {
63
- 18: '18.14.0',
64
- 20: '20.16.0',
68
+ 18: '18.20.8',
69
+ 20: '20.20.1',
70
+ 24: '24.15.0',
65
71
  },
66
72
  python: {
67
- '3.8': '3.8.16',
68
- '3.9': '3.9.16',
69
- '3.10': '3.10.9',
70
- '3.11': '3.11.1',
71
- '3.13': '3.13.7',
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 = '20';
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(version),
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) {
@@ -26,9 +26,13 @@ export const addUiAppFile = (templateFolder, root, runtime, manifest, opts) => {
26
26
  };
27
27
 
28
28
  export const getExcludedFiles = (manifest) => {
29
- if (manifest.isUi()) return ['App.drilling.js', 'App.completion.js', 'App.drilling.tsx', 'App.completion.tsx'];
29
+ const excludedFiles = ['.ruff_cache', '.venv', '.pytest_cache', '__pycache__'];
30
30
 
31
- return [];
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, '>=16');
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 16 or higher for a better, fully supported experience.\n`,
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
 
package/package.json CHANGED
@@ -1,107 +1 @@
1
- {
2
- "name": "@corva/create-app",
3
- "version": "0.0.0-ce43383",
4
- "private": false,
5
- "description": "Create an app to use it in CORVA.AI",
6
- "keywords": [
7
- "react"
8
- ],
9
- "bugs": {
10
- "url": "https://github.com/facebook/create-react-app/issues"
11
- },
12
- "repository": {
13
- "type": "git",
14
- "url": "https://github.com/corva-ai/create-corva-app",
15
- "directory": "@corva/create-app"
16
- },
17
- "license": "MIT",
18
- "type": "module",
19
- "bin": {
20
- "create-corva-app": "./bin/create-corva-app.cjs"
21
- },
22
- "files": [
23
- "bin/**/*.cjs",
24
- "bin/**/*.js",
25
- "lib/**/*.js",
26
- "templates",
27
- "template_extensions",
28
- "common"
29
- ],
30
- "scripts": {
31
- "build": "echo \"build is not configured for package \\\"×\\\", skipping.\"",
32
- "get-changelog": "conventional-changelog -r 2 -p angular",
33
- "lint": "eslint . --resolve-plugins-relative-to $(pwd) --max-warnings 0",
34
- "lint:fix": "eslint . --fix",
35
- "release": "git add -A && standard-version -a",
36
- "release-rc": "npm run release -- --prerelease",
37
- "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",
38
- "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",
39
- "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",
40
- "test": "NODE_OPTIONS='--experimental-vm-modules --no-warnings' jest"
41
- },
42
- "lint-staged": {
43
- "*.js": "npm run lint:fix"
44
- },
45
- "dependencies": {
46
- "archiver": "^5.3.0",
47
- "chalk": "^4.1.0",
48
- "commander": "^9.1.0",
49
- "cross-spawn": "^7.0.3",
50
- "debug": "^4.3.4",
51
- "dotenv": "^16.0.0",
52
- "figlet": "^1.5.0",
53
- "form-data": "^4.0.0",
54
- "fs-extra": "^9.0.1",
55
- "glob": "^8.0.1",
56
- "got": "^12.5.1",
57
- "inquirer": "^8.2.3",
58
- "is-glob": "^4.0.3",
59
- "lodash": "^4.17.21",
60
- "npm-api": "^1.0.0",
61
- "semver": "^7.3.2",
62
- "terminal-link": "^3.0.0"
63
- },
64
- "devDependencies": {
65
- "@babel/core": "^7.11.0",
66
- "@babel/eslint-parser": "^7.19.1",
67
- "@babel/plugin-proposal-class-properties": "^7.18.6",
68
- "@babel/plugin-syntax-import-assertions": "^7.20.0",
69
- "@babel/preset-react": "^7.18.6",
70
- "@commitlint/cli": "^17.3.0",
71
- "@commitlint/config-conventional": "^17.3.0",
72
- "@corva/eslint-config-browser": "^0.1.7",
73
- "@corva/eslint-config-node": "^5.1.1",
74
- "@corva/node-sdk": "^8.0.1",
75
- "@types/cross-spawn": "^6.0.2",
76
- "@types/jest": "^29.5.4",
77
- "@typescript-eslint/eslint-plugin": "^5.42.1",
78
- "@typescript-eslint/parser": "^5.42.1",
79
- "conventional-changelog-cli": "^2.1.0",
80
- "eslint": "^8.2.0",
81
- "eslint-config-google": "^0.14.0",
82
- "eslint-config-prettier": "^8.5.0",
83
- "eslint-plugin-import": "^2.26.0",
84
- "eslint-plugin-jest": "^27.1.5",
85
- "eslint-plugin-jsx-a11y": "^6.7.1",
86
- "eslint-plugin-prettier": "^4.2.1",
87
- "eslint-plugin-react": "^7.32.0",
88
- "eslint-plugin-react-hooks": "^4.6.0",
89
- "eslint-plugin-require-sort": "^1.3.0",
90
- "husky": "^8.0.2",
91
- "jest": "^29.6.4",
92
- "prettier": "^2.0.0",
93
- "prettier-plugin-packagejson": "^2.3.0",
94
- "standard-version": "^9.0.0",
95
- "typescript": "^4.8.4",
96
- "zx": "^7.2.3"
97
- },
98
- "packageManager": "yarn@1.22.19+sha512.ff4579ab459bb25aa7c0ff75b62acebe576f6084b36aa842971cf250a5d8c6cd3bc9420b22ce63c7f93a0857bc6ef29291db39c3e7a23aab5adfd5a4dd6c5d71",
99
- "engines": {
100
- "node": ">=18"
101
- },
102
- "standard-version": {
103
- "skip": {
104
- "tag": true
105
- }
106
- }
107
- }
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}}}
@@ -0,0 +1,3 @@
1
+ [mcp_servers.corva-ui]
2
+ command = "npx"
3
+ args = ["-p", "@corva/ui", "corva-ui-mcp"]
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "corva-ui": {
4
+ "command": "npx",
5
+ "args": ["-p", "@corva/ui", "corva-ui-mcp"]
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "corva-ui": {
4
+ "command": "npx",
5
+ "args": ["-p", "@corva/ui", "corva-ui-mcp"]
6
+ }
7
+ }
8
+ }