@sap/cds-dk 7.4.0 → 7.5.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 (179) hide show
  1. package/bin/activate.js +1 -1
  2. package/bin/add.js +6 -4
  3. package/bin/build.js +10 -12
  4. package/bin/cds.js +4 -1
  5. package/bin/deploy/index.js +5 -2
  6. package/bin/eval.js +1 -1
  7. package/bin/extend.js +3 -3
  8. package/bin/login.js +2 -2
  9. package/bin/logout.js +1 -1
  10. package/bin/pull.js +1 -1
  11. package/bin/push.js +5 -5
  12. package/bin/subscribe.js +2 -2
  13. package/bin/unsubscribe.js +2 -2
  14. package/bin/upgrade.js +2 -2
  15. package/bin/version.js +2 -2
  16. package/bin/watch.js +1 -1
  17. package/lib/bind/bindingUtil.js +6 -3
  18. package/lib/bind/cfKeyProvider.js +1 -1
  19. package/lib/bind/userCdsrcJsonStorageProvider.js +1 -1
  20. package/lib/build/buildPlugin.js +6 -12
  21. package/lib/build/buildTaskEngine.js +24 -19
  22. package/lib/build/buildTaskFactory.js +27 -33
  23. package/lib/build/buildTaskProvider.js +1 -1
  24. package/lib/build/buildTaskProviderFactory.js +26 -41
  25. package/lib/build/constants.js +0 -1
  26. package/lib/build/index.js +3 -3
  27. package/lib/build/plugins.js +15 -15
  28. package/lib/build/provider/edmxBuildPlugin.js +6 -7
  29. package/lib/build/provider/fiori/index.js +8 -8
  30. package/lib/build/provider/hana/2migration.js +12 -16
  31. package/lib/build/provider/hana/index.js +5 -7
  32. package/lib/build/provider/hana/template/package.json +1 -1
  33. package/lib/build/provider/internalBuildPlugin.js +0 -8
  34. package/lib/build/provider/internalBuildTaskProvider.js +17 -21
  35. package/lib/build/provider/java/index.js +2 -1
  36. package/lib/build/provider/mtx-extension/index.js +8 -5
  37. package/lib/build/provider/mtx-sidecar/index.js +2 -1
  38. package/lib/build/provider/nodejs/index.js +64 -58
  39. package/lib/compile/openapi/csdl2openapi.js +29 -15
  40. package/lib/compile/openapi/index.js +6 -6
  41. package/lib/deploy/to-hana/hana.js +5 -3
  42. package/lib/env/schema.js +2 -3
  43. package/lib/index.js +68 -28
  44. package/lib/init/add.js +17 -0
  45. package/lib/init/constants.js +5 -3
  46. package/lib/init/index.js +39 -25
  47. package/lib/init/{util/merge.js → merge.js} +32 -20
  48. package/lib/init/{util/mvn.js → mvn.js} +5 -5
  49. package/lib/init/plugin.js +85 -0
  50. package/lib/init/projectReader.js +145 -0
  51. package/lib/init/registries/mta.js +151 -0
  52. package/lib/init/template/{kibana → application-logging}/files/mta.yaml.hbs +3 -3
  53. package/lib/init/template/application-logging/index.js +49 -0
  54. package/lib/init/template/approuter/files/mta.yaml.hbs +11 -11
  55. package/lib/init/template/approuter/files/xs-app.json.hbs +2 -2
  56. package/lib/init/template/approuter/index.js +36 -81
  57. package/lib/init/template/cf-manifest/files/manifest.yml.hbs +3 -3
  58. package/lib/init/template/cf-manifest/files/services-manifest.yml.hbs +4 -4
  59. package/lib/init/template/cf-manifest/index.js +4 -4
  60. package/lib/init/template/connectivity/index.js +22 -35
  61. package/lib/init/template/data/index.js +3 -2
  62. package/lib/init/template/destination/files/values.yaml +9 -0
  63. package/lib/init/template/destination/index.js +15 -47
  64. package/lib/init/template/enterprise-messaging/index.js +26 -58
  65. package/lib/init/template/enterprise-messaging-shared/index.js +23 -39
  66. package/lib/init/template/extensibility/index.js +16 -30
  67. package/lib/init/template/file-based-messaging/index.js +7 -8
  68. package/lib/init/template/h2/index.js +4 -4
  69. package/lib/init/template/hana/files/mta.yaml.hbs +8 -8
  70. package/lib/init/template/hana/index.js +29 -115
  71. package/lib/init/template/helm/files/chart/templates/NOTES.txt +12 -0
  72. package/lib/init/template/helm/files/chart/templates/_deployment_helpers.tpl +82 -0
  73. package/lib/init/template/helm/files/chart/templates/_helpers.tpl +28 -0
  74. package/lib/init/template/helm/files/chart/values.root.schema.json +61 -0
  75. package/lib/init/template/helm/files/chart/values.schema.json +366 -0
  76. package/lib/init/template/helm/{subcharts → files}/web-application/Chart.yaml +1 -1
  77. package/lib/init/template/helm/{subcharts → files}/web-application/templates/_api.tpl +1 -1
  78. package/lib/init/template/helm/{subcharts → files}/web-application/values.yaml +1 -1
  79. package/lib/init/template/helm/index.js +84 -85
  80. package/lib/init/template/helm-unified-runtime/files/Chart.yaml.hbs +10 -0
  81. package/lib/init/template/helm-unified-runtime/files/values.yaml.hbs +26 -0
  82. package/lib/init/template/helm-unified-runtime/index.js +91 -0
  83. package/lib/init/template/helm-unified-runtime/lib/build.js +0 -0
  84. package/lib/init/template/helm-unified-runtime/package.json +4 -0
  85. package/lib/init/template/html5-repo/files/values.yaml.hbs +28 -0
  86. package/lib/init/template/html5-repo/index.js +23 -97
  87. package/lib/init/template/java/index.js +3 -3
  88. package/lib/init/template/lint/index.js +2 -2
  89. package/lib/init/template/liquibase/index.js +16 -0
  90. package/lib/init/template/local-messaging/index.js +7 -8
  91. package/lib/init/template/mta/index.js +7 -19
  92. package/lib/init/template/mtx/index.js +2 -2
  93. package/lib/init/template/multitenancy/index.js +38 -89
  94. package/lib/init/template/nodejs/index.js +5 -4
  95. package/lib/init/template/notebook/index.js +1 -1
  96. package/lib/init/template/notifications/index.js +16 -19
  97. package/lib/init/template/pipeline/index.js +1 -1
  98. package/lib/init/template/postgres/index.js +25 -31
  99. package/lib/init/template/redis-messaging/index.js +23 -27
  100. package/lib/init/template/sample/index.js +4 -4
  101. package/lib/init/template/samples/index.js +2 -2
  102. package/lib/init/template/sqlite/files/{package.json.hbs → package.json} +0 -2
  103. package/lib/init/template/sqlite/index.js +6 -10
  104. package/lib/init/template/tiny-sample/index.js +6 -6
  105. package/lib/init/template/toggles/index.js +7 -8
  106. package/lib/init/template/typer/index.js +6 -6
  107. package/lib/init/template/xsuaa/files/mta.yaml.hbs +3 -3
  108. package/lib/init/template/xsuaa/files/values.yaml.hbs +3 -3
  109. package/lib/init/template/xsuaa/index.js +27 -52
  110. package/lib/init/{util/template.js → template.js} +1 -1
  111. package/lib/{client → mtx}/activate.js +15 -11
  112. package/lib/{client → mtx}/auth_manager.js +5 -4
  113. package/lib/{client → mtx}/download_legacy.js +6 -4
  114. package/lib/{client → mtx}/extend.js +14 -9
  115. package/lib/{client → mtx}/index.js +1 -1
  116. package/lib/{client → mtx}/params.js +4 -1
  117. package/lib/{client → mtx}/pull.js +6 -4
  118. package/lib/{client → mtx}/push.js +11 -10
  119. package/lib/{client → mtx}/settings_manager.js +8 -6
  120. package/lib/{client → mtx}/tenant_action.js +9 -8
  121. package/lib/{client/helper/cf_helper.js → mtx/util/cf.js} +4 -3
  122. package/lib/{client/helper/dependency_helper.js → mtx/util/dependencies.js} +1 -0
  123. package/lib/mtx/util/errors.js +27 -0
  124. package/lib/mtx/util/legacy_ext.js +16 -0
  125. package/lib/{client/helper/url_helper.js → mtx/util/urls.js} +12 -1
  126. package/lib/util/fs.js +5 -1
  127. package/lib/util/pruneAxiosErrors.js +35 -18
  128. package/lib/util/write.js +1 -1
  129. package/npm-shrinkwrap.json +27 -27
  130. package/package.json +10 -1
  131. package/lib/client/base_command.js +0 -54
  132. package/lib/init/template/_merging/registry-mta.js +0 -304
  133. package/lib/init/template/helm/Model.d.ts +0 -53
  134. package/lib/init/template/kibana/files/package.json.hbs +0 -17
  135. package/lib/init/template/kibana/index.js +0 -54
  136. package/lib/init/template/templateBase.js +0 -100
  137. package/lib/init/util/md5.js +0 -86
  138. package/lib/init/util/projectReader.js +0 -94
  139. /package/lib/init/{util/indent.js → indent.js} +0 -0
  140. /package/lib/init/template/helm/{subcharts → files}/content-deployment/Chart.yaml +0 -0
  141. /package/lib/init/template/helm/{subcharts → files}/content-deployment/templates/_helpers.tpl +0 -0
  142. /package/lib/init/template/helm/{subcharts → files}/content-deployment/templates/job.yaml +0 -0
  143. /package/lib/init/template/helm/{subcharts → files}/content-deployment/templates/secret.yaml +0 -0
  144. /package/lib/init/template/helm/{subcharts → files}/content-deployment/templates/service-account.yaml +0 -0
  145. /package/lib/init/template/helm/{subcharts → files}/content-deployment/templates/service-binding.yaml +0 -0
  146. /package/lib/init/template/helm/{subcharts → files}/content-deployment/values.schema.json +0 -0
  147. /package/lib/init/template/helm/{subcharts → files}/content-deployment/values.yaml +0 -0
  148. /package/lib/init/template/helm/{subcharts → files}/service-instance/Chart.yaml +0 -0
  149. /package/lib/init/template/helm/{subcharts → files}/service-instance/templates/_helpers.tpl +0 -0
  150. /package/lib/init/template/helm/{subcharts → files}/service-instance/templates/serviceinstance.yaml +0 -0
  151. /package/lib/init/template/helm/{subcharts → files}/service-instance/values.schema.json +0 -0
  152. /package/lib/init/template/helm/{subcharts → files}/service-instance/values.yaml +0 -0
  153. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/NOTES.txt +0 -0
  154. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/_helpers.tpl +0 -0
  155. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/api-rule.yaml +0 -0
  156. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/deployment.yaml +0 -0
  157. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/network-policy.yaml +0 -0
  158. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/pod-disruption-budget.yaml +0 -0
  159. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/rbac.yaml +0 -0
  160. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/secret.yaml +0 -0
  161. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/service-account.yaml +0 -0
  162. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/service-binding.yaml +0 -0
  163. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/service.yaml +0 -0
  164. /package/lib/init/template/helm/{subcharts → files}/web-application/templates/virtual-service.yaml +0 -0
  165. /package/lib/init/template/helm/{subcharts → files}/web-application/values.schema.json +0 -0
  166. /package/lib/init/template/{helm/chart → helm-unified-runtime/files}/templates/NOTES.txt +0 -0
  167. /package/lib/init/template/{helm/chart → helm-unified-runtime/files}/templates/_deployment_helpers.tpl +0 -0
  168. /package/lib/init/template/{helm/chart → helm-unified-runtime/files}/templates/_helpers.tpl +0 -0
  169. /package/lib/init/template/{helm/chart → helm-unified-runtime/files}/values.root.schema.json +0 -0
  170. /package/lib/init/template/{helm/chart → helm-unified-runtime/files}/values.schema.json +0 -0
  171. /package/lib/init/template/postgres/files/{mta.yaml.hbs → mta.yml.hbs} +0 -0
  172. /package/lib/init/{util/xml.js → xml.js} +0 -0
  173. /package/lib/{client/helper/env_helper.js → mtx/util/env.js} +0 -0
  174. /package/lib/{client/helper/fs_helper.js → mtx/util/fs.js} +0 -0
  175. /package/lib/{client/helper → mtx/util}/logging.js +0 -0
  176. /package/lib/{client/helper → mtx/util}/question.js +0 -0
  177. /package/lib/{client/helper/string_helper.js → mtx/util/strings.js} +0 -0
  178. /package/lib/util/{cfUtil.js → cf.js} +0 -0
  179. /package/lib/util/{gitUtil.js → git.js} +0 -0
@@ -1,49 +1,43 @@
1
1
  const YAML = require('@sap/cds-foss')('yaml')
2
- const { join } = require('path')
3
2
  const cds = require('../../../cds')
4
3
  const { read } = cds.utils
5
- const { readProject } = require('../../util/projectReader')
6
- const { mergeJSON, mergeYAML } = require('../../util/merge')
7
- const { parseMd5File, writeMd5File } = require('../../util/md5')
8
- const { srvNode4, srvJava4, enterpriseMessaging } = require('../_merging/registry-mta')
4
+ const { readProject } = require('../../projectReader')
5
+ const { merge } = require('../../merge')
6
+ const { srv4, enterpriseMessaging } = require('../../registries/mta')
9
7
 
10
- module.exports = class EnterpriseMessagingTemplate extends require('../templateBase') {
8
+ module.exports = class EnterpriseMessagingTemplate extends require('../../plugin') {
11
9
 
12
10
  async canRun() {
13
- const { isJava } = await readProject()
11
+ const { isJava } = readProject()
14
12
  if (isJava) throw `'cds add enterprise-messaging' is not available for Java yet`
15
13
  return true
16
14
  }
17
15
 
18
- static hasFacet(env) {
16
+ static hasInProduction(env) {
19
17
  return env.requires?.messaging?.kind === 'enterprise-messaging-http'
20
18
  }
21
19
 
22
20
  async run() {
23
- const project = await readProject()
21
+ const project = readProject()
24
22
  const { configFile } = project
25
- await mergeJSON(configFile, join(__dirname, 'files', 'package.json.hbs'), project)
26
- await mergeJSON('event-mesh.json', join(__dirname, 'files', 'event-mesh.json.hbs'), project)
23
+ await merge(__dirname, 'files/package.json.hbs').into(configFile, { with: project })
24
+ await merge(__dirname, 'files/event-mesh.json.hbs').into('event-mesh.json', { with: project })
27
25
  }
28
26
 
29
- async runDependentMerging(context = {}) {
30
- const project = await readProject()
31
- const { hasXsuaa, hasHelm, hasMta, isNodejs, srvPath, appName } = project
27
+ async combine() {
28
+ const project = readProject()
29
+ const { hasXsuaa, hasHelm, hasHelmUnifiedRuntime, hasMta, srvPath, appName } = project
32
30
 
33
31
  if (hasMta) {
34
- const srv = (isNodejs ? srvNode4 : srvJava4)(srvPath)
35
- await mergeYAML(
36
- 'mta.yaml',
37
- join(__dirname, 'files', 'mta.yaml.hbs'),
32
+ const srv = srv4(srvPath)
33
+ await merge(__dirname, 'files/mta.yaml.hbs').into('mta.yaml', {
38
34
  project,
39
- {
40
- additions: [srv, enterpriseMessaging],
41
- relationships: [{
42
- insert: [enterpriseMessaging, 'name'],
43
- into: [srv, 'requires', 'name']
44
- }]
45
- }
46
- )
35
+ additions: [srv, enterpriseMessaging],
36
+ relationships: [{
37
+ insert: [enterpriseMessaging, 'name'],
38
+ into: [srv, 'requires', 'name']
39
+ }]
40
+ })
47
41
  }
48
42
 
49
43
  if (hasXsuaa) {
@@ -52,41 +46,15 @@ module.exports = class EnterpriseMessagingTemplate extends require('../templateB
52
46
  } else {
53
47
  project['em-service-name'] = `${appName}-messaging`
54
48
  }
55
- await mergeJSON(
56
- 'xs-security.json',
57
- join(__dirname, 'files', 'xs-security.json.hbs'),
49
+ await merge(__dirname, 'files/xs-security.json.hbs').into('xs-security.json', {
58
50
  project,
59
- {
60
- additions: [{
61
- in: 'scopes',
62
- where: [{ property: 'name', isEqualTo: '$XSAPPNAME.emcallback' }],
63
- }, {
64
- in: 'scopes',
65
- where: [{ property: 'name', isEqualTo: '$XSAPPNAME.emmanagement' }],
66
- }]
67
- }
68
- )
51
+ additions: [{ in: 'scopes', where: { name: '$XSAPPNAME.emcallback' }},
52
+ { in: 'scopes', where: { name: '$XSAPPNAME.emmanagement' }}]
53
+ })
69
54
  }
70
55
 
71
- if (hasHelm) {
72
- //in case facet is being added to the already exisiting charts folder
73
- let isIndependentCommand = false
74
- if(Object.keys(context).length == 0){
75
- isIndependentCommand = true
76
- context.oldTrackingData = context.newTrackingData = await parseMd5File(join('chart', '.cds-add-helm-files.md5'))
77
- }
78
-
79
- await mergeYAML(join('chart', 'values.yaml'), join(__dirname, 'files', 'values.yaml'))
80
-
81
- // copy service instance chart if it is not present
82
- const HelmTemplate = require(`../helm`);
83
- const helmTemplate = new HelmTemplate(context.oldTrackingData, context.newTrackingData);
84
- isIndependentCommand = isIndependentCommand | await helmTemplate.addSubChart('service-instance');
85
-
86
- // add dependency entry in chart.yaml
87
- await helmTemplate.addDependency('service-instance', 'event-mesh');
88
-
89
- if(isIndependentCommand) await writeMd5File(join('chart', '.cds-add-helm-files.md5'), context.newTrackingData)
56
+ if (hasHelm || hasHelmUnifiedRuntime) {
57
+ await merge(__dirname, 'files', 'values.yaml').into('chart/values.yaml')
90
58
  }
91
59
  }
92
60
  }
@@ -1,63 +1,47 @@
1
- const { join } = require('path')
2
1
  const cds = require('../../../cds')
3
2
  const { read } = cds.utils
4
- const { readProject } = require('../../util/projectReader')
5
- const { mergeJSON, mergeYAML } = require('../../util/merge')
6
- const { parseMd5File, writeMd5File } = require('../../util/md5')
7
- const { srvNode4, srvJava4, enterpriseMessaging } = require('../_merging/registry-mta')
3
+ const { readProject } = require('../../projectReader')
4
+ const { merge } = require('../../merge')
5
+ const { srv4, enterpriseMessaging } = require('../../registries/mta')
8
6
 
9
- module.exports = class EnterpriseMessagingSharedTemplate extends require('../templateBase') {
7
+ module.exports = class EnterpriseMessagingSharedTemplate extends require('../../plugin') {
10
8
 
11
9
  async canRun() {
12
- const { isJava } = await readProject()
10
+ const { isJava } = readProject()
13
11
  if (isJava) throw `'cds add enterprise-messaging-shared' is not available for Java yet`
14
12
  return true
15
13
  }
16
14
 
17
- static hasFacet(env) {
15
+ static hasInProduction(env) {
18
16
  return env.requires?.messaging?.kind === 'enterprise-messaging-amqp'
19
17
  }
20
18
 
21
19
  async run() {
22
- const project = await readProject()
20
+ const project = readProject()
23
21
  const { configFile } = project
24
22
  project.shortcut = !(await read(configFile)).cds?.requires?.messaging?.kind
25
- await mergeJSON(configFile, join(__dirname, 'files', 'package.json.hbs'), project)
26
- await mergeJSON('event-mesh.json', join(__dirname, 'files', 'event-mesh.json.hbs'), project)
23
+ await merge(__dirname, 'files/package.json.hbs').into(configFile, { project })
24
+ await merge(__dirname, 'files/event-mesh.json.hbs').into('event-mesh.json', { project })
27
25
  }
28
26
 
29
- async runDependentMerging(context = {}) {
30
- const project = await readProject()
31
- const { hasMta, hasHelm, isNodejs, srvPath } = project
27
+ async combine() {
28
+ const project = readProject()
29
+ const { hasMta, hasHelm, hasHelmUnifiedRuntime, srvPath } = project
32
30
 
33
31
  if (hasMta) {
34
- const srv = (isNodejs ? srvNode4 : srvJava4)(srvPath)
35
- await mergeYAML(
36
- 'mta.yaml',
37
- join(__dirname, 'files', 'mta.yaml.hbs'),
38
- project,
39
- {
40
- additions: [srv, enterpriseMessaging],
41
- relationships: [{
42
- insert: [enterpriseMessaging, 'name'],
43
- into: [srv, 'requires', 'name']
44
- }]
45
- }
46
- )
32
+ const srv = srv4(srvPath)
33
+ await merge(__dirname, 'files', 'mta.yaml.hbs').into('mta.yaml', {
34
+ project,
35
+ additions: [srv, enterpriseMessaging],
36
+ relationships: [{
37
+ insert: [enterpriseMessaging, 'name'],
38
+ into: [srv, 'requires', 'name']
39
+ }]
40
+ })
47
41
  }
48
42
 
49
- if (hasHelm) {
50
- let isIndependentCommand = false
51
- if (Object.keys(context).length == 0){
52
- isIndependentCommand = true
53
- context.oldTrackingData = context.newTrackingData = await parseMd5File(join('chart', '.cds-add-helm-files.md5'))
54
- }
55
- await mergeYAML(join('chart', 'values.yaml'), join(__dirname, 'files', 'values.yaml'))
56
- const HelmTemplate = require(`../helm`);
57
- const helmTemplate = new HelmTemplate(context.oldTrackingData, context.newTrackingData);
58
- isIndependentCommand = isIndependentCommand | await helmTemplate.addSubChart('service-instance');
59
- await helmTemplate.addDependency('service-instance', 'event-mesh');
60
- if (isIndependentCommand) await writeMd5File(join('chart', '.cds-add-helm-files.md5'), context.newTrackingData)
43
+ if (hasHelm || hasHelmUnifiedRuntime) {
44
+ await merge(__dirname, 'files/values.yaml').into('chart/values.yaml')
61
45
  }
62
46
  }
63
47
  }
@@ -1,52 +1,38 @@
1
1
  const cds = require('../../../cds')
2
2
  const { exists } = cds.utils
3
- const { join } = require('path')
4
- const { readProject } = require('../../util/projectReader')
5
- const { mergeJSON } = require('../../util/merge')
3
+ const { readProject } = require('../../projectReader')
4
+ const { merge } = require('../../merge')
6
5
  const { MULTITENANCY } = require('../../constants').OPTIONS
7
6
 
8
- module.exports = class ExtensibilityTemplate extends require('../templateBase') {
7
+ module.exports = class ExtensibilityTemplate extends require('../../plugin') {
9
8
 
10
9
 
11
- getDependencies() {
10
+ requires() {
12
11
  return exists('pom.xml') ? [MULTITENANCY] : [] // REVISIT: Remove this dependency
13
12
  }
14
13
 
15
- getRelatedFacets() {
16
- return ['approuter']
17
- }
18
-
19
- static hasFacet(env) {
14
+ static hasInProduction(env) {
20
15
  return !!env.requires?.extensibility
21
16
  }
22
17
 
23
18
  async run() {
24
- const project = await readProject()
19
+ const project = readProject()
25
20
  const { configFile } = project
26
- await mergeJSON(configFile, join(__dirname, 'files', 'package.json.hbs'), project)
21
+ await merge(__dirname, 'files/package.json.hbs').into(configFile, { project })
27
22
  }
28
23
 
29
- async runDependentMerging() {
30
- const project = await readProject()
24
+ async combine() {
25
+ const project = readProject()
31
26
  const { hasXsuaa } = project
32
27
  if (hasXsuaa) {
33
- await mergeJSON(
34
- 'xs-security.json',
35
- join(__dirname, 'files', 'xs-security.json.hbs'),
28
+ await merge(__dirname, 'files', 'xs-security.json.hbs').into('xs-security.json', {
36
29
  project,
37
- {
38
- additions: [{
39
- in: 'scopes',
40
- where: [{ property: 'name', isEqualTo: '$XSAPPNAME.cds.ExtensionDeveloper' }],
41
- }, {
42
- in: 'scopes',
43
- where: [{ property: 'name', isEqualTo: '$XSAPPNAME.cds.UIFlexDeveloper' }],
44
- }, {
45
- in: 'role-templates',
46
- where: [{ property: 'name', isEqualTo: 'ExtensionDeveloper' }],
47
- }]
48
- }
49
- )
30
+ additions: [
31
+ { in: 'scopes', where: { name: '$XSAPPNAME.cds.ExtensionDeveloper' }},
32
+ { in: 'scopes', where: { name: '$XSAPPNAME.cds.UIFlexDeveloper' }},
33
+ { in: 'role-templates', where: { name: 'ExtensionDeveloper' }}
34
+ ]
35
+ })
50
36
  }
51
37
  }
52
38
  }
@@ -1,24 +1,23 @@
1
- const { join } = require('path')
2
1
  const cds = require('../../../cds'), { read } = cds.utils
3
- const { readProject } = require('../../util/projectReader')
4
- const { mergeJSON } = require('../../util/merge')
2
+ const { readProject } = require('../../projectReader')
3
+ const { merge } = require('../../merge')
5
4
 
6
- module.exports = class FileBasedMessagingTemplate extends require('../templateBase') {
5
+ module.exports = class FileBasedMessagingTemplate extends require('../../plugin') {
7
6
 
8
7
  async canRun() {
9
- const { isJava } = await readProject()
8
+ const { isJava } = readProject()
10
9
  if (isJava) throw `'cds add file-based-messaging' is not available for Java yet`
11
10
  return true
12
11
  }
13
12
 
14
- static hasFacet(env) {
13
+ static hasInProduction(env) {
15
14
  return env.requires?.messaging?.kind === 'file-based-messaging'
16
15
  }
17
16
 
18
17
  async run() {
19
- const project = await readProject()
18
+ const project = readProject()
20
19
  const { configFile } = project
21
20
  project.shortcut = !(await read(configFile)).cds?.requires?.messaging?.kind
22
- await mergeJSON(configFile, join(__dirname, 'files', 'package.json.hbs'), project)
21
+ await merge(__dirname, 'files/package.json.hbs').into(configFile, { with: project })
23
22
  }
24
23
  }
@@ -1,11 +1,11 @@
1
- const mvn = require('../../util/mvn')
2
- const { readProject } = require('../../util/projectReader')
1
+ const mvn = require('../../mvn')
2
+ const { readProject } = require('../../projectReader')
3
3
  const { H2 } = require('../../constants').OPTIONS
4
4
 
5
- module.exports = class H2Template extends require('../templateBase') {
5
+ module.exports = class H2Template extends require('../../plugin') {
6
6
 
7
7
  async canRun() {
8
- const { isNodejs } = await readProject()
8
+ const { isNodejs } = readProject()
9
9
  if (isNodejs) throw `'cds add ${H2}' is not available for Node.js`
10
10
  return true
11
11
  }
@@ -6,7 +6,7 @@ modules:
6
6
  requires:
7
7
  - name: {{appName}}-db
8
8
 
9
- {{^isMultitenant}}
9
+ {{^hasMultitenancy}}
10
10
  - name: {{appName}}-db-deployer
11
11
  type: hdb
12
12
  path: {{& db.path}}
@@ -20,27 +20,27 @@ modules:
20
20
  {{/isJava}}
21
21
  requires:
22
22
  - name: {{appName}}-db
23
- {{/isMultitenant}}
23
+ {{/hasMultitenancy}}
24
24
 
25
- {{#isMultitenant}}
25
+ {{#hasMultitenancy}}
26
26
  - name: {{appName}}-mtx
27
27
  type: nodejs
28
28
  path: {{#isNodejs}}gen/{{/isNodejs}}mtx/sidecar
29
29
  requires:
30
30
  - name: {{appName}}-db
31
- {{/isMultitenant}}
31
+ {{/hasMultitenancy}}
32
32
 
33
33
  resources:
34
34
  - name: {{appName}}-db
35
- {{^isMultitenant}}
35
+ {{^hasMultitenancy}}
36
36
  type: com.sap.xs.hdi-container
37
37
  parameters:
38
38
  service: hana
39
39
  service-plan: hdi-shared
40
- {{/isMultitenant}}
41
- {{#isMultitenant}}
40
+ {{/hasMultitenancy}}
41
+ {{#hasMultitenancy}}
42
42
  type: org.cloudfoundry.managed-service
43
43
  parameters:
44
44
  service: service-manager
45
45
  service-plan: container
46
- {{/isMultitenant}}
46
+ {{/hasMultitenancy}}
@@ -1,35 +1,28 @@
1
1
  const { join } = require('path')
2
2
  const cds = require('../../../cds')
3
- const { read, write, exists, rmdir, copy } = cds.utils
4
- const { readProject } = require('../../util/projectReader')
5
- const { mergeJSON, mergeYAML, removeFromYAML, removeFromYAMLArray } = require('../../util/merge')
6
- const mvn = require('../../util/mvn')
7
- const { parseMd5File, writeMd5File } = require('../../util/md5')
3
+ const { read, write, exists, copy, rimraf } = cds.utils
4
+ const { readProject } = require('../../projectReader')
5
+ const { merge, removeFromYAML, removeFromYAMLArray } = require('../../merge')
6
+ const mvn = require('../../mvn')
8
7
 
9
8
  const { OPTIONS: { JAVA } } = require('../../constants')
10
9
 
11
- const { srvNode4, srvJava4, hdbDeployer, serviceManager, hdiContainer, mtxSidecar4 } = require('../_merging/registry-mta')
10
+ const { srv4, hdbDeployer, serviceManager, hdiContainer, mtxSidecar4 } = require('../../registries/mta')
12
11
 
13
- module.exports = class HanaTemplate extends require('../templateBase') {
12
+ module.exports = class HanaTemplate extends require('../../plugin') {
14
13
 
15
- static hasFacet(env) {
14
+ static hasInProduction(env) {
16
15
  return env.requires?.db?.kind === 'hana'
17
16
  }
18
17
 
19
18
  async run() {
20
- const project = await readProject()
19
+ const project = readProject()
21
20
  const { isJava, configFile, db } = project
22
21
  project.shortcut = !(await read(configFile)).cds?.requires?.db?.kind
23
22
 
24
- // REVISIT: Let cds build generate by default
25
- const hdiConfigPath = join(db.folder, 'src', '.hdiconfig')
26
- const hdiConfigTemplatePath = join(__dirname, 'files', 'src', '.hdiconfig')
27
- await mergeJSON(hdiConfigPath, hdiConfigTemplatePath)
28
-
29
- // REVISIT: Let csd build generate by default
30
- const undeployJSONPath = join(db.folder, 'undeploy.json')
31
- const undeployJSONTemplatePath = join(__dirname, 'files', 'undeploy.json')
32
- await mergeJSON(undeployJSONPath, undeployJSONTemplatePath)
23
+ // REVISIT: Let cds build generate those by default
24
+ await merge(__dirname, 'files/src/.hdiconfig').into(join(db.folder, 'src/.hdiconfig'))
25
+ await merge(__dirname, 'files/undeploy.json').into(join(db.folder, 'undeploy.json'))
33
26
 
34
27
  if (isJava) {
35
28
  await copy(join(__dirname, 'files', 'db')).to(db.folder)
@@ -38,7 +31,7 @@ module.exports = class HanaTemplate extends require('../templateBase') {
38
31
  if (!cds.cli.options.add.has(JAVA)) await mvn.execMvn(mvn.getAddHanaCmdArgs())
39
32
  }
40
33
 
41
- await mergeJSON(configFile, join(__dirname, 'files', 'package.json.hbs'), project, { forceOverwrite: true }) // REVISIT: forceOverwrite: true as default?
34
+ await merge(__dirname, 'files/package.json.hbs').into(configFile, { with: project, forceOverwrite: true }) // REVISIT: forceOverwrite: true as default?
42
35
 
43
36
  const packageJson = exists('package.json') ? await read('package.json') : null
44
37
  if (packageJson?.dependencies) {
@@ -47,14 +40,14 @@ module.exports = class HanaTemplate extends require('../templateBase') {
47
40
  }
48
41
  }
49
42
 
50
- async runDependentMerging(context = {}) {
51
- const project = await readProject()
52
- const { hasMta, hasHelm, hasHtml5Repo, isJava, isMultitenant, srvPath } = project
43
+ async combine() {
44
+ const project = readProject()
45
+ const { hasMta, hasHelm, hasHelmUnifiedRuntime, hasHtml5Repo, isJava, hasMultitenancy, srvPath } = project
53
46
 
54
47
  if (hasMta) {
55
- const srv = (isJava ? srvJava4 : srvNode4)(srvPath)
56
- const db = isMultitenant ? serviceManager : hdiContainer
57
- const deletions = isMultitenant ? [{
48
+ const srv = srv4(srvPath)
49
+ const db = hasMultitenancy ? serviceManager : hdiContainer
50
+ const deletions = hasMultitenancy ? [{
58
51
  item: hdbDeployer,
59
52
  relationships: [{
60
53
  removeProperty: 'name',
@@ -73,7 +66,7 @@ module.exports = class HanaTemplate extends require('../templateBase') {
73
66
  into: [srv, 'requires', 'name']
74
67
  }]
75
68
 
76
- if (isMultitenant) {
69
+ if (hasMultitenancy) {
77
70
  relationships.push({
78
71
  insert: [serviceManager, 'name'],
79
72
  into: [mtxSidecar4(isJava ? 'mtx/sidecar' : 'gen/mtx/sidecar'), 'requires', 'name']
@@ -85,104 +78,25 @@ module.exports = class HanaTemplate extends require('../templateBase') {
85
78
  })
86
79
  }
87
80
 
88
- const modules = isMultitenant ? [srv] : [srv, hdbDeployer]
81
+ const modules = hasMultitenancy ? [srv] : [srv, hdbDeployer]
89
82
 
90
- await mergeYAML('mta.yaml', join(__dirname, 'files', 'mta.yaml.hbs'), project, {
83
+ await merge(__dirname, 'files/mta.yaml.hbs').into('mta.yaml', { with: project,
91
84
  additions: [...modules, db].filter(a => a), deletions, relationships
92
85
  })
93
86
  }
94
87
 
95
- if (hasHelm) {
96
- //in case facet is being added to the already exisiting charts folder
97
- let shouldUpdateTrackingFile = false;
98
- if(Object.keys(context).length == 0){
99
- shouldUpdateTrackingFile = true;
100
- context.oldTrackingData = context.newTrackingData = await parseMd5File(join('chart', '.cds-add-helm-files.md5'));
101
- }
102
-
103
- const HelmTemplate = require(`../helm`);
104
- const helmTemplate = new HelmTemplate(context.oldTrackingData, context.newTrackingData);
105
-
106
- if(isMultitenant){
107
- shouldUpdateTrackingFile = true;
108
-
109
- // remove hana entries from values.yaml
110
- await removeFromYAML(join('chart', 'values.yaml'), ['hana-deployer', 'srv.bindings.db', 'hana']);
88
+ if (hasHelm || hasHelmUnifiedRuntime) {
89
+ if (hasMultitenancy) {
90
+ await removeFromYAML(join('chart', 'values.yaml'), ['hana-deployer', 'srv.bindings.db', 'hana'])
91
+ await removeFromYAMLArray(join('chart', 'Chart.yaml'), 'dependencies', 'hana')
92
+ await removeFromYAMLArray(join('chart', 'Chart.yaml'), 'dependencies', 'hana-deployer')
111
93
 
112
- // remove hana entries from Chart.yaml
113
- await removeFromYAMLArray(join('chart', 'Chart.yaml'), 'dependencies', 'hana-deployer');
114
-
115
- // remove content-deployment subchart if html5Repo doesn't exist
116
- if(!hasHtml5Repo) {
117
- const contentDeploymentEntriesPattern = "charts/content-deployment/"
118
- this.removeEntriesFromContext(context, contentDeploymentEntriesPattern);
119
-
120
- const contentDeploymentSubchartPath = join('chart', 'charts', 'content-deployment');
121
- if(exists(contentDeploymentSubchartPath)) {
122
- await rmdir(contentDeploymentSubchartPath);
123
- }
94
+ if (!hasHtml5Repo) {
95
+ await rimraf('chart/charts/content-deployment') // REVISIT: Move to build task
124
96
  }
125
-
126
- //remove dependency since mtx plugin is added
127
- const isInternal = await helmTemplate.isInternal();
128
- await mergeYAML(
129
- join('chart', 'Chart.yaml'),
130
- {
131
- dependencies: [
132
- {
133
- name: 'service-instance',
134
- alias: 'hana',
135
- version: '>0.0.0',
136
- ...(isInternal) && { repository: 'https://int.repositories.cloud.sap/artifactory/virtual-unified-runtime-helm-dmz' }
137
- }
138
- ]
139
- },
140
- project,
141
- { deletions: [{
142
- item: {
143
- in: `dependencies`,
144
- where: [{
145
- property: 'alias',
146
- isEqualTo: 'hana'
147
- }]
148
- }
149
- }]}
150
- )
151
97
  } else {
152
- await mergeYAML(
153
- join('chart', 'values.yaml'),
154
- join(__dirname, 'files', 'values.yaml.hbs'),
155
- project
156
- )
157
-
158
- // copy content deployment chart if it is not present
159
- shouldUpdateTrackingFile = shouldUpdateTrackingFile | await helmTemplate.addSubChart('content-deployment');
160
-
161
- // add dependency entry in chart.yaml
162
- await helmTemplate.addDependency('content-deployment', 'hana-deployer');
163
-
164
- // add service instance chart if it is not present
165
- shouldUpdateTrackingFile = shouldUpdateTrackingFile | await helmTemplate.addSubChart('service-instance');
166
-
167
- // add dependency entry in chart.yaml
168
- await helmTemplate.addDependency('service-instance', 'hana');
98
+ await merge(__dirname, 'files', 'values.yaml.hbs').into('chart/values.yaml', { with: project })
169
99
  }
170
- if(shouldUpdateTrackingFile) await writeMd5File(join('chart', '.cds-add-helm-files.md5'), context.newTrackingData);
171
100
  }
172
101
  }
173
-
174
- // REVISIT: tracking data massaging is getting too much -> revisit md5 tracking
175
- removeEntriesFromContext(context, key) {
176
- Object.keys(context.oldTrackingData).forEach(fileName => {
177
- if (fileName.startsWith(key)) {
178
- delete context.oldTrackingData[fileName]
179
- }
180
- })
181
-
182
- Object.keys(context.newTrackingData).forEach(fileName => {
183
- if (fileName.startsWith(key)) {
184
- delete context.newTrackingData[fileName]
185
- }
186
- })
187
- }
188
102
  }
@@ -0,0 +1,12 @@
1
+ {{- printf "Thank you for installing %s version %s." .Chart.Name .Chart.Version }}
2
+
3
+ {{ printf "The release %s is installed in namespace %s." .Release.Name .Release.Namespace }}
4
+
5
+ Your services are available at:
6
+ {{- $root := . }}
7
+ {{- range $name := include "cap.deploymentNames" . | split ";" }}
8
+ {{- $deployment := (get $root.Values $name) }}
9
+ {{- $ := merge (dict "name" $name "deployment" $deployment) $root }}
10
+ {{- $url := include "cap.deploymentHostFull" $ }}
11
+ {{ printf "%s - https://%s" $name $url }}
12
+ {{- end }}