pin-diary-6
pin-diary-6/template
importを経由せずに自分のprojectのみで読み込んでテスト
https://scrapbox-bundler.vercel.app/?url=https://scrapbox.io/api/code/hoshihara/pin-diary-6/script.ts&bundle&minify&run&output=newtab&reload
mod.tsがscript.tsを参照していないのにそこを起点にバンドルしていたことが動かない原因でした。
script.tsに直したら動いた。
code:script.ts
import { launch } from "./mod.ts";
import {
makeDiary, isOldDiary,
} from "../pin-diary-6%2Ftemplate/mod.ts";
launch(
"hoshihara",
{
makeDiary,
isOldDiary,
},
);
$ deno check --remote -r=https://scrapbox.io https://scrapbox.io/api/code/villagepump/pin-diary-6/mod.ts
code:mod.ts
/// <reference no-default-lib="true"/>
/// <reference lib="esnext"/>
/// <reference lib="dom"/>
import {
pin,
unpin,
patch,
useStatusBar,
sleep,
makeSocket,
disconnect,
format,
} from "./deps.ts";
import { listPinnedPages } from "./list.ts";
import type { Scrapbox, Socket } from "./deps.ts";
declare const scrapbox: Scrapbox;
export interface DiaryInit {
/** 与えられた日付の日記ページのテンプレートを作る */
makeDiary: (date: Date) => {
title: string;
header: string[];
footer: string[];
},
code:mod.ts
/** 今日以外の日記ページかどうかを判断する函数
*
* @param title 判断対象のページタイトル
* @param today 今日の日付
* @param 今日以外の日記ページならtrue, それ以外のページは false
*/
isOldDiary: (title: string, today: Date) => boolean;
}
// initialize
export const launch = (
project: string,
init: DiaryInit & { interval?: number },
) => {
const interval = init.interval ?? 24 * 3600 * 1000;
const handleChange = () =>
scrapbox.Project.name === project ?
startObserve(project, interval, init) :
endObserve();
handleChange();
scrapbox.addListener("project:changed", handleChange);
};
let updateTimer: number | undefined;
const startObserve = async (
project: string,
interval: number,
init: DiaryInit,
) => {
endObserve();
await pinDiary(project, new Date(), init);
updateTimer = setInterval(
() => pinDiary(project, new Date(), init),
interval,
);
};
const endObserve = () => clearInterval(updateTimer);
code:mod.ts
export const pinDiary = async (
project: string,
date: Date,
{ makeDiary, isOldDiary, }: DiaryInit,
): Promise<void> => {
const { render, dispose } = useStatusBar();
let socket: Socket | undefined;
try {
// 今日以外の日付ページを外す
render(
{ type: "spinner" },
{ type: "text", text: unpin other diary pages...},
);
socket = await makeSocket();
for await (const { title } of listPinnedPages(project)) {
if (!isOldDiary(title, date)) continue;
await unpin(project, title, { socket });
}
// 今日の日付ページをピン留めする
const { title, header, footer } = makeDiary(date);
render(
{ type: "spinner" },
{ type: "text", text: pin "/${project}/${title}"...},
);
await pin(project, title, { socket, create: true });
// 今日の日付ページにtemplateを挿入する
render(
{ type: "spinner" },
{ type: "text", text: format "/${project}/${title}"...},
);
await patch(project, title, (lines) => [
lines0.text,
...format(
lines.slice(1).map(line => line.text),
header,
footer,
),
], { socket });
render(
{ type: "check-circle" },
{ type: "text", text: Pinned "/${project}/${title}".},
);
} catch(e: unknown) {
render(
{ type: "exclamation-triangle" },
{ type: "text", text: e instanceof Error ?
${e.name} ${e.message} :
Unknown error! (see developper console),
},
);
console.error(e);
} finally {
if (socket) await disconnect(socket);
await sleep(1000);
dispose();
}
};
code:list.ts
import { listPages, BasePage } from "./deps.ts";
/** 全てのピン留めされたページを取得する */
export async function* listPinnedPages(project: string, skip = 0): AsyncGenerator<BasePage> {
const { count, pages } = await ensureList(project, skip);
for (const page of pages) {
if (page.pin === 0) continue;
yield page;
}
// pinしたページこれ以上ないときは終了
if ((pages.at(-1)?.pin ?? 0) === 0) return;
yield* listPinnedPages(project, skip + 1000);
}
const ensureList = async (project: string, skip: number) => {
const result = await listPages(project, {
limit: 1000,
skip,
});
// login errorなどは全部例外として扱う
if (!result.ok) {
const error = new Error();
error.name = result.value.name;
error.message = result.value.message;
throw error;
}
return result.value;
};
code:deps.ts
export { patchTemplate as format } from "./format.ts";
export {
pin,
unpin,
patch,
useStatusBar,
makeSocket,
disconnect,
listPages,
} from "https://raw.githubusercontent.com/takker99/scrapbox-userscript-std/0.26.1/mod.ts";
export type {
Socket,
} from "https://raw.githubusercontent.com/takker99/scrapbox-userscript-std/0.26.1/mod.ts";
export {
sleep,
} from "https://raw.githubusercontent.com/takker99/scrapbox-userscript-std/0.26.1/sleep.ts";
export type {
Scrapbox,
} from "https://raw.githubusercontent.com/scrapbox-jp/types/0.7.0/userscript.ts";
export type {
BasePage,
} from "https://raw.githubusercontent.com/scrapbox-jp/types/0.7.0/rest.ts";
https://scrapbox.io/api/code/villagepump/pin-diary-5/format.ts
code:format.ts
import { patchLines, findSplitIndex } from "./util.ts";
// linesにタイトルを入れないように
export function patchTemplate(lines: string[], headers: string[], footers: string[]): string[] {
// headerとfooterに相当する行を補う
const bodies = patchLines(
patchLines(lines, headers).reverse(),
...footers.reverse(),
).reverse();
// headerとfooterの間に余裕をもたせる
const headerStart = findSplitIndex(bodies, headers);
const footerStart = bodies.length - 1 - findSplitIndex(
...bodies.reverse(),
...footers.reverse(),
);
return [
...bodies.slice(0, headerStart + 1),
"",
...bodies.slice(headerStart + 1, footerStart).join("\n").trim().split("\n"),
"",
...bodies.slice(footerStart),
];
}
https://scrapbox.io/api/code/villagepump/pin-diary-5/util.ts
code:util.ts
export function patchLines(lines: string[], appends: string[]) {
let index = 0;
const result = [] as string[];
for (let i = 0; i < appends.length; i++) {
const pos = lines.findIndex((line, j) => j >= index && line.trim() === appendsi.trim());
if (pos < 0) {
result.push(appendsi);
continue;
}
result.push(...lines.slice(index, pos + 1));
index = pos + 1;
}
result.push(...lines.slice(index));
return result;
}
export function findSplitIndex(lines: string[], query: string[]) {
let index = -1;
for (const text of query) {
const pos = lines.findIndex((line, j) => j > index && line.trim() === text.trim());
if (pos < 0) return -1;
index = pos;
}
return index;
}
code:min.js
function ue(e,t){let r=0,n=[];for(let o=0;o<t.length;o++){let s=e.findIndex((i,a)=>a>=r&&i.trim()===to.trim());if(s<0){n.push(to);continue}n.push(...e.slice(r,s+1)),r=s+1}return n.push(...e.slice(r)),n}function pe(e,t){let r=-1;for(let n of t){let o=e.findIndex((s,i)=>i>r&&s.trim()===n.trim());if(o<0)return-1;r=o}return r}function de(e,t,r){let n=ue(ue(e,t).reverse(),...r.reverse()).reverse(),o=pe(n,t),s=n.length-1-pe(...n.reverse(),...r.reverse());return[...n.slice(0,o+1),"",...n.slice(o+1,s).join(`
).trim().split(
),"",...n.slice(s)]}var y=e=>{let{fetch:t=globalThis.fetch,hostName:r="scrapbox.io",...n}=e;return{fetch:t,hostName:r,...n}};var Ut=e=>typeof e=="object"&&e!==null,$t=e=>Ut(e)?(e.name===void 0||typeof e.name=="string")&&typeof e.message=="string":!1,Ke=e=>{try{let t=typeof e=="string"?JSON.parse(e):e;return $t(t)?t:!1}catch(t){if(t instanceof SyntaxError)return!1;throw t}};var U=class e extends Error{constructor(r){super(${r.status} ${r.statusText} when fetching ${r.url});this.response=r;Error.captureStackTrace&&Error.captureStackTrace(this,e)}name="UnexpectedResponseError"},w=async e=>{let t=e.clone(),r=await t.text(),n=Ke(r);if(!n)throw new U(t);return{ok:!1,value:n}};var le=async e=>{let{sid:t,hostName:r,fetch:n}=y(e??{}),o=new Request(https://${r}/api/users/me,t?{headers:{Cookie:b(t)}}:void 0),s=await n(o);if(!s.ok)throw new U(s);return await s.json()};var b=e=>connect.sid=${e};var C=e=>e.replaceAll(" ","_").toLowerCase();var P=e=>[...e].map((t,r)=>t===" "?"_":!qt.includes(t)||r===e.length-1&&Ht.includes(t)?encodeURIComponent(t):t).join(""),qt='@$&+=:;",',Ht=':;",';var We=(e,t,r)=>{let{sid:n,hostName:o,followRename:s,projects:i}=y(r??{}),a=new URLSearchParams;a.append("followRename",${s??!0});for(let m of i??[])a.append("projects",m);let u=https://${o}/api/pages/${e}/${P(t)}?${a.toString()};return new Request(u,n?{headers:{Cookie:b(n)}}:void 0)},Ge=async e=>e.ok?{ok:!0,value:await e.json()}:e.status===414?{ok:!1,value:{name:"TooLongURIError",message:"project ids may be too much."}}:w(e),J=async(e,t,r)=>{let{fetch:n}=y(r??{}),o=We(e,t,r),s=await n(o);return await Ge(s)};J.toRequest=We;J.fromResponse=Ge;var ze=(e,t)=>{let{sid:r,hostName:n,sort:o,limit:s,skip:i}=y(t??{}),a=new URLSearchParams;o!==void 0&&a.append("sort",o),s!==void 0&&a.append("limit",${s}),i!==void 0&&a.append("skip",${i});let u=https://${n}/api/pages/${e}?${a.toString()};return new Request(u,r?{headers:{Cookie:b(r)}}:void 0)},Qe=async e=>e.ok?{ok:!0,value:await e.json()}:w(e),W=async(e,t)=>{let{fetch:r}=y(t??{}),n=await r(ze(e,t));return await Qe(n)};W.toRequest=ze;W.fromResponse=Qe;var Ve=(e,t,r,n)=>{let{sid:o,hostName:s}=y(n??{}),i=https://${s}/api/table/${e}/${P(t)}/${encodeURIComponent(r)}.csv;return new Request(i,o?{headers:{Cookie:b(o)}}:void 0)},Je=async e=>e.ok?{ok:!0,value:await e.text()}:e.status===404?{ok:!1,value:{name:"NotFoundError",message:"Table not found."}}:w(e),Xe=async(e,t,r,n)=>{let{fetch:o}=y(n??{}),s=Ve(e,t,r,n),i=await o(s);return await Je(i)};Xe.toRequest=Ve;Xe.fromResponse=Je;var Ze=(e,t)=>{let{sid:r,hostName:n}=y(t??{});return new Request(https://${n}/api/projects/${e},r?{headers:{Cookie:b(r)}}:void 0)},et=async e=>e.ok?{ok:!0,value:await e.json()}:w(e),X=async(e,t)=>{let{fetch:r}=y(t??{}),n=Ze(e,t),o=await r(n);return et(o)};X.toRequest=Ze;X.fromResponse=et;var tt=(e,t)=>{let{sid:r,hostName:n}=y(t??{}),o=new URLSearchParams;for(let s of e)o.append("ids",s);return new Request(https://${n}/api/projects?${o.toString()},r?{headers:{Cookie:b(r)}}:void 0)},rt=async e=>e.ok?{ok:!0,value:await e.json()}:w(e),nt=async(e,t)=>{let{fetch:r}=y(t??{}),n=await r(tt(e,t));return rt(n)};nt.toRequest=tt;nt.fromResponse=rt;var ee=async(e,t)=>{let r=await J(e,t);if(!r.ok)throw new Error(You have no privilege of editing "/${e}/${t}".);return r.value};var ot=(e,t,r,n)=>{let{sid:o,hostName:s}=y(n??{}),i=https://${s}/api/code/${e}/${P(t)}/${P(r)};return new Request(i,o?{headers:{Cookie:b(o)}}:void 0)},st=async e=>e.ok?{ok:!0,value:await e.text()}:e.status===404&&e.headers.get("Content-Type")?.includes?.("text/plain")?{ok:!1,value:{name:"NotFoundError",message:"Code block is not found"}}:w(e),it=async(e,t,r,n)=>{let{fetch:o}=y(n??{}),s=ot(e,t,r,n),i=await o(s);return await st(i)};it.toRequest=ot;it.fromResponse=st;var js=new TextEncoder().encode("0123456789abcdef");var at=!1;scrapbox.addListener("lines:changed",()=>at=!1);scrapbox.addListener("layout:changed",()=>at=!1);var ct=(e,t)=>{if(!(e instanceof HTMLDivElement))throw new TypeError("${t}" must be HTMLDivElememt but actual is "${e}")};var ut=(e,t)=>{if(!(e instanceof HTMLTextAreaElement))throw new TypeError("${t}" must be HTMLTextAreaElement but actual is "${e}")};var $=()=>{let e=document.getElementById("text-input");if(e)return ut(e,"textarea#text-input"),e};var pt=()=>Wt(document.getElementsByClassName("status-bar")?.[0],"div.status-bar"),Wt=(e,t)=>{if(e)return ct(e,t),e};var F=e=>new Promise(t=>setTimeout(()=>t(),e));var me=()=>{let e=pt();if(!e)throw new Error("div.status-bar can't be found");let t=document.createElement("div");return e.append(t),{render:(...r)=>{t.textContent="";let n=lt(...r);n&&t.append(n)},dispose:()=>t.remove()}},lt=(...e)=>{let t=e.flatMap(n=>{switch(n.type){case"spinner":return[Zt()];case"check-circle":return[er()];case"exclamation-triangle":return[tr()];case"text":return[te(n.text)];case"group":{let o=lt(...n.items);return o?[o]:[]}}});if(t.length===0)return;if(t.length===1)return t[0];let r=document.createElement("span");return r.classList.add("item-group"),r.append(...t),r},te=e=>{let t=document.createElement("span");return t.classList.add("item"),t.append(e),t},Zt=()=>{let e=document.createElement("i");return e.classList.add("fa","fa-spinner"),te(e)},er=()=>{let e=document.createElement("i");return e.classList.add("kamon","kamon-check-circle"),te(e)},tr=()=>{let e=document.createElement("i");return e.classList.add("fas","fa-exclamation-triangle"),te(e)};var mt=e=>{if(e===0)return;let t={};return e&1&&(t.capture=!0),e&2&&(t.once=!0),e&4&&(t.passive=!0),t};var nr=new Map;scrapbox.on("layout:changed",()=>{let e=$();if(e)for(let[t,r]of nr)for(let[n,o]of r)for(let s of o)e.addEventListener(t,n,mt(s))});var ft=e=>or.includes(e.name),or=["SocketIOError","DuplicateTitleError","NotFastForwardError"];var G=async()=>{let t=(await ir())("https://scrapbox.io",{reconnectionDelay:5e3,transports:["websocket"]});return await new Promise((r,n)=>{let o=s=>n(s);t.once("connect",()=>{t.off("disconnect",o),r()}),t.once("disconnect",o)}),t},sr="4.2.0",gt=https://cdnjs.cloudflare.com/ajax/libs/socket.io/${sr}/socket.io.min.js,fe,ir=async()=>{if(fe)throw fe;if(!document.querySelector(scriptsrc="${gt}")){let e=document.createElement("script");e.src=gt,await new Promise((t,r)=>{e.onload=()=>t(),e.onerror=n=>{fe=n,r(n)},document.head.append(e)})}return new Promise(e=>{let t=setInterval(()=>{io&&(clearInterval(t),e(io))},500)})};var ge=(e,t=9e4)=>{let r=(o,s)=>{let i;return new Promise((a,u)=>{let m=d=>{clearTimeout(i),u(new Error(d))};e.emit(o,s,d=>{switch(clearTimeout(i),e.off("disconnect",m),o){case"socket.io-request":"error"in d?typeof d.error=="object"&&d.error&&"name"in d.error&&typeof d.error.name=="string"&&ft({name:d.error.name})?a({ok:!1,value:d.error}):a({ok:!1,value:{name:"UnexpectedError",value:d.error}}):"data"in d&&a({ok:!0,value:d.data});break;case"cursor":"error"in d?a({ok:!1,value:{name:"UnexpectedError",value:d.error}}):"data"in d&&a({ok:!0,value:d.data});break}u(new Error('Invalid response: missing "data" or "error" field'))}),i=setTimeout(()=>{e.off("disconnect",m),a({ok:!1,value:{name:"TimeoutError",message:Timeout: exceeded ${t}ms}})},t),e.once("disconnect",m)})};async function*n(...o){let s,i=()=>new Promise(u=>s=u),a=u=>{s?.(u)};for(let u of o)e.on(u,a);try{for(;;)yield await i()}finally{for(let u of o)e.off(u,a)}}return{request:r,response:n}};var he=()=>G(),xe=async e=>{if(e.connected)return;let t=new Promise(r=>e.once("connect",()=>r()));e.connect(),await t},q=async e=>{if(e.disconnected)return;let t=new Promise(r=>{let n=o=>{o==="io client disconnect"&&(r(),e.off("disconnect",n))};e.on("disconnect",n)});e.disconnect(),await t};var ye=(e,t)=>{let r=e.length>t.length,n=r?t:e,o=r?e:t,s=n.length+1,i=n.length+o.length+3,a=new Array(i);a.fill(-1);let u=[];function m(l,E,k){let I=Math.max(E,k),V=I-l;for(;V<n.length&&I<o.length&&n[V]===o[I];)++V,++I;return a[l+s]=u.length,u.push([{x:V,y:I},a[l+(E>k?-1:1)+s]]),I}let d=new Array(i);d.fill(-1);let h=-1,x=o.length-n.length;do{++h;for(let l=-h;l<=x-1;++l)d[l+s]=m(l,d[l-1+s]+1,d[l+1+s]);for(let l=x+h;l>=x+1;--l)d[l+s]=m(l,d[l-1+s]+1,d[l+1+s]);d[x+s]=m(x,d[x-1+s]+1,d[x+1+s])}while(d[x+s]!==o.length);let v=[],f=a[x+s];for(;f!==-1;)v.push(u[f][0]),f=u[f][1];return{from:e,to:t,editDistance:x+h*2,buildSES:function*(){let l=0,E=0;for(let{x:k,y:I}of ar(v))for(;l<k||E<I;)I-k>E-l?(yield{value:o[E],type:r?"deleted":"added"},++E):I-k<E-l?(yield{value:n[l],type:r?"added":"deleted"},++l):(yield{value:n[l],type:"common"},++l,++E)}}};function*Ee(e){let t=[],r=[];function*n(){if(t.length>r.length){for(let o=0;o<r.length;o++)yield ht(t[o],r[o]);for(let o=r.length;o<t.length;o++)yield t[o]}else{for(let o=0;o<t.length;o++)yield ht(t[o],r[o]);for(let o=t.length;o<r.length;o++)yield r[o]}t=[],r=[]}for(let o of e)switch(o.type){case"added":t.push(o);break;case"deleted":r.push(o);break;case"common":yield*n(),yield o;break}yield*n()}var ht=(e,t)=>({value:e.value,oldValue:t.value,type:"replaced"});function*ar(e){for(let t=e.length-1;t>=0;t--)yield e[t]}var re,Et=async()=>{if(re!==void 0)return re;let e=await le();if(e.isGuest)throw new Error("this script can only be executed by Logged in users");return re=e.id,re},xt=new Map,be=async e=>{let t=xt.get(e);if(t!==void 0)return t;let r=await X(e);if(!r.ok){let{name:o,message:s}=r.value;throw new Error(${o} ${s})}let{id:n}=r.value;return xt.set(e,n),n},yt=e=>e.padStart(8,"0"),we=e=>{let t=Math.floor(new Date().getTime()/1e3).toString(16),r=Math.floor(16777214*Math.random()).toString(16);return${yt(t).slice(-8)}${e.slice(-6)}0000${yt(r)}};function*ve(e,t,{userId:r}){let{buildSES:n}=ye(e.map(({text:i})=>i),t),o=0,s=e[0].id;for(let i of Ee(n())){switch(i.type){case"added":yield{_insert:s,lines:{id:we(r),text:i.value}};continue;case"deleted":yield{_delete:s,lines:-1};break;case"replaced":yield{_update:s,lines:{text:i.value}};break}o++,s=e[o]?.id??"_end"}}var cr=e=>({type:"title",text:e.rows[0].text}),ur=e=>{let{rows:[t,...r]}=e,{indent:n=0,text:o=""}=t??{},s=o.replace(/^\s*code:/,"");return{indent:n,type:"codeBlock",fileName:s,content:r.map(i=>i.text.substring(n+1)).join(
)}},L=(e,{parseOnNested:t,parseOnQuoted:r,patterns:n})=>(o,s,i)=>{var a,u,m,d,h,x;if(!t&&s.nested)return(a=i?.())!==null&&a!==void 0?a:[];if(!r&&s.quoted)return(u=i?.())!==null&&u!==void 0?u:[];for(let v of n){let f=v.exec(o);if(f===null)continue;let l=o.substring(0,f.index),E=o.substring(f.index+((d=(m=f[0])===null||m===void 0?void 0:m.length)!==null&&d!==void 0?d:0)),k=e((h=f[0])!==null&&h!==void 0?h:"",s);return[...M(l,s),...k,...M(E,s)]}return(x=i?.())!==null&&x!==void 0?x:[]},T=e=>[{type:"plain",raw:e,text:e}],pr=L(T,{parseOnNested:!0,parseOnQuoted:!0,patterns:[/^()(.*)()$/]}),dr=/^>.*$/,lr=(e,t)=>t.context==="table"?T(e,t):[{type:"quote",raw:e,nodes:M(e.substring(1),{...t,quoted:!0})}],mr=L(lr,{parseOnNested:!1,parseOnQuoted:!1,patterns:[dr]}),fr=/^\? .+$/,gr=(e,t)=>t.context==="table"?T(e,t):[{type:"helpfeel",raw:e,text:e.substring(2)}],hr=L(gr,{parseOnNested:!1,parseOnQuoted:!1,patterns:[fr]}),xr=/\[\[https?:\/\/[^\s\]]+\.(?:png|jpe?g|gif|svg)\]\]/i,yr=/\[\[https?:\/\/(?:[0-9a-z-]+\.)?gyazo\.com\/[0-9a-f]{32}\]\]/,Er=(e,t)=>{if(t.context==="table")return T(e,t);let r=e.substring(2,e.length-2),n=/^https?:\/\/([0-9a-z-]\.)?gyazo\.com\/[0-9a-f]{32}$/.test(r);return[{type:"strongImage",raw:e,src:n?${r}/thumb/1000:r}]},br=L(Er,{parseOnNested:!1,parseOnQuoted:!0,patterns:[xr,yr]}),wr=/\[[^[\]]*\.icon(?:\*[1-9]\d*)?\]/;function wt(e){return(t,r)=>{if(e==="strongIcon"&&r.context==="table")return T(t,r);let n=e==="icon"?t.substring(1,t.length-1):t.substring(2,t.length-2),o=n.lastIndexOf(".icon"),s=n.substring(0,o),i=s.startsWith("/")?"root":"relative",a=n.substring(o+5,n.length),u=a.startsWith("*")?parseInt(a.substring(1),10):1;return new Array(u).fill({}).map(()=>({path:s,pathType:i,type:e,raw:t}))}}var vr=wt("icon"),kr=L(vr,{parseOnNested:!0,parseOnQuoted:!0,patterns:[wr]}),Lr=/\[\[[^[\]]*\.icon(?:\*\d+)?\]\]/,Tr=wt("strongIcon"),Ir=L(Tr,{parseOnNested:!1,parseOnQuoted:!0,patterns:[Lr]}),Cr=/\[\[(?:[^[]|\[[^[]).*?\]*\]\]/,Dr=(e,t)=>t.context==="table"?T(e,t):[{type:"strong",raw:e,nodes:M(e.substring(2,e.length-2),{...t,nested:!0})}],Rr=L(Dr,{parseOnNested:!1,parseOnQuoted:!0,patterns:[Cr]}),Pr=/\[\$ .+? \]/,Mr=/\[\$ [^\]]+\]/,Nr=(e,t)=>t.context==="table"?T(e,t):[{type:"formula",raw:e,formula:e.substring(3,e.length-(e.endsWith(" ]")?2:1))}],Sr=L(Nr,{parseOnNested:!1,parseOnQuoted:!0,patterns:[Pr,Mr]}),Or=/\[[!"#%&'()*+,\-./{|}<>_~]+ (?:\[[^[\]]+\]|[^\]])+\]/,Fr=(e,t)=>{if(t.context==="table")return T(e,t);let r=e.indexOf(" "),n=e.substring(1,r),o=e.substring(r+1,e.length-1),s=new Set(n);if(s.has("*")){let i=n.split("*").length-1;s.delete("*"),s.add(*-${Math.min(i,10)})}return[{type:"decoration",raw:e,rawDecos:n,decos:Array.from(s),nodes:M(o,{...t,nested:!0})}]},Ar=L(Fr,{parseOnNested:!1,parseOnQuoted:!0,patterns:[Or]}),Br=/.*?/,jr=(e,t)=>t.context==="table"?T(e,t):[{type:"code",raw:e,text:e.substring(1,e.length-1)}],Ur=L(jr,{parseOnNested:!1,parseOnQuoted:!0,patterns:[Br]}),$r=/^[$%] .+$/,qr=(e,t)=>{var r;if(t.context==="table")return T(e,t);let n=(r=e[0])!==null&&r!==void 0?r:"",o=e.substring(2);return[{type:"commandLine",raw:e,symbol:n,text:o}]},Hr=L(qr,{parseOnNested:!1,parseOnQuoted:!1,patterns:[$r]}),_r=/\[\s+\]/,Yr=(e,t)=>t.context==="table"?T(e,t):[{type:"blank",raw:e,text:e.substring(1,e.length-1)}],Kr=L(Yr,{parseOnNested:!1,parseOnQuoted:!0,patterns:[_r]}),Wr=/\[https?:\/\/[^\s\]]+\.(?:png|jpe?g|gif|svg)(?:\?[^\]\s]+)?(?:\s+https?:\/\/[^\s\]]+)?\]/i,Gr=/\[https?:\/\/[^\s\]]+\s+https?:\/\/[^\s\]]+\.(?:png|jpe?g|gif|svg)(?:\?[^\]\s]+)?\]/i,zr=/\[https?:\/\/(?:[0-9a-z-]+\.)?gyazo\.com\/[0-9a-f]{32}(?:\/raw)?(?:\s+https?:\/\/[^\s\]]+)?\]/,Qr=/\[https?:\/\/[^\s\]]+\s+https?:\/\/(?:[0-9a-z-]+\.)?gyazo\.com\/[0-9a-f]{32}(?:\/raw)?\]/,Vr=e=>/^https?:\/\/[^\s\]]+\.(png|jpe?g|gif|svg)(\?[^\]\s]+)?$/i.test(e)||Jr(e),Jr=e=>/^https?:\/\/([0-9a-z-]\.)?gyazo\.com\/[0-9a-f]{32}(\/raw)?$/.test(e),Xr=(e,t)=>{if(t.context==="table")return T(e,t);let r=e.search(/\s/),n=r!==-1?e.substring(1,r):e.substring(1,e.length-1),o=r!==-1?e.substring(r,e.length-1).trimLeft():"",[s,i]=Vr(o)?[o,n]:[n,o];return[{type:"image",raw:e,src:/^https?:\/\/([0-9a-z-]\.)?gyazo\.com\/[0-9a-f]{32}$/.test(s)?${s}/thumb/1000:s,link:i}]},Zr=L(Xr,{parseOnNested:!0,parseOnQuoted:!0,patterns:[Wr,Gr,zr,Qr]}),en=/\[https?:\/\/[^\s\]]+\s+[^\]]*[^\s]\]/,tn=/\[[^[\]]*[^\s]\s+https?:\/\/[^\s\]]+\]/,rn=/\[https?:\/\/[^\s\]]+\]/,nn=/https?:\/\/[^\s]+/,on=(e,t)=>{if(t.context==="table")return T(e,t);let r=e.startsWith("[")&&e.endsWith("]")?e.substring(1,e.length-1):e,n=/^https?:\/\/[^\s\]]/.test(r),o=(n?/^https?:\/\/[^\s\]]+/:/https?:\/\/[^\s\]]+$/).exec(r);if(o?.[0]===void 0)return[];let s=n?r.substring(o[0].length):r.substring(0,o.index-1);return[{type:"link",raw:e,pathType:"absolute",href:o[0],content:s.trim()}]},sn=L(on,{parseOnNested:!0,parseOnQuoted:!0,patterns:[en,tn,rn,nn]}),vt=/\[([^\]]*[^\s])\s+([NS]\d+(?:\.\d+)?,[EW]\d+(?:\.\d+)?(?:,Z\d+)?)\]/,kt=/\[([NS]\d+(?:\.\d+)?,[EW]\d+(?:\.\d+)?(?:,Z\d+)?)(?:\s+([^\]]*[^\s]))?\]/,an=e=>{let[t="",r="",n=""]=e.split(","),o=parseFloat(t.replace(/^N/,"").replace(/^S/,"-")),s=parseFloat(r.replace(/^E/,"").replace(/^W/,"-")),i=/^Z\d+$/.test(n)?parseInt(n.replace(/^Z/,""),10):14;return{latitude:o,longitude:s,zoom:i}},cn=(e,t)=>{var r;if(t.context==="table")return T(e,t);let n=(r=e.match(vt))!==null&&r!==void 0?r:e.match(kt);if(n===null)return[];let o=e.startsWith("[N")||e.startsWith("[S"),[,s="",i=""]=o?n:[n[0],n[2],n[1]],{latitude:a,longitude:u,zoom:m}=an(s),d=i!==""?https://www.google.com/maps/place/${encodeURIComponent(i)}/@${a},${u},${m}z:https://www.google.com/maps/@${a},${u},${m}z;return[{type:"googleMap",raw:e,latitude:a,longitude:u,zoom:m,place:i,url:d}]},un=L(cn,{parseOnNested:!1,parseOnQuoted:!0,patterns:[vt,kt]}),pn=/\[\/?[^[\]]+\]/,dn=e=>{let t=e.substring(1,e.length-1);return[{type:"link",raw:e,pathType:t.startsWith("/")?"root":"relative",href:t,content:""}]},ln=L(dn,{parseOnNested:!0,parseOnQuoted:!0,patterns:[pn]}),mn=/(?:^|\s)#\S+/,fn=(e,t)=>{if(t.context==="table")return T(e,t);if(e.startsWith("#"))return[{type:"hashTag",raw:e,href:e.substring(1)}];let r=e.substring(0,1),n=e.substring(1);return[...T(r,t),{type:"hashTag",raw:n,href:n.substring(1)}]},gn=L(fn,{parseOnNested:!0,parseOnQuoted:!0,patterns:[mn]}),hn=/^[0-9]+\. .*$/,xn=(e,t)=>{if(t.context==="table")return T(e,t);let r=e.indexOf(" "),n=e.substring(0,r-1),o=parseInt(n,10),s=e.substring(r+1,e.length);return[{type:"numberList",raw:e,rawNumber:n,number:o,nodes:M(s,{...t,nested:!0})}]},yn=L(xn,{parseOnNested:!1,parseOnQuoted:!1,patterns:[hn]}),En=(e,t,r)=>{var n;return e===""?[]:(n=r?.())!==null&&n!==void 0?n:[]},bn=(...e)=>(t,r)=>e.reduceRight((n,o)=>()=>o(t,r,n),()=>pr(t,r))(),M=bn(En,mr,hr,Ur,Hr,Sr,Kr,Ar,br,Ir,Rr,Zr,sn,kr,un,ln,gn,yn),wn=e=>{let{rows:[t,...r]}=e,{indent:n=0,text:o=""}=t??{},s=o.replace(/^\s*table:/,"");return{indent:n,type:"table",fileName:s,cells:r.map(i=>i.text.substring(n+1)).map(i=>i.split(" ").map(a=>M(a,{nested:!1,quoted:!1,context:"table"})))}},vn=e=>{let{indent:t,text:r}=e.rows[0];return{indent:t,type:"line",nodes:M(r.substring(t),{nested:!1,quoted:!1,context:"line"})}},kn=e=>{switch(e.type){case"title":return cr(e);case"codeBlock":return ur(e);case"table":return wn(e);case"line":return vn(e)}},Ln=e=>e.split(
).map(t=>{var r,n,o;return{indent:(o=(n=(r=/^\s+/.exec(t))===null||r===void 0?void 0:r[0])===null||n===void 0?void 0:n.length)!==null&&o!==void 0?o:0,text:t}}),Tn=(e,t)=>{var r,n;return(e.type==="codeBlock"||e.type==="table")&&t.indent>((n=(r=e.rows[0])===null||r===void 0?void 0:r.indent)!==null&&n!==void 0?n:0)},bt=(e,t)=>{let r=e[e.length-1];return r!==void 0&&Tn(r,t)?(r.rows.push(t),e):(e.push({type:/^\s*code:/.test(t.text)?"codeBlock":/^\s*table:/.test(t.text)?"table":"line",rows:[t]}),e)},In=(e,t)=>{var r;if(!((r=t.hasTitle)!==null&&r!==void 0)||r){let[n,...o]=e;return n===void 0?[]:[{type:"title",rows:[n]},...o.reduce(bt,[])]}return e.reduce(bt,[])},Lt=(e,t)=>{var r;let n=Ln(e);return In(n,{hasTitle:(r=t?.hasTitle)!==null&&r!==void 0?r:!0}).map(kn)};var Cn=/https?:\/\/(?:www\.|music\.|)youtube\.com\/watch/,Dn=/https?:\/\/youtu\.be\/([a-zA-Z\d_-]+)(?:\?([^\s]{0,100})|)/,Rn=/https?:\/\/(?:www\.|)youtube\.com\/shorts\/([a-zA-Z\d_-]+)(?:\?([^\s]+)|)/,Pn=/https?:\/\/(?:www\.|music\.|)youtube\.com\/playlist\?((?:[^\s]+&|)list=([a-zA-Z\d_-]+)(?:&[^\s]+|))/,ke=e=>{if(Cn.test(e)){let t=new URL(e).searchParams,r=t.get("v");if(r)return{pathType:"com",videoId:r,params:t}}{let t=e.match(Dn);if(t){let[,r,n]=t;return{videoId:r,params:new URLSearchParams(n),pathType:"dotbe"}}}{let t=e.match(Rn);if(t){let[,r,n]=t;return{videoId:r,params:new URLSearchParams(n),pathType:"short"}}}{let t=e.match(Pn);if(t){let[,r,n]=t;return{listId:n,params:new URLSearchParams(r),pathType:"list"}}}};var It=e=>{let t=Lt(e,{hasTitle:!0}).flatMap(f=>{switch(f.type){case"codeBlock":case"title":return[];case"line":case"table":return f}}),r=new Map,n=[],o=new Set,s=[],i=new Set,a=[],u=null,m=new Set,d=new Set,h=new RegExp(${location?.origin??"https://scrapbox.io"}/files/([a-z0-9]{24})(?:|\\.[a-zA-Z0-9]+)(?:|\\?[^\\s]*)$),x=f=>{switch(f.type){case"hashTag":if(r.has(C(f.href)))return;r.set(C(f.href),!1),n.push(f.href);return;case"link":switch(f.pathType){case"relative":{let l=Tt(f.href);if(r.get(C(l)))return;r.set(C(l),!0),n.push(l);return}case"root":{let l=Tt(f.href);if(/^\/[\w\d-]+\/?$/.test(l)||o.has(C(l)))return;o.add(C(l)),s.push(l);return}case"absolute":{if(f.content)return;let l=ke(f.href);if(l&&l.pathType!=="list"){u??=https://i.ytimg.com/vi/${l.videoId}/mqdefault.jpg;return}let E=f.href.match(h)?.[1];E&&m.add(E);return}default:return}case"icon":case"strongIcon":{if(f.pathType==="root"||i.has(C(f.path)))return;i.add(C(f.path)),a.push(f.path);return}case"image":case"strongImage":{u??=f.src.endsWith("/thumb/1000")?f.src.replace(/\/thumb\/1000$/,"/raw"):f.src;{let l=f.src.match(h)?.[1];l&&m.add(l)}if(f.type==="image"){let l=f.link.match(h)?.[1];l&&m.add(l)}return}case"helpfeel":d.add(f.text);return;case"numberList":case"strong":case"quote":case"decoration":{for(let l of f.nodes)x(l);return}default:return}},v=[];for(let f of t)switch(f.type){case"line":for(let l of f.nodes)x(l);continue;case"table":{for(let l of f.cells)for(let E of l)for(let k of E)x(k);if(!["infobox","cosense"].includes(f.fileName))continue;v.push(...f.cells.map(l=>l.map(E=>E.map(k=>k.raw).join("")).join(" ").trim()));continue}}return[n,s,a,u,[...m],[...d],v]},Tt=e=>e.replace(/#[a-f\d]{24,32}$/,""),Ct=e=>e.flatMap(({text:t})=>/^\s*\? .*$/.test(t)?[t.trimStart().slice(2)]:[]);var A=(e,t)=>e.length===t.length&&e.every(r=>t.includes(r));function*Dt(e,t,r){let n=t.flatMap(v=>v.split(
));for(let v of ve(e.lines,n,{userId:r}))yield v;(e.lines[0].text!==n[0]||!e.persistent)&&(yield{title:n[0]});let o=e.lines.slice(1,6).map(v=>v.text),s=n.slice(1,6);o.join("")!==s.join("")&&(yield{descriptions:s});let[i,a,u,m,d,h,x]=It(n.join(
));A(e.links,i)||(yield{links:i}),A(e.projectLinks,a)||(yield{projectLinks:a}),A(e.icons,u)||(yield{icons:u}),e.image!==m&&(yield{image:m}),A(e.files,d)||(yield{files:d}),A(Ct(e.lines),h)||(yield{helpfeels:h}),A(e.infoboxDefinition,x)||(yield{infoboxDefinition:x})}var N=async(e,t,r,n)=>{let[o,s,i]=await Promise.all([ee(e,t),be(e),Et()]),a={...o,projectId:s,userId:i},u=n?.socket,m=u??await G();await xe(m);try{let{request:d}=ge(m),h=0,x=[],v;for(;n?.maxAttempts===void 0||h<n.maxAttempts;){let f=r(a,h,x,v);if(x=f instanceof Promise?await f:f,h++,x.length===0)return{ok:!0,value:a.commitId};let l={kind:"page",projectId:s,pageId:a.id,parentId:a.commitId,userId:i,changes:x,cursor:null,freeze:!0};for(;;){let E=await d("socket.io-request",{method:"commit",data:l});if(E.ok)return a.commitId=E.value.commitId,{ok:!0,value:a.commitId};let k=E.value.name;if(k==="UnexpectedError"){let I=new Error;throw I.name=E.value.name,I.message=JSON.stringify(E.value),I}if(k==="TimeoutError"||k==="SocketIOError"){await F(3e3);break}k==="NotFastForwardError"&&(a={...await ee(e,t),projectId:s,userId:i}),v=k}}return{ok:!1,value:{name:"RetryError",attempts:h,message:Retrying exceeded the maxAttempts (${h}).}}}finally{u||await q(m)}};var Rt=e=>{let t=e.match(/(.+?)(?:_(\d+))?$/),r=t?.[1]??e,n=t?.[2]?parseInt(t[2])+1:2;return${r}_${n}};var Le=(e,t,r,n)=>N(e,t,async(o,s,i,a)=>{if(a==="DuplicateTitleError"){let d=Rt(t);return i.map(h=>("title"in h&&(h.title=d),h))}let u=r(o.lines,{...o,attempts:s}),m=u instanceof Promise?await u:u;return m===void 0?[]:m.length===0?[{deleted:!0}]:[...Dt(o,m,o.userId)]},n);var Te=(e,t,r)=>N(e,t,n=>{if(n.pin>0||!n.persistent&&!(r?.create??!1))return[];let o=[{pin:Mn()}];return n.persistent||o.unshift({title:t}),o},r),Ie=(e,t,r)=>N(e,t,n=>n.pin==0||!n.persistent?[]:[{pin:0}],r),Mn=()=>Number.MAX_SAFE_INTEGER-Math.floor(Date.now()/1e3);async function*Ce(e,t=0){let{count:r,pages:n}=await Sn(e,t);for(let o of n)o.pin!==0&&(yield o);(n.at(-1)?.pin??0)!==0&&(yield*Ce(e,t+1e3))}var Sn=async(e,t)=>{let r=await W(e,{limit:1e3,skip:t});if(!r.ok){let n=new Error;throw n.name=r.value.name,n.message=r.value.message,n}return r.value};var Mt=(e,t)=>{let r=t.interval??864e5,n=()=>scrapbox.Project.name===e?On(e,r,t):St();n(),scrapbox.addListener("project:changed",n)},Nt,On=async(e,t,r)=>{St(),await Pt(e,new Date,r),Nt=setInterval(()=>Pt(e,new Date,r),t)},St=()=>clearInterval(Nt),Pt=async(e,t,{makeDiary:r,isOldDiary:n})=>{let{render:o,dispose:s}=me(),i;try{o({type:"spinner"},{type:"text",text:"unpin other diary pages..."}),i=await he();for await(let{title:d}of Ce(e))n(d,t)&&await Ie(e,d,{socket:i});let{title:a,header:u,footer:m}=r(t);o({type:"spinner"},{type:"text",text:pin "/${e}/${a}"...}),await Te(e,a,{socket:i,create:!0}),o({type:"spinner"},{type:"text",text:format "/${e}/${a}"...}),await Le(e,a,d=>[d[0].text,...de(d.slice(1).map(h=>h.text),u,m)],{socket:i}),o({type:"check-circle"},{type:"text",text:Pinned "/${e}/${a}".})}catch(a){o({type:"exclamation-triangle"},{type:"text",text:a instanceof Error?${a.name} ${a.message}:"Unknown error! (see developper console)"}),console.error(a)}finally{i&&await q(i),await F(1e3),s()}};function c(e,t){if(t.length<e)throw new TypeError(e+" argument"+(e>1?"s":"")+" required, but only "+t.length+" present")}function p(e){c(1,arguments);let t=Object.prototype.toString.call(e);return e instanceof Date||typeof e=="object"&&t==="[object Date]"?new Date(e.getTime()):typeof e=="number"||t==="[object Number]"?new Date(e):((typeof e=="string"||t==="[object String]")&&typeof console<"u"&&(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use parseISO to parse strings. See: https://git.io/fjule"),console.warn(new Error().stack)),new Date(NaN))}function H(e){let t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()}function ne(e){c(1,arguments);let t=p(e);return t.setHours(0,0,0,0),t}var Fn=864e5;function oe(e,t){c(2,arguments);let r=ne(e),n=ne(t),o=r.getTime()-H(r),s=n.getTime()-H(n);return Math.round((o-s)/Fn)}function g(e){if(e===null||e===!0||e===!1)return NaN;let t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}function _(e,t){c(2,arguments);let r=p(e),n=g(t);return isNaN(n)?new Date(NaN):(n&&r.setDate(r.getDate()+n),r)}function Y(e,t){c(2,arguments);let r=g(t);return _(e,-r)}function S(e,t){c(1,arguments);let r=t||{},n=r.locale,o=n&&n.options&&n.options.weekStartsOn,s=o==null?0:g(o),i=r.weekStartsOn==null?s:g(r.weekStartsOn);if(!(i>=0&&i<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");let a=p(e),u=a.getDay(),m=(u<i?7:0)+u-i;return a.setDate(a.getDate()-m),a.setHours(0,0,0,0),a}function De(e,t){c(1,arguments);let r=p(e),n=r.getFullYear(),o=t?.locale?.options?.firstWeekContainsDate,s=o==null?1:g(o),i=t?.firstWeekContainsDate==null?s:g(t.firstWeekContainsDate);if(!(i>=1&&i<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");let a=new Date(0);a.setFullYear(n+1,0,i),a.setHours(0,0,0,0);let u=S(a,t),m=new Date(0);m.setFullYear(n,0,i),m.setHours(0,0,0,0);let d=S(m,t);return r.getTime()>=u.getTime()?n+1:r.getTime()>=d.getTime()?n:n-1}function Re(e,t){c(1,arguments);var r=t||{},n=r.locale,o=n&&n.options&&n.options.firstWeekContainsDate,s=o==null?1:g(o),i=r.firstWeekContainsDate==null?s:g(r.firstWeekContainsDate),a=De(e,t),u=new Date(0);u.setFullYear(a,0,i),u.setHours(0,0,0,0);var m=S(u,t);return m}var An=6048e5;function se(e,t){c(1,arguments);let r=p(e),n=S(r,t).getTime()-Re(r,t).getTime();return Math.round(n/An)+1}function z(e,t){c(2,arguments);let r=p(e),n=g(t);if(isNaN(n))return new Date(NaN);if(!n)return r;let o=r.getDate(),s=new Date(r.getTime());s.setMonth(r.getMonth()+n+1,0);let i=s.getDate();return o>=i?s:(r.setFullYear(s.getFullYear(),s.getMonth(),o),r)}function Pe(e,t){c(2,arguments);let r=g(t);return z(e,r*12)}function ie(e,t){c(2,arguments);let r=g(t);return Pe(e,-r)}function ae(e){return c(1,arguments),p(e).getFullYear()}function D(e,t){for(var r=e<0?"-":"",n=Math.abs(e).toString();n.length<t;)n="0"+n;return r+n}var Bn={y(e,t){let r=e.getUTCFullYear(),n=r>0?r:1-r;return D(t==="yy"?n%100:n,t.length)},M(e,t){let r=e.getUTCMonth();return t==="M"?String(r+1):D(r+1,2)},d(e,t){return D(e.getUTCDate(),t.length)},a(e,t){let r=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];case"aaaa":default:return r==="am"?"a.m.":"p.m."}},h(e,t){return D(e.getUTCHours()%12||12,t.length)},H(e,t){return D(e.getUTCHours(),t.length)},m(e,t){return D(e.getUTCMinutes(),t.length)},s(e,t){return D(e.getUTCSeconds(),t.length)},S(e,t){let r=t.length,n=e.getUTCMilliseconds(),o=Math.floor(n*Math.pow(10,r-3));return D(o,t.length)}},Ot=Bn;function K(e){c(1,arguments);var t=p(e);return!isNaN(t)}function Me(e,t){c(2,arguments);let r=p(e).getTime(),n=g(t);return new Date(r+n)}function Ne(e,t){c(2,arguments);let r=g(t);return Me(e,-r)}var jn=/(\w)\1*|''|'(''|[^'])+('|$)|./g,Un=/^'([^]*?)'?$/,$n=/''/g,qn=/[a-zA-Z]/;function O(e,t){c(2,arguments);let r=p(e);if(!K(r))throw new RangeError("Invalid time value");let n=H(r),o=Ne(r,n),s=t.match(jn);return s?s.map(a=>{if(a==="''")return"'";let u=a[0];if(u==="'")return Hn(a);let m=Ot[u];if(m)return m(o,a);if(u.match(qn))throw new RangeError("Format string contains an unescaped latin alphabet character "+u+"");return a}).join(""):""}function Hn(e){let t=e.match(Un);return t?t[1].replace($n,"'"):e}function R(e,t){c(2,arguments);let r=p(e),n=p(t),o=r.getTime()-n.getTime();return o<0?-1:o>0?1:o}function Se(e,t){c(2,arguments);let r=p(e),n=p(t);return r.getFullYear()-n.getFullYear()}function Oe(e,t){c(2,arguments);let r=p(e),n=p(t),o=R(r,n),s=Math.abs(Se(r,n));r.setFullYear(1584),n.setFullYear(1584);let i=R(r,n)===-o,a=o*(s-Number(i));return a===0?0:a}function Fe(e,t){c(2,arguments);let r=p(e),n=p(t),o=r.getFullYear()-n.getFullYear(),s=r.getMonth()-n.getMonth();return o*12+s}function Ae(e){c(1,arguments);let t=p(e);return t.setHours(23,59,59,999),t}function Be(e){c(1,arguments);let t=p(e),r=t.getMonth();return t.setFullYear(t.getFullYear(),r+1,0),t.setHours(23,59,59,999),t}function je(e){c(1,arguments);let t=p(e);return Ae(t).getTime()===Be(t).getTime()}function Ue(e,t){c(2,arguments);let r=p(e),n=p(t),o=R(r,n),s=Math.abs(Fe(r,n)),i;if(s<1)i=0;else{r.getMonth()===1&&r.getDate()>27&&r.setDate(30),r.setMonth(r.getMonth()-o*s);let a=R(r,n)===-o;je(p(e))&&s===1&&R(e,n)===1&&(a=!1),i=o*(s-Number(a))}return i===0?0:i}function Ft(e,t){let r=e.getFullYear()-t.getFullYear()||e.getMonth()-t.getMonth()||e.getDate()-t.getDate()||e.getHours()-t.getHours()||e.getMinutes()-t.getMinutes()||e.getSeconds()-t.getSeconds()||e.getMilliseconds()-t.getMilliseconds();return r<0?-1:r>0?1:r}function $e(e,t){c(2,arguments);let r=p(e),n=p(t),o=Ft(r,n),s=Math.abs(oe(r,n));r.setDate(r.getDate()-o*s);let i=+(Ft(r,n)===-o),a=o*(s-i);return a===0?0:a}function B(e,t){c(2,arguments);let r=p(e),n=p(t);return r.getTime()-n.getTime()}var _n=36e5;function qe(e,t){c(2,arguments);let r=B(e,t)/_n;return r>0?Math.floor(r):Math.ceil(r)}var Yn=6e4;function He(e,t){c(2,arguments);var r=B(e,t)/Yn;return r>0?Math.floor(r):Math.ceil(r)}function _e(e,t){c(2,arguments);let r=B(e,t)/1e3;return r>0?Math.floor(r):Math.ceil(r)}function Ye(e,t){c(2,arguments);let r=g(t);return z(e,-r)}function j(e,t){if(c(2,arguments),!t||typeof t!="object")return new Date(NaN);let r="years"in t?g(t.years):0,n="months"in t?g(t.months):0,o="weeks"in t?g(t.weeks):0,s="days"in t?g(t.days):0,i="hours"in t?g(t.hours):0,a="minutes"in t?g(t.minutes):0,u="seconds"in t?g(t.seconds):0,m=Ye(p(e),n+r*12),d=Y(m,s+o*7),h=a+i*60,v=(u+h*60)*1e3;return new Date(d.getTime()-v)}function ce({start:e,end:t}){c(1,arguments);let r=p(e),n=p(t);if(!K(r))throw new RangeError("Start Date is invalid");if(!K(n))throw new RangeError("End Date is invalid");let o={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},s=R(r,n);o.years=Math.abs(Oe(r,n));let i=j(r,{years:s*o.years});o.months=Math.abs(Ue(i,n));let a=j(i,{months:s*o.months});o.days=Math.abs($e(a,n));let u=j(a,{days:s*o.days});o.hours=Math.abs(qe(u,n));let m=j(u,{hours:s*o.hours});o.minutes=Math.abs(He(m,n));let d=j(m,{minutes:s*o.minutes});return o.seconds=Math.abs(_e(d,n)),o}var Q="yyyy-MM-dd",At=e=>{let t=ce({start:new Date(2023,0,1),end:e}).years;return{title:jt(e),header:[${ae(e)}'${se(e)}],footer:[${O(Y(e,1),Q)}←${O(e,Q)}→${O(_(e,1),Q)},"n年前",...[...Array(t).keys()].map(r=> ${O(ie(e,r+1),Q)}`)]}},Kn=/^\d{4}-\d{2}-\d{2}$/,Bt=(e,t)=>Kn.test(e)?jt(t)!==e:!1,jt=e=>O(e,Q);Mt("hoshihara",{makeDiary:At,isOldDiary:Bt});