@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,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Odoo domain parser — tokenizer + recursive descent parser.
|
|
4
|
+
*
|
|
5
|
+
* Parses the Python-literal subset used in Odoo domain expressions:
|
|
6
|
+
*
|
|
7
|
+
* '[("stage_id.name","=","Won"),("active","=",True)]'
|
|
8
|
+
* '["|",("name","ilike","acme"),("ref","ilike","acme")]'
|
|
9
|
+
*
|
|
10
|
+
* Converts Python literals to JSON-compatible values:
|
|
11
|
+
* True → true
|
|
12
|
+
* False → false
|
|
13
|
+
* None → null
|
|
14
|
+
* (a,b) → [a, b] (tuples become arrays)
|
|
15
|
+
*
|
|
16
|
+
* Three input paths:
|
|
17
|
+
* parseDomainArg() - from --domain flag (Python literal syntax)
|
|
18
|
+
* parseDomainJson() - from --domain-json flag (strict JSON)
|
|
19
|
+
* parseFilterArgs() - from --filter K=V pairs (simple equality)
|
|
20
|
+
*/
|
|
21
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(o, k2, desc);
|
|
28
|
+
}) : (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
o[k2] = m[k];
|
|
31
|
+
}));
|
|
32
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
33
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
34
|
+
}) : function(o, v) {
|
|
35
|
+
o["default"] = v;
|
|
36
|
+
});
|
|
37
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
38
|
+
var ownKeys = function(o) {
|
|
39
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
40
|
+
var ar = [];
|
|
41
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
42
|
+
return ar;
|
|
43
|
+
};
|
|
44
|
+
return ownKeys(o);
|
|
45
|
+
};
|
|
46
|
+
return function (mod) {
|
|
47
|
+
if (mod && mod.__esModule) return mod;
|
|
48
|
+
var result = {};
|
|
49
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
50
|
+
__setModuleDefault(result, mod);
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
})();
|
|
54
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
55
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
56
|
+
};
|
|
57
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
58
|
+
exports.DomainParseError = void 0;
|
|
59
|
+
exports.parseDomainArg = parseDomainArg;
|
|
60
|
+
exports.parseDomainJson = parseDomainJson;
|
|
61
|
+
exports.parseFilterArgs = parseFilterArgs;
|
|
62
|
+
exports.combineDomains = combineDomains;
|
|
63
|
+
exports.readDomainFile = readDomainFile;
|
|
64
|
+
const debug_1 = __importDefault(require("debug"));
|
|
65
|
+
const log = (0, debug_1.default)('odoo-cli:domain-parser');
|
|
66
|
+
// ── Errors ──────────────────────────────────────────────────────────
|
|
67
|
+
class DomainParseError extends Error {
|
|
68
|
+
position;
|
|
69
|
+
input;
|
|
70
|
+
constructor(message, position, input) {
|
|
71
|
+
const posHint = position !== undefined && input !== undefined
|
|
72
|
+
? `\n at position ${position}: ...${input.slice(Math.max(0, position - 10), position + 10)}...`
|
|
73
|
+
: '';
|
|
74
|
+
super(message + posHint);
|
|
75
|
+
this.position = position;
|
|
76
|
+
this.input = input;
|
|
77
|
+
this.name = 'DomainParseError';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.DomainParseError = DomainParseError;
|
|
81
|
+
function tokenize(input) {
|
|
82
|
+
const tokens = [];
|
|
83
|
+
let i = 0;
|
|
84
|
+
while (i < input.length) {
|
|
85
|
+
// Skip whitespace
|
|
86
|
+
if (/\s/.test(input[i])) {
|
|
87
|
+
i++;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// Single-char tokens
|
|
91
|
+
if (input[i] === '[') {
|
|
92
|
+
tokens.push({ type: 'LBRACKET', value: '[', pos: i });
|
|
93
|
+
i++;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (input[i] === ']') {
|
|
97
|
+
tokens.push({ type: 'RBRACKET', value: ']', pos: i });
|
|
98
|
+
i++;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (input[i] === '(') {
|
|
102
|
+
tokens.push({ type: 'LPAREN', value: '(', pos: i });
|
|
103
|
+
i++;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (input[i] === ')') {
|
|
107
|
+
tokens.push({ type: 'RPAREN', value: ')', pos: i });
|
|
108
|
+
i++;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (input[i] === ',') {
|
|
112
|
+
tokens.push({ type: 'COMMA', value: ',', pos: i });
|
|
113
|
+
i++;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
// String literals — single or double quoted
|
|
117
|
+
if (input[i] === '"' || input[i] === "'") {
|
|
118
|
+
const quote = input[i];
|
|
119
|
+
const start = i;
|
|
120
|
+
i++;
|
|
121
|
+
let str = '';
|
|
122
|
+
while (i < input.length) {
|
|
123
|
+
if (input[i] === '\\' && i + 1 < input.length) {
|
|
124
|
+
const esc = input[i + 1];
|
|
125
|
+
switch (esc) {
|
|
126
|
+
case 'n':
|
|
127
|
+
str += '\n';
|
|
128
|
+
break;
|
|
129
|
+
case 't':
|
|
130
|
+
str += '\t';
|
|
131
|
+
break;
|
|
132
|
+
case 'r':
|
|
133
|
+
str += '\r';
|
|
134
|
+
break;
|
|
135
|
+
case '\\':
|
|
136
|
+
str += '\\';
|
|
137
|
+
break;
|
|
138
|
+
case "'":
|
|
139
|
+
str += "'";
|
|
140
|
+
break;
|
|
141
|
+
case '"':
|
|
142
|
+
str += '"';
|
|
143
|
+
break;
|
|
144
|
+
default:
|
|
145
|
+
str += esc;
|
|
146
|
+
}
|
|
147
|
+
i += 2;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (input[i] === quote) {
|
|
151
|
+
i++;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
str += input[i];
|
|
155
|
+
i++;
|
|
156
|
+
}
|
|
157
|
+
tokens.push({ type: 'STRING', value: str, pos: start });
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
// Numbers (including negative)
|
|
161
|
+
if (/[-\d]/.test(input[i]) && (input[i] !== '-' || /\d/.test(input[i + 1] ?? ''))) {
|
|
162
|
+
const start = i;
|
|
163
|
+
let num = '';
|
|
164
|
+
if (input[i] === '-') {
|
|
165
|
+
num += '-';
|
|
166
|
+
i++;
|
|
167
|
+
}
|
|
168
|
+
while (i < input.length && /[\d.]/.test(input[i])) {
|
|
169
|
+
num += input[i];
|
|
170
|
+
i++;
|
|
171
|
+
}
|
|
172
|
+
tokens.push({ type: 'NUMBER', value: num, pos: start });
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
// Identifiers: True, False, None, operators like &, |, !
|
|
176
|
+
if (/[a-zA-Z_&|!]/.test(input[i])) {
|
|
177
|
+
const start = i;
|
|
178
|
+
let ident = '';
|
|
179
|
+
while (i < input.length && /[a-zA-Z0-9_.&|!]/.test(input[i])) {
|
|
180
|
+
ident += input[i];
|
|
181
|
+
i++;
|
|
182
|
+
}
|
|
183
|
+
tokens.push({ type: 'IDENT', value: ident, pos: start });
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
throw new DomainParseError(`Unexpected character '${input[i]}'`, i, input);
|
|
187
|
+
}
|
|
188
|
+
tokens.push({ type: 'EOF', value: '', pos: input.length });
|
|
189
|
+
return tokens;
|
|
190
|
+
}
|
|
191
|
+
// ── Parser ───────────────────────────────────────────────────────────
|
|
192
|
+
class Parser {
|
|
193
|
+
input;
|
|
194
|
+
tokens;
|
|
195
|
+
pos = 0;
|
|
196
|
+
constructor(input, tokens) {
|
|
197
|
+
this.input = input;
|
|
198
|
+
this.tokens = tokens;
|
|
199
|
+
}
|
|
200
|
+
peek() {
|
|
201
|
+
return this.tokens[this.pos];
|
|
202
|
+
}
|
|
203
|
+
consume() {
|
|
204
|
+
return this.tokens[this.pos++];
|
|
205
|
+
}
|
|
206
|
+
expect(type) {
|
|
207
|
+
const tok = this.peek();
|
|
208
|
+
if (tok.type !== type) {
|
|
209
|
+
throw new DomainParseError(`Expected ${type} but got ${tok.type} ('${tok.value}')`, tok.pos, this.input);
|
|
210
|
+
}
|
|
211
|
+
return this.consume();
|
|
212
|
+
}
|
|
213
|
+
parseValue() {
|
|
214
|
+
const tok = this.peek();
|
|
215
|
+
switch (tok.type) {
|
|
216
|
+
case 'LBRACKET':
|
|
217
|
+
return this.parseList();
|
|
218
|
+
case 'LPAREN':
|
|
219
|
+
return this.parseTuple();
|
|
220
|
+
case 'STRING':
|
|
221
|
+
this.consume();
|
|
222
|
+
return tok.value;
|
|
223
|
+
case 'NUMBER': {
|
|
224
|
+
this.consume();
|
|
225
|
+
const n = tok.value.includes('.') ? parseFloat(tok.value) : parseInt(tok.value, 10);
|
|
226
|
+
if (isNaN(n))
|
|
227
|
+
throw new DomainParseError(`Invalid number '${tok.value}'`, tok.pos, this.input);
|
|
228
|
+
return n;
|
|
229
|
+
}
|
|
230
|
+
case 'IDENT': {
|
|
231
|
+
this.consume();
|
|
232
|
+
switch (tok.value) {
|
|
233
|
+
case 'True':
|
|
234
|
+
return true;
|
|
235
|
+
case 'False':
|
|
236
|
+
return false;
|
|
237
|
+
case 'None':
|
|
238
|
+
return null;
|
|
239
|
+
// Logic operators are valid as strings in domains
|
|
240
|
+
case '&':
|
|
241
|
+
case '|':
|
|
242
|
+
case '!':
|
|
243
|
+
return tok.value;
|
|
244
|
+
default:
|
|
245
|
+
// Could be a bare identifier used as a string in some edge cases
|
|
246
|
+
return tok.value;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
default:
|
|
250
|
+
throw new DomainParseError(`Unexpected token ${tok.type} ('${tok.value}')`, tok.pos, this.input);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
parseList() {
|
|
254
|
+
this.expect('LBRACKET');
|
|
255
|
+
const items = [];
|
|
256
|
+
if (this.peek().type === 'RBRACKET') {
|
|
257
|
+
this.consume();
|
|
258
|
+
return items;
|
|
259
|
+
}
|
|
260
|
+
items.push(this.parseValue());
|
|
261
|
+
while (this.peek().type === 'COMMA') {
|
|
262
|
+
this.consume();
|
|
263
|
+
// Trailing comma
|
|
264
|
+
if (this.peek().type === 'RBRACKET')
|
|
265
|
+
break;
|
|
266
|
+
items.push(this.parseValue());
|
|
267
|
+
}
|
|
268
|
+
this.expect('RBRACKET');
|
|
269
|
+
return items;
|
|
270
|
+
}
|
|
271
|
+
parseTuple() {
|
|
272
|
+
// Tuples → arrays (same as list but with parens)
|
|
273
|
+
this.expect('LPAREN');
|
|
274
|
+
const items = [];
|
|
275
|
+
if (this.peek().type === 'RPAREN') {
|
|
276
|
+
this.consume();
|
|
277
|
+
return items;
|
|
278
|
+
}
|
|
279
|
+
items.push(this.parseValue());
|
|
280
|
+
while (this.peek().type === 'COMMA') {
|
|
281
|
+
this.consume();
|
|
282
|
+
if (this.peek().type === 'RPAREN')
|
|
283
|
+
break;
|
|
284
|
+
items.push(this.parseValue());
|
|
285
|
+
}
|
|
286
|
+
this.expect('RPAREN');
|
|
287
|
+
return items;
|
|
288
|
+
}
|
|
289
|
+
parse() {
|
|
290
|
+
const result = this.parseList();
|
|
291
|
+
if (this.peek().type !== 'EOF') {
|
|
292
|
+
const tok = this.peek();
|
|
293
|
+
throw new DomainParseError(`Unexpected token after domain end: ${tok.type} ('${tok.value}')`, tok.pos, this.input);
|
|
294
|
+
}
|
|
295
|
+
return result;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// ── Public API ───────────────────────────────────────────────────────
|
|
299
|
+
/**
|
|
300
|
+
* Parse an Odoo domain string (Python literal syntax) into a JSON array.
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* parseDomainArg('[("name","ilike","acme"),("active","=",True)]')
|
|
304
|
+
* // → [["name","ilike","acme"],["active","=",true]]
|
|
305
|
+
*/
|
|
306
|
+
function parseDomainArg(input) {
|
|
307
|
+
log('Parsing domain: %s', input);
|
|
308
|
+
const trimmed = input.trim();
|
|
309
|
+
if (!trimmed)
|
|
310
|
+
return [];
|
|
311
|
+
try {
|
|
312
|
+
const tokens = tokenize(trimmed);
|
|
313
|
+
const parser = new Parser(trimmed, tokens);
|
|
314
|
+
const result = parser.parse();
|
|
315
|
+
if (!Array.isArray(result)) {
|
|
316
|
+
throw new DomainParseError('Domain must be a list', 0, trimmed);
|
|
317
|
+
}
|
|
318
|
+
log('Parsed domain: %O', result);
|
|
319
|
+
return result;
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
if (err instanceof DomainParseError)
|
|
323
|
+
throw err;
|
|
324
|
+
throw new DomainParseError(`Failed to parse domain: ${err instanceof Error ? err.message : String(err)}`, 0, trimmed);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Parse a strict JSON domain string.
|
|
329
|
+
*
|
|
330
|
+
* @example
|
|
331
|
+
* parseDomainJson('[["name","ilike","acme"]]')
|
|
332
|
+
*/
|
|
333
|
+
function parseDomainJson(input) {
|
|
334
|
+
log('Parsing JSON domain: %s', input);
|
|
335
|
+
const trimmed = input.trim();
|
|
336
|
+
if (!trimmed)
|
|
337
|
+
return [];
|
|
338
|
+
let parsed;
|
|
339
|
+
try {
|
|
340
|
+
parsed = JSON.parse(trimmed);
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
throw new DomainParseError(`Invalid JSON domain: ${err instanceof Error ? err.message : String(err)}`);
|
|
344
|
+
}
|
|
345
|
+
if (!Array.isArray(parsed)) {
|
|
346
|
+
throw new DomainParseError('Domain must be a JSON array');
|
|
347
|
+
}
|
|
348
|
+
return parsed;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Parse --filter K=V pairs into domain terms.
|
|
352
|
+
*
|
|
353
|
+
* Type inference:
|
|
354
|
+
* "true"/"false" → boolean
|
|
355
|
+
* all-digit string → integer
|
|
356
|
+
* otherwise → string
|
|
357
|
+
*
|
|
358
|
+
* @example
|
|
359
|
+
* parseFilterArgs(['active=true', 'state=sale'])
|
|
360
|
+
* // → [['active','=',true],['state','=','sale']]
|
|
361
|
+
*/
|
|
362
|
+
function parseFilterArgs(filters) {
|
|
363
|
+
return filters.map((f) => {
|
|
364
|
+
const eqIdx = f.indexOf('=');
|
|
365
|
+
if (eqIdx === -1) {
|
|
366
|
+
throw new DomainParseError(`Invalid --filter format (expected K=V): '${f}'`);
|
|
367
|
+
}
|
|
368
|
+
const key = f.slice(0, eqIdx).trim();
|
|
369
|
+
const rawVal = f.slice(eqIdx + 1);
|
|
370
|
+
let value;
|
|
371
|
+
if (rawVal === 'true')
|
|
372
|
+
value = true;
|
|
373
|
+
else if (rawVal === 'false')
|
|
374
|
+
value = false;
|
|
375
|
+
else if (/^\d+$/.test(rawVal))
|
|
376
|
+
value = parseInt(rawVal, 10);
|
|
377
|
+
else
|
|
378
|
+
value = rawVal;
|
|
379
|
+
return [key, '=', value];
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Combine a base domain with filter terms (AND).
|
|
384
|
+
*/
|
|
385
|
+
function combineDomains(baseDomain, filterTerms) {
|
|
386
|
+
if (filterTerms.length === 0)
|
|
387
|
+
return baseDomain;
|
|
388
|
+
return [...baseDomain, ...filterTerms];
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Read domain from a file path. '-' reads from stdin.
|
|
392
|
+
*/
|
|
393
|
+
async function readDomainFile(filePath) {
|
|
394
|
+
const { readFileSync } = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
395
|
+
let content;
|
|
396
|
+
if (filePath === '-') {
|
|
397
|
+
// Read from stdin
|
|
398
|
+
content = await readStdin();
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
try {
|
|
402
|
+
content = readFileSync(filePath, 'utf8');
|
|
403
|
+
}
|
|
404
|
+
catch (err) {
|
|
405
|
+
throw new DomainParseError(`Cannot read domain file '${filePath}': ${err instanceof Error ? err.message : String(err)}`);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
const trimmed = content.trim();
|
|
409
|
+
// Try JSON first (standard): JSON true/false/null must not be corrupted by Python-literal parser.
|
|
410
|
+
// Fall back to Python-literal syntax only if JSON.parse fails.
|
|
411
|
+
try {
|
|
412
|
+
return parseDomainJson(trimmed);
|
|
413
|
+
}
|
|
414
|
+
catch {
|
|
415
|
+
// fall back to Python-literal syntax (handles True/False/None)
|
|
416
|
+
}
|
|
417
|
+
return parseDomainArg(trimmed);
|
|
418
|
+
}
|
|
419
|
+
function readStdin() {
|
|
420
|
+
return new Promise((resolve, reject) => {
|
|
421
|
+
const chunks = [];
|
|
422
|
+
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
423
|
+
process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
|
|
424
|
+
process.stdin.on('error', reject);
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=domain-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-parser.js","sourceRoot":"","sources":["../../src/parsing/domain-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Robust JSON parsing helpers with actionable error messages.
|
|
3
|
+
*
|
|
4
|
+
* Used for --data, --kwargs, --args, --context flags.
|
|
5
|
+
*/
|
|
6
|
+
export declare class JsonArgError extends Error {
|
|
7
|
+
readonly source: string;
|
|
8
|
+
readonly cause?: Error | undefined;
|
|
9
|
+
constructor(message: string, source: string, cause?: Error | undefined);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse a JSON string argument with a helpful error message.
|
|
13
|
+
*
|
|
14
|
+
* @param raw - Raw string from CLI flag
|
|
15
|
+
* @param flag - Flag name for error context (e.g., '--data')
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseJsonArg(raw: string, flag?: string): Record<string, any>;
|
|
18
|
+
/**
|
|
19
|
+
* Parse a JSON array argument.
|
|
20
|
+
*
|
|
21
|
+
* @param raw - Raw string from CLI flag
|
|
22
|
+
* @param flag - Flag name for error context (e.g., '--args')
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseJsonArray(raw: string, flag?: string): any[];
|
|
25
|
+
/**
|
|
26
|
+
* Read JSON from a file path, or stdin when filePath is '-'.
|
|
27
|
+
*
|
|
28
|
+
* @param filePath - File path or '-' for stdin
|
|
29
|
+
* @param flag - Flag name for error context
|
|
30
|
+
*/
|
|
31
|
+
export declare function readJsonFile(filePath: string, flag?: string): Promise<Record<string, any>>;
|
|
32
|
+
/**
|
|
33
|
+
* Read stdin as a string.
|
|
34
|
+
*/
|
|
35
|
+
export declare function readStdin(): Promise<string>;
|
|
36
|
+
/**
|
|
37
|
+
* Read a text message from a file or stdin.
|
|
38
|
+
*/
|
|
39
|
+
export declare function readMessageFile(filePath: string): Promise<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Parse hours from "1.5" or "1:30" format.
|
|
42
|
+
*/
|
|
43
|
+
export declare function parseHours(raw: string): number;
|
|
44
|
+
/**
|
|
45
|
+
* Parse comma-separated IDs into an array of numbers.
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseIds(raw: string): number[];
|
|
48
|
+
//# sourceMappingURL=json-arg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-arg.d.ts","sourceRoot":"","sources":["../../src/parsing/json-arg.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,MAAM,EAAE,MAAM;aACd,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoBtF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiB,GAAG,GAAG,EAAE,CAiB1E;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAiB9B;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAW3C;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmB9C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAU9C"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Robust JSON parsing helpers with actionable error messages.
|
|
4
|
+
*
|
|
5
|
+
* Used for --data, --kwargs, --args, --context flags.
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.JsonArgError = void 0;
|
|
12
|
+
exports.parseJsonArg = parseJsonArg;
|
|
13
|
+
exports.parseJsonArray = parseJsonArray;
|
|
14
|
+
exports.readJsonFile = readJsonFile;
|
|
15
|
+
exports.readStdin = readStdin;
|
|
16
|
+
exports.readMessageFile = readMessageFile;
|
|
17
|
+
exports.parseHours = parseHours;
|
|
18
|
+
exports.parseIds = parseIds;
|
|
19
|
+
const debug_1 = __importDefault(require("debug"));
|
|
20
|
+
const fs_1 = require("fs");
|
|
21
|
+
const log = (0, debug_1.default)('odoo-cli:json-arg');
|
|
22
|
+
class JsonArgError extends Error {
|
|
23
|
+
source;
|
|
24
|
+
cause;
|
|
25
|
+
constructor(message, source, cause) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.source = source;
|
|
28
|
+
this.cause = cause;
|
|
29
|
+
this.name = 'JsonArgError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.JsonArgError = JsonArgError;
|
|
33
|
+
/**
|
|
34
|
+
* Parse a JSON string argument with a helpful error message.
|
|
35
|
+
*
|
|
36
|
+
* @param raw - Raw string from CLI flag
|
|
37
|
+
* @param flag - Flag name for error context (e.g., '--data')
|
|
38
|
+
*/
|
|
39
|
+
function parseJsonArg(raw, flag = '--data') {
|
|
40
|
+
log('Parsing JSON arg for %s: %s', flag, raw);
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(raw);
|
|
43
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
44
|
+
throw new JsonArgError(`${flag} must be a JSON object (got ${Array.isArray(parsed) ? 'array' : typeof parsed})`, raw);
|
|
45
|
+
}
|
|
46
|
+
return parsed;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err instanceof JsonArgError)
|
|
50
|
+
throw err;
|
|
51
|
+
const syntaxErr = err instanceof SyntaxError ? err : undefined;
|
|
52
|
+
throw new JsonArgError(`Invalid JSON for ${flag}: ${syntaxErr?.message ?? String(err)}\n Got: ${raw.slice(0, 200)}`, raw, syntaxErr);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parse a JSON array argument.
|
|
57
|
+
*
|
|
58
|
+
* @param raw - Raw string from CLI flag
|
|
59
|
+
* @param flag - Flag name for error context (e.g., '--args')
|
|
60
|
+
*/
|
|
61
|
+
function parseJsonArray(raw, flag = '--args') {
|
|
62
|
+
log('Parsing JSON array arg for %s: %s', flag, raw);
|
|
63
|
+
try {
|
|
64
|
+
const parsed = JSON.parse(raw);
|
|
65
|
+
if (!Array.isArray(parsed)) {
|
|
66
|
+
throw new JsonArgError(`${flag} must be a JSON array (got ${typeof parsed})`, raw);
|
|
67
|
+
}
|
|
68
|
+
return parsed;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (err instanceof JsonArgError)
|
|
72
|
+
throw err;
|
|
73
|
+
const syntaxErr = err instanceof SyntaxError ? err : undefined;
|
|
74
|
+
throw new JsonArgError(`Invalid JSON array for ${flag}: ${syntaxErr?.message ?? String(err)}\n Got: ${raw.slice(0, 200)}`, raw, syntaxErr);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Read JSON from a file path, or stdin when filePath is '-'.
|
|
79
|
+
*
|
|
80
|
+
* @param filePath - File path or '-' for stdin
|
|
81
|
+
* @param flag - Flag name for error context
|
|
82
|
+
*/
|
|
83
|
+
async function readJsonFile(filePath, flag = '--data-file') {
|
|
84
|
+
let content;
|
|
85
|
+
if (filePath === '-') {
|
|
86
|
+
content = await readStdin();
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
try {
|
|
90
|
+
content = (0, fs_1.readFileSync)(filePath, 'utf8');
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
throw new JsonArgError(`Cannot read ${flag} from '${filePath}': ${err instanceof Error ? err.message : String(err)}`, filePath);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return parseJsonArg(content.trim(), flag);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Read stdin as a string.
|
|
100
|
+
*/
|
|
101
|
+
function readStdin() {
|
|
102
|
+
return new Promise((resolve, reject) => {
|
|
103
|
+
if (process.stdin.isTTY) {
|
|
104
|
+
resolve('');
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const chunks = [];
|
|
108
|
+
process.stdin.on('data', (chunk) => chunks.push(chunk));
|
|
109
|
+
process.stdin.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
|
|
110
|
+
process.stdin.on('error', reject);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Read a text message from a file or stdin.
|
|
115
|
+
*/
|
|
116
|
+
async function readMessageFile(filePath) {
|
|
117
|
+
if (filePath === '-') {
|
|
118
|
+
return readStdin();
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
return (0, fs_1.readFileSync)(filePath, 'utf8');
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
throw new JsonArgError(`Cannot read message from '${filePath}': ${err instanceof Error ? err.message : String(err)}`, filePath);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Parse hours from "1.5" or "1:30" format.
|
|
129
|
+
*/
|
|
130
|
+
function parseHours(raw) {
|
|
131
|
+
const trimmed = raw.trim();
|
|
132
|
+
if (trimmed.includes(':')) {
|
|
133
|
+
const parts = trimmed.split(':');
|
|
134
|
+
if (parts.length !== 2) {
|
|
135
|
+
throw new JsonArgError(`Invalid hours format '${raw}': use H:MM or decimal`, raw);
|
|
136
|
+
}
|
|
137
|
+
const h = parseInt(parts[0], 10);
|
|
138
|
+
const m = parseInt(parts[1], 10);
|
|
139
|
+
if (isNaN(h) || isNaN(m) || m < 0 || m >= 60) {
|
|
140
|
+
throw new JsonArgError(`Invalid hours format '${raw}': minutes must be 0-59`, raw);
|
|
141
|
+
}
|
|
142
|
+
return h + m / 60;
|
|
143
|
+
}
|
|
144
|
+
const n = parseFloat(trimmed);
|
|
145
|
+
if (isNaN(n) || n < 0) {
|
|
146
|
+
throw new JsonArgError(`Invalid hours value '${raw}': must be a positive number`, raw);
|
|
147
|
+
}
|
|
148
|
+
return n;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Parse comma-separated IDs into an array of numbers.
|
|
152
|
+
*/
|
|
153
|
+
function parseIds(raw) {
|
|
154
|
+
return raw
|
|
155
|
+
.split(',')
|
|
156
|
+
.map((s) => s.trim())
|
|
157
|
+
.filter(Boolean)
|
|
158
|
+
.map((s) => {
|
|
159
|
+
const n = parseInt(s, 10);
|
|
160
|
+
if (isNaN(n))
|
|
161
|
+
throw new JsonArgError(`Invalid ID '${s}': must be a positive integer`, raw);
|
|
162
|
+
return n;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=json-arg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-arg.js","sourceRoot":"","sources":["../../src/parsing/json-arg.ts"],"names":[],"mappings":"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"}
|