@wonseok-han/confluence-sync 1.7.0 → 2.0.0
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/README.md +44 -409
- package/dist/cli/args.js +1 -1
- package/dist/cli/help.js +214 -115
- package/dist/cli/init.js +44 -5
- package/dist/cli/main.js +42 -11
- package/dist/cli/status.js +83 -0
- package/dist/confluence/client.js +157 -86
- package/dist/confluence/config.js +12 -8
- package/dist/confluence/env-file.js +23 -0
- package/dist/confluence/links.js +18 -0
- package/dist/conversion/asset-paths.js +5 -0
- package/dist/conversion/attachments.js +29 -7
- package/dist/conversion/convert.js +10 -22
- package/dist/conversion/footnotes.js +114 -11
- package/dist/conversion/markdown.js +26 -0
- package/dist/conversion/pdf-pages.js +10 -8
- package/dist/documents/anchors.js +9 -0
- package/dist/documents/callout-roundtrip.js +75 -0
- package/dist/documents/callouts.js +74 -0
- package/dist/documents/catalog.js +2 -2
- package/dist/documents/footnote-roundtrip.js +96 -0
- package/dist/documents/format.js +116 -0
- package/dist/documents/html-tables.js +30 -0
- package/dist/documents/html-to-markdown.js +47 -13
- package/dist/documents/markdown.js +83 -12
- package/dist/documents/obsidian.js +6 -3
- package/dist/documents/tables.js +89 -0
- package/dist/runtime/network.js +4 -0
- package/dist/shared/colors.js +2 -2
- package/dist/shared/progress.js +164 -0
- package/dist/shared/version.js +12 -0
- package/dist/site/assets/Monaco-LICENSE.txt +21 -0
- package/dist/site/assets/Monaco-ThirdPartyNotices.txt +448 -0
- package/dist/site/assets/PDFJS-LICENSE.txt +177 -0
- package/dist/site/assets/app.css +1 -0
- package/dist/site/assets/app.js +4 -0
- package/dist/site/assets/chunks/chunk-TEW74QPN.js +35 -0
- package/dist/site/assets/chunks/markdown-S6623E66.js +1 -0
- package/dist/site/assets/chunks/monaco-36ZGUH4Y.js +897 -0
- package/dist/site/assets/chunks/monaco-HFLEBJTI.css +1 -0
- package/dist/site/assets/chunks/pdf-DDN7TXTP.js +55 -0
- package/dist/site/assets/confluence-env-example.txt +32 -0
- package/dist/site/assets/editor.worker.js +1 -0
- package/dist/site/assets/favicon.svg +3 -0
- package/dist/site/assets/guide/01-account-settings.png +0 -0
- package/dist/site/assets/guide/02-atlassian-security.png +0 -0
- package/dist/site/assets/guide/03-api-tokens.png +0 -0
- package/dist/site/assets/guide/04-scope-api-token-step1.png +0 -0
- package/dist/site/assets/guide/05-scope-api-token-step2.png +0 -0
- package/dist/site/assets/guide/06-scope-api-token-step3.png +0 -0
- package/dist/site/assets/guide/07-scope-api-token-step4.png +0 -0
- package/dist/site/assets/guide/web/document-preview.png +0 -0
- package/dist/site/assets/guide/web/remote-diff.png +0 -0
- package/dist/site/assets/guide/web/sync-workspace.png +0 -0
- package/dist/site/assets/pdf/cmaps/78-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Add-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5pc-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/B5pc-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS1-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS1-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/CNS2-V.bcmap +3 -0
- package/dist/site/assets/pdf/cmaps/ETHK-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETHK-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETen-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETen-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/ETenms-B5-H.bcmap +3 -0
- package/dist/site/assets/pdf/cmaps/ETenms-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Ext-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GB-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GB-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GB-H.bcmap +4 -0
- package/dist/site/assets/pdf/cmaps/GB-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK2K-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBK2K-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBT-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdla-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdla-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm314-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm314-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm471-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKm471-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKscs-B5-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/HKscs-B5-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Hankaku.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Hiragana.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-Johab-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-Johab-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Katakana.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/LICENSE +36 -0
- package/dist/site/assets/pdf/cmaps/NWP-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/NWP-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/RKSJ-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/RKSJ-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/Roman.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/V.bcmap +0 -0
- package/dist/site/assets/pdf/cmaps/WP-Symbol.bcmap +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitDingbats.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixed.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixedBold.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitFixedItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerif.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerifBold.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSerifItalic.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/FoxitSymbol.pfb +0 -0
- package/dist/site/assets/pdf/standard_fonts/LICENSE_FOXIT +27 -0
- package/dist/site/assets/pdf/standard_fonts/LICENSE_LIBERATION +363 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-Bold.ttf +0 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-Italic.ttf +0 -0
- package/dist/site/assets/pdf/standard_fonts/LiberationSans-Regular.ttf +0 -0
- package/dist/site/assets/pdf/wasm/LICENSE_JBIG2 +196 -0
- package/dist/site/assets/pdf/wasm/LICENSE_OPENJPEG +39 -0
- package/dist/site/assets/pdf/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- package/dist/site/assets/pdf/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
- package/dist/site/assets/pdf/wasm/LICENSE_PDFJS_QCMS +19 -0
- package/dist/site/assets/pdf/wasm/LICENSE_QCMS +21 -0
- package/dist/site/assets/pdf/wasm/jbig2.wasm +0 -0
- package/dist/site/assets/pdf/wasm/jbig2_nowasm_fallback.js +15 -0
- package/dist/site/assets/pdf/wasm/openjpeg.wasm +0 -0
- package/dist/site/assets/pdf/wasm/openjpeg_nowasm_fallback.js +17 -0
- package/dist/site/assets/pdf/wasm/qcms_bg.wasm +0 -0
- package/dist/site/assets/pdf/wasm/quickjs-eval.js +16 -0
- package/dist/site/assets/pdf/wasm/quickjs-eval.wasm +0 -0
- package/dist/site/assets/pdf.worker.min.mjs +29 -0
- package/dist/site/assets/workspace.worker.js +409 -0
- package/dist/site/index.html +253 -0
- package/dist/sync/baseline.js +45 -0
- package/dist/sync/changes.js +51 -0
- package/dist/sync/diff.js +80 -0
- package/dist/sync/fetch.js +287 -0
- package/dist/sync/ignore.js +4 -4
- package/dist/sync/local-state.js +12 -0
- package/dist/sync/mapping.js +31 -8
- package/dist/sync/metadata.js +57 -0
- package/dist/sync/prepare.js +52 -0
- package/dist/sync/pull.js +618 -141
- package/dist/sync/push.js +262 -207
- package/dist/sync/reconcile.js +51 -0
- package/dist/sync/references.js +2 -2
- package/dist/sync/remap.js +17 -5
- package/dist/sync/render.js +3 -2
- package/dist/sync/restore.js +28 -0
- package/dist/sync/scope.js +47 -0
- package/dist/sync/staging.js +193 -0
- package/dist/sync/workspace.js +100 -0
- package/dist/web/assets/PDFJS-LICENSE.txt +177 -0
- package/dist/web/assets/app.css +1 -1
- package/dist/web/assets/app.js +3 -938
- package/dist/web/assets/chunks/chunk-TEW74QPN.js +35 -0
- package/dist/web/assets/chunks/markdown-S6623E66.js +1 -0
- package/dist/web/assets/chunks/monaco-36ZGUH4Y.js +897 -0
- package/dist/web/assets/chunks/monaco-HFLEBJTI.css +1 -0
- package/dist/web/assets/chunks/pdf-DDN7TXTP.js +55 -0
- package/dist/web/assets/confluence-env-example.txt +32 -0
- package/dist/web/assets/editor.worker.js +1 -30
- package/dist/web/assets/favicon.svg +3 -0
- package/dist/web/assets/guide/01-account-settings.png +0 -0
- package/dist/web/assets/guide/02-atlassian-security.png +0 -0
- package/dist/web/assets/guide/03-api-tokens.png +0 -0
- package/dist/web/assets/guide/04-scope-api-token-step1.png +0 -0
- package/dist/web/assets/guide/05-scope-api-token-step2.png +0 -0
- package/dist/web/assets/guide/06-scope-api-token-step3.png +0 -0
- package/dist/web/assets/guide/07-scope-api-token-step4.png +0 -0
- package/dist/web/assets/guide/web/document-preview.png +0 -0
- package/dist/web/assets/guide/web/remote-diff.png +0 -0
- package/dist/web/assets/guide/web/sync-workspace.png +0 -0
- package/dist/web/assets/pdf/cmaps/78-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Add-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5pc-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/B5pc-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS1-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS1-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/CNS2-V.bcmap +3 -0
- package/dist/web/assets/pdf/cmaps/ETHK-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETHK-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETen-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETen-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/ETenms-B5-H.bcmap +3 -0
- package/dist/web/assets/pdf/cmaps/ETenms-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Ext-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GB-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GB-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GB-H.bcmap +4 -0
- package/dist/web/assets/pdf/cmaps/GB-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK2K-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBK2K-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBT-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdla-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdla-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm314-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm314-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm471-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKm471-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKscs-B5-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/HKscs-B5-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Hankaku.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Hiragana.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-Johab-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-Johab-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Katakana.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/LICENSE +36 -0
- package/dist/web/assets/pdf/cmaps/NWP-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/NWP-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/RKSJ-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/RKSJ-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/Roman.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/V.bcmap +0 -0
- package/dist/web/assets/pdf/cmaps/WP-Symbol.bcmap +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitDingbats.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixed.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixedBold.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitFixedItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerif.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerifBold.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSerifItalic.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/FoxitSymbol.pfb +0 -0
- package/dist/web/assets/pdf/standard_fonts/LICENSE_FOXIT +27 -0
- package/dist/web/assets/pdf/standard_fonts/LICENSE_LIBERATION +363 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-Bold.ttf +0 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-Italic.ttf +0 -0
- package/dist/web/assets/pdf/standard_fonts/LiberationSans-Regular.ttf +0 -0
- package/dist/web/assets/pdf/wasm/LICENSE_JBIG2 +196 -0
- package/dist/web/assets/pdf/wasm/LICENSE_OPENJPEG +39 -0
- package/dist/web/assets/pdf/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- package/dist/web/assets/pdf/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
- package/dist/web/assets/pdf/wasm/LICENSE_PDFJS_QCMS +19 -0
- package/dist/web/assets/pdf/wasm/LICENSE_QCMS +21 -0
- package/dist/web/assets/pdf/wasm/jbig2.wasm +0 -0
- package/dist/web/assets/pdf/wasm/jbig2_nowasm_fallback.js +15 -0
- package/dist/web/assets/pdf/wasm/openjpeg.wasm +0 -0
- package/dist/web/assets/pdf/wasm/openjpeg_nowasm_fallback.js +17 -0
- package/dist/web/assets/pdf/wasm/qcms_bg.wasm +0 -0
- package/dist/web/assets/pdf/wasm/quickjs-eval.js +16 -0
- package/dist/web/assets/pdf/wasm/quickjs-eval.wasm +0 -0
- package/dist/web/assets/pdf.worker.min.mjs +29 -0
- package/dist/web/assets/workspace.worker.js +409 -0
- package/dist/web/document-source.js +14 -0
- package/dist/web/hosted-files.js +189 -0
- package/dist/web/hosted.js +316 -0
- package/dist/web/node-runner.js +26 -0
- package/dist/web/preview.js +74 -0
- package/dist/web/server.js +85 -240
- package/dist/web/sync.js +365 -71
- package/dist/web/table-editor-script.js +99 -0
- package/dist/web/table-format.js +224 -0
- package/dist/web/views/help.js +15 -10
- package/dist/web/views/sync-panel.js +90 -19
- package/dist/web/views/token-guide.js +27 -0
- package/dist/web/views/usage-guide.js +12 -0
- package/dist/web/views/workspace.js +85 -15
- package/dist/web/workspace-api.js +371 -0
- package/docs/user/CLI.md +366 -0
- package/docs/user/CONFIGURATION.md +125 -0
- package/docs/user/OBSIDIAN.md +117 -0
- package/docs/user/WEB.md +90 -0
- package/docs/user/images/web/document-preview.png +0 -0
- package/docs/user/images/web/remote-diff.png +0 -0
- package/docs/user/images/web/sync-workspace.png +0 -0
- package/package.json +23 -6
package/dist/cli/help.js
CHANGED
|
@@ -1,119 +1,218 @@
|
|
|
1
|
-
/**
|
|
2
|
-
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
1
|
+
/** Task-oriented CLI overview and per-command help. */
|
|
4
2
|
import { bold, cyan, dim } from '../shared/colors.js';
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
import { readPkgVersion } from '../shared/version.js';
|
|
4
|
+
export { readPkgVersion };
|
|
5
|
+
const workspace = ` --base <폴더> 작업공간 지정(상위 작업공간 자동 탐색)
|
|
6
|
+
--reference-root <폴더> 다른 작업공간의 게시 매핑으로 링크 연결(반복 가능)`;
|
|
7
|
+
const help = {
|
|
8
|
+
init: `csync init [--base <폴더>] [--force]
|
|
9
|
+
csync init --connect [--base <폴더>]
|
|
10
|
+
csync init --migrate [--base <폴더>] [--dry-run]
|
|
11
|
+
|
|
12
|
+
init .env 생성. 터미널에서는 값을 입력하고, 비대화형은 빈 템플릿 생성
|
|
13
|
+
--base <폴더> .env를 생성하거나 연결할 기존 폴더(기본: 현재 폴더)
|
|
14
|
+
--force 기존 .env 교체
|
|
15
|
+
--connect 준비된 .env로 기준 폴더 ↔ 스페이스 연결. 문서 다운로드·업로드 없음
|
|
16
|
+
--migrate 기존 루트 메타데이터를 .csync/로 이전(.env·문서 유지, API 호출 없음)
|
|
17
|
+
--dry-run --migrate 이전 내역만 확인
|
|
18
|
+
|
|
19
|
+
기존 스페이스 받기: csync init → .env 값 입력 → csync pull
|
|
20
|
+
로컬 문서부터 시작: csync init → .env 값 입력 → csync init --connect → csync add 문서.md
|
|
21
|
+
연결 정보만 있는 폴더에서도 Pull이 스페이스를 확인하고 자동 연결합니다. 별도 스코프 설정은 없습니다.`,
|
|
22
|
+
status: `csync status [--base <폴더>] [--reference-root <폴더>]
|
|
23
|
+
|
|
24
|
+
${workspace}
|
|
25
|
+
|
|
26
|
+
로컬 문서와 저장된 Fetch 결과를 합쳐 표시합니다. Confluence API 호출·파일 저장 없음.
|
|
27
|
+
↓ 받을 변경: 원격에서만 변경 → csync pull
|
|
28
|
+
↑ 보낼 변경: 로컬 작업 → csync diff 문서.md → csync add 문서.md
|
|
29
|
+
! 양쪽 변경: 양쪽 모두 변경 → csync diff 문서.md --remote로 비교
|
|
30
|
+
! 확인 필요: 재추가 필요, 파일 누락, 원격 조회 불가 또는 기준 버전 확인 필요
|
|
31
|
+
[추가됨]은 다음 Push에 포함, [미선택]은 제외입니다.
|
|
32
|
+
원격 조회 시각을 확인하세요. 원격 미확인·오래된 결과는 csync fetch로 갱신합니다.
|
|
33
|
+
로컬 누락 복구: csync restore README.md (기존 파일은 덮어쓰지 않음)
|
|
34
|
+
원격 누락을 삭제로 확정하거나 로컬 파일 삭제를 원격에 전파하지 않습니다.`,
|
|
35
|
+
fetch: `csync fetch [--base <폴더>] [--refresh]
|
|
36
|
+
|
|
37
|
+
--base <폴더> 원격 변경을 확인할 작업공간
|
|
38
|
+
--refresh 2분 캐시를 건너뛰고 원격 상태 다시 조회
|
|
39
|
+
|
|
40
|
+
스페이스의 페이지 메타데이터를 100개씩 조회해 원격 신규·버전·제목·위치를 확인합니다. 본문·첨부는 받지 않습니다.
|
|
41
|
+
.csync/remote.json에 저장하고 2분 동안 재사용합니다. 한 실행 최대 20회 요청.
|
|
42
|
+
문서·매핑의 동기화 기준과 업로드 선택은 유지합니다. 결과는 csync status에서 확인하세요.
|
|
43
|
+
경로 구성에 필요한 폴더 정보만 추가 조회합니다. 페이지 버전이 그대로인 첨부 단독 변경은 감지하지 않습니다.
|
|
44
|
+
|
|
45
|
+
예: csync fetch → csync status → csync pull`,
|
|
46
|
+
pull: `csync pull [--base <폴더>] [--obsidian]
|
|
47
|
+
|
|
48
|
+
--base <폴더> 작업공간 지정
|
|
49
|
+
--out <폴더> 저장할 작업공간(--base와 같아야 함)
|
|
50
|
+
--obsidian 내부 링크를 [[wikilink]]로 저장
|
|
51
|
+
--mapping <파일> 매핑 파일 지정(기본: .csync/mapping.json)
|
|
52
|
+
|
|
53
|
+
Fetch 결과에서 아직 받지 않은 원격 문서와 원격에서만 변경된 문서를 받습니다.
|
|
54
|
+
로컬이 비어 있어도 동일한 동작이며, 최초·전체 가져오기를 구분하지 않습니다.
|
|
55
|
+
연결 정보만 있는 폴더는 .env로 스페이스 연결을 확인합니다.
|
|
56
|
+
2분 이내 Fetch 결과를 재사용하며 없거나 만료되면 메타데이터를 조회합니다.
|
|
57
|
+
로컬 수정·의도적인 삭제·이동 대기·양쪽 변경은 보존하고 원격 삭제를 전파하지 않습니다.
|
|
58
|
+
원복은 csync restore <파일> --overwrite를 사용하세요.
|
|
59
|
+
|
|
60
|
+
예: csync fetch → csync status → csync pull
|
|
61
|
+
csync pull --out ./docs`,
|
|
62
|
+
restore: `csync restore <파일.md...> [--overwrite] [--base <폴더>] [--obsidian]
|
|
63
|
+
|
|
64
|
+
--base <폴더> 기존 작업공간 지정
|
|
65
|
+
--obsidian 복구 문서의 내부 링크를 [[wikilink]]로 저장
|
|
66
|
+
--overwrite 지정 문서의 로컬 수정과 관련 첨부를 버리고 원격 최신으로 교체
|
|
67
|
+
|
|
68
|
+
지정한 문서를 매핑의 pageId로 조회해 최신 원격 본문과 첨부로 복구합니다.
|
|
69
|
+
원격에 쓰거나 삭제하지 않습니다. 하위 페이지·전체 스페이스는 탐색하지 않습니다.
|
|
70
|
+
기본은 누락 파일만 복구하며 기존 로컬 문서·첨부를 보호합니다.
|
|
71
|
+
--overwrite는 지정한 문서와 원격에서 참조하는 첨부를 교체합니다. 로컬 수정은 사라집니다.
|
|
72
|
+
다운로드 중 추가로 변경된 파일은 옵션과 관계없이 보존하고 중단합니다.
|
|
73
|
+
제외 규칙·독립 작업공간·이동 대기·같은 pageId의 이동한 로컬 문서는 복구하지 않습니다.
|
|
74
|
+
복구한 문서는 업로드 선택에서 제외합니다. 다시 올리려면 직접 add하세요.
|
|
75
|
+
일반 pull은 로컬 삭제를 보존합니다. restore는 사용자가 지정한 파일만 복구합니다.
|
|
76
|
+
|
|
77
|
+
예: csync restore README.md
|
|
78
|
+
csync restore "수정한 문서.md" --overwrite
|
|
79
|
+
csync restore "지식자산/문서.md" --base ./스페이스`,
|
|
80
|
+
add: `csync add <파일·폴더...> [--base <폴더>] [--reference-root <폴더>]
|
|
81
|
+
|
|
82
|
+
${workspace}
|
|
83
|
+
|
|
84
|
+
다음 Push에 포함할 문서를 .csync/index.json에 저장합니다. 폴더는 하위 문서 전체, .은 전체.
|
|
85
|
+
Confluence API를 호출하지 않으며 원본 파일은 유지합니다.
|
|
86
|
+
내용 사본이나 일부 줄을 저장하는 기능은 아닙니다. 추가 후 문서·첨부·링크가 바뀌면 재추가하세요.
|
|
87
|
+
참조 폴더는 add와 push에 같은 값을 지정하세요.
|
|
88
|
+
|
|
89
|
+
예: csync add "지식자산/특허출원/문서.md"
|
|
90
|
+
csync status
|
|
91
|
+
csync push --dry-run
|
|
92
|
+
csync push`,
|
|
93
|
+
unstage: `csync unstage <파일·폴더...> [--base <폴더>]
|
|
94
|
+
|
|
95
|
+
--base <폴더> 작업공간 지정
|
|
96
|
+
|
|
97
|
+
저장된 업로드 선택에서만 제외합니다. 문서·첨부·매핑·원격 내용은 유지합니다.
|
|
98
|
+
파일 변경을 취소하거나 원래 내용으로 복원하는 명령이 아닙니다.
|
|
99
|
+
|
|
100
|
+
예: csync unstage 문서.md
|
|
101
|
+
csync unstage . # 모두 선택 해제`,
|
|
102
|
+
push: `csync push [파일·폴더...] [옵션]
|
|
103
|
+
|
|
104
|
+
${workspace}
|
|
105
|
+
--dry-run 업로드 계획만 확인(기본은 API 호출 없음)
|
|
106
|
+
--verify 변경 없는 문서까지 원격 버전·존재 확인(--dry-run과 함께 읽기 전용 조회)
|
|
107
|
+
--list 인식된 문서·제목·계층만 출력(인증·API 호출 없음)
|
|
108
|
+
--force 본문 강제 갱신(원격 충돌 검사는 유지)
|
|
109
|
+
--exclude <패턴> 제외 패턴(반복 가능, .csync/ignore도 적용)
|
|
110
|
+
--mapping <파일> 매핑 파일 지정(기본: .csync/mapping.json)
|
|
111
|
+
|
|
112
|
+
경로 없는 push: add로 선택한 문서만 처리합니다. 선택이 없으면 중단합니다.
|
|
113
|
+
push 문서.md: 저장된 선택과 별개로 명시한 문서를 직접 처리합니다.
|
|
114
|
+
추가 후 수정한 문서는 다시 add해야 하며 성공·변경없음 항목은 선택 해제, 실패 항목은 유지합니다.
|
|
115
|
+
CLI 미리보기는 선택 사항입니다. 웹은 미리보기 완료 후에만 업로드할 수 있습니다.
|
|
116
|
+
미리보기 여부와 관계없이 원격 버전 충돌 검사는 유지하며 자동 병합하지 않습니다.
|
|
117
|
+
상위 README는 부모 연결에만 사용합니다. 미연결 상위 README는 함께 추가하거나 Pull로 연결하세요.
|
|
118
|
+
위키링크·각주·PDF 페이지 참조·Obsidian callout을 전처리하며 원본은 유지합니다.
|
|
119
|
+
|
|
120
|
+
권장: csync add 문서.md → csync push --dry-run --verify → csync push
|
|
121
|
+
직접: csync push 문서.md --dry-run → csync push 문서.md`,
|
|
122
|
+
diff: `csync diff <파일.md> [--remote] [--base <폴더>]
|
|
123
|
+
|
|
124
|
+
--base <폴더> 작업공간 지정
|
|
125
|
+
--remote 해당 페이지 본문 1회 조회 후 현재 원격 ↔ 로컬 비교
|
|
126
|
+
|
|
127
|
+
기본은 마지막 성공한 Pull·Push의 저장된 Markdown 기준본과 비교합니다(API 호출 없음).
|
|
128
|
+
새 문서는 빈 내용과 비교하며 옛 매핑에 기준본이 없으면 --remote로 현재 원격과 비교하세요.
|
|
129
|
+
원격 비교는 HTML → Markdown 근사 변환이며 과거 동기화 시점의 내용이 아닙니다.
|
|
130
|
+
문서·매핑·업로드 선택은 변경하지 않습니다.
|
|
131
|
+
|
|
132
|
+
예: csync diff "지식자산/문서.md"
|
|
133
|
+
csync diff "지식자산/문서.md" --remote`,
|
|
134
|
+
remap: `csync remap [--base <폴더>] [--dry-run]
|
|
135
|
+
|
|
136
|
+
--base <폴더> 작업공간 지정
|
|
137
|
+
--dry-run 계획만 확인, 저장 없음
|
|
138
|
+
--from-mapping <파일> 외부 매핑에서 ID·해시 가져오기(원본 유지)
|
|
139
|
+
--mapping <파일> 대상 매핑(기본: .csync/mapping.json)
|
|
140
|
+
--exclude <패턴> 제외 패턴(반복 가능)
|
|
141
|
+
|
|
142
|
+
로컬 파일의 pageId로 이동한 경로를 재연결합니다. API 호출·원격 이동 없음.
|
|
143
|
+
보통 파일 이동 후 add와 push로 자동 인식하므로 별도 remap은 필요하지 않습니다.
|
|
144
|
+
원격 위치 변경은 명시적으로 Push할 때 반영합니다. 폴더 ID의 경로 변경은 자동 추론하지 않습니다.`,
|
|
145
|
+
convert: `csync convert [파일·폴더...] --to markdown|obsidian [옵션]
|
|
146
|
+
csync convert [파일·폴더...] --fix [옵션]
|
|
147
|
+
|
|
148
|
+
--to markdown 위키링크·이미지·각주·PDF 페이지 참조를 Markdown으로 변환
|
|
149
|
+
--to obsidian Markdown 링크를 [[wikilink]]로 변환
|
|
150
|
+
--fix 옛 Confluence 결과의 CSS 잔해·코드블록 언어·불필요한 이스케이프 보정
|
|
151
|
+
--base <폴더> 링크 해석 기준(기본: 대상의 공통 상위 폴더)
|
|
152
|
+
--out <폴더> 별도 출력 위치. 생략하면 원본 파일을 변경합니다.
|
|
153
|
+
--dry-run 변경할 파일만 확인, 저장 없음
|
|
154
|
+
|
|
155
|
+
로컬 전용이며 Confluence API·인증은 필요하지 않습니다.
|
|
156
|
+
첨부는 문서 옆 attachments/<문서명>/에 보관합니다.
|
|
157
|
+
Push는 필요한 전처리를 내부 수행하므로 먼저 변환본을 만들 필요는 없습니다.
|
|
158
|
+
|
|
159
|
+
예: csync convert --to markdown ./vault --out ./markdown`,
|
|
160
|
+
web: `csync web [--base <폴더>] [--port <번호>] [--no-open] [--ui <배포 웹 URL>] [--hosted]
|
|
161
|
+
|
|
162
|
+
--base <폴더> 시작 폴더(기본: 홈 폴더, 화면에서 변경 가능)
|
|
163
|
+
--port <번호> 웹 포트(기본: 4318)
|
|
164
|
+
--no-open 브라우저 자동 열기 생략
|
|
165
|
+
--hosted 브라우저 폴더 접근을 사용하는 배포 서버 실행(기본 포트 8080)
|
|
166
|
+
--ui <URL> 배포 웹을 이 컴퓨터의 실행기에 연결(HTTPS, 로컬 개발은 HTTP 허용)
|
|
167
|
+
|
|
168
|
+
localhost / 127.0.0.1에서 로컬 웹 화면을 실행합니다.
|
|
169
|
+
문서 변환·표 서식·미리보기와 CLI와 같은 Fetch·Pull·업로드 선택·Push를 제공합니다.
|
|
170
|
+
접속 설정은 선택한 기준 폴더의 .env 또는 직접 가져온 .env를 사용합니다.
|
|
171
|
+
--ui는 지정한 웹 출처만 허용하며 연결 키는 csync를 종료하면 만료됩니다.
|
|
172
|
+
예: csync web --ui https://csync.example.com --base ./vault`,
|
|
173
|
+
};
|
|
174
|
+
export function printHelp(command) {
|
|
175
|
+
if (command) {
|
|
176
|
+
if (!help[command])
|
|
177
|
+
throw new Error(`지원하지 않는 명령입니다: ${command}. csync --help를 확인하세요.`);
|
|
178
|
+
console.log(`${bold(cyan(`csync ${command}`))}\n\n사용법: ${help[command]}\n\n -h, --help 이 명령의 도움말\n --no-color 색상 없이 출력(NO_COLOR 환경변수도 지원)`);
|
|
179
|
+
return;
|
|
13
180
|
}
|
|
14
|
-
}
|
|
15
|
-
export function printHelp() {
|
|
16
|
-
const h = (s) => bold(s); // 섹션 제목
|
|
17
|
-
const o = (s) => cyan(s); // 옵션/명령
|
|
18
181
|
console.log(`${bold(cyan(`confluence-sync v${readPkgVersion()}`))}
|
|
19
|
-
${dim('Confluence Cloud ↔ Markdown
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
${
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
${o('--no-color')} 컬러 출력 끄기
|
|
56
|
-
${o('-h, --help')} 이 도움말
|
|
57
|
-
${o('-v, --version')} 버전 출력
|
|
58
|
-
|
|
59
|
-
${h('경로 인자:')}
|
|
60
|
-
파일/폴더를 주면 ${bold('그 문서만')} 발행합니다.
|
|
61
|
-
상위 ${o('README.md')} 는 자식을 붙일 부모 pageId 를 얻는 데만 쓰이고 내용은 갱신되지 않습니다
|
|
62
|
-
${dim('(아직 페이지가 없으면 자식을 붙일 곳이 없으므로 그때는 생성됩니다).')}
|
|
63
|
-
상위 문서까지 갱신하려면 함께 지정하세요.
|
|
64
|
-
예) ${o('confluence-sync 20-design')} ${o('confluence-sync 90-glossary.md')}
|
|
65
|
-
|
|
66
|
-
${h('pull(역방향) 옵션:')}
|
|
67
|
-
${o('--out <dir>')} .md 를 생성할 디렉토리(기본: 현재 폴더)
|
|
68
|
-
${o('--children')} 하위 페이지까지 재귀적으로 가져와 폴더 트리로 복원
|
|
69
|
-
${o('--space')} 대상 없이 스페이스(CONFLUENCE_SPACE_KEY) 홈페이지부터 전체를 가져옴
|
|
70
|
-
${o('--obsidian')} 내부 링크를 [[wikilink]] 로 출력(기본: 어디서나 열리는 상대 .md 링크)
|
|
71
|
-
${o('--base <dir>')} 매핑 키의 기준(기본: --out 에서 위로 올라가며 .confluence-sync.json 을 찾음)
|
|
72
|
-
${o('--mapping <path>')} 매핑 파일 위치 (기본: <base>/.confluence-sync.json)
|
|
73
|
-
${o('--no-mapping')} 매핑을 기록하지 않음
|
|
74
|
-
(이미지는 항상 attachments/<문서명>/ 하위에 저장됨)
|
|
75
|
-
받아온 문서는 pageId 와 ${dim('변경 해시')}가 매핑에 기록되어, ${bold('pull 직후 push 하면 "변경없음"')} 입니다
|
|
76
|
-
${dim('(기록하지 않으면 방금 받아온 내용을 그대로 되올려 보내게 됩니다).')}
|
|
77
|
-
예) ${o('confluence-sync pull https://.../pages/12345/Title --out ./docs --children')}
|
|
78
|
-
${o('confluence-sync pull --space --out ./docs')}
|
|
79
|
-
|
|
80
|
-
${h('convert(이미 받아둔 .md 손보기) 옵션:')} ${dim('Confluence 호출·인증 없음')}
|
|
81
|
-
${o('--to obsidian')} 상대 .md 링크 → [[wikilink]]
|
|
82
|
-
${o('--to markdown')} [[wikilink]] · ![[embed]] → 상대 .md 링크 (되돌리기)
|
|
83
|
-
각주 → 위첨자 링크·제목 앵커, PDF #page=N → 해당 쪽 이미지
|
|
84
|
-
--to obsidian은 변환 표식으로 각주·PDF 참조를 복원
|
|
85
|
-
절대경로·file://·../ 로컬 첨부는 출력 트리에 복사하고 링크 변경
|
|
86
|
-
${o('--fix')} 옛 pull 결과 보정 — 코드블록 언어(java→plaintext)·CSS 잔해·
|
|
87
|
-
불필요한 \\ 이스케이프·리스트 사이 빈 줄
|
|
88
|
-
${o('--base <dir>')} 링크를 해석할 문서 트리 루트(기본: 준 경로들의 공통 상위 폴더)
|
|
89
|
-
${o('--out <dir>')} 원본을 두고 결과를 다른 트리에 쓰기(참조된 첨부도 함께 복사)
|
|
90
|
-
${o('--dry-run')} 바뀔 파일만 출력하고 쓰지 않음
|
|
91
|
-
|
|
92
|
-
파일·폴더를 여러 개 줄 수 있고, 안 주면 base 전체가 대상입니다.
|
|
93
|
-
${o('--out')} 없이 실행하면 ${dim('원본 파일을 덮어씁니다')}.
|
|
94
|
-
예) ${o('confluence-sync convert --fix ./docs --dry-run')}
|
|
95
|
-
${o('confluence-sync convert --to obsidian --fix ./docs --out ~/MyVault')}
|
|
96
|
-
${o('confluence-sync convert --fix ./docs/가이드/설치.md --base ./docs')} ${dim('(파일 하나만)')}
|
|
97
|
-
|
|
98
|
-
${h('섹션 링크(앵커):')}
|
|
99
|
-
${o('[§1 개요](#1-개요)')} 처럼 헤딩을 가리키는 링크가 Confluence 에서도 동작합니다.
|
|
100
|
-
같은 문서(${o('#슬러그')} · ${o('[[#헤딩]]')})·다른 문서(${o('문서.md#슬러그')} · ${o('[[문서#헤딩]]')}) 모두 지원합니다.
|
|
101
|
-
Confluence 의 자동 헤딩 id 는 배포판마다 달라서, 가리켜지는 헤딩 앞에 ${dim('Anchor 매크로')}로
|
|
102
|
-
이름을 직접 심고 그 이름을 가리킵니다. pull 은 반대로 슬러그를 되돌립니다.
|
|
103
|
-
대응하는 헤딩을 못 찾으면 링크를 바꾸지 않고 ${dim('⚠ 대응 헤딩 없는 앵커')} 로 알려 줍니다
|
|
104
|
-
${dim('(대개 문서 쪽 오타나 깨진 상대경로입니다)')}.
|
|
105
|
-
|
|
106
|
-
${h('Obsidian:')}
|
|
107
|
-
pull 결과는 vault 에서 바로 열립니다. 함께 받은 페이지끼리의 내부 링크가 이어져 그래프·백링크가
|
|
108
|
-
동작하고, 각 문서의 frontmatter 에 pageId 가 남아 원본 페이지를 가리킵니다.
|
|
109
|
-
[[wikilink]] 표기를 원하면 ${o('pull --obsidian')}, 이미 받아둔 문서라면 ${o('convert --to obsidian')}.
|
|
110
|
-
|
|
111
|
-
push 는 vault 문법을 그대로 이해합니다: ${o('[[wikilink]]')} · ${o('![[embed]]')} · ${o('[[문서#헤딩]]')} · YAML frontmatter
|
|
112
|
-
(frontmatter 의 ${o('title')} 이 페이지 제목이 되고, ${o('pageId')} 가 있으면 매핑이 없어도 그 페이지를 갱신합니다).
|
|
113
|
-
|
|
114
|
-
${h('설정(.env):')}
|
|
115
|
-
실행 위치(cwd)의 .env 또는 셸 환경변수를 읽습니다.
|
|
116
|
-
필수: CONFLUENCE_BASE_URL, CONFLUENCE_EMAIL, CONFLUENCE_API_TOKEN, CONFLUENCE_SPACE_KEY
|
|
117
|
-
선택: CONFLUENCE_PARENT_ID(페이지/폴더 id), CONFLUENCE_SYNC_BASE
|
|
118
|
-
${o("'confluence-sync init'")} 으로 대화형 생성 가능.`);
|
|
182
|
+
${dim('Confluence Cloud ↔ Markdown · 기준 폴더 하나가 스페이스 작업공간입니다.')}
|
|
183
|
+
|
|
184
|
+
${bold('사용법:')} csync <명령> [옵션]
|
|
185
|
+
init .env 준비 / --connect로 기존 문서 폴더 연결
|
|
186
|
+
status 로컬 변경 + 마지막 Fetch 결과 + 업로드 선택 확인(API 호출 없음)
|
|
187
|
+
fetch 연결된 페이지의 원격 변경 확인(본문·첨부 유지, 2분 캐시)
|
|
188
|
+
pull 아직 받지 않은 문서와 원격에서만 바뀐 문서 받기
|
|
189
|
+
restore 선택한 문서를 원격 최신으로 복구(--overwrite로 로컬 수정 원복)
|
|
190
|
+
diff 문서 내용 비교(--remote는 원격 본문 1회 조회)
|
|
191
|
+
add 다음 Push에 포함할 문서 선택
|
|
192
|
+
unstage 업로드 선택 해제(원본 유지)
|
|
193
|
+
push 선택한 문서 업로드(명시한 경로는 직접 처리)
|
|
194
|
+
web 로컬 웹 화면 실행
|
|
195
|
+
convert 로컬 문서 형식 변환
|
|
196
|
+
remap 고급: 이동한 로컬 파일의 매핑 정리
|
|
197
|
+
|
|
198
|
+
${bold('시작:')}
|
|
199
|
+
csync init → .env 값 입력 → csync pull
|
|
200
|
+
Pull 없이 로컬 문서부터: csync init → .env 값 입력 → csync init --connect
|
|
201
|
+
|
|
202
|
+
${bold('반복 작업:')}
|
|
203
|
+
csync fetch → csync status → csync pull
|
|
204
|
+
문서 편집 → csync diff 문서.md → csync add 문서.md
|
|
205
|
+
csync push --dry-run → csync push
|
|
206
|
+
|
|
207
|
+
Push는 선택한 문서만 처리하고, 기본 Pull은 로컬 수정·양쪽 변경을 보존합니다.
|
|
208
|
+
새 원격 문서는 Fetch로 발견하고 Pull로 받습니다. 자동 병합하지 않습니다.
|
|
209
|
+
add 후 문서·첨부·링크를 수정했다면 다시 add하세요.
|
|
210
|
+
CLI --dry-run은 선택 사항이며 원격 충돌 검사는 항상 적용합니다.
|
|
211
|
+
|
|
212
|
+
${bold('도움말:')}
|
|
213
|
+
csync <명령> --help 해당 명령의 옵션과 예제
|
|
214
|
+
csync --version 버전 확인
|
|
215
|
+
--no-color 색상 없이 출력(NO_COLOR 환경변수도 지원)
|
|
216
|
+
csync 도움말만 표시(업로드하지 않음)
|
|
217
|
+
confluence-sync도 같은 명령으로 사용할 수 있습니다.`);
|
|
119
218
|
}
|
package/dist/cli/init.js
CHANGED
|
@@ -6,6 +6,11 @@ import { existsSync, writeFileSync } from 'node:fs';
|
|
|
6
6
|
import { resolve } from 'node:path';
|
|
7
7
|
import { createInterface } from 'node:readline/promises';
|
|
8
8
|
import { stdin as input, stdout as output } from 'node:process';
|
|
9
|
+
import { loadWorkspace, resolveSyncBase } from '../sync/workspace.js';
|
|
10
|
+
import { migrateMetadata, mappingPath } from '../sync/metadata.js';
|
|
11
|
+
import { loadMapping } from '../sync/mapping.js';
|
|
12
|
+
import { connectWorkspace } from '../sync/scope.js';
|
|
13
|
+
import { readEnv } from '../confluence/config.js';
|
|
9
14
|
import { bold, cyan, dim, green, red, yellow } from '../shared/colors.js';
|
|
10
15
|
/** 일반 한 줄 입력(에코 표시). 매 질문마다 readline 을 새로 열고 닫아 stdin 경쟁을 피한다. */
|
|
11
16
|
async function promptLine(query) {
|
|
@@ -60,15 +65,49 @@ function promptSecret(query) {
|
|
|
60
65
|
});
|
|
61
66
|
}
|
|
62
67
|
export async function runInit(argv) {
|
|
63
|
-
|
|
68
|
+
if (argv.includes('--scope') || argv.includes('--confirm-scope'))
|
|
69
|
+
throw new Error('--scope 설정은 제거되었습니다. 기준 폴더가 스페이스 전체 작업공간입니다. 연결은 init --connect를 사용하세요.');
|
|
70
|
+
for (let i = 0; i < argv.length; i++) {
|
|
71
|
+
if (argv[i] === '--base') {
|
|
72
|
+
if (!argv[++i] || argv[i].startsWith('-'))
|
|
73
|
+
throw new Error('--base 뒤에 기준 폴더를 지정하세요.');
|
|
74
|
+
}
|
|
75
|
+
else if (!['init', '--connect', '--migrate', '--dry-run', '--force', '--no-color'].includes(argv[i]))
|
|
76
|
+
throw new Error(`지원하지 않는 init 인자: ${argv[i]}. csync init --help를 확인하세요.`);
|
|
77
|
+
}
|
|
78
|
+
if (argv.includes('--dry-run') && !argv.includes('--migrate'))
|
|
79
|
+
throw new Error('init --dry-run은 --migrate와 함께 사용하세요. .env 생성이나 연결은 실행하지 않았습니다.');
|
|
80
|
+
if (argv.includes('--force') && (argv.includes('--connect') || argv.includes('--migrate')))
|
|
81
|
+
throw new Error('init --force는 .env 생성에만 사용하세요.');
|
|
82
|
+
if (argv.includes('--migrate')) {
|
|
83
|
+
if (argv.includes('--connect'))
|
|
84
|
+
throw new Error('--migrate와 --connect는 각각 실행하세요.');
|
|
85
|
+
const index = argv.indexOf('--base');
|
|
86
|
+
const base = resolveSyncBase(index >= 0 ? argv[index + 1] : undefined) ?? process.cwd();
|
|
87
|
+
loadMapping(mappingPath(base));
|
|
88
|
+
loadWorkspace(base);
|
|
89
|
+
const count = migrateMetadata(base, argv.includes('--dry-run'));
|
|
90
|
+
console.log(`${argv.includes('--dry-run') ? '이전 미리보기' : '이전 완료'}: ${count}개 메타데이터. 문서·.env 유지, Confluence 호출 없음.`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (argv.includes('--connect')) {
|
|
94
|
+
const index = argv.indexOf('--base');
|
|
95
|
+
const base = resolveSyncBase(index >= 0 ? argv[index + 1] : undefined) ?? process.cwd();
|
|
96
|
+
const workspace = await connectWorkspace(base, readEnv(base));
|
|
97
|
+
console.log(`${green('스페이스 연결 완료:')} ${cyan(base)} ↔ ${cyan(workspace.connection.spaceKey)}`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const baseIndex = argv.indexOf('--base');
|
|
101
|
+
const base = resolve(baseIndex >= 0 ? argv[baseIndex + 1] : process.cwd());
|
|
102
|
+
const target = resolve(base, '.env');
|
|
103
|
+
const next = base === process.cwd() ? 'csync pull' : `csync pull --base ${JSON.stringify(base)}`;
|
|
64
104
|
const force = argv.includes('--force');
|
|
65
105
|
const fields = [
|
|
66
106
|
{ key: 'CONFLUENCE_BASE_URL', hint: 'https://api.atlassian.com/ex/confluence/<CLOUD_ID>/wiki 형식 (CLOUD_ID: <도메인>.atlassian.net/_edge/tenant_info 에서 확인)' },
|
|
67
107
|
{ key: 'CONFLUENCE_EMAIL', hint: 'Atlassian 계정 이메일' },
|
|
68
108
|
{ key: 'CONFLUENCE_API_TOKEN', hint: 'Scoped API 토큰 (id.atlassian.com → Create API token with scopes). 입력은 가려집니다', secret: true },
|
|
69
109
|
{ key: 'CONFLUENCE_SPACE_KEY', hint: 'URL .../wiki/spaces/<KEY>/... 의 KEY' },
|
|
70
|
-
{ key: '
|
|
71
|
-
{ key: 'CONFLUENCE_SYNC_BASE', hint: `동기화 루트 디렉토리 (기본: ${process.cwd()})`, optional: true, def: process.cwd() },
|
|
110
|
+
{ key: 'CONFLUENCE_SYNC_BASE', hint: `스페이스 문서 작업공간 (기본: ${base})`, optional: true, def: base },
|
|
72
111
|
];
|
|
73
112
|
const renderEnv = (vals) => '# confluence-sync 설정 (confluence-sync init 으로 생성)\n\n' +
|
|
74
113
|
fields.map((f) => `# ${f.hint}\n${f.key}=${vals[f.key] ?? ''}`).join('\n\n') +
|
|
@@ -90,7 +129,7 @@ export async function runInit(argv) {
|
|
|
90
129
|
// 비대화형(파이프/CI): 값 없이 빈 템플릿만 생성
|
|
91
130
|
if (!input.isTTY) {
|
|
92
131
|
writeFileSync(target, renderEnv({}));
|
|
93
|
-
console.log(`템플릿 .env 를 생성했습니다: ${target}\n
|
|
132
|
+
console.log(`템플릿 .env 를 생성했습니다: ${target}\n값 입력 후: ${next} (최초 전체 받기)\n다운로드 없이 연결만: csync init --connect --base ${JSON.stringify(base)}`);
|
|
94
133
|
return;
|
|
95
134
|
}
|
|
96
135
|
// 대화형 마법사
|
|
@@ -116,5 +155,5 @@ export async function runInit(argv) {
|
|
|
116
155
|
}
|
|
117
156
|
writeFileSync(target, renderEnv(values));
|
|
118
157
|
console.log(green(`\n✓ .env 생성 완료: ${target}`));
|
|
119
|
-
console.log(` 다음으로: ${cyan(
|
|
158
|
+
console.log(` 다음으로: ${cyan(next)} ${dim('(스페이스 전체를 최초로 가져옵니다)')}`);
|
|
120
159
|
}
|
package/dist/cli/main.js
CHANGED
|
@@ -1,48 +1,79 @@
|
|
|
1
|
+
import { withProgress } from '../shared/progress.js';
|
|
2
|
+
import { red } from '../shared/colors.js';
|
|
3
|
+
import { runRestore } from '../sync/restore.js';
|
|
4
|
+
import { runStatus } from './status.js';
|
|
5
|
+
import { runDiff } from '../sync/diff.js';
|
|
1
6
|
/** CLI command dispatch. Feature modules do not run on import. */
|
|
2
|
-
import 'dotenv/config';
|
|
3
7
|
import { positionalArgs } from './args.js';
|
|
4
8
|
import { printHelp, readPkgVersion } from './help.js';
|
|
5
9
|
import { runInit } from './init.js';
|
|
6
10
|
import { runConvert } from '../conversion/convert.js';
|
|
7
11
|
import { runPull } from '../sync/pull.js';
|
|
8
12
|
import { runRemap } from '../sync/remap.js';
|
|
13
|
+
import { runFetch } from '../sync/fetch.js';
|
|
14
|
+
import { runStaging } from '../sync/staging.js';
|
|
9
15
|
import { runPush } from '../sync/push.js';
|
|
10
16
|
const argv = process.argv.slice(2);
|
|
11
17
|
try {
|
|
12
18
|
if (argv.includes('--help') || argv.includes('-h'))
|
|
13
|
-
printHelp();
|
|
19
|
+
printHelp(positionalArgs(argv)[0]);
|
|
14
20
|
else if (argv.includes('--version') || argv.includes('-v'))
|
|
15
21
|
console.log(readPkgVersion());
|
|
16
22
|
else {
|
|
17
23
|
switch (positionalArgs(argv)[0]) {
|
|
24
|
+
case 'diff':
|
|
25
|
+
await withProgress(argv.includes('--remote') ? '원격 본문 비교' : '저장된 기준본과 문서 비교', () => runDiff(argv));
|
|
26
|
+
break;
|
|
27
|
+
case 'status':
|
|
28
|
+
await withProgress('로컬 변경과 업로드 선택 확인', () => runStatus(argv));
|
|
29
|
+
break;
|
|
30
|
+
case 'add':
|
|
31
|
+
case 'unstage':
|
|
32
|
+
await withProgress(positionalArgs(argv)[0] === 'add' ? '업로드 문서 선택 저장' : '업로드 선택 해제', () => runStaging(argv));
|
|
33
|
+
break;
|
|
18
34
|
case 'init':
|
|
19
|
-
|
|
35
|
+
if (argv.includes('--connect') || argv.includes('--migrate'))
|
|
36
|
+
await withProgress(argv.includes('--connect') ? '스페이스 작업공간 연결' : '메타데이터 이전 확인', () => runInit(argv));
|
|
37
|
+
else
|
|
38
|
+
await runInit(argv);
|
|
20
39
|
break;
|
|
21
40
|
case 'convert':
|
|
22
|
-
await runConvert(argv);
|
|
41
|
+
await withProgress('로컬 문서 변환', () => runConvert(argv));
|
|
23
42
|
break;
|
|
24
43
|
case 'remap':
|
|
25
|
-
await runRemap(argv);
|
|
44
|
+
await withProgress('페이지 ID와 로컬 경로 재연결', () => runRemap(argv));
|
|
26
45
|
break;
|
|
27
|
-
case '
|
|
46
|
+
case 'push': {
|
|
28
47
|
const args = [...argv];
|
|
29
|
-
args.splice(args.indexOf(
|
|
30
|
-
await runPush(args);
|
|
48
|
+
args.splice(args.indexOf(positionalArgs(argv)[0]), 1);
|
|
49
|
+
await withProgress(argv.includes('--list') ? '문서 목록 확인' : argv.includes('--dry-run') ? '업로드 미리보기' : 'Confluence 문서 업로드', () => runPush(args));
|
|
31
50
|
break;
|
|
32
51
|
}
|
|
52
|
+
case 'fetch':
|
|
53
|
+
await withProgress('원격 페이지 메타데이터 확인', () => runFetch(argv));
|
|
54
|
+
break;
|
|
55
|
+
case 'restore':
|
|
56
|
+
await withProgress('선택한 로컬 문서를 원격에서 복구', () => runRestore(argv));
|
|
57
|
+
break;
|
|
33
58
|
case 'pull':
|
|
34
|
-
await runPull(argv);
|
|
59
|
+
await withProgress('Confluence 문서 가져오기', () => runPull(argv));
|
|
35
60
|
break;
|
|
36
61
|
case 'web': {
|
|
37
62
|
const { runWeb } = await import('../web/server.js');
|
|
38
63
|
await runWeb(argv);
|
|
39
64
|
break;
|
|
40
65
|
}
|
|
41
|
-
|
|
66
|
+
case undefined:
|
|
67
|
+
if (!argv.length) {
|
|
68
|
+
printHelp();
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
throw new Error('실행할 명령을 지정하세요. 업로드: csync push, 가져오기: csync pull, 도움말: csync --help');
|
|
72
|
+
default: throw new Error('지원하지 않는 명령입니다. 업로드: csync push, 가져오기: csync pull, 도움말: csync --help');
|
|
42
73
|
}
|
|
43
74
|
}
|
|
44
75
|
}
|
|
45
76
|
catch (error) {
|
|
46
|
-
console.error(error instanceof Error ? error.message : String(error));
|
|
77
|
+
console.error(red(error instanceof Error ? error.message : String(error)));
|
|
47
78
|
process.exitCode = 1;
|
|
48
79
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** Git-like status from local files and the last saved Fetch observation. */
|
|
2
|
+
import { bold, cyan, blue, green, yellow, red, gray, dim } from '../shared/colors.js';
|
|
3
|
+
import { lstatSync } from 'node:fs';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { readEnv } from '../confluence/config.js';
|
|
6
|
+
import { inspectStaging } from '../sync/staging.js';
|
|
7
|
+
import { observeChanges, changeGroup } from '../sync/changes.js';
|
|
8
|
+
import { loadWorkspace, requireScope, resolveSyncBase } from '../sync/workspace.js';
|
|
9
|
+
export async function runStatus(argv) {
|
|
10
|
+
let explicitBase;
|
|
11
|
+
const referenceRoots = [];
|
|
12
|
+
for (let i = 0; i < argv.length; i++) {
|
|
13
|
+
const arg = argv[i];
|
|
14
|
+
if (arg === '--base' || arg === '--reference-root') {
|
|
15
|
+
const value = argv[++i];
|
|
16
|
+
if (!value || value.startsWith('-'))
|
|
17
|
+
throw new Error(`${arg} 뒤에 폴더를 지정하세요.`);
|
|
18
|
+
if (arg === '--base')
|
|
19
|
+
explicitBase = value;
|
|
20
|
+
else
|
|
21
|
+
referenceRoots.push(value);
|
|
22
|
+
}
|
|
23
|
+
else if (!['status', '--no-color'].includes(arg))
|
|
24
|
+
throw new Error(`지원하지 않는 status 인자: ${arg}. csync status --help를 확인하세요.`);
|
|
25
|
+
}
|
|
26
|
+
const base = resolveSyncBase(explicitBase);
|
|
27
|
+
if (!base)
|
|
28
|
+
throw new Error('작업공간이 없습니다. .env를 준비하고 csync pull 또는 csync init --connect를 실행하세요.');
|
|
29
|
+
const workspace = loadWorkspace(base);
|
|
30
|
+
requireScope(workspace);
|
|
31
|
+
const env = readEnv(base);
|
|
32
|
+
const view = observeChanges(base, await inspectStaging(base, { referenceRoots, baseUrl: env.baseUrl }), env);
|
|
33
|
+
console.log(`${bold('작업공간:')} ${cyan(resolve(base))}\n${bold('스페이스:')} ${cyan(workspace.connection.spaceKey)}`);
|
|
34
|
+
console.log(view.remoteCheckedAt
|
|
35
|
+
? `${dim('원격 확인: ' + view.remoteCheckedAt)}${view.remoteExpired ? yellow(' · 이전 조회 결과(2분 경과), csync fetch로 갱신하세요.') : dim(' · 저장된 Fetch 결과')}\n${dim('현재 상태는 마지막 조회 시점 기준입니다. 이번 API 요청: 0회')}`
|
|
36
|
+
: yellow('원격 미확인 · csync fetch로 원격 변경을 확인하세요. 이번 API 요청: 0회'));
|
|
37
|
+
if (view.remoteError)
|
|
38
|
+
console.log(yellow(view.remoteError));
|
|
39
|
+
const titles = { receive: '↓ 받을 변경', conflict: '! 양쪽 변경 · 비교 필요', attention: '! 확인 필요', send: '↑ 보낼 변경 · 로컬 작업', same: '변경 없음' };
|
|
40
|
+
const tones = { receive: cyan, conflict: red, attention: yellow, send: blue, same: gray };
|
|
41
|
+
const labels = { new: '로컬 신규', changed: '로컬 수정', moved: '로컬 이동', same: '로컬 변경 없음', unavailable: '로컬 파일 없음·제외 여부 확인' };
|
|
42
|
+
const detail = (row) => {
|
|
43
|
+
const selection = row.staged ? row.stale ? yellow('[재추가 필요]') : green('[추가됨]') : gray('[미선택]');
|
|
44
|
+
const group = changeGroup(row);
|
|
45
|
+
const pathTone = group === 'conflict' || group === 'attention' ? tones[group] : row.staged ? green : group === 'receive' ? cyan : (text) => text;
|
|
46
|
+
const remote = row.remoteState === 'unavailable' ? ' · 원격 조회 불가(삭제로 확정하지 않음)' : row.remoteState === 'unknown' ? ' · 원격 기준 확인 필요' : '';
|
|
47
|
+
const versions = row.remoteVersion !== undefined ? ` · 기준 v${row.baselineVersion ?? '?'} / 원격 v${row.remoteVersion}` : '';
|
|
48
|
+
return ` ${selection} ${pathTone(row.path)} · ${row.unmapped ? '받기 미완료 · 원격 대조 필요' : row.remoteState === 'new' ? '원격 신규' : row.renamed ? '로컬 경로 변경' : labels[row.status] ?? row.status}${gray(versions)}${yellow(remote)}`;
|
|
49
|
+
};
|
|
50
|
+
for (const group of ['receive', 'conflict', 'attention', 'send']) {
|
|
51
|
+
const rows = view.rows.filter(row => changeGroup(row) === group).sort((a, b) => a.path.localeCompare(b.path));
|
|
52
|
+
if (!rows.length)
|
|
53
|
+
continue;
|
|
54
|
+
console.log(`\n${bold(tones[group](titles[group] + ` (${rows.length}개)`))}`);
|
|
55
|
+
for (const row of rows) {
|
|
56
|
+
console.log(detail(row));
|
|
57
|
+
if (row.status === 'unavailable' && row.remoteState !== 'new' && row.pageId && !view.rows.some(other => other !== row && other.pageId === row.pageId && other.status !== 'unavailable')) {
|
|
58
|
+
try {
|
|
59
|
+
lstatSync(resolve(base, row.path));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error.code === 'ENOENT')
|
|
63
|
+
console.log(` 원격에서 복구: ${cyan(`csync restore ${JSON.stringify(row.path)}`)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (group === 'conflict' || group === 'attention')
|
|
67
|
+
for (const reason of row.remoteReasons ?? [])
|
|
68
|
+
console.log(dim(` ${reason}`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (view.rows.every(row => changeGroup(row) === 'same'))
|
|
72
|
+
console.log(view.remoteCheckedAt ? green('\n마지막 조회 기준 표시할 변경이 없습니다.') : dim('\n로컬 변경이 없습니다. 원격 상태는 아직 확인하지 않았습니다.'));
|
|
73
|
+
const staged = view.rows.filter(row => row.staged);
|
|
74
|
+
const attention = staged.filter(row => row.stale || row.status === 'unavailable').length;
|
|
75
|
+
console.log(`\n${bold('업로드 선택:')} ${green(`${staged.length}개`)} · 재추가·파일 확인 필요: ${(attention ? yellow : gray)(`${attention}개`)}`);
|
|
76
|
+
if (view.rows.some(row => changeGroup(row) === 'receive'))
|
|
77
|
+
console.log(`받기: ${cyan('csync pull')} · 원격 신규·변경 문서 받기, 로컬 수정·삭제 보존`);
|
|
78
|
+
if (view.rows.some(row => changeGroup(row) === 'conflict'))
|
|
79
|
+
console.log(`${red('양쪽 변경:')} ${cyan('csync diff "문서.md" --remote')}로 비교하세요. 자동 병합·덮어쓰기는 하지 않습니다.`);
|
|
80
|
+
if (view.rows.some(row => row.status === 'unavailable' && row.remoteState !== 'new'))
|
|
81
|
+
console.log(yellow('로컬 파일 누락·제외는 원격 삭제로 반영하지 않습니다. 이동·제외 규칙과 파일 위치를 확인하세요.'));
|
|
82
|
+
console.log(`보내기: ${cyan('csync add <파일·폴더>')} → ${cyan('csync push --dry-run')} → ${cyan('csync push')}\n선택 해제: ${cyan('csync unstage <파일·폴더>')} · 원본 유지\n새 원격 문서 확인: ${cyan('csync fetch')}`);
|
|
83
|
+
}
|