Skip to content

Commit

Permalink
Merge pull request #137 from Peefy/feat-kcl-wasm-in-browser
Browse files Browse the repository at this point in the history
feat: kcl wasm lib both for node.js and browser
  • Loading branch information
Peefy authored Aug 27, 2024
2 parents 2a63c36 + 8bb96f2 commit 226986d
Show file tree
Hide file tree
Showing 18 changed files with 463 additions and 432 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/wasm-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
run: npm install

- name: Build
run: npm run compile
run: npm run build

- name: Publish Dry Run
if: "startsWith(github.ref, 'refs/tags/') && contains(github.ref, '-')"
Expand Down
3 changes: 2 additions & 1 deletion wasm/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
package-lock.json

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
Expand Down Expand Up @@ -121,7 +122,7 @@ dist
.AppleDouble
.LSOverride

# Icon must end with two
# Icon must end with two
Icon


Expand Down
6 changes: 3 additions & 3 deletions wasm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ npm install @kcl-lang/wasm-lib
```

```typescript
import { load, invokeKCLRun } from '@kcl-lang/wasm-lib'
import { load, invokeKCLRun } from "@kcl-lang/wasm-lib";

async function main() {
const inst = await load();
Expand All @@ -21,10 +21,10 @@ schema Person:
p = Person {name = "Alice"}`,
});
console.log(result)
console.log(result);
}

main()
main();
```

### Rust
Expand Down
198 changes: 198 additions & 0 deletions wasm/examples/browser/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
# Created by https://www.toptal.com/developers/gitignore/api/node
# Edit at https://www.toptal.com/developers/gitignore?templates=node

### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
package-lock.json

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# Next.js build output
.next

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# End of https://www.toptal.com/developers/gitignore/api/node

# Created by https://www.toptal.com/developers/gitignore/api/macos
# Edit at https://www.toptal.com/developers/gitignore?templates=macos

### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### macOS Patch ###
# iCloud generated files
*.icloud

# End of https://www.toptal.com/developers/gitignore/api/macos

# Created by https://www.toptal.com/developers/gitignore/api/windows
# Edit at https://www.toptal.com/developers/gitignore?templates=windows

### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

# End of https://www.toptal.com/developers/gitignore/api/windows

#Added by cargo

/target
Cargo.lock

.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

*.node
Binary file added wasm/examples/browser/kcl.wasm
Binary file not shown.
35 changes: 35 additions & 0 deletions wasm/examples/browser/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "browser-kcl-wasm-example",
"version": "1.0.0",
"description": "",
"scripts": {
"serve": "webpack serve --config webpack.config.js",
"build": "webpack --mode=production",
"build:dev": "webpack --watch",
"format": "prettier --write ."
},
"main": "./dist/main.js",
"types": "./dist/main.d.ts",
"files": [
"dist/"
],
"dependencies": {
"@kcl-lang/wasm-lib": "file:../..",
"@wasmer/wasi": "^1.2.2"
},
"devDependencies": {
"copy-webpack-plugin": "^8.1.1",
"css-loader": "^5.2.4",
"cssnano": "^5.0.1",
"html-webpack-plugin": "^5.3.1",
"mini-css-extract-plugin": "^1.5.0",
"postcss": "^8.2.10",
"postcss-import": "^14.0.1",
"postcss-loader": "^5.2.0",
"prettier": "^2.8.4",
"typescript": "^5.3.3",
"webpack": "^5.34.0",
"webpack-cli": "^4.6.0",
"webpack-dev-server": "^3.11.2"
}
}
18 changes: 18 additions & 0 deletions wasm/examples/browser/src/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<title>Button Click</title>
</head>
<body>
<button id="myButton">Click Me</button>

<script>
var button = document.getElementById("myButton");
function handleClick() {
var script = document.createElement("script");
script.src = "dist/main.js";
}
button.addEventListener("click", handleClick);
</script>
</body>
</html>
16 changes: 16 additions & 0 deletions wasm/examples/browser/src/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { load, invokeKCLRun } from "@kcl-lang/wasm-lib";

async function main() {
const inst = await load();
const result = invokeKCLRun(inst, {
filename: "test.k",
source: `
schema Person:
name: str
p = Person {name = "Alice"}`,
});
console.log(result);
}

main();
27 changes: 27 additions & 0 deletions wasm/examples/browser/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"compilerOptions": {
"target": "es2022",
"module": "commonjs",
"moduleResolution": "node",
"lib": ["es2022", "dom"],
"sourceMap": true,
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declaration": true,
"baseUrl": ".",
"esModuleInterop": true
},
"exclude": ["node_modules"]
}
Loading

0 comments on commit 226986d

Please sign in to comment.