@marcfargas/odoo-cli 0.1.0
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/cli.d.ts +27 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +152 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/accounting.d.ts +16 -0
- package/dist/commands/accounting.d.ts.map +1 -0
- package/dist/commands/accounting.js +363 -0
- package/dist/commands/accounting.js.map +1 -0
- package/dist/commands/attendance.d.ts +14 -0
- package/dist/commands/attendance.d.ts.map +1 -0
- package/dist/commands/attendance.js +339 -0
- package/dist/commands/attendance.js.map +1 -0
- package/dist/commands/config.d.ts +12 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +159 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/mail.d.ts +12 -0
- package/dist/commands/mail.d.ts.map +1 -0
- package/dist/commands/mail.js +236 -0
- package/dist/commands/mail.js.map +1 -0
- package/dist/commands/modules.d.ts +14 -0
- package/dist/commands/modules.d.ts.map +1 -0
- package/dist/commands/modules.js +351 -0
- package/dist/commands/modules.js.map +1 -0
- package/dist/commands/records.d.ts +15 -0
- package/dist/commands/records.d.ts.map +1 -0
- package/dist/commands/records.js +591 -0
- package/dist/commands/records.js.map +1 -0
- package/dist/commands/schema.d.ts +16 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +381 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/state.d.ts +14 -0
- package/dist/commands/state.d.ts.map +1 -0
- package/dist/commands/state.js +373 -0
- package/dist/commands/state.js.map +1 -0
- package/dist/commands/timesheets.d.ts +15 -0
- package/dist/commands/timesheets.d.ts.map +1 -0
- package/dist/commands/timesheets.js +453 -0
- package/dist/commands/timesheets.js.map +1 -0
- package/dist/commands/url.d.ts +12 -0
- package/dist/commands/url.d.ts.map +1 -0
- package/dist/commands/url.js +149 -0
- package/dist/commands/url.js.map +1 -0
- package/dist/help/extra-help.d.ts +18 -0
- package/dist/help/extra-help.d.ts.map +1 -0
- package/dist/help/extra-help.js +207 -0
- package/dist/help/extra-help.js.map +1 -0
- package/dist/middleware/auth.d.ts +29 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +68 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/common-params.d.ts +90 -0
- package/dist/middleware/common-params.d.ts.map +1 -0
- package/dist/middleware/common-params.js +169 -0
- package/dist/middleware/common-params.js.map +1 -0
- package/dist/middleware/safety.d.ts +30 -0
- package/dist/middleware/safety.d.ts.map +1 -0
- package/dist/middleware/safety.js +64 -0
- package/dist/middleware/safety.js.map +1 -0
- package/dist/output/errors.d.ts +69 -0
- package/dist/output/errors.d.ts.map +1 -0
- package/dist/output/errors.js +193 -0
- package/dist/output/errors.js.map +1 -0
- package/dist/output/formatter.d.ts +80 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +285 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/stream-writer.d.ts +33 -0
- package/dist/output/stream-writer.d.ts.map +1 -0
- package/dist/output/stream-writer.js +74 -0
- package/dist/output/stream-writer.js.map +1 -0
- package/dist/parsing/domain-parser.d.ts +61 -0
- package/dist/parsing/domain-parser.d.ts.map +1 -0
- package/dist/parsing/domain-parser.js +427 -0
- package/dist/parsing/domain-parser.js.map +1 -0
- package/dist/parsing/json-arg.d.ts +48 -0
- package/dist/parsing/json-arg.d.ts.map +1 -0
- package/dist/parsing/json-arg.js +165 -0
- package/dist/parsing/json-arg.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `odoo mail` command group — chatter messages and internal notes.
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* mail note <model> <id> [message] Post internal note [WRITE]
|
|
7
|
+
* mail post <model> <id> [message] Post public message [WRITE]
|
|
8
|
+
*
|
|
9
|
+
* Both commands require --confirm.
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.buildMailCommand = buildMailCommand;
|
|
16
|
+
const commander_1 = require("commander");
|
|
17
|
+
const debug_1 = __importDefault(require("debug"));
|
|
18
|
+
const auth_1 = require("../middleware/auth");
|
|
19
|
+
const safety_1 = require("../middleware/safety");
|
|
20
|
+
const common_params_1 = require("../middleware/common-params");
|
|
21
|
+
const errors_1 = require("../output/errors");
|
|
22
|
+
const json_arg_1 = require("../parsing/json-arg");
|
|
23
|
+
const json_arg_2 = require("../parsing/json-arg");
|
|
24
|
+
const extra_help_1 = require("../help/extra-help");
|
|
25
|
+
const log = (0, debug_1.default)('odoo-cli:mail');
|
|
26
|
+
function buildMailCommand() {
|
|
27
|
+
const mail = new commander_1.Command('mail')
|
|
28
|
+
.description('Post messages and notes on Odoo record chatters')
|
|
29
|
+
.addHelpText('after', `
|
|
30
|
+
Safety: WRITE — requires --confirm.
|
|
31
|
+
note: internal only (staff, no email). post: public (notifies followers).
|
|
32
|
+
|
|
33
|
+
Examples:
|
|
34
|
+
odoo mail note crm.lead 42 "Called customer" --confirm
|
|
35
|
+
odoo mail post sale.order 88 "Your order shipped" --confirm
|
|
36
|
+
echo "CI passed" | odoo mail note project.task 17 --message-file - --confirm
|
|
37
|
+
odoo mail note crm.lead 42 --html --subject "Contract" --message-file contract.html --confirm
|
|
38
|
+
`);
|
|
39
|
+
// --help-extra
|
|
40
|
+
mail.option('--help-extra', 'Show extended skill documentation for mail');
|
|
41
|
+
mail.hook('preAction', async (thisCommand) => {
|
|
42
|
+
const opts = thisCommand.opts();
|
|
43
|
+
if (opts.helpExtra) {
|
|
44
|
+
await (0, extra_help_1.showHelpExtra)('mail');
|
|
45
|
+
process.exit(0);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
mail.addCommand(buildNoteCommand());
|
|
49
|
+
mail.addCommand(buildPostCommand());
|
|
50
|
+
return mail;
|
|
51
|
+
}
|
|
52
|
+
function buildMailSubCommand(name) {
|
|
53
|
+
const isNote = name === 'note';
|
|
54
|
+
const cmd = new commander_1.Command(name)
|
|
55
|
+
.description(isNote
|
|
56
|
+
? 'Post an internal note (staff only, no email notification) [WRITE — requires --confirm]'
|
|
57
|
+
: 'Post a public message (visible to followers, sends email notifications) [WRITE — requires --confirm]')
|
|
58
|
+
.argument('<model>', 'Odoo model (e.g., crm.lead, sale.order)')
|
|
59
|
+
.argument('<id>', 'Record ID')
|
|
60
|
+
.argument('[message]', 'Message body (or use --message-file)')
|
|
61
|
+
.addHelpText('after', isNote
|
|
62
|
+
? `
|
|
63
|
+
Examples:
|
|
64
|
+
odoo mail note crm.lead 42 "Called customer, decision by end of month" --confirm
|
|
65
|
+
odoo mail note project.task 17 "<p>Build <strong>passed</strong></p>" --html --confirm
|
|
66
|
+
git log --oneline -5 | odoo mail note project.task 17 --message-file - --confirm
|
|
67
|
+
`
|
|
68
|
+
: `
|
|
69
|
+
Examples:
|
|
70
|
+
odoo mail post sale.order 88 "Your order has been shipped" --confirm
|
|
71
|
+
odoo mail post crm.lead 42 --subject "Meeting confirmed" --partner-ids 7,15 \\
|
|
72
|
+
"Meeting on Thursday at 10am" --confirm
|
|
73
|
+
`);
|
|
74
|
+
(0, common_params_1.addAuthOptions)(cmd);
|
|
75
|
+
cmd.addOption((0, common_params_1.confirmOption)());
|
|
76
|
+
cmd.addOption((0, common_params_1.dryRunOption)());
|
|
77
|
+
cmd.option('--html', 'Treat message as HTML (default: plain text)');
|
|
78
|
+
cmd.option('--subject <subject>', 'Subject line');
|
|
79
|
+
cmd.option('--message-file <file>', "Read message from file ('-' for stdin)");
|
|
80
|
+
if (!isNote) {
|
|
81
|
+
cmd.option('--partner-ids <n,n,...>', 'Notify these partner IDs');
|
|
82
|
+
}
|
|
83
|
+
return cmd;
|
|
84
|
+
}
|
|
85
|
+
function buildNoteCommand() {
|
|
86
|
+
const cmd = buildMailSubCommand('note');
|
|
87
|
+
cmd.action(async (model, idStr, inlineMessage) => {
|
|
88
|
+
const opts = cmd.optsWithGlobals();
|
|
89
|
+
const id = parseInt(idStr, 10);
|
|
90
|
+
if (isNaN(id)) {
|
|
91
|
+
process.stderr.write(`✗ Error: Invalid record ID '${idStr}'\n`);
|
|
92
|
+
process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
|
|
93
|
+
}
|
|
94
|
+
log('mail note %s %d', model, id);
|
|
95
|
+
try {
|
|
96
|
+
(0, safety_1.requireConfirm)('WRITE', opts, `mail note ${model}#${id}`);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
process.exit((0, errors_1.handleError)(err));
|
|
100
|
+
}
|
|
101
|
+
let body;
|
|
102
|
+
try {
|
|
103
|
+
if (opts.messageFile) {
|
|
104
|
+
body = await (0, json_arg_1.readMessageFile)(opts.messageFile);
|
|
105
|
+
}
|
|
106
|
+
else if (inlineMessage) {
|
|
107
|
+
body = inlineMessage;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
process.stderr.write('✗ Error: Provide a message as argument or use --message-file\n → odoo mail note crm.lead 42 "My note" --confirm\n');
|
|
111
|
+
process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
process.exit((0, errors_1.handleError)(err));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// Auto-wrap plain text in <p>
|
|
120
|
+
const htmlBody = opts.html ? body : `<p>${escapeHtml(body)}</p>`;
|
|
121
|
+
if (opts.dryRun) {
|
|
122
|
+
(0, safety_1.printDryRun)(model, 'message_post', [[id]], {
|
|
123
|
+
body: htmlBody,
|
|
124
|
+
subject: opts.subject,
|
|
125
|
+
message_type: 'comment',
|
|
126
|
+
subtype_xmlid: 'mail.mt_note',
|
|
127
|
+
});
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
let client;
|
|
131
|
+
try {
|
|
132
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
process.exit((0, errors_1.handleError)(err));
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const messageId = await client.mail.postInternalNote(model, id, htmlBody, {
|
|
139
|
+
partnerIds: [],
|
|
140
|
+
});
|
|
141
|
+
(0, errors_1.printSuccess)(`Internal note posted on ${model}#${id} (message id=${messageId})`);
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
process.exit((0, errors_1.handleError)(err));
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
client?.logout();
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
return cmd;
|
|
151
|
+
}
|
|
152
|
+
function buildPostCommand() {
|
|
153
|
+
const cmd = buildMailSubCommand('post');
|
|
154
|
+
cmd.action(async (model, idStr, inlineMessage) => {
|
|
155
|
+
const opts = cmd.optsWithGlobals();
|
|
156
|
+
const id = parseInt(idStr, 10);
|
|
157
|
+
if (isNaN(id)) {
|
|
158
|
+
process.stderr.write(`✗ Error: Invalid record ID '${idStr}'\n`);
|
|
159
|
+
process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
|
|
160
|
+
}
|
|
161
|
+
log('mail post %s %d', model, id);
|
|
162
|
+
try {
|
|
163
|
+
(0, safety_1.requireConfirm)('WRITE', opts, `mail post ${model}#${id}`);
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
process.exit((0, errors_1.handleError)(err));
|
|
167
|
+
}
|
|
168
|
+
let body;
|
|
169
|
+
try {
|
|
170
|
+
if (opts.messageFile) {
|
|
171
|
+
body = await (0, json_arg_1.readMessageFile)(opts.messageFile);
|
|
172
|
+
}
|
|
173
|
+
else if (inlineMessage) {
|
|
174
|
+
body = inlineMessage;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
process.stderr.write('✗ Error: Provide a message as argument or use --message-file\n');
|
|
178
|
+
process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
process.exit((0, errors_1.handleError)(err));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const htmlBody = opts.html ? body : `<p>${escapeHtml(body)}</p>`;
|
|
187
|
+
let partnerIds = [];
|
|
188
|
+
if (opts.partnerIds) {
|
|
189
|
+
try {
|
|
190
|
+
partnerIds = (0, json_arg_2.parseIds)(opts.partnerIds);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
process.exit((0, errors_1.handleError)(err));
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (opts.dryRun) {
|
|
198
|
+
(0, safety_1.printDryRun)(model, 'message_post', [[id]], {
|
|
199
|
+
body: htmlBody,
|
|
200
|
+
subject: opts.subject,
|
|
201
|
+
partner_ids: partnerIds,
|
|
202
|
+
message_type: 'comment',
|
|
203
|
+
subtype_xmlid: 'mail.mt_comment',
|
|
204
|
+
});
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
let client;
|
|
208
|
+
try {
|
|
209
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
process.exit((0, errors_1.handleError)(err));
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const messageId = await client.mail.postOpenMessage(model, id, htmlBody, {
|
|
216
|
+
partnerIds,
|
|
217
|
+
});
|
|
218
|
+
(0, errors_1.printSuccess)(`Message posted on ${model}#${id} (message id=${messageId})`);
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
process.exit((0, errors_1.handleError)(err));
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
client?.logout();
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
return cmd;
|
|
228
|
+
}
|
|
229
|
+
function escapeHtml(text) {
|
|
230
|
+
return text
|
|
231
|
+
.replace(/&/g, '&')
|
|
232
|
+
.replace(/</g, '<')
|
|
233
|
+
.replace(/>/g, '>')
|
|
234
|
+
.replace(/"/g, '"');
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=mail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/commands/mail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `odoo modules` command group.
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* modules list List modules [READ]
|
|
6
|
+
* modules install <name> Install a module [WRITE]
|
|
7
|
+
* modules uninstall <name> Uninstall a module [DESTRUCTIVE]
|
|
8
|
+
* modules upgrade <name> Upgrade a module [WRITE]
|
|
9
|
+
* modules info <name> Show module metadata [READ]
|
|
10
|
+
* modules status <name> Print single-word state [READ]
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
export declare function buildModulesCommand(): Command;
|
|
14
|
+
//# sourceMappingURL=modules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/commands/modules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,mBAAmB,IAAI,OAAO,CAsC7C"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `odoo modules` command group.
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* modules list List modules [READ]
|
|
7
|
+
* modules install <name> Install a module [WRITE]
|
|
8
|
+
* modules uninstall <name> Uninstall a module [DESTRUCTIVE]
|
|
9
|
+
* modules upgrade <name> Upgrade a module [WRITE]
|
|
10
|
+
* modules info <name> Show module metadata [READ]
|
|
11
|
+
* modules status <name> Print single-word state [READ]
|
|
12
|
+
*/
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.buildModulesCommand = buildModulesCommand;
|
|
18
|
+
const commander_1 = require("commander");
|
|
19
|
+
const debug_1 = __importDefault(require("debug"));
|
|
20
|
+
const auth_1 = require("../middleware/auth");
|
|
21
|
+
const safety_1 = require("../middleware/safety");
|
|
22
|
+
const common_params_1 = require("../middleware/common-params");
|
|
23
|
+
const formatter_1 = require("../output/formatter");
|
|
24
|
+
const errors_1 = require("../output/errors");
|
|
25
|
+
const stream_writer_1 = require("../output/stream-writer");
|
|
26
|
+
const extra_help_1 = require("../help/extra-help");
|
|
27
|
+
const log = (0, debug_1.default)('odoo-cli:modules');
|
|
28
|
+
function buildModulesCommand() {
|
|
29
|
+
const modules = new commander_1.Command('modules')
|
|
30
|
+
.description('Manage Odoo modules — install, upgrade, and list')
|
|
31
|
+
.addHelpText('after', `
|
|
32
|
+
Safety:
|
|
33
|
+
READ list, info, status — no confirmation required
|
|
34
|
+
WRITE install, upgrade — requires --confirm
|
|
35
|
+
DESTRUCTIVE uninstall — requires --confirm ⚠
|
|
36
|
+
|
|
37
|
+
Examples:
|
|
38
|
+
odoo modules list --filter installed
|
|
39
|
+
odoo modules install hr_timesheet --confirm
|
|
40
|
+
odoo modules upgrade sale_management --confirm
|
|
41
|
+
odoo modules status sale_management
|
|
42
|
+
odoo modules info sale_management
|
|
43
|
+
`);
|
|
44
|
+
// --help-extra
|
|
45
|
+
modules.option('--help-extra', 'Show extended skill documentation for modules');
|
|
46
|
+
modules.hook('preAction', async (thisCommand) => {
|
|
47
|
+
const opts = thisCommand.opts();
|
|
48
|
+
if (opts.helpExtra) {
|
|
49
|
+
await (0, extra_help_1.showHelpExtra)('modules');
|
|
50
|
+
process.exit(0);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
modules.addCommand(buildListCommand());
|
|
54
|
+
modules.addCommand(buildInstallCommand());
|
|
55
|
+
modules.addCommand(buildUninstallCommand());
|
|
56
|
+
modules.addCommand(buildUpgradeCommand());
|
|
57
|
+
modules.addCommand(buildInfoCommand());
|
|
58
|
+
modules.addCommand(buildStatusCommand());
|
|
59
|
+
return modules;
|
|
60
|
+
}
|
|
61
|
+
function buildListCommand() {
|
|
62
|
+
const list = new commander_1.Command('list')
|
|
63
|
+
.description('List modules with optional state filter [READ]')
|
|
64
|
+
.addHelpText('after', `
|
|
65
|
+
Examples:
|
|
66
|
+
odoo modules list --filter installed
|
|
67
|
+
odoo modules list --filter upgradeable --format json | jq '.[].name'
|
|
68
|
+
odoo modules list --search sale --format table
|
|
69
|
+
`);
|
|
70
|
+
(0, common_params_1.addAuthOptions)(list);
|
|
71
|
+
(0, common_params_1.addOutputOptions)(list);
|
|
72
|
+
list.option('--filter <state>', 'Filter by state: installed | uninstalled | upgradeable | all', 'all');
|
|
73
|
+
list.option('--search <text>', 'Substring filter on name/technical name');
|
|
74
|
+
list.action(async () => {
|
|
75
|
+
const opts = list.optsWithGlobals();
|
|
76
|
+
log('modules list filter=%s search=%s', opts.filter, opts.search);
|
|
77
|
+
let client;
|
|
78
|
+
try {
|
|
79
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
process.exit((0, errors_1.handleError)(err));
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const stateFilter = opts.filter === 'all' || !opts.filter ? undefined : opts.filter;
|
|
86
|
+
const modules = await client.modules.listModules({ state: stateFilter });
|
|
87
|
+
let filtered = modules;
|
|
88
|
+
if (opts.search) {
|
|
89
|
+
const q = opts.search.toLowerCase();
|
|
90
|
+
filtered = modules.filter((m) => m.name.toLowerCase().includes(q) || (m.shortdesc ?? '').toLowerCase().includes(q));
|
|
91
|
+
}
|
|
92
|
+
const records = filtered.map((m) => ({
|
|
93
|
+
name: m.shortdesc ?? m.name,
|
|
94
|
+
technical_name: m.name,
|
|
95
|
+
version: m.installed_version ?? m.latest_version ?? '',
|
|
96
|
+
state: m.state,
|
|
97
|
+
}));
|
|
98
|
+
const format = (0, formatter_1.resolveFormat)(opts.format);
|
|
99
|
+
await (0, formatter_1.render)(records, format);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
process.exit((0, errors_1.handleError)(err));
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
client?.logout();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return list;
|
|
109
|
+
}
|
|
110
|
+
function buildInstallCommand() {
|
|
111
|
+
const install = new commander_1.Command('install')
|
|
112
|
+
.description('Install a module [WRITE — requires --confirm]')
|
|
113
|
+
.argument('<name>', 'Technical module name (e.g., hr_timesheet)')
|
|
114
|
+
.addHelpText('after', `
|
|
115
|
+
One module per invocation. Odoo resolves dependencies automatically.
|
|
116
|
+
|
|
117
|
+
Examples:
|
|
118
|
+
odoo modules install hr_timesheet --confirm
|
|
119
|
+
`);
|
|
120
|
+
(0, common_params_1.addAuthOptions)(install);
|
|
121
|
+
install.addOption((0, common_params_1.confirmOption)());
|
|
122
|
+
install.addOption((0, common_params_1.dryRunOption)());
|
|
123
|
+
install.option('--no-deps', 'Skip dependency resolution (⚠ rarely what you want)');
|
|
124
|
+
install.action(async (name) => {
|
|
125
|
+
const opts = install.optsWithGlobals();
|
|
126
|
+
log('modules install %s', name);
|
|
127
|
+
try {
|
|
128
|
+
(0, safety_1.requireConfirm)('WRITE', opts, `modules install ${name}`);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
process.exit((0, errors_1.handleError)(err));
|
|
132
|
+
}
|
|
133
|
+
if (opts.dryRun) {
|
|
134
|
+
(0, safety_1.printDryRun)('ir.module.module', 'button_immediate_install', [[`<id of ${name}>`]]);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
let client;
|
|
138
|
+
try {
|
|
139
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
process.exit((0, errors_1.handleError)(err));
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
process.stderr.write(`Installing ${name}...\n`);
|
|
146
|
+
const start = Date.now();
|
|
147
|
+
const info = await client.modules.installModule(name);
|
|
148
|
+
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
|
|
149
|
+
(0, errors_1.printSuccess)(`${name} installed (state: ${info.state}, ${elapsed}s)`);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
process.exit((0, errors_1.handleError)(err));
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
client?.logout();
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
return install;
|
|
159
|
+
}
|
|
160
|
+
function buildUninstallCommand() {
|
|
161
|
+
const uninstall = new commander_1.Command('uninstall')
|
|
162
|
+
.description('Uninstall a module — MAY REMOVE DATA [DESTRUCTIVE — requires --confirm]')
|
|
163
|
+
.argument('<name>', 'Technical module name')
|
|
164
|
+
.addHelpText('after', `
|
|
165
|
+
⚠ Uninstalling a module may remove associated data from the database.
|
|
166
|
+
|
|
167
|
+
Examples:
|
|
168
|
+
odoo modules uninstall hr_timesheet --confirm
|
|
169
|
+
`);
|
|
170
|
+
(0, common_params_1.addAuthOptions)(uninstall);
|
|
171
|
+
uninstall.addOption((0, common_params_1.confirmOption)());
|
|
172
|
+
uninstall.addOption((0, common_params_1.dryRunOption)());
|
|
173
|
+
uninstall.action(async (name) => {
|
|
174
|
+
const opts = uninstall.optsWithGlobals();
|
|
175
|
+
log('modules uninstall %s', name);
|
|
176
|
+
try {
|
|
177
|
+
(0, safety_1.requireConfirm)('DESTRUCTIVE', opts, `modules uninstall ${name}`);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
process.exit((0, errors_1.handleError)(err));
|
|
181
|
+
}
|
|
182
|
+
if (opts.dryRun) {
|
|
183
|
+
(0, safety_1.printDryRun)('ir.module.module', 'button_immediate_uninstall', [[`<id of ${name}>`]]);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
let client;
|
|
187
|
+
try {
|
|
188
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
process.exit((0, errors_1.handleError)(err));
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
process.stderr.write(`Uninstalling ${name}...\n`);
|
|
195
|
+
const start = Date.now();
|
|
196
|
+
const info = await client.modules.uninstallModule(name);
|
|
197
|
+
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
|
|
198
|
+
(0, errors_1.printSuccess)(`${name} uninstalled (state: ${info.state}, ${elapsed}s)`);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
process.exit((0, errors_1.handleError)(err));
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
client?.logout();
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return uninstall;
|
|
208
|
+
}
|
|
209
|
+
function buildUpgradeCommand() {
|
|
210
|
+
const upgrade = new commander_1.Command('upgrade')
|
|
211
|
+
.description('Upgrade a module to its latest version [WRITE — requires --confirm]')
|
|
212
|
+
.argument('<name>', 'Technical module name')
|
|
213
|
+
.addHelpText('after', `
|
|
214
|
+
Examples:
|
|
215
|
+
odoo modules upgrade sale_management --confirm
|
|
216
|
+
`);
|
|
217
|
+
(0, common_params_1.addAuthOptions)(upgrade);
|
|
218
|
+
upgrade.addOption((0, common_params_1.confirmOption)());
|
|
219
|
+
upgrade.addOption((0, common_params_1.dryRunOption)());
|
|
220
|
+
upgrade.action(async (name) => {
|
|
221
|
+
const opts = upgrade.optsWithGlobals();
|
|
222
|
+
log('modules upgrade %s', name);
|
|
223
|
+
try {
|
|
224
|
+
(0, safety_1.requireConfirm)('WRITE', opts, `modules upgrade ${name}`);
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
process.exit((0, errors_1.handleError)(err));
|
|
228
|
+
}
|
|
229
|
+
if (opts.dryRun) {
|
|
230
|
+
(0, safety_1.printDryRun)('ir.module.module', 'button_immediate_upgrade', [[`<id of ${name}>`]]);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
let client;
|
|
234
|
+
try {
|
|
235
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
process.exit((0, errors_1.handleError)(err));
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
process.stderr.write(`Upgrading ${name}...\n`);
|
|
242
|
+
const start = Date.now();
|
|
243
|
+
const info = await client.modules.upgradeModule(name);
|
|
244
|
+
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
|
|
245
|
+
(0, errors_1.printSuccess)(`${name} upgraded (state: ${info.state}, ${elapsed}s)`);
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
process.exit((0, errors_1.handleError)(err));
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
client?.logout();
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
return upgrade;
|
|
255
|
+
}
|
|
256
|
+
function buildInfoCommand() {
|
|
257
|
+
const info = new commander_1.Command('info')
|
|
258
|
+
.description('Show module metadata [READ]')
|
|
259
|
+
.argument('<name>', 'Technical module name')
|
|
260
|
+
.addHelpText('after', `
|
|
261
|
+
Examples:
|
|
262
|
+
odoo modules info sale_management
|
|
263
|
+
odoo modules info sale_management --format json
|
|
264
|
+
`);
|
|
265
|
+
(0, common_params_1.addAuthOptions)(info);
|
|
266
|
+
(0, common_params_1.addOutputOptions)(info);
|
|
267
|
+
info.action(async (name) => {
|
|
268
|
+
const opts = info.optsWithGlobals();
|
|
269
|
+
log('modules info %s', name);
|
|
270
|
+
let client;
|
|
271
|
+
try {
|
|
272
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
process.exit((0, errors_1.handleError)(err));
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
const m = await client.modules.getModuleInfo(name);
|
|
279
|
+
const format = (0, formatter_1.resolveFormat)(opts.format);
|
|
280
|
+
const data = {
|
|
281
|
+
Name: m.shortdesc ?? m.name,
|
|
282
|
+
'Technical name': m.name,
|
|
283
|
+
Version: m.installed_version ?? m.latest_version ?? '',
|
|
284
|
+
State: m.state,
|
|
285
|
+
Summary: m.summary ?? '',
|
|
286
|
+
Author: m.author ?? '',
|
|
287
|
+
License: m.license ?? '',
|
|
288
|
+
Website: m.website ?? '',
|
|
289
|
+
};
|
|
290
|
+
if (format === 'json' || format === 'ndjson') {
|
|
291
|
+
await (0, stream_writer_1.writeStdout)(JSON.stringify(m, null, format === 'json' ? 2 : 0) + '\n');
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
await (0, formatter_1.renderKeyValue)(data, format);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
// Module not found → exit 3
|
|
299
|
+
if (err instanceof Error && err.message.includes('not found')) {
|
|
300
|
+
process.stderr.write(`✗ Error: Module '${name}' not found\n`);
|
|
301
|
+
process.exit(errors_1.EXIT_CODES.NOT_FOUND);
|
|
302
|
+
}
|
|
303
|
+
process.exit((0, errors_1.handleError)(err));
|
|
304
|
+
}
|
|
305
|
+
finally {
|
|
306
|
+
client?.logout();
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
return info;
|
|
310
|
+
}
|
|
311
|
+
function buildStatusCommand() {
|
|
312
|
+
const status = new commander_1.Command('status')
|
|
313
|
+
.description('Print single-word module state (for scripting) [READ]')
|
|
314
|
+
.argument('<name>', 'Technical module name')
|
|
315
|
+
.addHelpText('after', `
|
|
316
|
+
Outputs one word: installed | uninstalled | upgradeable | to_install | etc.
|
|
317
|
+
Exit code 3 if module not found.
|
|
318
|
+
|
|
319
|
+
Examples:
|
|
320
|
+
odoo modules status sale_management
|
|
321
|
+
if [ "$(odoo modules status my_addon)" = "installed" ]; then echo ready; fi
|
|
322
|
+
`);
|
|
323
|
+
(0, common_params_1.addAuthOptions)(status);
|
|
324
|
+
status.action(async (name) => {
|
|
325
|
+
const opts = status.optsWithGlobals();
|
|
326
|
+
log('modules status %s', name);
|
|
327
|
+
let client;
|
|
328
|
+
try {
|
|
329
|
+
client = await (0, auth_1.createAuthClient)(opts);
|
|
330
|
+
}
|
|
331
|
+
catch (err) {
|
|
332
|
+
process.exit((0, errors_1.handleError)(err));
|
|
333
|
+
}
|
|
334
|
+
try {
|
|
335
|
+
const m = await client.modules.getModuleInfo(name);
|
|
336
|
+
await (0, stream_writer_1.writeStdout)(m.state + '\n');
|
|
337
|
+
}
|
|
338
|
+
catch (err) {
|
|
339
|
+
if (err instanceof Error && err.message.includes('not found')) {
|
|
340
|
+
process.stderr.write(`Module '${name}' not found\n`);
|
|
341
|
+
process.exit(errors_1.EXIT_CODES.NOT_FOUND);
|
|
342
|
+
}
|
|
343
|
+
process.exit((0, errors_1.handleError)(err));
|
|
344
|
+
}
|
|
345
|
+
finally {
|
|
346
|
+
client?.logout();
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
return status;
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=modules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/commands/modules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `odoo records` command group — generic CRUD on any Odoo model.
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* records search <model> Filter + list records [READ]
|
|
6
|
+
* records get <model> <id> Fetch a single record [READ]
|
|
7
|
+
* records create <model> Create a record [WRITE]
|
|
8
|
+
* records write <model> <id> Update records (batch) [WRITE]
|
|
9
|
+
* records delete <model> <id> Delete a record [DESTRUCTIVE]
|
|
10
|
+
* records count <model> Count matching records [READ]
|
|
11
|
+
* records call <model> <method> Call arbitrary method [WRITE]
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
export declare function buildRecordsCommand(): Command;
|
|
15
|
+
//# sourceMappingURL=records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/commands/records.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,mBAAmB,IAAI,OAAO,CAuC7C"}
|