@tistory-skin-previewer/astro
Version:
Astro integration for Tistory skin previewing
1 lines • 4.54 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;AAIe,SAAR,gBAAA,GAAsD;AAC3D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,8BAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,sBAAsB,CAAC;AAAA,QACrB,OAAA;AAAA,QACA,aAAA;AAAA,QACA,WAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA;AAAA,OAEF,KAAM;AACJ,QAAA,OAAA,CAAQ,IAAI,0DAA0D,CAAA;AACtE,QAAA,MAAM,SAAA,GAAY,aAAA;AAAA,UAChB,IAAI,GAAA,CAAI,wBAAA,EAA0B,MAAA,CAAO,IAAI;AAAA,SAC/C;AAGA,QAAA,IAAI,YAAY,KAAA,EAAO;AACrB,UAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,YAAA,MAAM,WAAA,GAAc,YAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAEnD,YAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,gCAAgC,CAAA,EAAG;AAC3D,cAAA,OAAA,CAAQ,KAAA,CAAM;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,cAAA,CAUb,CAAA;AAED,cAAA,OAAA,CAAQ,KAAK,0FAAmC,CAAA;AAChD,cAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,YAChB;AAAA,UACF;AAEA,UAAA,aAAA,CAAc;AAAA,YACZ,UAAA,EAAY,0CAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAID,UAAA,WAAA,CAAY;AAAA,YACV,OAAA,EAAS,YAAA;AAAA,YACT,UAAA,EAAY;AAAA,WACb,CAAA;AAGD,UAAA,WAAA,CAAY;AAAA,YACV,OAAA,EAAS,GAAA;AAAA,YACT,UAAA,EAAY;AAAA,WACb,CAAA;AAAA,QAMH;AAGA,QAAA,YAAA,CAAa;AAAA,UACX,IAAA,EAAM;AAAA,YACJ,KAAA,EAAO;AAAA,cACL,aAAA,EAAe;AAAA,gBACb,MAAA,EAAQ;AAAA;AAAA,kBAEN,cAAA,EAAgB,CAAC,SAAA,KAAc;AAC7B,oBAAA,IAAI,SAAA,CAAU,IAAA,EAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AACpC,sBAAA,OAAO,WAAA;AAAA,oBACT;AACA,oBAAA,OAAO,+BAAA;AAAA,kBACT;AAAA;AACF;AACF,aACF;AAAA;AAAA;AAAA,YAGA,IAAA,EAAM,OAAA,KAAY,OAAA,GAAU,IAAA,GAAO;AAAA;AACrC,SACD,CAAA;AAAA,MACH;AAAA;AACF,GACF;AACF","file":"index.mjs","sourcesContent":["import type { AstroIntegration } from \"astro\";\nimport { fileURLToPath } from \"node:url\";\nimport { existsSync, readFileSync } from \"node:fs\";\n\nexport default function tistoryPreviewer(): AstroIntegration {\n return {\n name: \"astro-tistory-skin-previewer\",\n hooks: {\n \"astro:config:setup\": ({\n command,\n addMiddleware,\n injectRoute,\n updateConfig,\n config,\n // injectScript,\n }) => {\n console.log(\"========= tistory-skin-previewer. By BlueNyang =========\");\n const skinEntry = fileURLToPath(\n new URL(\"./src/pages/skin.astro\", config.root)\n );\n\n // 개발 서버에서만 미들웨어와 가상 라우트 추가\n if (command === \"dev\") {\n if (existsSync(skinEntry)) {\n const skinContent = readFileSync(skinEntry, \"utf-8\");\n\n if (!skinContent.includes(\"export const prerender = false\")) {\n console.error(`\n🚫 티스토리 스킨 프리뷰어 설정 필요\n\nsrc/pages/skin.astro 파일에 다음 구문을 추가해주세요:\n\n---\nexport const prerender = false;\n---\n\n이 설정이 없으면 동적 라우팅에서 오류가 발생할 수 있습니다.\n `);\n\n console.warn(\"⚠️ prerender = false 설정을 확인해주세요!\");\n process.exit(1);\n }\n }\n\n addMiddleware({\n entrypoint: \"@tistory-skin-previewer/astro/middleware\",\n order: \"pre\",\n });\n\n // 2. 가상 라우팅을 위한 [...slug].astro 페이지 주입\n // 사용자가 직접 파일을 만들 필요 없이 라이브러리가 제공\n injectRoute({\n pattern: \"/[...slug]\",\n entrypoint: skinEntry,\n });\n\n // 사용자가 'skin.astro'도 만들 필요 없게 하려면 아래처럼 주입\n injectRoute({\n pattern: \"/\",\n entrypoint: skinEntry,\n });\n\n // injectScript(\n // \"head-inline\",\n // `<link rel=\"stylesheet\" href=\"https://tistory.github.io/tistory-skin-docs/css/default.css\">`\n // );\n }\n\n // Vite 설정 업데이트\n updateConfig({\n vite: {\n build: {\n rollupOptions: {\n output: {\n // 3. CSS 파일을 'style.css' 단일 파일로 빌드\n assetFileNames: (assetInfo) => {\n if (assetInfo.name?.endsWith(\".css\")) {\n return \"style.css\";\n }\n return \"assets/[name]-[hash][extname]\";\n },\n },\n },\n },\n // 3. 빌드 시 CSS 경로를 './style.css'로 변경\n // command === 'build'일 때만 base를 변경하도록 조건 추가 가능\n base: command === \"build\" ? \"./\" : \"/\",\n },\n });\n },\n },\n };\n}\n"]}