Skip to content

Commit 15b2a0d

Browse files
Examples: Add NodeJS example
1 parent b8bd915 commit 15b2a0d

File tree

5 files changed

+62
-0
lines changed

5 files changed

+62
-0
lines changed

Examples/NodeJS/.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.DS_Store
2+
/.build
3+
/Packages
4+
xcuserdata/
5+
DerivedData/
6+
.swiftpm/configuration/registries.json
7+
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8+
.netrc

Examples/NodeJS/Package.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// swift-tools-version: 6.2
2+
3+
import PackageDescription
4+
5+
let package = Package(
6+
name: "NodeJS",
7+
dependencies: [.package(name: "JavaScriptKit", path: "../../")],
8+
targets: [
9+
.executableTarget(
10+
name: "NodeJS",
11+
dependencies: ["JavaScriptKit"]
12+
)
13+
],
14+
swiftLanguageModes: [.v6]
15+
)

Examples/NodeJS/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# NodeJS example
2+
3+
This example demonstrates how to use JavaScriptKit with Node.js. It shows how to export Swift functions to JavaScript and run them in a Node.js environment.
4+
5+
```sh
6+
$ swift package --swift-sdk $SWIFT_SDK_ID js
7+
$ node main.mjs
8+
```
9+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import JavaScriptKit
2+
3+
@main
4+
struct NodeJS {
5+
static func main() {
6+
JSObject.global["greet"] =
7+
JSClosure { args in
8+
let nameString = args[0].string!
9+
return .string("Hello, \(nameString) from NodeJS!")
10+
}.jsValue
11+
}
12+
}

Examples/NodeJS/main.mjs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// @ts-check
2+
3+
import { instantiate } from "./.build/plugins/PackageToJS/outputs/Package/instantiate.js"
4+
import { defaultNodeSetup } from "./.build/plugins/PackageToJS/outputs/Package/platforms/node.js"
5+
6+
async function main() {
7+
// Create a default Node.js option object
8+
const options = await defaultNodeSetup();
9+
// Instantiate the Swift code, executing
10+
// NodeJS.main() in NodeJS.swift
11+
await instantiate(options);
12+
13+
// Call the greet function set by NodeJS.swift
14+
const greet = globalThis.greet;
15+
console.log(greet("World"));
16+
}
17+
18+
main()

0 commit comments

Comments
 (0)