Route publish URLs through MindSpace facade
This commit is contained in:
@@ -54,6 +54,12 @@ export function createMindSpacePublicUrl({ publicBaseUrl, ownerKey, relativePath
|
|||||||
return `${base}/${MINDSPACE_PUBLIC_ROOT}/${encodeURIComponent(owner)}/${encodedRelative}`;
|
return `${base}/${MINDSPACE_PUBLIC_ROOT}/${encodeURIComponent(owner)}/${encodedRelative}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createMindSpaceUserRootUrl({ publicBaseUrl, ownerKey }) {
|
||||||
|
const base = normalizeMindSpacePublicBaseUrl(publicBaseUrl);
|
||||||
|
const owner = requiredSegment(ownerKey, 'ownerKey');
|
||||||
|
return `${base}/${MINDSPACE_PUBLIC_ROOT}/${encodeURIComponent(owner)}/`;
|
||||||
|
}
|
||||||
|
|
||||||
export function createMindSpacePublicPageUrl({ publicBaseUrl, ownerKey, filename }) {
|
export function createMindSpacePublicPageUrl({ publicBaseUrl, ownerKey, filename }) {
|
||||||
const clean = normalizeMindSpacePublicRelativePath(filename);
|
const clean = normalizeMindSpacePublicRelativePath(filename);
|
||||||
const relative = clean.startsWith(`${MINDSPACE_PUBLIC_ZONE}/`)
|
const relative = clean.startsWith(`${MINDSPACE_PUBLIC_ZONE}/`)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
canonicalizeMindSpacePublicUrl,
|
canonicalizeMindSpacePublicUrl,
|
||||||
createMindSpacePublicPageUrl,
|
createMindSpacePublicPageUrl,
|
||||||
createMindSpacePublicUrl,
|
createMindSpacePublicUrl,
|
||||||
|
createMindSpaceUserRootUrl,
|
||||||
normalizeMindSpacePublicRelativePath,
|
normalizeMindSpacePublicRelativePath,
|
||||||
parseMindSpacePublicUrl,
|
parseMindSpacePublicUrl,
|
||||||
} from './mindspace-canonical-url.mjs';
|
} from './mindspace-canonical-url.mjs';
|
||||||
@@ -19,6 +20,16 @@ test('createMindSpacePublicUrl encodes owner and relative path segments', () =>
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('createMindSpaceUserRootUrl preserves trailing slash root URL', () => {
|
||||||
|
assert.equal(
|
||||||
|
createMindSpaceUserRootUrl({
|
||||||
|
publicBaseUrl: 'https://m.tkmind.cn/',
|
||||||
|
ownerKey: 'user 1',
|
||||||
|
}),
|
||||||
|
'https://m.tkmind.cn/MindSpace/user%201/',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
test('createMindSpacePublicPageUrl always places html pages under public zone', () => {
|
test('createMindSpacePublicPageUrl always places html pages under public zone', () => {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
createMindSpacePublicPageUrl({
|
createMindSpacePublicPageUrl({
|
||||||
|
|||||||
+10
-7
@@ -1,6 +1,11 @@
|
|||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import {
|
||||||
|
createMindSpacePublicPageUrl,
|
||||||
|
createMindSpacePublicUrl,
|
||||||
|
createMindSpaceUserRootUrl,
|
||||||
|
} from './mindspace-canonical-url.mjs';
|
||||||
|
|
||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
@@ -114,17 +119,15 @@ export function migrateUserPublishDir(h5Root, user, legacyUsersRoot = null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function buildPublicUrl(publicBaseUrl, publishKey, filename = '') {
|
export function buildPublicUrl(publicBaseUrl, publishKey, filename = '') {
|
||||||
const base = `${publicBaseUrl}/${PUBLISH_ROOT_DIR}/${encodeURIComponent(publishKey)}`;
|
if (!filename) {
|
||||||
if (!filename) return `${base}/`;
|
return createMindSpaceUserRootUrl({ publicBaseUrl, ownerKey: publishKey });
|
||||||
const clean = filename.replace(/^\/+/, '');
|
}
|
||||||
return `${base}/${clean.split('/').map(encodeURIComponent).join('/')}`;
|
return createMindSpacePublicUrl({ publicBaseUrl, ownerKey: publishKey, relativePath: filename });
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Public-zone HTML pages live under \`public/\`; share URLs must include that segment. */
|
/** Public-zone HTML pages live under \`public/\`; share URLs must include that segment. */
|
||||||
export function buildPublicZonePageUrl(publicBaseUrl, publishKey, filename) {
|
export function buildPublicZonePageUrl(publicBaseUrl, publishKey, filename) {
|
||||||
const clean = String(filename ?? '').replace(/^\/+/, '');
|
return createMindSpacePublicPageUrl({ publicBaseUrl, ownerKey: publishKey, filename });
|
||||||
const relative = clean.startsWith(`${PUBLIC_ZONE_DIR}/`) ? clean : `${PUBLIC_ZONE_DIR}/${clean}`;
|
|
||||||
return buildPublicUrl(publicBaseUrl, publishKey, relative);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function renderPublishSkill({ slug, username, publicBaseUrl, publishDir, displayName }) {
|
export function renderPublishSkill({ slug, username, publicBaseUrl, publishDir, displayName }) {
|
||||||
|
|||||||
Reference in New Issue
Block a user