diff --git a/.github/workflows/push-to-npm.yml b/.github/workflows/push-to-npm.yml new file mode 100644 index 00000000..18404dc0 --- /dev/null +++ b/.github/workflows/push-to-npm.yml @@ -0,0 +1,55 @@ +name: Push @workadventure/iframe-api-typings to NPM +on: + # TODO remove action on push + push: ~ + release: + types: [created] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + # Setup .npmrc file to publish to npm + - uses: actions/setup-node@v2 + with: + node-version: '14.x' + registry-url: 'https://registry.npmjs.org' + # TODO: replace version with RELEASE tag + # TODO: enable declaration flag in tsconfig dynamically + - name: Install Protoc + uses: arduino/setup-protoc@v1 + with: + version: '3.x' + + - name: "Install dependencies" + run: yarn install + working-directory: "front" + + - name: "Install messages dependencies" + run: yarn install + working-directory: "messages" + + - name: "Build proto messages" + run: yarn run proto && yarn run copy-to-front + working-directory: "messages" + + - name: "Create index.html" + run: ./templater.sh + working-directory: "front" + + - name: "Build" + run: yarn run build + env: + API_URL: "localhost:8080" + working-directory: "front" + # We build the front to generate the typings of iframe_api, then we copy those typings in a separate package. + - name: Copy typings to package dir + run: cp front/dist/src/iframe_api.d.ts front/packages/iframe-api-typings/iframe_api.d.ts + - name: Install dependencies in package + run: yarn install + working-directory: "front/packages/iframe-api-typings" + - name: Publish package + run: yarn publish + working-directory: "front/packages/iframe-api-typings" + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/front/packages/iframe-api-typings/.gitignore b/front/packages/iframe-api-typings/.gitignore new file mode 100644 index 00000000..f850ebdb --- /dev/null +++ b/front/packages/iframe-api-typings/.gitignore @@ -0,0 +1 @@ +iframe_api.d.ts diff --git a/front/packages/iframe-api-typings/README.md b/front/packages/iframe-api-typings/README.md new file mode 100644 index 00000000..c5c16ded --- /dev/null +++ b/front/packages/iframe-api-typings/README.md @@ -0,0 +1,27 @@ +

WorkAdventure - IFrame API typings for Typescript

+ +

This package contains Typescript typings for WorkAdventure's map scripting API

+ +
+ +[WorkAdventure](https://workadventu.re) comes with a scripting API. Using this API, you can add some intelligence to your map. +You use this API by loading an external script directly from WorkAdventure (at https://play.workadventu.re/iframe_api.js), or this script is loaded +for you if you are using the "script" property of a map. + +This project contains Typescript typings for the `WA` object provided by this script. + +## Usage + +This package is only useful if you are using Typescript to script your WorkAdventure maps. + +## Download & Installation + +```shell +$ npm install @workadventure/iframe-api-typings +``` + +or + +```shell +$ yarn add @workadventure/iframe-api-typings +``` diff --git a/front/packages/iframe-api-typings/iframe_api.js b/front/packages/iframe-api-typings/iframe_api.js new file mode 100644 index 00000000..033bf208 --- /dev/null +++ b/front/packages/iframe-api-typings/iframe_api.js @@ -0,0 +1 @@ +// This file is voluntarily empty. diff --git a/front/packages/iframe-api-typings/package.json b/front/packages/iframe-api-typings/package.json new file mode 100644 index 00000000..61184c4e --- /dev/null +++ b/front/packages/iframe-api-typings/package.json @@ -0,0 +1,13 @@ +{ + "name": "@workadventure/iframe-api-typings", + "version": "1.2.0", + "description": "Typescript typings for WorkAdventure iFrame API", + "main": "iframe_api.js", + "types": "iframe_api.d.ts", + "repository": "https://github.com/thecodingmachine/workadventure/", + "author": "David NĂ©grier ", + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/front/tsconfig.json b/front/tsconfig.json index 3fce57ea..f6cb384a 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -5,6 +5,7 @@ "moduleResolution": "node", "module": "CommonJS", "target": "ES2015", + "declaration": true, "downlevelIteration": true, "jsx": "react", "allowJs": true,