@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.
Files changed (81) hide show
  1. package/dist/cli.d.ts +27 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +152 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/accounting.d.ts +16 -0
  6. package/dist/commands/accounting.d.ts.map +1 -0
  7. package/dist/commands/accounting.js +363 -0
  8. package/dist/commands/accounting.js.map +1 -0
  9. package/dist/commands/attendance.d.ts +14 -0
  10. package/dist/commands/attendance.d.ts.map +1 -0
  11. package/dist/commands/attendance.js +339 -0
  12. package/dist/commands/attendance.js.map +1 -0
  13. package/dist/commands/config.d.ts +12 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +159 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/mail.d.ts +12 -0
  18. package/dist/commands/mail.d.ts.map +1 -0
  19. package/dist/commands/mail.js +236 -0
  20. package/dist/commands/mail.js.map +1 -0
  21. package/dist/commands/modules.d.ts +14 -0
  22. package/dist/commands/modules.d.ts.map +1 -0
  23. package/dist/commands/modules.js +351 -0
  24. package/dist/commands/modules.js.map +1 -0
  25. package/dist/commands/records.d.ts +15 -0
  26. package/dist/commands/records.d.ts.map +1 -0
  27. package/dist/commands/records.js +591 -0
  28. package/dist/commands/records.js.map +1 -0
  29. package/dist/commands/schema.d.ts +16 -0
  30. package/dist/commands/schema.d.ts.map +1 -0
  31. package/dist/commands/schema.js +381 -0
  32. package/dist/commands/schema.js.map +1 -0
  33. package/dist/commands/state.d.ts +14 -0
  34. package/dist/commands/state.d.ts.map +1 -0
  35. package/dist/commands/state.js +373 -0
  36. package/dist/commands/state.js.map +1 -0
  37. package/dist/commands/timesheets.d.ts +15 -0
  38. package/dist/commands/timesheets.d.ts.map +1 -0
  39. package/dist/commands/timesheets.js +453 -0
  40. package/dist/commands/timesheets.js.map +1 -0
  41. package/dist/commands/url.d.ts +12 -0
  42. package/dist/commands/url.d.ts.map +1 -0
  43. package/dist/commands/url.js +149 -0
  44. package/dist/commands/url.js.map +1 -0
  45. package/dist/help/extra-help.d.ts +18 -0
  46. package/dist/help/extra-help.d.ts.map +1 -0
  47. package/dist/help/extra-help.js +207 -0
  48. package/dist/help/extra-help.js.map +1 -0
  49. package/dist/middleware/auth.d.ts +29 -0
  50. package/dist/middleware/auth.d.ts.map +1 -0
  51. package/dist/middleware/auth.js +68 -0
  52. package/dist/middleware/auth.js.map +1 -0
  53. package/dist/middleware/common-params.d.ts +90 -0
  54. package/dist/middleware/common-params.d.ts.map +1 -0
  55. package/dist/middleware/common-params.js +169 -0
  56. package/dist/middleware/common-params.js.map +1 -0
  57. package/dist/middleware/safety.d.ts +30 -0
  58. package/dist/middleware/safety.d.ts.map +1 -0
  59. package/dist/middleware/safety.js +64 -0
  60. package/dist/middleware/safety.js.map +1 -0
  61. package/dist/output/errors.d.ts +69 -0
  62. package/dist/output/errors.d.ts.map +1 -0
  63. package/dist/output/errors.js +193 -0
  64. package/dist/output/errors.js.map +1 -0
  65. package/dist/output/formatter.d.ts +80 -0
  66. package/dist/output/formatter.d.ts.map +1 -0
  67. package/dist/output/formatter.js +285 -0
  68. package/dist/output/formatter.js.map +1 -0
  69. package/dist/output/stream-writer.d.ts +33 -0
  70. package/dist/output/stream-writer.d.ts.map +1 -0
  71. package/dist/output/stream-writer.js +74 -0
  72. package/dist/output/stream-writer.js.map +1 -0
  73. package/dist/parsing/domain-parser.d.ts +61 -0
  74. package/dist/parsing/domain-parser.d.ts.map +1 -0
  75. package/dist/parsing/domain-parser.js +427 -0
  76. package/dist/parsing/domain-parser.js.map +1 -0
  77. package/dist/parsing/json-arg.d.ts +48 -0
  78. package/dist/parsing/json-arg.d.ts.map +1 -0
  79. package/dist/parsing/json-arg.js +165 -0
  80. package/dist/parsing/json-arg.js.map +1 -0
  81. package/package.json +53 -0
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+ /**
3
+ * `odoo state` command group — experimental state management.
4
+ *
5
+ * ALL state commands require --experimental flag (like `kubectl alpha`).
6
+ * This prevents accidental use in production scripts.
7
+ *
8
+ * Commands:
9
+ * state plan <file> Show drift between desired and current [READ]
10
+ * state apply <file> Apply desired state to Odoo [WRITE]
11
+ * state diff <model> Show current state of a model's records [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.buildStateCommand = buildStateCommand;
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 fs_1 = require("fs");
27
+ const log = (0, debug_1.default)('odoo-cli:state');
28
+ /**
29
+ * Enforce that --experimental is present.
30
+ * All state commands are gated behind this flag.
31
+ */
32
+ function requireExperimental(opts) {
33
+ if (!opts.experimental) {
34
+ throw new errors_1.CliUsageError('state commands are experimental and require --experimental', [
35
+ 'Add --experimental to proceed',
36
+ 'Example: odoo state plan ./config.json --experimental',
37
+ '⚠ Experimental commands may change behavior in future releases',
38
+ ]);
39
+ }
40
+ }
41
+ function buildStateCommand() {
42
+ const state = new commander_1.Command('state')
43
+ .description('⚠ EXPERIMENTAL — State management for Odoo configuration (requires --experimental)')
44
+ .addHelpText('after', `
45
+ ⚠ EXPERIMENTAL: All state commands require --experimental flag.
46
+
47
+ Similar to Terraform: declare desired state, plan changes, apply.
48
+
49
+ Safety:
50
+ READ plan, diff — no mutations (but requires --experimental)
51
+ WRITE apply — requires --confirm AND --experimental
52
+
53
+ Examples:
54
+ odoo state plan ./crm-stages.json --experimental
55
+ odoo state apply ./crm-stages.json --experimental --confirm
56
+ odoo state diff crm.stage --experimental
57
+ `);
58
+ // --experimental required on all state commands
59
+ state.addOption((0, common_params_1.experimentalOption)());
60
+ state.hook('preAction', async (thisCommand) => {
61
+ const opts = thisCommand.opts();
62
+ if (opts.experimental === false || opts.experimental === undefined) {
63
+ // Allow --help without --experimental
64
+ }
65
+ });
66
+ state.addCommand(buildPlanCommand());
67
+ state.addCommand(buildApplyCommand());
68
+ state.addCommand(buildDiffCommand());
69
+ return state;
70
+ }
71
+ function buildPlanCommand() {
72
+ const cmd = new commander_1.Command('plan')
73
+ .description('Show drift between desired state (file) and current Odoo state [READ + --experimental]')
74
+ .argument('<file>', 'State file (JSON)')
75
+ .addHelpText('after', `
76
+ Example state file (crm-stages.json):
77
+ {
78
+ "model": "crm.stage",
79
+ "match_field": "name",
80
+ "records": [
81
+ { "name": "New", "sequence": 1 },
82
+ { "name": "Qualified", "sequence": 20 }
83
+ ]
84
+ }
85
+
86
+ Examples:
87
+ odoo state plan ./crm-stages.json --experimental
88
+ `);
89
+ (0, common_params_1.addAuthOptions)(cmd);
90
+ (0, common_params_1.addOutputOptions)(cmd);
91
+ cmd.addOption((0, common_params_1.experimentalOption)());
92
+ cmd.action(async (file) => {
93
+ const opts = cmd.optsWithGlobals();
94
+ try {
95
+ requireExperimental(opts);
96
+ }
97
+ catch (err) {
98
+ process.exit((0, errors_1.handleError)(err));
99
+ }
100
+ log('state plan %s', file);
101
+ let stateSpec;
102
+ try {
103
+ const content = (0, fs_1.readFileSync)(file, 'utf8');
104
+ stateSpec = JSON.parse(content);
105
+ }
106
+ catch (err) {
107
+ process.stderr.write(`✗ Error: Cannot read state file '${file}': ${err instanceof Error ? err.message : String(err)}\n`);
108
+ process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
109
+ return;
110
+ }
111
+ if (!stateSpec.model || !stateSpec.records) {
112
+ process.stderr.write('✗ Error: State file must have "model" and "records" fields\n');
113
+ process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
114
+ return;
115
+ }
116
+ let client;
117
+ try {
118
+ client = await (0, auth_1.createAuthClient)(opts);
119
+ }
120
+ catch (err) {
121
+ process.exit((0, errors_1.handleError)(err));
122
+ }
123
+ try {
124
+ const { model, match_field = 'name', records: desired } = stateSpec;
125
+ const format = (0, formatter_1.resolveFormat)(opts.format);
126
+ // Fetch current state
127
+ const fields = [...new Set(['id', match_field, ...Object.keys(desired[0] ?? {})])];
128
+ const current = await client.searchRead(model, [], { fields });
129
+ const currentByKey = new Map();
130
+ for (const rec of current) {
131
+ currentByKey.set(String(rec[match_field]), rec);
132
+ }
133
+ const desiredKeys = new Set();
134
+ const plan = [];
135
+ for (const desiredRec of desired) {
136
+ const key = String(desiredRec[match_field]);
137
+ desiredKeys.add(key);
138
+ const existing = currentByKey.get(key);
139
+ if (!existing) {
140
+ plan.push({ action: 'create', key, changes: desiredRec });
141
+ }
142
+ else {
143
+ const diff = {};
144
+ for (const [k, v] of Object.entries(desiredRec)) {
145
+ if (k === match_field)
146
+ continue;
147
+ if (JSON.stringify(existing[k]) !== JSON.stringify(v)) {
148
+ diff[k] = { from: existing[k], to: v };
149
+ }
150
+ }
151
+ if (Object.keys(diff).length > 0) {
152
+ plan.push({ action: 'change', key, changes: diff });
153
+ }
154
+ }
155
+ }
156
+ // Deletions (present in Odoo but not in desired state)
157
+ // Only if stateSpec.prune = true
158
+ if (stateSpec.prune) {
159
+ for (const rec of current) {
160
+ const key = String(rec[match_field]);
161
+ if (!desiredKeys.has(key)) {
162
+ plan.push({ action: 'destroy', key, changes: { id: rec.id } });
163
+ }
164
+ }
165
+ }
166
+ if (format === 'json' || format === 'ndjson') {
167
+ await (0, stream_writer_1.writeStdout)(JSON.stringify(plan, null, format === 'json' ? 2 : 0) + '\n');
168
+ }
169
+ else {
170
+ if (plan.length === 0) {
171
+ process.stdout.write('No changes. State is up-to-date.\n');
172
+ }
173
+ else {
174
+ for (const entry of plan) {
175
+ const symbol = entry.action === 'create' ? '+' : entry.action === 'destroy' ? '-' : '~';
176
+ process.stdout.write(` ${symbol} ${model} "${entry.key}"\n`);
177
+ for (const [k, v] of Object.entries(entry.changes)) {
178
+ if (entry.action === 'change' && typeof v === 'object' && v !== null && 'from' in v) {
179
+ process.stdout.write(` ${k}: ${JSON.stringify(v.from)} → ${JSON.stringify(v.to)}\n`);
180
+ }
181
+ else {
182
+ process.stdout.write(` ${k}: ${JSON.stringify(v)}\n`);
183
+ }
184
+ }
185
+ }
186
+ const creates = plan.filter((p) => p.action === 'create').length;
187
+ const changes = plan.filter((p) => p.action === 'change').length;
188
+ const destroys = plan.filter((p) => p.action === 'destroy').length;
189
+ process.stdout.write(`\nPlan: ${creates} to add, ${changes} to change, ${destroys} to destroy.\n`);
190
+ process.stdout.write(`Run 'odoo state apply ${file} --experimental --confirm' to execute.\n`);
191
+ }
192
+ }
193
+ }
194
+ catch (err) {
195
+ process.exit((0, errors_1.handleError)(err));
196
+ }
197
+ finally {
198
+ client?.logout();
199
+ }
200
+ });
201
+ return cmd;
202
+ }
203
+ function buildApplyCommand() {
204
+ const cmd = new commander_1.Command('apply')
205
+ .description('Apply desired state to Odoo [WRITE + --experimental + --confirm]')
206
+ .argument('<file>', 'State file (JSON)')
207
+ .addHelpText('after', `
208
+ Applies changes shown by 'odoo state plan'. Use --dry-run to preview.
209
+
210
+ Examples:
211
+ odoo state apply ./crm-stages.json --experimental --confirm
212
+ odoo state apply ./crm-stages.json --experimental --confirm --auto-approve
213
+ `);
214
+ (0, common_params_1.addAuthOptions)(cmd);
215
+ cmd.addOption((0, common_params_1.confirmOption)());
216
+ cmd.addOption((0, common_params_1.dryRunOption)());
217
+ cmd.addOption((0, common_params_1.experimentalOption)());
218
+ cmd.option('--auto-approve', 'Skip confirmation prompt — treat as --confirm (CI-safe)');
219
+ cmd.action(async (file) => {
220
+ const opts = cmd.optsWithGlobals();
221
+ // --auto-approve is an alias for --confirm (for scripting/CI use)
222
+ if (opts.autoApprove) {
223
+ opts.confirm = true;
224
+ }
225
+ try {
226
+ requireExperimental(opts);
227
+ }
228
+ catch (err) {
229
+ process.exit((0, errors_1.handleError)(err));
230
+ }
231
+ try {
232
+ (0, safety_1.requireConfirm)('WRITE', opts, 'state apply');
233
+ }
234
+ catch (err) {
235
+ process.exit((0, errors_1.handleError)(err));
236
+ }
237
+ log('state apply %s dryRun=%s', file, opts.dryRun);
238
+ let stateSpec;
239
+ try {
240
+ const content = (0, fs_1.readFileSync)(file, 'utf8');
241
+ stateSpec = JSON.parse(content);
242
+ }
243
+ catch (err) {
244
+ process.stderr.write(`✗ Error: Cannot read state file '${file}': ${err instanceof Error ? err.message : String(err)}\n`);
245
+ process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
246
+ return;
247
+ }
248
+ let client;
249
+ try {
250
+ client = await (0, auth_1.createAuthClient)(opts);
251
+ }
252
+ catch (err) {
253
+ process.exit((0, errors_1.handleError)(err));
254
+ }
255
+ try {
256
+ const { model, match_field = 'name', records: desired, prune = false } = stateSpec;
257
+ const fields = [...new Set(['id', match_field, ...Object.keys(desired[0] ?? {})])];
258
+ const current = await client.searchRead(model, [], { fields });
259
+ const currentByKey = new Map();
260
+ for (const rec of current) {
261
+ currentByKey.set(String(rec[match_field]), rec);
262
+ }
263
+ const desiredKeys = new Set();
264
+ let created = 0;
265
+ let updated = 0;
266
+ for (const desiredRec of desired) {
267
+ const key = String(desiredRec[match_field]);
268
+ desiredKeys.add(key);
269
+ const existing = currentByKey.get(key);
270
+ if (!existing) {
271
+ if (opts.dryRun) {
272
+ process.stderr.write(` + [DRY RUN] Would create ${model} "${key}"\n`);
273
+ }
274
+ else {
275
+ await client.create(model, desiredRec);
276
+ process.stderr.write(` + Created ${model} "${key}"\n`);
277
+ }
278
+ created++;
279
+ }
280
+ else {
281
+ // Compute diff
282
+ const diff = {};
283
+ for (const [k, v] of Object.entries(desiredRec)) {
284
+ if (k === match_field)
285
+ continue;
286
+ if (JSON.stringify(existing[k]) !== JSON.stringify(v)) {
287
+ diff[k] = v;
288
+ }
289
+ }
290
+ if (Object.keys(diff).length > 0) {
291
+ if (opts.dryRun) {
292
+ process.stderr.write(` ~ [DRY RUN] Would update ${model} "${key}"\n`);
293
+ }
294
+ else {
295
+ await client.write(model, [existing.id], diff);
296
+ process.stderr.write(` ~ Updated ${model} "${key}"\n`);
297
+ }
298
+ updated++;
299
+ }
300
+ }
301
+ }
302
+ // TODO: prune=true destroys records not in spec — requires --confirm
303
+ let destroyed = 0;
304
+ if (prune) {
305
+ for (const rec of current) {
306
+ const key = String(rec[match_field]);
307
+ if (!desiredKeys.has(key)) {
308
+ if (opts.dryRun) {
309
+ process.stderr.write(` - [DRY RUN] Would destroy ${model} "${key}" (id=${rec.id})\n`);
310
+ }
311
+ else {
312
+ await client.unlink(model, [rec.id]);
313
+ process.stderr.write(` - Destroyed ${model} "${key}" (id=${rec.id})\n`);
314
+ }
315
+ destroyed++;
316
+ }
317
+ }
318
+ }
319
+ const dryLabel = opts.dryRun ? ' (dry run)' : '';
320
+ (0, errors_1.printSuccess)(`Applied${dryLabel}: ${created} created, ${updated} updated, ${destroyed} destroyed`);
321
+ }
322
+ catch (err) {
323
+ process.exit((0, errors_1.handleError)(err));
324
+ }
325
+ finally {
326
+ client?.logout();
327
+ }
328
+ });
329
+ return cmd;
330
+ }
331
+ function buildDiffCommand() {
332
+ const cmd = new commander_1.Command('diff')
333
+ .description("Show current state of a model's records [READ + --experimental]")
334
+ .argument('<model>', 'Odoo model name')
335
+ .addHelpText('after', `
336
+ Examples:
337
+ odoo state diff crm.stage --experimental
338
+ odoo state diff crm.stage --experimental --format json > current-stages.json
339
+ `);
340
+ (0, common_params_1.addAuthOptions)(cmd);
341
+ (0, common_params_1.addOutputOptions)(cmd);
342
+ cmd.addOption((0, common_params_1.experimentalOption)());
343
+ cmd.action(async (model) => {
344
+ const opts = cmd.optsWithGlobals();
345
+ try {
346
+ requireExperimental(opts);
347
+ }
348
+ catch (err) {
349
+ process.exit((0, errors_1.handleError)(err));
350
+ }
351
+ log('state diff %s', model);
352
+ let client;
353
+ try {
354
+ client = await (0, auth_1.createAuthClient)(opts);
355
+ }
356
+ catch (err) {
357
+ process.exit((0, errors_1.handleError)(err));
358
+ }
359
+ try {
360
+ const records = await client.searchRead(model, []);
361
+ const format = (0, formatter_1.resolveFormat)(opts.format);
362
+ await (0, formatter_1.render)(records, format);
363
+ }
364
+ catch (err) {
365
+ process.exit((0, errors_1.handleError)(err));
366
+ }
367
+ finally {
368
+ client?.logout();
369
+ }
370
+ });
371
+ return cmd;
372
+ }
373
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/commands/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `odoo timesheets` command group.
3
+ *
4
+ * Commands:
5
+ * timesheets start Start a timer [WRITE]
6
+ * timesheets stop Stop running timer [WRITE]
7
+ * timesheets running Show running timer [READ]
8
+ * timesheets log Log time retroactively [WRITE]
9
+ * timesheets list List timesheets [READ]
10
+ *
11
+ * Requires hr_timesheet module to be installed.
12
+ */
13
+ import { Command } from 'commander';
14
+ export declare function buildTimesheetsCommand(): Command;
15
+ //# sourceMappingURL=timesheets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timesheets.d.ts","sourceRoot":"","sources":["../../src/commands/timesheets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,sBAAsB,IAAI,OAAO,CAsChD"}