967 lines
46 KiB
JavaScript
967 lines
46 KiB
JavaScript
module.exports = [
|
||
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||
|
||
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
|
||
|
||
module.exports = mod;
|
||
}),
|
||
"[project]/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => {
|
||
|
||
__turbopack_context__.n(__turbopack_context__.i("[project]/app/layout.tsx [app-rsc] (ecmascript)"));
|
||
}),
|
||
"[project]/components/chapter-content.tsx [app-rsc] (client reference proxy) <module evaluation>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// This file is generated by next-core EcmascriptClientReferenceModule.
|
||
__turbopack_context__.s([
|
||
"ChapterContent",
|
||
()=>ChapterContent
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)");
|
||
;
|
||
const ChapterContent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() {
|
||
throw new Error("Attempted to call ChapterContent() from the server but ChapterContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.");
|
||
}, "[project]/components/chapter-content.tsx <module evaluation>", "ChapterContent");
|
||
}),
|
||
"[project]/components/chapter-content.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// This file is generated by next-core EcmascriptClientReferenceModule.
|
||
__turbopack_context__.s([
|
||
"ChapterContent",
|
||
()=>ChapterContent
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)");
|
||
;
|
||
const ChapterContent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() {
|
||
throw new Error("Attempted to call ChapterContent() from the server but ChapterContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.");
|
||
}, "[project]/components/chapter-content.tsx", "ChapterContent");
|
||
}),
|
||
"[project]/components/chapter-content.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$components$2f$chapter$2d$content$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__$3c$module__evaluation$3e$__ = __turbopack_context__.i("[project]/components/chapter-content.tsx [app-rsc] (client reference proxy) <module evaluation>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$components$2f$chapter$2d$content$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/components/chapter-content.tsx [app-rsc] (client reference proxy)");
|
||
;
|
||
__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$chapter$2d$content$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__);
|
||
}),
|
||
"[externals]/fs [external] (fs, cjs)", ((__turbopack_context__, module, exports) => {
|
||
|
||
const mod = __turbopack_context__.x("fs", () => require("fs"));
|
||
|
||
module.exports = mod;
|
||
}),
|
||
"[project]/lib/book-file-system.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"getBookStructure",
|
||
()=>getBookStructure,
|
||
"getChapterBySectionSlug",
|
||
()=>getChapterBySectionSlug,
|
||
"getSectionBySlug",
|
||
()=>getSectionBySlug,
|
||
"getSectionContent",
|
||
()=>getSectionContent
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/fs [external] (fs, cjs)");
|
||
var __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/path [external] (path, cjs)");
|
||
;
|
||
;
|
||
const BOOK_DIR = __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(process.cwd(), "book");
|
||
const CHINESE_NUM_MAP = {
|
||
一: "01",
|
||
二: "02",
|
||
三: "03",
|
||
四: "04",
|
||
五: "05",
|
||
六: "06",
|
||
七: "07",
|
||
八: "08",
|
||
九: "09",
|
||
十: "10"
|
||
};
|
||
const SUBTITLES = {
|
||
"真实的人": "人性观察与社交逻辑",
|
||
"真实的行业": "社会运作的底层规则",
|
||
"真实的错误": "错过机会比失败更贵",
|
||
"真实的赚钱": "所有行业的杠杆结构",
|
||
"真实的社会": "人与系统的关系"
|
||
};
|
||
function parsePartFolderName(folderName) {
|
||
// Example: _第一篇|真实的人
|
||
const match = folderName.match(/_第([一二三四五六七八九十]+)篇|(.+)/);
|
||
if (match) {
|
||
return {
|
||
number: CHINESE_NUM_MAP[match[1]] || match[1],
|
||
title: match[2]
|
||
};
|
||
}
|
||
return null;
|
||
}
|
||
function parseChapterFolderName(folderName) {
|
||
// Example: 第1章|人与人之间的底层逻辑
|
||
const match = folderName.match(/第(\d+)章|(.+)/);
|
||
if (match) {
|
||
return {
|
||
id: match[1],
|
||
title: match[2]
|
||
};
|
||
}
|
||
return null;
|
||
}
|
||
function parseSectionFileName(fileName) {
|
||
// Example: 1.1 自行车荷总:一个行业做到极致是什么样.md
|
||
if (!fileName.endsWith(".md")) return null;
|
||
const name = fileName.replace(".md", "");
|
||
const match = name.match(/^([\d.]+)\s+(.+)/);
|
||
if (match) {
|
||
return {
|
||
id: match[1],
|
||
title: match[2]
|
||
};
|
||
}
|
||
// Fallback for files without number prefix if any (though project seems to use them)
|
||
return {
|
||
id: fileName,
|
||
title: name
|
||
};
|
||
}
|
||
function getBookStructure() {
|
||
if (!__TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].existsSync(BOOK_DIR)) {
|
||
return [];
|
||
}
|
||
const partFolders = __TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].readdirSync(BOOK_DIR).filter((f)=>{
|
||
const fullPath = __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(BOOK_DIR, f);
|
||
return __TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].statSync(fullPath).isDirectory() && f.startsWith("_");
|
||
});
|
||
const parts = partFolders.map((folderName)=>{
|
||
const parsed = parsePartFolderName(folderName);
|
||
if (!parsed) return null;
|
||
const partPath = __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(BOOK_DIR, folderName);
|
||
const chapterFolders = __TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].readdirSync(partPath).filter((f)=>{
|
||
const fullPath = __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(partPath, f);
|
||
return __TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].statSync(fullPath).isDirectory() && f.startsWith("第");
|
||
});
|
||
const chapters = chapterFolders.map((chapterFolderName)=>{
|
||
const parsedChapter = parseChapterFolderName(chapterFolderName);
|
||
if (!parsedChapter) return null;
|
||
const chapterPath = __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(partPath, chapterFolderName);
|
||
const sectionFiles = __TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].readdirSync(chapterPath).filter((f)=>f.endsWith(".md"));
|
||
const sections = sectionFiles.map((fileName)=>{
|
||
const parsedSection = parseSectionFileName(fileName);
|
||
if (!parsedSection) return null;
|
||
return {
|
||
id: parsedSection.id,
|
||
title: parsedSection.title,
|
||
price: 1,
|
||
isFree: parsedSection.id.endsWith(".1"),
|
||
filePath: __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].relative(process.cwd(), __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(chapterPath, fileName))
|
||
};
|
||
}).filter((s)=>s !== null).sort((a, b)=>{
|
||
// Numeric sort for section IDs (1.1, 1.2, 1.10)
|
||
const partsA = a.id.split('.').map(Number);
|
||
const partsB = b.id.split('.').map(Number);
|
||
for(let i = 0; i < Math.max(partsA.length, partsB.length); i++){
|
||
const valA = partsA[i] || 0;
|
||
const valB = partsB[i] || 0;
|
||
if (valA !== valB) return valA - valB;
|
||
}
|
||
return 0;
|
||
});
|
||
return {
|
||
id: parsedChapter.id,
|
||
title: parsedChapter.title,
|
||
sections
|
||
};
|
||
}).filter((c)=>c !== null).sort((a, b)=>Number(a.id) - Number(b.id));
|
||
return {
|
||
id: parsed.number,
|
||
number: parsed.number,
|
||
title: parsed.title,
|
||
subtitle: SUBTITLES[parsed.title] || "",
|
||
chapters
|
||
};
|
||
}).filter((p)=>p !== null).sort((a, b)=>Number(a.number) - Number(b.number));
|
||
return parts;
|
||
}
|
||
function getSectionBySlug(slug) {
|
||
const parts = getBookStructure();
|
||
for (const part of parts){
|
||
for (const chapter of part.chapters){
|
||
for (const section of chapter.sections){
|
||
if (section.id === slug) {
|
||
return section;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
function getChapterBySectionSlug(slug) {
|
||
const parts = getBookStructure();
|
||
for (const part of parts){
|
||
for (const chapter of part.chapters){
|
||
for (const section of chapter.sections){
|
||
if (section.id === slug) {
|
||
return {
|
||
part,
|
||
chapter
|
||
};
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
function getSectionContent(filePath) {
|
||
const fullPath = __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(process.cwd(), filePath);
|
||
if (!__TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].existsSync(fullPath)) {
|
||
return "";
|
||
}
|
||
return __TURBOPACK__imported__module__$5b$externals$5d2f$fs__$5b$external$5d$__$28$fs$2c$__cjs$29$__["default"].readFileSync(fullPath, "utf-8");
|
||
}
|
||
}),
|
||
"[project]/lib/book-data.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"AUTHOR_SHARE",
|
||
()=>AUTHOR_SHARE,
|
||
"BASE_BOOK_PRICE",
|
||
()=>BASE_BOOK_PRICE,
|
||
"DISTRIBUTOR_SHARE",
|
||
()=>DISTRIBUTOR_SHARE,
|
||
"FULL_BOOK_PRICE",
|
||
()=>FULL_BOOK_PRICE,
|
||
"PRICE_INCREMENT_PER_SECTION",
|
||
()=>PRICE_INCREMENT_PER_SECTION,
|
||
"SECTION_PRICE",
|
||
()=>SECTION_PRICE,
|
||
"addCustomSection",
|
||
()=>addCustomSection,
|
||
"bookData",
|
||
()=>bookData,
|
||
"getAllSections",
|
||
()=>getAllSections,
|
||
"getChapterBySection",
|
||
()=>getChapterBySection,
|
||
"getFullBookPrice",
|
||
()=>getFullBookPrice,
|
||
"getSectionById",
|
||
()=>getSectionById,
|
||
"isSectionUnlocked",
|
||
()=>isSectionUnlocked,
|
||
"specialSections",
|
||
()=>specialSections
|
||
]);
|
||
const BASE_BOOK_PRICE = 9.9;
|
||
const PRICE_INCREMENT_PER_SECTION = 1;
|
||
const SECTION_PRICE = 1;
|
||
const AUTHOR_SHARE = 0.9;
|
||
const DISTRIBUTOR_SHARE = 0.1;
|
||
function getFullBookPrice(sectionsCount) {
|
||
return 9.9;
|
||
}
|
||
const bookData = [
|
||
{
|
||
id: "part-1",
|
||
number: "01",
|
||
title: "真实的人",
|
||
subtitle: "人性观察与社交逻辑",
|
||
chapters: [
|
||
{
|
||
id: "chapter-1",
|
||
title: "人与人之间的底层逻辑",
|
||
sections: [
|
||
{
|
||
id: "1.1",
|
||
title: "自行车荷总:一个行业做到极致是什么样",
|
||
price: 1,
|
||
isFree: true,
|
||
filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 自行车荷总:一个行业做到极致是什么样.md"
|
||
},
|
||
{
|
||
id: "1.2",
|
||
title: "老墨:资源整合高手的社交方法",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.2 老墨:资源整合高手的社交方法.md"
|
||
},
|
||
{
|
||
id: "1.3",
|
||
title: "笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统",
|
||
price: 1,
|
||
isFree: false,
|
||
filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.3 笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统.md"
|
||
},
|
||
{
|
||
id: "1.4",
|
||
title: "人性的三角结构:情绪、价值、利益",
|
||
price: 1,
|
||
isFree: false,
|
||
filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.4 人性的三角结构:情绪、价值、利益.md"
|
||
},
|
||
{
|
||
id: "1.5",
|
||
title: "为什么99%的合作死在沟通差而不是能力差",
|
||
price: 1,
|
||
isFree: false,
|
||
filePath: "book/_第一篇|真实的人/第1章|人与人之间的底层逻辑/1.5 为什么99%的合作死在沟通差而不是能力差.md"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "chapter-2",
|
||
title: "人性困境案例",
|
||
sections: [
|
||
{
|
||
id: "2.1",
|
||
title: "相亲故事:你以为找的是人,实际是在找模式",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.1 相亲故事:你以为找的是人,实际是在找模式.md"
|
||
},
|
||
{
|
||
id: "2.2",
|
||
title: "找工作迷茫者:为什么简历解决不了人生",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.2 找工作迷茫者:为什么简历解决不了人生.md"
|
||
},
|
||
{
|
||
id: "2.3",
|
||
title: "撸运费险:小钱困住大脑的真实心理",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.3 撸运费险:小钱困住大脑的真实心理.md"
|
||
},
|
||
{
|
||
id: "2.4",
|
||
title: "游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.4 游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力.md"
|
||
},
|
||
{
|
||
id: "2.5",
|
||
title: "健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/_第一篇|真实的人/第2章|人性困境案例/2.5 健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒.md"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "part-2",
|
||
number: "02",
|
||
title: "真实的行业",
|
||
subtitle: "社会运作的底层规则",
|
||
chapters: [
|
||
{
|
||
id: "chapter-3",
|
||
title: "电商篇",
|
||
sections: [
|
||
{
|
||
id: "3.1",
|
||
title: "电商财税窗口:我错过的第一桶金",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第3章|电商篇/3.1 电商财税窗口:我错过的第一桶金.md"
|
||
},
|
||
{
|
||
id: "3.2",
|
||
title: "3000万流水如何跑出来(退税模式解析)",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第3章|电商篇/3.2 3000万流水如何跑出来(退税模式解析).md"
|
||
},
|
||
{
|
||
id: "3.3",
|
||
title: "供应链之王vs打工人:利润不在前端",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第3章|电商篇/3.3 供应链之王 vs 打工人:利润不在前端.md"
|
||
},
|
||
{
|
||
id: "3.4",
|
||
title: "社区团购的底层逻辑",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第3章|电商篇/3.4 社区团购的底层逻辑.md"
|
||
},
|
||
{
|
||
id: "3.5",
|
||
title: "跨境电商与退税套利",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第3章|电商篇/3.5 跨境电商与退税套利.md"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "chapter-4",
|
||
title: "内容商业篇",
|
||
sections: [
|
||
{
|
||
id: "4.1",
|
||
title: "旅游号:30天10万粉的真实逻辑",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.1 旅游号:30天10万粉的真实逻辑.md"
|
||
},
|
||
{
|
||
id: "4.2",
|
||
title: "做号工厂:如何让一个号变成一个机器",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.2 做号工厂:如何让一个号变成一个机器.md"
|
||
},
|
||
{
|
||
id: "4.3",
|
||
title: "情绪内容为什么比专业内容更赚钱",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.3 情绪内容为什么比专业内容更赚钱.md"
|
||
},
|
||
{
|
||
id: "4.4",
|
||
title: "猫与宠物号:为什么宠物赛道永不过时",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.4 猫与宠物号:为什么宠物赛道永不过时.md"
|
||
},
|
||
{
|
||
id: "4.5",
|
||
title: "直播间里的三种人:演员、技术工、系统流",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.5 直播间里的三种人:演员、技术工、系统流.md"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "chapter-5",
|
||
title: "传统行业篇",
|
||
sections: [
|
||
{
|
||
id: "5.1",
|
||
title: "羽毛球馆:为什么体育培训是最稳定的现金流",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.1 羽毛球馆:为什么体育培训是最稳定的现金流.md"
|
||
},
|
||
{
|
||
id: "5.2",
|
||
title: "旅游供应链:资源越老越值钱",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.2 旅游供应链:资源越老越值钱.md"
|
||
},
|
||
{
|
||
id: "5.3",
|
||
title: "景区联盟:门票不是目的,是流量入口",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.3 景区联盟:门票不是目的,是流量入口.md"
|
||
},
|
||
{
|
||
id: "5.4",
|
||
title: "拍卖行抱朴:我人生错过的4件大钱机会(完整版)",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.4 拍卖行抱朴:我人生错过的4件大钱机会(完整版).md"
|
||
},
|
||
{
|
||
id: "5.5",
|
||
title: "飞机票供应链:为什么越便宜越亏",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.5 飞机票供应链:为什么越便宜越亏.md"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "part-3",
|
||
number: "03",
|
||
title: "真实的错误",
|
||
subtitle: "错过机会比失败更贵",
|
||
chapters: [
|
||
{
|
||
id: "chapter-6",
|
||
title: "我人生错过的4件大钱",
|
||
sections: [
|
||
{
|
||
id: "6.1",
|
||
title: "错过电商财税(2016-2017)",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.1 错过电商财税(2016-2017).md"
|
||
},
|
||
{
|
||
id: "6.2",
|
||
title: "错过供应链(2017-2018)",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.2 错过供应链(2017-2018).md"
|
||
},
|
||
{
|
||
id: "6.3",
|
||
title: "错过内容红利(2018-2019)",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.3 错过内容红利(2018-2019).md"
|
||
},
|
||
{
|
||
id: "6.4",
|
||
title: "错过资源资产化(2019-2020)",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.4 错过资源资产化(2019-2020).md"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "chapter-7",
|
||
title: "别人犯的错误",
|
||
sections: [
|
||
{
|
||
id: "7.1",
|
||
title: "投资房年轻人的迷茫:资金vs能力",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.1 投资房年轻人的迷茫:资金 vs 能力.md"
|
||
},
|
||
{
|
||
id: "7.2",
|
||
title: "信息差骗局:永远有人靠卖学习赚钱",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.2 信息差骗局:永远有人靠卖学习赚钱.md"
|
||
},
|
||
{
|
||
id: "7.3",
|
||
title: "在Soul找恋爱但想赚钱的人",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md"
|
||
},
|
||
{
|
||
id: "7.4",
|
||
title: "创业者的三种死法:冲动、轻信、没结构",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.4 创业者的三种死法:冲动、轻信、没结构.md"
|
||
},
|
||
{
|
||
id: "7.5",
|
||
title: "人情生意的终点:关系越多亏得越多",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.5 人情生意的终点:关系越多亏得越多.md"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "part-4",
|
||
number: "04",
|
||
title: "真实的赚钱",
|
||
subtitle: "所有行业的杠杆结构",
|
||
chapters: [
|
||
{
|
||
id: "chapter-8",
|
||
title: "底层结构",
|
||
sections: [
|
||
{
|
||
id: "8.1",
|
||
title: "流量杠杆:抖音、Soul、飞书",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.1 流量杠杆:抖音、Soul、飞书.md"
|
||
},
|
||
{
|
||
id: "8.2",
|
||
title: "价格杠杆:供应链与信息差",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.2 价格杠杆:供应链与信息差.md"
|
||
},
|
||
{
|
||
id: "8.3",
|
||
title: "时间杠杆:自动化+AI",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.3 时间杠杆:自动化 + AI.md"
|
||
},
|
||
{
|
||
id: "8.4",
|
||
title: "情绪杠杆:咨询、婚恋、生意场",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.4 情绪杠杆:咨询、婚恋、生意场.md"
|
||
},
|
||
{
|
||
id: "8.5",
|
||
title: "社交杠杆:认识谁比你会什么更重要",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.5 社交杠杆:认识谁比你会什么更重要.md"
|
||
},
|
||
{
|
||
id: "8.6",
|
||
title: "云阿米巴:分不属于自己的钱",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.6 云阿米巴:分不属于自己的钱.md"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "chapter-9",
|
||
title: "我在Soul上亲访的赚钱案例",
|
||
sections: [
|
||
{
|
||
id: "9.1",
|
||
title: "游戏账号私域:账号即资产",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.1 游戏账号私域:账号即资产.md"
|
||
},
|
||
{
|
||
id: "9.2",
|
||
title: "健康包模式:高复购、高毛利",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.2 健康包模式:高复购、高毛利.md"
|
||
},
|
||
{
|
||
id: "9.3",
|
||
title: "药物私域:长期关系赛道",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md"
|
||
},
|
||
{
|
||
id: "9.4",
|
||
title: "残疾机构合作:退税×AI×人力成本",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md"
|
||
},
|
||
{
|
||
id: "9.5",
|
||
title: "私域银行:粉丝即小股东",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md"
|
||
},
|
||
{
|
||
id: "9.6",
|
||
title: "Soul派对房:陌生人成交的最快场景",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.6 Soul派对房:陌生人成交的最快场景.md"
|
||
},
|
||
{
|
||
id: "9.7",
|
||
title: "飞书中台:从聊天到成交的流程化体系",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.7 飞书中台:从聊天到成交的流程化体系.md"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "part-5",
|
||
number: "05",
|
||
title: "真实的未来",
|
||
subtitle: "人与系统的关系",
|
||
chapters: [
|
||
{
|
||
id: "chapter-10",
|
||
title: "未来职业的变化趋势",
|
||
sections: [
|
||
{
|
||
id: "10.1",
|
||
title: "AI代聊与岗位替换",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.1 AI代聊与岗位替换.md"
|
||
},
|
||
{
|
||
id: "10.2",
|
||
title: "系统化工作vs杂乱工作",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.2 系统化工作 vs 杂乱工作.md"
|
||
},
|
||
{
|
||
id: "10.3",
|
||
title: "为什么链接能力会成为第一价值",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.3 为什么链接能力会成为第一价值.md"
|
||
},
|
||
{
|
||
id: "10.4",
|
||
title: "新型公司:Soul-飞书-线下的三位一体",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.4 新型公司:Soul-飞书-线下的三位一体.md"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: "chapter-11",
|
||
title: "中国社会商业生态的未来",
|
||
sections: [
|
||
{
|
||
id: "11.1",
|
||
title: "城市之间的模式差",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.1 城市之间的模式差.md"
|
||
},
|
||
{
|
||
id: "11.2",
|
||
title: "厦门样本:低成本高效率经济",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.2 厦门样本:低成本高效率经济.md"
|
||
},
|
||
{
|
||
id: "11.3",
|
||
title: "流量红利的终局",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.3 流量红利的终局.md"
|
||
},
|
||
{
|
||
id: "11.4",
|
||
title: "大模型+供应链的组合拳",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.4 大模型 + 供应链的组合拳.md"
|
||
},
|
||
{
|
||
id: "11.5",
|
||
title: "社会分层的最终逻辑",
|
||
price: 1,
|
||
isFree: false,
|
||
unlockAfterDays: 3,
|
||
filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.5 社会分层的最终逻辑.md"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
];
|
||
const specialSections = {
|
||
preface: {
|
||
id: "preface",
|
||
title: "序言|为什么我每天早上6点在Soul开播?",
|
||
price: 0,
|
||
isFree: true,
|
||
filePath: "book/序言|为什么我每天早上6点在Soul开播?.md"
|
||
},
|
||
epilogue: {
|
||
id: "epilogue",
|
||
title: "尾声|终极答案:努力不是关键,选择才是",
|
||
price: 0,
|
||
isFree: true,
|
||
filePath: "book/尾声|终极答案:努力不是关键,选择才是.md"
|
||
}
|
||
};
|
||
const FULL_BOOK_PRICE = getFullBookPrice();
|
||
function getAllSections() {
|
||
const sections = [];
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
bookData.forEach((part)=>{
|
||
part.chapters.forEach((chapter)=>{
|
||
sections.push(...chapter.sections);
|
||
});
|
||
});
|
||
return sections;
|
||
}
|
||
function getSectionById(id) {
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
for (const part of bookData){
|
||
for (const chapter of part.chapters){
|
||
const section = chapter.sections.find((s)=>s.id === id);
|
||
if (section) return section;
|
||
}
|
||
}
|
||
return undefined;
|
||
}
|
||
function getChapterBySection(sectionId) {
|
||
for (const part of bookData){
|
||
for (const chapter of part.chapters){
|
||
if (chapter.sections.some((s)=>s.id === sectionId)) {
|
||
return {
|
||
part,
|
||
chapter
|
||
};
|
||
}
|
||
}
|
||
}
|
||
return undefined;
|
||
}
|
||
function isSectionUnlocked(section) {
|
||
if (section.isFree) return true;
|
||
if (!section.unlockAfterDays || !section.createdAt) return false;
|
||
const createdDate = new Date(section.createdAt);
|
||
const unlockDate = new Date(createdDate.getTime() + section.unlockAfterDays * 24 * 60 * 60 * 1000);
|
||
return new Date() >= unlockDate;
|
||
}
|
||
function addCustomSection(section) {
|
||
const newSection = {
|
||
...section,
|
||
createdAt: new Date().toISOString()
|
||
};
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
return newSection;
|
||
}
|
||
}),
|
||
"[project]/app/read/[id]/page.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"default",
|
||
()=>ReadPage,
|
||
"dynamic",
|
||
()=>dynamic
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$api$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/api/navigation.react-server.js [app-rsc] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/components/navigation.react-server.js [app-rsc] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$components$2f$chapter$2d$content$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/components/chapter-content.tsx [app-rsc] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$file$2d$system$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/book-file-system.ts [app-rsc] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$data$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/book-data.ts [app-rsc] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
const dynamic = 'force-dynamic';
|
||
async function ReadPage({ params }) {
|
||
const { id } = await params;
|
||
// Check special sections first
|
||
// Note: Special sections might not have file paths in the dynamic system yet unless mapped
|
||
// For now, we keep the hardcoded specialSections check but maybe we should map them to files too
|
||
if (id === "preface") {
|
||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$chapter$2d$content$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ChapterContent"], {
|
||
section: __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$data$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["specialSections"].preface,
|
||
partTitle: "序言",
|
||
chapterTitle: ""
|
||
}, void 0, false, {
|
||
fileName: "[project]/app/read/[id]/page.tsx",
|
||
lineNumber: 19,
|
||
columnNumber: 12
|
||
}, this);
|
||
}
|
||
if (id === "epilogue") {
|
||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$chapter$2d$content$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ChapterContent"], {
|
||
section: __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$data$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["specialSections"].epilogue,
|
||
partTitle: "尾声",
|
||
chapterTitle: ""
|
||
}, void 0, false, {
|
||
fileName: "[project]/app/read/[id]/page.tsx",
|
||
lineNumber: 23,
|
||
columnNumber: 12
|
||
}, this);
|
||
}
|
||
// Find regular section from dynamic file system
|
||
const section = (0, __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$file$2d$system$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSectionBySlug"])(id);
|
||
if (!section) {
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["notFound"])();
|
||
}
|
||
const context = (0, __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$file$2d$system$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getChapterBySectionSlug"])(id);
|
||
if (!context) {
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["notFound"])();
|
||
}
|
||
// Read content from file
|
||
const content = (0, __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$book$2d$file$2d$system$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getSectionContent"])(section.filePath);
|
||
const sectionWithContent = {
|
||
...section,
|
||
content
|
||
};
|
||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$components$2f$chapter$2d$content$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ChapterContent"], {
|
||
section: sectionWithContent,
|
||
partTitle: context.part.title,
|
||
chapterTitle: context.chapter.title
|
||
}, void 0, false, {
|
||
fileName: "[project]/app/read/[id]/page.tsx",
|
||
lineNumber: 41,
|
||
columnNumber: 10
|
||
}, this);
|
||
}
|
||
}),
|
||
"[project]/app/read/[id]/page.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => {
|
||
|
||
__turbopack_context__.n(__turbopack_context__.i("[project]/app/read/[id]/page.tsx [app-rsc] (ecmascript)"));
|
||
}),
|
||
];
|
||
|
||
//# sourceMappingURL=%5Broot-of-the-server%5D__1ce3ad54._.js.map
|