@sap/cds 8.0.3 → 8.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 (44) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/_i18n/i18n_bg.properties +113 -0
  3. package/_i18n/i18n_el.properties +113 -0
  4. package/_i18n/i18n_he.properties +113 -0
  5. package/_i18n/i18n_hr.properties +113 -0
  6. package/_i18n/i18n_kk.properties +113 -0
  7. package/_i18n/i18n_sh.properties +113 -0
  8. package/_i18n/i18n_sk.properties +113 -0
  9. package/_i18n/i18n_sl.properties +113 -0
  10. package/_i18n/i18n_uk.properties +113 -0
  11. package/lib/compile/etc/_localized.js +8 -20
  12. package/lib/dbs/cds-deploy.js +1 -0
  13. package/lib/env/cds-requires.js +1 -0
  14. package/lib/env/defaults.js +1 -1
  15. package/lib/env/plugins.js +22 -6
  16. package/lib/linked/validate.js +1 -1
  17. package/lib/log/cds-log.js +2 -2
  18. package/lib/srv/protocols/hcql.js +5 -5
  19. package/lib/srv/protocols/http.js +23 -11
  20. package/lib/test/expect.js +1 -1
  21. package/lib/utils/cds-test.js +4 -4
  22. package/libx/_runtime/common/composition/insert.js +1 -1
  23. package/libx/_runtime/common/error/utils.js +2 -1
  24. package/libx/_runtime/common/generic/input.js +2 -5
  25. package/libx/_runtime/common/generic/stream.js +18 -3
  26. package/libx/_runtime/common/utils/cqn2cqn4sql.js +5 -2
  27. package/libx/_runtime/db/query/read.js +18 -9
  28. package/libx/_runtime/fiori/lean-draft.js +2 -2
  29. package/libx/_runtime/hana/customBuilder/CustomReferenceBuilder.js +1 -1
  30. package/libx/_runtime/messaging/enterprise-messaging-utils/registerEndpoints.js +2 -2
  31. package/libx/_runtime/messaging/event-broker.js +76 -24
  32. package/libx/common/assert/utils.js +1 -57
  33. package/libx/odata/middleware/batch.js +86 -40
  34. package/libx/odata/middleware/body-parser.js +2 -3
  35. package/libx/odata/middleware/operation.js +11 -11
  36. package/libx/odata/middleware/read.js +1 -1
  37. package/libx/odata/parse/grammar.peggy +6 -1
  38. package/libx/odata/parse/parser.js +1 -1
  39. package/libx/odata/utils/metadata.js +18 -44
  40. package/libx/rest/middleware/error.js +9 -2
  41. package/libx/rest/middleware/parse.js +1 -1
  42. package/package.json +1 -1
  43. package/libx/common/assert/index.js +0 -228
  44. package/libx/common/assert/type-relaxed.js +0 -39
@@ -0,0 +1,113 @@
1
+ #Text Types
2
+ #
3
+ #XACT: Text with explicit importance for accessibility.
4
+ #XBUT: Button
5
+ #XCKL: Checkbox
6
+ #XFLD: Field label
7
+ #XLNK: Hyperlink
8
+ #XMIT: Menu item (Menu item, either top-level like "File" or lower-level like "Save as...")
9
+ #XMSG: Message
10
+ #XRBL: Radio button
11
+ #XSEL: Selection (Values in a drop-down list, or a status. For example: "In Process", "Shipped" or "Open".)
12
+ #XTIT: Title (or heading) of a non-actionable user interface element like a column, wizard, or screen area.
13
+ #XTOL: Explanatory text for an UI element, such as a tooltip, input help.
14
+ #YINS: Instruction for a user, for example, a permanent text on a screen that introduces a group of fields.
15
+ #----------------------------------------------------------------------------------------------------------------------
16
+ #For text elements that are not supposed to be translated, use the text type NOTR
17
+ #----------------------------------------------------------------------------------------------------------------------
18
+ #Recommended pattern
19
+ #
20
+ #<TextType>:<AdditionalContextInformation>
21
+ #If there is a maximum length restriction, please indicate as shown below.
22
+ #<TextType>,<MaximumLength>:<AdditionalContextInformation>
23
+ #----------------------------------------------------------------------------------------------------------------------
24
+ # This is the resource bundle for foundation
25
+ # __ldi.translation.uuid=dd6c5800-b108-11e8-be90-bd1cf6ac87fb
26
+ #----------------------------------------------------------------------------------------------------------------------
27
+
28
+ #XTIT: Created By (Answer to: "Which user has created a certain entity?")
29
+ CreatedBy=Kreirao
30
+
31
+ #XTIT: Created On (Answer to: "When has a certain entity been created?")
32
+ CreatedAt=Kreirano
33
+
34
+ #XTIT: Changed By (Answer to: "Which user has changed a certain entity?")
35
+ ChangedBy=Promenio
36
+
37
+ #XTIT: Changed On (Answer to: "When has a certain entity been changed?")
38
+ ChangedAt=Promenjeno
39
+
40
+ #XTIT: Currency
41
+ Currency=Valuta
42
+
43
+ #XTIT: Currency Code
44
+ CurrencyCode=\u0160ifra valute
45
+
46
+ #XTIT: Currency Code Description
47
+ CurrencyCode.Description=\u0160ifra valute odre\u0111ena prema ISO 4217
48
+
49
+ #XTIT: Currency Symbol
50
+ CurrencySymbol=Simbol valute
51
+
52
+ #XTIT: Currency Minor Unit Fractions (Answer to: "How many fractions has a currency's minor unit?", e.g. "0" or "2")
53
+ CurrencyMinorUnit=Manja jedinica valute
54
+
55
+ #XTIT: Country/Region
56
+ Country=Zemlja/regija
57
+
58
+ #XTIT: Country/Region Code
59
+ CountryCode=\u0160ifra zemlje/regije
60
+
61
+ #XTIT: Country/Region Code Description
62
+ CountryCode.Description=\u0160ifra zemlje/regije odre\u0111ena prema ISO 3166-1
63
+
64
+ #XTIT: Language
65
+ Language=Jezik
66
+
67
+ #XTIT: Language Code
68
+ LanguageCode=\u0160ifra jezika
69
+
70
+ #XTIT: Language Code Description
71
+ LanguageCode.Description=\u0160ifra jezika odre\u0111ena prema ISO 639-1
72
+
73
+ #XTIT Time zone code
74
+ TimeZoneCode=\u0160ifra vremenske zone
75
+
76
+ #XTIT: User Identifier
77
+ UserID=ID korisnika
78
+
79
+ #XTIT: Any kind of name
80
+ Name=Ime
81
+
82
+ #XTIT: Any kind of description
83
+ Description=Opis
84
+
85
+ #XTOL: A user's unique Indentifier
86
+ UserID.Description=Jedinstveni ID korisnika
87
+
88
+ #XTIT: Admin data for a draft document
89
+ Draft_DraftAdministrativeData=Nacrt administrativnih podataka
90
+
91
+ #XTIT: Technical ID of a draft document
92
+ Draft_DraftUUID=Nacrt (tehni\u010Dki ID)
93
+
94
+ #XTIT: Creation time of a draft
95
+ Draft_CreationDateTime=Nacrt kreiran
96
+
97
+ #XTIT: User created the draft
98
+ Draft_CreatedByUser=Nacrt kreirao
99
+
100
+ #XTIT: The current user (me) created the draft
101
+ Draft_DraftIsCreatedByMe=Nacrt \u010Diji sam autor
102
+
103
+ #XTIT: Time a draft was last changed on
104
+ Draft_LastChangeDateTime=Nacrt poslednji put promenjen
105
+
106
+ #XTIT: User that changed the draft last
107
+ Draft_LastChangedByUser=Nacrt poslednji put promenio
108
+
109
+ #XTIT: User that is working on the draft
110
+ Draft_InProcessByUser=Nacrt koji obra\u0111uje
111
+
112
+ #XTIT: The current user (me) is working on the draft
113
+ Draft_DraftIsProcessedByMe=Nacrt koji obra\u0111ujem
@@ -0,0 +1,113 @@
1
+ #Text Types
2
+ #
3
+ #XACT: Text with explicit importance for accessibility.
4
+ #XBUT: Button
5
+ #XCKL: Checkbox
6
+ #XFLD: Field label
7
+ #XLNK: Hyperlink
8
+ #XMIT: Menu item (Menu item, either top-level like "File" or lower-level like "Save as...")
9
+ #XMSG: Message
10
+ #XRBL: Radio button
11
+ #XSEL: Selection (Values in a drop-down list, or a status. For example: "In Process", "Shipped" or "Open".)
12
+ #XTIT: Title (or heading) of a non-actionable user interface element like a column, wizard, or screen area.
13
+ #XTOL: Explanatory text for an UI element, such as a tooltip, input help.
14
+ #YINS: Instruction for a user, for example, a permanent text on a screen that introduces a group of fields.
15
+ #----------------------------------------------------------------------------------------------------------------------
16
+ #For text elements that are not supposed to be translated, use the text type NOTR
17
+ #----------------------------------------------------------------------------------------------------------------------
18
+ #Recommended pattern
19
+ #
20
+ #<TextType>:<AdditionalContextInformation>
21
+ #If there is a maximum length restriction, please indicate as shown below.
22
+ #<TextType>,<MaximumLength>:<AdditionalContextInformation>
23
+ #----------------------------------------------------------------------------------------------------------------------
24
+ # This is the resource bundle for foundation
25
+ # __ldi.translation.uuid=dd6c5800-b108-11e8-be90-bd1cf6ac87fb
26
+ #----------------------------------------------------------------------------------------------------------------------
27
+
28
+ #XTIT: Created By (Answer to: "Which user has created a certain entity?")
29
+ CreatedBy=Vytvoril
30
+
31
+ #XTIT: Created On (Answer to: "When has a certain entity been created?")
32
+ CreatedAt=Vytvoren\u00E9 d\u0148a
33
+
34
+ #XTIT: Changed By (Answer to: "Which user has changed a certain entity?")
35
+ ChangedBy=Zmenil
36
+
37
+ #XTIT: Changed On (Answer to: "When has a certain entity been changed?")
38
+ ChangedAt=Zmenen\u00E9 d\u0148a
39
+
40
+ #XTIT: Currency
41
+ Currency=Mena
42
+
43
+ #XTIT: Currency Code
44
+ CurrencyCode=K\u00F3d meny
45
+
46
+ #XTIT: Currency Code Description
47
+ CurrencyCode.Description=K\u00F3d meny pod\u013Ea normy ISO 4217
48
+
49
+ #XTIT: Currency Symbol
50
+ CurrencySymbol=Symbol meny
51
+
52
+ #XTIT: Currency Minor Unit Fractions (Answer to: "How many fractions has a currency's minor unit?", e.g. "0" or "2")
53
+ CurrencyMinorUnit=Menov\u00E9 men\u0161ie jednotkov\u00E9 zlomky
54
+
55
+ #XTIT: Country/Region
56
+ Country=\u0160t\u00E1t/regi\u00F3n
57
+
58
+ #XTIT: Country/Region Code
59
+ CountryCode=K\u00F3d \u0161t\u00E1tu/regi\u00F3nu
60
+
61
+ #XTIT: Country/Region Code Description
62
+ CountryCode.Description=K\u00F3d \u0161t\u00E1tu/regi\u00F3nu pod\u013Ea normy ISO 3166-1
63
+
64
+ #XTIT: Language
65
+ Language=Jazyk
66
+
67
+ #XTIT: Language Code
68
+ LanguageCode=K\u00F3d jazyka
69
+
70
+ #XTIT: Language Code Description
71
+ LanguageCode.Description=K\u00F3d jazyka pod\u013Ea normy ISO 639-1
72
+
73
+ #XTIT Time zone code
74
+ TimeZoneCode=K\u00F3d \u010Dasov\u00E9ho p\u00E1sma
75
+
76
+ #XTIT: User Identifier
77
+ UserID=ID pou\u017E\u00EDvate\u013Ea
78
+
79
+ #XTIT: Any kind of name
80
+ Name=N\u00E1zov
81
+
82
+ #XTIT: Any kind of description
83
+ Description=Popis
84
+
85
+ #XTOL: A user's unique Indentifier
86
+ UserID.Description=Jedine\u010Dn\u00E9 ID pou\u017E\u00EDvate\u013Ea
87
+
88
+ #XTIT: Admin data for a draft document
89
+ Draft_DraftAdministrativeData=N\u00E1vrh administrat\u00EDvnych \u00FAdajov
90
+
91
+ #XTIT: Technical ID of a draft document
92
+ Draft_DraftUUID=N\u00E1vrh (technick\u00E9 ID)
93
+
94
+ #XTIT: Creation time of a draft
95
+ Draft_CreationDateTime=N\u00E1vrh vytvoren\u00FD d\u0148a
96
+
97
+ #XTIT: User created the draft
98
+ Draft_CreatedByUser=N\u00E1vrh vytvoril
99
+
100
+ #XTIT: The current user (me) created the draft
101
+ Draft_DraftIsCreatedByMe=N\u00E1vrh vytvoril mnou
102
+
103
+ #XTIT: Time a draft was last changed on
104
+ Draft_LastChangeDateTime=N\u00E1vrh naposledy zmenen\u00FD d\u0148a
105
+
106
+ #XTIT: User that changed the draft last
107
+ Draft_LastChangedByUser=N\u00E1vrh naposledy zmenil
108
+
109
+ #XTIT: User that is working on the draft
110
+ Draft_InProcessByUser=N\u00E1vrh v spracovan\u00ED od (meno)
111
+
112
+ #XTIT: The current user (me) is working on the draft
113
+ Draft_DraftIsProcessedByMe=N\u00E1vrh v spracovan\u00ED od (ja)
@@ -0,0 +1,113 @@
1
+ #Text Types
2
+ #
3
+ #XACT: Text with explicit importance for accessibility.
4
+ #XBUT: Button
5
+ #XCKL: Checkbox
6
+ #XFLD: Field label
7
+ #XLNK: Hyperlink
8
+ #XMIT: Menu item (Menu item, either top-level like "File" or lower-level like "Save as...")
9
+ #XMSG: Message
10
+ #XRBL: Radio button
11
+ #XSEL: Selection (Values in a drop-down list, or a status. For example: "In Process", "Shipped" or "Open".)
12
+ #XTIT: Title (or heading) of a non-actionable user interface element like a column, wizard, or screen area.
13
+ #XTOL: Explanatory text for an UI element, such as a tooltip, input help.
14
+ #YINS: Instruction for a user, for example, a permanent text on a screen that introduces a group of fields.
15
+ #----------------------------------------------------------------------------------------------------------------------
16
+ #For text elements that are not supposed to be translated, use the text type NOTR
17
+ #----------------------------------------------------------------------------------------------------------------------
18
+ #Recommended pattern
19
+ #
20
+ #<TextType>:<AdditionalContextInformation>
21
+ #If there is a maximum length restriction, please indicate as shown below.
22
+ #<TextType>,<MaximumLength>:<AdditionalContextInformation>
23
+ #----------------------------------------------------------------------------------------------------------------------
24
+ # This is the resource bundle for foundation
25
+ # __ldi.translation.uuid=dd6c5800-b108-11e8-be90-bd1cf6ac87fb
26
+ #----------------------------------------------------------------------------------------------------------------------
27
+
28
+ #XTIT: Created By (Answer to: "Which user has created a certain entity?")
29
+ CreatedBy=Kreiral
30
+
31
+ #XTIT: Created On (Answer to: "When has a certain entity been created?")
32
+ CreatedAt=Kreirano dne
33
+
34
+ #XTIT: Changed By (Answer to: "Which user has changed a certain entity?")
35
+ ChangedBy=Spremenil
36
+
37
+ #XTIT: Changed On (Answer to: "When has a certain entity been changed?")
38
+ ChangedAt=Spremenjeno dne
39
+
40
+ #XTIT: Currency
41
+ Currency=Valuta
42
+
43
+ #XTIT: Currency Code
44
+ CurrencyCode=Koda valute
45
+
46
+ #XTIT: Currency Code Description
47
+ CurrencyCode.Description=Koda valute, kot jo dolo\u010Da ISO 4217
48
+
49
+ #XTIT: Currency Symbol
50
+ CurrencySymbol=Simbol valute
51
+
52
+ #XTIT: Currency Minor Unit Fractions (Answer to: "How many fractions has a currency's minor unit?", e.g. "0" or "2")
53
+ CurrencyMinorUnit=Deli manj\u0161e enote valute
54
+
55
+ #XTIT: Country/Region
56
+ Country=Dr\u017Eava/regija
57
+
58
+ #XTIT: Country/Region Code
59
+ CountryCode=Koda dr\u017Eave/regije
60
+
61
+ #XTIT: Country/Region Code Description
62
+ CountryCode.Description=Koda dr\u017Eave/regije, kot jo dolo\u010Da ISO 3166-1
63
+
64
+ #XTIT: Language
65
+ Language=Jezik
66
+
67
+ #XTIT: Language Code
68
+ LanguageCode=Koda jezika
69
+
70
+ #XTIT: Language Code Description
71
+ LanguageCode.Description=Koda jezika, kot jo dolo\u010Da ISO 639-1
72
+
73
+ #XTIT Time zone code
74
+ TimeZoneCode=Koda \u010Dasovnega pasa
75
+
76
+ #XTIT: User Identifier
77
+ UserID=ID uporabnika
78
+
79
+ #XTIT: Any kind of name
80
+ Name=Ime
81
+
82
+ #XTIT: Any kind of description
83
+ Description=Opis
84
+
85
+ #XTOL: A user's unique Indentifier
86
+ UserID.Description=Enozna\u010Dni ID uporabnika
87
+
88
+ #XTIT: Admin data for a draft document
89
+ Draft_DraftAdministrativeData=Osnutek administrativnih podatkov
90
+
91
+ #XTIT: Technical ID of a draft document
92
+ Draft_DraftUUID=Osnutek (tehni\u010Dni ID)
93
+
94
+ #XTIT: Creation time of a draft
95
+ Draft_CreationDateTime=Osnutek, ki je bil kreiran dne
96
+
97
+ #XTIT: User created the draft
98
+ Draft_CreatedByUser=Osnutek, ki ga je kreiral
99
+
100
+ #XTIT: The current user (me) created the draft
101
+ Draft_DraftIsCreatedByMe=Osnutek, ki sem ga kreiral jaz
102
+
103
+ #XTIT: Time a draft was last changed on
104
+ Draft_LastChangeDateTime=Osnutek, ki je bil nazadnje spremenjen dne
105
+
106
+ #XTIT: User that changed the draft last
107
+ Draft_LastChangedByUser=Osnutek, ki ga je nazadnje spremenil
108
+
109
+ #XTIT: User that is working on the draft
110
+ Draft_InProcessByUser=Osnutek obdeluje
111
+
112
+ #XTIT: The current user (me) is working on the draft
113
+ Draft_DraftIsProcessedByMe=Osnutek, ki ga obdelujem
@@ -0,0 +1,113 @@
1
+ #Text Types
2
+ #
3
+ #XACT: Text with explicit importance for accessibility.
4
+ #XBUT: Button
5
+ #XCKL: Checkbox
6
+ #XFLD: Field label
7
+ #XLNK: Hyperlink
8
+ #XMIT: Menu item (Menu item, either top-level like "File" or lower-level like "Save as...")
9
+ #XMSG: Message
10
+ #XRBL: Radio button
11
+ #XSEL: Selection (Values in a drop-down list, or a status. For example: "In Process", "Shipped" or "Open".)
12
+ #XTIT: Title (or heading) of a non-actionable user interface element like a column, wizard, or screen area.
13
+ #XTOL: Explanatory text for an UI element, such as a tooltip, input help.
14
+ #YINS: Instruction for a user, for example, a permanent text on a screen that introduces a group of fields.
15
+ #----------------------------------------------------------------------------------------------------------------------
16
+ #For text elements that are not supposed to be translated, use the text type NOTR
17
+ #----------------------------------------------------------------------------------------------------------------------
18
+ #Recommended pattern
19
+ #
20
+ #<TextType>:<AdditionalContextInformation>
21
+ #If there is a maximum length restriction, please indicate as shown below.
22
+ #<TextType>,<MaximumLength>:<AdditionalContextInformation>
23
+ #----------------------------------------------------------------------------------------------------------------------
24
+ # This is the resource bundle for foundation
25
+ # __ldi.translation.uuid=dd6c5800-b108-11e8-be90-bd1cf6ac87fb
26
+ #----------------------------------------------------------------------------------------------------------------------
27
+
28
+ #XTIT: Created By (Answer to: "Which user has created a certain entity?")
29
+ CreatedBy=\u0410\u0432\u0442\u043E\u0440 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F
30
+
31
+ #XTIT: Created On (Answer to: "When has a certain entity been created?")
32
+ CreatedAt=\u0414\u0430\u0442\u0430 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F
33
+
34
+ #XTIT: Changed By (Answer to: "Which user has changed a certain entity?")
35
+ ChangedBy=\u0410\u0432\u0442\u043E\u0440 \u0437\u043C\u0456\u043D\u0438
36
+
37
+ #XTIT: Changed On (Answer to: "When has a certain entity been changed?")
38
+ ChangedAt=\u0414\u0430\u0442\u0430 \u0437\u043C\u0456\u043D\u0435\u043D\u043D\u044F
39
+
40
+ #XTIT: Currency
41
+ Currency=\u0412\u0430\u043B\u044E\u0442\u0430
42
+
43
+ #XTIT: Currency Code
44
+ CurrencyCode=\u041A\u043E\u0434 \u0432\u0430\u043B\u044E\u0442\u0438
45
+
46
+ #XTIT: Currency Code Description
47
+ CurrencyCode.Description=\u041A\u043E\u0434 \u0432\u0430\u043B\u044E\u0442\u0438, \u044F\u043A \u0432\u043A\u0430\u0437\u0430\u043D\u043E \u0432 ISO 4217
48
+
49
+ #XTIT: Currency Symbol
50
+ CurrencySymbol=\u0421\u0438\u043C\u0432\u043E\u043B \u0432\u0430\u043B\u044E\u0442\u0438
51
+
52
+ #XTIT: Currency Minor Unit Fractions (Answer to: "How many fractions has a currency's minor unit?", e.g. "0" or "2")
53
+ CurrencyMinorUnit=\u041C\u0435\u043D\u0448\u0456 \u0447\u0430\u0441\u0442\u043A\u0438 \u043E\u0434\u0438\u043D\u0438\u0446\u0456 \u0432\u0430\u043B\u044E\u0442\u0438
54
+
55
+ #XTIT: Country/Region
56
+ Country=\u041A\u0440\u0430\u0457\u043D\u0430/\u0440\u0435\u0433\u0456\u043E\u043D
57
+
58
+ #XTIT: Country/Region Code
59
+ CountryCode=\u041A\u043E\u0434 \u043A\u0440\u0430\u0457\u043D\u0438/\u0440\u0435\u0433\u0456\u043E\u043D\u0443
60
+
61
+ #XTIT: Country/Region Code Description
62
+ CountryCode.Description=\u041A\u043E\u0434 \u043A\u0440\u0430\u0457\u043D\u0438/\u0440\u0435\u0433\u0456\u043E\u043D\u0443, \u044F\u043A \u0432\u043A\u0430\u0437\u0430\u043D\u043E \u0432 ISO 3166-1
63
+
64
+ #XTIT: Language
65
+ Language=\u041C\u043E\u0432\u0430
66
+
67
+ #XTIT: Language Code
68
+ LanguageCode=\u041A\u043E\u0434 \u043C\u043E\u0432\u0438
69
+
70
+ #XTIT: Language Code Description
71
+ LanguageCode.Description=\u041A\u043E\u0434 \u043C\u043E\u0432\u0438, \u044F\u043A \u0432\u043A\u0430\u0437\u0430\u043D\u043E \u0432 ISO 639-1
72
+
73
+ #XTIT Time zone code
74
+ TimeZoneCode=\u041A\u043E\u0434 \u0447\u0430\u0441\u043E\u0432\u043E\u0433\u043E \u043F\u043E\u044F\u0441\u0443
75
+
76
+ #XTIT: User Identifier
77
+ UserID=\u0406\u0414 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430
78
+
79
+ #XTIT: Any kind of name
80
+ Name=\u0406\u043C\u2019\u044F
81
+
82
+ #XTIT: Any kind of description
83
+ Description=\u041E\u043F\u0438\u0441
84
+
85
+ #XTOL: A user's unique Indentifier
86
+ UserID.Description=\u0423\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u0406\u0414 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430
87
+
88
+ #XTIT: Admin data for a draft document
89
+ Draft_DraftAdministrativeData=\u0410\u0434\u043C\u0456\u043D\u0456\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043D\u0456 \u0434\u0430\u043D\u0456 \u0447\u0435\u0440\u043D\u0435\u0442\u043A\u0438
90
+
91
+ #XTIT: Technical ID of a draft document
92
+ Draft_DraftUUID=\u0427\u0435\u0440\u043D\u0435\u0442\u043A\u0430 (\u0442\u0435\u0445\u043D\u0456\u0447\u043D\u0438\u0439 \u0406\u0414)
93
+
94
+ #XTIT: Creation time of a draft
95
+ Draft_CreationDateTime=\u0414\u0430\u0442\u0430 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u0447\u0435\u0440\u043D\u0435\u0442\u043A\u0438
96
+
97
+ #XTIT: User created the draft
98
+ Draft_CreatedByUser=\u0410\u0432\u0442\u043E\u0440 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u0447\u0435\u0440\u043D\u0435\u0442\u043A\u0438
99
+
100
+ #XTIT: The current user (me) created the draft
101
+ Draft_DraftIsCreatedByMe=\u0427\u0435\u0440\u043D\u0435\u0442\u043A\u0430, \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u0430 \u043C\u043D\u043E\u044E
102
+
103
+ #XTIT: Time a draft was last changed on
104
+ Draft_LastChangeDateTime=\u0414\u0430\u0442\u0430 \u043E\u0441\u0442\u0430\u043D\u043D\u044C\u043E\u0457 \u0437\u043C\u0456\u043D\u0438 \u0447\u0435\u0440\u043D\u0435\u0442\u043A\u0438
105
+
106
+ #XTIT: User that changed the draft last
107
+ Draft_LastChangedByUser=\u0410\u0432\u0442\u043E\u0440 \u043E\u0441\u0442\u0430\u043D\u043D\u044C\u043E\u0457 \u0437\u043C\u0456\u043D\u0438 \u0447\u0435\u0440\u043D\u0435\u0442\u043A\u0438
108
+
109
+ #XTIT: User that is working on the draft
110
+ Draft_InProcessByUser=\u041F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u0430\u0432\u0442\u043E\u0440 \u043E\u0431\u0440\u043E\u0431\u043A\u0438 \u0447\u0435\u0440\u043D\u0435\u0442\u043A\u0438
111
+
112
+ #XTIT: The current user (me) is working on the draft
113
+ Draft_DraftIsProcessedByMe=\u0427\u0435\u0440\u043D\u0435\u0442\u043A\u0430, \u044F\u043A\u0443 \u043D\u0430\u0440\u0430\u0437\u0456 \u043E\u0431\u0440\u043E\u0431\u043B\u044F\u044E \u044F
@@ -1,11 +1,10 @@
1
1
  const cds = require('../..'), {env} = cds
2
2
  const DEBUG = cds.debug('alpha|_localized')
3
+ const _legacy_sqlite = cds.env.requires.kinds['legacy-sqlite'].impl
3
4
  const _locales_4sql = {
4
5
  sqlite : env.i18n.for_sqlite || env.i18n.for_sql || [],
5
6
  plain : env.i18n.for_sql || [],
6
7
  }
7
-
8
- const { _localized_entries } = env.cdsc.cv2 || {}
9
8
  const _been_here = Symbol('is _localized')
10
9
 
11
10
 
@@ -15,13 +14,11 @@ const _been_here = Symbol('is _localized')
15
14
  * compiler, create additional views localized_<locale>_<views>
16
15
  */
17
16
  function unfold_ddl (ddl, csn, o={}) { // NOSONAR
18
- if (o.betterSqliteSessionVariables) return ddl
19
- if (o.fewerLocalizedViews) return ddl
20
- const _locales = _locales_4sql[o.dialect]; if (!_locales) return ddl
17
+ const db = env.requires.db || env.requires.kinds.sql
18
+ const locales = db.impl === _legacy_sqlite && _locales_4sql[o.dialect]; if (!locales) return ddl
21
19
  const localized_views = ddl.filter (each => each.startsWith('CREATE VIEW localized_') || each.startsWith('DROP VIEW localized_'))
22
- // REVISIT: analyze ddl statements. Problem is with schevo calling this function containing only drops
23
20
  for (const localized_view of localized_views) {
24
- for (const locale of _locales) ddl.push (localized_view
21
+ for (const locale of locales) ddl.push (localized_view
25
22
  .replace (/localized_/g, `localized_${locale}_`)
26
23
  .replace (/\.locale = 'en'/g, `.locale = '${locale}'`)
27
24
  )
@@ -45,25 +42,17 @@ function unfold_csn (m) { // NOSONAR
45
42
  DEBUG && DEBUG ('unfolding csn...')
46
43
  const pass2 = []
47
44
 
48
- // REVISIT: Fixing $localized obtained from compiler when fewerLocalizedViews is set
49
- const o = cds.compiler._options.for.sql()
50
- if (o.fewerLocalizedViews) for (let each in m.definitions) {
51
- const d = m.definitions [each]
52
- if (d.$localized && d.elements && !d.elements.localized) delete d.$localized
53
- }
54
-
55
- const _conf = env.requires.db || env.requires.sql || env.requires.kinds.sql
56
- const _on_sqlite = _conf.kind === 'sqlite' || _conf.dialect === 'sqlite'
57
- const _locales = !o.fewerLocalizedViews && !o.betterSqliteSessionVariables && _on_sqlite && _locales_4sql.sqlite
45
+ const db = env.requires.db || env.requires.kinds.sql
46
+ const locales = db.impl === _legacy_sqlite && _locales_4sql.sqlite
58
47
 
59
48
  // Pass 1 - add localized.<locale> entities and views
60
49
  for (const each in cds.linked(m).definitions) {
61
50
  const d = m.definitions [each]
62
51
  // Add localized.<entry> for all entities having localized views in db
63
- if (_localized_entries !== false && _is_localized(d)) {
52
+ if (_is_localized(d)) {
64
53
  _add_proxy4 (d,`localized.${each}`, x => pass2.push([x]))
65
54
  // if running on sqlite add additional localized.<locale>. views
66
- if (_locales) for (const locale of _locales) {
55
+ if (locales) for (const locale of locales) {
67
56
  _add_proxy4 (d,`localized.${locale}.${each}`, x => pass2.push([x,locale]))
68
57
  }
69
58
  }
@@ -104,4 +93,3 @@ const _is_localized = d => d.own('$localized') // as set by compiler in compile.
104
93
 
105
94
  // feature-toggled exports
106
95
  module.exports = { unfold_csn, unfold_ddl }
107
- if (!env.features.localized) Object.assign (module.exports, { unfold_csn: x=>x, unfold_ddl: x=>x })
@@ -400,6 +400,7 @@ if (!module.parent) (async function CLI () {
400
400
  if (o.username) (db.credentials ??= {}).username = o.username
401
401
  if (o.password) (db.credentials ??= {}).password = o.password
402
402
  }
403
+ db = await cds.connect.to(db);
403
404
  db = await cds.deploy('*',o).to(db)
404
405
  } finally {
405
406
  await db?.disconnect?.()
@@ -233,6 +233,7 @@ const _messaging = {
233
233
  },
234
234
  "event-broker": {
235
235
  impl: `${_runtime}/messaging/event-broker.js`,
236
+ format: 'cloudevents',
236
237
  vcap: {
237
238
  label: "eventmesh-sap2sap-internal"
238
239
  }
@@ -40,6 +40,7 @@ const defaults = module.exports = {
40
40
 
41
41
  server: {
42
42
  force_exit_timeout: 1111,
43
+ body_parser: undefined, // Allows to configure all body parser options, e.g. limit
43
44
  cors: !production, // CORS middleware is off in production
44
45
  index: !production, // index page is off in production
45
46
  port: 4004,
@@ -68,7 +69,6 @@ const defaults = module.exports = {
68
69
  // skip_unused: 'all',
69
70
  skip_unused: true,
70
71
  deploy_data_onconflict: 'insert',
71
- localized: true,
72
72
  assert_integrity: false,
73
73
  precise_timestamps: false,
74
74
  ieee754compatible: undefined,
@@ -1,18 +1,34 @@
1
1
  // REVISIT: we should have a real modular plugin technique for cds.env
2
2
  module.exports = function add_mtx_env (env) {
3
3
 
4
- const mtx_env = require('@sap/cds-mtxs/env')
4
+ if (cds_load_mismatch()) return env
5
+
6
+ const mtx_env = _require('@sap/cds-mtxs/env')
5
7
  if (mtx_env) {
6
8
  const {requires} = env, {kinds} = requires
7
9
  Object.assign (env, mtx_env, {requires})
8
10
  Object.assign (requires, mtx_env.requires, {kinds})
9
11
  Object.assign (kinds, mtx_env.requires?.kinds)
10
12
  }
13
+ return env
14
+ }
11
15
 
12
- function require (id) {
13
- try { return module.require(id) }
14
- catch(e) { if (e.code !== 'MODULE_NOT_FOUND') throw e }
15
- }
16
+ function _require (id) {
17
+ try { return module.require(id) }
18
+ catch(e) { if (e.code !== 'MODULE_NOT_FOUND') throw e }
19
+ }
16
20
 
17
- return env
21
+ // Anticipates if loading mtxs would load a _different_ @sap/cds than this one, which we must avoid.
22
+ // May happen in PNPM setups that add all global installs to NODE_PATH. Seen in BAS.
23
+ function cds_load_mismatch() {
24
+ const cds = require('..')
25
+ try {
26
+ const mtxs = require.resolve('@sap/cds-mtxs')
27
+ const cds2 = require.resolve('@sap/cds/package.json', { paths:[mtxs] })
28
+ const csd2Home = cds.utils.path.resolve(cds2, '..')
29
+ if (csd2Home !== cds.home) {
30
+ return true
31
+ }
32
+ // console.log('home', cds.home, 'other', otherCdsHome)
33
+ } catch(e) { if (e.code !== 'MODULE_NOT_FOUND') throw e }
18
34
  }
@@ -204,7 +204,7 @@ class entity extends struct {
204
204
  /** Actions are struct-like, with their parameters as elements to validate. */
205
205
  class action extends struct {
206
206
  validate (data, path, ctx) {
207
- if (this.params) super.validate (data, path, ctx, this.params)
207
+ super.validate (data, path, ctx, this.params || {})
208
208
  }
209
209
  }
210
210
 
@@ -45,11 +45,11 @@ exports.loggers = {}
45
45
  function cds_log (module, options) { // NOSONAR
46
46
  const id = module?.match(/^[^|]+/)[0] || 'cds', cache = log.loggers
47
47
  const cached = cache[id]
48
- if (cached && !options) return cached
48
+ if (cached && options == undefined) return cached // Note: SILENT = 0, so falsy check on option would be wrong
49
49
 
50
50
  let label = options?.label || options?.prefix || cached?.label || id
51
51
  let level = typeof options === 'object' ? options.level : options
52
- if (!level) level = DEBUG_matches(module) ? DEBUG : conf.levels[id] || INFO
52
+ if (level == undefined) level = DEBUG_matches(module) ? DEBUG : conf.levels[id] || INFO
53
53
  if (typeof level === 'string') level = log.levels [level.toUpperCase()]
54
54
  if (cached && cached.level === level) return cached
55
55
 
@@ -1,6 +1,6 @@
1
1
  const express = require('express')
2
2
  const cds = require('../../index')
3
- const LOG = cds.log('hcql')
3
+ const DEBUG = cds.debug('hcql')
4
4
  const { inspect } = require('util')
5
5
 
6
6
  class HCQLAdapter extends require('./http') {
@@ -14,8 +14,8 @@ class HCQLAdapter extends require('./http') {
14
14
  */
15
15
  .get('/\\$csn', (_, res) => res.json(this.schema))
16
16
 
17
- .use(express.json()) //> for application/json -> cqn
18
- .use(express.text()) //> for text/plain -> cql -> cqn
17
+ .use(express.json(this.body_parser_options)) //> for application/json -> cqn
18
+ .use(express.text(this.body_parser_options)) //> for text/plain -> cql -> cqn
19
19
 
20
20
  /**
21
21
  * Convenience route for REST-style request formats like that:
@@ -36,7 +36,7 @@ class HCQLAdapter extends require('./http') {
36
36
  */
37
37
  .use((req, res, next) => {
38
38
  let q = this.query4(req)
39
- LOG._info && LOG.info(req.method, decodeURIComponent(req.originalUrl), inspect(q, { colors: true, depth: 11 }))
39
+ DEBUG?.(inspect(q,{depth:11,colors:true}))
40
40
  return srv.run(q).then(r => res.json(r)).catch(next)
41
41
  })
42
42
  }
@@ -46,7 +46,7 @@ class HCQLAdapter extends require('./http') {
46
46
  }
47
47
 
48
48
  query4 (req) {
49
- if (typeof req.body === 'string') return cds.parse.cql(req.body)
49
+ if (typeof req.body === 'string') return req.body = cds.parse.cql(req.body)
50
50
  return req.body //> a plain CQN object
51
51
  }
52
52
  }