merged from master
This commit is contained in:
2
.github/workflows/node.js.yml
vendored
2
.github/workflows/node.js.yml
vendored
@@ -24,5 +24,5 @@ jobs:
|
|||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
- run: npm install
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -15,3 +15,5 @@ default-env.json
|
|||||||
packages/messageBox
|
packages/messageBox
|
||||||
reviews/msg-box
|
reviews/msg-box
|
||||||
reviews/db/test.db
|
reviews/db/test.db
|
||||||
|
|
||||||
|
*.openapi3.json
|
||||||
|
|||||||
3
.npmrc
Normal file
3
.npmrc
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Ensure we always use public packages, i.e. avoid using local registries from ~/.npmrc
|
||||||
|
@sap:registry=https://registry.npmjs.org/
|
||||||
|
registry=https://registry.npmjs.org/
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using { AdminService } from '../../db/schema';
|
using { AdminService, sap.capire.bookshop } from '../../db/schema';
|
||||||
|
using from '../common'; // to help UI linter get the complete annotations
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
@@ -86,8 +87,9 @@ annotate AdminService.Books.texts with @(
|
|||||||
annotate AdminService.Books.texts {
|
annotate AdminService.Books.texts {
|
||||||
locale @ValueList:{entity:'Languages',type:#fixed}
|
locale @ValueList:{entity:'Languages',type:#fixed}
|
||||||
}
|
}
|
||||||
// In addition we need to expose Languages through AdminService
|
// In addition we need to expose Languages and Books.texts through AdminService
|
||||||
using { sap } from '@sap/cds/common';
|
using { sap } from '@sap/cds/common';
|
||||||
extend service AdminService {
|
extend service AdminService {
|
||||||
entity Languages as projection on sap.common.Languages;
|
entity Languages as projection on sap.common.Languages;
|
||||||
|
entity Books.texts as projection on bookshop.Books.texts;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const cds = require ('@sap/cds')
|
const cds = require ('@sap/cds')
|
||||||
|
module.exports = cds.server
|
||||||
|
|
||||||
cds.once('bootstrap',(app)=>{
|
cds.once('bootstrap',(app)=>{
|
||||||
app.serve ('/orders/webapp').from('@capire/orders','app/orders/webapp')
|
app.serve ('/orders/webapp').from('@capire/orders','app/orders/webapp')
|
||||||
@@ -9,4 +10,7 @@ cds.once('bootstrap',(app)=>{
|
|||||||
cds.once('served', require('./srv/mashup'))
|
cds.once('served', require('./srv/mashup'))
|
||||||
cds.once('served', require('@capire/suppliers/srv/mashup'))
|
cds.once('served', require('@capire/suppliers/srv/mashup'))
|
||||||
|
|
||||||
module.exports = cds.server
|
// Swagger UI - see https://cap.cloud.sap/docs/advanced/openapi
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
cds.once ('bootstrap', app => app.use (require ('cds-swagger-ui-express')()) )
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,28 @@
|
|||||||
"name": "@capire/hello-world",
|
"name": "@capire/hello-world",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "cds serve world.cds"
|
"test": "npx jest --silent",
|
||||||
|
"watch": "cds serve world.cds",
|
||||||
|
"watch:ts": "cds-ts serve world.cds"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/jest": "^26.0.23",
|
||||||
|
"@types/node": "^15.12.0",
|
||||||
|
"ts-jest": "^27.0.2",
|
||||||
|
"typescript": "^4.3.5"
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"testEnvironment": "node",
|
||||||
|
"preset": "ts-jest",
|
||||||
|
"globals": {
|
||||||
|
"ts-jest": {
|
||||||
|
"diagnostics": {
|
||||||
|
"_comment": "see https://githubmemory.com/repo/kulshekhar/ts-jest/issues/2722",
|
||||||
|
"ignoreCodes": [
|
||||||
|
151001
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
15
hello/test/hello-world-ts.test.ts
Normal file
15
hello/test/hello-world-ts.test.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
process.env.CDS_TYPESCRIPT = 'true';
|
||||||
|
import * as cds from '@sap/cds';
|
||||||
|
|
||||||
|
//@ts-ignore
|
||||||
|
const {GET} = cds.test.in(__dirname,'..').run('serve', 'world.cds');
|
||||||
|
|
||||||
|
describe('Hello world!', () => {
|
||||||
|
afterAll(() => { delete process.env.CDS_TYPESCRIPT; });
|
||||||
|
|
||||||
|
it('should say hello with class impl from a typescript file', async () => {
|
||||||
|
const {data} = await GET`/say/hello(to='world')`
|
||||||
|
expect(data.value).toMatch(/Hello world.*typescript.*/i)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
5
hello/world.ts
Normal file
5
hello/world.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
module.exports = class say {
|
||||||
|
hello(req: any) {
|
||||||
|
return `Hello ${req.data.to} from a typescript file!`
|
||||||
|
}
|
||||||
|
}
|
||||||
30129
package-lock.json
generated
30129
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
17
package.json
17
package.json
@@ -12,9 +12,12 @@
|
|||||||
"@capire/media": "./media",
|
"@capire/media": "./media",
|
||||||
"@capire/orders": "./orders",
|
"@capire/orders": "./orders",
|
||||||
"@capire/reviews": "./reviews",
|
"@capire/reviews": "./reviews",
|
||||||
"@capire/suppliers": "./suppliers"
|
"@capire/suppliers": "./suppliers",
|
||||||
|
"@sap/cds": "^5",
|
||||||
|
"express": "^4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"cds-swagger-ui-express": "^0.2.0",
|
||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"chai-as-promised": "^7.1.1",
|
"chai-as-promised": "^7.1.1",
|
||||||
"chai-subset": "^1.6.0",
|
"chai-subset": "^1.6.0",
|
||||||
@@ -27,15 +30,17 @@
|
|||||||
"fiori": "cds watch fiori",
|
"fiori": "cds watch fiori",
|
||||||
"media": "cds watch media",
|
"media": "cds watch media",
|
||||||
"mocha": "npx mocha || echo",
|
"mocha": "npx mocha || echo",
|
||||||
"jest": "npx jest@^26",
|
"jest": "npx jest",
|
||||||
"test": "npm run jest --silent"
|
"test": "npm run jest --silent && npm run test:hello",
|
||||||
|
"test:hello": "cd hello && npm test"
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"testEnvironment": "node",
|
||||||
|
"testMatch": ["**/*.test.js"]
|
||||||
},
|
},
|
||||||
"mocha": {
|
"mocha": {
|
||||||
"parallel": true
|
"parallel": true
|
||||||
},
|
},
|
||||||
"jest": {
|
|
||||||
"testEnvironment": "node"
|
|
||||||
},
|
|
||||||
"license": "SAP SAMPLE CODE LICENSE",
|
"license": "SAP SAMPLE CODE LICENSE",
|
||||||
"private": true
|
"private": true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ Each sub directory essentially is an individual npm package arranged in an [all-
|
|||||||
## [@capire/hello-world](hello)
|
## [@capire/hello-world](hello)
|
||||||
|
|
||||||
- A simplistic [Hello World](https://cap.cloud.sap/docs/get-started/hello-world) service using [CDS](https://cap.cloud.sap/docs/cds/) and [cds.services](https://cap.cloud.sap/docs/node.js/api#services-api).
|
- A simplistic [Hello World](https://cap.cloud.sap/docs/get-started/hello-world) service using [CDS](https://cap.cloud.sap/docs/cds/) and [cds.services](https://cap.cloud.sap/docs/node.js/api#services-api).
|
||||||
|
- [Typescript support](https://cap.cloud.sap/docs/get-started/using-typescript)
|
||||||
|
|
||||||
|
|
||||||
## [@capire/bookshop](bookshop)
|
## [@capire/bookshop](bookshop)
|
||||||
@@ -71,6 +72,7 @@ Each sub directory essentially is an individual npm package arranged in an [all-
|
|||||||
- Support for [Value Helps](https://cap.cloud.sap/docs/guides/fiori#value-help)
|
- Support for [Value Helps](https://cap.cloud.sap/docs/guides/fiori#value-help)
|
||||||
- Serving SAP Fiori apps locally
|
- Serving SAP Fiori apps locally
|
||||||
- [The Vue.js app](bookshop/app/vue) imported from bookshop is served as well
|
- [The Vue.js app](bookshop/app/vue) imported from bookshop is served as well
|
||||||
|
- [OpenAPI export + Swagger UI](https://cap.cloud.sap/docs/advanced/openapi)
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ describe('cds.ql → cqn', () => {
|
|||||||
).to.eql({
|
).to.eql({
|
||||||
SELECT: {
|
SELECT: {
|
||||||
from: { ref: ['Foo'] },
|
from: { ref: ['Foo'] },
|
||||||
where: cdr
|
where: cds.version >= '5.3.0'
|
||||||
? [
|
? [
|
||||||
// '(', //> this one is not required
|
// '(', //> this one is not required
|
||||||
{ ref: ['ID'] },
|
{ ref: ['ID'] },
|
||||||
@@ -289,7 +289,7 @@ describe('cds.ql → cqn', () => {
|
|||||||
'and',
|
'and',
|
||||||
{ ref: ['args'] },
|
{ ref: ['args'] },
|
||||||
'in',
|
'in',
|
||||||
{ val: args },
|
{ list: args.map(val => ({ val })) },
|
||||||
'and',
|
'and',
|
||||||
'(', //> this one is missing, and that's changing the logic -> that's a BUG
|
'(', //> this one is missing, and that's changing the logic -> that's a BUG
|
||||||
{ ref: ['x'] },
|
{ ref: ['x'] },
|
||||||
|
|||||||
Reference in New Issue
Block a user