From f7db3d093cabc6d9ef7255f1b271f831aabceb34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Fri, 26 Feb 2021 16:29:55 +0100 Subject: [PATCH] tsc build --- .gitignore | 1 + dist/index.d.ts | 26 ++++++++++++++++++++++++ dist/index.js | 46 ++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 14 +++++++++++++ package.json | 16 +++++++++++---- tsconfig.json | 4 +++- workflows/publish.yaml | 16 +++++++++++++++ 7 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 .gitignore create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 package-lock.json create mode 100644 workflows/publish.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..84effa1 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,26 @@ +declare type ComponentConstructor = (...args: any[]) => object; +export declare class AlpineComponent { + /** Retrieve the root component DOM node. */ + $el?: Element; + /** Retrieve DOM elements marked with x-ref inside the component. */ + $refs?: { + [name: string]: Element; + }; + /** Retrieve the native browser "Event" object within an event listener. */ + $event?: Event; + /** Create a CustomEvent and dispatch it using .dispatchEvent() internally. */ + $dispatch?: (event: string, data: object) => void; + /** Execute a given expression AFTER Alpine has made its reactive DOM updates. */ + $nextTick?: (callback: () => void) => void; + /** Will fire a provided callback when a component property you "watched" gets changed. */ + $watch?: (property: string, callback: (value: any) => void) => void; +} +export declare function registerComponents(components: { + [name: string]: Function; +}): { + [name: string]: ComponentConstructor; +}; +export declare function component(name: string, component?: Function): ComponentConstructor; +export declare function convertClassToAlpineConstructor(component: any): ComponentConstructor; +declare const _default: () => void; +export default _default; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..9ea0d21 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.convertClassToAlpineConstructor = exports.component = exports.registerComponents = exports.AlpineComponent = void 0; +class AlpineComponent { +} +exports.AlpineComponent = AlpineComponent; +function registerComponents(components) { + Object.entries(components).forEach(([name, file]) => { + component(name, file); + }); + return window.AlpineComponents; +} +exports.registerComponents = registerComponents; +function component(name, component = null) { + if (!component) { + return window.AlpineComponents[name]; + } + if (component['prototype'] instanceof AlpineComponent) { + component = convertClassToAlpineConstructor(component); + } + // @ts-ignore + window.AlpineComponents[name] = component; +} +exports.component = component; +function convertClassToAlpineConstructor(component) { + return function (...args) { + let instance = new component(...args); + // Copy methods + const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(instance)) + .reduce((obj, method) => { + obj[method] = instance[method]; + return obj; + }, {}); + // Copy properties + return Object.assign(methods, instance); + }; +} +exports.convertClassToAlpineConstructor = convertClassToAlpineConstructor; +exports.default = () => { + window.AlpineComponents = {}; + const deferrer = window.deferLoadingAlpine || function (callback) { callback(); }; + window.deferLoadingAlpine = function (callback) { + window.Alpine.component = component; + deferrer(callback); + }; +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4397095 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,14 @@ +{ + "name": "@leanadmin/alpine-typescript", + "version": "0.1.3", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "typescript": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.2.tgz", + "integrity": "sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 6e13f42..d4b0f7a 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,20 @@ { "name": "@leanadmin/alpine-typescript", - "version": "0.1.3", + "version": "0.1.4", "description": "TypeScript support for Alpine.js", - "main": "src/index.ts", + "main": "dist/index.js", "repository": { "type": "git", "url": "git+https://github.com/LeanAdmin/alpine-typescript.git" }, "files": [ - "src/index.ts" + "src/index.ts", + "dist/index.js", + "dist/index.d.ts" ], + "scripts": { + "prepublish": "node_modules/typescript/bin/tsc tsconfig.json" + }, "keywords": [ "alpine", "alpine.js", @@ -20,5 +25,8 @@ "bugs": { "url": "https://github.com/LeanAdmin/alpine-typescript/issues" }, - "homepage": "https://github.com/LeanAdmin/alpine-typescript#readme" + "homepage": "https://github.com/LeanAdmin/alpine-typescript#readme", + "devDependencies": { + "typescript": "^4.2.2" + } } diff --git a/tsconfig.json b/tsconfig.json index 992dc80..49ca995 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,9 @@ "compilerOptions": { "module": "commonjs", "target": "es6", - "lib": ["ES2017", "DOM"] + "lib": ["ES2017", "DOM"], + "declaration": true, + "outDir": "dist/" }, "include": ["src/**/*"] } diff --git a/workflows/publish.yaml b/workflows/publish.yaml new file mode 100644 index 0000000..a564449 --- /dev/null +++ b/workflows/publish.yaml @@ -0,0 +1,16 @@ +name: Publish Node.js package +on: + release: + types: [created] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: npm install + - uses: actions/setup-node@v1 + with: + registry-url: 'https://npm.pkg.github.com' + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}