[{"data":1,"prerenderedAt":763},["ShallowReactive",2],{"content-ja-\u002Fapi\u002Fdata-sources":3},{"id":4,"title":5,"body":6,"description":756,"extension":193,"jsonLd":757,"meta":758,"navigation":206,"path":759,"schemaRole":757,"seo":760,"stem":761,"__hash__":762},"content_ja\u002Fapi\u002Fdata-sources.md","dataSources \u002F loadDataSources",{"type":7,"value":8,"toc":742},"minimark",[9,13,35,41,69,77,90,186,189,227,328,335,338,414,438,442,449,469,472,475,528,532,553,557,585,588,649,653,661,710,713,738],[10,11,5],"h1",{"id":12},"datasources-loaddatasources",[14,15,16,17,21,22,25,26,30,31,34],"p",{},"外部データファイル（",[18,19,20],"strong",{},"YAML \u002F JSON \u002F CSV","）を ",[18,23,24],{},"公開 API 経由のみ","で読み、テンプレート変数へバインドします。DSL の ",[27,28,29],"code",{},"import"," \u002F ",[27,32,33],{},"require"," では読めません。",[14,36,37,38],{},"対象バージョン: ",[18,39,40],{},"0.11.0",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-ts shiki shiki-themes github-dark-high-contrast","import { renderServer, loadDataSources, build } from '@b4moss\u002Fhyogen-md'\n","ts","",[27,49,50],{"__ignoreMap":47},[51,52,55,58,62,65],"span",{"class":53,"line":54},"line",1,[51,56,29],{"class":57},"sWyjQ",[51,59,61],{"class":60},"sMAXC"," { renderServer, loadDataSources, build } ",[51,63,64],{"class":57},"from",[51,66,68],{"class":67},"sTRMh"," '@b4moss\u002Fhyogen-md'\n",[70,71,73,74],"h2",{"id":72},"オプション-datasources","オプション ",[27,75,76],{},"dataSources",[14,78,79,30,82,85,86,89],{},[27,80,81],{},"renderServer",[27,83,84],{},"build"," の options に、",[18,87,88],{},"変数名 → ファイルパス"," のマップを渡します。",[42,91,93],{"className":44,"code":92,"language":46,"meta":47,"style":47},"const result = await renderServer('.\u002Fpage.md', {}, {\n  root: '.\u002Fsite',\n  dataSources: {\n    site: '.\u002Fdata\u002Fsite.yaml',\n    products: '.\u002Fdata\u002Fproducts.json',\n    rows: '.\u002Fdata\u002Frows.csv',\n  },\n})\n",[27,94,95,123,135,141,152,163,174,180],{"__ignoreMap":47},[51,96,97,100,104,107,110,114,117,120],{"class":53,"line":54},[51,98,99],{"class":57},"const",[51,101,103],{"class":102},"sCcAr"," result",[51,105,106],{"class":57}," =",[51,108,109],{"class":57}," await",[51,111,113],{"class":112},"sj_SG"," renderServer",[51,115,116],{"class":60},"(",[51,118,119],{"class":67},"'.\u002Fpage.md'",[51,121,122],{"class":60},", {}, {\n",[51,124,126,129,132],{"class":53,"line":125},2,[51,127,128],{"class":60},"  root: ",[51,130,131],{"class":67},"'.\u002Fsite'",[51,133,134],{"class":60},",\n",[51,136,138],{"class":53,"line":137},3,[51,139,140],{"class":60},"  dataSources: {\n",[51,142,144,147,150],{"class":53,"line":143},4,[51,145,146],{"class":60},"    site: ",[51,148,149],{"class":67},"'.\u002Fdata\u002Fsite.yaml'",[51,151,134],{"class":60},[51,153,155,158,161],{"class":53,"line":154},5,[51,156,157],{"class":60},"    products: ",[51,159,160],{"class":67},"'.\u002Fdata\u002Fproducts.json'",[51,162,134],{"class":60},[51,164,166,169,172],{"class":53,"line":165},6,[51,167,168],{"class":60},"    rows: ",[51,170,171],{"class":67},"'.\u002Fdata\u002Frows.csv'",[51,173,134],{"class":60},[51,175,177],{"class":53,"line":176},7,[51,178,179],{"class":60},"  },\n",[51,181,183],{"class":53,"line":182},8,[51,184,185],{"class":60},"})\n",[14,187,188],{},"テンプレート側ではマップのキーが変数名になります。",[42,190,194],{"className":191,"code":192,"language":193,"meta":47,"style":47},"language-md shiki shiki-themes github-dark-high-contrast","# {{ site.title }}\n\n{{#each products.items}}\n- {{ this.name }}\n{{\u002Feach}}\n","md",[27,195,196,202,208,213,222],{"__ignoreMap":47},[51,197,198],{"class":53,"line":54},[51,199,201],{"class":200},"s-VM4","# {{ site.title }}\n",[51,203,204],{"class":53,"line":125},[51,205,207],{"emptyLinePlaceholder":206},true,"\n",[51,209,210],{"class":53,"line":137},[51,211,212],{"class":60},"{{#each products.items}}\n",[51,214,215,219],{"class":53,"line":143},[51,216,218],{"class":217},"s_sBn","-",[51,220,221],{"class":60}," {{ this.name }}\n",[51,223,224],{"class":53,"line":154},[51,225,226],{"class":60},"{{\u002Feach}}\n",[228,229,230,243],"table",{},[231,232,233],"thead",{},[234,235,236,240],"tr",{},[237,238,239],"th",{},"項目",[237,241,242],{},"内容",[244,245,246,262,273,288,309],"tbody",{},[234,247,248,252],{},[249,250,251],"td",{},"パス",[249,253,254,257,258,261],{},[27,255,256],{},"options.root","（省略時は ",[27,259,260],{},".doc_root"," 探索結果または cwd）からの相対パス",[234,263,264,267],{},[249,265,266],{},"キー名",[249,268,269,272],{},[18,270,271],{},"制約なし","（任意の文字列）",[234,274,275,278],{},[249,276,277],{},"ファイル上限",[249,279,280,283,284,287],{},[18,281,282],{},"5MB \u002F ファイル","（超過は ",[27,285,286],{},"data_source_too_large","）",[234,289,290,293],{},[249,291,292],{},"リモート URL",[249,294,295,298,299,30,302,305,306,287],{},[18,296,297],{},"非対応","（",[27,300,301],{},"http:\u002F\u002F",[27,303,304],{},"https:\u002F\u002F"," は ",[27,307,308],{},"load_failed",[234,310,311,314],{},[249,312,313],{},"クライアント",[249,315,316,319,320,323,324,327],{},[27,317,318],{},"renderClient"," に渡すと ",[27,321,322],{},"data_sources_on_client","（空オブジェクト ",[27,325,326],{},"{}"," は未指定と同義）",[70,329,331,332],{"id":330},"関数-loaddatasources","関数 ",[27,333,334],{},"loadDataSources",[14,336,337],{},"先に読み込んで、手動で context に合成することもできます。",[42,339,341],{"className":44,"code":340,"language":46,"meta":47,"style":47},"const fromFiles = await loadDataSources(\n  { site: '.\u002Fdata\u002Fsite.yaml' },\n  { root: '.\u002Fsite' },\n)\n\nawait renderServer('.\u002Fpage.md', { ...fromFiles, extra: 1 })\n",[27,342,343,360,370,379,384,388],{"__ignoreMap":47},[51,344,345,347,350,352,354,357],{"class":53,"line":54},[51,346,99],{"class":57},[51,348,349],{"class":102}," fromFiles",[51,351,106],{"class":57},[51,353,109],{"class":57},[51,355,356],{"class":112}," loadDataSources",[51,358,359],{"class":60},"(\n",[51,361,362,365,367],{"class":53,"line":125},[51,363,364],{"class":60},"  { site: ",[51,366,149],{"class":67},[51,368,369],{"class":60}," },\n",[51,371,372,375,377],{"class":53,"line":137},[51,373,374],{"class":60},"  { root: ",[51,376,131],{"class":67},[51,378,369],{"class":60},[51,380,381],{"class":53,"line":143},[51,382,383],{"class":60},")\n",[51,385,386],{"class":53,"line":154},[51,387,207],{"emptyLinePlaceholder":206},[51,389,390,393,395,397,399,402,405,408,411],{"class":53,"line":165},[51,391,392],{"class":57},"await",[51,394,113],{"class":112},[51,396,116],{"class":60},[51,398,119],{"class":67},[51,400,401],{"class":60},", { ",[51,403,404],{"class":57},"...",[51,406,407],{"class":60},"fromFiles, extra: ",[51,409,410],{"class":102},"1",[51,412,413],{"class":60}," })\n",[415,416,417,424,433],"ul",{},[418,419,420,423],"li",{},[27,421,422],{},"@b4moss\u002Fhyogen-md","（サーバ向け）のみ export",[418,425,426,429,430],{},[27,427,428],{},"@b4moss\u002Fhyogen-md\u002Fclient"," には ",[18,431,432],{},"含まれません",[418,434,435,437],{},[27,436,76],{}," オプションと同じパース・上限・リモート拒否規則",[70,439,441],{"id":440},"context-へのマージ順","context へのマージ順",[14,443,444,30,446,448],{},[27,445,81],{},[27,447,84],{}," では次の順で浅いマージ（後勝ち）です。",[450,451,452,458,464],"ol",{},[418,453,454,457],{},[27,455,456],{},"loadDataSources(dataSources)"," の結果",[418,459,460,461],{},"呼び出し側 ",[27,462,463],{},"context",[418,465,466],{},[27,467,468],{},"serverContext",[14,470,471],{},"front matter はレンダリング内でさらに後から適用されます。",[70,473,474],{"id":474},"対応形式",[228,476,477,487],{},[231,478,479],{},[234,480,481,484],{},[237,482,483],{},"拡張子",[237,485,486],{},"結果",[244,488,489,502,518],{},[234,490,491,496],{},[249,492,493],{},[27,494,495],{},".json",[249,497,498,501],{},[27,499,500],{},"JSON.parse"," の結果（オブジェクト \u002F 配列 \u002F プリミティブ）",[234,503,504,512],{},[249,505,506,30,509],{},[27,507,508],{},".yaml",[27,510,511],{},".yml",[249,513,514,517],{},[27,515,516],{},"yaml"," パッケージのパース結果",[234,519,520,525],{},[249,521,522],{},[27,523,524],{},".csv",[249,526,527],{},"ヘッダー行あり → オブジェクト配列（フィールドはすべて文字列）",[529,530,531],"h3",{"id":516},"YAML",[415,533,534,541,544,547],{},[418,535,536,537,540],{},"型（日付・数値・真偽・",[27,538,539],{},"null"," 等）はライブラリ既定のまま",[418,542,543],{},"alias \u002F anchor は許可",[418,545,546],{},"重複キーはパーサ既定（後勝ち）",[418,548,549,550],{},"不正 YAML → ",[27,551,552],{},"parse_error",[529,554,556],{"id":555},"csv厳格","CSV（厳格）",[415,558,559,568,571,576,582],{},[418,560,561,562,30,565,287],{},"RFC 4180 簡易（カンマ区切り、ダブルクォート、",[27,563,564],{},"\\r\\n",[27,566,567],{},"\\n",[418,569,570],{},"空行はスキップ",[418,572,573,574],{},"列数不一致 → ",[27,575,552],{},[418,577,578,581],{},[18,579,580],{},"BOM 非対応","（除去しない）",[418,583,584],{},"TSV・他区切りは非対応",[529,586,587],{"id":587},"共通エラー",[228,589,590,599],{},[231,591,592],{},[234,593,594,597],{},[237,595,596],{},"状況",[237,598,27],{},[244,600,601,610,622,632,640],{},[234,602,603,606],{},[249,604,605],{},"空ファイル",[249,607,608],{},[27,609,552],{},[234,611,612,615],{},[249,613,614],{},"未対応拡張子",[249,616,617,298,619,287],{},[27,618,552],{},[27,620,621],{},"details.format",[234,623,624,627],{},[249,625,626],{},"ファイル欠落",[249,628,629],{},[27,630,631],{},"file_not_found",[234,633,634,636],{},[249,635,292],{},[249,637,638],{},[27,639,308],{},[234,641,642,645],{},[249,643,644],{},"5MB 超",[249,646,647],{},[27,648,286],{},[70,650,652],{"id":651},"build-での扱い","build での扱い",[14,654,655,305,657,660],{},[27,656,76],{},[18,658,659],{},"エントリループの前に 1 回","読み込み、全エントリで同一のマージ済み context を使います。",[42,662,664],{"className":44,"code":663,"language":46,"meta":47,"style":47},"await build({\n  input: '.\u002Fpages\u002F**\u002F*.md',\n  outDir: '.\u002Fout',\n  dataSources: { config: '.\u002Fdata\u002Fconfig.yaml' },\n})\n",[27,665,666,676,686,696,706],{"__ignoreMap":47},[51,667,668,670,673],{"class":53,"line":54},[51,669,392],{"class":57},[51,671,672],{"class":112}," build",[51,674,675],{"class":60},"({\n",[51,677,678,681,684],{"class":53,"line":125},[51,679,680],{"class":60},"  input: ",[51,682,683],{"class":67},"'.\u002Fpages\u002F**\u002F*.md'",[51,685,134],{"class":60},[51,687,688,691,694],{"class":53,"line":137},[51,689,690],{"class":60},"  outDir: ",[51,692,693],{"class":67},"'.\u002Fout'",[51,695,134],{"class":60},[51,697,698,701,704],{"class":53,"line":143},[51,699,700],{"class":60},"  dataSources: { config: ",[51,702,703],{"class":67},"'.\u002Fdata\u002Fconfig.yaml'",[51,705,369],{"class":60},[51,707,708],{"class":53,"line":154},[51,709,185],{"class":60},[70,711,712],{"id":712},"関連",[415,714,715,721,726,732],{},[418,716,717],{},[718,719,81],"a",{"href":720},"\u002Fja\u002Fapi\u002Frender-server",[418,722,723],{},[718,724,84],{"href":725},"\u002Fja\u002Fapi\u002Fbuild",[418,727,728],{},[718,729,731],{"href":730},"\u002Fja\u002Fapi\u002Ftypes-and-options","型とオプション",[418,733,734],{},[718,735,737],{"href":736},"\u002Fja\u002Fapi\u002Ferror-codes","エラーコード",[739,740,741],"style",{},"html pre.shiki code .sWyjQ, html code.shiki .sWyjQ{--shiki-default:#FF9492}html pre.shiki code .sMAXC, html code.shiki .sMAXC{--shiki-default:#F0F3F6}html pre.shiki code .sTRMh, html code.shiki .sTRMh{--shiki-default:#ADDCFF}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 pre.shiki code .sCcAr, html code.shiki .sCcAr{--shiki-default:#91CBFF}html pre.shiki code .sj_SG, html code.shiki .sj_SG{--shiki-default:#DBB7FF}html pre.shiki code .s-VM4, html code.shiki .s-VM4{--shiki-default:#91CBFF;--shiki-default-font-weight:bold}html pre.shiki code .s_sBn, html code.shiki .s_sBn{--shiki-default:#FFB757}",{"title":47,"searchDepth":125,"depth":125,"links":743},[744,746,748,749,754,755],{"id":72,"depth":125,"text":745},"オプション dataSources",{"id":330,"depth":125,"text":747},"関数 loadDataSources",{"id":440,"depth":125,"text":441},{"id":474,"depth":125,"text":474,"children":750},[751,752,753],{"id":516,"depth":137,"text":531},{"id":555,"depth":137,"text":556},{"id":587,"depth":137,"text":587},{"id":651,"depth":125,"text":652},{"id":712,"depth":125,"text":712},"外部 YAML \u002F JSON \u002F CSV を API 経由で読み、テンプレート変数へバインドする",null,{},"\u002Fapi\u002Fdata-sources",{"title":5,"description":756},"api\u002Fdata-sources","HA7o8wyi9e9dl3FdlPammpW23BjZil3pBVJSmxl4LhA",1788678619081]