@sap/cds-dk 6.0.2 → 6.1.1

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 (105) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/bin/add.js +29 -16
  3. package/bin/cds.js +7 -3
  4. package/bin/compile/index.js +6 -1
  5. package/bin/deploy/index.js +7 -1
  6. package/bin/fix-redirects.js +4 -2
  7. package/bin/init.js +5 -0
  8. package/bin/login.js +8 -2
  9. package/bin/pull.js +58 -0
  10. package/bin/push.js +52 -0
  11. package/bin/subscribe.js +45 -0
  12. package/lib/bind/bindingResolver.js +1 -2
  13. package/lib/bind/bindingUtil.js +1 -2
  14. package/lib/bind/cfKeyProvider.js +3 -3
  15. package/lib/client/activate.js +1 -1
  16. package/lib/client/auth_manager.js +7 -3
  17. package/lib/client/extend.js +1 -1
  18. package/lib/client/helper/cf_helper.js +1 -0
  19. package/lib/client/helper/url_helper.js +7 -3
  20. package/lib/client/index.js +1 -1
  21. package/lib/client/params.js +4 -2
  22. package/lib/client/pull.js +51 -0
  23. package/lib/client/push.js +49 -0
  24. package/lib/client/settings_manager.js +74 -21
  25. package/lib/compile/openapi/csdl2openapi.js +135 -163
  26. package/lib/compile/openapi/index.js +0 -1
  27. package/lib/import/common.js +9 -1
  28. package/lib/import/odata/metadataconverter/MetadataConverter.js +17 -4
  29. package/lib/import/odata/v2parser.js +0 -1
  30. package/lib/import/odata/v4parser.js +103 -29
  31. package/lib/import/openapi/importOpenAPI.js +3 -3
  32. package/lib/init/constants.js +9 -3
  33. package/lib/init/template/_merging/registry-mta.js +290 -0
  34. package/lib/init/template/approuter/index.js +22 -32
  35. package/lib/init/template/auditlog/index.js +7 -9
  36. package/lib/init/template/extensibility/files/cds.package.json +7 -0
  37. package/lib/init/template/extensibility/files/cds.package.json.hbs +9 -0
  38. package/lib/init/template/extensibility/files/xs-security.json.hbs +26 -0
  39. package/lib/init/template/extensibility/index.js +48 -0
  40. package/lib/init/template/hana/files/java/cdsrc.json.hbs +1 -1
  41. package/lib/init/template/hana/files/java/profile.cdsrc.json.hbs +2 -2
  42. package/lib/init/template/hana/files/mta.yaml.hbs +10 -0
  43. package/lib/init/template/hana/files/nodejs/cds.package.json.hbs +1 -1
  44. package/lib/init/template/hana/files/nodejs/cds.profile.package.json.hbs +2 -2
  45. package/lib/init/template/hana/index.js +76 -63
  46. package/lib/init/template/kibana-logging/index.js +31 -37
  47. package/lib/init/template/lint/files/.eslint/rules/no-entity-moo.js +14 -14
  48. package/lib/init/template/lint/index.js +1 -1
  49. package/lib/init/template/mta/files/mta.yaml.hbs +1 -1
  50. package/lib/init/template/mta/index.js +13 -7
  51. package/lib/init/template/mtx/index.js +2 -142
  52. package/lib/init/template/multitenancy/files/cds.package.json +7 -0
  53. package/lib/init/template/multitenancy/files/cds.package.json.hbs +9 -0
  54. package/lib/init/template/{mtx → multitenancy}/files/dependencies.package.json +1 -1
  55. package/lib/init/template/multitenancy/files/java/.cdsrc.json +19 -0
  56. package/lib/init/template/multitenancy/files/java/package.json +31 -0
  57. package/lib/init/template/{mtx → multitenancy}/files/mta.yaml.hbs +13 -6
  58. package/lib/init/template/multitenancy/files/xs-security.json.hbs +18 -0
  59. package/lib/init/template/multitenancy/index.js +109 -0
  60. package/lib/init/template/nodejs/files/package.json.hbs +3 -0
  61. package/lib/init/template/templateBase.js +4 -3
  62. package/lib/init/template/toggles/files/cds.package.json +7 -0
  63. package/lib/init/template/toggles/files/cds.package.json.hbs +9 -0
  64. package/lib/init/template/toggles/index.js +24 -0
  65. package/lib/init/template/xsuaa/files/mta.yaml.hbs +10 -0
  66. package/lib/init/template/xsuaa/index.js +44 -33
  67. package/lib/init/util/projectReader.js +13 -8
  68. package/lib/init/util/templateUtil.js +112 -110
  69. package/lib/k8s/ChartAdder.js +11 -3
  70. package/lib/k8s/ChartBuilder.js +6 -0
  71. package/lib/k8s/buildModel.js +1 -3
  72. package/lib/k8s/connectivity/index.js +11 -5
  73. package/lib/k8s/connectivity/templates/connectivity-proxy-info.yaml +7 -3
  74. package/lib/k8s/deployment/index.js +2 -4
  75. package/lib/k8s/deployment/subchart/Chart.yaml +1 -1
  76. package/lib/k8s/deployment/subchart/templates/_helpers.tpl +22 -11
  77. package/lib/k8s/deployment/subchart/templates/deployment.yaml +12 -5
  78. package/lib/k8s/deployment/subchart/templates/network-policy.yaml +3 -1
  79. package/lib/k8s/deployment/subchart/templates/pod-disruption-budget.yaml +1 -1
  80. package/lib/k8s/deployment/subchart/values.md +812 -0
  81. package/lib/k8s/deployment/subchart/values.schema.json +125 -30
  82. package/lib/k8s/deployment/subchart/values.yaml +7 -3
  83. package/lib/k8s/hana-deployer/index.js +10 -0
  84. package/lib/k8s/hana-deployer/templates/hana-deployer-job.yaml +8 -0
  85. package/lib/k8s/html5-apps-deployer/index.js +10 -0
  86. package/lib/k8s/html5-apps-deployer/templates/html5-apps-deployer-job.yaml +8 -0
  87. package/lib/k8s/index.js +2 -2
  88. package/lib/k8s/resources/helm/chart/templates/_deployment_helpers.tpl +1 -159
  89. package/lib/k8s/resources/helm/chart/templates/_helpers.tpl +0 -33
  90. package/lib/k8s/resources/helm/chart/templates/_sapcp_helpers.tpl +1 -1
  91. package/lib/k8s/resources/helm/chart/values.schema.json +449 -0
  92. package/lib/k8s/xsuaa/lib.js +10 -7
  93. package/lib/lint/Linter.js +155 -158
  94. package/lib/lint/generators.js +1 -1
  95. package/lib/lint/io.js +13 -5
  96. package/npm-shrinkwrap.json +1053 -136
  97. package/package.json +5 -4
  98. package/lib/init/template/_merging/existences.js +0 -297
  99. package/lib/init/template/mtx/files/cds.package.json +0 -12
  100. package/lib/init/template/mtx/files/cds.package.json.hbs +0 -14
  101. package/lib/init/template/mtx/files/java/.cdsrc.json +0 -17
  102. package/lib/init/template/mtx/files/java/package.json +0 -43
  103. package/lib/init/template/mtx/files/java/server.js +0 -30
  104. package/lib/init/template/mtx/files/xs-security.json.hbs +0 -48
  105. package/lib/lint/.eslintrc.js +0 -3
@@ -0,0 +1,449 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema",
3
+ "type": "object",
4
+ "required": [
5
+ "global",
6
+ "srv"
7
+ ],
8
+ "properties": {
9
+ "global": {
10
+ "$id": "#/properties/global",
11
+ "title": "Helm global values",
12
+ "description": "For more information, see https://helm.sh/docs/chart_template_guide/subcharts_and_globals/#global-chart-values",
13
+ "type": "object",
14
+ "required": [
15
+ "domain"
16
+ ],
17
+ "properties": {
18
+ "imagePullSecret": {
19
+ "$id": "#/properties/global/imagePullSecret",
20
+ "title": "Image Pull Secret configuration",
21
+ "description": "For more information, see https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/",
22
+ "additionalProperties": false,
23
+ "type": "object",
24
+ "properties": {
25
+ "name": {
26
+ "title": "Secret name",
27
+ "description": "Name of the Kubernetes Secret, used as an image pull secret (must be of type kubernetes.io/dockerconfigjson). Can't be used with the `dockerconfigjson` option.",
28
+ "$ref": "#/definitions/KubernetesName"
29
+ }
30
+ }
31
+ },
32
+ "domain": {
33
+ "$id": "#/properties/global/doamin",
34
+ "title": "Domain Name",
35
+ "description": "Full-qualified domain name used to access applications in your Kyma cluster",
36
+ "type": "string",
37
+ "pattern": "[0-9a-z][0-9a-z-.]*"
38
+ }
39
+ }
40
+ },
41
+ "srv": {
42
+ "$id": "#/properties/srv",
43
+ "description": "Deployment"
44
+ },
45
+ "auditlog": {
46
+ "$id": "#/properties/auditlog",
47
+ "$ref": "#/definitions/ServiceInstance"
48
+ },
49
+ "destinations": {
50
+ "$id": "#/properties/destinations",
51
+ "$ref": "#/definitions/ServiceInstance"
52
+ },
53
+ "connectivity": {
54
+ "type": "object",
55
+ "additionalProperties": false,
56
+ "required": [
57
+ "serviceOfferingName",
58
+ "servicePlanName",
59
+ "configMapName",
60
+ "secretName"
61
+ ],
62
+ "properties": {
63
+ "fullnameOverride": {
64
+ "type": "string",
65
+ "pattern": "[0-9a-z][0-9a-z-.]*",
66
+ "maxLength": 63,
67
+ "description": "If present then this will be used instead of the generated name"
68
+ },
69
+ "enabled": {
70
+ "type": "boolean",
71
+ "default": true,
72
+ "description": "Service instance will be created (default: true)"
73
+ },
74
+ "serviceOfferingName": {
75
+ "type": "string",
76
+ "default": "connectivity",
77
+ "description": "Technical service offering name from service catalog"
78
+ },
79
+ "servicePlanName": {
80
+ "type": "string",
81
+ "default": "connectivity_proxy",
82
+ "description": "Technical service plan name from service catalog"
83
+ },
84
+ "parameters": {
85
+ "type": "object",
86
+ "description": "Some services support the provisioning of additional configuration parameters during the instance creation. For the list of supported parameters, check the documentation of the particular service offering."
87
+ },
88
+ "config": {
89
+ "type": "string",
90
+ "description": "File name of JSON configuration file in chart folder. Values from the file will be copied and placed in the parameters for the service instance. If both parameters and config are specified, the values in parameters override those read from config."
91
+ },
92
+ "configMapName": {
93
+ "type": "string",
94
+ "description": "Required to add additional connection information, compared to what is available from the service binding."
95
+ },
96
+ "secretName": {
97
+ "type": "string",
98
+ "description": "Required to add additional connection information."
99
+ }
100
+ }
101
+ },
102
+ "event_mesh": {
103
+ "$id": "#/properties/event_mesh",
104
+ "$ref": "#/definitions/ServiceInstance"
105
+ },
106
+ "hana_deployer": {
107
+ "$id": "#/properties/hana_deployer",
108
+ "type": "object",
109
+ "additionalProperties": false,
110
+ "required": [
111
+ "image",
112
+ "bindings",
113
+ "resources"
114
+ ],
115
+ "properties": {
116
+ "image": {
117
+ "$id": "#/properties/hana_deployer/image",
118
+ "$ref": "#/definitions/Image"
119
+ },
120
+ "bindings": {
121
+ "$id": "#/properties/hana_deployer/bindings",
122
+ "$ref": "#/definitions/Bindings"
123
+ },
124
+ "resources": {
125
+ "$id": "#/properties/hana_deployer/resources",
126
+ "$ref": "#/definitions/Resources"
127
+ }
128
+ }
129
+ },
130
+ "html5_apps_deployer": {
131
+ "$id": "#/properties/html5_apps_deployer",
132
+ "type": "object",
133
+ "additionalProperties": false,
134
+ "required": [
135
+ "image",
136
+ "bindings",
137
+ "resources",
138
+ "cloudService"
139
+ ],
140
+ "properties": {
141
+ "image": {
142
+ "$id": "#/properties/html5_apps_deployer/image",
143
+ "$ref": "#/definitions/Image"
144
+ },
145
+ "bindings": {
146
+ "$id": "#/properties/html5_apps_deployer/bindings",
147
+ "$ref": "#/definitions/Bindings"
148
+ },
149
+ "resources": {
150
+ "$id": "#/properties/html5_apps_deployer/resources",
151
+ "$ref": "#/definitions/Resources"
152
+ },
153
+ "backendDestinations": {
154
+ "$id": "#/properties/html5_apps_deployer/backendDestinations",
155
+ "title": "Backend Destinations for HTML5 Application",
156
+ "type": "object",
157
+ "patternProperties": {
158
+ "^[-._a-zA-Z][-._a-zA-Z0-9]*$": {
159
+ "description": "Name of the backend Destination",
160
+ "required": [
161
+ "service"
162
+ ],
163
+ "properties": {
164
+ "service": {
165
+ "type": "string",
166
+ "description": "Target Kubernetes service"
167
+ },
168
+ "path": {
169
+ "type": "string",
170
+ "description": "This path will be appended to the URL"
171
+ }
172
+ }
173
+ }
174
+ }
175
+ },
176
+ "cloudService": {
177
+ "$id": "#/properties/html5_apps_deployer/cloudService",
178
+ "type": "string",
179
+ "description": "Name for your business service (unique per subaccount)"
180
+ }
181
+ }
182
+ },
183
+ "html5_apps_repo_host": {
184
+ "$id": "#/properties/html5_apps_repo_host",
185
+ "$ref": "#/definitions/ServiceInstance"
186
+ },
187
+ "xsuaa": {
188
+ "$id": "#/properties/xsuaa",
189
+ "$ref": "#/definitions/ServiceInstance"
190
+ }
191
+ },
192
+ "definitions": {
193
+ "KubernetesName": {
194
+ "type": "string",
195
+ "$comment": "running `kubectl create secret generic invalid_name` will print this regex",
196
+ "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$"
197
+ },
198
+ "ServiceInstance": {
199
+ "type": "object",
200
+ "additionalProperties": false,
201
+ "required": [
202
+ "serviceOfferingName",
203
+ "servicePlanName"
204
+ ],
205
+ "properties": {
206
+ "fullnameOverride": {
207
+ "type": "string",
208
+ "pattern": "[0-9a-z][0-9a-z-.]*",
209
+ "maxLength": 63,
210
+ "description": "If present then this will be used instead of the generated name"
211
+ },
212
+ "enabled": {
213
+ "type": "boolean",
214
+ "default": true,
215
+ "description": "Service instance will be created (default: true)"
216
+ },
217
+ "serviceOfferingName": {
218
+ "type": "string",
219
+ "description": "Technical service offering name from service catalog"
220
+ },
221
+ "servicePlanName": {
222
+ "type": "string",
223
+ "description": "Technical service plan name from service catalog"
224
+ },
225
+ "parameters": {
226
+ "type": "object",
227
+ "description": "Some services support the provisioning of additional configuration parameters during the instance creation. For the list of supported parameters, check the documentation of the particular service offering."
228
+ },
229
+ "config": {
230
+ "type": "string",
231
+ "description": "File name of JSON configuration file in chart folder. Values from the file will be copied and placed in the parameters for the service instance. If both parameters and config are specified, the values in parameters override those read from config."
232
+ }
233
+ }
234
+ },
235
+ "Image": {
236
+ "title": "Image configuration",
237
+ "type": "object",
238
+ "required": [
239
+ "repository"
240
+ ],
241
+ "additionalProperties": false,
242
+ "properties": {
243
+ "repository": {
244
+ "title": "Repository of the image",
245
+ "description": "Should also include the image name (i.e. everything before the `:` sign).",
246
+ "type": "string",
247
+ "pattern": "^[\\w-./:]*[@sha256]*$"
248
+ },
249
+ "tag": {
250
+ "title": "Image tag",
251
+ "description": "Image tag without the name (everything after the `:` sign, potentially including the `@sha256` section at the end).",
252
+ "type": "string",
253
+ "pattern": "^((?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])(?:(?:\\.(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]))+)?(?::[0-9]+)?/)?[a-z0-9]+(?:(?:(?:[._]|__|[-]*)[a-z0-9]+)+)?(?:(?:/[a-z0-9]+(?:(?:(?:[._]|__|[-]*)[a-z0-9]+)+)?)+)?)(?::([\\w][\\w.-]{0,127}))?(?:@([A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}))?$"
254
+ }
255
+ }
256
+ },
257
+ "Bindings": {
258
+ "$id": "#/properties/bindings",
259
+ "title": "Service Binding configuration",
260
+ "type": "object",
261
+ "additionalProperties": false,
262
+ "patternProperties": {
263
+ "^[-._a-zA-Z][-._a-zA-Z0-9]*$": {
264
+ "anyOf": [
265
+ {
266
+ "type": "object",
267
+ "additionalProperties": false,
268
+ "required": [
269
+ "fromSecret"
270
+ ],
271
+ "properties": {
272
+ "fromSecret": {
273
+ "description": "Name of a Kubernetes Secret, with the binding content, compliant to the SAP Kubernetes Service Binding spec https://github.tools.sap/Kubernetes-Service-Bindings/doc/",
274
+ "$ref": "#/definitions/KubernetesName"
275
+ }
276
+ }
277
+ },
278
+ {
279
+ "type": "object",
280
+ "additionalProperties": false,
281
+ "properties": {
282
+ "serviceInstanceName": {
283
+ "description": "Name of a BTP Operator Service Instance, created by the `service-instance` Helm chart. Can't be used with the `serviceInstanceFullname` option.",
284
+ "$ref": "#/definitions/KubernetesName"
285
+ },
286
+ "serviceInstanceFullname": {
287
+ "description": "Full name of a BTP Operator Service Instance. Can't be used with the `serviceInstanceName` option.",
288
+ "$ref": "#/definitions/KubernetesName"
289
+ },
290
+ "externalName": {
291
+ "description": "The name for the service binding in SAP BTP",
292
+ "type": "string"
293
+ },
294
+ "secretName": {
295
+ "description": "The name of the secret where the credentials are stored.",
296
+ "$ref": "#/definitions/KubernetesName"
297
+ },
298
+ "parameters": {
299
+ "description": "Some services support the provisioning of additional configuration parameters during the bind request. For the list of supported parameters, check the documentation of the particular service offering.",
300
+ "type": "object"
301
+ },
302
+ "parametersFrom": {
303
+ "description": "List of sources to populate parameters.",
304
+ "type": "array",
305
+ "items": {
306
+ "anyOf": [
307
+ {
308
+ "type": "object",
309
+ "description": "Kubernetes Secret as a parameters source.",
310
+ "additionalProperties": false,
311
+ "properties": {
312
+ "secretKeyRef": {
313
+ "type": "object",
314
+ "additionalProperties": false,
315
+ "required": [
316
+ "name",
317
+ "key"
318
+ ],
319
+ "properties": {
320
+ "name": {
321
+ "description": "Name of a Secret.",
322
+ "$ref": "#/definitions/KubernetesName"
323
+ },
324
+ "key": {
325
+ "description": "Key in that Secret, which contains a string that represents the json to include in the set of parameters to be sent to the broker.",
326
+ "type": "string"
327
+ }
328
+ }
329
+ }
330
+ }
331
+ },
332
+ {
333
+ "type": "object",
334
+ "description": "Kubernetes Config Map as a parameters source.",
335
+ "additionalProperties": false,
336
+ "properties": {
337
+ "configMapKeyRef": {
338
+ "type": "object",
339
+ "additionalProperties": false,
340
+ "required": [
341
+ "name",
342
+ "key"
343
+ ],
344
+ "properties": {
345
+ "name": {
346
+ "description": "Name of a Config Map",
347
+ "$ref": "#/definitions/KubernetesName"
348
+ },
349
+ "key": {
350
+ "description": "Key in that Config Map, which contains a string that represents the json to include in the set of parameters to be sent to the broker.",
351
+ "type": "string"
352
+ }
353
+ }
354
+ }
355
+ }
356
+ }
357
+ ]
358
+ }
359
+ },
360
+ "credentialsRotationPolicy": {
361
+ "description": "Holds automatic credentials rotation configuration. For more details, see https://github.com/SAP/sap-btp-service-operator#spec-1",
362
+ "type": "object"
363
+ }
364
+ },
365
+ "dependencies": {
366
+ "serviceInstanceName": {
367
+ "not": {
368
+ "required": [
369
+ "serviceInstanceFullname"
370
+ ]
371
+ }
372
+ },
373
+ "serviceInstanceFullname": {
374
+ "not": {
375
+ "required": [
376
+ "serviceInstanceName"
377
+ ]
378
+ }
379
+ }
380
+ }
381
+ }
382
+ ]
383
+ }
384
+ }
385
+ },
386
+ "Resources": {
387
+ "title": "Pod resources configuration",
388
+ "type": "object",
389
+ "additionalProperties": false,
390
+ "required": [
391
+ "requests",
392
+ "limits"
393
+ ],
394
+ "properties": {
395
+ "requests": {
396
+ "type": "object",
397
+ "description": "Minimal required resources for the application to operate, that will be reserved.",
398
+ "additionalProperties": false,
399
+ "required": [
400
+ "cpu",
401
+ "memory"
402
+ ],
403
+ "properties": {
404
+ "cpu": {
405
+ "description": "CPU resource units, as described here https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu",
406
+ "type": [
407
+ "string",
408
+ "number"
409
+ ]
410
+ },
411
+ "ephemeral-storage": {
412
+ "description": "Size of the local ephemeral storage, measured in bytes. For more info, see https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage",
413
+ "type": "string"
414
+ },
415
+ "memory": {
416
+ "description": "Amount of memory, mesaured in bytes. For more info, see https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory",
417
+ "type": "string"
418
+ }
419
+ }
420
+ },
421
+ "limits": {
422
+ "type": "object",
423
+ "description": "If a process tries to use more resources than specified in the limits, the system kernel terminates the process that attempted the allocation, with an out of memory (OOM) error.",
424
+ "additionalProperties": false,
425
+ "required": [
426
+ "memory"
427
+ ],
428
+ "properties": {
429
+ "cpu": {
430
+ "description": "CPU resource units, as described here https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu",
431
+ "type": [
432
+ "string",
433
+ "number"
434
+ ]
435
+ },
436
+ "ephemeral-storage": {
437
+ "description": "Size of the local ephemeral storage, measured in bytes. For more info, see https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage",
438
+ "type": "string"
439
+ },
440
+ "memory": {
441
+ "description": "Amount of memory, mesaured in bytes. For more info, see https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory",
442
+ "type": "string"
443
+ }
444
+ }
445
+ }
446
+ }
447
+ }
448
+ }
449
+ }
@@ -1,12 +1,15 @@
1
- const { exec } = require("../../util/exec");
1
+ const cds = require('../../compile')
2
+ const Path = require('path');
2
3
 
3
4
  async function renderXsSecurityJson(projectPath) {
4
- const result = await exec({
5
- cwd: projectPath,
6
- stdio: ["inherit", "pipe", "inherit"],
7
- })`cds compile srv -2 xsuaa`;
8
- const xsSecurityJson = result.stdout;
9
- return xsSecurityJson;
5
+ const xsSecurityJson = await(async () => {
6
+ try {
7
+ const models = await cds.load(Path.join(projectPath, cds.env.folders.srv))
8
+ return cds.compile.to.xsuaa(models)
9
+ } catch (error) { /* ignore */ }
10
+ })() || { scopes: [], attributes: [], 'role-templates': [], 'authorities-inheritance': false }
11
+
12
+ return JSON.stringify(xsSecurityJson, null, 2);
10
13
  }
11
14
 
12
15
  module.exports = {