Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
6388eee
chore(deps): bump the actions group with 2 updates
dependabot[bot] Mar 18, 2026
3a68440
chore(deps): bump the production group in /patchnotes-web with 3 updates
dependabot[bot] Mar 18, 2026
8c143be
chore(deps): bump the production group
dependabot[bot] Mar 18, 2026
461805c
chore(deps-dev): bump typescript-eslint
dependabot[bot] Mar 18, 2026
cf4d749
chore(deps-dev): bump the dev-dependencies group
dependabot[bot] Mar 18, 2026
5b5925d
Bump the dotnet group with 12 updates
dependabot[bot] Mar 18, 2026
79e60a6
chore(deps-dev): bump the dev-dependencies group with 11 updates
dependabot[bot] Mar 18, 2026
8c1b653
chore(deps): bump zustand from 5.0.11 to 5.0.12
dependabot[bot] Mar 18, 2026
4db1d88
chore(deps): bump esbuild-wasm from 0.27.3 to 0.27.4
dependabot[bot] Mar 18, 2026
a410dbe
chore(deps): bump vitest from 4.0.18 to 4.1.0
dependabot[bot] Mar 18, 2026
5f1bad7
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/patchnot…
paulvanbrenk Mar 18, 2026
86d3fed
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/patchnot…
paulvanbrenk Mar 18, 2026
3d1e4eb
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/patchnot…
paulvanbrenk Mar 18, 2026
c8481f0
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/patchnot…
paulvanbrenk Mar 18, 2026
c376fe6
Merge remote-tracking branch 'origin/dependabot/nuget/PatchNotes.Api/…
paulvanbrenk Mar 18, 2026
a085127
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/dev-depe…
paulvanbrenk Mar 18, 2026
b51d72b
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/zustand-…
paulvanbrenk Mar 18, 2026
80d13ec
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/esbuild-…
paulvanbrenk Mar 18, 2026
69ee8de
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/vitest-4…
paulvanbrenk Mar 18, 2026
654cc3c
chore(deps): merge dependabot updates and regenerate lock file
paulvanbrenk Mar 18, 2026
cfe985a
chore(deps): vendor nanoid and remove package dependency
paulvanbrenk Mar 18, 2026
5f1fc0a
chore(deps): vendor nanoid in PatchNotes.Data and remove NuGet package
paulvanbrenk Mar 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ updates:
directory: "/patchnotes-email"
schedule:
interval: "weekly"
ignore:
# nanoid v5+ is ESM-only, incompatible with our CJS build
- dependency-name: "nanoid"
versions: [">=4.0.0"]
groups:
production:
dependency-type: "production"
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ jobs:
- uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5

- name: Setup Node.js
uses: actions/setup-node@v6
Expand Down Expand Up @@ -140,7 +140,7 @@ jobs:
- uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5

- name: Setup Node.js
uses: actions/setup-node@v6
Expand Down Expand Up @@ -200,7 +200,7 @@ jobs:
--no-build

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5

- name: Setup Node.js
uses: actions/setup-node@v6
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
- uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5

- name: Setup Node.js
uses: actions/setup-node@v6
Expand Down Expand Up @@ -107,7 +107,7 @@ jobs:
- uses: actions/checkout@v6

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@v5

- name: Setup Node.js
uses: actions/setup-node@v6
Expand Down Expand Up @@ -183,7 +183,7 @@ jobs:
path: ./api

- name: Login to Azure
uses: azure/login@v2
uses: azure/login@v3
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
Expand Down Expand Up @@ -237,7 +237,7 @@ jobs:
path: ./functions

- name: Login to Azure
uses: azure/login@v2
uses: azure/login@v3
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
Expand All @@ -263,7 +263,7 @@ jobs:
path: ./email-function

- name: Login to Azure
uses: azure/login@v2
uses: azure/login@v3
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
Expand Down
8 changes: 4 additions & 4 deletions PatchNotes.Api/PatchNotes.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
<ItemGroup>
<PackageReference Include="Markdig" Version="1.1.1" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.4">
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.5" />
<PackageReference Include="Stripe.net" Version="50.3.0" />
<PackageReference Include="Stytch.net" Version="3.2.0" />
<PackageReference Include="Svix" Version="1.87.0" />
<PackageReference Include="Svix" Version="1.88.0" />
</ItemGroup>

<ItemGroup>
Expand Down
16 changes: 14 additions & 2 deletions PatchNotes.Data/IdGenerator.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
using NanoidDotNet;
using System.Security.Cryptography;

namespace PatchNotes.Data;

public static class IdGenerator
{
public static string NewId() => Nanoid.Generate(size: 21);
private const string Alphabet = "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private const int Size = 21;

public static string NewId()
{
Span<byte> bytes = stackalloc byte[Size];
RandomNumberGenerator.Fill(bytes);
return string.Create(Size, bytes, static (chars, b) =>
{
for (var i = 0; i < chars.Length; i++)
chars[i] = Alphabet[b[i] & 63];
});
}
}
7 changes: 3 additions & 4 deletions PatchNotes.Data/PatchNotes.Data.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.4">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.4" />
<PackageReference Include="Nanoid" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.5" />
</ItemGroup>

<ItemGroup>
Expand Down
6 changes: 3 additions & 3 deletions PatchNotes.Sync.Core/PatchNotes.Sync.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.4" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="10.4.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.4" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.5" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\PatchNotes.Data\PatchNotes.Data.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.5" />
<EmbeddedResource Include="AI\Prompts\changelog-summary.txt" />
</ItemGroup>

Expand Down
2 changes: 1 addition & 1 deletion PatchNotes.Sync/PatchNotes.Sync.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.4" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.5" />
</ItemGroup>

<ItemGroup>
Expand Down
8 changes: 4 additions & 4 deletions PatchNotes.Tests/PatchNotes.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.collector" Version="8.0.0" />
<PackageReference Include="FluentAssertions" Version="8.8.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.4" />
<PackageReference Include="coverlet.collector" Version="8.0.1" />
<PackageReference Include="FluentAssertions" Version="8.9.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="xunit" Version="2.9.3" />
Expand Down
9 changes: 4 additions & 5 deletions patchnotes-email/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,13 @@
"@date-fns/utc": "^2.1.1",
"@prisma/adapter-mssql": "^7.5.0",
"@prisma/client": "^7.5.0",
"@react-email/components": "^1.0.9",
"@react-email/components": "^1.0.10",
"@react-email/render": "^2.0.4",
"applicationinsights": "^3.14.0",
"date-fns": "^4.1.0",
"esbuild-wasm": "^0.27.3",
"nanoid": "^3.3.11",
"esbuild-wasm": "^0.27.4",
"react": "catalog:",
"resend": "^6.9.3"
"resend": "^6.9.4"
},
"packageManager": "pnpm@10.28.0",
"devDependencies": {
Expand All @@ -46,7 +45,7 @@
"rimraf": "^6.1.3",
"tailwindcss": "catalog:",
"typescript": "catalog:",
"typescript-eslint": "^8.57.0",
"typescript-eslint": "^8.57.1",
"vitest": "catalog:"
}
}
2 changes: 1 addition & 1 deletion patchnotes-email/src/functions/sendDigest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { getPrismaClient } from "../lib/prisma.js";
import { renderTemplate, interpolateSubject } from "../lib/templateRenderer.js";
import { subDays, getDay, getHours, format } from "date-fns";
import { UTCDate } from "@date-fns/utc";
import { nanoid } from "nanoid";
import { nanoid } from "../lib/nanoid.js";

const DIGEST_WINDOW_DAYS = 7;

Expand Down
2 changes: 1 addition & 1 deletion patchnotes-email/src/functions/sendTestEmail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { getPrismaClient } from "../lib/prisma.js";
import { renderTemplate, interpolateSubject } from "../lib/templateRenderer.js";
import { subDays } from "date-fns";
import { UTCDate } from "@date-fns/utc";
import { nanoid } from "nanoid";
import { nanoid } from "../lib/nanoid.js";

interface SendTestEmailRequest {
templateId: string;
Expand Down
29 changes: 29 additions & 0 deletions patchnotes-email/src/lib/nanoid.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { randomFillSync } from "crypto";

const urlAlphabet =
"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";

const POOL_SIZE_MULTIPLIER = 128;
let pool: Buffer;
let poolOffset: number;

function fillPool(bytes: number) {
if (!pool || pool.length < bytes) {
pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
randomFillSync(pool);
poolOffset = 0;
} else if (poolOffset + bytes > pool.length) {
randomFillSync(pool);
poolOffset = 0;
}
poolOffset += bytes;
}

export function nanoid(size = 21): string {
fillPool((size |= 0));
let id = "";
for (let i = poolOffset - size; i < poolOffset; i++) {
id += urlAlphabet[pool[i] & 63];
}
return id;
}
28 changes: 14 additions & 14 deletions patchnotes-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,20 @@
"dependencies": {
"@stytch/react": "^20.0.4",
"@tanstack/react-pacer": "^0.20.0",
"@tanstack/react-query": "^5.90.21",
"@tanstack/react-router": "^1.166.7",
"@tanstack/react-query": "^5.91.0",
"@tanstack/react-router": "^1.167.5",
"lucide-react": "^0.577.0",
"react": "catalog:",
"react-dom": "^19.2.4",
"react-error-boundary": "^6.1.0",
"react-markdown": "^10.1.0",
"zustand": "^5.0.11"
"zustand": "^5.0.12"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@tailwindcss/vite": "^4.2.1",
"@tanstack/eslint-plugin-router": "^1.161.4",
"@tanstack/router-plugin": "^1.166.7",
"@tailwindcss/vite": "^4.2.2",
"@tanstack/eslint-plugin-router": "^1.161.6",
"@tanstack/router-plugin": "^1.166.14",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
Expand All @@ -52,24 +52,24 @@
"@types/react-dom": "^19.2.3",
"@typescript/native-preview": "catalog:",
"@vite-pwa/assets-generator": "^1.0.2",
"@vitejs/plugin-react": "^5.1.4",
"@vitest/coverage-v8": "^4.0.18",
"@vitejs/plugin-react": "^6.0.1",
"@vitest/coverage-v8": "^4.1.0",
"babel-plugin-react-compiler": "^1.0.0",
"eslint": "^10.0.3",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.5.2",
"globals": "^17.4.0",
"jsdom": "^28.1.0",
"knip": "^5.86.0",
"lint-staged": "^16.3.3",
"msw": "^2.12.10",
"jsdom": "^29.0.0",
"knip": "^5.88.0",
"lint-staged": "^16.4.0",
"msw": "^2.12.13",
"orval": "^8.5.3",
"prettier": "^3.8.1",
"tailwindcss": "catalog:",
"typescript": "catalog:",
"typescript-eslint": "^8.57.0",
"vite": "^7.2.4",
"typescript-eslint": "^8.57.1",
"vite": "^8.0.0",
"vite-plugin-pwa": "^1.2.0",
"vitest": "catalog:",
"zod": "^4.3.6"
Expand Down
6 changes: 1 addition & 5 deletions patchnotes-web/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,7 @@ export default defineConfig({
},
plugins: [
TanStackRouterVite(),
react({
babel: {
plugins: [['babel-plugin-react-compiler', {}]],
},
}),
react(),
tailwindcss(),
VitePWA({
registerType: 'autoUpdate',
Expand Down
Loading