Skip to content
This repository was archived by the owner on Jun 6, 2025. It is now read-only.

Commit 3d2d5de

Browse files
authored
fix: update TypeScript support and type definitions (#147)
* feat: add TypeScript implementation of TCK and update types * fix: resolve tsd-jsdoc warnings * fix: add type verification and tidy up mixed approach * tck: replace with typescript implementation * fix: reintroduce jsdoc for all user-facing types * update: move tsc compile options to tsconfig
1 parent 836de40 commit 3d2d5de

50 files changed

Lines changed: 1756 additions & 903 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ jobs:
224224
command: |
225225
source /opt/circleci/.nvm/nvm.sh
226226
pushd sdk && nvm install && npm ci && npm pack && popd
227-
pushd tck && nvm install && npm install && npm ci && npm run tck && popd
227+
pushd tck && npm install && npm run tck && popd
228228
229229
validate-docs:
230230
machine: true

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
node_modules
22
.DS_Store
33
.idea
4-
tck/package-lock.json

.prettierignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package.json
22
package-lock.json
33
jsdoc.json
4-
/tck/proto/**/*.*
4+
/sdk/apidocs/**/*.*
55
/sdk/dist/**/*.*
66
/sdk/proto/**/*.*
7+
/sdk/test/proto/**/*.*
8+
/tck/dist/**/*.*
9+
/tck/generated/**/*.*
10+
/tck/proto/**/*.*

build/license.json

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
{
22
"ignoreFile": "sdk/.gitignore",
3-
"ignore": ["build", "codegen", "docs", "**/.*", "**/bin", "**/template", "**/Dockerfile", "**/*.md", "**/*.yml", "samples/*/lib/generated", "sdk/test/*.desc"],
3+
"ignore": [
4+
"build",
5+
"codegen",
6+
"docs",
7+
"**/.*",
8+
"**/bin",
9+
"**/template",
10+
"**/Dockerfile",
11+
"**/*.md",
12+
"**/*.yml",
13+
"samples/*/lib/generated",
14+
"sdk/test/*.desc",
15+
"tck/generated"
16+
],
417
"license": "build/header.txt",
518
"licenseFormats": {
619
"js": {
@@ -17,6 +30,13 @@
1730
"prepend": " * "
1831
}
1932
},
33+
"jsdoc": {
34+
"prepend": "/*",
35+
"append": " */",
36+
"eachLine": {
37+
"prepend": " * "
38+
}
39+
},
2040
"proto": {
2141
"eachLine": {
2242
"prepend": "// "

samples/js-replicated-entity-example/replicated-entity-example.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@
1515
*/
1616

1717

18-
const ReplicatedEntity = require("@lightbend/akkaserverless-javascript-sdk").replicatedentity.ReplicatedEntity;
19-
const ReplicatedData = require("@lightbend/akkaserverless-javascript-sdk").replicatedentity.ReplicatedData;
18+
const replicatedentity = require("@lightbend/akkaserverless-javascript-sdk").replicatedentity;
2019

21-
const entity = new ReplicatedEntity(
20+
const entity = new replicatedentity.ReplicatedEntity(
2221
"replicated_entity_example.proto",
2322
"com.example.replicatedentity.ReplicatedEntityExample",
2423
"replicated-entity-example"
@@ -33,7 +32,7 @@ entity.commandHandlers = {
3332

3433
function updateReplicatedCounter(update, ctx) {
3534
if (ctx.state === null) {
36-
ctx.state = new ReplicatedData.ReplicatedCounter();
35+
ctx.state = new replicatedentity.ReplicatedCounter();
3736
}
3837

3938
if (update.value !== 0) {
@@ -46,7 +45,7 @@ function updateReplicatedCounter(update, ctx) {
4645

4746
function getReplicatedCounter(get, ctx) {
4847
if (ctx.state === null) {
49-
ctx.state = new ReplicatedData.ReplicatedCounter();
48+
ctx.state = new replicatedentity.ReplicatedCounter();
5049
}
5150

5251
return {
@@ -56,7 +55,7 @@ function getReplicatedCounter(get, ctx) {
5655

5756
function mutateReplicatedSet(update, ctx) {
5857
if (ctx.state === null) {
59-
ctx.state = new ReplicatedData.ReplicatedSet();
58+
ctx.state = new replicatedentity.ReplicatedSet();
6059
}
6160

6261
if (update.clear) {
@@ -76,7 +75,7 @@ function mutateReplicatedSet(update, ctx) {
7675

7776
function getReplicatedSet(get, ctx) {
7877
if (ctx.state === null) {
79-
ctx.state = new ReplicatedData.ReplicatedSet();
78+
ctx.state = new replicatedentity.ReplicatedSet();
8079
}
8180

8281
return {

sdk/bin/prepare.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
rm -rf ./proto
77
mkdir -p ./proto
88

9-
# get the framework version from settings.js
10-
readonly framework_version=$(node --print 'require("./settings").frameworkVersion')
9+
# get the framework version from config.json
10+
readonly framework_version=$(node --print 'require("./config.json").frameworkVersion')
1111

1212
function download_protocol {
1313
local module="$1"
@@ -33,12 +33,12 @@ if [ -n "$PROXY_SNAPSHOT_DIRECTORY" ]; then
3333
./bin/compile-protobuf.sh
3434

3535
# Generate TS type definitions based on the JSDocs
36+
cp index.d.preamble.ts index.d.ts
3637
jsdoc -t ./node_modules/@lightbend/tsd-jsdoc/dist -c ./jsdoc.json -d .
37-
mv types.d.ts index.d.ts
38+
cat types.d.ts >> index.d.ts && rm -f types.d.ts
3839
# There replacements are quite dirty, but even the patched tsd-jsdoc generator can't deal with these (mostly module related) issues currently
3940
perl -i -pe 's/declare module \"akkaserverless\"/declare module \"\@lightbend\/akkaserverless-javascript-sdk\"/g' index.d.ts
4041
perl -i -pe 's/module:akkaserverless\.//g' index.d.ts
42+
perl -i -pe 's/import\("akkaserverless"\).([a-zA-Z]*)/$1/g' index.d.ts
4143
perl -i -pe 's/import\("akkaserverless\.([a-zA-Z.]*)([a-zA-Z]*)\"\).(?!default\W)([a-zA-Z]*)/$1$2.$3/g' index.d.ts
4244
perl -i -pe 's/import\("akkaserverless\.([a-zA-Z.]*)([a-zA-Z]*)\"\)([.a-zA-Z]*)/$1$2/g' index.d.ts
43-
perl -i -pe 's/Promise(?!<)/Promise<any>/g' index.d.ts
44-
perl -i -pe 's/Component\[\]/import(\"\.\/proto\/protobuf-bundle")\.akkaserverless\.protocol\.Component\[\]/g' index.d.ts

sdk/config.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"frameworkVersion": "0.7.0-beta.14"
3+
}

sdk/settings.js renamed to sdk/index.d.preamble.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,4 @@
1414
* limitations under the License.
1515
*/
1616

17-
const settings = {
18-
frameworkVersion: '0.7.0-beta.14',
19-
protocolVersion: function () {
20-
const versions = this.frameworkVersion.split(/[.-]/);
21-
return { major: versions[0], minor: versions[1] };
22-
},
23-
baseVersion: function () {
24-
const version = this.protocolVersion();
25-
return `${version.major}.${version.minor}`;
26-
},
27-
};
28-
29-
module.exports = settings;
17+
import * as protobuf from 'protobufjs';

sdk/jsdoc.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"include": [
77
"src",
88
"index.js",
9+
"settings.jsdoc",
910
"README.md"
1011
],
1112
"exclude": [],

sdk/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@
8282
"clean": "rm -rf ./dist",
8383
"copy-files": "cp -r ./proto ./dist && cp index.d.ts ./dist",
8484
"compile": "tsc && npm run copy-files",
85-
"prepack": "npm run compile",
85+
"verify-types": "tsc dist/index.d.ts --noEmit",
86+
"prepack": "npm run compile && npm run verify-types",
8687
"print-version": "echo $npm_package_version",
8788
"watch-jsdoc": "npm-watch jsdoc",
8889
"jsdoc": "jsdoc -c jsdoc.json",

0 commit comments

Comments
 (0)