@reportforge/playwright-pdf 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +285 -0
- package/LICENSE +21 -0
- package/README.md +524 -0
- package/ci-templates/azure-devops/azure-pipelines.yml +58 -0
- package/ci-templates/bitbucket/bitbucket-pipelines.yml +42 -0
- package/ci-templates/github-actions/basic-workflow.yml +44 -0
- package/ci-templates/github-actions/matrix-workflow.yml +69 -0
- package/ci-templates/gitlab-ci/.gitlab-ci.yml +42 -0
- package/ci-templates/jenkins/Jenkinsfile +54 -0
- package/dist/index.d.mts +272 -0
- package/dist/index.d.ts +272 -0
- package/dist/index.js +12566 -0
- package/dist/index.mjs +12567 -0
- package/dist/templates/layouts/detailed.hbs +38 -0
- package/dist/templates/layouts/executive.hbs +35 -0
- package/dist/templates/layouts/minimal.hbs +29 -0
- package/dist/templates/partials/charts.hbs +306 -0
- package/dist/templates/partials/ci-environment.hbs +56 -0
- package/dist/templates/partials/cover-page.hbs +46 -0
- package/dist/templates/partials/defect-log.hbs +27 -0
- package/dist/templates/partials/executive-summary.hbs +60 -0
- package/dist/templates/partials/failure-deep-dive.hbs +61 -0
- package/dist/templates/partials/head.hbs +17 -0
- package/dist/templates/partials/release-gate.hbs +63 -0
- package/dist/templates/partials/requirements-matrix.hbs +35 -0
- package/dist/templates/partials/slow-tests.hbs +27 -0
- package/dist/templates/partials/suite-breakdown.hbs +58 -0
- package/dist/templates/partials/watermark.hbs +3 -0
- package/dist/templates/styles/base.css +234 -0
- package/dist/templates/styles/detailed.css +311 -0
- package/dist/templates/styles/executive.css +334 -0
- package/dist/templates/styles/minimal.css +208 -0
- package/package.json +99 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
|
+
|
|
6
|
+
## [0.0.1] — 2026-05-26
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- **Renamed npm package** from `pdf-report-forge` to `@reportforge/playwright-pdf` — moved to the `@reportforge` npm org scope to make room for `@reportforge/cypress` and future framework adapters. Update your project:
|
|
11
|
+
- `npm install @reportforge/playwright-pdf puppeteer-core`
|
|
12
|
+
- `reporter: [['@reportforge/playwright-pdf', { /* opts */ }]]`
|
|
13
|
+
- `import { defineReporterConfig } from '@reportforge/playwright-pdf'`
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
> **History note:** Entries below (`[1.4.3]` and earlier) document releases published under the previous package name `pdf-report-forge`. Feature set is identical at `[0.0.1]`.
|
|
18
|
+
|
|
19
|
+
## [1.4.3] — 2026-05-14
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- **Build scripts path regression.** All four `scripts/build/` bundlers (`bundle-chartjs`, `bundle-fonts`, `bundle-license-pubkey`, `precompile-templates`) resolved paths one directory too shallow after being moved from `scripts/` to `scripts/build/` in v1.4.2, breaking integration tests and the full build. Fixed `__dirname`-relative paths to correctly anchor to the repo root.
|
|
24
|
+
- **PDF encryption password no longer visible in process argv.** The `pdfPassword` option now passes the encryption key to `qpdf` via a `--password-file` temp file (mode `0600`, deleted immediately after use) rather than as a positional command-line argument. Prevents the password appearing in `/proc/PID/cmdline` or `ps` output on shared runners. Requires `qpdf >= 10.2.0`.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- **`LicenseClient` internals refactored** — `resolve()` decomposed into `_validateKey`, `_readCache`, and `_offlineFallback` helpers for clarity; no behaviour change.
|
|
29
|
+
- **`PdfReporter.onEnd()` refactored** — extracted `_collectData`, `_appendTrend`, and `_buildReportData` methods; history write failures now logged as warnings instead of propagating.
|
|
30
|
+
- **One-time KV migration cron removed** — `GET /api/cron/migrate-key-ttls` has completed its run; the route and cron entry are deleted. KV migration deadline dates updated to absolute dates in code comments.
|
|
31
|
+
- **Docs and project layout** — build scripts relocated to `scripts/build/`, internal docs to `docs/internal/`, user docs to `docs/user/`. Server setup helper at `scripts/setup-server.ts`.
|
|
32
|
+
|
|
33
|
+
## [1.4.2] — 2026-05-13
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- **Detailed template — trend chart redesign.** Replaced the two disconnected, unlabelled sparklines (pass-rate + duration) with a single, properly designed trend card:
|
|
38
|
+
- Smart y-axis range: pads only around actual data instead of a fixed 0–100 axis, so a 96% pass-rate run no longer renders as a flat line at the top of a near-empty canvas.
|
|
39
|
+
- Visible x-axis (formatted date labels) and y-axis (% gridlines with tick values).
|
|
40
|
+
- Data points colored by verdict (green = passed, orange = partial, red = failed).
|
|
41
|
+
- Inline data labels rendering the pass-rate % above each point.
|
|
42
|
+
- Gradient fill under the line.
|
|
43
|
+
- Run history table below the chart (date · colored pass-rate · test count · duration) replacing the meaningless colored-dot row.
|
|
44
|
+
- Delta badge ("↑ 2% vs previous run") in the card header.
|
|
45
|
+
- **`ChartData.trend.entries` extended** — `timestamp` (unix ms) and `total` are now forwarded alongside `runId`, `passRate`, `duration`, and `verdict`, enabling the chart to display real dates and test counts without parsing the runId string.
|
|
46
|
+
|
|
47
|
+
## [1.4.1] — 2026-05-13
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
|
|
51
|
+
- **Docs: corrected USD pricing** — `$19/month` → `$12/month` and `$149/year` → `$99/year` in README and CHANGELOG. No code change.
|
|
52
|
+
- **Docs: added CHANGELOG entry for v1.3.0** (test history trending) which was shipped but not recorded.
|
|
53
|
+
|
|
54
|
+
## [1.4.0] — 2026-05-10
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- **Dev machine fingerprint — migration required.** The fingerprint for developer machines now uses a stable UUID persisted at `~/.reportforge/device.json` instead of the previous hostname + MAC address approach. This eliminates phantom seat consumption when running on VPN, Docker, or WSL2 (where MAC changes per session). **On upgrade, each dev machine will register as a new seat on first run.** The old seat will age out naturally within 30 days. Delete `~/.reportforge/device.json` to release the seat immediately if needed.
|
|
59
|
+
|
|
60
|
+
- **Atomic machine seat management.** Machine slot registration is now enforced by a Lua script executed atomically in Redis, closing a race condition where two concurrent CI activations could both bypass the 25-seat cap or silently lose each other's seat entry.
|
|
61
|
+
|
|
62
|
+
- **Atomic JWT cache write.** The license cache at `~/.reportforge/license.json` is now written via a temporary file + atomic rename, preventing cache corruption when multiple Playwright workers run in parallel.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- **Refund access revocation — late webhook bypass.** A delayed `subscription.pending` or `subscription.halted` Razorpay webhook arriving after a refund could re-activate the license key index and overwrite the subscription status, allowing a refunded customer to re-activate. The webhook handlers now guard against overwriting refund status.
|
|
67
|
+
|
|
68
|
+
- **Refund key expiry — transient KV failure.** A transient KV read failure during Phase B of the refund flow could leave the license key permanently active despite a completed Razorpay refund. The TTL is now set unconditionally on refund success.
|
|
69
|
+
|
|
70
|
+
## [1.3.0] — 2026-05-09
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
- **Test history trending** — the `detailed` template now renders a pass-rate sparkline and verdict row from a local run history file. Configure with `historyFile` (default `~/.reportforge/{key}/history.json`), `historySize` (default `10` entries), and `showTrend` (default `true`). In CI with ephemeral runners, set `historyFile` to a project-relative path and cache it between runs.
|
|
74
|
+
```ts
|
|
75
|
+
reporter: [['pdf-report-forge', {
|
|
76
|
+
template: 'detailed',
|
|
77
|
+
historyFile: '.reportforge/history.json',
|
|
78
|
+
historySize: 10,
|
|
79
|
+
}]]
|
|
80
|
+
```
|
|
81
|
+
The history file is local — it is never sent to the licensing server.
|
|
82
|
+
|
|
83
|
+
## [1.2.16] — 2026-05-02
|
|
84
|
+
|
|
85
|
+
### Added
|
|
86
|
+
- **Webhook notifications** — post pass/fail summaries to Slack, Teams, or Discord after each run.
|
|
87
|
+
Configure per channel with `url`, `enabled: true`, and `on: 'always' | 'failure' | 'success'`.
|
|
88
|
+
```ts
|
|
89
|
+
notify: {
|
|
90
|
+
slack: { url: process.env.SLACK_WEBHOOK_URL, enabled: true, on: 'failure' },
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
Notifications fire after PDF generation (even if PDF fails). Requires a valid license.
|
|
94
|
+
|
|
95
|
+
## [1.2.15] — 2026-05-01
|
|
96
|
+
|
|
97
|
+
### Added
|
|
98
|
+
- **Shard merging** — configure `shardResults` in the reporter options with paths or glob patterns
|
|
99
|
+
pointing at Playwright JSON shard files to produce a single merged PDF covering all shards.
|
|
100
|
+
```ts
|
|
101
|
+
// playwright.config.ts
|
|
102
|
+
reporter: [['pdf-report-forge', { shardResults: 'results/shard-*.json' }]]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## [1.2.14] — 2026-05-01
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
- **`logger.debug()`** — new debug method on the internal logger, gated on `RF_DEBUG=1`. Logs license cache-hits, network responses, and POST requests with non-sensitive metadata (sha256 fingerprint hashes, expiry timestamps, machine counts). No license key values are logged.
|
|
109
|
+
- **Trial countdown badge** — subscription dashboard now shows a colour-coded days-left badge during trial periods (`text-red-600` ≤1d, `text-orange-500` ≤3d, `text-terracotta-600` otherwise).
|
|
110
|
+
|
|
111
|
+
### Fixed
|
|
112
|
+
- **`open: true` error surfacing** — `openPdf()` now checks file existence before spawning the OS viewer and emits a `logger.warn` if the PDF is not found. Spawn errors on Linux/macOS (e.g. `xdg-open` not installed) are also surfaced via `logger.warn`.
|
|
113
|
+
|
|
114
|
+
## [1.2.13] — 2026-05-01
|
|
115
|
+
|
|
116
|
+
### Changed
|
|
117
|
+
- **README** — added `defineReporterConfig` to Quick Start example; prominent badge CTA for the free trial; license note converted to blockquote.
|
|
118
|
+
- **CHANGELOG** — backfilled entries for v1.2.4 – v1.2.12.
|
|
119
|
+
|
|
120
|
+
## [1.2.12] — 2026-05-01
|
|
121
|
+
|
|
122
|
+
### Fixed
|
|
123
|
+
- **Stable machine fingerprint across VPN / Docker / WSL** — `os.networkInterfaces()` enumeration order is not stable across network-state changes on Windows. The MAC selection now sorts interface names and prefers physical adapters (Ethernet, Wi-Fi) over virtual ones (vethernet, Docker, WSL, VPN tap). Same physical machine always produces the same fingerprint hash regardless of which virtual adapters are active.
|
|
124
|
+
|
|
125
|
+
## [1.2.11] — 2026-05-01
|
|
126
|
+
|
|
127
|
+
### Added
|
|
128
|
+
- **`defineReporterConfig` helper** — typed identity function exported from `pdf-report-forge`. Wrap your reporter options object with it in `playwright.config.ts` to get full IntelliSense and type checking without a separate import of `ReporterOptions`.
|
|
129
|
+
|
|
130
|
+
### Fixed
|
|
131
|
+
- **Server: silent email failures surfaced** — Resend SDK v3 changed from throwing to returning `{ data, error }`. All four send paths now check the error field and throw, so failures appear in logs and trigger Razorpay webhook retries.
|
|
132
|
+
- **Server: Razorpay customer-fetch errors now logged** — `resolveCustomerEmail` was catching all errors silently. Errors now emit a `webhook.customer_fetch_failed` log entry with the customer ID and error message.
|
|
133
|
+
|
|
134
|
+
## [1.2.10] — 2026-04-30
|
|
135
|
+
|
|
136
|
+
### Fixed
|
|
137
|
+
- **Server: accept raw base64 DER keys** — `LICENSE_SIGNING_PRIVATE_KEY` / `LICENSE_SIGNING_PUBLIC_KEY` can now be pasted into Vercel as raw base64-encoded DER (no PEM headers required). The server auto-detects the format and constructs the correct `KeyObject`.
|
|
138
|
+
- **Server: strip surrounding quotes from PEM env vars** — Vercel UI sometimes wraps values in quotes; the key parser now trims them before attempting PEM or DER decode.
|
|
139
|
+
|
|
140
|
+
## [1.2.9] — 2026-04-30
|
|
141
|
+
|
|
142
|
+
### Fixed
|
|
143
|
+
- **Windows libuv teardown crash** (`Assertion failed: !(handle->flags & UV_HANDLE_CLOSING)`) — a 5xx response body left open across Playwright's async teardown kept a libuv handle alive. The 5xx path now drains and cancels the response body before throwing.
|
|
144
|
+
- **PEM env var newlines normalised** — `\n` literal sequences in Vercel / CI env vars are expanded to real newlines before passing to `createPrivateKey`.
|
|
145
|
+
|
|
146
|
+
## [1.2.8] — 2026-04-29
|
|
147
|
+
|
|
148
|
+
### Changed
|
|
149
|
+
- Added `beta` dist-tag support to the publish pipeline so pre-release builds can be installed with `npm install pdf-report-forge@beta` without affecting the `latest` tag.
|
|
150
|
+
|
|
151
|
+
## [1.2.7] — 2026-04-29
|
|
152
|
+
|
|
153
|
+
### Fixed
|
|
154
|
+
- **Windows libuv teardown crash (definitive fix)** — v1.2.6 used `AbortSignal.timeout()` to cancel the license fetch, but `AbortSignal.timeout()` internally schedules a timer that keeps Node's event loop alive through Playwright's async teardown, recreating the same `UV_HANDLE_CLOSING` assertion. Reverted to `AbortController` + explicit `clearTimeout` with eager `controller.abort()` in a `finally` block, which is safe across all Node versions and teardown paths.
|
|
155
|
+
|
|
156
|
+
## [1.2.6] — 2026-04-29
|
|
157
|
+
|
|
158
|
+
### Fixed
|
|
159
|
+
- **JWT signature validation now clears the cache** — a stale cached JWT with an invalid signature previously fell through to a misleading "unreachable" log path and silently kept the bad token. The validation path now clears the cache on any signature mismatch and surfaces a clear error.
|
|
160
|
+
- **Misleading "unreachable" log warning** removed from the license refresh path.
|
|
161
|
+
- **Windows libuv teardown crash (initial fix via `AbortSignal.timeout()`)** — see v1.2.7 for the definitive approach.
|
|
162
|
+
|
|
163
|
+
## [1.2.5] — 2026-04-29
|
|
164
|
+
|
|
165
|
+
### Fixed
|
|
166
|
+
- **`RF_LICENSE_KEY` full-assignment paste** — if a user accidentally pastes the full shell assignment (`RF_LICENSE_KEY=RFSU-…`) as the env value, the reporter now strips the `RF_LICENSE_KEY=` prefix and uses the key value correctly.
|
|
167
|
+
|
|
168
|
+
## [1.2.4] — 2026-04-29
|
|
169
|
+
|
|
170
|
+
### Fixed
|
|
171
|
+
- **License key env var empty-string fallback** — an empty `RF_LICENSE_KEY=""` was treated as a set key, bypassing the "no key" path and sending an empty string to the server. Empty strings are now treated as unset.
|
|
172
|
+
|
|
173
|
+
## [1.2.3] — 2026-04-28
|
|
174
|
+
|
|
175
|
+
### Changed
|
|
176
|
+
- **Removed postinstall script entirely.** `npm install` runs no lifecycle hook. License validation happens at test-run time only — the reporter logs a warning and skips PDF generation if no valid key is found. No behaviour change for users with `RF_LICENSE_KEY` set.
|
|
177
|
+
|
|
178
|
+
## [1.2.2] — 2026-04-28
|
|
179
|
+
|
|
180
|
+
### Fixed
|
|
181
|
+
- **Package size reduced by 57%** — source maps (`dist/*.map`) are no longer published. Packed size: 648 KB (was 1.4 MB). Unpacked: 1.7 MB (was 4.2 MB). No runtime behaviour change.
|
|
182
|
+
|
|
183
|
+
## [1.2.1] — 2026-04-28
|
|
184
|
+
|
|
185
|
+
### Fixed
|
|
186
|
+
- **postinstall no longer fails `npm install`** on Windows (and non-TTY environments). Removed the interactive prompt and TTY gate; postinstall now prints a one-line notice and exits 0 unconditionally. License enforcement is unchanged — the reporter itself checks at test-run time.
|
|
187
|
+
|
|
188
|
+
## [1.2.0] — 2026-04-28
|
|
189
|
+
|
|
190
|
+
### Added
|
|
191
|
+
- **Multi-template output** — `template` now accepts `TemplateId | TemplateId[]`. Pass an array to generate one PDF per template in a single run. The template name is automatically appended to the output filename (e.g. `report-detailed.pdf`, `report-executive.pdf`). One license check, one data-collection pass. Single-element arrays produce the same output as a plain string (no suffix). Duplicate entries are silently deduplicated.
|
|
192
|
+
|
|
193
|
+
## [Unreleased]
|
|
194
|
+
|
|
195
|
+
### Changed (BREAKING)
|
|
196
|
+
- **Renamed npm package** from `playwright-pdf-reporter` to `pdf-report-forge` — the bare name was already taken on npm. Update install commands and reporter array entries:
|
|
197
|
+
- `npm install pdf-report-forge puppeteer-core`
|
|
198
|
+
- `reporter: [['pdf-report-forge', { /* opts */ }]]`
|
|
199
|
+
- Log prefix changed from `[playwright-pdf-reporter]` to `[reportforge]` to match the new brand-aligned identity. Update any CI grep filters accordingly.
|
|
200
|
+
- PDF footer text changed from "Generated by playwright-pdf-reporter" to "Generated by ReportForge" across all three templates.
|
|
201
|
+
- **Removed the free tier.** A valid subscription is now required to generate any PDF; the reporter logs a single warning and skips PDF generation when no license is available (no key, invalid key, expired sub, denied by server, or offline with no cache). Playwright tests still run normally — only the PDF artifact is missing.
|
|
202
|
+
- `LicenseClient.resolve()` now returns `LicenseInfo | null` (was `LicenseInfo` always); deleted `FREE_LICENSE` constant.
|
|
203
|
+
- `LicensePlan` type narrowed to `'subscription'` only (was `'free' | 'subscription'`).
|
|
204
|
+
- Deleted `FeatureGate` and the `showCommunityBadge` plumbing — every feature is available with a valid license, none with an invalid one.
|
|
205
|
+
- 4xx denial path no longer leaks the just-cleared cache through the offline fallback.
|
|
206
|
+
|
|
207
|
+
### Marketing
|
|
208
|
+
- Pricing page, homepage, and dashboards now sell a single subscription plan with a 7-day free trial. Removed all "Free forever" surfaces.
|
|
209
|
+
|
|
210
|
+
## [1.0.0] — 2026-04-21
|
|
211
|
+
|
|
212
|
+
First public release. Subscription model replaces the former one-time tiers.
|
|
213
|
+
(Note: this release still shipped a free tier on the marketing site; that was
|
|
214
|
+
removed in the unreleased breaking change above.)
|
|
215
|
+
|
|
216
|
+
### Added
|
|
217
|
+
- Subscription licensing: **$19/mo** or **$149/yr** (~35% savings), 7-day free trial with no card.
|
|
218
|
+
- Hybrid offline-first activation — short `RFSU-…` handoff key exchanges for an Ed25519-signed JWT cached at `~/.reportforge/license.json`. Subsequent runs verify the JWT locally with a bundled public key, so reports render with no network access.
|
|
219
|
+
- Automatic JWT refresh in the background when the cache has < 24h remaining.
|
|
220
|
+
- **25-machine** sliding 30-day cap per subscription, enforced by a stable hash of `(provider:repo)` in CI or `(hostname:mac)` on dev machines. Stale machines auto-prune after 30 days.
|
|
221
|
+
- Customer self-service portal (cancel, switch plan, update card) via Stripe Customer Portal.
|
|
222
|
+
- Claude design refresh across all three templates: cream `#FAF9F5` canvases, Source Serif Pro headings, Inter body, JetBrains Mono code, terracotta primary `#CC785C`, forest accent `#3F7D58`.
|
|
223
|
+
- Fonts (Source Serif Pro, Inter, JetBrains Mono) bundled into the PDF — no web font fetch at render time.
|
|
224
|
+
- Bulk-run performance: 1 500-test report renders to ~0.65 MB (was ~10.4 MB).
|
|
225
|
+
|
|
226
|
+
### Changed
|
|
227
|
+
- Default `primaryColor` → `#CC785C`, `accentColor` → `#3F7D58` (matches the shipped templates).
|
|
228
|
+
- Default `maxFileSizeMb` → `8` (was `12`). The bulk-test floor now comfortably fits under the new cap after the design refresh.
|
|
229
|
+
- Pricing structure: two subscription prices (monthly / yearly) replace the former three-tier matrix.
|
|
230
|
+
- CI builds now fail hard if `LICENSE_SIGNING_PUBLIC_KEY` is unset, preventing the publish of an artifact that would silently downgrade paying customers to the free tier.
|
|
231
|
+
|
|
232
|
+
### Removed
|
|
233
|
+
- One-time license tiers Professional (`RFPR-…`, $199/yr) and Enterprise (`RFEN-…`, $999/yr).
|
|
234
|
+
- CLI generation of legacy `RFPR-`/`RFEN-` keys from `scripts/generate-license.ts`.
|
|
235
|
+
- Standalone token-management dashboard (`/dashboard/tokens`, `/api/tokens/…`) — superseded by the subscription dashboard at `/dashboard`.
|
|
236
|
+
|
|
237
|
+
### Migration
|
|
238
|
+
No existing customers — clean cutover. New installs get the subscription flow.
|
|
239
|
+
|
|
240
|
+
## [0.1.0] — 2026-04-13
|
|
241
|
+
|
|
242
|
+
### Added
|
|
243
|
+
- Initial release of `pdf-report-forge`
|
|
244
|
+
- Three configurable report templates: `minimal`, `detailed`, `executive`
|
|
245
|
+
- Sections: Executive Summary + KPIs, Suite Breakdown, Failure Deep-Dive, CI/CD & Environment
|
|
246
|
+
- Embedded Chart.js charts (doughnut pass-rate, bar suite results) in `detailed` and `executive` templates
|
|
247
|
+
- Screenshot embedding — failures with screenshots are embedded inline (base64) in the PDF
|
|
248
|
+
- Requirements traceability matrix built from test tags in `detailed` template
|
|
249
|
+
- Defect log table in `detailed` template
|
|
250
|
+
- Cover page with verdict in `executive` template
|
|
251
|
+
- Custom branding: `logo`, `primaryColor`, `accentColor`
|
|
252
|
+
- Dynamic output filename tokens: `{date}`, `{branch}`, `{status}`
|
|
253
|
+
- Watermark overlay support
|
|
254
|
+
- PDF password encryption via `qpdf` integration
|
|
255
|
+
- Offline HMAC-based license key validation
|
|
256
|
+
- License tiers: Free (no key), Professional (`RFPR-`), Enterprise (`RFEN-`)
|
|
257
|
+
- CI/CD integration templates: GitHub Actions (basic + sharded), Jenkins, GitLab CI, Azure DevOps
|
|
258
|
+
- Reusable GitHub composite Action in `.github/actions/playwright-pdf-report/`
|
|
259
|
+
- Auto Chrome/Chromium discovery via `chrome-finder` + common system paths
|
|
260
|
+
- Full TypeScript support with exported types
|
|
261
|
+
|
|
262
|
+
[Unreleased]: https://github.com/muralidharan92/reportforge/compare/v1.4.1...HEAD
|
|
263
|
+
[1.4.1]: https://github.com/muralidharan92/reportforge/compare/v1.4.0...v1.4.1
|
|
264
|
+
[1.4.0]: https://github.com/muralidharan92/reportforge/compare/v1.3.0...v1.4.0
|
|
265
|
+
[1.3.0]: https://github.com/muralidharan92/reportforge/compare/v1.2.16...v1.3.0
|
|
266
|
+
[1.2.16]: https://github.com/muralidharan92/reportforge/compare/v1.2.15...v1.2.16
|
|
267
|
+
[1.2.15]: https://github.com/muralidharan92/reportforge/compare/v1.2.14...v1.2.15
|
|
268
|
+
[1.2.14]: https://github.com/muralidharan92/reportforge/compare/v1.2.13...v1.2.14
|
|
269
|
+
[1.2.13]: https://github.com/muralidharan92/reportforge/compare/v1.2.12...v1.2.13
|
|
270
|
+
[1.2.12]: https://github.com/muralidharan92/reportforge/compare/v1.2.11...v1.2.12
|
|
271
|
+
[1.2.11]: https://github.com/muralidharan92/reportforge/compare/v1.2.10...v1.2.11
|
|
272
|
+
[1.2.10]: https://github.com/muralidharan92/reportforge/compare/v1.2.9...v1.2.10
|
|
273
|
+
[1.2.9]: https://github.com/muralidharan92/reportforge/compare/v1.2.8...v1.2.9
|
|
274
|
+
[1.2.8]: https://github.com/muralidharan92/reportforge/compare/v1.2.7...v1.2.8
|
|
275
|
+
[1.2.7]: https://github.com/muralidharan92/reportforge/compare/v1.2.6...v1.2.7
|
|
276
|
+
[1.2.6]: https://github.com/muralidharan92/reportforge/compare/v1.2.5...v1.2.6
|
|
277
|
+
[1.2.5]: https://github.com/muralidharan92/reportforge/compare/v1.2.4...v1.2.5
|
|
278
|
+
[1.2.4]: https://github.com/muralidharan92/reportforge/compare/v1.2.3...v1.2.4
|
|
279
|
+
[1.2.3]: https://github.com/muralidharan92/reportforge/compare/v1.2.2...v1.2.3
|
|
280
|
+
[1.2.2]: https://github.com/muralidharan92/reportforge/compare/v1.2.1...v1.2.2
|
|
281
|
+
[1.2.1]: https://github.com/muralidharan92/reportforge/compare/v1.2.0...v1.2.1
|
|
282
|
+
[1.2.0]: https://github.com/muralidharan92/reportforge/compare/v1.1.0...v1.2.0
|
|
283
|
+
[1.1.0]: https://github.com/muralidharan92/reportforge/compare/v1.0.0...v1.1.0
|
|
284
|
+
[1.0.0]: https://github.com/muralidharan92/reportforge/releases/tag/v1.0.0
|
|
285
|
+
[0.1.0]: https://github.com/muralidharan92/reportforge/releases/tag/v0.1.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ReportForge
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|