refactor: add typings
This commit is contained in:
@@ -9,6 +9,7 @@ import mdx from '@astrojs/mdx';
|
|||||||
import partytown from '@astrojs/partytown';
|
import partytown from '@astrojs/partytown';
|
||||||
import icon from 'astro-icon';
|
import icon from 'astro-icon';
|
||||||
import compress from 'astro-compress';
|
import compress from 'astro-compress';
|
||||||
|
import type { AstroIntegration } from 'astro';
|
||||||
|
|
||||||
import astrowind from './vendor/integration';
|
import astrowind from './vendor/integration';
|
||||||
|
|
||||||
@@ -21,7 +22,7 @@ import {
|
|||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
const hasExternalScripts = false;
|
const hasExternalScripts = false;
|
||||||
const whenExternalScripts = (items = []) =>
|
const whenExternalScripts = (items: (() => AstroIntegration) | (() => AstroIntegration)[] = []) =>
|
||||||
hasExternalScripts ? (Array.isArray(items) ? items.map((item) => item()) : [items()]) : [];
|
hasExternalScripts ? (Array.isArray(items) ? items.map((item) => item()) : [items()]) : [];
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
@@ -1,17 +1,18 @@
|
|||||||
import getReadingTime from 'reading-time';
|
import getReadingTime from 'reading-time';
|
||||||
import { toString } from 'mdast-util-to-string';
|
import { toString } from 'mdast-util-to-string';
|
||||||
import lazyLoadPlugin from 'rehype-plugin-image-native-lazy-loading';
|
import lazyLoadPlugin from 'rehype-plugin-image-native-lazy-loading';
|
||||||
|
import type { MarkdownAstroData, RehypePlugin, RemarkPlugin } from '@astrojs/markdown-remark';
|
||||||
|
|
||||||
export function readingTimeRemarkPlugin() {
|
export const readingTimeRemarkPlugin: RemarkPlugin = () => {
|
||||||
return function (tree, file) {
|
return function (tree, file) {
|
||||||
const textOnPage = toString(tree);
|
const textOnPage = toString(tree);
|
||||||
const readingTime = Math.ceil(getReadingTime(textOnPage).minutes);
|
const readingTime = Math.ceil(getReadingTime(textOnPage).minutes);
|
||||||
|
|
||||||
file.data.astro.frontmatter.readingTime = readingTime;
|
(file.data.astro as MarkdownAstroData).frontmatter.readingTime = readingTime;
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
|
||||||
export function responsiveTablesRehypePlugin() {
|
export const responsiveTablesRehypePlugin: RehypePlugin = () => {
|
||||||
return function (tree) {
|
return function (tree) {
|
||||||
if (!tree.children) return;
|
if (!tree.children) return;
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ export function responsiveTablesRehypePlugin() {
|
|||||||
const child = tree.children[i];
|
const child = tree.children[i];
|
||||||
|
|
||||||
if (child.type === 'element' && child.tagName === 'table') {
|
if (child.type === 'element' && child.tagName === 'table') {
|
||||||
const wrapper = {
|
tree.children[i] = {
|
||||||
type: 'element',
|
type: 'element',
|
||||||
tagName: 'div',
|
tagName: 'div',
|
||||||
properties: {
|
properties: {
|
||||||
@@ -28,12 +29,10 @@ export function responsiveTablesRehypePlugin() {
|
|||||||
children: [child],
|
children: [child],
|
||||||
};
|
};
|
||||||
|
|
||||||
tree.children[i] = wrapper;
|
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
|
||||||
export const lazyImagesRehypePlugin = lazyLoadPlugin;
|
export const lazyImagesRehypePlugin = lazyLoadPlugin;
|
||||||
|
9
vendor/integration/index.ts
vendored
9
vendor/integration/index.ts
vendored
@@ -1,11 +1,12 @@
|
|||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import os from 'node:os';
|
import os from 'node:os';
|
||||||
|
import type { AstroConfig, AstroIntegration } from 'astro';
|
||||||
|
|
||||||
import configBuilder from './utils/configBuilder';
|
import configBuilder, { type Config } from './utils/configBuilder';
|
||||||
import loadConfig from './utils/loadConfig';
|
import loadConfig from './utils/loadConfig';
|
||||||
|
|
||||||
export default ({ config: _themeConfig = 'src/config.yaml' } = {}) => {
|
export default ({ config: _themeConfig = 'src/config.yaml' } = {}): AstroIntegration => {
|
||||||
let cfg;
|
let cfg: AstroConfig;
|
||||||
return {
|
return {
|
||||||
name: 'astrowind-integration',
|
name: 'astrowind-integration',
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ export default ({ config: _themeConfig = 'src/config.yaml' } = {}) => {
|
|||||||
const virtualModuleId = 'astrowind:config';
|
const virtualModuleId = 'astrowind:config';
|
||||||
const resolvedVirtualModuleId = '\0' + virtualModuleId;
|
const resolvedVirtualModuleId = '\0' + virtualModuleId;
|
||||||
|
|
||||||
const rawJsonConfig = await loadConfig(_themeConfig);
|
const rawJsonConfig = (await loadConfig(_themeConfig)) as Config;
|
||||||
const { SITE, I18N, METADATA, APP_BLOG, UI, ANALYTICS } = configBuilder(rawJsonConfig);
|
const { SITE, I18N, METADATA, APP_BLOG, UI, ANALYTICS } = configBuilder(rawJsonConfig);
|
||||||
|
|
||||||
updateConfig({
|
updateConfig({
|
||||||
|
2
vendor/integration/utils/configBuilder.ts
vendored
2
vendor/integration/utils/configBuilder.ts
vendored
@@ -2,7 +2,7 @@ import merge from 'lodash.merge';
|
|||||||
|
|
||||||
import type { MetaData } from '~/types';
|
import type { MetaData } from '~/types';
|
||||||
|
|
||||||
type Config = {
|
export type Config = {
|
||||||
site?: SiteConfig;
|
site?: SiteConfig;
|
||||||
metadata?: MetaDataConfig;
|
metadata?: MetaDataConfig;
|
||||||
i18n?: I18NConfig;
|
i18n?: I18NConfig;
|
||||||
|
Reference in New Issue
Block a user