zenn-cli 0.5.5-alpha.5 → 0.5.5-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/zenn.js +6 -6
- package/package.json +6 -6
package/dist/server/zenn.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
(()=>{"use strict";var e,t,n,r,o,a,i,c={9367(e,t,n){function r(e){return!!e&&/^[0-9a-z\-_]{12,50}$/.test(e)}function o(e){return`slugの値(${e})が不正です。小文字の半角英数字(a-z0-9)、ハイフン(-)、アンダースコア(_)の12〜50字の組み合わせにしてください`}let a=["modified","system"];function i(e){return a.some(t=>t===e)?e:a[0]}n.d(t,{MF:()=>i,gz:()=>r,nV:()=>o})},6707(e,t,n){n.a(e,async function(e,r){try{var o=n(8766),a=n(9367),i=e([o]);async function c(e,t){let n=await (0,o.m)(e.params.slug);n?t.json({article:n}):t.status(404).json({message:"記事のマークダウンを取得できませんでした"})}function l(e,t){let n=(0,a.MF)(e.query.sort),r=(0,o.r)(n);t.json({articles:r})}o=(i.then?(await i)():i)[0],n.d(t,{G:()=>l,v:()=>c}),r()}catch(e){r(e)}})},8388(e,t,n){n.a(e,async function(e,r){try{var o=n(4535),a=n(9367),i=e([o]);function c(e){return`${e}の本のファイルを取得できませんでした`}function l(e,t){let n=e.params.slug,r=(0,o.ZT)(n);r?t.json({book:r}):t.status(404).json({message:c(n)})}function s(e,t){let n=(0,a.MF)(e.query.sort),r=(0,o.qH)(n);t.json({books:r})}async function u(e,t){let n=e.params.book_slug,r=(0,o.eD)(n);if(!r)return void t.status(404).json({message:c(n)});let a=e.params.chapter_filename,i=await (0,o.hn)(r,a);i?t.json({chapter:i}):t.status(404).json({message:"チャプターのマークダウンを取得できませんでした"})}function p(e,t){let n=e.params.book_slug,r=(0,o.eD)(n);if(!r)return void t.status(404).json({message:c(n)});let a=(0,o.yx)(r);t.json({chapters:a})}o=(i.then?(await i)():i)[0],n.d(t,{QY:()=>l,aq:()=>u,rN:()=>p,zy:()=>s}),r()}catch(e){r(e)}})},6381(e,t,n){n.a(e,async function(e,r){try{var o=n(7213),a=e([o]);async function i(e,t){try{let e=await (0,o.dM)();if(!e)throw"Couldn't get latest version";let n=(0,o.gY)();if(!n)throw"Couldn't get current version";t.json({current:n,latest:e,updateAvailable:e!==n})}catch(e){t.status(500).json({message:"最新のzenn-cliのバージョンを取得できませんでした"})}}o=(a.then?(await a)():a)[0],n.d(t,{x:()=>i}),r()}catch(e){r(e)}})},7038(e,t,n){n.a(e,async function(e,r){try{var o=n(4652),a=n.n(o),i=n(7213),c=e([i]);async function l(e,t){let n=(0,i.zj)("articles");try{a().readdirSync(n),t.json({hasInit:!0})}catch(e){t.json({hasInit:!1})}}i=(c.then?(await c)():c)[0],n.d(t,{O:()=>l}),r()}catch(e){r(e)}})},8670(e,t,n){n.a(e,async function(e,r){try{var o=n(166),a=e([o]);async function i(e,t){let n=e.params.slug;try{let e=await (0,o.default)(`https://zenn.dev/api/articles/${n}`),{article:r}=await e.json(),{body_html:a,title:i}=r;t.setHeader("Cache-Control","public, max-age=7200"),t.json({bodyHtml:a,title:i})}catch(e){console.log(e),t.status(500).json({message:"エラー"})}}o=(a.then?(await a)():a)[0],n.d(t,{f:()=>i}),r()}catch(e){r(e)}})},8798(e,t,n){n.a(e,async function(e,r){try{var o=n(7252),a=n.n(o),i=n(6928),c=n.n(i),l=n(6707),s=n(8388),u=n(8670),p=n(7038),d=n(6381),f=n(3320),m=e([l,s,u,d,p]);function h(){let e=a()();return e.get("/api/articles",l.G),e.get("/api/articles/:slug",l.v),e.get("/api/books",s.zy),e.get("/api/books/:slug",s.QY),e.get("/api/books/:book_slug/chapters",s.rN),e.get("/api/books/:book_slug/chapters/:chapter_filename",s.aq),e.get("/api/manual/:slug",u.f),e.get("/api/cli-version",d.x),e.get("/api/local-info",p.O),e.get("/images/*splat",(e,t)=>{let n=decodeURIComponent(e.path.replace(/^\/images\/?/,""));n.split(/[\\/]+/).some(e=>".."===e)?t.status(400).end():t.sendFile(n,{root:c().join(process.cwd(),"images"),dotfiles:"ignore"})}),e.use((0,f.N)()),e.use(a().static(c().join(__dirname,"../client"),{setHeaders:e=>{e.setHeader("Cache-Control","no-store, no-cache, must-revalidate")}})),e}[l,s,u,d,p]=m.then?(await m)():m,n.d(t,{E:()=>h}),r()}catch(e){r(e)}})},845(e,t,n){var r=n(5697);n.d(t,{},{m:()=>{console.log((0,r.Zv)())}})},3952(e,t,n){n.d(t,{m:()=>_});var r=n(8456),o=n.n(r);let a=require("path");var i=n.n(a);let c=require("fs/promises");var l=n(5697),s=n(479),u=n(8683),p=n(1501);class d extends Error{}function f(e){process.exitCode=1,s.z3(e)}async function m(e){let t,n;try{let n=await (0,c.stat)(e);if(!n.isFile())throw Error();t=n.size}catch{throw new d("画像ファイルを読み込めませんでした")}if(t<1||t>3145728)throw new d("3MB以下の画像を指定してください");try{n=await (0,c.readFile)(e)}catch{throw new d("画像ファイルを読み込めませんでした")}if(!n.length||n.length>3145728)throw new d("3MB以下の画像を指定してください");return{bytes:n,contentType:function(e){if(e.length>=3&&255===e[0]&&216===e[1]&&255===e[2])return"image/jpeg";if(e.length>=8&&[137,80,78,71,13,10,26,10].every((t,n)=>e[n]===t))return"image/png";let t=Buffer.from(e.subarray(0,12)).toString("ascii");if(t.startsWith("GIF87a")||t.startsWith("GIF89a"))return"image/gif";if(t.startsWith("RIFF")&&"WEBP"===t.slice(8,12))return"image/webp";throw new d("JPEG、PNG、GIF、WebP形式の画像を指定してください")}(n)}}async function h(e){let t;try{t=o()({"--confirm-public":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"},{argv:e})}catch{f(l.MS),console.log(l.mH);return}if(t["--help"])return console.log(l.mH);if(1!==t._.length)return void f("アップロードする画像ファイルを1件指定してください");if(!t["--confirm-public"])return void f("公開URLでの配信を確認する場合は --confirm-public を指定してください");try{(0,p.qO)();let e=t._[0],n=await m(e);s.R8("画像は公開URLで配信されます。Markdown本文から参照しなくても自動的には削除されません。機密情報や個人情報を含まないことを確認してください");let r=await (0,p.V6)({...n,filename:i().basename(e)});t["--machine-readable"]||s.kX("画像をアップロードしました"),console.log(r.url)}catch(e){if(e instanceof d||e instanceof p.vu){let t=e instanceof p.vu&&e.code?` (${e.code})`:"";f(`${e.message}${t}`)}else f("原因不明のエラーが発生しました")}}async function g(e){let t;try{t=o()({"--page":Number,"--count":Number,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"},{argv:e})}catch{f(l.MS);return}if(t["--help"])return console.log(l.mH);if(t._.length)return f("listに位置引数は指定できません");let n=t["--page"],r=t["--count"];if(void 0!==n&&(!Number.isSafeInteger(n)||n<1))return f("--page は1以上の整数を指定してください");if(void 0!==r&&(!Number.isSafeInteger(r)||r<1||r>100))return f("--count は1以上100以下の整数を指定してください");try{(0,p.qO)();let e=await (0,p.RY)(n,r);console.log(JSON.stringify(e,null,t["--machine-readable"]?void 0:2))}catch(e){w(e)}}async function y(e){let t;try{t=o()({"--yes":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"},{argv:e})}catch{f(l.MS);return}if(t["--help"])return console.log(l.mH);if(1!==t._.length)return f("削除する画像IDを1件指定してください");if(!t["--yes"])return f("画像の削除は取り消せません。実行する場合は --yes を指定してください");let n=t._[0],r=Number(n);if(!/^[1-9]\d*$/.test(n)||!Number.isSafeInteger(r))return f("画像IDは1以上の整数を指定してください");try{(0,p.qO)(),s.R8("画像を削除すると参照しているArticle、Book、Scrapなどで表示できなくなります"),await (0,p.vS)(r),t["--machine-readable"]?console.log(JSON.stringify({deleted:!0,image_id:r})):s.kX("画像を削除しました")}catch(e){w(e)}}function w(e){e instanceof p.vu?f(`${e.message}${e.code?` (${e.code})`:""}`):f("原因不明のエラーが発生しました")}let _=async(e=[])=>{if(!(0,u.H)())return void f("画像操作は実験的機能です。ZENN_CLI_EXPERIMENTAL_IMAGE_API=true を設定してください");let[t,...n]=e;return t&&"--help"!==t&&"-h"!==t?"upload"===t?h(n):"list"===t?g(n):"delete"===t?y(n):void(f("imageのサブコマンドが不正です"),console.log(l.mH)):void console.log(l.mH)}},4972(e,t,n){n.a(e,async function(e,r){try{var o=n(479),a=n(5697),i=n(8632),c=n(8683),l=n(4832),s=n(3888),u=n(2269),p=n(5634),d=n(6236),f=n(5057),m=n(845),h=n(9128),g=n(7141),y=n(3952),w=e([l,s,u,p,d,f,h,
|
|
2
|
+
(()=>{"use strict";var e,t,n,r,o,a,i,c={9367(e,t,n){function r(e){return!!e&&/^[0-9a-z\-_]{12,50}$/.test(e)}function o(e){return`slugの値(${e})が不正です。小文字の半角英数字(a-z0-9)、ハイフン(-)、アンダースコア(_)の12〜50字の組み合わせにしてください`}let a=["modified","system"];function i(e){return a.some(t=>t===e)?e:a[0]}n.d(t,{MF:()=>i,gz:()=>r,nV:()=>o})},6707(e,t,n){n.a(e,async function(e,r){try{var o=n(8766),a=n(9367),i=e([o]);async function c(e,t){let n=await (0,o.m)(e.params.slug);n?t.json({article:n}):t.status(404).json({message:"記事のマークダウンを取得できませんでした"})}function l(e,t){let n=(0,a.MF)(e.query.sort),r=(0,o.r)(n);t.json({articles:r})}o=(i.then?(await i)():i)[0],n.d(t,{G:()=>l,v:()=>c}),r()}catch(e){r(e)}})},8388(e,t,n){n.a(e,async function(e,r){try{var o=n(4535),a=n(9367),i=e([o]);function c(e){return`${e}の本のファイルを取得できませんでした`}function l(e,t){let n=e.params.slug,r=(0,o.ZT)(n);r?t.json({book:r}):t.status(404).json({message:c(n)})}function s(e,t){let n=(0,a.MF)(e.query.sort),r=(0,o.qH)(n);t.json({books:r})}async function u(e,t){let n=e.params.book_slug,r=(0,o.eD)(n);if(!r)return void t.status(404).json({message:c(n)});let a=e.params.chapter_filename,i=await (0,o.hn)(r,a);i?t.json({chapter:i}):t.status(404).json({message:"チャプターのマークダウンを取得できませんでした"})}function p(e,t){let n=e.params.book_slug,r=(0,o.eD)(n);if(!r)return void t.status(404).json({message:c(n)});let a=(0,o.yx)(r);t.json({chapters:a})}o=(i.then?(await i)():i)[0],n.d(t,{QY:()=>l,aq:()=>u,rN:()=>p,zy:()=>s}),r()}catch(e){r(e)}})},6381(e,t,n){n.a(e,async function(e,r){try{var o=n(7213),a=e([o]);async function i(e,t){try{let e=await (0,o.dM)();if(!e)throw"Couldn't get latest version";let n=(0,o.gY)();if(!n)throw"Couldn't get current version";t.json({current:n,latest:e,updateAvailable:e!==n})}catch(e){t.status(500).json({message:"最新のzenn-cliのバージョンを取得できませんでした"})}}o=(a.then?(await a)():a)[0],n.d(t,{x:()=>i}),r()}catch(e){r(e)}})},7038(e,t,n){n.a(e,async function(e,r){try{var o=n(4652),a=n.n(o),i=n(7213),c=e([i]);async function l(e,t){let n=(0,i.zj)("articles");try{a().readdirSync(n),t.json({hasInit:!0})}catch(e){t.json({hasInit:!1})}}i=(c.then?(await c)():c)[0],n.d(t,{O:()=>l}),r()}catch(e){r(e)}})},8670(e,t,n){n.a(e,async function(e,r){try{var o=n(166),a=e([o]);async function i(e,t){let n=e.params.slug;try{let e=await (0,o.default)(`https://zenn.dev/api/articles/${n}`),{article:r}=await e.json(),{body_html:a,title:i}=r;t.setHeader("Cache-Control","public, max-age=7200"),t.json({bodyHtml:a,title:i})}catch(e){console.log(e),t.status(500).json({message:"エラー"})}}o=(a.then?(await a)():a)[0],n.d(t,{f:()=>i}),r()}catch(e){r(e)}})},8798(e,t,n){n.a(e,async function(e,r){try{var o=n(7252),a=n.n(o),i=n(6928),c=n.n(i),l=n(6707),s=n(8388),u=n(8670),p=n(7038),d=n(6381),f=n(3320),m=e([l,s,u,d,p]);function h(){let e=a()();return e.get("/api/articles",l.G),e.get("/api/articles/:slug",l.v),e.get("/api/books",s.zy),e.get("/api/books/:slug",s.QY),e.get("/api/books/:book_slug/chapters",s.rN),e.get("/api/books/:book_slug/chapters/:chapter_filename",s.aq),e.get("/api/manual/:slug",u.f),e.get("/api/cli-version",d.x),e.get("/api/local-info",p.O),e.get("/images/*splat",(e,t)=>{let n=decodeURIComponent(e.path.replace(/^\/images\/?/,""));n.split(/[\\/]+/).some(e=>".."===e)?t.status(400).end():t.sendFile(n,{root:c().join(process.cwd(),"images"),dotfiles:"ignore"})}),e.use((0,f.N)()),e.use(a().static(c().join(__dirname,"../client"),{setHeaders:e=>{e.setHeader("Cache-Control","no-store, no-cache, must-revalidate")}})),e}[l,s,u,d,p]=m.then?(await m)():m,n.d(t,{E:()=>h}),r()}catch(e){r(e)}})},845(e,t,n){var r=n(5697);n.d(t,{},{m:()=>{console.log((0,r.Zv)())}})},3952(e,t,n){n.d(t,{m:()=>_});var r=n(8456),o=n.n(r);let a=require("path");var i=n.n(a);let c=require("fs/promises");var l=n(5697),s=n(479),u=n(8683),p=n(1501);class d extends Error{}function f(e){process.exitCode=1,s.z3(e)}async function m(e){let t,n;try{let n=await (0,c.stat)(e);if(!n.isFile())throw Error();t=n.size}catch{throw new d("画像ファイルを読み込めませんでした")}if(t<1||t>3145728)throw new d("3MB以下の画像を指定してください");try{n=await (0,c.readFile)(e)}catch{throw new d("画像ファイルを読み込めませんでした")}if(!n.length||n.length>3145728)throw new d("3MB以下の画像を指定してください");return{bytes:n,contentType:function(e){if(e.length>=3&&255===e[0]&&216===e[1]&&255===e[2])return"image/jpeg";if(e.length>=8&&[137,80,78,71,13,10,26,10].every((t,n)=>e[n]===t))return"image/png";let t=Buffer.from(e.subarray(0,12)).toString("ascii");if(t.startsWith("GIF87a")||t.startsWith("GIF89a"))return"image/gif";if(t.startsWith("RIFF")&&"WEBP"===t.slice(8,12))return"image/webp";throw new d("JPEG、PNG、GIF、WebP形式の画像を指定してください")}(n)}}async function h(e){let t;try{t=o()({"--confirm-public":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"},{argv:e})}catch{f(l.MS),console.log(l.mH);return}if(t["--help"])return console.log(l.mH);if(1!==t._.length)return void f("アップロードする画像ファイルを1件指定してください");if(!t["--confirm-public"])return void f("公開URLでの配信を確認する場合は --confirm-public を指定してください");try{(0,p.qO)();let e=t._[0],n=await m(e);s.R8("画像は公開URLで配信されます。Markdown本文から参照しなくても自動的には削除されません。機密情報や個人情報を含まないことを確認してください");let r=await (0,p.V6)({...n,filename:i().basename(e)});t["--machine-readable"]||s.kX("画像をアップロードしました"),console.log(r.url)}catch(e){if(e instanceof d||e instanceof p.vu){let t=e instanceof p.vu&&e.code?` (${e.code})`:"";f(`${e.message}${t}`)}else f("原因不明のエラーが発生しました")}}async function g(e){let t;try{t=o()({"--page":Number,"--count":Number,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"},{argv:e})}catch{f(l.MS);return}if(t["--help"])return console.log(l.mH);if(t._.length)return f("listに位置引数は指定できません");let n=t["--page"],r=t["--count"];if(void 0!==n&&(!Number.isSafeInteger(n)||n<1))return f("--page は1以上の整数を指定してください");if(void 0!==r&&(!Number.isSafeInteger(r)||r<1||r>100))return f("--count は1以上100以下の整数を指定してください");try{(0,p.qO)();let e=await (0,p.RY)(n,r);console.log(JSON.stringify(e,null,t["--machine-readable"]?void 0:2))}catch(e){w(e)}}async function y(e){let t;try{t=o()({"--yes":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"},{argv:e})}catch{f(l.MS);return}if(t["--help"])return console.log(l.mH);if(1!==t._.length)return f("削除する画像IDを1件指定してください");if(!t["--yes"])return f("画像の削除は取り消せません。実行する場合は --yes を指定してください");let n=t._[0],r=Number(n);if(!/^[1-9]\d*$/.test(n)||!Number.isSafeInteger(r))return f("画像IDは1以上の整数を指定してください");try{(0,p.qO)(),s.R8("画像を削除すると参照しているArticle、Book、Scrapなどで表示できなくなります"),await (0,p.vS)(r),t["--machine-readable"]?console.log(JSON.stringify({deleted:!0,image_id:r})):s.kX("画像を削除しました")}catch(e){w(e)}}function w(e){e instanceof p.vu?f(`${e.message}${e.code?` (${e.code})`:""}`):f("原因不明のエラーが発生しました")}let _=async(e=[])=>{if(!(0,u.H)())return void f("画像操作は実験的機能です。ZENN_CLI_EXPERIMENTAL_IMAGE_API=true を設定してください");let[t,...n]=e;return t&&"--help"!==t&&"-h"!==t?"upload"===t?h(n):"list"===t?g(n):"delete"===t?y(n):void(f("imageのサブコマンドが不正です"),console.log(l.mH)):void console.log(l.mH)}},4972(e,t,n){n.a(e,async function(e,r){try{var o=n(479),a=n(5697),i=n(8632),c=n(8683),l=n(4832),s=n(3888),u=n(2269),p=n(5634),d=n(6236),f=n(5057),m=n(845),h=n(9128),g=n(7141),y=n(3952),w=e([g,l,s,u,p,d,f,h,i]);async function _(e,t,n={canNotifyUpdate:!1}){let r={scrap:async()=>g.m(t),preview:async()=>l.m(),init:async()=>s.m(),"new:article":async()=>u.m(),"new:articles":async()=>u.m(),"new:book":async()=>p.m(),"new:books":async()=>p.m(),"list:articles":async()=>d.m(),"list:books":async()=>f.m(),"--help":async()=>m.m(),"-h":async()=>m.m(),"--version":async()=>h.m(),"-v":async()=>h.m()};if((0,c.H)()&&(r.image=async()=>y.m(t)),n.canNotifyUpdate&&await (0,i.Z)().catch(()=>void 0),!r[e]){process.exitCode=1,o.z3("該当するCLIコマンドが存在しません"),console.log((0,a.Zv)());return}await r[e](t)}[g,l,s,u,p,d,f,h,i]=w.then?(await w)():w,n.d(t,{m:()=>_}),r()}catch(e){r(e)}})},3888(e,t,n){n.a(e,async function(e,r){try{var o=n(479),a=n(7213),i=n(5697),c=n(8456),l=n.n(c),s=e([a]);a=(s.then?(await s)():s)[0];let u=async e=>{let t=function(e){try{return l()({"--help":Boolean,"-h":"--help"},{argv:e})}catch(e){return"ARG_UNKNOWN_OPTION"===e.code?o.z3(i.MS):(o.z3("引数のパース時にエラーが発生しました"),console.log(e)),console.log(i.Vz),null}}(e);if(null===t)return;if(t["--help"])return void console.log(i.Vz);["articles","books"].forEach(e=>{let t=(0,a.zj)(`${e}/.keep`);try{(0,a.tN)(t,"")}catch(t){console.log(`Generating ${e} skipped.`)}});try{(0,a.tN)((0,a.zj)(".gitignore"),"node_modules\n.DS_Store")}catch(e){console.log("Generating .gitignore skipped.")}try{(0,a.tN)((0,a.zj)("README.md"),"# Zenn CLI\n\n* [\uD83D\uDCD8 How to use](https://zenn.dev/zenn/articles/zenn-cli-guide)")}catch(e){console.log("Generating README.md skipped.")}let n=await (0,a.l$)(["zenn","new:article"]),r=await (0,a.l$)(["zenn","new:book"]),c=await (0,a.l$)(["zenn","preview"]);console.log(`
|
|
3
3
|
🎉 Done!
|
|
4
4
|
早速コンテンツを作成しましょう
|
|
5
5
|
|
|
@@ -20,7 +20,7 @@ price: ${p} # 有料の場合200〜5000
|
|
|
20
20
|
chapters:
|
|
21
21
|
- example1
|
|
22
22
|
- example2
|
|
23
|
-
`,f=`books/${n}/config.yaml`,m=(0,i.zj)(f);try{(0,i.tN)(m,d),s.zu(f)}catch(e){s.z3("config.yamlの作成時にエラーが発生しました"),console.error(e);return}["example1.md","example2.md"].forEach(e=>{try{let t=`books/${n}/${e}`;(0,i.tN)((0,i.zj)(t),'---\ntitle: ""\n---\n'),s.zu(t)}catch(e){s.z3("チャプターのファイル作成時にエラーが発生しました"),console.error(e);return}})}}),r()}catch(e){r(e)}})},4832(e,t,n){n.a(e,async function(e,r){try{var o=n(8456),a=n.n(o),i=n(8798),c=n(6414),l=n(479),s=n(7213),u=n(5697),p=e([i,c,s]);[i,c,s]=p.then?(await p)():p;let d=async e=>{let t=function(e){try{return a()({"--port":Number,"--no-watch":Boolean,"--open":Boolean,"--help":Boolean,"--host":String,"-p":"--port","-h":"--help"},{argv:e})}catch(e){return"ARG_UNKNOWN_OPTION"===e.code?l.z3(u.MS):l.z3(e),console.log(u.nY),null}}(e);if(null===t)return;if(t["--help"])return void console.log(u.nY);let n=!0!==t["--no-watch"],r={app:(0,i.E)(),port:t["--port"]||8e3,shouldOpen:!0===t["--open"],hostname:t["--host"]},o=await (0,c.U)(r);n&&(0,c.j)(o,[`${(0,s.zj)("")}/articles`,`${(0,s.zj)("")}/books`])};n.d(t,{},{m:d}),r()}catch(e){r(e)}})},7141(e,t,n){n.a(e,async function(e,r){try{var o=n(8456),a=n.n(o),i=n(5697),c=n(479),l=n(8683),s=n(4987),u=n(1501),p=n(6951),d=n(1961),f=n(2932),m=e([p,d]);function h(e,t){try{return a()(t,{argv:e})}catch(e){return g("ARG_UNKNOWN_OPTION"===e.code?i.MS:"引数が不正です"),console.log(i.ki),null}}function g(e){process.exitCode=1,c.z3(e)}function y(e,t,n){n||c.kX(e),console.log(t)}function w(e,t){console.log(JSON.stringify(e,null,t?void 0:2))}function _(e,t){if(!e)throw new s.Q5(`${t} は取り消せません。実行する場合は --yes を指定してください`)}function S(e,t,n){if(void 0!==e){if(!Number.isSafeInteger(e)||e<1||void 0!==n&&e>n)throw new s.Q5(n?`${t} は1以上${n}以下の整数を指定してください`:`${t} は1以上の整数を指定してください`);return e}}function b(e){if(void 0===e)return;if(!e.trim())return[];let t=e.split(",").map(e=>e.trim());if(t.some(e=>!e))throw new s.Q5("--topics はカンマ区切りの空でないtopic名を指定してください");return t}function v(e,t,n){let r=!!e[t],o=!!e[n];if(r&&o)throw new s.Q5(`${t} と ${n} は同時に指定できません`);return!!r||!o&&void 0}function N(e){return{page:S(e["--page"],"--page"),count:S(e["--count"],"--count",100)}}function I(e){if(e instanceof s.Q5||e instanceof p.G||e instanceof d.nV||e instanceof f.T0||e instanceof u.vu){let t=e instanceof u.vu&&e.code?` (${e.code})`:"";g(`${e.message}${t}`);return}g("原因不明のエラーが発生しました")}async function E(e,t,n){let r={...void 0===e.title?{}:{title:e.title},body:[e.body,...e.topics??[]].filter(e=>void 0!==e).join("\n")},o=t.aiScanEnabled?(0,f.Uh)():void 0;if(t.secretScanEnabled?await (0,p.K)({...r,notes:n,aiPrompt:o?.customPrompt}):c.R8("DANGER: Secret scanをスキップします。未検査の内容がAIやPublic APIへ送信される可能性があります"),!t.aiScanEnabled||!o)return void c.R8(t.aiScanSkipped?"DANGER: AI scanをスキップします。タイトル・本文をAIプロバイダーへ送信しません":"AI scanは無効です。タイトル・本文をAIプロバイダーへ送信しません");let a=[...void 0!==e.title?["タイトル"]:[],...void 0!==e.body?["本文"]:[],...void 0!==e.topics?["topics"]:[],...n?["notes-to-ai"]:[],...o.customPrompt?["AI scan prompt"]:[]];c.R8(`AI scanを実行します。${a.join("、")}を${o.provider}(model=${JSON.stringify(o.model)}, effort=${o.effort})へ送信します。データ取扱いは利用者の責任で確認してください`),(await (0,d.Sm)(r,o,n)).forEach(e=>{c.R8(`AI scan warning: ${(0,d.Y6)(e)}`)})}async function z(e){let t=h(e,{"--title":String,"--file":String,"--closed":Boolean,"--archived":Boolean,"--disallow-others-post":Boolean,"--unlisted":Boolean,"--topics":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(!t)return;if(t["--help"])return console.log(i.ki);let n=t["--title"];if(t._.length||!n?.trim())return void g("--title を指定してください");try{let e=t["--notes-to-ai"],r=(0,f.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]}),o=(0,f.iu)();if(!r.aiScanEnabled&&void 0!==e)throw new f.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");(0,u.qO)(),(0,u.yJ)();let a=await (0,s._n)(t["--file"]),i=b(t["--topics"]);await E({title:n,body:a,topics:i},r,e);let c=await (0,u.WL)({title:n,bodyMarkdown:a,...t["--closed"]?{closed:!0}:{},...t["--archived"]?{archived:!0}:{},...t["--disallow-others-post"]?{canOthersPost:!1}:{},unlisted:!!t["--unlisted"]||o,topicNames:i});y("Scrapを作成しました",c.url,!!t["--machine-readable"])}catch(e){I(e)}}async function A(e){let t=h(e,{"--page":Number,"--count":Number,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(t._.length)return void g("listに位置引数は指定できません");try{(0,u.qO)();let{page:e,count:n}=N(t);w(await (0,u.z9)(e,n),!!t["--machine-readable"])}catch(e){I(e)}}}async function k(e){let t=h(e,{"--page":Number,"--count":Number,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void g("取得するScrap slugまたはURLを指定してください");try{(0,u.qO)();let e=(0,s.Yb)(t._[0],(0,u.yJ)().origin),{page:n,count:r}=N(t);w(await (0,u.ic)(e,n,r),!!t["--machine-readable"])}catch(e){I(e)}}}async function P(e){let t=h(e,{"--title":String,"--closed":Boolean,"--open":Boolean,"--archived":Boolean,"--unarchived":Boolean,"--allow-others-post":Boolean,"--disallow-others-post":Boolean,"--unlisted":Boolean,"--public":Boolean,"--topics":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void g("更新するScrap slugまたはURLを指定してください");try{let e=t["--title"],n=b(t["--topics"]),r=v(t,"--closed","--open"),o=v(t,"--archived","--unarchived"),a=v(t,"--allow-others-post","--disallow-others-post"),i=v(t,"--unlisted","--public"),c=void 0!==e||void 0!==n,l=t["--notes-to-ai"];if(!c&&void 0!==l)throw new f.T0("--notes-to-ai はタイトルまたはtopicsを更新する場合にだけ指定できます");(0,u.qO)();let p=(0,s.Yb)(t._[0],(0,u.yJ)().origin);if(c){let r=(0,f.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]});if(!r.aiScanEnabled&&void 0!==l)throw new f.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");await E({title:e,topics:n},r,l)}w(await (0,u.lq)(p,{title:e,closed:r,archived:o,canOthersPost:a,unlisted:i,topicNames:n}),!!t["--machine-readable"])}catch(e){I(e)}}}async function O(e){let t=h(e,{"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(!t._.length||t._.length>100)return void g("取得するコメントslugを1件以上100件以下指定してください");try{(0,u.qO)();let e=t._.map(e=>(0,s.Oj)(e));w(await (0,u.eb)(e),!!t["--machine-readable"])}catch(e){I(e)}}}async function x(e){let t=h(e,{"--file":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(2!==t._.length)return void g("Scrap slugまたはURLと更新するコメントslugを指定してください");try{let e=t["--notes-to-ai"],n=(0,f.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]});if(!n.aiScanEnabled&&void 0!==e)throw new f.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");(0,u.qO)();let r=(0,s.Yb)(t._[0],(0,u.yJ)().origin),o=(0,s.Oj)(t._[1]),a=await (0,s._n)(t["--file"]);await E({body:a},n,e),w(await (0,u.mZ)({scrapSlug:r,commentSlug:o,bodyMarkdown:a}),!!t["--machine-readable"])}catch(e){I(e)}}}async function R(e){let t=h(e,{"--yes":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void g("削除するScrap slugまたはURLを指定してください");try{_(t["--yes"],"Scrapの削除"),(0,u.qO)();let e=(0,s.Yb)(t._[0],(0,u.yJ)().origin);c.R8("自分のアーカイブ済みScrapと、そのScrapに含まれるすべてのコメントを削除します"),await (0,u.bw)(e),t["--machine-readable"]?w({deleted:!0,scrap_slug:e},!0):c.kX("Scrapを削除しました")}catch(e){I(e)}}}async function L(e){let t=h(e,{"--yes":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(2!==t._.length)return void g("Scrap slugまたはURLと削除するコメントslugを指定してください");try{_(t["--yes"],"コメントの削除"),(0,u.qO)();let e=(0,s.Yb)(t._[0],(0,u.yJ)().origin),n=(0,s.Oj)(t._[1]);c.R8("コメントに返信がある場合は、返信も削除します"),await (0,u.Ed)({scrapSlug:e,commentSlug:n}),t["--machine-readable"]?w({deleted:!0,scrap_slug:e,comment_slug:n},!0):c.kX("Scrapコメントを削除しました")}catch(e){I(e)}}}async function $(e){let t=h(e,{"--file":String,"--reply-to":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void g("投稿先のScrap slugまたはURLを指定してください");try{let e=t["--notes-to-ai"],n=(0,f.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]});if(!n.aiScanEnabled&&void 0!==e)throw new f.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");(0,u.qO)();let r=(0,s.Yb)(t._[0],(0,u.yJ)().origin),o=t["--reply-to"]?(0,s.Oj)(t["--reply-to"]):void 0,a=await (0,s._n)(t["--file"]);await E({body:a},n,e);let i=await (0,u.ZK)({scrapSlug:r,bodyMarkdown:a,parentCommentSlug:o});y("Scrapへ投稿しました",i.url,!!t["--machine-readable"])}catch(e){I(e)}}}[p,d]=m.then?(await m)():m;let C=async(e=[])=>{if(!(0,l.T)())return void g("Scrap操作は実験的機能です。ZENN_CLI_EXPERIMENTAL_SCRAP_API=true を設定してください");let[t,...n]=e;return t&&"--help"!==t&&"-h"!==t?"create"===t?z(n):"list"===t?A(n):"get"===t?k(n):"update"===t?P(n):"comments"===t?O(n):"post"===t?$(n):"update-comment"===t?x(n):"delete"===t?R(n):"delete-comment"===t?L(n):void(g("Scrapのサブコマンドが不正です"),console.log(i.ki)):void console.log(i.ki)};n.d(t,{},{m:C}),r()}catch(e){r(e)}})},9128(e,t,n){n.a(e,async function(e,r){try{var o=n(7213),a=n(479),i=e([o]);o=(i.then?(await i)():i)[0],n.d(t,{},{m:()=>{let e=(0,o.gY)();e?console.log(e):a.z3("zenn-cliのバージョンを取得できませんでした")}}),r()}catch(e){r(e)}})},8766(e,t,n){n.a(e,async function(e,r){try{var o=n(3531),a=n.n(o),i=n(7089),c=n(479),l=n(7213),s=n(3498),u=n(5612),p=e([s,u,l]);async function d(e){let t=m(e);if(!t)return null;let{meta:n,bodyMarkdown:r}=t,o=await (0,s.default)(r,{embedOrigin:"https://embed.zenn.studio"}),a=(0,l.Le)(o),i=(0,u.parseToc)(a);return{...n,bodyHtml:a,toc:i}}function f(e){var t;let n,r,o=(t=e,n=(0,l.zj)("articles"),r="system"===t?(0,l.N0)(n):(0,l.dC)(n),null===r?(c.z3("プロジェクトルートの articles ディレクトリを取得できませんでした。`npx zenn init`を実行して作成してください"),[]):r.filter(e=>/\.md$/.test(e))).map(e=>e.replace(/\.md$/,""));return o?o.map(e=>{var t;let n;return t=e,(n=m(t))?n.meta:null}).filter(e=>null!==e):[]}function m(e){let t=(0,l.zj)(`articles/${e}.md`),n=(0,l.H9)(t);if(!n)return c.z3(`${t}の内容を取得できませんでした`),null;let{data:r,content:o}=a()(n,{engines:{yaml:e=>(0,i.load)(e,{schema:i.JSON_SCHEMA})}});return{meta:{...r,slug:e},bodyMarkdown:o}}[s,u,l]=p.then?(await p)():p,n.d(t,{m:()=>d,r:()=>f}),r()}catch(e){r(e)}})},4535(e,t,n){n.a(e,async function(e,r){try{var o=n(7089),a=n(6928),i=n.n(a),c=n(6045),l=n.n(c),s=n(3531),u=n.n(s),p=n(3498),d=n(5612),f=n(479),m=n(7213),h=e([p,d,m]);function g(e){let t=y(e);if(!t)return null;let n=b(e),r=(0,m.N0)(n),o=r?.find(e=>m.ey.map(e=>`cover${e}`).includes(e));if(!o)return t;let a=function(e){try{let t=(0,m.SV)(e);if(!t)return null;let n=(0,m.pG)(e),{width:r,height:o}=l()(t),a=(0,m.PT)(e);if(!a)return null;return{coverDataUrl:(0,m.JB)(t,a),coverFilesize:n,coverWidth:r,coverHeight:o}}catch(e){return null}}(i().join(n,o));return a?{...t,...a}:t}function y(e){let t=function(e){var t;let n,r,a,c,l=(t=e,n=b(t),r=i().join(n,"config.yaml"),a=i().join(n,"config.yml"),(c=(0,m.H9)(r)||(0,m.H9)(a))||f.z3(`${r}の内容を取得できませんでした`),c);if(!l)return null;try{let t=(0,o.load)(l);if("string"==typeof t||"number"==typeof t)throw"Invalid yaml format.";if(!t)return null;return{slug:e,...t,specifiedChapterSlugs:t.chapters,chapterOrderedByConfig:!!t.chapters?.length}}catch(t){return console.log(t),f.z3(`config.yamlの表記に誤りがあります(books/${e})`),null}}(e);if(!t)return null;let{specifiedChapterSlugs:n}=t,r=`books/${e}/config.yaml`;if(n){if(!Array.isArray(n))return f.z3(`${r}の chapters にはslugの配列のみを指定できます`),null;if(n.some(e=>"string"!=typeof e))return f.z3(`${r}の chapters には文字列のslugのみを含めることができます。`),null;if(n.some(e=>/ - /.test(e)))return f.z3(`${r}の chapters には一次元配列のみを指定できます。ネストはできません`),null}return t}function w(e){var t;let n,r;return(t=e,n=(0,m.zj)("books"),r="system"===t?(0,m.If)(n):(0,m.oS)(n),null===r?[]:r.filter(e=>!/^\./.test(e))).map(e=>y(e)).filter(e=>null!==e)}async function _(e,t){let n=v(e,t);if(!n)return null;let{meta:r,bodyMarkdown:o}=n,a=await (0,p.default)(o,{embedOrigin:"https://embed.zenn.studio"}),i=(0,m.Le)(a),c=(0,d.parseToc)(i);return{...r,bodyHtml:i,toc:c}}function S(e){var t;let n,r;return(t=e.slug,n=(0,m.zj)(`books/${t}`),r=(0,m.N0)(n),null===r?(f.z3(`${n}を取得できませんでした`),[]):r.filter(e=>/\.md$/.test(e))).map(t=>{let n;return(n=v(e,t))?n.meta:null}).filter(e=>null!==e).sort((e,t)=>Number(null===e.position?999:e.position)-Number(null===t.position?999:t.position))}function b(e){return(0,m.zj)(`books/${e}`)}function v(e,t){var n,r;let o,a,{position:i,slug:c}=function(e,t){let n=t.replace(/\.md$/,"");if(e.specifiedChapterSlugs?.length){let t=e.specifiedChapterSlugs.findIndex(e=>e===n);return{slug:n,position:t>=0?t:null}}let r=n.split(".");if(2!==r.length)return{position:null,slug:n};{let e=Number(r[0]),t=r[1];return{position:e,slug:t}}}(e,t),l=(n=e.slug,r=t,o=(0,m.zj)(`books/${n}/${r}`),(a=(0,m.H9)(o))||f.z3(`${o}の内容を取得できませんでした`),a);if(!l)return null;let{data:s,content:p}=u()(l);return{meta:{...s,position:i,slug:c,filename:t},bodyMarkdown:p}}[p,d,m]=h.then?(await h)():h,n.d(t,{ZT:()=>g,eD:()=>y,hn:()=>_,qH:()=>w,yx:()=>S}),r()}catch(e){r(e)}})},8683(e,t,n){var r=n(1099);function o(){return"true"===(0,r.A)("ZENN_CLI_EXPERIMENTAL_SCRAP_API")}function a(){return"true"===(0,r.A)("ZENN_CLI_EXPERIMENTAL_IMAGE_API")}n.d(t,{H:()=>a,T:()=>o})},7213(e,t,n){n.a(e,async function(e,r){try{var o=n(6928),a=n.n(o),i=n(4652),c=n.n(i),l=n(6982),s=n.n(l),u=n(166),p=n(4217),d=n(857),f=n(479),m=n(7250),h=n.n(m),g=n(870),y=n(2595),w=e([u,g,y]);function _(){return s().randomBytes(7).toString("hex")}function S(){return h().version}async function b(){let e=await (0,u.default)("https://registry.npmjs.org/zenn-cli/latest");return(await e.json()).version}function v(e){return/\.\./.test(e)&&(f.z3("取得するファイル/ディレクトリの名前に不正な文字列が含まれているため処理を終了します"),process.exit(1)),a().join(process.cwd(),e.replace(/^\//,""))}function N(e){try{return c().readFileSync(e,"utf8")}catch(e){return null}}function I(e){try{return c().readFileSync(e)}catch(e){return null}}function E(e){try{return c().readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(({name:e})=>e)}catch(e){return null}}function z(e){let t=E(e);return t?t.map(t=>({name:t,time:c().statSync(a().join(e,t)).ctime.getTime()})).sort((e,t)=>t.time-e.time).map(({name:e})=>e):t}function A(e){try{return c().readdirSync(e)}catch(e){return null}}function k(e){let t=A(e);return t?t.map(t=>({name:t,time:c().statSync(a().join(e,t)).ctime.getTime()})).sort((e,t)=>t.time-e.time).map(({name:e})=>e):t}function P(e){return c().statSync(e).size}[u,g,y]=w.then?(await w)():w;let $=[{ext:".png",type:"image/png"},{ext:".jpg",type:"image/jpeg"},{ext:".jpeg",type:"image/jpeg"},{ext:".webp",type:"image/webp"},{ext:".gif",type:"image/gif"}],C=$.map(({ext:e})=>e);function O(e){let t=$.find(({ext:t})=>e.endsWith(t));return t?t.type:null}function x(e,t){return`data:${t};base64,${e.toString("base64")}`}function R(e,t){c().outputFileSync(e,t,{flag:"wx"})}function L(e){let t='data-body-error style="color: var(--c-error); font-weight: 700"',n=p.load(e);return n("img").map((e,r)=>{let o=r.attribs.src;if(!o||function(e){try{return new URL(e),!0}catch{return!1}}(o))return;if(!a().isAbsolute(o)){n(r).before(`<p ${t}><code>${o}</code>を表示できません。ローカルの画像を読み込むには相対パスではなく<code>/images/example.png</code>のように<code>/images/</code>から始まるパスを指定してください。</p>`),n(r).remove();return}if(!C.some(e=>o.endsWith(e))){n(r).before(`<p ${t}><code>${o}</code>を表示できません。対応している画像の拡張子は <code>${C.join(",")}</code> です。</p>`),n(r).remove();return}let i=decodeURIComponent(o),l=v(i);if(!c().existsSync(l)){n(r).before(`<p ${t}><code>${o}</code>にファイルが存在しません。</p>`),n(r).remove();return}let s=c().statSync(l).size;if(s>3145728){n(r).before(`<p ${t}><code>${o}</code>のファイルサイズ(${Math.trunc(100*s/1024/1024)/100} MB)はアップロード可能なサイズを超えています。ファイルサイズは3MB以内にしてください。</p>`),n(r).remove();return}}),n.html()}let U=async e=>{let t=await (0,g.detect)(),n=t?.agent??"npm",r=(0,y.resolveCommand)(n,"execute-local",e);if(!r)return`npx ${e.join(" ")}`;let{command:o,args:a}=r;return`${o} ${a.join(" ")}`};n.d(t,{H9:()=>N,If:()=>E,JB:()=>x,Le:()=>L,N0:()=>A,PT:()=>O,SV:()=>I,dC:()=>k,dM:()=>b,gY:()=>S,oS:()=>z,pG:()=>P,tN:()=>R,z9:()=>_,zj:()=>v},{cK:e=>{let t="localhost",n=e;return e&&("0.0.0.0"!==e&&"::"!==e?t=e:n=(()=>{let e=(0,d.networkInterfaces)();for(let t of Object.values(e).flatMap(e=>e??[]))if("IPv4"===t.family&&"127.0.0.1"!==t.address)return t.address})()),{name:t,host:n}},ey:C,l$:U}),r()}catch(e){r(e)}})},3320(e,t,n){function r(){return(e,t,n)=>{if("GET"!==e.method&&"HEAD"!==e.method||e.path.startsWith("/api/")||e.path.startsWith("/images/")||/\.[^/]+$/.test(e.path)||!e.accepts("html"))return n();e.url="/index.html",n()}}n.d(t,{N:()=>r})},479(e,t,n){var r=n(1144),o=n.n(r);function a(e){console.error(o().red("error:"),e)}function i(e){console.log(o().green("success:"),e)}function c(e){console.log("created:",o().green(e))}function l(e){console.warn(o().yellow("warn:"),e)}n.d(t,{R8:()=>l,kX:()=>i,z3:()=>a,zu:()=>c})},5697(e,t,n){var r=n(1099);let o=`
|
|
23
|
+
`,f=`books/${n}/config.yaml`,m=(0,i.zj)(f);try{(0,i.tN)(m,d),s.zu(f)}catch(e){s.z3("config.yamlの作成時にエラーが発生しました"),console.error(e);return}["example1.md","example2.md"].forEach(e=>{try{let t=`books/${n}/${e}`;(0,i.tN)((0,i.zj)(t),'---\ntitle: ""\n---\n'),s.zu(t)}catch(e){s.z3("チャプターのファイル作成時にエラーが発生しました"),console.error(e);return}})}}),r()}catch(e){r(e)}})},4832(e,t,n){n.a(e,async function(e,r){try{var o=n(8456),a=n.n(o),i=n(8798),c=n(6414),l=n(479),s=n(7213),u=n(5697),p=e([i,c,s]);[i,c,s]=p.then?(await p)():p;let d=async e=>{let t=function(e){try{return a()({"--port":Number,"--no-watch":Boolean,"--open":Boolean,"--help":Boolean,"--host":String,"-p":"--port","-h":"--help"},{argv:e})}catch(e){return"ARG_UNKNOWN_OPTION"===e.code?l.z3(u.MS):l.z3(e),console.log(u.nY),null}}(e);if(null===t)return;if(t["--help"])return void console.log(u.nY);let n=!0!==t["--no-watch"],r={app:(0,i.E)(),port:t["--port"]||8e3,shouldOpen:!0===t["--open"],hostname:t["--host"]},o=await (0,c.U)(r);n&&(0,c.j)(o,[`${(0,s.zj)("")}/articles`,`${(0,s.zj)("")}/books`])};n.d(t,{},{m:d}),r()}catch(e){r(e)}})},7141(e,t,n){n.a(e,async function(e,r){try{var o=n(8456),a=n.n(o),i=n(5697),c=n(479),l=n(4987),s=n(1501),u=n(6951),p=n(1961),d=n(2932),f=e([u,p]);function m(e,t){try{return a()(t,{argv:e})}catch(e){return h("ARG_UNKNOWN_OPTION"===e.code?i.MS:"引数が不正です"),console.log(i.ki),null}}function h(e){process.exitCode=1,c.z3(e)}function g(e,t,n){n||c.kX(e),console.log(t)}function y(e,t){console.log(JSON.stringify(e,null,t?void 0:2))}function w(e,t){if(!e)throw new l.Q5(`${t} は取り消せません。実行する場合は --yes を指定してください`)}function _(e,t,n){if(void 0!==e){if(!Number.isSafeInteger(e)||e<1||void 0!==n&&e>n)throw new l.Q5(n?`${t} は1以上${n}以下の整数を指定してください`:`${t} は1以上の整数を指定してください`);return e}}function S(e){if(void 0===e)return;if(!e.trim())return[];let t=e.split(",").map(e=>e.trim());if(t.some(e=>!e))throw new l.Q5("--topics はカンマ区切りの空でないtopic名を指定してください");return t}function b(e,t,n){let r=!!e[t],o=!!e[n];if(r&&o)throw new l.Q5(`${t} と ${n} は同時に指定できません`);return!!r||!o&&void 0}function v(e){return{page:_(e["--page"],"--page"),count:_(e["--count"],"--count",100)}}function N(e){if(e instanceof l.Q5||e instanceof u.G||e instanceof p.nV||e instanceof d.T0||e instanceof s.vu){let t=e instanceof s.vu&&e.code?` (${e.code})`:"";h(`${e.message}${t}`);return}h("原因不明のエラーが発生しました")}async function z(e,t,n){let r={...void 0===e.title?{}:{title:e.title},body:[e.body,...e.topics??[]].filter(e=>void 0!==e).join("\n")},o=t.aiScanEnabled?(0,d.Uh)():void 0;if(t.secretScanEnabled?await (0,u.K)({...r,notes:n,aiPrompt:o?.customPrompt}):c.R8("DANGER: Secret scanをスキップします。未検査の内容がAIやPublic APIへ送信される可能性があります"),!t.aiScanEnabled||!o)return void c.R8(t.aiScanSkipped?"DANGER: AI scanをスキップします。タイトル・本文をAIプロバイダーへ送信しません":"AI scanは無効です。タイトル・本文をAIプロバイダーへ送信しません");let a=[...void 0!==e.title?["タイトル"]:[],...void 0!==e.body?["本文"]:[],...void 0!==e.topics?["topics"]:[],...n?["notes-to-ai"]:[],...o.customPrompt?["AI scan prompt"]:[]];c.R8(`AI scanを実行します。${a.join("、")}を${o.provider}(model=${JSON.stringify(o.model)}, effort=${o.effort})へ送信します。データ取扱いは利用者の責任で確認してください`),(await (0,p.Sm)(r,o,n)).forEach(e=>{c.R8(`AI scan warning: ${(0,p.Y6)(e)}`)})}async function I(e){let t=m(e,{"--title":String,"--file":String,"--closed":Boolean,"--archived":Boolean,"--disallow-others-post":Boolean,"--unlisted":Boolean,"--topics":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(!t)return;if(t["--help"])return console.log(i.ki);let n=t["--title"];if(t._.length||!n?.trim())return void h("--title を指定してください");try{let e=t["--notes-to-ai"],r=(0,d.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]}),o=(0,d.iu)();if(!r.aiScanEnabled&&void 0!==e)throw new d.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");(0,s.qO)(),(0,s.yJ)();let a=await (0,l._n)(t["--file"]),i=S(t["--topics"]);await z({title:n,body:a,topics:i},r,e);let c=await (0,s.WL)({title:n,bodyMarkdown:a,...t["--closed"]?{closed:!0}:{},...t["--archived"]?{archived:!0}:{},...t["--disallow-others-post"]?{canOthersPost:!1}:{},unlisted:!!t["--unlisted"]||o,topicNames:i});g("Scrapを作成しました",c.url,!!t["--machine-readable"])}catch(e){N(e)}}async function E(e){let t=m(e,{"--page":Number,"--count":Number,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(t._.length)return void h("listに位置引数は指定できません");try{(0,s.qO)();let{page:e,count:n}=v(t);y(await (0,s.z9)(e,n),!!t["--machine-readable"])}catch(e){N(e)}}}async function A(e){let t=m(e,{"--page":Number,"--count":Number,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void h("取得するScrap slugまたはURLを指定してください");try{(0,s.qO)();let e=(0,l.Yb)(t._[0],(0,s.yJ)().origin),{page:n,count:r}=v(t);y(await (0,s.ic)(e,n,r),!!t["--machine-readable"])}catch(e){N(e)}}}async function k(e){let t=m(e,{"--title":String,"--closed":Boolean,"--open":Boolean,"--archived":Boolean,"--unarchived":Boolean,"--allow-others-post":Boolean,"--disallow-others-post":Boolean,"--unlisted":Boolean,"--public":Boolean,"--topics":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void h("更新するScrap slugまたはURLを指定してください");try{let e=t["--title"],n=S(t["--topics"]),r=b(t,"--closed","--open"),o=b(t,"--archived","--unarchived"),a=b(t,"--allow-others-post","--disallow-others-post"),i=b(t,"--unlisted","--public"),c=void 0!==e||void 0!==n,u=t["--notes-to-ai"];if(!c&&void 0!==u)throw new d.T0("--notes-to-ai はタイトルまたはtopicsを更新する場合にだけ指定できます");(0,s.qO)();let p=(0,l.Yb)(t._[0],(0,s.yJ)().origin);if(c){let r=(0,d.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]});if(!r.aiScanEnabled&&void 0!==u)throw new d.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");await z({title:e,topics:n},r,u)}y(await (0,s.lq)(p,{title:e,closed:r,archived:o,canOthersPost:a,unlisted:i,topicNames:n}),!!t["--machine-readable"])}catch(e){N(e)}}}async function O(e){let t=m(e,{"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(!t._.length||t._.length>100)return void h("取得するコメントslugを1件以上100件以下指定してください");try{(0,s.qO)();let e=t._.map(e=>(0,l.Oj)(e));y(await (0,s.eb)(e),!!t["--machine-readable"])}catch(e){N(e)}}}async function x(e){let t=m(e,{"--file":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(2!==t._.length)return void h("Scrap slugまたはURLと更新するコメントslugを指定してください");try{let e=t["--notes-to-ai"],n=(0,d.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]});if(!n.aiScanEnabled&&void 0!==e)throw new d.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");(0,s.qO)();let r=(0,l.Yb)(t._[0],(0,s.yJ)().origin),o=(0,l.Oj)(t._[1]),a=await (0,l._n)(t["--file"]);await z({body:a},n,e),y(await (0,s.mZ)({scrapSlug:r,commentSlug:o,bodyMarkdown:a}),!!t["--machine-readable"])}catch(e){N(e)}}}async function P(e){let t=m(e,{"--yes":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void h("削除するScrap slugまたはURLを指定してください");try{w(t["--yes"],"Scrapの削除"),(0,s.qO)();let e=(0,l.Yb)(t._[0],(0,s.yJ)().origin);c.R8("自分のアーカイブ済みScrapと、そのScrapに含まれるすべてのコメントを削除します"),await (0,s.bw)(e),t["--machine-readable"]?y({deleted:!0,scrap_slug:e},!0):c.kX("Scrapを削除しました")}catch(e){N(e)}}}async function R(e){let t=m(e,{"--yes":Boolean,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(2!==t._.length)return void h("Scrap slugまたはURLと削除するコメントslugを指定してください");try{w(t["--yes"],"コメントの削除"),(0,s.qO)();let e=(0,l.Yb)(t._[0],(0,s.yJ)().origin),n=(0,l.Oj)(t._[1]);c.R8("コメントに返信がある場合は、返信も削除します"),await (0,s.Ed)({scrapSlug:e,commentSlug:n}),t["--machine-readable"]?y({deleted:!0,scrap_slug:e,comment_slug:n},!0):c.kX("Scrapコメントを削除しました")}catch(e){N(e)}}}async function $(e){let t=m(e,{"--file":String,"--reply-to":String,"--dangerously-skip-secret-scan":Boolean,"--dangerously-skip-ai-scan":Boolean,"--notes-to-ai":String,"--machine-readable":Boolean,"--help":Boolean,"-h":"--help"});if(t){if(t["--help"])return console.log(i.ki);if(1!==t._.length)return void h("投稿先のScrap slugまたはURLを指定してください");try{let e=t["--notes-to-ai"],n=(0,d.s1)({dangerouslySkipSecretScan:!!t["--dangerously-skip-secret-scan"],dangerouslySkipAiScan:!!t["--dangerously-skip-ai-scan"]});if(!n.aiScanEnabled&&void 0!==e)throw new d.T0("--notes-to-ai はAI scanをスキップする場合には指定できません");(0,s.qO)();let r=(0,l.Yb)(t._[0],(0,s.yJ)().origin),o=t["--reply-to"]?(0,l.Oj)(t["--reply-to"]):void 0,a=await (0,l._n)(t["--file"]);await z({body:a},n,e);let i=await (0,s.ZK)({scrapSlug:r,bodyMarkdown:a,parentCommentSlug:o});g("Scrapへ投稿しました",i.url,!!t["--machine-readable"])}catch(e){N(e)}}}[u,p]=f.then?(await f)():f;let L=async(e=[])=>{let[t,...n]=e;return t&&"--help"!==t&&"-h"!==t?"create"===t?I(n):"list"===t?E(n):"get"===t?A(n):"update"===t?k(n):"comments"===t?O(n):"post"===t?$(n):"update-comment"===t?x(n):"delete"===t?P(n):"delete-comment"===t?R(n):void(h("Scrapのサブコマンドが不正です"),console.log(i.ki)):void console.log(i.ki)};n.d(t,{},{m:L}),r()}catch(e){r(e)}})},9128(e,t,n){n.a(e,async function(e,r){try{var o=n(7213),a=n(479),i=e([o]);o=(i.then?(await i)():i)[0],n.d(t,{},{m:()=>{let e=(0,o.gY)();e?console.log(e):a.z3("zenn-cliのバージョンを取得できませんでした")}}),r()}catch(e){r(e)}})},8766(e,t,n){n.a(e,async function(e,r){try{var o=n(3531),a=n.n(o),i=n(7089),c=n(479),l=n(7213),s=n(3498),u=n(5612),p=e([s,u,l]);async function d(e){let t=m(e);if(!t)return null;let{meta:n,bodyMarkdown:r}=t,o=await (0,s.default)(r,{embedOrigin:"https://embed.zenn.studio"}),a=(0,l.Le)(o),i=(0,u.parseToc)(a);return{...n,bodyHtml:a,toc:i}}function f(e){var t;let n,r,o=(t=e,n=(0,l.zj)("articles"),r="system"===t?(0,l.N0)(n):(0,l.dC)(n),null===r?(c.z3("プロジェクトルートの articles ディレクトリを取得できませんでした。`npx zenn init`を実行して作成してください"),[]):r.filter(e=>/\.md$/.test(e))).map(e=>e.replace(/\.md$/,""));return o?o.map(e=>{var t;let n;return t=e,(n=m(t))?n.meta:null}).filter(e=>null!==e):[]}function m(e){let t=(0,l.zj)(`articles/${e}.md`),n=(0,l.H9)(t);if(!n)return c.z3(`${t}の内容を取得できませんでした`),null;let{data:r,content:o}=a()(n,{engines:{yaml:e=>(0,i.load)(e,{schema:i.JSON_SCHEMA})}});return{meta:{...r,slug:e},bodyMarkdown:o}}[s,u,l]=p.then?(await p)():p,n.d(t,{m:()=>d,r:()=>f}),r()}catch(e){r(e)}})},4535(e,t,n){n.a(e,async function(e,r){try{var o=n(7089),a=n(6928),i=n.n(a),c=n(6045),l=n.n(c),s=n(3531),u=n.n(s),p=n(3498),d=n(5612),f=n(479),m=n(7213),h=e([p,d,m]);function g(e){let t=y(e);if(!t)return null;let n=b(e),r=(0,m.N0)(n),o=r?.find(e=>m.ey.map(e=>`cover${e}`).includes(e));if(!o)return t;let a=function(e){try{let t=(0,m.SV)(e);if(!t)return null;let n=(0,m.pG)(e),{width:r,height:o}=l()(t),a=(0,m.PT)(e);if(!a)return null;return{coverDataUrl:(0,m.JB)(t,a),coverFilesize:n,coverWidth:r,coverHeight:o}}catch(e){return null}}(i().join(n,o));return a?{...t,...a}:t}function y(e){let t=function(e){var t;let n,r,a,c,l=(t=e,n=b(t),r=i().join(n,"config.yaml"),a=i().join(n,"config.yml"),(c=(0,m.H9)(r)||(0,m.H9)(a))||f.z3(`${r}の内容を取得できませんでした`),c);if(!l)return null;try{let t=(0,o.load)(l);if("string"==typeof t||"number"==typeof t)throw"Invalid yaml format.";if(!t)return null;return{slug:e,...t,specifiedChapterSlugs:t.chapters,chapterOrderedByConfig:!!t.chapters?.length}}catch(t){return console.log(t),f.z3(`config.yamlの表記に誤りがあります(books/${e})`),null}}(e);if(!t)return null;let{specifiedChapterSlugs:n}=t,r=`books/${e}/config.yaml`;if(n){if(!Array.isArray(n))return f.z3(`${r}の chapters にはslugの配列のみを指定できます`),null;if(n.some(e=>"string"!=typeof e))return f.z3(`${r}の chapters には文字列のslugのみを含めることができます。`),null;if(n.some(e=>/ - /.test(e)))return f.z3(`${r}の chapters には一次元配列のみを指定できます。ネストはできません`),null}return t}function w(e){var t;let n,r;return(t=e,n=(0,m.zj)("books"),r="system"===t?(0,m.If)(n):(0,m.oS)(n),null===r?[]:r.filter(e=>!/^\./.test(e))).map(e=>y(e)).filter(e=>null!==e)}async function _(e,t){let n=v(e,t);if(!n)return null;let{meta:r,bodyMarkdown:o}=n,a=await (0,p.default)(o,{embedOrigin:"https://embed.zenn.studio"}),i=(0,m.Le)(a),c=(0,d.parseToc)(i);return{...r,bodyHtml:i,toc:c}}function S(e){var t;let n,r;return(t=e.slug,n=(0,m.zj)(`books/${t}`),r=(0,m.N0)(n),null===r?(f.z3(`${n}を取得できませんでした`),[]):r.filter(e=>/\.md$/.test(e))).map(t=>{let n;return(n=v(e,t))?n.meta:null}).filter(e=>null!==e).sort((e,t)=>Number(null===e.position?999:e.position)-Number(null===t.position?999:t.position))}function b(e){return(0,m.zj)(`books/${e}`)}function v(e,t){var n,r;let o,a,{position:i,slug:c}=function(e,t){let n=t.replace(/\.md$/,"");if(e.specifiedChapterSlugs?.length){let t=e.specifiedChapterSlugs.findIndex(e=>e===n);return{slug:n,position:t>=0?t:null}}let r=n.split(".");if(2!==r.length)return{position:null,slug:n};{let e=Number(r[0]),t=r[1];return{position:e,slug:t}}}(e,t),l=(n=e.slug,r=t,o=(0,m.zj)(`books/${n}/${r}`),(a=(0,m.H9)(o))||f.z3(`${o}の内容を取得できませんでした`),a);if(!l)return null;let{data:s,content:p}=u()(l);return{meta:{...s,position:i,slug:c,filename:t},bodyMarkdown:p}}[p,d,m]=h.then?(await h)():h,n.d(t,{ZT:()=>g,eD:()=>y,hn:()=>_,qH:()=>w,yx:()=>S}),r()}catch(e){r(e)}})},8683(e,t,n){var r=n(1099);function o(){return"true"===(0,r.A)("ZENN_CLI_EXPERIMENTAL_IMAGE_API")}n.d(t,{H:()=>o})},7213(e,t,n){n.a(e,async function(e,r){try{var o=n(6928),a=n.n(o),i=n(4652),c=n.n(i),l=n(6982),s=n.n(l),u=n(166),p=n(4217),d=n(857),f=n(479),m=n(7250),h=n.n(m),g=n(870),y=n(2595),w=e([u,g,y]);function _(){return s().randomBytes(7).toString("hex")}function S(){return h().version}async function b(){let e=await (0,u.default)("https://registry.npmjs.org/zenn-cli/latest");return(await e.json()).version}function v(e){return/\.\./.test(e)&&(f.z3("取得するファイル/ディレクトリの名前に不正な文字列が含まれているため処理を終了します"),process.exit(1)),a().join(process.cwd(),e.replace(/^\//,""))}function N(e){try{return c().readFileSync(e,"utf8")}catch(e){return null}}function z(e){try{return c().readFileSync(e)}catch(e){return null}}function I(e){try{return c().readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(({name:e})=>e)}catch(e){return null}}function E(e){let t=I(e);return t?t.map(t=>({name:t,time:c().statSync(a().join(e,t)).ctime.getTime()})).sort((e,t)=>t.time-e.time).map(({name:e})=>e):t}function A(e){try{return c().readdirSync(e)}catch(e){return null}}function k(e){let t=A(e);return t?t.map(t=>({name:t,time:c().statSync(a().join(e,t)).ctime.getTime()})).sort((e,t)=>t.time-e.time).map(({name:e})=>e):t}function O(e){return c().statSync(e).size}[u,g,y]=w.then?(await w)():w;let L=[{ext:".png",type:"image/png"},{ext:".jpg",type:"image/jpeg"},{ext:".jpeg",type:"image/jpeg"},{ext:".webp",type:"image/webp"},{ext:".gif",type:"image/gif"}],C=L.map(({ext:e})=>e);function x(e){let t=L.find(({ext:t})=>e.endsWith(t));return t?t.type:null}function P(e,t){return`data:${t};base64,${e.toString("base64")}`}function R(e,t){c().outputFileSync(e,t,{flag:"wx"})}function $(e){let t='data-body-error style="color: var(--c-error); font-weight: 700"',n=p.load(e);return n("img").map((e,r)=>{let o=r.attribs.src;if(!o||function(e){try{return new URL(e),!0}catch{return!1}}(o))return;if(!a().isAbsolute(o)){n(r).before(`<p ${t}><code>${o}</code>を表示できません。ローカルの画像を読み込むには相対パスではなく<code>/images/example.png</code>のように<code>/images/</code>から始まるパスを指定してください。</p>`),n(r).remove();return}if(!C.some(e=>o.endsWith(e))){n(r).before(`<p ${t}><code>${o}</code>を表示できません。対応している画像の拡張子は <code>${C.join(",")}</code> です。</p>`),n(r).remove();return}let i=decodeURIComponent(o),l=v(i);if(!c().existsSync(l)){n(r).before(`<p ${t}><code>${o}</code>にファイルが存在しません。</p>`),n(r).remove();return}let s=c().statSync(l).size;if(s>3145728){n(r).before(`<p ${t}><code>${o}</code>のファイルサイズ(${Math.trunc(100*s/1024/1024)/100} MB)はアップロード可能なサイズを超えています。ファイルサイズは3MB以内にしてください。</p>`),n(r).remove();return}}),n.html()}let U=async e=>{let t=await (0,g.detect)(),n=t?.agent??"npm",r=(0,y.resolveCommand)(n,"execute-local",e);if(!r)return`npx ${e.join(" ")}`;let{command:o,args:a}=r;return`${o} ${a.join(" ")}`};n.d(t,{H9:()=>N,If:()=>I,JB:()=>P,Le:()=>$,N0:()=>A,PT:()=>x,SV:()=>z,dC:()=>k,dM:()=>b,gY:()=>S,oS:()=>E,pG:()=>O,tN:()=>R,z9:()=>_,zj:()=>v},{cK:e=>{let t="localhost",n=e;return e&&("0.0.0.0"!==e&&"::"!==e?t=e:n=(()=>{let e=(0,d.networkInterfaces)();for(let t of Object.values(e).flatMap(e=>e??[]))if("IPv4"===t.family&&"127.0.0.1"!==t.address)return t.address})()),{name:t,host:n}},ey:C,l$:U}),r()}catch(e){r(e)}})},3320(e,t,n){function r(){return(e,t,n)=>{if("GET"!==e.method&&"HEAD"!==e.method||e.path.startsWith("/api/")||e.path.startsWith("/images/")||/\.[^/]+$/.test(e.path)||!e.accepts("html"))return n();e.url="/index.html",n()}}n.d(t,{N:()=>r})},479(e,t,n){var r=n(1144),o=n.n(r);function a(e){console.error(o().red("error:"),e)}function i(e){console.log(o().green("success:"),e)}function c(e){console.log("created:",o().green(e))}function l(e){console.warn(o().yellow("warn:"),e)}n.d(t,{R8:()=>l,kX:()=>i,z3:()=>a,zu:()=>c})},5697(e,t,n){var r=n(1099);let o=`
|
|
24
24
|
Command:
|
|
25
25
|
zenn init コンテンツ管理用のディレクトリを作成. 初回のみ実行
|
|
26
26
|
zenn preview コンテンツをブラウザでプレビュー
|
|
@@ -28,12 +28,13 @@ Command:
|
|
|
28
28
|
zenn new:book 新しい本を追加
|
|
29
29
|
zenn list:articles 記事の一覧を表示
|
|
30
30
|
zenn list:books 本の一覧を表示
|
|
31
|
+
zenn scrap Public API経由でScrapを操作
|
|
31
32
|
zenn --version, -v zenn-cliのバージョンを表示
|
|
32
33
|
zenn --help, -h ヘルプ
|
|
33
34
|
|
|
34
35
|
👇 詳細
|
|
35
36
|
https://zenn.dev/zenn/articles/zenn-cli-guide
|
|
36
|
-
`;function a(){let e=o;return"true"===(0,r.A)("
|
|
37
|
+
`;function a(){let e=o;return"true"===(0,r.A)("ZENN_CLI_EXPERIMENTAL_IMAGE_API")&&(e=e.replace(" zenn list:books 本の一覧を表示"," zenn list:books 本の一覧を表示\n zenn image Public API経由で画像をアップロード(実験的機能)")),e}let i=`
|
|
37
38
|
Command:
|
|
38
39
|
zenn init コンテンツ管理用のディレクトリを作成. 初回のみ実行
|
|
39
40
|
|
|
@@ -180,7 +181,6 @@ Options:
|
|
|
180
181
|
|
|
181
182
|
Environment:
|
|
182
183
|
ZENN_API_KEY 必要なscrap:readまたはscrap:writeスコープを持つAPIキー
|
|
183
|
-
ZENN_CLI_EXPERIMENTAL_SCRAP_API=true 実験的なScrap投稿機能を有効化
|
|
184
184
|
ZENN_API_BASE_URL 開発・テスト用のPublic APIベースURL(任意)
|
|
185
185
|
ZENN_CLI_FORCE_SAFE dangerousなscanスキップを禁止する場合はtrue
|
|
186
186
|
ZENN_CLI_FORCE_UNLISTED Scrap作成を常に限定公開にする場合はtrue
|
|
@@ -194,7 +194,7 @@ Environment:
|
|
|
194
194
|
FIREWORKS_API_KEY Fireworks利用時のAPIキー
|
|
195
195
|
|
|
196
196
|
Default AI models:
|
|
197
|
-
openai: gpt-
|
|
197
|
+
openai: gpt-6-luna
|
|
198
198
|
fireworks: ZENN_CLI_AI_MODEL の指定が必須
|
|
199
199
|
|
|
200
200
|
AI scan:
|
|
@@ -278,4 +278,4 @@ ${i().cyan("npm install zenn-cli@latest")} で更新してください`,{padding
|
|
|
278
278
|
事業情報などが対象です。
|
|
279
279
|
`.trim();function p(e){let t=(0,l.A)(e)?.trim();if(!t)throw new s.T0(`${e} を設定してください`);return t}let N={low:1,medium:2,high:3,critical:4};function d(e,t){return e.replace(/\p{Cc}/gu," ").trim().slice(0,t)}function f(e){return`[${e.level}] ${d(e.finding,160)}: ${d(e.detail,500)}`}async function m(e,t,n){let r,{model:c,providerOptions:l}=function(e){var t;if("openai"===e.provider){let t=(0,a.createOpenAI)({apiKey:p("OPENAI_API_KEY"),baseURL:"https://api.openai.com/v1"}),n={..."none"===e.effort?{}:{reasoningEffort:e.effort},store:!1,strictJsonSchema:!0};return{model:t(e.model),providerOptions:{openai:n}}}return{model:(0,i.createFireworks)({apiKey:p("FIREWORKS_API_KEY"),baseURL:"https://api.fireworks.ai/inference/v1"})(e.model),providerOptions:{fireworks:(t=e.effort,"none"===t?{}:{thinking:{type:"enabled",budgetTokens:({low:1024,medium:2048,high:4096})[t]}})}}}(t);try{let a=await (0,o.generateText)({model:c,system:b,prompt:JSON.stringify({detectionPolicy:[v,t.customPrompt].filter(Boolean).join("\n\n"),userNotes:n||null,scrapContent:e}),output:o.Output.object({schema:S}),providerOptions:l,maxOutputTokens:8192,maxRetries:0,abortSignal:AbortSignal.timeout(3e4),experimental_telemetry:{isEnabled:!1,recordInputs:!1,recordOutputs:!1},telemetry:{isEnabled:!1,recordInputs:!1,recordOutputs:!1}});r=y.parse(a.output)}catch{throw new w("AIスキャンに失敗しました。投稿せずに終了します")}let s=r.findings.filter(e=>N[e.level]>=N[t.failureThreshold]);if(s.length>0){let e=s.sort((e,t)=>N[t.level]-N[e.level]).map(f).join("\n");throw new _(`AIスキャンで${t.failureThreshold}以上の検知事項が見つかりました。投稿せずに終了します。
|
|
280
280
|
${e}
|
|
281
|
-
機密情報をマスクするなど送信内容を変更してから、再度送信してください。判定に補足が必要な場合は --notes-to-ai <備考> を指定できます`)}return r.findings.sort((e,t)=>N[t.level]-N[e.level])}n.d(t,{Sm:()=>m,Y6:()=>f,nV:()=>w}),r()}catch(e){r(e)}})},4987(e,t,n){n.d(t,{Q5:()=>a,Oj:()=>i,Yb:()=>s,_n:()=>l});let r=require("fs"),o=/^[a-z0-9_-]{12,50}$/;class a extends Error{}function i(e){if(!e||!o.test(e))throw new a("返信先コメントのslugが不正です");return e}async function c(e){let t=[],n=0;for await(let r of e){let e=Buffer.isBuffer(r)?r:Buffer.from(r);if((n+=e.byteLength)>1048576)throw new a("本文は1MB以下にしてください");t.push(e)}let r=Buffer.concat(t).toString("utf8");if(!r.trim())throw new a("本文を入力してください");return r}async function l(e){if(!e)throw new a("--file を指定してください");try{return await c("-"===e?process.stdin:(0,r.createReadStream)(e))}catch(e){if(e instanceof a)throw e;throw new a("本文ファイルを読み込めませんでした")}}function s(e,t){let n;if(o.test(e))return e;try{n=new URL(e)}catch{throw new a("ScrapのslugまたはURLが不正です")}let r=new Set(["https://zenn.dev"]);t&&r.add(t);let i=n.pathname.match(/^\/[^/]+\/scraps\/([a-z0-9_-]{12,50})$/);if("https:"!==n.protocol&&"http:"!==n.protocol||!r.has(n.origin)||n.username||n.password||!i)throw new a("ZennのScrap URLまたはslugを指定してください");return i[1]}},2932(e,t,n){var r=n(1569),o=n(1099);class a extends Error{}let i=r.z.enum(["true","false"]),c=r.z.enum(["openai","fireworks"]),l=r.z.string().trim().min(1),s=r.z.enum(["none","low","medium","high"]),u=r.z.enum(["low","medium","high","critical"]),p=r.z.string().trim().min(1);function d(e,t){let n=(0,o.A)(e);if(void 0===n)return t;let r=i.safeParse(n);if(!r.success)throw new a(`${e} に true または false を設定してください`);return"true"===r.data}function f(e,t,n){let r=e.safeParse(t);if(!r.success)throw new a(n);return r.data}function m(e){let t={secretScanEnabled:!e.dangerouslySkipSecretScan,aiScanEnabled:d("ZENN_CLI_AI_SCAN",!1)&&!e.dangerouslySkipAiScan,secretScanSkipped:e.dangerouslySkipSecretScan,aiScanSkipped:e.dangerouslySkipAiScan,forceSafe:d("ZENN_CLI_FORCE_SAFE",!1)};if(t.forceSafe&&(!t.secretScanEnabled||!t.aiScanEnabled))throw new a("ZENN_CLI_FORCE_SAFE=true の場合はSecret scanとZENN_CLI_AI_SCAN=true が必要で、scanをスキップできません");return t}function h(){return d("ZENN_CLI_FORCE_UNLISTED",!1)}function g(){let e=f(c,(0,o.A)("ZENN_CLI_AI_PROVIDER"),"ZENN_CLI_AI_PROVIDER に openai または fireworks を設定してください"),t=(0,o.A)("ZENN_CLI_AI_MODEL"),n=f(s,(0,o.A)("ZENN_CLI_AI_EFFORT")||"medium","ZENN_CLI_AI_EFFORT に none、low、medium、high のいずれかを設定してください"),r=f(u,(0,o.A)("ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD")||"high","ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD に low、medium、high、critical のいずれかを設定してください"),i=(0,o.A)("ZENN_CLI_AI_SCAN_PROMPT"),d=void 0===t?"openai"===e?"gpt-5.6-luna":void 0:f(l,t,"ZENN_CLI_AI_MODEL を設定してください");if(!d)throw new a("ZENN_CLI_AI_MODEL を設定してください");return{provider:e,model:d,effort:n,failureThreshold:r,...void 0===i?{}:{customPrompt:f(p,i,"ZENN_CLI_AI_SCAN_PROMPT を空にできません")}}}n.d(t,{T0:()=>a,Uh:()=>g,iu:()=>h,s1:()=>m})},6951(e,t,n){n.a(e,async function(e,r){try{var o=n(7585),a=e([o]);o=(a.then?(await a)():a)[0];class c extends Error{}let l={rules:[{id:"@secretlint/secretlint-rule-preset-recommend"}]};async function i(e){let t=await (0,o.createEngine)({configFileJSON:l,formatter:"compact",color:!1,maskSecrets:!0}),n=[e.title,e.body,e.notes,e.aiPrompt].filter(e=>!!e).join("\n\n");if(!(await t.executeOnContent({content:n,filePath:"scrap.md"})).ok)throw new c("タイトル、本文、notes-to-ai、AI scan promptのいずれかにシークレットの可能性がある値が含まれています。削除してから再実行してください")}n.d(t,{G:()=>c,K:()=>i}),r()}catch(e){r(e)}})},6414(e,t,n){n.a(e,async function(e,r){try{var o=n(8611),a=n(5086),i=n(9748),c=n(1367),l=n(7213),s=e([l,c,i]);async function u(e){let{app:t,port:n,hostname:r,shouldOpen:a}=e,i=(0,o.createServer)(t);return new Promise((t,o)=>{i.listen(n,r).once("listening",function(){if(process.env.TS_NODE_DEV)console.log("\uD83D\uDE80 Server is ready.");else{let{name:e,host:t}=(0,l.cK)(r);console.log(`👀 Preview: http://${e}:${n}`),t&&console.log(`🌏 NetWork: http://${t}:${n}`)}a&&(0,c.default)(`http://localhost:${n}`),t(i)}).once("error",async function(r){if(r.message.includes("EADDRINUSE")){console.log(`💡 ポート${n}は既に使用されています。別のポートで起動中…`);let r=await u({...e,port:n+1});t(r)}else o(r)})})}function p(e,t){let n=new a.WebSocketServer({server:e}),r=i.default.watch(t);r.on("change",()=>{n.clients.forEach(e=>e.send("Should refresh"))}),process.on("SIGINT",()=>{n.close(),r.close(),process.exit()})}[l,c,i]=s.then?(await s)():s,n.d(t,{U:()=>u,j:()=>p}),r()}catch(e){r(e)}})},1501(e,t,n){var r=n(1099);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a extends Error{constructor(e,t,n){super(n??function(e){switch(e){case"configuration":return"ZENN_API_KEY を環境変数に設定してください";case"authentication":return"APIキーの発行状態・期限・アカウント状態を確認してください";case"authorization":return"APIキーのスコープ、または対象リソースの操作条件を確認してください";case"not-found":return"この環境またはアカウントではPublic APIを利用できないか、対象リソースを利用できません";case"validation":return"リクエスト値または画像ファイルを確認してください";case"conflict":return"本で使用中の画像は削除できません";case"rate-limit":return"レート制限に達しました。しばらく待ってから再実行してください";case"compatibility":return"Public APIの応答形式に互換性がありません";case"unknown-result":return"リクエスト結果を確認できませんでした。重複投稿を避けるため自動再試行していません";case"network":return"通信に失敗しました。リクエスト結果が不明なため自動再試行していません"}}(e)),o(this,"kind",void 0),o(this,"code",void 0),this.kind=e,this.code=t}}function i(){let e=(0,r.A)("ZENN_API_KEY")?.trim();if(!e)throw new a("configuration");return e}function c(){i()}function l(){let e,t=(0,r.A)("ZENN_API_BASE_URL")?.trim();if(!t)return new URL("https://zenn.dev");try{e=new URL(t)}catch{throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です")}let n="http:"===e.protocol&&"localhost"===e.hostname;if("https:"!==e.protocol&&!n||e.username||e.password||"/"!==e.pathname||e.search||e.hash)throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です");return e}async function s(e){try{return await e.json()}catch{return}}async function u(e,t,n){var r;let o,c,u,p=(u="localhost"===(c=l()).hostname?"/public-api/v0":"/api/public-api/v0",new URL(`${u}${t}`,c));try{o=await fetch(p,{method:e,redirect:"error",signal:AbortSignal.timeout(15e3),headers:{Authorization:`Bearer ${i()}`,...n.body&&!(n.body instanceof FormData)?{"Content-Type":"application/json"}:{}},...n.body?{body:n.body instanceof FormData?n.body:JSON.stringify(n.body)}:{}})}catch{throw new a(n.resultUnknownOnFailure?"unknown-result":"network")}let d=await s(o);if(!o.ok){let e=d?.error?.code,t="string"==typeof e&&/^[a-z0-9_]+$/.test(e)?e:void 0;throw new a(400===(r=o.status)?"validation":401===r?"authentication":403===r?"authorization":404===r?"not-found":422===r?"validation":409===r?"conflict":429===r?"rate-limit":r>=500?"unknown-result":"network",t)}if(o.status!==n.expectedStatus)throw new a("compatibility");if(!1!==n.expectsJson){if(!g(d))throw new a("compatibility");return d}}async function p(e){return u("GET",e,{expectedStatus:200,resultUnknownOnFailure:!1})}async function d(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}async function f(e,t){return u("PATCH",e,{body:t,expectedStatus:200,resultUnknownOnFailure:!0})}async function m(e){await u("DELETE",e,{expectedStatus:204,resultUnknownOnFailure:!0,expectsJson:!1})}async function h(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}function g(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function y(e,t){if(!Array.isArray(e[t]))throw new a("compatibility")}function w(e,t){if(!g(e[t]))throw new a("compatibility")}function _(e){let t=e.next_page;if(null!==t&&("number"!=typeof t||!Number.isInteger(t)))throw new a("compatibility")}function S(e,t){let n=new URLSearchParams;void 0!==e&&n.set("page",String(e)),void 0!==t&&n.set("count",String(t));let r=n.toString();return r?`?${r}`:""}function b(e){if("string"!=typeof e||!e.startsWith("/"))throw new a("compatibility");let t=l(),n=new URL(e,t);if(n.origin!==t.origin)throw new a("compatibility");return n.toString()}async function v(e){let t={title:e.title,body_markdown:e.bodyMarkdown,...void 0===e.closed?{}:{closed:e.closed},...void 0===e.archived?{}:{archived:e.archived},...void 0===e.canOthersPost?{}:{can_others_post:e.canOthersPost},...void 0===e.unlisted?{}:{unlisted:e.unlisted},...void 0===e.topicNames?{}:{topic_names:e.topicNames}},n=await d("/scraps",t);if("string"!=typeof n.scrap?.slug)throw new a("compatibility");return{url:b(n.scrap.path)}}async function N(e){let t={body_markdown:e.bodyMarkdown};e.parentCommentSlug&&(t.parent_comment_slug=e.parentCommentSlug);let n=await d(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments`,t);return{url:b(n.comment?.path)}}async function I(e,t){let n=await p(`/scraps${S(e,t)}`);return y(n,"scraps"),_(n),n}async function E(e,t,n){let r=await p(`/scraps/${encodeURIComponent(e)}${S(t,n)}`);return w(r,"scrap"),y(r,"comments"),_(r),r}async function z(e,t){let n={...void 0===t.title?{}:{title:t.title},...void 0===t.closed?{}:{closed:t.closed},...void 0===t.archived?{}:{archived:t.archived},...void 0===t.canOthersPost?{}:{can_others_post:t.canOthersPost},...void 0===t.unlisted?{}:{unlisted:t.unlisted},...void 0===t.topicNames?{}:{topic_names:t.topicNames}};if(!Object.keys(n).length)throw new a("configuration",void 0,"更新する項目を指定してください");let r=await f(`/scraps/${encodeURIComponent(e)}`,n);return w(r,"scrap"),r}async function A(e){if(e.length<1||e.length>100||e.some(e=>!e.trim()))throw new a("configuration",void 0,"コメントslugを1件以上100件以下指定してください");let t=new URLSearchParams;e.forEach(e=>t.append("slugs[]",e));let n=await p(`/comments?${t.toString()}`);return y(n,"comments"),y(n,"not_found_slugs"),n}async function k(e){let t=await f(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`,{body_markdown:e.bodyMarkdown});return w(t,"comment"),t}async function P(e){await m(`/scraps/${encodeURIComponent(e)}`)}async function O(e){await m(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`)}async function x(e){let t=new FormData,n=new Uint8Array(e.bytes.byteLength);return n.set(e.bytes),t.append("file",new Blob([n.buffer],{type:e.contentType}),e.filename),{url:function(e){let t;if("string"!=typeof e)throw new a("compatibility");try{t=new URL(e)}catch{throw new a("compatibility")}let n="http:"===t.protocol&&"localhost"===t.hostname;if("https:"!==t.protocol&&!n||t.username||t.password)throw new a("compatibility");return t.toString()}((await h("/images",t)).image_url)}}async function R(e,t){let n=await p(`/images${S(e,t)}`);return y(n,"images"),_(n),n}async function L(e){await m(`/images/${e}`)}n.d(t,{Ed:()=>O,RY:()=>R,V6:()=>x,WL:()=>v,ZK:()=>N,bw:()=>P,eb:()=>A,ic:()=>E,lq:()=>z,mZ:()=>k,qO:()=>c,vS:()=>L,vu:()=>a,yJ:()=>l,z9:()=>I})},7116(e,t,n){n.a(e,async function(e,t){try{var r=n(8456),o=n.n(r),a=n(4972),i=e([a]);a=(i.then?(await i)():i)[0];let c=o()({},{permissive:!0}),l=c._[0]||"preview",s=c._.slice(1);(0,a.m)(l,s,{canNotifyUpdate:!0}),t()}catch(e){t(e)}})},7250(e){e.exports=require("../../package.json")},8456(e){e.exports=require("arg")},4217(e){e.exports=require("cheerio")},3672(e){e.exports=require("colors")},1144(e){e.exports=require("colors/safe")},7252(e){e.exports=require("express")},4652(e){e.exports=require("fs-extra")},3531(e){e.exports=require("gray-matter")},6045(e){e.exports=require("image-size")},7089(e){e.exports=require("js-yaml")},5086(e){e.exports=require("ws")},1569(e){e.exports=require("zod")},595(e){e.exports=import("@ai-sdk/fireworks").then(function(e){return e})},7117(e){e.exports=import("@ai-sdk/openai").then(function(e){return e})},7585(e){e.exports=import("@secretlint/node").then(function(e){return e})},9470(e){e.exports=import("ai").then(function(e){return e})},6551(e){e.exports=import("boxen").then(function(e){return e})},9748(e){e.exports=import("chokidar").then(function(e){return e})},4926(e){e.exports=import("configstore").then(function(e){return e})},166(e){e.exports=import("node-fetch").then(function(e){return e})},1367(e){e.exports=import("open").then(function(e){return e})},2595(e){e.exports=import("package-manager-detector/commands").then(function(e){return e})},870(e){e.exports=import("package-manager-detector/detect").then(function(e){return e})},3498(e){e.exports=import("zenn-markdown-html").then(function(e){return e})},5612(e){e.exports=import("zenn-markdown-html/utils").then(function(e){return e})},6982(e){e.exports=require("crypto")},8611(e){e.exports=require("http")},857(e){e.exports=require("os")},6928(e){e.exports=require("path")}},l={};function s(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}};return c[e](n,n.exports,s),n.exports}s.c=l,t=(e="function"==typeof Symbol)?Symbol("rspack queues"):"__rspack_queues",n=s.aE=e?Symbol("rspack exports"):"__webpack_exports__",r=e?Symbol("rspack error"):"__rspack_error",o=e?Symbol("rspack done"):"__rspack_done",a=s.zS=e?Symbol("rspack defer"):"__rspack_defer",s.zT=e=>{if(e.some(e=>{var t=l[e];return!t||!1===t[o]}))return{then:(t,n)=>Promise.all(e.map(s)).then(t,n)}},i=e=>{e&&e.d<1&&(e.d=1,e.forEach(e=>e.r--),e.forEach(e=>e.r--?e.r++:e()))},s.a=(e,c,l)=>{l&&((u=[]).d=-1);var u,p,d,f,m=new Set,h=e.exports,g=new Promise((e,t)=>{f=t,d=e});g[n]=h,g[t]=e=>{u&&e(u),m.forEach(e),g.catch(()=>{})},e.exports=g,c(e=>{p=e.map(e=>{if(null!==e&&"object"==typeof e){if(!e[t]&&e[a]){var o=s.zT(e[a]);if(!o)return e;var c=e;e={then(e,t){o.then(()=>e(c),t)}}}if(e[t])return e;if(e.then){var l=[];l.d=0,e.then(e=>{u[n]=e,i(l)},e=>{u[r]=e,i(l)});var u={};return u[a]=!1,u[t]=e=>e(l),u}}var p={};return p[t]=()=>{},p[n]=e,p});var o,c=()=>p.map(e=>{if(e[a])return e;if(e[r])throw e[r];return e[n]}),l=new Promise(e=>{(o=()=>e(c)).r=0;var n=e=>e!==u&&!m.has(e)&&(m.add(e),e&&!e.d&&(o.r++,e.push(o)));p.map(e=>e[a]||e[t](n))});return o.r?l:c()},e=>(e?f(g[r]=e):d(h),i(u),g[o]=!0)),u&&u.d<0&&(u.d=0)},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s(7116)})();
|
|
281
|
+
機密情報をマスクするなど送信内容を変更してから、再度送信してください。判定に補足が必要な場合は --notes-to-ai <備考> を指定できます`)}return r.findings.sort((e,t)=>N[t.level]-N[e.level])}n.d(t,{Sm:()=>m,Y6:()=>f,nV:()=>w}),r()}catch(e){r(e)}})},4987(e,t,n){n.d(t,{Q5:()=>a,Oj:()=>i,Yb:()=>s,_n:()=>l});let r=require("fs"),o=/^[a-z0-9_-]{12,50}$/;class a extends Error{}function i(e){if(!e||!o.test(e))throw new a("返信先コメントのslugが不正です");return e}async function c(e){let t=[],n=0;for await(let r of e){let e=Buffer.isBuffer(r)?r:Buffer.from(r);if((n+=e.byteLength)>1048576)throw new a("本文は1MB以下にしてください");t.push(e)}let r=Buffer.concat(t).toString("utf8");if(!r.trim())throw new a("本文を入力してください");return r}async function l(e){if(!e)throw new a("--file を指定してください");try{return await c("-"===e?process.stdin:(0,r.createReadStream)(e))}catch(e){if(e instanceof a)throw e;throw new a("本文ファイルを読み込めませんでした")}}function s(e,t){let n;if(o.test(e))return e;try{n=new URL(e)}catch{throw new a("ScrapのslugまたはURLが不正です")}let r=new Set(["https://zenn.dev"]);t&&r.add(t);let i=n.pathname.match(/^\/[^/]+\/scraps\/([a-z0-9_-]{12,50})$/);if("https:"!==n.protocol&&"http:"!==n.protocol||!r.has(n.origin)||n.username||n.password||!i)throw new a("ZennのScrap URLまたはslugを指定してください");return i[1]}},2932(e,t,n){var r=n(1569),o=n(1099);class a extends Error{}let i=r.z.enum(["true","false"]),c=r.z.enum(["openai","fireworks"]),l=r.z.string().trim().min(1),s=r.z.enum(["none","low","medium","high"]),u=r.z.enum(["low","medium","high","critical"]),p=r.z.string().trim().min(1);function d(e,t){let n=(0,o.A)(e);if(void 0===n)return t;let r=i.safeParse(n);if(!r.success)throw new a(`${e} に true または false を設定してください`);return"true"===r.data}function f(e,t,n){let r=e.safeParse(t);if(!r.success)throw new a(n);return r.data}function m(e){let t={secretScanEnabled:!e.dangerouslySkipSecretScan,aiScanEnabled:d("ZENN_CLI_AI_SCAN",!1)&&!e.dangerouslySkipAiScan,secretScanSkipped:e.dangerouslySkipSecretScan,aiScanSkipped:e.dangerouslySkipAiScan,forceSafe:d("ZENN_CLI_FORCE_SAFE",!1)};if(t.forceSafe&&(!t.secretScanEnabled||!t.aiScanEnabled))throw new a("ZENN_CLI_FORCE_SAFE=true の場合はSecret scanとZENN_CLI_AI_SCAN=true が必要で、scanをスキップできません");return t}function h(){return d("ZENN_CLI_FORCE_UNLISTED",!1)}function g(){let e=f(c,(0,o.A)("ZENN_CLI_AI_PROVIDER"),"ZENN_CLI_AI_PROVIDER に openai または fireworks を設定してください"),t=(0,o.A)("ZENN_CLI_AI_MODEL"),n=f(s,(0,o.A)("ZENN_CLI_AI_EFFORT")||"medium","ZENN_CLI_AI_EFFORT に none、low、medium、high のいずれかを設定してください"),r=f(u,(0,o.A)("ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD")||"high","ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD に low、medium、high、critical のいずれかを設定してください"),i=(0,o.A)("ZENN_CLI_AI_SCAN_PROMPT"),d=void 0===t?"openai"===e?"gpt-6-luna":void 0:f(l,t,"ZENN_CLI_AI_MODEL を設定してください");if(!d)throw new a("ZENN_CLI_AI_MODEL を設定してください");return{provider:e,model:d,effort:n,failureThreshold:r,...void 0===i?{}:{customPrompt:f(p,i,"ZENN_CLI_AI_SCAN_PROMPT を空にできません")}}}n.d(t,{T0:()=>a,Uh:()=>g,iu:()=>h,s1:()=>m})},6951(e,t,n){n.a(e,async function(e,r){try{var o=n(7585),a=e([o]);o=(a.then?(await a)():a)[0];class c extends Error{}let l={rules:[{id:"@secretlint/secretlint-rule-preset-recommend"}]};async function i(e){let t=await (0,o.createEngine)({configFileJSON:l,formatter:"compact",color:!1,maskSecrets:!0}),n=[e.title,e.body,e.notes,e.aiPrompt].filter(e=>!!e).join("\n\n");if(!(await t.executeOnContent({content:n,filePath:"scrap.md"})).ok)throw new c("タイトル、本文、notes-to-ai、AI scan promptのいずれかにシークレットの可能性がある値が含まれています。削除してから再実行してください")}n.d(t,{G:()=>c,K:()=>i}),r()}catch(e){r(e)}})},6414(e,t,n){n.a(e,async function(e,r){try{var o=n(8611),a=n(5086),i=n(9748),c=n(1367),l=n(7213),s=e([l,c,i]);async function u(e){let{app:t,port:n,hostname:r,shouldOpen:a}=e,i=(0,o.createServer)(t);return new Promise((t,o)=>{i.listen(n,r).once("listening",function(){if(process.env.TS_NODE_DEV)console.log("\uD83D\uDE80 Server is ready.");else{let{name:e,host:t}=(0,l.cK)(r);console.log(`👀 Preview: http://${e}:${n}`),t&&console.log(`🌏 NetWork: http://${t}:${n}`)}a&&(0,c.default)(`http://localhost:${n}`),t(i)}).once("error",async function(r){if(r.message.includes("EADDRINUSE")){console.log(`💡 ポート${n}は既に使用されています。別のポートで起動中…`);let r=await u({...e,port:n+1});t(r)}else o(r)})})}function p(e,t){let n=new a.WebSocketServer({server:e}),r=i.default.watch(t);r.on("change",()=>{n.clients.forEach(e=>e.send("Should refresh"))}),process.on("SIGINT",()=>{n.close(),r.close(),process.exit()})}[l,c,i]=s.then?(await s)():s,n.d(t,{U:()=>u,j:()=>p}),r()}catch(e){r(e)}})},1501(e,t,n){var r=n(1099);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a extends Error{constructor(e,t,n){super(n??function(e){switch(e){case"configuration":return"ZENN_API_KEY を環境変数に設定してください";case"authentication":return"APIキーの発行状態・期限・アカウント状態を確認してください";case"authorization":return"APIキーのスコープ、または対象リソースの操作条件を確認してください";case"not-found":return"この環境またはアカウントではPublic APIを利用できないか、対象リソースを利用できません";case"validation":return"リクエスト値または画像ファイルを確認してください";case"conflict":return"本で使用中の画像は削除できません";case"rate-limit":return"レート制限に達しました。しばらく待ってから再実行してください";case"compatibility":return"Public APIの応答形式に互換性がありません";case"unknown-result":return"リクエスト結果を確認できませんでした。重複投稿を避けるため自動再試行していません";case"network":return"通信に失敗しました。リクエスト結果が不明なため自動再試行していません"}}(e)),o(this,"kind",void 0),o(this,"code",void 0),this.kind=e,this.code=t}}function i(){let e=(0,r.A)("ZENN_API_KEY")?.trim();if(!e)throw new a("configuration");return e}function c(){i()}function l(){let e,t=(0,r.A)("ZENN_API_BASE_URL")?.trim();if(!t)return new URL("https://zenn.dev");try{e=new URL(t)}catch{throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です")}let n="http:"===e.protocol&&"localhost"===e.hostname;if("https:"!==e.protocol&&!n||e.username||e.password||"/"!==e.pathname||e.search||e.hash)throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です");return e}async function s(e){try{return await e.json()}catch{return}}async function u(e,t,n){var r;let o,c,u,p=(u="localhost"===(c=l()).hostname?"/public-api/v0":"/api/public-api/v0",new URL(`${u}${t}`,c));try{o=await fetch(p,{method:e,redirect:"error",signal:AbortSignal.timeout(15e3),headers:{Authorization:`Bearer ${i()}`,...n.body&&!(n.body instanceof FormData)?{"Content-Type":"application/json"}:{}},...n.body?{body:n.body instanceof FormData?n.body:JSON.stringify(n.body)}:{}})}catch{throw new a(n.resultUnknownOnFailure?"unknown-result":"network")}let d=await s(o);if(!o.ok){let e=d?.error?.code,t="string"==typeof e&&/^[a-z0-9_]+$/.test(e)?e:void 0;throw new a(400===(r=o.status)?"validation":401===r?"authentication":403===r?"authorization":404===r?"not-found":422===r?"validation":409===r?"conflict":429===r?"rate-limit":r>=500?"unknown-result":"network",t)}if(o.status!==n.expectedStatus)throw new a("compatibility");if(!1!==n.expectsJson){if(!g(d))throw new a("compatibility");return d}}async function p(e){return u("GET",e,{expectedStatus:200,resultUnknownOnFailure:!1})}async function d(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}async function f(e,t){return u("PATCH",e,{body:t,expectedStatus:200,resultUnknownOnFailure:!0})}async function m(e){await u("DELETE",e,{expectedStatus:204,resultUnknownOnFailure:!0,expectsJson:!1})}async function h(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}function g(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function y(e,t){if(!Array.isArray(e[t]))throw new a("compatibility")}function w(e,t){if(!g(e[t]))throw new a("compatibility")}function _(e){let t=e.next_page;if(null!==t&&("number"!=typeof t||!Number.isInteger(t)))throw new a("compatibility")}function S(e,t){let n=new URLSearchParams;void 0!==e&&n.set("page",String(e)),void 0!==t&&n.set("count",String(t));let r=n.toString();return r?`?${r}`:""}function b(e){if("string"!=typeof e||!e.startsWith("/"))throw new a("compatibility");let t=l(),n=new URL(e,t);if(n.origin!==t.origin)throw new a("compatibility");return n.toString()}async function v(e){let t={title:e.title,body_markdown:e.bodyMarkdown,...void 0===e.closed?{}:{closed:e.closed},...void 0===e.archived?{}:{archived:e.archived},...void 0===e.canOthersPost?{}:{can_others_post:e.canOthersPost},...void 0===e.unlisted?{}:{unlisted:e.unlisted},...void 0===e.topicNames?{}:{topic_names:e.topicNames}},n=await d("/scraps",t);if("string"!=typeof n.scrap?.slug)throw new a("compatibility");return{url:b(n.scrap.path)}}async function N(e){let t={body_markdown:e.bodyMarkdown};e.parentCommentSlug&&(t.parent_comment_slug=e.parentCommentSlug);let n=await d(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments`,t);return{url:b(n.comment?.path)}}async function z(e,t){let n=await p(`/scraps${S(e,t)}`);return y(n,"scraps"),_(n),n}async function I(e,t,n){let r=await p(`/scraps/${encodeURIComponent(e)}${S(t,n)}`);return w(r,"scrap"),y(r,"comments"),_(r),r}async function E(e,t){let n={...void 0===t.title?{}:{title:t.title},...void 0===t.closed?{}:{closed:t.closed},...void 0===t.archived?{}:{archived:t.archived},...void 0===t.canOthersPost?{}:{can_others_post:t.canOthersPost},...void 0===t.unlisted?{}:{unlisted:t.unlisted},...void 0===t.topicNames?{}:{topic_names:t.topicNames}};if(!Object.keys(n).length)throw new a("configuration",void 0,"更新する項目を指定してください");let r=await f(`/scraps/${encodeURIComponent(e)}`,n);return w(r,"scrap"),r}async function A(e){if(e.length<1||e.length>100||e.some(e=>!e.trim()))throw new a("configuration",void 0,"コメントslugを1件以上100件以下指定してください");let t=new URLSearchParams;e.forEach(e=>t.append("slugs[]",e));let n=await p(`/comments?${t.toString()}`);return y(n,"comments"),y(n,"not_found_slugs"),n}async function k(e){let t=await f(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`,{body_markdown:e.bodyMarkdown});return w(t,"comment"),t}async function O(e){await m(`/scraps/${encodeURIComponent(e)}`)}async function x(e){await m(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`)}async function P(e){let t=new FormData,n=new Uint8Array(e.bytes.byteLength);return n.set(e.bytes),t.append("file",new Blob([n.buffer],{type:e.contentType}),e.filename),{url:function(e){let t;if("string"!=typeof e)throw new a("compatibility");try{t=new URL(e)}catch{throw new a("compatibility")}let n="http:"===t.protocol&&"localhost"===t.hostname;if("https:"!==t.protocol&&!n||t.username||t.password)throw new a("compatibility");return t.toString()}((await h("/images",t)).image_url)}}async function R(e,t){let n=await p(`/images${S(e,t)}`);return y(n,"images"),_(n),n}async function $(e){await m(`/images/${e}`)}n.d(t,{Ed:()=>x,RY:()=>R,V6:()=>P,WL:()=>v,ZK:()=>N,bw:()=>O,eb:()=>A,ic:()=>I,lq:()=>E,mZ:()=>k,qO:()=>c,vS:()=>$,vu:()=>a,yJ:()=>l,z9:()=>z})},7116(e,t,n){n.a(e,async function(e,t){try{var r=n(8456),o=n.n(r),a=n(4972),i=e([a]);a=(i.then?(await i)():i)[0];let c=o()({},{permissive:!0}),l=c._[0]||"preview",s=c._.slice(1);(0,a.m)(l,s,{canNotifyUpdate:!0}),t()}catch(e){t(e)}})},7250(e){e.exports=require("../../package.json")},8456(e){e.exports=require("arg")},4217(e){e.exports=require("cheerio")},3672(e){e.exports=require("colors")},1144(e){e.exports=require("colors/safe")},7252(e){e.exports=require("express")},4652(e){e.exports=require("fs-extra")},3531(e){e.exports=require("gray-matter")},6045(e){e.exports=require("image-size")},7089(e){e.exports=require("js-yaml")},5086(e){e.exports=require("ws")},1569(e){e.exports=require("zod")},595(e){e.exports=import("@ai-sdk/fireworks").then(function(e){return e})},7117(e){e.exports=import("@ai-sdk/openai").then(function(e){return e})},7585(e){e.exports=import("@secretlint/node").then(function(e){return e})},9470(e){e.exports=import("ai").then(function(e){return e})},6551(e){e.exports=import("boxen").then(function(e){return e})},9748(e){e.exports=import("chokidar").then(function(e){return e})},4926(e){e.exports=import("configstore").then(function(e){return e})},166(e){e.exports=import("node-fetch").then(function(e){return e})},1367(e){e.exports=import("open").then(function(e){return e})},2595(e){e.exports=import("package-manager-detector/commands").then(function(e){return e})},870(e){e.exports=import("package-manager-detector/detect").then(function(e){return e})},3498(e){e.exports=import("zenn-markdown-html").then(function(e){return e})},5612(e){e.exports=import("zenn-markdown-html/utils").then(function(e){return e})},6982(e){e.exports=require("crypto")},8611(e){e.exports=require("http")},857(e){e.exports=require("os")},6928(e){e.exports=require("path")}},l={};function s(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}};return c[e](n,n.exports,s),n.exports}s.c=l,t=(e="function"==typeof Symbol)?Symbol("rspack queues"):"__rspack_queues",n=s.aE=e?Symbol("rspack exports"):"__webpack_exports__",r=e?Symbol("rspack error"):"__rspack_error",o=e?Symbol("rspack done"):"__rspack_done",a=s.zS=e?Symbol("rspack defer"):"__rspack_defer",s.zT=e=>{if(e.some(e=>{var t=l[e];return!t||!1===t[o]}))return{then:(t,n)=>Promise.all(e.map(s)).then(t,n)}},i=e=>{e&&e.d<1&&(e.d=1,e.forEach(e=>e.r--),e.forEach(e=>e.r--?e.r++:e()))},s.a=(e,c,l)=>{l&&((u=[]).d=-1);var u,p,d,f,m=new Set,h=e.exports,g=new Promise((e,t)=>{f=t,d=e});g[n]=h,g[t]=e=>{u&&e(u),m.forEach(e),g.catch(()=>{})},e.exports=g,c(e=>{p=e.map(e=>{if(null!==e&&"object"==typeof e){if(!e[t]&&e[a]){var o=s.zT(e[a]);if(!o)return e;var c=e;e={then(e,t){o.then(()=>e(c),t)}}}if(e[t])return e;if(e.then){var l=[];l.d=0,e.then(e=>{u[n]=e,i(l)},e=>{u[r]=e,i(l)});var u={};return u[a]=!1,u[t]=e=>e(l),u}}var p={};return p[t]=()=>{},p[n]=e,p});var o,c=()=>p.map(e=>{if(e[a])return e;if(e[r])throw e[r];return e[n]}),l=new Promise(e=>{(o=()=>e(c)).r=0;var n=e=>e!==u&&!m.has(e)&&(m.add(e),e&&!e.d&&(o.r++,e.push(o)));p.map(e=>e[a]||e[t](n))});return o.r?l:c()},e=>(e?f(g[r]=e):d(h),i(u),g[o]=!0)),u&&u.d<0&&(u.d=0)},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s(7116)})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zenn-cli",
|
|
3
|
-
"version": "0.5.5-alpha.
|
|
3
|
+
"version": "0.5.5-alpha.6",
|
|
4
4
|
"description": "Preview Zenn content locally.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"open": "^10.2.0",
|
|
59
59
|
"package-manager-detector": "^1.6.0",
|
|
60
60
|
"ws": "^8.18.3",
|
|
61
|
-
"zenn-markdown-html": "0.5.5-alpha.
|
|
61
|
+
"zenn-markdown-html": "0.5.5-alpha.6",
|
|
62
62
|
"zod": "^4.4.3"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
@@ -105,9 +105,9 @@
|
|
|
105
105
|
"vite-plugin-svgr": "^5.2.0",
|
|
106
106
|
"vitest": "^4.0.6",
|
|
107
107
|
"wait-on": "^9.0.1",
|
|
108
|
-
"zenn-content-css": "0.5.5-alpha.
|
|
109
|
-
"zenn-embed-elements": "0.5.5-alpha.
|
|
110
|
-
"zenn-model": "0.5.5-alpha.
|
|
108
|
+
"zenn-content-css": "0.5.5-alpha.6",
|
|
109
|
+
"zenn-embed-elements": "0.5.5-alpha.6",
|
|
110
|
+
"zenn-model": "0.5.5-alpha.6"
|
|
111
111
|
},
|
|
112
112
|
"engines": {
|
|
113
113
|
"node": ">=22.12.0"
|
|
@@ -115,5 +115,5 @@
|
|
|
115
115
|
"publishConfig": {
|
|
116
116
|
"access": "public"
|
|
117
117
|
},
|
|
118
|
-
"gitHead": "
|
|
118
|
+
"gitHead": "2e005389b7e1813910b6855776e04edde7433318"
|
|
119
119
|
}
|