astroplugin-logseq 1.3.0 → 1.3.1
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/index.cjs +27 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +27 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -130,28 +130,37 @@ var processTagGroup = async (api, dateRef, target, logger) => {
|
|
|
130
130
|
};
|
|
131
131
|
|
|
132
132
|
// src/utils/recursively-get-content.ts
|
|
133
|
+
var processBlockContent = (block) => {
|
|
134
|
+
const rawText = block.fullTitle ?? "";
|
|
135
|
+
return rawText.replace(
|
|
136
|
+
/(`[^`]+`)|\[\[(.*?)\]\]/g,
|
|
137
|
+
(_match, code, linkContent) => {
|
|
138
|
+
if (code) return code;
|
|
139
|
+
const isCodeDisplay = block[":logseq.property.node/display-type"] === "code";
|
|
140
|
+
return isCodeDisplay ? `\`\`\`
|
|
141
|
+
[[${linkContent}]]
|
|
142
|
+
\`\`\`` : linkContent;
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
};
|
|
146
|
+
var getBlockPrefix = (block, depth) => {
|
|
147
|
+
const headingLevel = block[":logseq.property/heading"];
|
|
148
|
+
if (typeof headingLevel === "number" && headingLevel >= 1) {
|
|
149
|
+
return "#".repeat(headingLevel) + " ";
|
|
150
|
+
}
|
|
151
|
+
if (depth > 0) {
|
|
152
|
+
return "- ";
|
|
153
|
+
}
|
|
154
|
+
return "";
|
|
155
|
+
};
|
|
133
156
|
var recursivelyGetContent = (contentBlocks, depth = 0) => {
|
|
134
157
|
let content = "";
|
|
135
158
|
const indent = " ".repeat(depth);
|
|
136
159
|
for (const block of contentBlocks) {
|
|
137
|
-
const text = (block
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const isCodeDisplay = block[":logseq.property.node/display-type"] === "code";
|
|
142
|
-
return isCodeDisplay ? `\`\`\`
|
|
143
|
-
[[${linkContent}]]
|
|
144
|
-
\`\`\`` : linkContent;
|
|
145
|
-
}
|
|
146
|
-
);
|
|
147
|
-
if (depth === 0) {
|
|
148
|
-
content += `
|
|
149
|
-
|
|
150
|
-
${text}`;
|
|
151
|
-
} else {
|
|
152
|
-
content += `
|
|
153
|
-
${indent}- ${text}`;
|
|
154
|
-
}
|
|
160
|
+
const text = processBlockContent(block);
|
|
161
|
+
const prefix = getBlockPrefix(block, depth);
|
|
162
|
+
const separator = depth === 0 ? "\n\n" : "\n";
|
|
163
|
+
content += `${separator}${indent}${prefix}${text}`;
|
|
155
164
|
if (block.children && block.children.length > 0) {
|
|
156
165
|
content += recursivelyGetContent(block.children, depth + 1);
|
|
157
166
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/has-content-changed.ts","../src/utils/process-tag-group.ts","../src/api/get-date-prop-ident.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/recursively-get-content.ts","../src/utils/write-to-md.ts","../src/utils/get-clean-slug.ts"],"sourcesContent":["import { AstroIntegration } from 'astro'\nimport wretch from 'wretch'\n\nimport { LogseqIntegrationOptions } from './types'\nimport { processTagGroup } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n targets,\n dateRef,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info(`🚀 Logseq Poller Started (Every ${pollingInterval}ms)`)\n\n const api = wretch()\n .url(apiUrl)\n .headers({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n })\n\n setInterval(async () => {\n try {\n await Promise.all(\n targets.map((target) =>\n processTagGroup(api, dateRef, target, logger),\n ),\n )\n } catch (e: any) {\n logger.error(e.message || String(e))\n }\n }, pollingInterval)\n },\n 'astro:build:setup': async ({ logger }) => {\n logger.info('Building from Logseq...')\n },\n },\n }\n}\n","import fs from \"node:fs/promises\";\n\nexport const hasContentChanged = async (path: string, newContent: string) => {\n try {\n const currentContent = await fs.readFile(path, \"utf-8\");\n return currentContent !== newContent;\n } catch {\n return true;\n }\n};\n","import { AstroIntegrationLogger } from 'astro'\nimport { format, parse } from 'date-fns'\nimport { Wretch } from 'wretch/types'\n\nimport { getDatePropPage, getPageBlocksTree, getRawResponse } from '../api'\nimport { MappedResponse, TagTarget } from '../types'\nimport { recursivelyGetContent, writeToMd } from '.'\n\nexport const processTagGroup = async (\n api: Wretch,\n dateRef: string,\n target: TagTarget,\n logger: AstroIntegrationLogger,\n) => {\n const { tag, directory } = target\n const mappedResponse: MappedResponse[] = []\n\n const datePropPageIdent = await getDatePropPage(api, dateRef, logger)\n\n const rawResponse = await getRawResponse(api, datePropPageIdent, tag, logger)\n if (!rawResponse || rawResponse.length === 0) return\n\n for (const page of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, page, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(page['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(page['updated-at'], 'yyyy-MM-dd'),\n pageTitle: page.title,\n content: recursivelyGetContent(pbt),\n ...(datePropPageIdent && {\n date: parse(\n String(page[datePropPageIdent!]['journal-day']),\n 'yyyyMMdd',\n new Date(),\n ),\n }),\n })\n await writeToMd(directory, mappedResponse, logger)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { LogseqPageResponse } from 'src/types'\nimport { Wretch } from 'wretch/types'\n\nexport const getDatePropPage = async (\n api: Wretch,\n dateRef: string,\n logger: AstroIntegrationLogger,\n) => {\n try {\n const datePropPage = await api\n .post({\n method: 'logseq.Editor.getPage',\n args: [dateRef],\n })\n .json<LogseqPageResponse>()\n const datePropPageIdent = datePropPage.ident\n return datePropPageIdent\n } catch (e) {\n logger.info(`Unable to get page for date reference: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { ContentBlock, LogseqPageResponse } from '../types'\n\nexport const getPageBlocksTree = async (\n api: Wretch,\n page: LogseqPageResponse,\n logger: AstroIntegrationLogger,\n) => {\n try {\n return await api\n .post({\n method: 'logseq.Editor.getPageBlocksTree',\n args: [page.title.toLowerCase()],\n })\n .json<ContentBlock[]>()\n } catch (e) {\n logger.info(`Unable to get page blocks tree: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { LogseqPageResponse } from '../types'\n\nexport const getRawResponse = async (\n api: Wretch,\n datePropPageIdent: string | undefined,\n tag: string,\n logger: AstroIntegrationLogger,\n) => {\n const query = `\n [:find (pull ?p\n [:block/name\n :block/full-title\n :block/created-at\n :block/updated-at\n :block/title\n ${datePropPageIdent && `{${datePropPageIdent} [:block/journal-day]}`}\n {:block/_parent [:block/uuid]}])\n :where\n [?p :block/name]\n [?p :block/tags ?t]\n [?t :block/name \"${tag}\"]]`\n\n try {\n return (\n (await api\n .post({\n method: 'logseq.DB.datascriptQuery',\n args: [query],\n })\n .json<LogseqPageResponse[][]>()) ?? []\n )\n } catch (e) {\n logger.info(\n `Unable to query Logseq. Check if API server is running. ${String(e)}`,\n )\n }\n}\n","import { ContentBlock } from '../types'\n\nexport const recursivelyGetContent = (\n contentBlocks: ContentBlock[],\n depth = 0,\n) => {\n let content = ''\n const indent = ' '.repeat(depth)\n for (const block of contentBlocks) {\n const text = (block.fullTitle ?? '').replace(\n /(`[^`]+`)|\\[\\[(.*?)\\]\\]/g,\n (_match, code, linkContent) => {\n if (code) return code\n const isCodeDisplay =\n block[':logseq.property.node/display-type'] === 'code'\n return isCodeDisplay\n ? `\\`\\`\\`\\n[[${linkContent}]]\\n\\`\\`\\``\n : linkContent\n },\n )\n if (depth === 0) {\n content += `\\n\\n${text}`\n } else {\n content += `\\n${indent}- ${text}`\n }\n if (block.children && block.children.length > 0) {\n content += recursivelyGetContent(block.children, depth + 1)\n }\n }\n return content\n}\n","import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { AstroIntegrationLogger } from 'astro'\n\nimport { MappedResponse } from '../types'\nimport { hasContentChanged } from '.'\nimport { getCleanSlug } from './get-clean-slug'\n\nexport const writeToMd = async (\n directory: string,\n mappedResponse: MappedResponse[],\n logger: AstroIntegrationLogger,\n) => {\n const targetDir = path.resolve(process.cwd(), directory)\n\n try {\n await fs.mkdir(targetDir, { recursive: true })\n await Promise.all(\n mappedResponse.map(async (page) => {\n const cleanSlug = getCleanSlug(page)\n const filePath = path.join(targetDir, `${cleanSlug}.md`)\n const fileContent = `---\ntitle: ${page.pageTitle}\ndate: ${page.date}\n---\n${page.content}`\n const contentToSave = fileContent.trim()\n if (await hasContentChanged(filePath, contentToSave)) {\n await fs.writeFile(filePath, contentToSave, 'utf-8')\n }\n }),\n )\n } catch (e) {\n logger.info(`Unable to create MD files: ${String(e)}`)\n }\n}\n","import { MappedResponse } from '../types'\n\nexport const getCleanSlug = (page: MappedResponse) =>\n page.pageTitle\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n"],"mappings":"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","names":["path","fs","import_promises","path","fs","wretch"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/has-content-changed.ts","../src/utils/process-tag-group.ts","../src/api/get-date-prop-ident.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/recursively-get-content.ts","../src/utils/write-to-md.ts","../src/utils/get-clean-slug.ts"],"sourcesContent":["import { AstroIntegration } from 'astro'\nimport wretch from 'wretch'\n\nimport { LogseqIntegrationOptions } from './types'\nimport { processTagGroup } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n targets,\n dateRef,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info(`🚀 Logseq Poller Started (Every ${pollingInterval}ms)`)\n\n const api = wretch()\n .url(apiUrl)\n .headers({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n })\n\n setInterval(async () => {\n try {\n await Promise.all(\n targets.map((target) =>\n processTagGroup(api, dateRef, target, logger),\n ),\n )\n } catch (e: any) {\n logger.error(e.message || String(e))\n }\n }, pollingInterval)\n },\n 'astro:build:setup': async ({ logger }) => {\n logger.info('Building from Logseq...')\n },\n },\n }\n}\n","import fs from \"node:fs/promises\";\n\nexport const hasContentChanged = async (path: string, newContent: string) => {\n try {\n const currentContent = await fs.readFile(path, \"utf-8\");\n return currentContent !== newContent;\n } catch {\n return true;\n }\n};\n","import { AstroIntegrationLogger } from 'astro'\nimport { format, parse } from 'date-fns'\nimport { Wretch } from 'wretch/types'\n\nimport { getDatePropPage, getPageBlocksTree, getRawResponse } from '../api'\nimport { MappedResponse, TagTarget } from '../types'\nimport { recursivelyGetContent, writeToMd } from '.'\n\nexport const processTagGroup = async (\n api: Wretch,\n dateRef: string,\n target: TagTarget,\n logger: AstroIntegrationLogger,\n) => {\n const { tag, directory } = target\n const mappedResponse: MappedResponse[] = []\n\n const datePropPageIdent = await getDatePropPage(api, dateRef, logger)\n\n const rawResponse = await getRawResponse(api, datePropPageIdent, tag, logger)\n if (!rawResponse || rawResponse.length === 0) return\n\n for (const page of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, page, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(page['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(page['updated-at'], 'yyyy-MM-dd'),\n pageTitle: page.title,\n content: recursivelyGetContent(pbt),\n ...(datePropPageIdent && {\n date: parse(\n String(page[datePropPageIdent!]['journal-day']),\n 'yyyyMMdd',\n new Date(),\n ),\n }),\n })\n await writeToMd(directory, mappedResponse, logger)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { LogseqPageResponse } from 'src/types'\nimport { Wretch } from 'wretch/types'\n\nexport const getDatePropPage = async (\n api: Wretch,\n dateRef: string,\n logger: AstroIntegrationLogger,\n) => {\n try {\n const datePropPage = await api\n .post({\n method: 'logseq.Editor.getPage',\n args: [dateRef],\n })\n .json<LogseqPageResponse>()\n const datePropPageIdent = datePropPage.ident\n return datePropPageIdent\n } catch (e) {\n logger.info(`Unable to get page for date reference: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { ContentBlock, LogseqPageResponse } from '../types'\n\nexport const getPageBlocksTree = async (\n api: Wretch,\n page: LogseqPageResponse,\n logger: AstroIntegrationLogger,\n) => {\n try {\n return await api\n .post({\n method: 'logseq.Editor.getPageBlocksTree',\n args: [page.title.toLowerCase()],\n })\n .json<ContentBlock[]>()\n } catch (e) {\n logger.info(`Unable to get page blocks tree: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { LogseqPageResponse } from '../types'\n\nexport const getRawResponse = async (\n api: Wretch,\n datePropPageIdent: string | undefined,\n tag: string,\n logger: AstroIntegrationLogger,\n) => {\n const query = `\n [:find (pull ?p\n [:block/name\n :block/full-title\n :block/created-at\n :block/updated-at\n :block/title\n ${datePropPageIdent && `{${datePropPageIdent} [:block/journal-day]}`}\n {:block/_parent [:block/uuid]}])\n :where\n [?p :block/name]\n [?p :block/tags ?t]\n [?t :block/name \"${tag}\"]]`\n\n try {\n return (\n (await api\n .post({\n method: 'logseq.DB.datascriptQuery',\n args: [query],\n })\n .json<LogseqPageResponse[][]>()) ?? []\n )\n } catch (e) {\n logger.info(\n `Unable to query Logseq. Check if API server is running. ${String(e)}`,\n )\n }\n}\n","import { ContentBlock } from '../types'\n\nconst processBlockContent = (block: ContentBlock): string => {\n const rawText = block.fullTitle ?? ''\n\n return rawText.replace(\n /(`[^`]+`)|\\[\\[(.*?)\\]\\]/g,\n (_match, code, linkContent) => {\n if (code) return code\n\n const isCodeDisplay =\n block[':logseq.property.node/display-type'] === 'code'\n\n return isCodeDisplay ? `\\`\\`\\`\\n[[${linkContent}]]\\n\\`\\`\\`` : linkContent\n },\n )\n}\n\nconst getBlockPrefix = (block: ContentBlock, depth: number): string => {\n const headingLevel = block[':logseq.property/heading']\n if (typeof headingLevel === 'number' && headingLevel >= 1) {\n return '#'.repeat(headingLevel) + ' '\n }\n if (depth > 0) {\n return '- '\n }\n return ''\n}\n\nexport const recursivelyGetContent = (\n contentBlocks: ContentBlock[],\n depth = 0,\n) => {\n let content = ''\n const indent = ' '.repeat(depth)\n\n for (const block of contentBlocks) {\n const text = processBlockContent(block)\n const prefix = getBlockPrefix(block, depth)\n const separator = depth === 0 ? '\\n\\n' : '\\n'\n content += `${separator}${indent}${prefix}${text}`\n if (block.children && block.children.length > 0) {\n content += recursivelyGetContent(block.children, depth + 1)\n }\n }\n return content\n}\n","import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { AstroIntegrationLogger } from 'astro'\n\nimport { MappedResponse } from '../types'\nimport { hasContentChanged } from '.'\nimport { getCleanSlug } from './get-clean-slug'\n\nexport const writeToMd = async (\n directory: string,\n mappedResponse: MappedResponse[],\n logger: AstroIntegrationLogger,\n) => {\n const targetDir = path.resolve(process.cwd(), directory)\n\n try {\n await fs.mkdir(targetDir, { recursive: true })\n await Promise.all(\n mappedResponse.map(async (page) => {\n const cleanSlug = getCleanSlug(page)\n const filePath = path.join(targetDir, `${cleanSlug}.md`)\n const fileContent = `---\ntitle: ${page.pageTitle}\ndate: ${page.date}\n---\n${page.content}`\n const contentToSave = fileContent.trim()\n if (await hasContentChanged(filePath, contentToSave)) {\n await fs.writeFile(filePath, contentToSave, 'utf-8')\n }\n }),\n )\n } catch (e) {\n logger.info(`Unable to create MD files: ${String(e)}`)\n }\n}\n","import { MappedResponse } from '../types'\n\nexport const getCleanSlug = (page: MappedResponse) =>\n page.pageTitle\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n"],"mappings":"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","names":["path","fs","import_promises","path","fs","wretch"]}
|
package/dist/index.js
CHANGED
|
@@ -96,28 +96,37 @@ var processTagGroup = async (api, dateRef, target, logger) => {
|
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
// src/utils/recursively-get-content.ts
|
|
99
|
+
var processBlockContent = (block) => {
|
|
100
|
+
const rawText = block.fullTitle ?? "";
|
|
101
|
+
return rawText.replace(
|
|
102
|
+
/(`[^`]+`)|\[\[(.*?)\]\]/g,
|
|
103
|
+
(_match, code, linkContent) => {
|
|
104
|
+
if (code) return code;
|
|
105
|
+
const isCodeDisplay = block[":logseq.property.node/display-type"] === "code";
|
|
106
|
+
return isCodeDisplay ? `\`\`\`
|
|
107
|
+
[[${linkContent}]]
|
|
108
|
+
\`\`\`` : linkContent;
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
var getBlockPrefix = (block, depth) => {
|
|
113
|
+
const headingLevel = block[":logseq.property/heading"];
|
|
114
|
+
if (typeof headingLevel === "number" && headingLevel >= 1) {
|
|
115
|
+
return "#".repeat(headingLevel) + " ";
|
|
116
|
+
}
|
|
117
|
+
if (depth > 0) {
|
|
118
|
+
return "- ";
|
|
119
|
+
}
|
|
120
|
+
return "";
|
|
121
|
+
};
|
|
99
122
|
var recursivelyGetContent = (contentBlocks, depth = 0) => {
|
|
100
123
|
let content = "";
|
|
101
124
|
const indent = " ".repeat(depth);
|
|
102
125
|
for (const block of contentBlocks) {
|
|
103
|
-
const text = (block
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const isCodeDisplay = block[":logseq.property.node/display-type"] === "code";
|
|
108
|
-
return isCodeDisplay ? `\`\`\`
|
|
109
|
-
[[${linkContent}]]
|
|
110
|
-
\`\`\`` : linkContent;
|
|
111
|
-
}
|
|
112
|
-
);
|
|
113
|
-
if (depth === 0) {
|
|
114
|
-
content += `
|
|
115
|
-
|
|
116
|
-
${text}`;
|
|
117
|
-
} else {
|
|
118
|
-
content += `
|
|
119
|
-
${indent}- ${text}`;
|
|
120
|
-
}
|
|
126
|
+
const text = processBlockContent(block);
|
|
127
|
+
const prefix = getBlockPrefix(block, depth);
|
|
128
|
+
const separator = depth === 0 ? "\n\n" : "\n";
|
|
129
|
+
content += `${separator}${indent}${prefix}${text}`;
|
|
121
130
|
if (block.children && block.children.length > 0) {
|
|
122
131
|
content += recursivelyGetContent(block.children, depth + 1);
|
|
123
132
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/has-content-changed.ts","../src/utils/process-tag-group.ts","../src/api/get-date-prop-ident.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/recursively-get-content.ts","../src/utils/write-to-md.ts","../src/utils/get-clean-slug.ts"],"sourcesContent":["import { AstroIntegration } from 'astro'\nimport wretch from 'wretch'\n\nimport { LogseqIntegrationOptions } from './types'\nimport { processTagGroup } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n targets,\n dateRef,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info(`🚀 Logseq Poller Started (Every ${pollingInterval}ms)`)\n\n const api = wretch()\n .url(apiUrl)\n .headers({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n })\n\n setInterval(async () => {\n try {\n await Promise.all(\n targets.map((target) =>\n processTagGroup(api, dateRef, target, logger),\n ),\n )\n } catch (e: any) {\n logger.error(e.message || String(e))\n }\n }, pollingInterval)\n },\n 'astro:build:setup': async ({ logger }) => {\n logger.info('Building from Logseq...')\n },\n },\n }\n}\n","import fs from \"node:fs/promises\";\n\nexport const hasContentChanged = async (path: string, newContent: string) => {\n try {\n const currentContent = await fs.readFile(path, \"utf-8\");\n return currentContent !== newContent;\n } catch {\n return true;\n }\n};\n","import { AstroIntegrationLogger } from 'astro'\nimport { format, parse } from 'date-fns'\nimport { Wretch } from 'wretch/types'\n\nimport { getDatePropPage, getPageBlocksTree, getRawResponse } from '../api'\nimport { MappedResponse, TagTarget } from '../types'\nimport { recursivelyGetContent, writeToMd } from '.'\n\nexport const processTagGroup = async (\n api: Wretch,\n dateRef: string,\n target: TagTarget,\n logger: AstroIntegrationLogger,\n) => {\n const { tag, directory } = target\n const mappedResponse: MappedResponse[] = []\n\n const datePropPageIdent = await getDatePropPage(api, dateRef, logger)\n\n const rawResponse = await getRawResponse(api, datePropPageIdent, tag, logger)\n if (!rawResponse || rawResponse.length === 0) return\n\n for (const page of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, page, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(page['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(page['updated-at'], 'yyyy-MM-dd'),\n pageTitle: page.title,\n content: recursivelyGetContent(pbt),\n ...(datePropPageIdent && {\n date: parse(\n String(page[datePropPageIdent!]['journal-day']),\n 'yyyyMMdd',\n new Date(),\n ),\n }),\n })\n await writeToMd(directory, mappedResponse, logger)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { LogseqPageResponse } from 'src/types'\nimport { Wretch } from 'wretch/types'\n\nexport const getDatePropPage = async (\n api: Wretch,\n dateRef: string,\n logger: AstroIntegrationLogger,\n) => {\n try {\n const datePropPage = await api\n .post({\n method: 'logseq.Editor.getPage',\n args: [dateRef],\n })\n .json<LogseqPageResponse>()\n const datePropPageIdent = datePropPage.ident\n return datePropPageIdent\n } catch (e) {\n logger.info(`Unable to get page for date reference: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { ContentBlock, LogseqPageResponse } from '../types'\n\nexport const getPageBlocksTree = async (\n api: Wretch,\n page: LogseqPageResponse,\n logger: AstroIntegrationLogger,\n) => {\n try {\n return await api\n .post({\n method: 'logseq.Editor.getPageBlocksTree',\n args: [page.title.toLowerCase()],\n })\n .json<ContentBlock[]>()\n } catch (e) {\n logger.info(`Unable to get page blocks tree: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { LogseqPageResponse } from '../types'\n\nexport const getRawResponse = async (\n api: Wretch,\n datePropPageIdent: string | undefined,\n tag: string,\n logger: AstroIntegrationLogger,\n) => {\n const query = `\n [:find (pull ?p\n [:block/name\n :block/full-title\n :block/created-at\n :block/updated-at\n :block/title\n ${datePropPageIdent && `{${datePropPageIdent} [:block/journal-day]}`}\n {:block/_parent [:block/uuid]}])\n :where\n [?p :block/name]\n [?p :block/tags ?t]\n [?t :block/name \"${tag}\"]]`\n\n try {\n return (\n (await api\n .post({\n method: 'logseq.DB.datascriptQuery',\n args: [query],\n })\n .json<LogseqPageResponse[][]>()) ?? []\n )\n } catch (e) {\n logger.info(\n `Unable to query Logseq. Check if API server is running. ${String(e)}`,\n )\n }\n}\n","import { ContentBlock } from '../types'\n\nexport const recursivelyGetContent = (\n contentBlocks: ContentBlock[],\n depth = 0,\n) => {\n let content = ''\n const indent = ' '.repeat(depth)\n for (const block of contentBlocks) {\n const text = (block.fullTitle ?? '').replace(\n /(`[^`]+`)|\\[\\[(.*?)\\]\\]/g,\n (_match, code, linkContent) => {\n if (code) return code\n const isCodeDisplay =\n block[':logseq.property.node/display-type'] === 'code'\n return isCodeDisplay\n ? `\\`\\`\\`\\n[[${linkContent}]]\\n\\`\\`\\``\n : linkContent\n },\n )\n if (depth === 0) {\n content += `\\n\\n${text}`\n } else {\n content += `\\n${indent}- ${text}`\n }\n if (block.children && block.children.length > 0) {\n content += recursivelyGetContent(block.children, depth + 1)\n }\n }\n return content\n}\n","import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { AstroIntegrationLogger } from 'astro'\n\nimport { MappedResponse } from '../types'\nimport { hasContentChanged } from '.'\nimport { getCleanSlug } from './get-clean-slug'\n\nexport const writeToMd = async (\n directory: string,\n mappedResponse: MappedResponse[],\n logger: AstroIntegrationLogger,\n) => {\n const targetDir = path.resolve(process.cwd(), directory)\n\n try {\n await fs.mkdir(targetDir, { recursive: true })\n await Promise.all(\n mappedResponse.map(async (page) => {\n const cleanSlug = getCleanSlug(page)\n const filePath = path.join(targetDir, `${cleanSlug}.md`)\n const fileContent = `---\ntitle: ${page.pageTitle}\ndate: ${page.date}\n---\n${page.content}`\n const contentToSave = fileContent.trim()\n if (await hasContentChanged(filePath, contentToSave)) {\n await fs.writeFile(filePath, contentToSave, 'utf-8')\n }\n }),\n )\n } catch (e) {\n logger.info(`Unable to create MD files: ${String(e)}`)\n }\n}\n","import { MappedResponse } from '../types'\n\nexport const getCleanSlug = (page: MappedResponse) =>\n page.pageTitle\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n"],"mappings":"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","names":["path","fs","fs"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/has-content-changed.ts","../src/utils/process-tag-group.ts","../src/api/get-date-prop-ident.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/recursively-get-content.ts","../src/utils/write-to-md.ts","../src/utils/get-clean-slug.ts"],"sourcesContent":["import { AstroIntegration } from 'astro'\nimport wretch from 'wretch'\n\nimport { LogseqIntegrationOptions } from './types'\nimport { processTagGroup } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n targets,\n dateRef,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info(`🚀 Logseq Poller Started (Every ${pollingInterval}ms)`)\n\n const api = wretch()\n .url(apiUrl)\n .headers({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n })\n\n setInterval(async () => {\n try {\n await Promise.all(\n targets.map((target) =>\n processTagGroup(api, dateRef, target, logger),\n ),\n )\n } catch (e: any) {\n logger.error(e.message || String(e))\n }\n }, pollingInterval)\n },\n 'astro:build:setup': async ({ logger }) => {\n logger.info('Building from Logseq...')\n },\n },\n }\n}\n","import fs from \"node:fs/promises\";\n\nexport const hasContentChanged = async (path: string, newContent: string) => {\n try {\n const currentContent = await fs.readFile(path, \"utf-8\");\n return currentContent !== newContent;\n } catch {\n return true;\n }\n};\n","import { AstroIntegrationLogger } from 'astro'\nimport { format, parse } from 'date-fns'\nimport { Wretch } from 'wretch/types'\n\nimport { getDatePropPage, getPageBlocksTree, getRawResponse } from '../api'\nimport { MappedResponse, TagTarget } from '../types'\nimport { recursivelyGetContent, writeToMd } from '.'\n\nexport const processTagGroup = async (\n api: Wretch,\n dateRef: string,\n target: TagTarget,\n logger: AstroIntegrationLogger,\n) => {\n const { tag, directory } = target\n const mappedResponse: MappedResponse[] = []\n\n const datePropPageIdent = await getDatePropPage(api, dateRef, logger)\n\n const rawResponse = await getRawResponse(api, datePropPageIdent, tag, logger)\n if (!rawResponse || rawResponse.length === 0) return\n\n for (const page of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, page, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(page['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(page['updated-at'], 'yyyy-MM-dd'),\n pageTitle: page.title,\n content: recursivelyGetContent(pbt),\n ...(datePropPageIdent && {\n date: parse(\n String(page[datePropPageIdent!]['journal-day']),\n 'yyyyMMdd',\n new Date(),\n ),\n }),\n })\n await writeToMd(directory, mappedResponse, logger)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { LogseqPageResponse } from 'src/types'\nimport { Wretch } from 'wretch/types'\n\nexport const getDatePropPage = async (\n api: Wretch,\n dateRef: string,\n logger: AstroIntegrationLogger,\n) => {\n try {\n const datePropPage = await api\n .post({\n method: 'logseq.Editor.getPage',\n args: [dateRef],\n })\n .json<LogseqPageResponse>()\n const datePropPageIdent = datePropPage.ident\n return datePropPageIdent\n } catch (e) {\n logger.info(`Unable to get page for date reference: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { ContentBlock, LogseqPageResponse } from '../types'\n\nexport const getPageBlocksTree = async (\n api: Wretch,\n page: LogseqPageResponse,\n logger: AstroIntegrationLogger,\n) => {\n try {\n return await api\n .post({\n method: 'logseq.Editor.getPageBlocksTree',\n args: [page.title.toLowerCase()],\n })\n .json<ContentBlock[]>()\n } catch (e) {\n logger.info(`Unable to get page blocks tree: ${String(e)}`)\n }\n}\n","import { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { LogseqPageResponse } from '../types'\n\nexport const getRawResponse = async (\n api: Wretch,\n datePropPageIdent: string | undefined,\n tag: string,\n logger: AstroIntegrationLogger,\n) => {\n const query = `\n [:find (pull ?p\n [:block/name\n :block/full-title\n :block/created-at\n :block/updated-at\n :block/title\n ${datePropPageIdent && `{${datePropPageIdent} [:block/journal-day]}`}\n {:block/_parent [:block/uuid]}])\n :where\n [?p :block/name]\n [?p :block/tags ?t]\n [?t :block/name \"${tag}\"]]`\n\n try {\n return (\n (await api\n .post({\n method: 'logseq.DB.datascriptQuery',\n args: [query],\n })\n .json<LogseqPageResponse[][]>()) ?? []\n )\n } catch (e) {\n logger.info(\n `Unable to query Logseq. Check if API server is running. ${String(e)}`,\n )\n }\n}\n","import { ContentBlock } from '../types'\n\nconst processBlockContent = (block: ContentBlock): string => {\n const rawText = block.fullTitle ?? ''\n\n return rawText.replace(\n /(`[^`]+`)|\\[\\[(.*?)\\]\\]/g,\n (_match, code, linkContent) => {\n if (code) return code\n\n const isCodeDisplay =\n block[':logseq.property.node/display-type'] === 'code'\n\n return isCodeDisplay ? `\\`\\`\\`\\n[[${linkContent}]]\\n\\`\\`\\`` : linkContent\n },\n )\n}\n\nconst getBlockPrefix = (block: ContentBlock, depth: number): string => {\n const headingLevel = block[':logseq.property/heading']\n if (typeof headingLevel === 'number' && headingLevel >= 1) {\n return '#'.repeat(headingLevel) + ' '\n }\n if (depth > 0) {\n return '- '\n }\n return ''\n}\n\nexport const recursivelyGetContent = (\n contentBlocks: ContentBlock[],\n depth = 0,\n) => {\n let content = ''\n const indent = ' '.repeat(depth)\n\n for (const block of contentBlocks) {\n const text = processBlockContent(block)\n const prefix = getBlockPrefix(block, depth)\n const separator = depth === 0 ? '\\n\\n' : '\\n'\n content += `${separator}${indent}${prefix}${text}`\n if (block.children && block.children.length > 0) {\n content += recursivelyGetContent(block.children, depth + 1)\n }\n }\n return content\n}\n","import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { AstroIntegrationLogger } from 'astro'\n\nimport { MappedResponse } from '../types'\nimport { hasContentChanged } from '.'\nimport { getCleanSlug } from './get-clean-slug'\n\nexport const writeToMd = async (\n directory: string,\n mappedResponse: MappedResponse[],\n logger: AstroIntegrationLogger,\n) => {\n const targetDir = path.resolve(process.cwd(), directory)\n\n try {\n await fs.mkdir(targetDir, { recursive: true })\n await Promise.all(\n mappedResponse.map(async (page) => {\n const cleanSlug = getCleanSlug(page)\n const filePath = path.join(targetDir, `${cleanSlug}.md`)\n const fileContent = `---\ntitle: ${page.pageTitle}\ndate: ${page.date}\n---\n${page.content}`\n const contentToSave = fileContent.trim()\n if (await hasContentChanged(filePath, contentToSave)) {\n await fs.writeFile(filePath, contentToSave, 'utf-8')\n }\n }),\n )\n } catch (e) {\n logger.info(`Unable to create MD files: ${String(e)}`)\n }\n}\n","import { MappedResponse } from '../types'\n\nexport const getCleanSlug = (page: MappedResponse) =>\n page.pageTitle\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n"],"mappings":"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","names":["path","fs","fs"]}
|
package/package.json
CHANGED