diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..6ed90fc --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,30 @@ +name: Build & Test + +on: + pull_request: + push: + branches: + - main + +jobs: + build: + name: build & test + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20.x" + registry-url: 'https://registry.npmjs.org/' + + - name: Install Node dependencies + run: npm ci + + - name: Run Node build (if present) + run: npm run build --if-present + + - name: Run Tests (if present) + run: npm test --if-present diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..bbf73dc --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,35 @@ +name: Release +on: + push: + tags: + - "v*" + +jobs: + release: + name: release + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20.x" + registry-url: 'https://registry.npmjs.org/' + + - name: Install Node dependencies + run: npm ci + + - name: Update version in package.json + run: | + TAG_VERSION=${GITHUB_REF#refs/tags/} + npm version $TAG_VERSION --no-git-tag-version + + - name: Run Node build (if present) + run: npm run build --if-present + + - name: Publish NPM package + run: npm publish --access=public + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..184c8fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,107 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# 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 + +# typescript build output +lib diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1f65de3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,37 @@ +{ + "name": "@qpoint/htmlrewriter", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@qpoint/htmlrewriter", + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "htmlrewriter": "^0.0.4" + }, + "devDependencies": { + "typescript": "^5.3.3" + } + }, + "node_modules/htmlrewriter": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/htmlrewriter/-/htmlrewriter-0.0.4.tgz", + "integrity": "sha512-zfU0WUhJMH85vvS4bE5A2DwiMIgF4fI5lkMIDDE4wDC7LCS1Z6IGOyEsjZcjzgJ+A/tQZ4WSsaE9qPIjbaVKgQ==" + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..738da07 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "@qpoint/htmlrewriter", + "version": "0.0.1", + "description": "This shims htmlrewriter into the global context if it doesn't exist already.", + "homepage": "https://qpoint.io", + "author": "Jon Friesen ", + "license": "Apache-2.0", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "directories": { + "lib": "lib" + }, + "files": [ + "lib" + ], + "scripts": { + "build": "tsc" + }, + "dependencies": { + "htmlrewriter": "^0.0.4" + }, + "devDependencies": { + "typescript": "^5.3.3" + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..7608b77 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,11 @@ +// Ensure this runtime has an HTMLRewriter +// Many environments that the Context is used inject +// an htmlrewriter instance, in certain environemnts +// (looking at you Node) it is not, this resolves that. +if (!(globalThis as any).HTMLRewriter) { + await import('htmlrewriter').then(module => { + (globalThis as any).HTMLRewriter = module.HTMLRewriter; + }); +} + +export {}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6644d00 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "outDir": "./lib", + "module": "ESNext", + "target": "esnext", + "lib": [ + "esnext" + ], + "preserveConstEnums": true, + "moduleResolution": "node", + "sourceMap": true, + "esModuleInterop": true, + "declaration": true + }, + "include": [ + "./src" + ], + "exclude": [ + "node_modules", + "**/*.test.ts" + ] +}