@sap/cds-dk 6.6.2 → 6.7.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 (117) hide show
  1. package/CHANGELOG.md +36 -1
  2. package/bin/add.js +5 -3
  3. package/bin/build/all.js +1 -1
  4. package/bin/cds.js +10 -8
  5. package/bin/env.js +4 -6
  6. package/bin/login.js +6 -4
  7. package/bin/migrate.js +0 -1
  8. package/bin/repl.js +1 -1
  9. package/bin/serve.js +7 -0
  10. package/bin/subscribe.js +5 -5
  11. package/bin/unsubscribe.js +4 -5
  12. package/bin/upgrade.js +67 -0
  13. package/bin/watch.js +8 -5
  14. package/lib/bind/bindingManager.js +3 -2
  15. package/lib/bind/cfKeyProvider.js +7 -6
  16. package/lib/bind/userCdsrcJsonStorageProvider.js +5 -4
  17. package/lib/cds.js +12 -0
  18. package/lib/client/activate.js +4 -3
  19. package/lib/client/auth_manager.js +4 -3
  20. package/lib/client/base_command.js +7 -2
  21. package/lib/client/helper/cf_helper.js +12 -11
  22. package/lib/client/helper/dependency_helper.js +3 -2
  23. package/lib/client/helper/logging.js +0 -7
  24. package/lib/client/params.js +4 -2
  25. package/lib/client/settings_manager.js +35 -34
  26. package/lib/client/tenant_action.js +78 -0
  27. package/lib/init/constants.js +1 -1
  28. package/lib/init/index.js +4 -4
  29. package/lib/init/template/_merging/registry-mta.js +31 -46
  30. package/lib/init/template/approuter/files/mta.yaml.hbs +12 -8
  31. package/lib/init/template/approuter/files/xs-app.json.hbs +0 -3
  32. package/lib/init/template/approuter/index.js +26 -34
  33. package/lib/init/template/auditlog/files/mta.yaml.hbs +2 -1
  34. package/lib/init/template/auditlog/index.js +8 -21
  35. package/lib/init/template/cf-manifest/files/manifest.yml.hbs +4 -4
  36. package/lib/init/template/cf-manifest/index.js +2 -1
  37. package/lib/init/template/connectivity/index.js +4 -5
  38. package/lib/init/template/data/index.js +19 -22
  39. package/lib/init/template/destinations/index.js +5 -17
  40. package/lib/init/template/enterprise-messaging/files/mta.yaml.hbs +2 -1
  41. package/lib/init/template/enterprise-messaging/index.js +7 -19
  42. package/lib/init/template/extensibility/index.js +3 -1
  43. package/lib/init/template/hana/files/mta.yaml.hbs +4 -5
  44. package/lib/init/template/hana/index.js +49 -84
  45. package/lib/init/template/helm/chart/templates/_helpers.tpl +4 -1
  46. package/lib/init/template/helm/files/Chart.yaml.hbs +1 -4
  47. package/lib/init/template/helm/index.js +45 -13
  48. package/lib/init/template/helm/subcharts/web-application/templates/_helpers.tpl +21 -31
  49. package/lib/init/template/helm/subcharts/web-application/templates/api-rule.yaml +3 -12
  50. package/lib/init/template/helm/subcharts/web-application/templates/deployment.yaml +12 -14
  51. package/lib/init/template/helm/subcharts/web-application/templates/network-policy.yaml +27 -4
  52. package/lib/init/template/helm/subcharts/web-application/templates/pod-disruption-budget.yaml +0 -2
  53. package/lib/init/template/helm/subcharts/web-application/templates/secret.yaml +2 -2
  54. package/lib/init/template/helm/subcharts/web-application/templates/service-account.yaml +2 -2
  55. package/lib/init/template/helm/subcharts/web-application/templates/service-binding.yaml +16 -13
  56. package/lib/init/template/helm/subcharts/web-application/templating.md +16 -9
  57. package/lib/init/template/helm/subcharts/web-application/values.md +317 -379
  58. package/lib/init/template/helm/subcharts/web-application/values.schema.json +87 -107
  59. package/lib/init/template/helm/subcharts/web-application/values.yaml +28 -2
  60. package/lib/init/template/html5-repo/index.js +6 -29
  61. package/lib/init/template/java/index.js +1 -1
  62. package/lib/init/template/kibana-logging/files/mta.yaml.hbs +2 -1
  63. package/lib/init/template/kibana-logging/index.js +5 -8
  64. package/lib/init/template/lint/index.js +8 -8
  65. package/lib/init/template/mta/files/mta.yaml.hbs +3 -2
  66. package/lib/init/template/mta/index.js +3 -2
  67. package/lib/init/template/multitenancy/files/mta.yaml.hbs +25 -31
  68. package/lib/init/template/multitenancy/files/{java/mtxs-configmap.yaml → mtxs-configmap-java.yaml} +1 -1
  69. package/lib/init/template/multitenancy/files/{mtxs-configmap.yaml → mtxs-configmap-nodejs.yaml} +5 -1
  70. package/lib/init/template/multitenancy/files/package.json.hbs +28 -0
  71. package/lib/init/template/multitenancy/files/package.sidecar.json.hbs +21 -0
  72. package/lib/init/template/multitenancy/files/values.yaml.hbs +16 -9
  73. package/lib/init/template/multitenancy/index.js +51 -99
  74. package/lib/init/template/nodejs/files/.vscode/extensions.json +1 -2
  75. package/lib/init/template/nodejs/files/.vscode/launch.json +2 -2
  76. package/lib/init/template/nodejs/files/.vscode/tasks.json +2 -2
  77. package/lib/init/template/nodejs/files/package.json.hbs +2 -2
  78. package/lib/init/template/nodejs/index.js +4 -3
  79. package/lib/init/template/pipeline/index.js +3 -2
  80. package/lib/init/template/samples/index.js +5 -4
  81. package/lib/init/template/sqlite/files/package.json.hbs +19 -0
  82. package/lib/init/template/sqlite/index.js +11 -0
  83. package/lib/init/template/toggles/index.js +3 -5
  84. package/lib/init/template/xsuaa/files/mta.yaml.hbs +4 -5
  85. package/lib/init/template/xsuaa/files/values.yaml.hbs +0 -2
  86. package/lib/init/template/xsuaa/index.js +14 -35
  87. package/lib/init/util/commandUtil.js +3 -2
  88. package/lib/init/util/fsUtil.js +19 -2
  89. package/lib/init/util/md5Tracking.js +36 -63
  90. package/lib/init/util/projectReader.js +12 -26
  91. package/lib/lint/Linter.js +0 -3
  92. package/lib/util/exec.js +2 -1
  93. package/lib/util/term.js +1 -1
  94. package/lib/watch/livereload-connect.js +5 -4
  95. package/lib/watch/livereload-server.js +3 -6
  96. package/lib/watch/node-watch.js +1 -1
  97. package/npm-shrinkwrap.json +569 -479
  98. package/package.json +4 -4
  99. package/readme.md +1 -1
  100. package/lib/client/subscription.js +0 -84
  101. package/lib/init/template/approuter/files/chart.yaml +0 -4
  102. package/lib/init/template/auditlog/files/auditlog.yaml +0 -4
  103. package/lib/init/template/destinations/files/destination.yaml +0 -4
  104. package/lib/init/template/enterprise-messaging/files/event-mesh.yaml +0 -4
  105. package/lib/init/template/hana/files/hana-deployer.yaml +0 -4
  106. package/lib/init/template/hana/files/hana.yaml +0 -4
  107. package/lib/init/template/html5-repo/files/html5-apps-deployer.yaml +0 -4
  108. package/lib/init/template/html5-repo/files/html5-apps-repo-host.yaml +0 -4
  109. package/lib/init/template/multitenancy/files/cds.package.json +0 -7
  110. package/lib/init/template/multitenancy/files/cds.package.json.hbs +0 -9
  111. package/lib/init/template/multitenancy/files/dependencies.package.json +0 -5
  112. package/lib/init/template/multitenancy/files/java/.cdsrc.json +0 -22
  113. package/lib/init/template/multitenancy/files/java/package.json +0 -33
  114. package/lib/init/template/multitenancy/files/saas-registry.yaml +0 -4
  115. package/lib/init/template/multitenancy/files/service-manager.yaml +0 -4
  116. package/lib/init/template/multitenancy/files/sidecar.yaml +0 -4
  117. package/lib/init/template/xsuaa/files/xsuaa.yaml +0 -4
@@ -0,0 +1,28 @@
1
+ {
2
+ {{#cap.isNodejs}}
3
+ "dependencies": {
4
+ "@sap/cds-mtxs": "^1"
5
+ },
6
+ {{/cap.isNodejs}}
7
+ "cds": {
8
+ {{#cap.isJava}}
9
+ "profiles": ["with-mtx-sidecar", "java"],
10
+ "build": {
11
+ "target": "."
12
+ },
13
+ {{/cap.isJava}}
14
+ {{#cap.isNodejs}}
15
+ "profile": "with-mtx-sidecar",
16
+ {{/cap.isNodejs}}
17
+ "requires": {
18
+ {{#cap.for}}
19
+ "[{{cap.for}}]": {
20
+ "multitenancy": true
21
+ }
22
+ {{/cap.for}}
23
+ {{^cap.for}}
24
+ "multitenancy": true
25
+ {{/cap.for}}
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "{{cap.appName}}-mtx",
3
+ "dependencies": {
4
+ "@sap/cds": "^6",
5
+ "@sap/cds-mtxs": "^1",
6
+ "@sap/xssec": "^3",
7
+ "express": "^4",
8
+ "hdb": "^0",
9
+ "passport": "^0.6.0"
10
+ },
11
+ "devDependencies": {
12
+ "sqlite3": "^5"
13
+ },
14
+ "scripts": {
15
+ "start": "cds-serve"{{#cap.isJava}},
16
+ "build": "npm ci && npx -p @sap/cds-dk@^6 cds build ../.. --for mtx-sidecar --production && cd gen && npm ci"{{/cap.isJava}}
17
+ },
18
+ "cds": {
19
+ "profile": "mtx-sidecar"
20
+ }
21
+ }
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  srv:
3
3
  bindings:
4
+ {{#cap.isJava}}
4
5
  saas-registry:
5
6
  serviceInstanceName: saas-registry
7
+ {{/cap.isJava}}
6
8
  service-manager:
7
9
  serviceInstanceName: service-manager
8
10
  {{#cap.hasXsuaa}}
@@ -22,26 +24,32 @@ saasRegistryParameters:
22
24
  displayName: {{cap.appName}}
23
25
  description: {{cap.appDescription}}
24
26
  category: "CAP Application"
25
- appUrls:
26
27
  {{#cap.isNodejs}}
28
+ bindSidecar: true
29
+ {{/cap.isNodejs}}
30
+ appUrls:
31
+ {{#cap.isNodejs}}
27
32
  getDependencies: "/-/cds/saas-provisioning/dependencies"
28
33
  onSubscription: "/-/cds/saas-provisioning/tenant/{tenantId}"
29
- {{/cap.isNodejs}}
30
- {{#cap.isJava}}
34
+ {{/cap.isNodejs}}
35
+ {{#cap.isJava}}
31
36
  getDependencies: "/mt/v1.0/subscriptions/dependencies"
32
37
  onSubscription: "/mt/v1.0/subscriptions/tenants/{tenantId}"
33
- {{/cap.isJava}}
38
+ {{/cap.isJava}}
34
39
  onSubscriptionAsync: true
35
40
  onUnSubscriptionAsync: true
36
41
  onUpdateDependenciesAsync: true
37
42
  callbackTimeoutMillis: 300000
38
- {{#cap.isJava}}
39
43
  sidecar:
40
44
  bindings:
41
- {{#cap.hasXsuaa}}
45
+ {{#cap.hasXsuaa}}
42
46
  auth:
43
47
  serviceInstanceName: xsuaa
44
- {{/cap.hasXsuaa}}
48
+ {{/cap.hasXsuaa}}
49
+ {{#cap.isNodejs}}
50
+ saas-registry:
51
+ serviceInstanceName: saas-registry
52
+ {{/cap.isNodejs}}
45
53
  service-manager:
46
54
  serviceInstanceName: service-manager
47
55
  image:
@@ -55,9 +63,8 @@ sidecar:
55
63
  ephemeral-storage: 1G
56
64
  cpu: 500m
57
65
  memory: 500M
58
- health_check:
66
+ health:
59
67
  liveness:
60
68
  path: /
61
69
  readiness:
62
70
  path: /
63
- {{/cap.isJava}}
@@ -1,15 +1,16 @@
1
1
  const { join } = require('path')
2
2
  const cds = require('../../../cds')
3
- const { copy, exists } = cds.utils
3
+ const { exists } = cds.utils
4
4
  const { readProject } = require('../../util/projectReader')
5
5
  const { mergeJSON, mergeYAML, sortDependencies } = require('../../util/merge')
6
6
  const { copyAndTrack, parseMd5File, writeMd5File } = require('../../util/md5Tracking')
7
+ const { copyRenderedJSON } = require('../../util/fsUtil')
7
8
  const {
8
9
  srvNode, srvJava, // Server
9
- mtxSidecar, // Additional Modules
10
+ mtxSidecar4, // Additional Modules
10
11
  saasRegistry, serviceManager, xsuaa, // BTP Services
11
- providedMtxAPISrv, providedMtxAPISidecar, srvAPI, providedMtxSidecarAPI, requiredMtxSidecarAPI // APIs
12
- } = require('../_merging/registry-mta');
12
+ srvAPI, providedMtxAPISidecar4, requiredMtxSidecarAPI // APIs
13
+ } = require('../_merging/registry-mta')
13
14
 
14
15
  module.exports = class MultitenancyTemplate extends require('../templateBase') {
15
16
 
@@ -17,82 +18,73 @@ module.exports = class MultitenancyTemplate extends require('../templateBase') {
17
18
  // REVISIT: Check if this can be simplified
18
19
  return options?.add?.has('mtx') || options?.add?.has('multitenancy') ||
19
20
  !!env.requires?.multitenancy || !!env.requires?.db?.multiTenant ||
20
- this.isJava && exists(join('mtx', 'sidecar')) || false
21
+ exists(join('mtx', 'sidecar')) || false
21
22
  }
22
23
 
23
24
  async run() {
24
25
  const projectDescriptor = await readProject(this.options)
25
- const { for: forProfile, isNodejs, isJava } = projectDescriptor.cap
26
- if (isNodejs) {
27
- const packageJSONPath = join(this.projectPath, 'package.json')
28
- const cdsTemplateFile = forProfile ? 'cds.package.json.hbs' : 'cds.package.json'
29
- await mergeJSON(packageJSONPath, join(__dirname, 'files', cdsTemplateFile), projectDescriptor)
30
- await mergeJSON(packageJSONPath, join(__dirname, 'files', 'dependencies.package.json'))
31
- await sortDependencies(packageJSONPath)
32
- } else if (isJava) {
33
- const cdsrcJSONPath = join(this.projectPath, '.cdsrc.json')
34
- await mergeJSON(cdsrcJSONPath, join(__dirname, 'files', 'java', '.cdsrc.json'))
35
- await copy(join(__dirname, 'files', 'java', 'package.json'), join(this.projectPath, 'mtx', 'sidecar', 'package.json'))
36
- }
26
+ const { isNodejs } = projectDescriptor.cap
27
+ await mergeJSON('package.json', join(__dirname, 'files', `package.json.hbs`), projectDescriptor)
28
+ if (isNodejs) await sortDependencies('package.json')
29
+ await copyRenderedJSON(join(__dirname, 'files', 'package.sidecar.json.hbs'), join('mtx', 'sidecar', 'package.json'), projectDescriptor)
37
30
  await this.runDependentMerging()
38
31
  }
39
32
 
40
33
  async runDependentMerging(context = {}) {
41
34
  const projectDescriptor = await readProject()
42
- const { isNodejs, isJava, hasMta, hasHelm, hasApprouter, hasXsuaa, hasHana } = projectDescriptor.cap
35
+ const { isNodejs, isJava, hasMta, hasHelm, hasApprouter, hasXsuaa, hasHana, srvPath } = projectDescriptor.cap
43
36
 
44
37
  if (hasMta) {
45
- const modules = isNodejs ? [srvNode] : [srvJava, mtxSidecar]
46
- const srv = isNodejs ? srvNode : srvJava
38
+ const srv = (isNodejs ? srvNode : srvJava)(srvPath)
39
+ const mtxSidecar = mtxSidecar4(isJava ? 'mtx/sidecar' : 'gen/mtx/sidecar')
40
+ const modules = [srv, mtxSidecar]
47
41
  const services = [saasRegistry]
48
42
  if (hasXsuaa) services.push(xsuaa)
49
- const apis = isNodejs ? [providedMtxAPISrv] : [srvAPI, providedMtxAPISidecar, providedMtxSidecarAPI, requiredMtxSidecarAPI]
43
+ const apis = [srvAPI(srv), providedMtxAPISidecar4(mtxSidecar)]
44
+ if (isJava) apis.push(requiredMtxSidecarAPI(srv))
50
45
  const additions = [...modules, ...services, ...apis]
51
46
 
52
- const overwrites = hasXsuaa ? [{ item: [xsuaa, 'parameters.config.tenant-mode'], withValue: 'shared'}] : []
47
+ const overwrites = hasXsuaa ? [{ item: [xsuaa, 'parameters.config.tenant-mode'], withValue: 'shared' }] : []
53
48
 
54
49
  const relationships = [{
55
50
  insert: [saasRegistry, 'name'],
56
- into: [srv, 'requires', 'name']
51
+ into: [isJava ? srv : mtxSidecar, 'requires', 'name']
57
52
  }]
58
- if (isJava) {
59
- if (hasXsuaa) {
60
- relationships.push({
61
- insert: [xsuaa, 'name'],
62
- into: [mtxSidecar, 'requires', 'name']
63
- })
64
- }
65
- if (hasHana) {
66
- relationships.push({
67
- insert: [serviceManager, 'name'],
68
- into: [mtxSidecar, 'requires', 'name'],
69
- })
70
- }
53
+ if (hasXsuaa) {
54
+ relationships.push({
55
+ insert: [xsuaa, 'name'],
56
+ into: [mtxSidecar, 'requires', 'name']
57
+ })
58
+ }
59
+ if (hasHana) {
60
+ relationships.push({
61
+ insert: [serviceManager, 'name'],
62
+ into: [mtxSidecar, 'requires', 'name'],
63
+ })
71
64
  }
72
65
 
73
- const templateMtaPath = join(__dirname, `files`, `mta.yaml.hbs`)
74
- const mtaPath = join(this.projectPath, 'mta.yaml')
66
+ const templateMtaPath = join(__dirname, 'files', 'mta.yaml.hbs')
75
67
  const mergingRules = { additions, overwrites, relationships }
76
- await mergeYAML(mtaPath, templateMtaPath, projectDescriptor, mergingRules)
68
+ await mergeYAML('mta.yaml', templateMtaPath, projectDescriptor, mergingRules)
77
69
  }
78
70
 
71
+ // REVISIT: Why not just pass a Boolean from run() to indicate the merging isn't run transitively?
79
72
  let isIndependentCommand = false
80
73
  if (hasHelm) {
81
- //in case facet is being added to the already exisiting charts folder
74
+ // in case facet is being added to the already existing charts folder
82
75
  if (Object.keys(context).length == 0) {
83
76
  isIndependentCommand = true
84
- context.projectPath = this.projectPath
85
- context.oldTrackingData = context.newTrackingData = await parseMd5File(join(this.projectPath, 'chart', '.cds-add-helm-files.md5'))
77
+ context.oldTrackingData = context.newTrackingData = await parseMd5File(join('chart', '.cds-add-helm-files.md5'))
86
78
  }
87
79
 
88
80
  await mergeYAML(
89
- join(this.projectPath, 'chart', 'values.yaml'),
81
+ join('chart', 'values.yaml'),
90
82
  join(__dirname, 'files', 'values.yaml.hbs'),
91
83
  projectDescriptor
92
84
  )
93
85
 
94
86
  await mergeYAML(
95
- join(this.projectPath, 'chart', 'values.yaml'),
87
+ join('chart', 'values.yaml'),
96
88
  {
97
89
  srv: {
98
90
  envFrom: [
@@ -117,74 +109,34 @@ module.exports = class MultitenancyTemplate extends require('../templateBase') {
117
109
  projectDescriptor
118
110
  )
119
111
 
120
- if (isJava) {
121
- await mergeYAML(
122
- join(this.projectPath, 'chart', 'Chart.yaml'),
123
- join(__dirname, 'files', 'sidecar.yaml'),
124
- projectDescriptor,
125
- {
126
- additions: [{
127
- in: `dependencies`,
128
- where: [{
129
- property: 'alias',
130
- isEqualTo: 'sidecar'
131
- }]
132
- }]
133
- }
134
- )
135
- }
136
-
137
- // copy service-instance chart
112
+ // REVISIT: Don't reference other templates except for the safe `runDependentMerging` -> low coupling, high cohesion
138
113
  const HelmTemplate = require(`../helm`);
139
114
  const helmTemplate = new HelmTemplate(this.generator, context.oldTrackingData, context.newTrackingData);
140
- isIndependentCommand = isIndependentCommand | await helmTemplate.addSubChart('service-instance');
141
115
 
142
- // add dependency entry in chart.yaml
143
- await mergeYAML(
144
- join(this.projectPath, 'chart', 'Chart.yaml'),
145
- join(__dirname, 'files', 'saas-registry.yaml'),
146
- projectDescriptor,
147
- { additions: [{
148
- in: `dependencies`,
149
- where: [{
150
- property: 'alias',
151
- isEqualTo: 'saas-registry'
152
- }]
153
- }]}
154
- );
116
+ await helmTemplate.addDependency('web-application', 'sidecar');
155
117
 
156
- await mergeYAML(
157
- join(this.projectPath, 'chart', 'Chart.yaml'),
158
- join(__dirname, 'files', 'service-manager.yaml'),
159
- projectDescriptor,
160
- { additions: [{
161
- in: `dependencies`,
162
- where: [{
163
- property: 'alias',
164
- isEqualTo: 'service-manager'
165
- }]
166
- }]}
167
- );
118
+ // copy service-instance chart
119
+ isIndependentCommand = isIndependentCommand | await helmTemplate.addSubChart('service-instance');
168
120
 
169
- const mtxsConfigmapPath = isNodejs
170
- ? join(__dirname, 'files', 'mtxs-configmap.yaml')
171
- : join(__dirname, 'files', 'java', 'mtxs-configmap.yaml');
121
+ // add dependency entry in chart.yaml
122
+ await helmTemplate.addDependency('service-instance', 'saas-registry');
123
+ await helmTemplate.addDependency('service-instance', 'service-manager');
172
124
 
173
125
  // add mtxs configmap
174
126
  await copyAndTrack(
175
- mtxsConfigmapPath,
176
- join(this.projectPath, 'chart', 'templates', 'mtxs-configmap.yaml'),
177
- context
127
+ join(__dirname, 'files', `mtxs-configmap-${isJava ? 'java' : 'nodejs'}.yaml`),
128
+ join('chart', 'templates', 'mtxs-configmap.yaml'),
129
+ context,
178
130
  )
179
131
 
180
132
  // add saas registry secret
181
133
  await copyAndTrack(
182
134
  join(__dirname, 'files', 'saas-registry-secret.yaml'),
183
- join(this.projectPath, 'chart', 'templates', 'saas-registry-secret.yaml'),
135
+ join('chart', 'templates', 'saas-registry-secret.yaml'),
184
136
  context
185
137
  );
186
138
 
187
- if (isIndependentCommand) await writeMd5File(join(this.projectPath, 'chart', '.cds-add-helm-files.md5'), context.newTrackingData)
139
+ if (isIndependentCommand) await writeMd5File(join('chart', '.cds-add-helm-files.md5'), context.newTrackingData)
188
140
  }
189
141
 
190
142
  if (hasApprouter) {
@@ -201,7 +153,7 @@ module.exports = class MultitenancyTemplate extends require('../templateBase') {
201
153
 
202
154
  if (hasXsuaa) {
203
155
  await mergeJSON(
204
- join(this.projectPath, 'xs-security.json'),
156
+ 'xs-security.json',
205
157
  join(__dirname, 'files', 'xs-security.json.hbs'),
206
158
  projectDescriptor,
207
159
  {
@@ -215,7 +167,7 @@ module.exports = class MultitenancyTemplate extends require('../templateBase') {
215
167
 
216
168
  if (hasXsuaa && hasHelm) {
217
169
  await mergeYAML(
218
- join(this.projectPath, 'chart', 'values.yaml'),
170
+ join('chart', 'values.yaml'),
219
171
  {
220
172
  xsuaa: {
221
173
  parameters: {
@@ -226,7 +178,7 @@ module.exports = class MultitenancyTemplate extends require('../templateBase') {
226
178
  null,
227
179
  { forceOverwrite: true }
228
180
  )
229
- if (isIndependentCommand) await writeMd5File(join(this.projectPath, 'chart', '.cds-add-helm-files.md5'), context.newTrackingData)
181
+ if (isIndependentCommand) await writeMd5File(join('chart', '.cds-add-helm-files.md5'), context.newTrackingData)
230
182
  }
231
183
  }
232
184
  }
@@ -8,9 +8,8 @@
8
8
  "dbaeumer.vscode-eslint",
9
9
  "esbenp.prettier-vscode",
10
10
  "mechatroner.rainbow-csv",
11
+ "qwtel.sqlite-viewer",
11
12
  "humao.rest-client",
12
- "alexcvzz.vscode-sqlite",
13
- "hbenl.vscode-mocha-test-adapter",
14
13
  "sdras.night-owl"
15
14
  ],
16
15
  // List of extensions recommended by VS Code that should not be recommended for users of this workspace.
@@ -5,8 +5,8 @@
5
5
  "version": "0.2.0",
6
6
  "configurations": [
7
7
  {
8
- "command": "cds run --with-mocks --in-memory?",
9
- "name": "cds run",
8
+ "command": "cds serve --with-mocks --in-memory?",
9
+ "name": "cds serve",
10
10
  "request": "launch",
11
11
  "type": "node-terminal",
12
12
  "skipFiles": [ "<node_internals>/**" ]
@@ -16,9 +16,9 @@
16
16
  },
17
17
  {
18
18
  "type": "shell",
19
- "label": "cds run",
19
+ "label": "cds serve",
20
20
  "command": "cds",
21
- "args": ["run", "--with-mocks", "--in-memory?"],
21
+ "args": ["serve", "--with-mocks", "--in-memory?"],
22
22
  "problemMatcher": []
23
23
  }
24
24
  ]
@@ -10,9 +10,9 @@
10
10
  "express": "^4"
11
11
  },
12
12
  "devDependencies": {
13
- "sqlite3": "^5.0.4"
13
+ "sqlite3": "^5"
14
14
  },
15
15
  "scripts": {
16
- "start": "cds run"
16
+ "start": "cds-serve"
17
17
  }
18
18
  }
@@ -1,5 +1,6 @@
1
1
  const { join, relative } = require('path');
2
- const { mkdirp } = require('../../../cds').utils
2
+ const cds = require('../../../cds')
3
+ const { mkdirp } = cds.utils
3
4
  const { COMMAND_ADD, OPTION_JAVA, OPTION_NODEJS, URLS } = require('../../constants')
4
5
  const { copyFiles } = require('../../util/templateUtil')
5
6
  const LOG = console
@@ -8,7 +9,7 @@ module.exports = class NodejsTemplate extends require('../templateBase') {
8
9
 
9
10
  static hasFacet() {
10
11
  // TODO: Implement
11
- //return this.pLanguage === P_LANGUAGE_NODEJS
12
+ //return this.language === P_LANGUAGE_NODEJS
12
13
  }
13
14
 
14
15
  async canRun() {
@@ -34,7 +35,7 @@ module.exports = class NodejsTemplate extends require('../templateBase') {
34
35
  }
35
36
 
36
37
  async finalize() {
37
- const relativeProjectPath = relative(this.cwd, this.projectPath);
38
+ const relativeProjectPath = relative(this.cwd, cds.root);
38
39
  if (relativeProjectPath && relativeProjectPath !== '.') {
39
40
  LOG.info(`Continue with 'cd ${relativeProjectPath}'`);
40
41
  }
@@ -1,5 +1,6 @@
1
1
  const { join } = require('path');
2
- const { exists } = require('../../../cds').utils
2
+ const cds = require('../../../cds')
3
+ const { exists } = cds.utils
3
4
  const { copyFiles } = require('../../util/templateUtil')
4
5
  const { URLS } = require('../../constants')
5
6
  const LOG = console
@@ -20,7 +21,7 @@ module.exports = class PipelineTemplate extends require('../templateBase') {
20
21
  }
21
22
 
22
23
  async run() {
23
- await copyFiles(join(__dirname, 'files'), this.projectPath, {}, this.options.force);
24
+ await copyFiles(join(__dirname, 'files'), cds.root, {}, this.options.force);
24
25
  }
25
26
 
26
27
  async finalize() {
@@ -1,4 +1,5 @@
1
1
  const { join } = require('path');
2
+ const cds = require('../../../cds')
2
3
  const { copyFiles } = require('../../util/templateUtil')
3
4
  const commandUtil = require('../../util/commandUtil');
4
5
  const mvnArchetypes = require('../../util/mvnArchetypeUtil');
@@ -30,12 +31,12 @@ module.exports = class SamplesTemplate extends require('../templateBase') {
30
31
  const mvnAddSamplesArgs = mvnArchetypes.getAddSamplesCmdArgs(this.options);
31
32
  try {
32
33
  await commandUtil.spawnCommand('mvn', mvnAddSamplesArgs, {
33
- cwd: this.projectPath
34
+ cwd: cds.root
34
35
  });
35
36
 
36
37
  const mvnAddTestsArgs = mvnArchetypes.getAddTestsCmdArgs(this.options);
37
38
  await commandUtil.spawnCommand('mvn', mvnAddTestsArgs, {
38
- cwd: this.projectPath
39
+ cwd: cds.root
39
40
  });
40
41
  } catch (err) {
41
42
  if (err.code === 'ENOENT' && err.path === 'mvn') {
@@ -48,10 +49,10 @@ module.exports = class SamplesTemplate extends require('../templateBase') {
48
49
 
49
50
  async _addNodejsSamples() {
50
51
  const { db, srv } = (await this.getEnv()).folders;
51
- const dbFolder = join(this.projectPath, db);
52
+ const dbFolder = join(cds.root, db);
52
53
  await copyFiles(join(__dirname, 'files', 'nodejs', 'db'), dbFolder, {}, this.options.force);
53
54
 
54
- const srvFolder = join(this.projectPath, srv);
55
+ const srvFolder = join(cds.root, srv);
55
56
  await copyFiles(join(__dirname, 'files', 'nodejs', 'srv'), srvFolder, {
56
57
  dbFolder: db.replace(/[\\/]+$/, '')
57
58
  }, this.options.force);
@@ -0,0 +1,19 @@
1
+ {
2
+ {{#cap.isNodejs}}
3
+ "devDependencies": {
4
+ "sqlite3": "^5"
5
+ },
6
+ {{/cap.isNodejs}}
7
+ "cds": {
8
+ "requires": {
9
+ {{#cap.for}}
10
+ "[{{cap.for}}]": {
11
+ "db": "sqlite"
12
+ }
13
+ {{/cap.for}}
14
+ {{^cap.for}}
15
+ "db": "sqlite"
16
+ {{/cap.for}}
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,11 @@
1
+ const { join } = require('path')
2
+ const { readProject } = require('../../util/projectReader')
3
+ const { mergeJSON } = require('../../util/merge')
4
+
5
+ module.exports = class SQLiteTemplate extends require('../templateBase') {
6
+
7
+ async run() {
8
+ const projectDescriptor = await readProject(this.options)
9
+ await mergeJSON('package.json', join(__dirname, 'files', `package.json.hbs`), projectDescriptor)
10
+ }
11
+ }
@@ -12,14 +12,12 @@ module.exports = class TogglesTemplate extends require('../templateBase') {
12
12
  const projectDescriptor = await readProject(this.options)
13
13
  const { for: forProfile, isNodejs, isJava } = projectDescriptor.cap
14
14
  if (isNodejs) {
15
- const packageJSONPath = join(this.projectPath, 'package.json')
16
15
  const cdsTemplateFile = forProfile ? 'cds.package.json.hbs' : 'cds.package.json'
17
- await mergeJSON(packageJSONPath, join(__dirname, 'files', cdsTemplateFile), projectDescriptor)
18
- await sortDependencies(packageJSONPath)
16
+ await mergeJSON('package.json', join(__dirname, 'files', cdsTemplateFile), projectDescriptor)
17
+ await sortDependencies('package.json')
19
18
  } else if (isJava) {
20
- const cdsrcPath = join(this.projectPath, '.cdsrc.json')
21
19
  const cdsTemplateFile = join(__dirname, 'files', forProfile ? 'cdsrc.json.hbs' : 'cdsrc.json')
22
- await mergeJSON(cdsrcPath, cdsTemplateFile, projectDescriptor)
20
+ await mergeJSON('.cdsrc.json', cdsTemplateFile, projectDescriptor)
23
21
  }
24
22
  await this.runDependentMerging()
25
23
  }
@@ -1,19 +1,18 @@
1
1
  ---
2
2
  modules:
3
3
  - name: {{cap.appName}}-srv
4
- type: {{cap.pLanguage}}
4
+ type: {{cap.language}}
5
+ path: {{& cap.srvPath}}
5
6
  requires:
6
7
  - name: {{cap.appName}}-auth
7
8
 
8
- {{#cap.isJava}}
9
9
  {{#cap.isMultitenant}}
10
- - name: {{cap.appName}}-mtx-sidecar
10
+ - name: {{cap.appName}}-mtx
11
11
  type: nodejs
12
- path: mtx/sidecar
12
+ path: {{#cap.isNodejs}}gen/{{/cap.isNodejs}}mtx/sidecar
13
13
  requires:
14
14
  - name: {{cap.appName}}-auth
15
15
  {{/cap.isMultitenant}}
16
- {{/cap.isJava}}
17
16
 
18
17
  resources:
19
18
  - name: {{cap.appName}}-auth
@@ -1,12 +1,10 @@
1
1
  ---
2
- {{#cap.isJava}}
3
2
  {{#cap.isMultitenant}}
4
3
  sidecar:
5
4
  bindings:
6
5
  auth:
7
6
  serviceInstanceName: xsuaa
8
7
  {{/cap.isMultitenant}}
9
- {{/cap.isJava}}
10
8
  {{#cap.hasApprouter}}
11
9
  approuter:
12
10
  bindings: