[{"data":1,"prerenderedAt":567},["ShallowReactive",2],{"content-ja-\u002Fapi\u002Floader":3},{"id":4,"title":5,"body":6,"description":560,"extension":561,"meta":562,"navigation":183,"path":563,"seo":564,"stem":565,"__hash__":566},"content_ja\u002Fapi\u002Floader.md","loader",{"type":7,"value":8,"toc":549},"minimark",[9,12,27,85,89,143,146,151,158,209,213,216,249,253,256,291,295,298,488,507,510,527,530,545],[10,11,5],"h1",{"id":5},[13,14,15,19,20,19,23,26],"p",{},[16,17,18],"code",{},"include","、",[16,21,22],{},"component",[16,24,25],{},"extend"," で参照されるパスを解決し、ソース文字列を返す関数です。",[28,29,34],"pre",{"className":30,"code":31,"language":32,"meta":33,"style":33},"language-ts shiki shiki-themes github-light github-dark","type Loader = (path: string) => Promise\u003Cstring>\n","ts","",[16,35,36],{"__ignoreMap":33},[37,38,41,45,49,52,56,60,63,67,70,73,76,79,82],"span",{"class":39,"line":40},"line",1,[37,42,44],{"class":43},"szBVR","type",[37,46,48],{"class":47},"sScJk"," Loader",[37,50,51],{"class":43}," =",[37,53,55],{"class":54},"sVt8B"," (",[37,57,59],{"class":58},"s4XuR","path",[37,61,62],{"class":43},":",[37,64,66],{"class":65},"sj4cs"," string",[37,68,69],{"class":54},") ",[37,71,72],{"class":43},"=>",[37,74,75],{"class":47}," Promise",[37,77,78],{"class":54},"\u003C",[37,80,81],{"class":65},"string",[37,83,84],{"class":54},">\n",[86,87,88],"h2",{"id":88},"デフォルトの挙動",[90,91,92,105],"table",{},[93,94,95],"thead",{},[96,97,98,102],"tr",{},[99,100,101],"th",{},"環境",[99,103,104],{},"省略時",[106,107,108,128],"tbody",{},[96,109,110,122],{},[111,112,113,114,117,118,121],"td",{},"Node（",[16,115,116],{},"renderServer"," \u002F ",[16,119,120],{},"build","）",[111,123,124,127],{},[16,125,126],{},"createNodeLoader()"," — ローカル FS + リモート URL",[96,129,130,136],{},[111,131,132,133,121],{},"ブラウザ（",[16,134,135],{},"renderClient",[111,137,138,142],{},[139,140,141],"strong",{},"必須","（ライブラリは fetch しない）",[86,144,145],{"id":145},"公開ヘルパー",[147,148,150],"h3",{"id":149},"createnodeloader","createNodeLoader",[13,152,153,154,157],{},"Node 向けのデフォルト loader です。ローカルファイルと ",[16,155,156],{},"https:\u002F\u002F"," などのリモート URL を読み込めます。",[28,159,161],{"className":30,"code":160,"language":32,"meta":33,"style":33},"import { createNodeLoader } from '@b4moss\u002Fhyogen-md'\n\nconst loader = createNodeLoader()\n\u002F\u002F オプション: { from: '.\u002Fparent.md', via: 'include' }\n",[16,162,163,178,185,202],{"__ignoreMap":33},[37,164,165,168,171,174],{"class":39,"line":40},[37,166,167],{"class":43},"import",[37,169,170],{"class":54}," { createNodeLoader } ",[37,172,173],{"class":43},"from",[37,175,177],{"class":176},"sZZnC"," '@b4moss\u002Fhyogen-md'\n",[37,179,181],{"class":39,"line":180},2,[37,182,184],{"emptyLinePlaceholder":183},true,"\n",[37,186,188,191,194,196,199],{"class":39,"line":187},3,[37,189,190],{"class":43},"const",[37,192,193],{"class":65}," loader",[37,195,51],{"class":43},[37,197,198],{"class":47}," createNodeLoader",[37,200,201],{"class":54},"()\n",[37,203,205],{"class":39,"line":204},4,[37,206,208],{"class":207},"sJ8bj","\u002F\u002F オプション: { from: '.\u002Fparent.md', via: 'include' }\n",[147,210,212],{"id":211},"createfsloader","createFsLoader",[13,214,215],{},"ローカルファイルシステムのみを読み込む loader です。リモート URL は扱いません。",[28,217,219],{"className":30,"code":218,"language":32,"meta":33,"style":33},"import { createFsLoader } from '@b4moss\u002Fhyogen-md'\n\nconst loader = createFsLoader()\n",[16,220,221,232,236],{"__ignoreMap":33},[37,222,223,225,228,230],{"class":39,"line":40},[37,224,167],{"class":43},[37,226,227],{"class":54}," { createFsLoader } ",[37,229,173],{"class":43},[37,231,177],{"class":176},[37,233,234],{"class":39,"line":180},[37,235,184],{"emptyLinePlaceholder":183},[37,237,238,240,242,244,247],{"class":39,"line":187},[37,239,190],{"class":43},[37,241,193],{"class":65},[37,243,51],{"class":43},[37,245,246],{"class":47}," createFsLoader",[37,248,201],{"class":54},[147,250,252],{"id":251},"isremotepath","isRemotePath",[13,254,255],{},"パスがリモート URL かどうかを判定するユーティリティです。",[28,257,259],{"className":30,"code":258,"language":32,"meta":33,"style":33},"import { isRemotePath } from '@b4moss\u002Fhyogen-md'\n\nisRemotePath('https:\u002F\u002Fexample.com\u002Fpage.md') \u002F\u002F true\n",[16,260,261,272,276],{"__ignoreMap":33},[37,262,263,265,268,270],{"class":39,"line":40},[37,264,167],{"class":43},[37,266,267],{"class":54}," { isRemotePath } ",[37,269,173],{"class":43},[37,271,177],{"class":176},[37,273,274],{"class":39,"line":180},[37,275,184],{"emptyLinePlaceholder":183},[37,277,278,280,283,286,288],{"class":39,"line":187},[37,279,252],{"class":47},[37,281,282],{"class":54},"(",[37,284,285],{"class":176},"'https:\u002F\u002Fexample.com\u002Fpage.md'",[37,287,69],{"class":54},[37,289,290],{"class":207},"\u002F\u002F true\n",[86,292,294],{"id":293},"カスタム-loader","カスタム loader",[13,296,297],{},"仮想ファイルシステムや CDN、インメモリのマップなど、任意のソースから読み込めます。",[28,299,301],{"className":30,"code":300,"language":32,"meta":33,"style":33},"const virtualFs: Record\u003Cstring, string> = {\n  '\u002Fsrc\u002Findex.md': '# Hello',\n  '\u002Fsrc\u002F_partial.md': 'Partial content',\n}\n\nconst loader: Loader = async (path) => {\n  const content = virtualFs[path]\n  if (content === undefined) {\n    throw createHyogenError({\n      code: 'file_not_found',\n      details: { path, from: path, via: 'include' },\n    })\n  }\n  return content\n}\n",[16,302,303,333,347,359,364,369,395,409,427,439,450,462,468,474,483],{"__ignoreMap":33},[37,304,305,307,310,312,315,317,319,322,324,327,330],{"class":39,"line":40},[37,306,190],{"class":43},[37,308,309],{"class":65}," virtualFs",[37,311,62],{"class":43},[37,313,314],{"class":47}," Record",[37,316,78],{"class":54},[37,318,81],{"class":65},[37,320,321],{"class":54},", ",[37,323,81],{"class":65},[37,325,326],{"class":54},"> ",[37,328,329],{"class":43},"=",[37,331,332],{"class":54}," {\n",[37,334,335,338,341,344],{"class":39,"line":180},[37,336,337],{"class":176},"  '\u002Fsrc\u002Findex.md'",[37,339,340],{"class":54},": ",[37,342,343],{"class":176},"'# Hello'",[37,345,346],{"class":54},",\n",[37,348,349,352,354,357],{"class":39,"line":187},[37,350,351],{"class":176},"  '\u002Fsrc\u002F_partial.md'",[37,353,340],{"class":54},[37,355,356],{"class":176},"'Partial content'",[37,358,346],{"class":54},[37,360,361],{"class":39,"line":204},[37,362,363],{"class":54},"}\n",[37,365,367],{"class":39,"line":366},5,[37,368,184],{"emptyLinePlaceholder":183},[37,370,372,374,376,378,380,382,385,387,389,391,393],{"class":39,"line":371},6,[37,373,190],{"class":43},[37,375,193],{"class":47},[37,377,62],{"class":43},[37,379,48],{"class":47},[37,381,51],{"class":43},[37,383,384],{"class":43}," async",[37,386,55],{"class":54},[37,388,59],{"class":58},[37,390,69],{"class":54},[37,392,72],{"class":43},[37,394,332],{"class":54},[37,396,398,401,404,406],{"class":39,"line":397},7,[37,399,400],{"class":43},"  const",[37,402,403],{"class":65}," content",[37,405,51],{"class":43},[37,407,408],{"class":54}," virtualFs[path]\n",[37,410,412,415,418,421,424],{"class":39,"line":411},8,[37,413,414],{"class":43},"  if",[37,416,417],{"class":54}," (content ",[37,419,420],{"class":43},"===",[37,422,423],{"class":65}," undefined",[37,425,426],{"class":54},") {\n",[37,428,430,433,436],{"class":39,"line":429},9,[37,431,432],{"class":43},"    throw",[37,434,435],{"class":47}," createHyogenError",[37,437,438],{"class":54},"({\n",[37,440,442,445,448],{"class":39,"line":441},10,[37,443,444],{"class":54},"      code: ",[37,446,447],{"class":176},"'file_not_found'",[37,449,346],{"class":54},[37,451,453,456,459],{"class":39,"line":452},11,[37,454,455],{"class":54},"      details: { path, from: path, via: ",[37,457,458],{"class":176},"'include'",[37,460,461],{"class":54}," },\n",[37,463,465],{"class":39,"line":464},12,[37,466,467],{"class":54},"    })\n",[37,469,471],{"class":39,"line":470},13,[37,472,473],{"class":54},"  }\n",[37,475,477,480],{"class":39,"line":476},14,[37,478,479],{"class":43},"  return",[37,481,482],{"class":54}," content\n",[37,484,486],{"class":39,"line":485},15,[37,487,363],{"class":54},[13,489,490,491,496,497,502,503,506],{},"失敗時は ",[139,492,493],{},[16,494,495],{},"file_not_found"," または ",[139,498,499],{},[16,500,501],{},"load_failed"," で中断してください。",[16,504,505],{},"ENOENT"," などの生エラーは hyogen エラーに包むことを推奨します。",[86,508,509],{"id":509},"ブラウザの制約",[511,512,513,521,524],"ul",{},[514,515,516,517,520],"li",{},"loader は ",[139,518,519],{},"同一オリジン","想定です",[514,522,523],{},"クロスオリジンの fetch はサポートしません",[514,525,526],{},"ライブラリ本体はネットワークにアクセスしません",[86,528,529],{"id":529},"関連",[511,531,532,539],{},[514,533,534,538],{},[535,536,135],"a",{"href":537},"\u002Fja\u002Fapi\u002Frender-client"," — loader 必須",[514,540,541],{},[535,542,544],{"href":543},"\u002Fja\u002Fsyntax\u002Fpaths-and-security","パスとセキュリティ",[546,547,548],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":33,"searchDepth":180,"depth":180,"links":550},[551,552,557,558,559],{"id":88,"depth":180,"text":88},{"id":145,"depth":180,"text":145,"children":553},[554,555,556],{"id":149,"depth":187,"text":150},{"id":211,"depth":187,"text":212},{"id":251,"depth":187,"text":252},{"id":293,"depth":180,"text":294},{"id":509,"depth":180,"text":509},{"id":529,"depth":180,"text":529},"include \u002F component \u002F extend のファイル読み込み","md",{},"\u002Fapi\u002Floader",{"title":5,"description":560},"api\u002Floader","e5-7Jqs9gD-eNKVI_ZjAat0sm4VkfYpTzlDc6Ir_XJo",1787223114248]