Sao.common.DomainParser stringable: can not parse domain to show UserError
In console browser log:
```
TypeError: Cannot read properties of undefined (reading 'endsWith')
at stringable_ (https://xxxxx.com/dist/tryton-sao.js:4394:26)
at Array.every (<anonymous>)
at ClassConstructor.stringable (https://xxxxx.com/dist/tryton-sao.js:4428:27)
at Object.ajax_success [as success] (https://xxxxx.com/dist/tryton-sao.js:1397:43)
at c (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:25304)
at Object.fireWith [as resolveWith] (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:26053)
at l (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:77782)
at XMLHttpRequest.<anonymous> (https://xxxxx.com/bower_components/jquery/dist/jquery.min.js:2:80265)`
```
Can not [stringable domain in RPC UserError](https://foss.heptapod.net/tryton/tryton/-/blob/acd802ddc8fcee6890cd44a97f4da4926ccd62bc/sao/src/rpc.js#L76)
Adding more information in the console browser:
```
(5) [Array(3), Array(0), Array(3), Array(3), Array(3)]
(3) ['salable', '=', true]
[]
(3) ['company_salable', '=', true]
(3) ['template.validated', '=', true]
(3) ['template.id', 'in', Array(1471)]
```
See that second array item, is empty list.
Domain field is:
```
>>> Line = pool.get('sale.line')
>>> Line.product.domain
[If(And(In(Eval('sale_state', ''), ['draft', 'quotation']), Not(Less(Eval('quantity', 0), 0, False))), ('salable', '=', True), ()), If(Not(Equal(Eval('type', ''), 'line')), ('id', '=', None), ()), ('company_salable', '=', True), ('template.validated', '=', True), If(Equal(Eval('sale_state', ''), 'draft'), ('template.id', 'in', Eval('available_products', [])), ())]
```
Stringable [can not parse this domain](https://foss.heptapod.net/tryton/tryton/-/blob/acd802ddc8fcee6890cd44a97f4da4926ccd62bc/modules/sale/sale.py?page=2#L1304):
```
If(Eval('type') != 'line',
('id', '=', None),
()),
```
issue