Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"jest": true
},
"parserOptions": {
"ecmaVersion": 2018,
"ecmaVersion": 2020,
"sourceType": "module"
},
"globals": {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@
"lint:fix": "npx eslint . --config .eslintrc.json --fix",
"format": "prettier --write . && npm run format --silent --workspaces --if-present",
"format:quick": "pretty-quick",
"test": "npm test -w packages/core -w packages/assertions -w packages/defaults -w packages/cli"
"test": "npm test -w packages/core -w packages/assertions -w packages/defaults -w packages/cli -w packages/code-gen"
}
}
78 changes: 78 additions & 0 deletions packages/code-gen/README.md
Comment thread
bobur-khay marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# @thingweb/code-gen

Generates code snippets for interacting with [Thing Descriptions (TD)](https://www.w3.org/TR/wot-thing-description11/). Supports multiple programming languages and libraries. For unsupported language/library combinations, it generates a prompt for an LLM to complete the task.

## Usage

### As a Library

```js
import { generateCode, isProtocolSupported } from "@thingweb/code-gen";

const result = generateCode({
td,
affordanceType: "properties",
affordanceKey: "temperature",
operation: "readproperty",
language: "javascript",
library: "fetch",
});

if ("code" in result) {
console.log(result.code);
} else {
console.log(result.prompt); // LLM prompt for unsupported combinations
}
```

### CLI

The package provides both interactive and non-interactive CLI modes.

**Interactive mode** — run without arguments to be guided through prompts:

```bash
npm run cli
```

**Non-interactive mode** — pass all options as flags. When running the CLI through the npm script, parameters are added after `--`:

```bash
npm run cli -- --td ./my-thing.td.jsonld --affordance-type properties --affordance-key temperature --operation readproperty --language javascript --library fetch --output ./output
```

#### CLI Options

| Flag | Description |
| ----------------------- | ---------------------------------------------------------- |
| `-t, --td` | Path to the TD JSON file |
| `-a, --affordance-type` | Affordance type: `properties`, `actions`, or `events` |
| `-k, --affordance-key` | Key name of the affordance |
| `-o, --operation` | Operation to perform (e.g. `readproperty`, `invokeaction`) |
| `-l, --language` | Programming language |
| `-b, --library` | Library to use |
| `-O, --output` | Output folder path (default: `./`) |

## Supported Languages and Libraries

| Language | Libraries |
| ---------- | --------------------------------------------- |
| JavaScript | fetch, node-wot, webthing, modbus-serial |
| Python | requests, wotpy, PyModbus |
| Java | httpclient, wot-servient, digitalpetri/modbus |
| Rust | reqwest |
| Go | net-http |
| C# | httpclient, WoT.Net |
| PHP | curl |
| Ruby | net-http |
| Dart | dart-wot, http |

## Scripts

- `npm run build` — Compile TypeScript to `dist/`
- `npm run cli` — Run the CLI
- `npm test` — Run tests

## License

Licensed under the MIT license, see [License](../../LICENSE.md).
Loading
Loading