@codenotch/codenotch.cli 1.0.39 → 1.0.41
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/dist/commands/generate/app.js +13 -2
- package/dist/commands/generate/app.js.map +1 -1
- package/dist/commands/generate/appmanifest.js +52 -3
- package/dist/commands/generate/appmanifest.js.map +1 -1
- package/dist/commands/generate/dbcontext.js +5 -1
- package/dist/commands/generate/dbcontext.js.map +1 -1
- package/dist/commands/generate/i18n.d.ts +1 -1
- package/dist/commands/generate/i18n.js +53 -10
- package/dist/commands/generate/i18n.js.map +1 -1
- package/dist/commands/generate/index.js +11 -2
- package/dist/commands/generate/index.js.map +1 -1
- package/dist/commands/generate/manifest.js +4 -0
- package/dist/commands/generate/manifest.js.map +1 -1
- package/dist/commands/generate/openapi.js +5 -1
- package/dist/commands/generate/openapi.js.map +1 -1
- package/dist/commands/generate/pkg.js +4 -0
- package/dist/commands/generate/pkg.js.map +1 -1
- package/dist/commands/generate/process.d.ts +2 -0
- package/dist/commands/generate/process.js +151 -0
- package/dist/commands/generate/process.js.map +1 -0
- package/dist/commands/project/index.js +8 -1
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/new.js +16 -3
- package/dist/commands/project/new.js.map +1 -1
- package/dist/commands/project/remove.js +17 -1
- package/dist/commands/project/remove.js.map +1 -1
- package/dist/commands/react/build.js +22 -1
- package/dist/commands/react/build.js.map +1 -1
- package/dist/commands/react/clean.js +7 -2
- package/dist/commands/react/clean.js.map +1 -1
- package/dist/commands/react/dev.js +6 -0
- package/dist/commands/react/dev.js.map +1 -1
- package/dist/commands/react/index.js +11 -1
- package/dist/commands/react/index.js.map +1 -1
- package/dist/commands/react/package.d.ts +2 -0
- package/dist/commands/react/package.js +47 -0
- package/dist/commands/react/package.js.map +1 -0
- package/dist/commands/react/serve.js +5 -0
- package/dist/commands/react/serve.js.map +1 -1
- package/dist/commands/react/shared.js +1 -2
- package/dist/commands/react/shared.js.map +1 -1
- package/dist/commands/runtime/clear.js +15 -1
- package/dist/commands/runtime/clear.js.map +1 -1
- package/dist/commands/runtime/index.js +8 -1
- package/dist/commands/runtime/index.js.map +1 -1
- package/dist/commands/validation/ValidationUtils.js +1 -1
- package/dist/commands/validation/ValidationUtils.js.map +1 -1
- package/dist/commands/validation/files/I18nValidator.js +0 -9
- package/dist/commands/validation/files/I18nValidator.js.map +1 -1
- package/dist/commands/validation/files/ScriptValidator.js +6 -5
- package/dist/commands/validation/files/ScriptValidator.js.map +1 -1
- package/dist/commands/validation/validate.js +4 -13
- package/dist/commands/validation/validate.js.map +1 -1
- package/dist/utils/BuildUtils.d.ts +55 -5
- package/dist/utils/BuildUtils.js +238 -21
- package/dist/utils/BuildUtils.js.map +1 -1
- package/dist/utils/ConsoleUtils.d.ts +5 -2
- package/dist/utils/ConsoleUtils.js +20 -8
- package/dist/utils/ConsoleUtils.js.map +1 -1
- package/dist/utils/OsUtils.d.ts +6 -0
- package/dist/utils/OsUtils.js +26 -0
- package/dist/utils/OsUtils.js.map +1 -1
- package/dist/utils/PackageUtils.d.ts +101 -0
- package/dist/utils/PackageUtils.js +538 -0
- package/dist/utils/PackageUtils.js.map +1 -0
- package/dist/utils/ProcessModelUtils.d.ts +38 -0
- package/dist/utils/ProcessModelUtils.js +254 -0
- package/dist/utils/ProcessModelUtils.js.map +1 -0
- package/dist/utils/ProjectCompilationUtils.js.map +1 -1
- package/dist/utils/ServeUtils.js +1 -2
- package/dist/utils/ServeUtils.js.map +1 -1
- package/dist/utils/TemplateUtils.d.ts +1 -0
- package/dist/utils/TemplateUtils.js +21 -3
- package/dist/utils/TemplateUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,11 +13,22 @@ function registerGenerateEmptyApp(generate) {
|
|
|
13
13
|
generate
|
|
14
14
|
.command('app')
|
|
15
15
|
.description('Generate an empty Codenotch React app (*.tsx and its *.manifest.json)')
|
|
16
|
-
.
|
|
16
|
+
.option('-n, --name <name>', 'name of the app, used as file name and React component name (asked when omitted)')
|
|
17
17
|
.option('-p, --path <path>', 'directory in which the app is generated', process.cwd())
|
|
18
18
|
.option('--no-manifest', 'do not generate the *.manifest.json next to the app')
|
|
19
|
+
.addHelpText('after', `
|
|
20
|
+
Examples:
|
|
21
|
+
$ cn generate app asks for the name, writes in the current folder
|
|
22
|
+
$ cn generate app -n Dashboard -p apps
|
|
23
|
+
$ cn generate app -n Widget --no-manifest the component alone
|
|
24
|
+
`)
|
|
19
25
|
.action(async (options) => {
|
|
20
|
-
const appName = options.name.trim();
|
|
26
|
+
const appName = (options.name ?? await ConsoleUtils_1.default.ask('Name of the app?')).trim();
|
|
27
|
+
if (appName === '') {
|
|
28
|
+
console.error(chalk_1.default.yellow(`Aborted: no app name given (use -n <name>).`));
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
21
32
|
if (!TemplateUtils_1.default.isValidAppName(appName)) {
|
|
22
33
|
console.error(chalk_1.default.yellow(`Aborted: '${appName}' is not a valid app name (letters, digits, '_' and '$', not starting with a digit).`));
|
|
23
34
|
process.exitCode = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/commands/generate/app.ts"],"names":[],"mappings":";;;;;AAOA,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/commands/generate/app.ts"],"names":[],"mappings":";;;;;AAOA,4DAoDC;AA1DD,kDAA0B;AAC1B,+BAAqC;AACrC,4EAAoD;AACpD,8EAAsD;AACtD,qCAA8C;AAE9C,SAAgB,wBAAwB,CAAC,QAAiB;IACtD,QAAQ;SACH,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,uEAAuE,CAAC;SACpF,MAAM,CAAC,mBAAmB,EAAE,kFAAkF,CAAC;SAC/G,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACrF,MAAM,CAAC,eAAe,EAAE,qDAAqD,CAAC;SAC9E,WAAW,CAAC,OAAO,EAAE;;;;;CAK7B,CAAC;SACO,MAAM,CAAC,KAAK,EAAE,OAA2D,EAAE,EAAE;QAE1E,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,sBAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpF,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,uBAAa,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,aAAa,OAAO,sFAAsF,CAAC,CAAC,CAAC;YACxI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,YAAY,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,IAAA,2BAAkB,EAAC,QAAQ,EAAE,uBAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,sBAAY,CAAC,KAAK,CAAC,GAAG,OAAO,qBAAqB,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,YAAY,EAAE,GAAG,OAAO,gBAAgB,CAAC,CAAC;QACpE,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE1F,IAAI,CAAC,MAAM,IAAA,2BAAkB,EAAC,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,sBAAY,CAAC,KAAK,CAAC,GAAG,OAAO,+BAA+B,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -5,22 +5,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.registerGenerateAppManifest = registerGenerateAppManifest;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const fs_1 = require("fs");
|
|
8
9
|
const path_1 = require("path");
|
|
9
10
|
const FileUtils_1 = __importDefault(require("../../utils/FileUtils"));
|
|
10
11
|
const ConsoleUtils_1 = __importDefault(require("../../utils/ConsoleUtils"));
|
|
12
|
+
const BuildUtils_1 = __importDefault(require("../../utils/BuildUtils"));
|
|
11
13
|
const TemplateUtils_1 = __importDefault(require("../../utils/TemplateUtils"));
|
|
12
14
|
const shared_1 = require("./shared");
|
|
13
15
|
function registerGenerateAppManifest(generate) {
|
|
14
16
|
generate
|
|
15
17
|
.command('appmanifest')
|
|
16
|
-
.description('Generate the *.manifest.json of an existing Codenotch app')
|
|
17
|
-
.
|
|
18
|
+
.description('Generate the *.manifest.json of an existing Codenotch app. Without -f, the components missing one are proposed.')
|
|
19
|
+
.option('-f, --file-path <path>', 'path to the *.tsx/*.jsx file (asked when omitted)')
|
|
20
|
+
.addHelpText('after', `
|
|
21
|
+
Examples:
|
|
22
|
+
$ cn generate appmanifest proposes the apps of the project missing a manifest
|
|
23
|
+
$ cn generate appmanifest -f apps/Widget.tsx
|
|
24
|
+
`)
|
|
18
25
|
.action(async (options) => {
|
|
19
|
-
const filePath =
|
|
26
|
+
const filePath = options.filePath !== undefined
|
|
27
|
+
? await (0, shared_1.resolveInputFile)(options.filePath, ['.tsx', '.jsx'])
|
|
28
|
+
: await pickComponentWithoutManifest();
|
|
20
29
|
if (filePath === null) {
|
|
21
30
|
process.exitCode = 1;
|
|
22
31
|
return;
|
|
23
32
|
}
|
|
33
|
+
if (filePath === undefined) {
|
|
34
|
+
return; // nothing to do, already reported
|
|
35
|
+
}
|
|
24
36
|
const appName = FileUtils_1.default.getNameFromPath(filePath, true);
|
|
25
37
|
const targetPath = (0, path_1.join)((0, path_1.dirname)(filePath), `${appName}.manifest.json`);
|
|
26
38
|
const content = JSON.stringify(TemplateUtils_1.default.createAppManifest(appName), null, 4);
|
|
@@ -31,4 +43,41 @@ function registerGenerateAppManifest(generate) {
|
|
|
31
43
|
ConsoleUtils_1.default.check(`App manifest generated at ${chalk_1.default.green(targetPath)}`);
|
|
32
44
|
});
|
|
33
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* The apps of the surrounding project that have no manifest yet: the only one is taken,
|
|
48
|
+
* several are proposed on the terminal. Only the direct children of 'apps/' are candidates —
|
|
49
|
+
* a component deeper in the tree (layouts, pages...) is not an app and must not get a manifest.
|
|
50
|
+
* Returns undefined when every app already has one, null when nothing can be resolved.
|
|
51
|
+
*/
|
|
52
|
+
async function pickComponentWithoutManifest() {
|
|
53
|
+
const workspacePath = BuildUtils_1.default.findWorkspace();
|
|
54
|
+
if (workspacePath === undefined) {
|
|
55
|
+
console.error(chalk_1.default.yellow(`Aborted: no Codenotch project found from '${process.cwd()}' (no manifest.json in the parent folders).`));
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const appsPath = (0, path_1.join)(workspacePath, 'apps');
|
|
59
|
+
const scripts = ((0, fs_1.existsSync)(appsPath) ? (0, fs_1.readdirSync)(appsPath, { withFileTypes: true }) : [])
|
|
60
|
+
.filter(entry => !entry.isDirectory() && /\.(tsx|jsx)$/i.test(entry.name))
|
|
61
|
+
.map(entry => (0, path_1.join)(appsPath, entry.name));
|
|
62
|
+
const missing = [];
|
|
63
|
+
for (const scriptPath of scripts) {
|
|
64
|
+
const manifestPath = (0, path_1.join)((0, path_1.dirname)(scriptPath), `${FileUtils_1.default.getNameFromPath(scriptPath, true)}.manifest.json`);
|
|
65
|
+
if (await FileUtils_1.default.exists(manifestPath) === false) {
|
|
66
|
+
missing.push(scriptPath);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (missing.length === 0) {
|
|
70
|
+
ConsoleUtils_1.default.check(`Every app of '${appsPath}' already has its manifest.`);
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
if (missing.length === 1) {
|
|
74
|
+
console.log(`Only '${(0, path_1.relative)(workspacePath, missing[0])}' has no manifest.`);
|
|
75
|
+
return missing[0];
|
|
76
|
+
}
|
|
77
|
+
const index = await ConsoleUtils_1.default.select('Which component?', missing.map(scriptPath => ({
|
|
78
|
+
name: (0, path_1.relative)(workspacePath, scriptPath),
|
|
79
|
+
description: ''
|
|
80
|
+
})), 0);
|
|
81
|
+
return missing[index];
|
|
82
|
+
}
|
|
34
83
|
//# sourceMappingURL=appmanifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appmanifest.js","sourceRoot":"","sources":["../../../src/commands/generate/appmanifest.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"appmanifest.js","sourceRoot":"","sources":["../../../src/commands/generate/appmanifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,12 @@ const shared_1 = require("./shared");
|
|
|
13
13
|
function registerGenerateDbContext(generate) {
|
|
14
14
|
generate
|
|
15
15
|
.command('dbcontext')
|
|
16
|
-
.description('
|
|
16
|
+
.description('Scan the tables of a project and generate its db-schema.xml + db-schema.ts')
|
|
17
17
|
.requiredOption('-f, --project-path <path>', 'path to the project')
|
|
18
|
+
.addHelpText('after', `
|
|
19
|
+
Examples:
|
|
20
|
+
$ cn generate dbcontext -f . tables of the current folder, schema written next to them
|
|
21
|
+
`)
|
|
18
22
|
.action(async (options) => {
|
|
19
23
|
const projectPath = (0, path_1.resolve)(options.projectPath);
|
|
20
24
|
if (await FileUtils_1.default.exists(projectPath) === false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbcontext.js","sourceRoot":"","sources":["../../../src/commands/generate/dbcontext.ts"],"names":[],"mappings":";;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"dbcontext.js","sourceRoot":"","sources":["../../../src/commands/generate/dbcontext.ts"],"names":[],"mappings":";;;;;AAQA,8DA0BC;AAjCD,kDAA0B;AAC1B,+BAA+B;AAC/B,sEAA8C;AAC9C,4EAAoD;AACpD,8FAAsE;AACtE,qCAA4C;AAE5C,SAAgB,yBAAyB,CAAC,QAAiB;IACvD,QAAQ;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,4EAA4E,CAAC;SACzF,cAAc,CAAC,2BAA2B,EAAE,qBAAqB,CAAC;SAClE,WAAW,CAAC,OAAO,EAAE;;;CAG7B,CAAC;SACO,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;QAE/C,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,MAAM,mBAAS,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,aAAa,WAAW,eAAe,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,+BAAqB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAA,yBAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,sBAAY,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,wCAAwC,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3J,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function registerGenerateI18nTs(generate: Command): void;
|
|
@@ -3,27 +3,70 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.registerGenerateI18nTs = registerGenerateI18nTs;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const path_1 = require("path");
|
|
8
9
|
const ConsoleUtils_1 = __importDefault(require("../../utils/ConsoleUtils"));
|
|
10
|
+
const BuildUtils_1 = __importDefault(require("../../utils/BuildUtils"));
|
|
11
|
+
const ProjectUtils_1 = __importDefault(require("../../utils/ProjectUtils"));
|
|
9
12
|
const ProjectGeneratorUtils_1 = __importDefault(require("../../utils/ProjectGeneratorUtils"));
|
|
10
13
|
const shared_1 = require("./shared");
|
|
11
|
-
function
|
|
14
|
+
function registerGenerateI18nTs(generate) {
|
|
12
15
|
generate
|
|
13
16
|
.command('i18n')
|
|
14
|
-
.description('Transform a *.i18n.csv into an importable i18n ts (generated next to the csv).')
|
|
15
|
-
.
|
|
17
|
+
.description('Transform a *.i18n.csv into an importable i18n ts (generated next to the csv). Without -f, the files of the project are proposed.')
|
|
18
|
+
.option('-f, --file-path <path>', 'path to the *.i18n.csv file (asked when omitted)')
|
|
19
|
+
.addHelpText('after', `
|
|
20
|
+
Examples:
|
|
21
|
+
$ cn generate i18n proposes the files of the project, 'All of them' by default
|
|
22
|
+
$ cn generate i18n -f globals.i18n.csv writes globals.i18n.ts next to it
|
|
23
|
+
`)
|
|
16
24
|
.action(async (options) => {
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
25
|
+
const targets = await resolveTargets(options.filePath);
|
|
26
|
+
if (targets === null) {
|
|
19
27
|
process.exitCode = 1;
|
|
20
28
|
return;
|
|
21
29
|
}
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
for (const csvPath of targets) {
|
|
31
|
+
const result = await ProjectGeneratorUtils_1.default.generateI18n(csvPath);
|
|
32
|
+
if (!(0, shared_1.reportGeneration)(result)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
ConsoleUtils_1.default.check(`${result.keyCount} key(s) generated at ${chalk_1.default.green(result.written[0])}`);
|
|
25
36
|
}
|
|
26
|
-
ConsoleUtils_1.default.check(`${result.keyCount} key(s) generated at ${chalk_1.default.green(result.written[0])}`);
|
|
27
37
|
});
|
|
28
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* The csv files to generate from: the one of -f, or the ones of the surrounding project —
|
|
41
|
+
* every file by default, one of them when picked on the terminal.
|
|
42
|
+
*/
|
|
43
|
+
async function resolveTargets(filePath) {
|
|
44
|
+
if (filePath !== undefined) {
|
|
45
|
+
const resolved = await (0, shared_1.resolveInputFile)(filePath, ['.i18n.csv']);
|
|
46
|
+
return resolved === null ? null : [resolved];
|
|
47
|
+
}
|
|
48
|
+
const workspacePath = BuildUtils_1.default.findWorkspace();
|
|
49
|
+
if (workspacePath === undefined) {
|
|
50
|
+
console.error(chalk_1.default.yellow(`Aborted: no Codenotch project found from '${process.cwd()}' (no manifest.json in the parent folders).`));
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const files = await ProjectUtils_1.default.discoverI18nsFiles(workspacePath);
|
|
54
|
+
if (files.length === 0) {
|
|
55
|
+
ConsoleUtils_1.default.checkWarning(`No *.i18n.csv file in '${workspacePath}', nothing to generate.`);
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
if (files.length === 1) {
|
|
59
|
+
return [files[0].filePath];
|
|
60
|
+
}
|
|
61
|
+
const choices = [
|
|
62
|
+
// Regenerating everything is the usual case (fresh clone), so it is the default
|
|
63
|
+
{ name: 'All of them', description: `${files.length} file(s)` },
|
|
64
|
+
...files.map(file => ({
|
|
65
|
+
name: (0, path_1.relative)(workspacePath, file.filePath),
|
|
66
|
+
description: `${file.keys.length} key(s) — ${file.languages.join(', ')}`
|
|
67
|
+
}))
|
|
68
|
+
];
|
|
69
|
+
const index = await ConsoleUtils_1.default.select('Which translation file?', choices, 0);
|
|
70
|
+
return index === 0 ? files.map(file => file.filePath) : [files[index - 1].filePath];
|
|
71
|
+
}
|
|
29
72
|
//# sourceMappingURL=i18n.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/commands/generate/i18n.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/commands/generate/i18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,16 +8,25 @@ const app_1 = require("./app");
|
|
|
8
8
|
const i18n_1 = require("./i18n");
|
|
9
9
|
const dbcontext_1 = require("./dbcontext");
|
|
10
10
|
const openapi_1 = require("./openapi");
|
|
11
|
+
const process_1 = require("./process");
|
|
11
12
|
function registerGenerateCommands(program) {
|
|
12
13
|
const generate = program
|
|
13
14
|
.command('generate')
|
|
14
|
-
.description('Generate
|
|
15
|
+
.description('Generate project files: derived ones, rebuilt from the sources (db schema, openapi, i18n classes), and ready-to-edit scaffolds (app, manifests, package.json, model processes)')
|
|
16
|
+
.addHelpText('after', `
|
|
17
|
+
Examples:
|
|
18
|
+
$ cn generate app -n Dashboard an empty React app and its manifest
|
|
19
|
+
$ cn generate i18n regenerate the *.i18n.ts classes of the project
|
|
20
|
+
$ cn generate dbcontext -f . db-schema.xml + db-schema.ts from the tables
|
|
21
|
+
$ cn generate process -m api -t Book REST endpoints working on a table
|
|
22
|
+
`);
|
|
15
23
|
(0, manifest_1.registerGenerateProjectManifest)(generate);
|
|
16
24
|
(0, appmanifest_1.registerGenerateAppManifest)(generate);
|
|
17
25
|
(0, pkg_1.registerGeneratePackageJson)(generate);
|
|
18
26
|
(0, app_1.registerGenerateEmptyApp)(generate);
|
|
19
|
-
(0, i18n_1.
|
|
27
|
+
(0, i18n_1.registerGenerateI18nTs)(generate);
|
|
20
28
|
(0, dbcontext_1.registerGenerateDbContext)(generate);
|
|
21
29
|
(0, openapi_1.registerGenerateOpenApi)(generate);
|
|
30
|
+
(0, process_1.registerGenerateProcess)(generate);
|
|
22
31
|
}
|
|
23
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/generate/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/generate/index.ts"],"names":[],"mappings":";;AAUA,4DAoBC;AA7BD,yCAA6D;AAC7D,+CAA4D;AAC5D,+BAAoD;AACpD,+BAAiD;AACjD,iCAAgD;AAChD,2CAAwD;AACxD,uCAAoD;AACpD,uCAAoD;AAEpD,SAAgB,wBAAwB,CAAC,OAAgB;IACrD,MAAM,QAAQ,GAAG,OAAO;SACnB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,gLAAgL,CAAC;SAC7L,WAAW,CAAC,OAAO,EAAE;;;;;;CAM7B,CAAC,CAAC;IAEC,IAAA,0CAA+B,EAAC,QAAQ,CAAC,CAAC;IAC1C,IAAA,yCAA2B,EAAC,QAAQ,CAAC,CAAC;IACtC,IAAA,iCAA2B,EAAC,QAAQ,CAAC,CAAC;IACtC,IAAA,8BAAwB,EAAC,QAAQ,CAAC,CAAC;IACnC,IAAA,6BAAsB,EAAC,QAAQ,CAAC,CAAC;IACjC,IAAA,qCAAyB,EAAC,QAAQ,CAAC,CAAC;IACpC,IAAA,iCAAuB,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAA,iCAAuB,EAAC,QAAQ,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -14,6 +14,10 @@ function registerGenerateProjectManifest(generate) {
|
|
|
14
14
|
generate
|
|
15
15
|
.command('manifest')
|
|
16
16
|
.description('Generate the manifest.json of a Codenotch project in the current directory')
|
|
17
|
+
.addHelpText('after', `
|
|
18
|
+
Examples:
|
|
19
|
+
$ cn generate manifest project and service names derive from the current folder name
|
|
20
|
+
`)
|
|
17
21
|
.action(async () => {
|
|
18
22
|
const projectPath = process.cwd();
|
|
19
23
|
const filePath = (0, path_1.join)(projectPath, 'manifest.json');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/commands/generate/manifest.ts"],"names":[],"mappings":";;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/commands/generate/manifest.ts"],"names":[],"mappings":";;;;;AAQA,0EAuBC;AA9BD,kDAA0B;AAC1B,+BAA4B;AAC5B,sEAA8C;AAC9C,4EAAoD;AACpD,8EAAsD;AACtD,qCAA8C;AAE9C,SAAgB,+BAA+B,CAAC,QAAiB;IAC7D,QAAQ;SACH,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4EAA4E,CAAC;SACzF,WAAW,CAAC,OAAO,EAAE;;;CAG7B,CAAC;SACO,MAAM,CAAC,KAAK,IAAI,EAAE;QAEf,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAEpD,0FAA0F;QAC1F,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,mBAAS,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,MAAM,IAAA,2BAAkB,EAAC,QAAQ,EAAE,uBAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,sBAAY,CAAC,KAAK,CAAC,8BAA8B,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -13,8 +13,12 @@ const shared_1 = require("./shared");
|
|
|
13
13
|
function registerGenerateOpenApi(generate) {
|
|
14
14
|
generate
|
|
15
15
|
.command('openapi')
|
|
16
|
-
.description('
|
|
16
|
+
.description('Scan the processes of a project and generate its openapi.json from the endpoints they declare')
|
|
17
17
|
.requiredOption('-f, --project-path <path>', 'path to the project')
|
|
18
|
+
.addHelpText('after', `
|
|
19
|
+
Examples:
|
|
20
|
+
$ cn generate openapi -f . endpoints of the current folder, written to ./openapi.json
|
|
21
|
+
`)
|
|
18
22
|
.action(async (options) => {
|
|
19
23
|
const projectPath = (0, path_1.resolve)(options.projectPath);
|
|
20
24
|
if (await FileUtils_1.default.exists(projectPath) === false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../src/commands/generate/openapi.ts"],"names":[],"mappings":";;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../src/commands/generate/openapi.ts"],"names":[],"mappings":";;;;;AAQA,0DA0BC;AAjCD,kDAA0B;AAC1B,+BAA+B;AAC/B,sEAA8C;AAC9C,4EAAoD;AACpD,8FAAsE;AACtE,qCAA4C;AAE5C,SAAgB,uBAAuB,CAAC,QAAiB;IACrD,QAAQ;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+FAA+F,CAAC;SAC5G,cAAc,CAAC,2BAA2B,EAAE,qBAAqB,CAAC;SAClE,WAAW,CAAC,OAAO,EAAE;;;CAG7B,CAAC;SACO,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;QAE/C,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,MAAM,mBAAS,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,aAAa,WAAW,eAAe,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,+BAAqB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,IAAA,yBAAgB,EAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,sBAAY,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,aAAa,2BAA2B,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -15,6 +15,10 @@ function registerGeneratePackageJson(generate) {
|
|
|
15
15
|
generate
|
|
16
16
|
.command('pkg')
|
|
17
17
|
.description('Generate the package.json of a Codenotch project in the current directory')
|
|
18
|
+
.addHelpText('after', `
|
|
19
|
+
Examples:
|
|
20
|
+
$ cn generate pkg package named after the serviceName of ./manifest.json
|
|
21
|
+
`)
|
|
18
22
|
.action(async () => {
|
|
19
23
|
const projectPath = process.cwd();
|
|
20
24
|
const filePath = (0, path_1.join)(projectPath, 'package.json');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkg.js","sourceRoot":"","sources":["../../../src/commands/generate/pkg.ts"],"names":[],"mappings":";;;;;AAUA,
|
|
1
|
+
{"version":3,"file":"pkg.js","sourceRoot":"","sources":["../../../src/commands/generate/pkg.ts"],"names":[],"mappings":";;;;;AAUA,kEA4BC;AArCD,kDAA0B;AAC1B,+BAA4B;AAE5B,sEAA8C;AAC9C,4EAAoD;AACpD,8EAAsD;AACtD,8EAAsD;AACtD,qCAA8C;AAE9C,SAAgB,2BAA2B,CAAC,QAAiB;IACzD,QAAQ;SACH,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,2EAA2E,CAAC;SACxF,WAAW,CAAC,OAAO,EAAE;;;CAG7B,CAAC;SACO,MAAM,CAAC,KAAK,IAAI,EAAE;QAEf,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAEnD,6GAA6G;QAC7G,MAAM,QAAQ,GAAG,MAAM,mBAAS,CAAC,MAAM,CAAC,IAAA,WAAI,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YACvE,CAAC,CAAC,MAAM,mBAAS,CAAC,iBAAiB,CAA4B,IAAA,WAAI,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAClG,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,IAAI,GAAG,QAAQ,EAAE,WAAW,IAAI,uBAAa,CAAC,aAAa,CAAC,mBAAS,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;QAE1G,MAAM,GAAG,GAAG,uBAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,IAAA,2BAAkB,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,sBAAY,CAAC,KAAK,CAAC,6BAA6B,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerGenerateProcess = registerGenerateProcess;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const path_1 = require("path");
|
|
42
|
+
const FileUtils_1 = __importDefault(require("../../utils/FileUtils"));
|
|
43
|
+
const BuildUtils_1 = __importDefault(require("../../utils/BuildUtils"));
|
|
44
|
+
const ConsoleUtils_1 = __importDefault(require("../../utils/ConsoleUtils"));
|
|
45
|
+
const ManifestUtils_1 = __importDefault(require("../../utils/ManifestUtils"));
|
|
46
|
+
const ProjectUtils_1 = __importDefault(require("../../utils/ProjectUtils"));
|
|
47
|
+
const ProcessModelUtils_1 = __importStar(require("../../utils/ProcessModelUtils"));
|
|
48
|
+
const shared_1 = require("./shared");
|
|
49
|
+
function registerGenerateProcess(generate) {
|
|
50
|
+
generate
|
|
51
|
+
.command('process')
|
|
52
|
+
.description('Generate a ready-to-edit model process (api crud, insert, upsert, ...) working on a table of the project')
|
|
53
|
+
.option('-m, --model <name>', `model to generate: ${ProcessModelUtils_1.PROCESS_MODELS.map(model => model.name).join(', ')} (asked when omitted)`)
|
|
54
|
+
.option('-t, --table <name>', 'name of the table the process works on (asked when omitted)')
|
|
55
|
+
.option('-p, --path <path>', "directory in which the process is generated (default: the 'processes' folder of the project)")
|
|
56
|
+
.addHelpText('after', `
|
|
57
|
+
Examples:
|
|
58
|
+
$ cn generate process pick the model and the table on menus
|
|
59
|
+
$ cn generate process -m api -t Book list/read/create/delete endpoints + the query of the list
|
|
60
|
+
$ cn generate process -m upsert -t Book
|
|
61
|
+
`)
|
|
62
|
+
.action(async (options) => {
|
|
63
|
+
const workspacePath = BuildUtils_1.default.findWorkspace();
|
|
64
|
+
if (workspacePath === undefined) {
|
|
65
|
+
console.error(chalk_1.default.yellow(`Aborted: no Codenotch project found from '${process.cwd()}' (no manifest.json in the parent folders).`));
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const model = await pickModel(options.model);
|
|
70
|
+
if (model === undefined) {
|
|
71
|
+
process.exitCode = 1;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const table = await pickTable(workspacePath, options.table);
|
|
75
|
+
if (table === undefined) {
|
|
76
|
+
process.exitCode = 1;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const targetFolder = options.path !== undefined ? (0, path_1.resolve)(options.path) : (0, path_1.join)(workspacePath, 'processes');
|
|
80
|
+
const targetPath = (0, path_1.join)(targetFolder, ProcessModelUtils_1.default.getFileName(model, table));
|
|
81
|
+
const built = ProcessModelUtils_1.default.createProcessFile(model, table, targetPath);
|
|
82
|
+
for (const warning of built.warnings) {
|
|
83
|
+
ConsoleUtils_1.default.checkWarning(warning);
|
|
84
|
+
}
|
|
85
|
+
if (built.content === undefined) {
|
|
86
|
+
console.error(chalk_1.default.yellow(`Aborted: ${built.error}`));
|
|
87
|
+
process.exitCode = 1;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (!await (0, shared_1.writeGeneratedFile)(targetPath, built.content)) {
|
|
91
|
+
process.exitCode = 1;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
ConsoleUtils_1.default.check(`'${model}' process for '${table.name}' generated at ${chalk_1.default.green(targetPath)}`);
|
|
95
|
+
if (model !== 'api') {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// The list endpoint reads its rows through a project query, generated next to the others
|
|
99
|
+
const manifest = await FileUtils_1.default.readJsonFileAsync((0, path_1.join)(workspacePath, 'manifest.json'));
|
|
100
|
+
const serviceName = manifest?.serviceName ?? ManifestUtils_1.default.toServiceName(FileUtils_1.default.getNameFromPath(workspacePath));
|
|
101
|
+
const queryPath = (0, path_1.join)(workspacePath, 'queries', ProcessModelUtils_1.default.getQueryFileName(table));
|
|
102
|
+
if (!await (0, shared_1.writeGeneratedFile)(queryPath, ProcessModelUtils_1.default.createAllRowsQuery(table, serviceName))) {
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
ConsoleUtils_1.default.check(`Query of the list endpoint generated at ${chalk_1.default.green(queryPath)}`);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/** The model to generate: the one of -m when valid, otherwise the one picked on the terminal */
|
|
110
|
+
async function pickModel(requested) {
|
|
111
|
+
if (requested !== undefined) {
|
|
112
|
+
const model = ProcessModelUtils_1.PROCESS_MODELS.find(model => model.name === requested.toLowerCase());
|
|
113
|
+
if (model === undefined) {
|
|
114
|
+
console.error(chalk_1.default.yellow(`Unknown model '${requested}', expected one of: ${ProcessModelUtils_1.PROCESS_MODELS.map(model => model.name).join(', ')}.`));
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
return model.name;
|
|
118
|
+
}
|
|
119
|
+
const index = await ConsoleUtils_1.default.select('Which model of process?', ProcessModelUtils_1.PROCESS_MODELS, 0);
|
|
120
|
+
return ProcessModelUtils_1.PROCESS_MODELS[index].name;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The table the process works on: the one of -t when it exists, the only one of the project,
|
|
124
|
+
* or the one picked on the terminal. Tables with a name built at runtime cannot be used.
|
|
125
|
+
*/
|
|
126
|
+
async function pickTable(workspacePath, requested) {
|
|
127
|
+
const tables = (await ProjectUtils_1.default.discoverTableFiles(workspacePath)).filter(table => table.name !== undefined);
|
|
128
|
+
const names = tables.map(table => table.name).join(', ');
|
|
129
|
+
if (requested !== undefined) {
|
|
130
|
+
const table = tables.find(table => table.name?.toLowerCase() === requested.toLowerCase());
|
|
131
|
+
if (table === undefined) {
|
|
132
|
+
console.error(chalk_1.default.yellow(`No table named '${requested}' in '${workspacePath}'${tables.length > 0 ? `. Available: ${names}` : ' (it declares none)'}.`));
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
return table;
|
|
136
|
+
}
|
|
137
|
+
if (tables.length === 0) {
|
|
138
|
+
console.error(chalk_1.default.yellow(`Aborted: no table discovered in '${workspacePath}', declare one with defineEntity first.`));
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
if (tables.length === 1) {
|
|
142
|
+
console.log(`Only one table in the project: '${tables[0].name}'.`);
|
|
143
|
+
return tables[0];
|
|
144
|
+
}
|
|
145
|
+
const index = await ConsoleUtils_1.default.select('Which table does the process work on?', tables.map(table => ({
|
|
146
|
+
name: table.name ?? '',
|
|
147
|
+
description: `${table.columns.length} column(s) at ${(0, path_1.relative)(workspacePath, table.filePath)}`
|
|
148
|
+
})), 0);
|
|
149
|
+
return tables[index];
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/commands/generate/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,14 @@ const remove_1 = require("./remove");
|
|
|
14
14
|
function registerProjectCommands(program) {
|
|
15
15
|
const project = program
|
|
16
16
|
.command('project') //TODO name subject to change
|
|
17
|
-
.description('
|
|
17
|
+
.description('Work on a Codenotch project: create, inspect, start, sync, test, package, deploy or remove it. Run these inside the project folder, or point -p at it')
|
|
18
|
+
.addHelpText('after', `
|
|
19
|
+
Examples:
|
|
20
|
+
$ cn project new -t todolist
|
|
21
|
+
$ cn project start build, deploy and start the local project
|
|
22
|
+
$ cn project inspect what the sources declare (processes, tables, apps, i18n...)
|
|
23
|
+
$ cn project refresh sync the changes with the running runtime
|
|
24
|
+
`);
|
|
18
25
|
(0, inspect_1.registerInspect)(project);
|
|
19
26
|
(0, open_1.registerOpen)(project);
|
|
20
27
|
(0, start_1.registerStart)(project);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":";;AAYA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":";;AAYA,0DAsBC;AAjCD,uCAA4C;AAC5C,iCAAsC;AACtC,mCAAwC;AACxC,uCAA4C;AAC5C,iCAAsC;AACtC,uCAA4C;AAC5C,uCAA4C;AAC5C,qCAA0C;AAC1C,+BAAoC;AACpC,qCAA0C;AAE1C,SAAgB,uBAAuB,CAAC,OAAgB;IACpD,MAAM,OAAO,GAAG,OAAO;SAClB,OAAO,CAAC,SAAS,CAAC,CAAC,6BAA6B;SAChD,WAAW,CAAC,uJAAuJ,CAAC;SACpK,WAAW,CAAC,OAAO,EAAE;;;;;;CAM7B,CAAC,CAAC;IAEC,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;IACzB,IAAA,mBAAY,EAAC,OAAO,CAAC,CAAC;IACtB,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC;IACvB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;IACzB,IAAA,mBAAY,EAAC,OAAO,CAAC,CAAC;IACtB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;IACzB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;IACzB,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACxB,IAAA,iBAAW,EAAC,OAAO,CAAC,CAAC;IACrB,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -53,7 +53,13 @@ function registerNew(project) {
|
|
|
53
53
|
.description('Create a new project')
|
|
54
54
|
.option('-t, --template <name>', `template to start from: ${ProjectTemplates_1.default.TEMPLATES.map(t => t.name).join(', ')} (asked when omitted)`)
|
|
55
55
|
.option('--list-templates', 'list the available templates and exit')
|
|
56
|
-
.option('--no-install', 'do not run npm install in the new project')
|
|
56
|
+
.option('--no-install', 'do not run npm install in the new project')
|
|
57
|
+
.addHelpText('after', `
|
|
58
|
+
Examples:
|
|
59
|
+
$ cn project new asks for the template and the name
|
|
60
|
+
$ cn project new -t tailwind -p ./shop
|
|
61
|
+
$ cn project new --list-templates
|
|
62
|
+
`))
|
|
57
63
|
.action(async (options) => {
|
|
58
64
|
if (options.listTemplates) {
|
|
59
65
|
for (const template of ProjectTemplates_1.default.TEMPLATES) {
|
|
@@ -82,11 +88,18 @@ function registerNew(project) {
|
|
|
82
88
|
finalFolder = options.projectPath;
|
|
83
89
|
}
|
|
84
90
|
else {
|
|
85
|
-
|
|
91
|
+
// The name matters: the service name derives from it, and renaming it later costs a refactoring
|
|
92
|
+
const askedName = await ConsoleUtils_1.default.ask('Name of the project?', 'New Codenotch Project');
|
|
93
|
+
if (/[<>:"/\\|?*]/.test(askedName)) {
|
|
94
|
+
console.error(chalk_1.default.yellow(`Aborted: '${askedName}' cannot be used as a folder name.`));
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
finalFolder = (0, path_1.join)(process.cwd(), askedName);
|
|
86
99
|
let counter = 0;
|
|
87
100
|
while (await FileUtils_1.default.exists(finalFolder)) {
|
|
88
101
|
counter++;
|
|
89
|
-
finalFolder = (0, path_1.join)(process.cwd(),
|
|
102
|
+
finalFolder = (0, path_1.join)(process.cwd(), `${askedName} (${counter})`);
|
|
90
103
|
}
|
|
91
104
|
}
|
|
92
105
|
(0, fs_extra_1.ensureDirSync)(finalFolder);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/commands/project/new.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/commands/project/new.ts"],"names":[],"mappings":"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"}
|