mirror of
https://github.com/DefectingCat/DefectingCat.github.io
synced 2025-07-15 16:51:37 +00:00
Update algolia search
This commit is contained in:
@ -20,20 +20,16 @@ export const getHeadings = (source: string) => {
|
||||
const regex = /<h2 id="(.*?)">(.*?)<\/h2>/g;
|
||||
const linkRegx = /id="(.*?)"/;
|
||||
|
||||
if (source.match(regex)) {
|
||||
return source.match(regex)?.map((heading) => {
|
||||
const headingText = heading
|
||||
.replace(/<h2 id="(.*?)">/, '')
|
||||
.replace(/<\/h2>/, '');
|
||||
return source.match(regex)?.map((heading) => {
|
||||
const headingText = heading
|
||||
.replace(/<h2 id="(.*?)">/, '')
|
||||
.replace(/<\/h2>/, '');
|
||||
|
||||
const link = '#' + heading.match(linkRegx)?.[1];
|
||||
const link = '#' + heading.match(linkRegx)?.[1];
|
||||
|
||||
return {
|
||||
text: headingText,
|
||||
link,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
return [];
|
||||
return {
|
||||
text: headingText,
|
||||
link,
|
||||
};
|
||||
});
|
||||
};
|
||||
|
@ -17,6 +17,7 @@
|
||||
"@mdx-js/loader": "^2.1.1",
|
||||
"@mdx-js/react": "^2.1.0",
|
||||
"@next/mdx": "^12.1.5",
|
||||
"algoliasearch": "^4.13.0",
|
||||
"classnames": "^2.3.1",
|
||||
"next": "12.1.0",
|
||||
"next-compose-plugins": "^2.2.1",
|
||||
@ -36,10 +37,12 @@
|
||||
"@types/node": "17.0.21",
|
||||
"@types/react": "17.0.41",
|
||||
"autoprefixer": "^10.4.4",
|
||||
"dotenv": "^16.0.0",
|
||||
"eslint": "8.11.0",
|
||||
"eslint-config-next": "12.1.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"jest": "^27.5.1",
|
||||
"nanoid": "^3.3.2",
|
||||
"postcss": "^8.4.12",
|
||||
"tailwindcss": "^3.0.23",
|
||||
"typescript": "4.6.2"
|
||||
|
@ -2,45 +2,50 @@ import { config } from 'dotenv';
|
||||
import algoliasearch from 'algoliasearch/lite.js';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import matter from 'gray-matter';
|
||||
|
||||
export const sortByDate = ({ date: a }, { date: b }) => {
|
||||
if (a < b) {
|
||||
return 1;
|
||||
} else if (a > b) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
import { nanoid } from 'nanoid';
|
||||
|
||||
/**
|
||||
* Read post meta info with gray-matter.
|
||||
* Build post information for Algolia search.
|
||||
* @param filename
|
||||
* @returns
|
||||
*/
|
||||
const readFileMeta = (filename) => {
|
||||
const markdownWithMeta = fs.readFileSync(
|
||||
path.join('pages/p', filename),
|
||||
'utf-8'
|
||||
);
|
||||
const slug = filename.replace(/\.mdx$/, '');
|
||||
const { data: meta } = matter(markdownWithMeta);
|
||||
return {
|
||||
slug,
|
||||
...{ ...meta },
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Read all posts with matter info.
|
||||
* @returns
|
||||
*/
|
||||
export const postLists = async () => {
|
||||
const postLists = () => {
|
||||
const files = fs.readdirSync(path.join('pages/p'));
|
||||
const posts = files.map(readFileMeta).sort(sortByDate);
|
||||
|
||||
return posts;
|
||||
const myPosts = [];
|
||||
files.map((f, fi) => {
|
||||
const content = fs.readFileSync(path.join('pages/p', f), 'utf-8');
|
||||
// const { data: meta, content } = matter(markdownWithMeta);
|
||||
|
||||
const slug = f.replace(/\.mdx$/, '');
|
||||
const regex = /^#{2}(?!#)(.*)/gm;
|
||||
|
||||
content.match(regex)?.map((heading, i) => {
|
||||
myPosts.push({
|
||||
content: null,
|
||||
hierarchy: {
|
||||
lvl0: 'Post',
|
||||
lvl1: slug,
|
||||
lvl2: heading.substring(3),
|
||||
},
|
||||
type: 'lvl2',
|
||||
objectID: `${nanoid()}-https://rua.plus/p/${slug}`,
|
||||
url: 'https://rua.plus/p/' + slug,
|
||||
});
|
||||
});
|
||||
|
||||
myPosts.push({
|
||||
content: null,
|
||||
hierarchy: {
|
||||
lvl0: 'Post',
|
||||
lvl1: slug,
|
||||
},
|
||||
type: 'lvl1',
|
||||
objectID: `${nanoid()}-https://rua.plus/p/${slug}`,
|
||||
url: 'https://rua.plus/p/' + slug,
|
||||
});
|
||||
});
|
||||
return myPosts;
|
||||
};
|
||||
|
||||
async function main() {
|
||||
@ -55,9 +60,7 @@ async function main() {
|
||||
}
|
||||
|
||||
try {
|
||||
const posts = await postLists();
|
||||
// All objects must have an unique objectID
|
||||
posts.forEach((p) => (p.objectID = p.slug));
|
||||
const posts = postLists();
|
||||
|
||||
// initialize the client with your environment variables
|
||||
const client = algoliasearch(
|
||||
@ -84,9 +87,10 @@ async function main() {
|
||||
}
|
||||
}
|
||||
|
||||
// (async () => {
|
||||
// const posts = await postLists();
|
||||
// console.log(posts);
|
||||
// })();
|
||||
function test() {
|
||||
const posts = postLists();
|
||||
posts.map((p) => console.log(p));
|
||||
}
|
||||
// test();
|
||||
|
||||
main();
|
||||
|
@ -5597,6 +5597,11 @@ nanoid@^3.1.30, nanoid@^3.3.1:
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
|
||||
integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
|
||||
|
||||
nanoid@^3.3.2:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.2.tgz#c89622fafb4381cd221421c69ec58547a1eec557"
|
||||
integrity sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==
|
||||
|
||||
napi-build-utils@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
|
||||
|
Reference in New Issue
Block a user