astroplugin-logseq 0.0.1 → 0.0.2
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 +5 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/package.json +19 -5
package/dist/index.cjs
CHANGED
|
@@ -49,7 +49,7 @@ var getPageBlocksTree = async (api, item, logger) => {
|
|
|
49
49
|
};
|
|
50
50
|
|
|
51
51
|
// src/api/get-raw-response.ts
|
|
52
|
-
var getRawResponse = async (api, logger) => {
|
|
52
|
+
var getRawResponse = async (api, tag, logger) => {
|
|
53
53
|
const query = `
|
|
54
54
|
[:find (pull ?p
|
|
55
55
|
[:block/name
|
|
@@ -61,7 +61,7 @@ var getRawResponse = async (api, logger) => {
|
|
|
61
61
|
:where
|
|
62
62
|
[?p :block/name]
|
|
63
63
|
[?p :block/tags ?t]
|
|
64
|
-
[?t :block/name "
|
|
64
|
+
[?t :block/name "${tag}"]]`;
|
|
65
65
|
try {
|
|
66
66
|
return await api.post({
|
|
67
67
|
method: "logseq.DB.datascriptQuery",
|
|
@@ -144,7 +144,8 @@ function logseqIntegration(options) {
|
|
|
144
144
|
token,
|
|
145
145
|
apiUrl = "http://127.0.0.1:12315/api",
|
|
146
146
|
pollingInterval = 1e3,
|
|
147
|
-
directory = "src/content/docs/blog"
|
|
147
|
+
directory = "src/content/docs/blog",
|
|
148
|
+
tag = "public"
|
|
148
149
|
} = options;
|
|
149
150
|
return {
|
|
150
151
|
name: "astro-logseq-publish",
|
|
@@ -157,7 +158,7 @@ function logseqIntegration(options) {
|
|
|
157
158
|
});
|
|
158
159
|
setInterval(async () => {
|
|
159
160
|
try {
|
|
160
|
-
const rawResponse = await getRawResponse(api, logger);
|
|
161
|
+
const rawResponse = await getRawResponse(api, tag, logger);
|
|
161
162
|
if (!rawResponse) return;
|
|
162
163
|
const mappedResponse = [];
|
|
163
164
|
for (const item of rawResponse.flat()) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/has-content-changed.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 { format } from 'date-fns'\nimport wretch from 'wretch'\n\nimport { getPageBlocksTree, getRawResponse } from './api'\nimport { LogseqIntegrationOptions, MappedResponse } from './types'\nimport { recursivelyGetContent, writeToMd } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n directory = 'src/content/docs/blog',\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info('🚀 Logseq Poller Started (Every 3s)')\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 const rawResponse = await getRawResponse(api, logger)\n if (!rawResponse) return\n\n const mappedResponse: MappedResponse[] = []\n for (const item of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, item, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(item['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(item['updated-at'], 'yyyy-MM-dd'),\n pageTitle: item.title,\n content: recursivelyGetContent(pbt),\n })\n }\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/has-content-changed.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 { format } from 'date-fns'\nimport wretch from 'wretch'\n\nimport { getPageBlocksTree, getRawResponse } from './api'\nimport { LogseqIntegrationOptions, MappedResponse } from './types'\nimport { recursivelyGetContent, writeToMd } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n directory = 'src/content/docs/blog',\n tag = 'public',\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info('🚀 Logseq Poller Started (Every 3s)')\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 const rawResponse = await getRawResponse(api, tag, logger)\n if (!rawResponse) return\n\n const mappedResponse: MappedResponse[] = []\n for (const item of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, item, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(item['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(item['updated-at'], 'yyyy-MM-dd'),\n pageTitle: item.title,\n content: recursivelyGetContent(pbt),\n })\n }\n await writeToMd(directory, mappedResponse, logger)\n } catch (e: any) {\n logger.info(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 { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { ContentBlock, LogseqResponse } from '../types'\n\nexport const getPageBlocksTree = async (\n api: Wretch,\n item: LogseqResponse,\n logger: AstroIntegrationLogger,\n) => {\n try {\n return await api\n .post({\n method: 'logseq.Editor.getPageBlocksTree',\n args: [item.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 { LogseqResponse } from '../types'\n\nexport const getRawResponse = async (\n api: Wretch,\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 {:block/_parent ...}])\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<LogseqResponse[][]>()) ?? []\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 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 { 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.title || \"\";\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.createdAt}\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.d.cts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var getPageBlocksTree = async (api, item, logger) => {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
// src/api/get-raw-response.ts
|
|
18
|
-
var getRawResponse = async (api, logger) => {
|
|
18
|
+
var getRawResponse = async (api, tag, logger) => {
|
|
19
19
|
const query = `
|
|
20
20
|
[:find (pull ?p
|
|
21
21
|
[:block/name
|
|
@@ -27,7 +27,7 @@ var getRawResponse = async (api, logger) => {
|
|
|
27
27
|
:where
|
|
28
28
|
[?p :block/name]
|
|
29
29
|
[?p :block/tags ?t]
|
|
30
|
-
[?t :block/name "
|
|
30
|
+
[?t :block/name "${tag}"]]`;
|
|
31
31
|
try {
|
|
32
32
|
return await api.post({
|
|
33
33
|
method: "logseq.DB.datascriptQuery",
|
|
@@ -110,7 +110,8 @@ function logseqIntegration(options) {
|
|
|
110
110
|
token,
|
|
111
111
|
apiUrl = "http://127.0.0.1:12315/api",
|
|
112
112
|
pollingInterval = 1e3,
|
|
113
|
-
directory = "src/content/docs/blog"
|
|
113
|
+
directory = "src/content/docs/blog",
|
|
114
|
+
tag = "public"
|
|
114
115
|
} = options;
|
|
115
116
|
return {
|
|
116
117
|
name: "astro-logseq-publish",
|
|
@@ -123,7 +124,7 @@ function logseqIntegration(options) {
|
|
|
123
124
|
});
|
|
124
125
|
setInterval(async () => {
|
|
125
126
|
try {
|
|
126
|
-
const rawResponse = await getRawResponse(api, logger);
|
|
127
|
+
const rawResponse = await getRawResponse(api, tag, logger);
|
|
127
128
|
if (!rawResponse) return;
|
|
128
129
|
const mappedResponse = [];
|
|
129
130
|
for (const item of rawResponse.flat()) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/has-content-changed.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 { format } from 'date-fns'\nimport wretch from 'wretch'\n\nimport { getPageBlocksTree, getRawResponse } from './api'\nimport { LogseqIntegrationOptions, MappedResponse } from './types'\nimport { recursivelyGetContent, writeToMd } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n directory = 'src/content/docs/blog',\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info('🚀 Logseq Poller Started (Every 3s)')\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 const rawResponse = await getRawResponse(api, logger)\n if (!rawResponse) return\n\n const mappedResponse: MappedResponse[] = []\n for (const item of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, item, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(item['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(item['updated-at'], 'yyyy-MM-dd'),\n pageTitle: item.title,\n content: recursivelyGetContent(pbt),\n })\n }\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/api/get-page-blocks-tree.ts","../src/api/get-raw-response.ts","../src/utils/has-content-changed.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 { format } from 'date-fns'\nimport wretch from 'wretch'\n\nimport { getPageBlocksTree, getRawResponse } from './api'\nimport { LogseqIntegrationOptions, MappedResponse } from './types'\nimport { recursivelyGetContent, writeToMd } from './utils'\n\nexport default function logseqIntegration(\n options: LogseqIntegrationOptions,\n): AstroIntegration {\n const {\n token,\n apiUrl = 'http://127.0.0.1:12315/api',\n pollingInterval = 1000,\n directory = 'src/content/docs/blog',\n tag = 'public',\n } = options\n\n return {\n name: 'astro-logseq-publish',\n hooks: {\n 'astro:server:setup': ({ logger }) => {\n logger.info('🚀 Logseq Poller Started (Every 3s)')\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 const rawResponse = await getRawResponse(api, tag, logger)\n if (!rawResponse) return\n\n const mappedResponse: MappedResponse[] = []\n for (const item of rawResponse.flat()) {\n const pbt = await getPageBlocksTree(api, item, logger)\n if (!pbt) continue\n\n mappedResponse.push({\n createdAt: format(item['created-at'], 'yyyy-MM-dd'),\n updatedAt: format(item['updated-at'], 'yyyy-MM-dd'),\n pageTitle: item.title,\n content: recursivelyGetContent(pbt),\n })\n }\n await writeToMd(directory, mappedResponse, logger)\n } catch (e: any) {\n logger.info(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 { AstroIntegrationLogger } from 'astro'\nimport { Wretch } from 'wretch/types'\n\nimport { ContentBlock, LogseqResponse } from '../types'\n\nexport const getPageBlocksTree = async (\n api: Wretch,\n item: LogseqResponse,\n logger: AstroIntegrationLogger,\n) => {\n try {\n return await api\n .post({\n method: 'logseq.Editor.getPageBlocksTree',\n args: [item.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 { LogseqResponse } from '../types'\n\nexport const getRawResponse = async (\n api: Wretch,\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 {:block/_parent ...}])\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<LogseqResponse[][]>()) ?? []\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 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 { 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.title || \"\";\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.createdAt}\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
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "astroplugin-logseq",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"author": "benjypng",
|
|
5
5
|
"description": "Astro integration to sync Logseq pages as content collections",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/benjypng/astroplugin-logseq.git"
|
|
11
|
+
},
|
|
8
12
|
"main": "./dist/index.cjs",
|
|
9
13
|
"module": "./dist/index.js",
|
|
10
14
|
"types": "./dist/index.d.ts",
|
|
@@ -30,6 +34,15 @@
|
|
|
30
34
|
"dev": "tsup --watch",
|
|
31
35
|
"prepublishOnly": "npm run build"
|
|
32
36
|
},
|
|
37
|
+
"release": {
|
|
38
|
+
"branches": [
|
|
39
|
+
"main"
|
|
40
|
+
],
|
|
41
|
+
"plugins": [
|
|
42
|
+
"@semantic-release/npm",
|
|
43
|
+
"@semantic-release/github"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
33
46
|
"peerDependencies": {
|
|
34
47
|
"astro": "^5.0.0"
|
|
35
48
|
},
|
|
@@ -38,20 +51,21 @@
|
|
|
38
51
|
"wretch": "^3.0.6"
|
|
39
52
|
},
|
|
40
53
|
"devDependencies": {
|
|
41
|
-
"tsup": "^8.5.1",
|
|
42
|
-
"astro": "^5.16.6",
|
|
43
|
-
"@types/node": "^25.0.3",
|
|
44
|
-
"typescript": "^5.5.4",
|
|
45
54
|
"@eslint/js": "^9.8.0",
|
|
46
55
|
"@types/eslint": "^9.6.1",
|
|
47
56
|
"@types/eslint-config-prettier": "^6.11.3",
|
|
57
|
+
"@types/node": "^25.0.3",
|
|
48
58
|
"@typescript-eslint/eslint-plugin": "^8.51.0",
|
|
49
59
|
"@typescript-eslint/parser": "^8.51.0",
|
|
60
|
+
"astro": "^5.16.6",
|
|
50
61
|
"eslint": "^9.8.0",
|
|
51
62
|
"eslint-config-prettier": "^10.1.8",
|
|
52
63
|
"eslint-plugin-prettier": "^5.2.1",
|
|
53
64
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
54
65
|
"prettier": "^3.7.4",
|
|
66
|
+
"semantic-release": "^25.0.2",
|
|
67
|
+
"tsup": "^8.5.1",
|
|
68
|
+
"typescript": "^5.5.4",
|
|
55
69
|
"typescript-eslint": "^8.51.0"
|
|
56
70
|
}
|
|
57
71
|
}
|