From e7fb1e3e0761d608df1d85c48af168d7c4cad8fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Jerman?= Date: Mon, 27 Sep 2021 10:40:58 +0200 Subject: [PATCH] Tweak typed value Array casting; add missing selected prop --- automation/rest/eventTypes.gen.go | 90 +++++++++++++++++++++++++++ compose/rest/page.go | 2 +- compose/service/event/events.gen.go | 94 +++++++++++++++++++++++++++++ compose/service/event/events.yaml | 6 ++ compose/service/page.go | 12 ++-- compose/service/record.go | 16 ++--- pkg/expr/expr_types.go | 34 ++++++++--- 7 files changed, 229 insertions(+), 25 deletions(-) diff --git a/automation/rest/eventTypes.gen.go b/automation/rest/eventTypes.gen.go index 9e008e47c..ee200c1b3 100644 --- a/automation/rest/eventTypes.gen.go +++ b/automation/rest/eventTypes.gen.go @@ -555,6 +555,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeNamespace", Immutable: true, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -598,6 +604,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeNamespace", Immutable: true, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -641,6 +653,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeNamespace", Immutable: true, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -684,6 +702,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeNamespace", Immutable: true, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -727,6 +751,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeNamespace", Immutable: true, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -770,6 +800,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeNamespace", Immutable: true, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -813,6 +849,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeNamespace", Immutable: true, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -868,6 +910,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -939,6 +987,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -1010,6 +1064,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -1081,6 +1141,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -1152,6 +1218,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -1223,6 +1295,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -1294,6 +1372,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ @@ -1365,6 +1449,12 @@ func getEventTypeDefinitions() []eventTypeDef { Type: "ComposeRecordValueErrorSet", Immutable: false, }, + + { + Name: "selected", + Type: "", + Immutable: true, + }, }, Constraints: []eventTypeConstraintDef{ diff --git a/compose/rest/page.go b/compose/rest/page.go index 1fb1a16a4..e361b8b9d 100644 --- a/compose/rest/page.go +++ b/compose/rest/page.go @@ -205,7 +205,7 @@ func (ctrl *Page) TriggerScript(ctx context.Context, r *request.PageTriggerScrip } // @todo implement same behaviour as we have on record - page+oldPage - err = corredor.Service().Exec(ctx, r.Script, event.PageOnManual(page, page, namespace)) + err = corredor.Service().Exec(ctx, r.Script, event.PageOnManual(page, page, namespace, nil)) return ctrl.makePayload(ctx, page, err) } diff --git a/compose/service/event/events.gen.go b/compose/service/event/events.gen.go index 0ec99eb1a..ea3d21d5c 100644 --- a/compose/service/event/events.gen.go +++ b/compose/service/event/events.gen.go @@ -177,6 +177,7 @@ type ( page *types.Page oldPage *types.Page namespace *types.Namespace + selected []interface{} invoker auth.Identifiable } @@ -239,6 +240,7 @@ type ( module *types.Module namespace *types.Namespace recordValueErrors *types.RecordValueErrorSet + selected []interface{} invoker auth.Identifiable } @@ -1432,6 +1434,7 @@ func PageOnManual( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageOnManual { return &pageOnManual{ pageBase: &pageBase{ @@ -1439,6 +1442,7 @@ func PageOnManual( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1452,6 +1456,7 @@ func PageOnManualImmutable( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageOnManual { return &pageOnManual{ pageBase: &pageBase{ @@ -1459,6 +1464,7 @@ func PageOnManualImmutable( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1470,6 +1476,7 @@ func PageBeforeCreate( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageBeforeCreate { return &pageBeforeCreate{ pageBase: &pageBase{ @@ -1477,6 +1484,7 @@ func PageBeforeCreate( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1490,6 +1498,7 @@ func PageBeforeCreateImmutable( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageBeforeCreate { return &pageBeforeCreate{ pageBase: &pageBase{ @@ -1497,6 +1506,7 @@ func PageBeforeCreateImmutable( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1508,6 +1518,7 @@ func PageBeforeUpdate( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageBeforeUpdate { return &pageBeforeUpdate{ pageBase: &pageBase{ @@ -1515,6 +1526,7 @@ func PageBeforeUpdate( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1528,6 +1540,7 @@ func PageBeforeUpdateImmutable( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageBeforeUpdate { return &pageBeforeUpdate{ pageBase: &pageBase{ @@ -1535,6 +1548,7 @@ func PageBeforeUpdateImmutable( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1546,6 +1560,7 @@ func PageBeforeDelete( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageBeforeDelete { return &pageBeforeDelete{ pageBase: &pageBase{ @@ -1553,6 +1568,7 @@ func PageBeforeDelete( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1566,6 +1582,7 @@ func PageBeforeDeleteImmutable( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageBeforeDelete { return &pageBeforeDelete{ pageBase: &pageBase{ @@ -1573,6 +1590,7 @@ func PageBeforeDeleteImmutable( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1584,6 +1602,7 @@ func PageAfterCreate( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageAfterCreate { return &pageAfterCreate{ pageBase: &pageBase{ @@ -1591,6 +1610,7 @@ func PageAfterCreate( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1604,6 +1624,7 @@ func PageAfterCreateImmutable( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageAfterCreate { return &pageAfterCreate{ pageBase: &pageBase{ @@ -1611,6 +1632,7 @@ func PageAfterCreateImmutable( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1622,6 +1644,7 @@ func PageAfterUpdate( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageAfterUpdate { return &pageAfterUpdate{ pageBase: &pageBase{ @@ -1629,6 +1652,7 @@ func PageAfterUpdate( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1642,6 +1666,7 @@ func PageAfterUpdateImmutable( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageAfterUpdate { return &pageAfterUpdate{ pageBase: &pageBase{ @@ -1649,6 +1674,7 @@ func PageAfterUpdateImmutable( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1660,6 +1686,7 @@ func PageAfterDelete( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageAfterDelete { return &pageAfterDelete{ pageBase: &pageBase{ @@ -1667,6 +1694,7 @@ func PageAfterDelete( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1680,6 +1708,7 @@ func PageAfterDeleteImmutable( argPage *types.Page, argOldPage *types.Page, argNamespace *types.Namespace, + argSelected []interface{}, ) *pageAfterDelete { return &pageAfterDelete{ pageBase: &pageBase{ @@ -1687,6 +1716,7 @@ func PageAfterDeleteImmutable( page: argPage, oldPage: argOldPage, namespace: argNamespace, + selected: argSelected, }, } } @@ -1719,6 +1749,13 @@ func (res pageBase) Namespace() *types.Namespace { return res.namespace } +// Selected returns selected +// +// This function is auto-generated. +func (res pageBase) Selected() []interface{} { + return res.selected +} + // SetInvoker sets new invoker value // // This function is auto-generated. @@ -1749,6 +1786,10 @@ func (res pageBase) Encode() (args map[string][]byte, err error) { return nil, err } + if args["selected"], err = json.Marshal(res.selected); err != nil { + return nil, err + } + if args["invoker"], err = json.Marshal(res.invoker); err != nil { return nil, err } @@ -1773,6 +1814,8 @@ func (res pageBase) EncodeVars() (out *expr.Vars, err error) { return } + // Could not found expression-type counterpart for []interface{} + // Could not found expression-type counterpart for auth.Identifiable _ = v @@ -1805,6 +1848,8 @@ func (res *pageBase) Decode(results map[string][]byte) (err error) { // Do not decode namespace; marked as immutable + // Do not decode selected; marked as immutable + if res.invoker != nil { if r, ok := results["invoker"]; ok { if err = json.Unmarshal(r, res.invoker); err != nil { @@ -1823,6 +1868,7 @@ func (res *pageBase) DecodeVars(vars *expr.Vars) (err error) { // Could not find expression-type counterpart for *types.Page // oldPage marked as immutable // namespace marked as immutable + // selected marked as immutable // Could not find expression-type counterpart for auth.Identifiable return @@ -1900,6 +1946,7 @@ func RecordOnManual( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordOnManual { return &recordOnManual{ recordBase: &recordBase{ @@ -1909,6 +1956,7 @@ func RecordOnManual( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -1924,6 +1972,7 @@ func RecordOnManualImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordOnManual { return &recordOnManual{ recordBase: &recordBase{ @@ -1933,6 +1982,7 @@ func RecordOnManualImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -1946,6 +1996,7 @@ func RecordOnIteration( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordOnIteration { return &recordOnIteration{ recordBase: &recordBase{ @@ -1955,6 +2006,7 @@ func RecordOnIteration( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -1970,6 +2022,7 @@ func RecordOnIterationImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordOnIteration { return &recordOnIteration{ recordBase: &recordBase{ @@ -1979,6 +2032,7 @@ func RecordOnIterationImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -1992,6 +2046,7 @@ func RecordBeforeCreate( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordBeforeCreate { return &recordBeforeCreate{ recordBase: &recordBase{ @@ -2001,6 +2056,7 @@ func RecordBeforeCreate( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2016,6 +2072,7 @@ func RecordBeforeCreateImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordBeforeCreate { return &recordBeforeCreate{ recordBase: &recordBase{ @@ -2025,6 +2082,7 @@ func RecordBeforeCreateImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2038,6 +2096,7 @@ func RecordBeforeUpdate( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordBeforeUpdate { return &recordBeforeUpdate{ recordBase: &recordBase{ @@ -2047,6 +2106,7 @@ func RecordBeforeUpdate( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2062,6 +2122,7 @@ func RecordBeforeUpdateImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordBeforeUpdate { return &recordBeforeUpdate{ recordBase: &recordBase{ @@ -2071,6 +2132,7 @@ func RecordBeforeUpdateImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2084,6 +2146,7 @@ func RecordBeforeDelete( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordBeforeDelete { return &recordBeforeDelete{ recordBase: &recordBase{ @@ -2093,6 +2156,7 @@ func RecordBeforeDelete( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2108,6 +2172,7 @@ func RecordBeforeDeleteImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordBeforeDelete { return &recordBeforeDelete{ recordBase: &recordBase{ @@ -2117,6 +2182,7 @@ func RecordBeforeDeleteImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2130,6 +2196,7 @@ func RecordAfterCreate( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordAfterCreate { return &recordAfterCreate{ recordBase: &recordBase{ @@ -2139,6 +2206,7 @@ func RecordAfterCreate( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2154,6 +2222,7 @@ func RecordAfterCreateImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordAfterCreate { return &recordAfterCreate{ recordBase: &recordBase{ @@ -2163,6 +2232,7 @@ func RecordAfterCreateImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2176,6 +2246,7 @@ func RecordAfterUpdate( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordAfterUpdate { return &recordAfterUpdate{ recordBase: &recordBase{ @@ -2185,6 +2256,7 @@ func RecordAfterUpdate( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2200,6 +2272,7 @@ func RecordAfterUpdateImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordAfterUpdate { return &recordAfterUpdate{ recordBase: &recordBase{ @@ -2209,6 +2282,7 @@ func RecordAfterUpdateImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2222,6 +2296,7 @@ func RecordAfterDelete( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordAfterDelete { return &recordAfterDelete{ recordBase: &recordBase{ @@ -2231,6 +2306,7 @@ func RecordAfterDelete( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2246,6 +2322,7 @@ func RecordAfterDeleteImmutable( argModule *types.Module, argNamespace *types.Namespace, argRecordValueErrors *types.RecordValueErrorSet, + argSelected []interface{}, ) *recordAfterDelete { return &recordAfterDelete{ recordBase: &recordBase{ @@ -2255,6 +2332,7 @@ func RecordAfterDeleteImmutable( module: argModule, namespace: argNamespace, recordValueErrors: argRecordValueErrors, + selected: argSelected, }, } } @@ -2308,6 +2386,13 @@ func (res recordBase) RecordValueErrors() *types.RecordValueErrorSet { return res.recordValueErrors } +// Selected returns selected +// +// This function is auto-generated. +func (res recordBase) Selected() []interface{} { + return res.selected +} + // SetInvoker sets new invoker value // // This function is auto-generated. @@ -2346,6 +2431,10 @@ func (res recordBase) Encode() (args map[string][]byte, err error) { return nil, err } + if args["selected"], err = json.Marshal(res.selected); err != nil { + return nil, err + } + if args["invoker"], err = json.Marshal(res.invoker); err != nil { return nil, err } @@ -2398,6 +2487,8 @@ func (res recordBase) EncodeVars() (out *expr.Vars, err error) { return } + // Could not found expression-type counterpart for []interface{} + // Could not found expression-type counterpart for auth.Identifiable _ = v @@ -2440,6 +2531,8 @@ func (res *recordBase) Decode(results map[string][]byte) (err error) { } } + // Do not decode selected; marked as immutable + if res.invoker != nil { if r, ok := results["invoker"]; ok { if err = json.Unmarshal(r, res.invoker); err != nil { @@ -2476,6 +2569,7 @@ func (res *recordBase) DecodeVars(vars *expr.Vars) (err error) { res.recordValueErrors = aux.GetValue() } + // selected marked as immutable // Could not find expression-type counterpart for auth.Identifiable return diff --git a/compose/service/event/events.yaml b/compose/service/event/events.yaml index 6202cea83..418cc5beb 100644 --- a/compose/service/event/events.yaml +++ b/compose/service/event/events.yaml @@ -26,6 +26,9 @@ compose:page: - name: 'namespace' type: '*types.Namespace' immutable: true + - name: 'selected' + type: '[]interface{}' + immutable: true constraints: - name: namespace.handle - name: namespace.name @@ -67,6 +70,9 @@ compose:record: immutable: true - name: 'recordValueErrors' type: '*types.RecordValueErrorSet' + - name: 'selected' + type: '[]interface{}' + immutable: true constraints: - name: namespace.handle diff --git a/compose/service/page.go b/compose/service/page.go index ddf6b6802..1c4ae7788 100644 --- a/compose/service/page.go +++ b/compose/service/page.go @@ -276,7 +276,7 @@ func (svc page) Create(ctx context.Context, new *types.Page) (*types.Page, error aProps.setNamespace(ns) - if err = svc.eventbus.WaitFor(ctx, event.PageBeforeCreate(new, nil, ns)); err != nil { + if err = svc.eventbus.WaitFor(ctx, event.PageBeforeCreate(new, nil, ns, nil)); err != nil { return err } @@ -307,7 +307,7 @@ func (svc page) Create(ctx context.Context, new *types.Page) (*types.Page, error return } - _ = svc.eventbus.WaitFor(ctx, event.PageAfterCreate(new, nil, ns)) + _ = svc.eventbus.WaitFor(ctx, event.PageAfterCreate(new, nil, ns, nil)) return err }) @@ -352,9 +352,9 @@ func (svc page) updater(ctx context.Context, namespaceID, pageID uint64, action aProps.setChanged(p) if p.DeletedAt == nil { - err = svc.eventbus.WaitFor(ctx, event.PageBeforeUpdate(p, old, ns)) + err = svc.eventbus.WaitFor(ctx, event.PageBeforeUpdate(p, old, ns, nil)) } else { - err = svc.eventbus.WaitFor(ctx, event.PageBeforeDelete(p, old, ns)) + err = svc.eventbus.WaitFor(ctx, event.PageBeforeDelete(p, old, ns, nil)) } if err != nil { @@ -388,9 +388,9 @@ func (svc page) updater(ctx context.Context, namespaceID, pageID uint64, action } if p.DeletedAt == nil { - err = svc.eventbus.WaitFor(ctx, event.PageAfterUpdate(p, old, ns)) + err = svc.eventbus.WaitFor(ctx, event.PageAfterUpdate(p, old, ns, nil)) } else { - err = svc.eventbus.WaitFor(ctx, event.PageAfterDelete(nil, old, ns)) + err = svc.eventbus.WaitFor(ctx, event.PageAfterDelete(nil, old, ns, nil)) } return err diff --git a/compose/service/record.go b/compose/service/record.go index b155de4f9..70328faa4 100644 --- a/compose/service/record.go +++ b/compose/service/record.go @@ -504,7 +504,7 @@ func (svc record) create(ctx context.Context, new *types.Record) (rec *types.Rec return nil, RecordErrValueInput().Wrap(rve) } - if err = svc.eventbus.WaitFor(ctx, event.RecordBeforeCreate(new, nil, m, ns, rve)); err != nil { + if err = svc.eventbus.WaitFor(ctx, event.RecordBeforeCreate(new, nil, m, ns, rve, nil)); err != nil { return } else if !rve.IsValid() { return nil, RecordErrValueInput().Wrap(rve) @@ -538,7 +538,7 @@ func (svc record) create(ctx context.Context, new *types.Record) (rec *types.Rec if svc.optEmitEvents { new.Values = svc.formatter.Run(m, new.Values) - _ = svc.eventbus.WaitFor(ctx, event.RecordAfterCreateImmutable(new, nil, m, ns, nil)) + _ = svc.eventbus.WaitFor(ctx, event.RecordAfterCreateImmutable(new, nil, m, ns, nil, nil)) } return @@ -755,7 +755,7 @@ func (svc record) update(ctx context.Context, upd *types.Record) (rec *types.Rec // // rve (record-validation-errorset) struct is passed so it can be // used & filled by automation scripts - if err = svc.eventbus.WaitFor(ctx, event.RecordBeforeUpdate(upd, old, m, ns, rve)); err != nil { + if err = svc.eventbus.WaitFor(ctx, event.RecordBeforeUpdate(upd, old, m, ns, rve, nil)); err != nil { return } else if !rve.IsValid() { return nil, RecordErrValueInput().Wrap(rve) @@ -795,7 +795,7 @@ func (svc record) update(ctx context.Context, upd *types.Record) (rec *types.Rec if svc.optEmitEvents { // Before we pass values to automation scripts, they should be formatted upd.Values = svc.formatter.Run(m, upd.Values) - _ = svc.eventbus.WaitFor(ctx, event.RecordAfterUpdateImmutable(upd, old, m, ns, nil)) + _ = svc.eventbus.WaitFor(ctx, event.RecordAfterUpdateImmutable(upd, old, m, ns, nil, nil)) } return } @@ -955,7 +955,7 @@ func (svc record) delete(ctx context.Context, namespaceID, moduleID, recordID ui if svc.optEmitEvents { // Calling before-record-delete scripts - if err = svc.eventbus.WaitFor(ctx, event.RecordBeforeDelete(nil, del, m, ns, nil)); err != nil { + if err = svc.eventbus.WaitFor(ctx, event.RecordBeforeDelete(nil, del, m, ns, nil, nil)); err != nil { return nil, err } } @@ -975,7 +975,7 @@ func (svc record) delete(ctx context.Context, namespaceID, moduleID, recordID ui del.SetModule(m) if svc.optEmitEvents { - _ = svc.eventbus.WaitFor(ctx, event.RecordAfterDeleteImmutable(nil, del, m, ns, nil)) + _ = svc.eventbus.WaitFor(ctx, event.RecordAfterDeleteImmutable(nil, del, m, ns, nil, nil)) } return del, nil @@ -1223,7 +1223,7 @@ func (svc record) TriggerScript(ctx context.Context, namespaceID, moduleID, reco r.Values = values.Sanitizer().Run(m, rvs) validated := values.Validator().Run(ctx, svc.store, m, r) - err = corredor.Service().Exec(ctx, script, event.RecordOnManual(r, original, m, ns, validated)) + err = corredor.Service().Exec(ctx, script, event.RecordOnManual(r, original, m, ns, validated, nil)) if err != nil { return nil, nil, err } @@ -1316,7 +1316,7 @@ func (svc record) Iterator(ctx context.Context, f types.RecordFilter, fn eventbu } err = func() error { - if err = fn(ctx, event.RecordOnIteration(rec, nil, m, ns, nil)); err != nil { + if err = fn(ctx, event.RecordOnIteration(rec, nil, m, ns, nil, nil)); err != nil { if errors.Is(err, corredor.ScriptExecAborted) { // When script was softly aborted (return false), // proceed with iteration but do not clone, update or delete diff --git a/pkg/expr/expr_types.go b/pkg/expr/expr_types.go index b451ab4c5..c4cbc3e84 100644 --- a/pkg/expr/expr_types.go +++ b/pkg/expr/expr_types.go @@ -196,21 +196,35 @@ func CastToArray(val interface{}) (out []TypedValue, err error) { return val.value, nil } - ref := reflect.ValueOf(val) - if ref.Kind() == reflect.Slice { - out = make([]TypedValue, ref.Len()) - for i := 0; i < ref.Len(); i++ { - item := ref.Index(i).Interface() - out[i], err = Typify(item) - if err != nil { - return + cast := func(val interface{}) (out []TypedValue, err error) { + ref := reflect.ValueOf(val) + if ref.Kind() == reflect.Slice { + out = make([]TypedValue, ref.Len()) + for i := 0; i < ref.Len(); i++ { + item := ref.Index(i).Interface() + out[i], err = Typify(item) + if err != nil { + return + } } } - return } - return nil, fmt.Errorf("unable to cast %T to []TypedValue", val) + if c, ok := val.(TypedValue); ok { + out, err = cast(c.Get()) + } else { + out, err = cast(val) + } + + if err != nil { + return nil, err + } + if val == nil { + return nil, fmt.Errorf("unable to cast %T to []TypedValue", val) + } + + return } var _ TypeValueDecoder = &Array{}