import assert from 'node:assert/strict' import test from 'node:test' import { needsCanonicalAppRedirect, resolveAppUrl, scopedAssetPath, serviceWorkerAllowedPath, serviceWorkerScope, shouldCanonicalizeClientPath, } from './app-url.ts' const origin = 'https://kentcdodds.kody.run' test('resolves series and sw URLs from a relative data-base', () => { assert.equal( resolveAppUrl('/packages/lineage/', 'api/series', origin), 'https://kentcdodds.kody.run/packages/lineage/api/series', ) assert.equal( resolveAppUrl('/packages/lineage', 'sw.js', origin), 'https://kentcdodds.kody.run/packages/lineage/sw.js', ) assert.equal( resolveAppUrl('/packages/lineage/', '/api/status', origin), 'https://kentcdodds.kody.run/packages/lineage/api/status', ) }) test('rejects the previous relative-base URL constructor', () => { assert.throws( () => new URL('api/series', '/packages/lineage/'), /Invalid URL/, ) }) test('joins service-worker shell paths without a URL base', () => { assert.equal( scopedAssetPath('/packages/lineage', 'manifest.webmanifest'), '/packages/lineage/manifest.webmanifest', ) }) test('service worker scope stays on the trailing-slash default max scope', () => { assert.equal( serviceWorkerScope('/packages/lineage/', origin), 'https://kentcdodds.kody.run/packages/lineage/', ) assert.equal( serviceWorkerScope('/packages/lineage', origin), 'https://kentcdodds.kody.run/packages/lineage/', ) assert.equal(serviceWorkerAllowedPath('/packages/lineage/'), '/packages/lineage') assert.equal(needsCanonicalAppRedirect('/packages/lineage', '/packages/lineage'), true) assert.equal(needsCanonicalAppRedirect('/packages/lineage/', '/packages/lineage'), false) assert.equal(shouldCanonicalizeClientPath('/packages/lineage'), true) assert.equal(shouldCanonicalizeClientPath('/packages/lineage/'), false) })