@hanzo/docs-mdx 14.2.6 → 14.2.8
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/LICENSE +21 -0
- package/dist/{config-s4QVhqzA.js → adapter-DwaTu9dw.js} +40 -39
- package/dist/adapter-DwaTu9dw.js.map +1 -0
- package/dist/{build-DbdeZyKK.js → build-d7coQAP7.js} +2 -2
- package/dist/build-d7coQAP7.js.map +1 -0
- package/dist/{build-mdx-DyJk_jWV.d.ts → build-mdx-CaG9rsmy.d.ts} +7 -7
- package/dist/build-mdx-CaG9rsmy.d.ts.map +1 -0
- package/dist/{build-mdx-BTwSGUFs.js → build-mdx-k6Y12VXb.js} +12 -4
- package/dist/build-mdx-k6Y12VXb.js.map +1 -0
- package/dist/bun/index.d.ts +1 -1
- package/dist/bun/index.d.ts.map +1 -1
- package/dist/bun/index.js +8 -8
- package/dist/bun/index.js.map +1 -1
- package/dist/{codegen-IYa8t8xV.js → codegen-DzglA9tJ.js} +4 -4
- package/dist/codegen-DzglA9tJ.js.map +1 -0
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +3 -3
- package/dist/config/index.js.map +1 -1
- package/dist/{core-CCsY8cxS.js → core-DFgQdyqL.js} +12 -12
- package/dist/core-DFgQdyqL.js.map +1 -0
- package/dist/{core-CgLkZ4NQ.d.ts → core-cnMNewUq.d.ts} +42 -91
- package/dist/core-cnMNewUq.d.ts.map +1 -0
- package/dist/{fuma-matter-BWdOvvCf.js → frontmatter-DePDVaRD.js} +6 -6
- package/dist/frontmatter-DePDVaRD.js.map +1 -0
- package/dist/fs-cache-DjtD5cW9.js +31 -0
- package/dist/fs-cache-DjtD5cW9.js.map +1 -0
- package/dist/{index-Bc_4I1HE.d.ts → index-Jp-qanl0.d.ts} +1 -1
- package/dist/index-Jp-qanl0.d.ts.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/{load-from-file-Bx1TjN0x.js → load-from-file-C36LHYQZ.js} +5 -3
- package/dist/load-from-file-C36LHYQZ.js.map +1 -0
- package/dist/{loaders-BjG6ii1-.js → loaders-hcYVSfeh.js} +1 -1
- package/dist/{loaders-BjG6ii1-.js.map → loaders-hcYVSfeh.js.map} +1 -1
- package/dist/{mdx-DBBqLhht.js → mdx-DbiNLrgs.js} +9 -9
- package/dist/mdx-DbiNLrgs.js.map +1 -0
- package/dist/{meta-u6oJ9ej1.js → meta-C3cm2Bl5.js} +4 -4
- package/dist/meta-C3cm2Bl5.js.map +1 -0
- package/dist/next/index.cjs +21 -20
- package/dist/next/index.d.ts +2 -1
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +8 -8
- package/dist/next/index.js.map +1 -1
- package/dist/node/loader.d.ts.map +1 -1
- package/dist/node/loader.js +6 -6
- package/dist/node/loader.js.map +1 -1
- package/dist/plugins/index-file.d.ts +31 -2
- package/dist/plugins/index-file.d.ts.map +1 -0
- package/dist/plugins/index-file.js +236 -4
- package/dist/plugins/index-file.js.map +1 -0
- package/dist/plugins/json-schema.d.ts +1 -1
- package/dist/plugins/json-schema.d.ts.map +1 -1
- package/dist/plugins/json-schema.js +2 -2
- package/dist/plugins/json-schema.js.map +1 -1
- package/dist/plugins/last-modified.d.ts +1 -1
- package/dist/plugins/last-modified.d.ts.map +1 -1
- package/dist/plugins/last-modified.js +5 -5
- package/dist/plugins/last-modified.js.map +1 -1
- package/dist/{preset-D_quDsKp.js → preset-B14ViDfq.js} +1 -1
- package/dist/{preset-D_quDsKp.js.map → preset-B14ViDfq.js.map} +1 -1
- package/dist/{remark-include-BnRd6OBo.js → remark-include-DfEJ3erI.js} +4 -4
- package/dist/remark-include-DfEJ3erI.js.map +1 -0
- package/dist/rolldown-runtime-CjeV3_4I.js +18 -0
- package/dist/runtime/browser.d.ts +8 -8
- package/dist/runtime/browser.d.ts.map +1 -1
- package/dist/runtime/browser.js +12 -14
- package/dist/runtime/browser.js.map +1 -1
- package/dist/runtime/dynamic.d.ts +4 -2
- package/dist/runtime/dynamic.d.ts.map +1 -1
- package/dist/runtime/dynamic.js +9 -9
- package/dist/runtime/dynamic.js.map +1 -1
- package/dist/runtime/server.d.ts +49 -2
- package/dist/runtime/server.d.ts.map +1 -0
- package/dist/runtime/server.js +4 -10
- package/dist/runtime/server.js.map +1 -1
- package/dist/runtime/types.d.ts +63 -2
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/vite/index.d.ts +4 -3
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +18 -19
- package/dist/vite/index.js.map +1 -1
- package/dist/webpack/mdx.d.ts +3 -2
- package/dist/webpack/mdx.d.ts.map +1 -1
- package/dist/webpack/mdx.js +6 -6
- package/dist/webpack/mdx.js.map +1 -1
- package/dist/webpack/meta.d.ts +3 -2
- package/dist/webpack/meta.d.ts.map +1 -1
- package/dist/webpack/meta.js +5 -5
- package/dist/webpack/meta.js.map +1 -1
- package/dist/{webpack-fHsy5QQI.js → webpack-Cc8dY43s.js} +2 -2
- package/dist/webpack-Cc8dY43s.js.map +1 -0
- package/package.json +45 -29
- package/dist/build-DbdeZyKK.js.map +0 -1
- package/dist/build-mdx-BTwSGUFs.js.map +0 -1
- package/dist/build-mdx-Cg4YpCKX.js +0 -5
- package/dist/build-mdx-DyJk_jWV.d.ts.map +0 -1
- package/dist/codegen-IYa8t8xV.js.map +0 -1
- package/dist/config-s4QVhqzA.js.map +0 -1
- package/dist/core-CCsY8cxS.js.map +0 -1
- package/dist/core-CgLkZ4NQ.d.ts.map +0 -1
- package/dist/fuma-matter-BWdOvvCf.js.map +0 -1
- package/dist/index-Bc_4I1HE.d.ts.map +0 -1
- package/dist/index-file-DsOEtYCF.js +0 -264
- package/dist/index-file-DsOEtYCF.js.map +0 -1
- package/dist/load-from-file-Bx1TjN0x.js.map +0 -1
- package/dist/load-from-file-DPPJI83O.js +0 -5
- package/dist/mdx-DBBqLhht.js.map +0 -1
- package/dist/meta-u6oJ9ej1.js.map +0 -1
- package/dist/remark-include-BnRd6OBo.js.map +0 -1
- package/dist/types-CBMeukTI.d.ts +0 -63
- package/dist/types-CBMeukTI.d.ts.map +0 -1
- package/dist/webpack-fHsy5QQI.js.map +0 -1
package/dist/next/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["path"],"sources":["../../src/next/index.ts"],"sourcesContent":["import type { NextConfig } from 'next';\nimport type { Configuration } from 'webpack';\nimport type { WebpackLoaderOptions } from '../webpack';\nimport type { TurbopackLoaderOptions, TurbopackOptions } from 'next/dist/server/config-shared';\nimport * as path from 'node:path';\nimport { loadConfig } from '../config/load-from-file';\nimport { _Defaults, type Core, createCore } from '../core';\nimport { mdxLoaderGlob, metaLoaderGlob } from '../loaders';\nimport type { IndexFilePluginOptions } from '../plugins/index-file';\nimport indexFile from '../plugins/index-file';\n\nexport interface CreateMDXOptions {\n /**\n * Path to source configuration file\n */\n configPath?: string;\n\n /**\n * Directory for output files\n *\n * @defaultValue '.docs'\n */\n outDir?: string;\n\n index?: IndexFilePluginOptions | false;\n}\n\nconst defaultPageExtensions = ['mdx', 'md', 'jsx', 'js', 'tsx', 'ts'];\n\nexport function createMDX(createOptions: CreateMDXOptions = {}) {\n const core = createNextCore(applyDefaults(createOptions));\n const isDev = process.env.NODE_ENV === 'development';\n\n if (process.env._HANZO_DOCS_MDX !== '1') {\n process.env._HANZO_DOCS_MDX = '1';\n\n void init(isDev, core);\n }\n\n return (nextConfig: NextConfig = {}): NextConfig => {\n const { configPath, outDir } = core.getOptions();\n const loaderOptions: WebpackLoaderOptions = {\n configPath,\n outDir,\n absoluteCompiledConfigPath: path.resolve(core.getCompiledConfigPath()),\n isDev,\n };\n\n const turbopack: TurbopackOptions = {\n ...nextConfig.turbopack,\n rules: {\n ...nextConfig.turbopack?.rules,\n '*.{md,mdx}': {\n loaders: [\n {\n loader: '@hanzo/docs-mdx/loader-mdx',\n options: loaderOptions as unknown as TurbopackLoaderOptions,\n },\n ],\n as: '*.js',\n },\n '*.json': {\n loaders: [\n {\n loader: '@hanzo/docs-mdx/loader-meta',\n options: loaderOptions as unknown as TurbopackLoaderOptions,\n },\n ],\n as: '*.json',\n },\n '*.yaml': {\n loaders: [\n {\n loader: '@hanzo/docs-mdx/loader-meta',\n options: loaderOptions as unknown as TurbopackLoaderOptions,\n },\n ],\n as: '*.js',\n },\n },\n };\n\n return {\n ...nextConfig,\n turbopack,\n pageExtensions: nextConfig.pageExtensions ?? defaultPageExtensions,\n webpack: (config: Configuration, options) => {\n config.resolve ||= {};\n\n config.module ||= {};\n config.module.rules ||= [];\n\n config.module.rules.push(\n {\n test: mdxLoaderGlob,\n use: [\n options.defaultLoaders.babel,\n {\n loader: '@hanzo/docs-mdx/loader-mdx',\n options: loaderOptions,\n },\n ],\n },\n {\n test: metaLoaderGlob,\n enforce: 'pre',\n use: [\n {\n loader: '@hanzo/docs-mdx/loader-meta',\n options: loaderOptions,\n },\n ],\n },\n );\n\n config.plugins ||= [];\n\n return nextConfig.webpack?.(config, options) ?? config;\n },\n };\n };\n}\n\nasync function init(dev: boolean, core: Core): Promise<void> {\n async function initOrReload() {\n await core.init({\n config: loadConfig(core, true),\n });\n await core.emit({ write: true });\n }\n\n async function devServer() {\n const { FSWatcher } = await import('chokidar');\n const { configPath, outDir } = core.getOptions();\n const watcher = new FSWatcher({\n ignoreInitial: true,\n persistent: true,\n ignored: [outDir],\n });\n\n watcher.add(configPath);\n for (const collection of core.getCollections()) {\n watcher.add(collection.dir);\n }\n for (const workspace of core.getWorkspaces().values()) {\n for (const collection of workspace.getCollections()) {\n watcher.add(collection.dir);\n }\n }\n\n watcher.on('ready', () => {\n console.log('[MDX] started dev server');\n });\n\n const absoluteConfigPath = path.resolve(configPath);\n watcher.on('all', async (_event, file) => {\n if (path.resolve(file) === absoluteConfigPath) {\n // skip plugin listeners\n watcher.removeAllListeners();\n\n await watcher.close();\n await initOrReload();\n console.log('[MDX] restarting dev server');\n await devServer();\n }\n });\n\n process.on('exit', () => {\n if (watcher.closed) return;\n\n console.log('[MDX] closing dev server');\n void watcher.close();\n });\n\n await core.initServer({ watcher });\n }\n\n await initOrReload();\n if (dev) {\n await devServer();\n }\n}\n\nexport async function postInstall(options: CreateMDXOptions) {\n const core = createNextCore(applyDefaults(options));\n await core.init({\n config: loadConfig(core, true),\n });\n await core.emit({ write: true });\n}\n\nfunction applyDefaults(options: CreateMDXOptions): Required<CreateMDXOptions> {\n return {\n index: {},\n outDir: options.outDir ?? _Defaults.outDir,\n configPath: options.configPath ?? _Defaults.configPath,\n };\n}\n\nfunction createNextCore(options: Required<CreateMDXOptions>): Core {\n return createCore({\n environment: 'next',\n outDir: options.outDir,\n configPath: options.configPath,\n plugins: [options.index && indexFile(options.index)],\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","names":[],"sources":["../../src/node/loader.ts"],"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","names":[],"sources":["../../src/node/loader.ts"],"mappings":";;;cAsBa,IAAA,EAAM,QAAA"}
|
package/dist/node/loader.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "../
|
|
3
|
-
import "../
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import { t as createMetaLoader } from "../meta-
|
|
1
|
+
import "../frontmatter-DePDVaRD.js";
|
|
2
|
+
import { t as createMdxLoader } from "../mdx-DbiNLrgs.js";
|
|
3
|
+
import { n as createCore, t as _Defaults } from "../core-DFgQdyqL.js";
|
|
4
|
+
import "../codegen-DzglA9tJ.js";
|
|
5
|
+
import { n as toNode, o as createStandaloneConfigLoader } from "../adapter-DwaTu9dw.js";
|
|
6
|
+
import { t as createMetaLoader } from "../meta-C3cm2Bl5.js";
|
|
7
7
|
|
|
8
8
|
//#region src/node/loader.ts
|
|
9
9
|
const configLoader = createStandaloneConfigLoader({
|
package/dist/node/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","names":[
|
|
1
|
+
{"version":3,"file":"loader.js","names":[],"sources":["../../src/node/loader.ts"],"sourcesContent":["import { _Defaults, createCore } from '../core';\nimport { createMdxLoader } from '../loaders/mdx';\nimport { toNode } from '../loaders/adapter';\nimport { createStandaloneConfigLoader } from '../loaders/config';\nimport type { LoadHook } from 'node:module';\nimport { createMetaLoader } from '../loaders/meta';\n\nconst core = createCore({\n environment: 'node',\n configPath: _Defaults.configPath,\n outDir: _Defaults.outDir,\n});\n\nconst configLoader = createStandaloneConfigLoader({\n core,\n buildConfig: true,\n mode: 'production',\n});\n\nconst mdxLoader = toNode(createMdxLoader(configLoader));\nconst metaLoader = toNode(createMetaLoader(configLoader));\n\nexport const load: LoadHook = (url, context, nextLoad) => {\n return mdxLoader(url, context, (v, ctx) => metaLoader(v, { ...context, ...ctx }, nextLoad));\n};\n"],"mappings":";;;;;;;;AAaA,MAAM,eAAe,6BAA6B;CAChD,MAPW,WAAW;EACtB,aAAa;EACb,YAAY,UAAU;EACtB,QAAQ,UAAU;EACnB,CAAC;CAIA,aAAa;CACb,MAAM;CACP,CAAC;AAEF,MAAM,YAAY,OAAO,gBAAgB,aAAa,CAAC;AACvD,MAAM,aAAa,OAAO,iBAAiB,aAAa,CAAC;AAEzD,MAAa,QAAkB,KAAK,SAAS,aAAa;AACxD,QAAO,UAAU,KAAK,UAAU,GAAG,QAAQ,WAAW,GAAG;EAAE,GAAG;EAAS,GAAG;EAAK,EAAE,SAAS,CAAC"}
|
|
@@ -1,2 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { c as PluginContext, s as Plugin } from "../core-cnMNewUq.js";
|
|
2
|
+
import { ServerOptions } from "../runtime/server.js";
|
|
3
|
+
|
|
4
|
+
//#region src/plugins/index-file.d.ts
|
|
5
|
+
interface IndexFilePluginOptions {
|
|
6
|
+
target?: 'default' | 'vite';
|
|
7
|
+
/**
|
|
8
|
+
* add `.js` extensions to imports, needed for ESM without bundler resolution
|
|
9
|
+
*/
|
|
10
|
+
addJsExtension?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Generate entry point for browser
|
|
13
|
+
* @defaultValue true
|
|
14
|
+
*/
|
|
15
|
+
browser?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Generate entry point for dynamic compilation
|
|
18
|
+
* @defaultValue true
|
|
19
|
+
*/
|
|
20
|
+
dynamic?: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface IndexFilePlugin {
|
|
23
|
+
['index-file']?: {
|
|
24
|
+
generateTypeConfig?: (this: PluginContext) => string | void;
|
|
25
|
+
serverOptions?: (this: PluginContext, options: ServerOptions) => void;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
declare function indexFile(options?: IndexFilePluginOptions): Plugin;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { IndexFilePlugin, IndexFilePluginOptions, indexFile as default };
|
|
31
|
+
//# sourceMappingURL=index-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-file.d.ts","names":[],"sources":["../../src/plugins/index-file.ts"],"mappings":";;;;UAYiB,sBAAA;EACf,MAAA;EADe;;;EAMf,cAAA;EALA;;;;EAWA,OAAA;EAMO;AAGT;;;EAHE,OAAA;AAAA;AAAA,UAGe,eAAA;EAAA,CACd,YAAA;IACC,kBAAA,IAAsB,IAAA,EAAM,aAAA;IAC5B,aAAA,IAAiB,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,aAAA;EAAA;AAAA;AAAA,iBAc3B,SAAA,CAAU,OAAA,GAAS,sBAAA,GAA8B,MAAA"}
|
|
@@ -1,5 +1,237 @@
|
|
|
1
|
-
import "../
|
|
2
|
-
import { t as
|
|
3
|
-
import "../
|
|
1
|
+
import { t as parseFrontmatter } from "../frontmatter-DePDVaRD.js";
|
|
2
|
+
import { n as ident, r as slash, t as createCodegen } from "../codegen-DzglA9tJ.js";
|
|
3
|
+
import { t as createFSCache } from "../fs-cache-DjtD5cW9.js";
|
|
4
|
+
import { glob } from "tinyglobby";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import { createHash } from "crypto";
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
//#region src/plugins/index-file.ts
|
|
9
|
+
const indexFileCache = createFSCache();
|
|
10
|
+
function indexFile(options = {}) {
|
|
11
|
+
const { target = "default", addJsExtension, browser = true, dynamic = true } = options;
|
|
12
|
+
let dynamicCollections;
|
|
13
|
+
function isDynamic(collection) {
|
|
14
|
+
return collection.type === "docs" && collection.docs.dynamic || collection.type === "doc" && collection.dynamic;
|
|
15
|
+
}
|
|
16
|
+
function generateConfigs(core) {
|
|
17
|
+
const serverOptions = {};
|
|
18
|
+
const typeConfigs = ["import(\"@hanzo/docs-mdx/runtime/types\").InternalTypeConfig"];
|
|
19
|
+
const ctx = core.getPluginContext();
|
|
20
|
+
for (const plugin of core.getPlugins()) {
|
|
21
|
+
const indexFilePlugin = plugin["index-file"];
|
|
22
|
+
if (!indexFilePlugin) continue;
|
|
23
|
+
indexFilePlugin.serverOptions?.call(ctx, serverOptions);
|
|
24
|
+
const config = indexFilePlugin.generateTypeConfig?.call(ctx);
|
|
25
|
+
if (config) typeConfigs.push(config);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
serverOptions,
|
|
29
|
+
tc: typeConfigs.join(" & ")
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
name: "index-file",
|
|
34
|
+
config() {
|
|
35
|
+
dynamicCollections = this.core.getCollections().filter(isDynamic);
|
|
36
|
+
},
|
|
37
|
+
configureServer(server) {
|
|
38
|
+
if (!server.watcher) return;
|
|
39
|
+
server.watcher.on("all", async (event, file) => {
|
|
40
|
+
indexFileCache.delete(file);
|
|
41
|
+
if (dynamicCollections.length === 0) {
|
|
42
|
+
if (target === "vite") return;
|
|
43
|
+
if (target === "default" && event === "change") return;
|
|
44
|
+
}
|
|
45
|
+
const updatedCollection = this.core.getCollections().find((collection) => collection.hasFile(file));
|
|
46
|
+
if (!updatedCollection) return;
|
|
47
|
+
if (!isDynamic(updatedCollection)) {
|
|
48
|
+
if (target === "vite") return;
|
|
49
|
+
if (target === "default" && event === "change") return;
|
|
50
|
+
}
|
|
51
|
+
await this.core.emit({
|
|
52
|
+
filterPlugin: (plugin) => plugin.name === "index-file",
|
|
53
|
+
filterWorkspace: () => false,
|
|
54
|
+
write: true
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
async emit() {
|
|
59
|
+
const globCache = /* @__PURE__ */ new Map();
|
|
60
|
+
const { workspace, outDir } = this.core.getOptions();
|
|
61
|
+
const { serverOptions, tc } = generateConfigs(this.core);
|
|
62
|
+
const toEmitEntry = async (path, content) => {
|
|
63
|
+
const codegen = createCodegen({
|
|
64
|
+
target,
|
|
65
|
+
outDir,
|
|
66
|
+
jsExtension: addJsExtension,
|
|
67
|
+
globCache
|
|
68
|
+
});
|
|
69
|
+
await content({
|
|
70
|
+
core: this.core,
|
|
71
|
+
codegen,
|
|
72
|
+
serverOptions,
|
|
73
|
+
tc,
|
|
74
|
+
workspace: workspace?.name
|
|
75
|
+
});
|
|
76
|
+
return {
|
|
77
|
+
path,
|
|
78
|
+
content: codegen.toString()
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
const out = [toEmitEntry("server.ts", generateServerIndexFile)];
|
|
82
|
+
if (dynamic) out.push(toEmitEntry("dynamic.ts", generateDynamicIndexFile));
|
|
83
|
+
if (browser) out.push(toEmitEntry("browser.ts", generateBrowserIndexFile));
|
|
84
|
+
return await Promise.all(out);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function generateServerIndexFile(ctx) {
|
|
89
|
+
const { core, codegen, serverOptions, tc } = ctx;
|
|
90
|
+
codegen.lines.push(`import { server } from '@hanzo/docs-mdx/runtime/server';`, `import type * as Config from '${codegen.formatImportPath(core.getOptions().configPath)}';`, "", `const create = server<typeof Config, ${tc}>(${JSON.stringify(serverOptions)});`);
|
|
91
|
+
async function generateCollectionObject(collection) {
|
|
92
|
+
const base = getBase(collection);
|
|
93
|
+
switch (collection.type) {
|
|
94
|
+
case "docs": {
|
|
95
|
+
if (collection.docs.dynamic) return;
|
|
96
|
+
if (collection.docs.async) {
|
|
97
|
+
const [metaGlob, headGlob, bodyGlob] = await Promise.all([
|
|
98
|
+
generateMetaCollectionGlob(ctx, collection.meta, true),
|
|
99
|
+
generateDocCollectionFrontmatterGlob(ctx, collection.docs, true),
|
|
100
|
+
generateDocCollectionGlob(ctx, collection.docs)
|
|
101
|
+
]);
|
|
102
|
+
return `await create.docsLazy("${collection.name}", "${base}", ${metaGlob}, ${headGlob}, ${bodyGlob})`;
|
|
103
|
+
}
|
|
104
|
+
const [metaGlob, docGlob] = await Promise.all([generateMetaCollectionGlob(ctx, collection.meta, true), generateDocCollectionGlob(ctx, collection.docs, true)]);
|
|
105
|
+
return `await create.docs("${collection.name}", "${base}", ${metaGlob}, ${docGlob})`;
|
|
106
|
+
}
|
|
107
|
+
case "doc":
|
|
108
|
+
if (collection.dynamic) return;
|
|
109
|
+
if (collection.async) {
|
|
110
|
+
const [headGlob, bodyGlob] = await Promise.all([generateDocCollectionFrontmatterGlob(ctx, collection, true), generateDocCollectionGlob(ctx, collection)]);
|
|
111
|
+
return `await create.docLazy("${collection.name}", "${base}", ${headGlob}, ${bodyGlob})`;
|
|
112
|
+
}
|
|
113
|
+
return `await create.doc("${collection.name}", "${base}", ${await generateDocCollectionGlob(ctx, collection, true)})`;
|
|
114
|
+
case "meta": return `await create.meta("${collection.name}", "${base}", ${await generateMetaCollectionGlob(ctx, collection, true)})`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
await codegen.pushAsync(core.getCollections().map(async (collection) => {
|
|
118
|
+
const obj = await generateCollectionObject(collection);
|
|
119
|
+
if (!obj) return;
|
|
120
|
+
return `\nexport const ${collection.name} = ${obj};`;
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
async function generateDynamicIndexFile(ctx) {
|
|
124
|
+
const { core, codegen, serverOptions, tc } = ctx;
|
|
125
|
+
const { configPath, environment, outDir } = core.getOptions();
|
|
126
|
+
const partialOptions = {
|
|
127
|
+
configPath,
|
|
128
|
+
environment,
|
|
129
|
+
outDir
|
|
130
|
+
};
|
|
131
|
+
codegen.lines.push(`import { dynamic } from '@hanzo/docs-mdx/runtime/dynamic';`, `import * as Config from '${codegen.formatImportPath(configPath)}';`, "", `const create = await dynamic<typeof Config, ${tc}>(Config, ${JSON.stringify(partialOptions)}, ${JSON.stringify(serverOptions)});`);
|
|
132
|
+
async function generateCollectionObjectEntry(collection, absolutePath) {
|
|
133
|
+
const fullPath = path.relative(process.cwd(), absolutePath);
|
|
134
|
+
const content = await indexFileCache.read(fullPath).catch(() => "");
|
|
135
|
+
const parsed = parseFrontmatter(content);
|
|
136
|
+
const data = await core.transformFrontmatter({
|
|
137
|
+
collection,
|
|
138
|
+
filePath: fullPath,
|
|
139
|
+
source: content
|
|
140
|
+
}, parsed.data);
|
|
141
|
+
const hash = createHash("md5").update(content).digest("hex");
|
|
142
|
+
const infoStr = [`absolutePath: path.resolve(${JSON.stringify(fullPath)})`];
|
|
143
|
+
for (const [k, v] of Object.entries({
|
|
144
|
+
info: {
|
|
145
|
+
fullPath,
|
|
146
|
+
path: path.relative(collection.dir, absolutePath)
|
|
147
|
+
},
|
|
148
|
+
data,
|
|
149
|
+
hash
|
|
150
|
+
})) infoStr.push(`${k}: ${JSON.stringify(v)}`);
|
|
151
|
+
return `{ ${infoStr.join(", ")} }`;
|
|
152
|
+
}
|
|
153
|
+
async function generateCollectionObject(parent) {
|
|
154
|
+
let collection;
|
|
155
|
+
if (parent.type === "doc") collection = parent;
|
|
156
|
+
else if (parent.type === "docs") collection = parent.docs;
|
|
157
|
+
if (!collection || !collection.dynamic) return;
|
|
158
|
+
const files = await glob(collection.patterns, {
|
|
159
|
+
cwd: collection.dir,
|
|
160
|
+
absolute: true
|
|
161
|
+
});
|
|
162
|
+
const entries = await Promise.all(files.map((file) => generateCollectionObjectEntry(collection, file)));
|
|
163
|
+
switch (parent.type) {
|
|
164
|
+
case "docs": {
|
|
165
|
+
const metaGlob = await generateMetaCollectionGlob(ctx, parent.meta, true);
|
|
166
|
+
return `await create.docs("${parent.name}", "${getBase(parent)}", ${metaGlob}, ${entries.join(", ")})`;
|
|
167
|
+
}
|
|
168
|
+
case "doc": return `await create.doc("${collection.name}", "${getBase(collection)}", ${entries.join(", ")})`;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
await codegen.pushAsync(core.getCollections().map(async (collection) => {
|
|
172
|
+
const obj = await generateCollectionObject(collection);
|
|
173
|
+
if (!obj) return;
|
|
174
|
+
return `\nexport const ${collection.name} = ${obj};`;
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
async function generateBrowserIndexFile(ctx) {
|
|
178
|
+
const { core, codegen, tc } = ctx;
|
|
179
|
+
codegen.lines.push(`import { browser } from '@hanzo/docs-mdx/runtime/browser';`, `import type * as Config from '${codegen.formatImportPath(core.getOptions().configPath)}';`, "", `const create = browser<typeof Config, ${tc}>();`);
|
|
180
|
+
async function generateCollectionObject(collection) {
|
|
181
|
+
switch (collection.type) {
|
|
182
|
+
case "docs":
|
|
183
|
+
if (collection.docs.dynamic) return;
|
|
184
|
+
return generateCollectionObject(collection.docs);
|
|
185
|
+
case "doc":
|
|
186
|
+
if (collection.dynamic) return;
|
|
187
|
+
return `create.doc("${collection.name}", ${await generateDocCollectionGlob(ctx, collection)})`;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
codegen.lines.push("const browserCollections = {");
|
|
191
|
+
await codegen.pushAsync(core.getCollections().map(async (collection) => {
|
|
192
|
+
const obj = await generateCollectionObject(collection);
|
|
193
|
+
if (!obj) return;
|
|
194
|
+
return ident(`${collection.name}: ${obj},`);
|
|
195
|
+
}));
|
|
196
|
+
codegen.lines.push("};", "export default browserCollections;");
|
|
197
|
+
}
|
|
198
|
+
function getBase(collection) {
|
|
199
|
+
return slash(path.relative(process.cwd(), collection.dir));
|
|
200
|
+
}
|
|
201
|
+
function generateDocCollectionFrontmatterGlob({ codegen, workspace }, collection, eager = false) {
|
|
202
|
+
return codegen.generateGlobImport(collection.patterns, {
|
|
203
|
+
query: {
|
|
204
|
+
collection: collection.name,
|
|
205
|
+
only: "frontmatter",
|
|
206
|
+
workspace
|
|
207
|
+
},
|
|
208
|
+
import: "frontmatter",
|
|
209
|
+
base: collection.dir,
|
|
210
|
+
eager
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
function generateDocCollectionGlob({ codegen, workspace }, collection, eager = false) {
|
|
214
|
+
return codegen.generateGlobImport(collection.patterns, {
|
|
215
|
+
query: {
|
|
216
|
+
collection: collection.name,
|
|
217
|
+
workspace
|
|
218
|
+
},
|
|
219
|
+
base: collection.dir,
|
|
220
|
+
eager
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
function generateMetaCollectionGlob({ codegen, workspace }, collection, eager = false) {
|
|
224
|
+
return codegen.generateGlobImport(collection.patterns, {
|
|
225
|
+
query: {
|
|
226
|
+
collection: collection.name,
|
|
227
|
+
workspace
|
|
228
|
+
},
|
|
229
|
+
import: "default",
|
|
230
|
+
base: collection.dir,
|
|
231
|
+
eager
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
//#endregion
|
|
236
|
+
export { indexFile as default };
|
|
237
|
+
//# sourceMappingURL=index-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-file.js","names":[],"sources":["../../src/plugins/index-file.ts"],"sourcesContent":["import type { Core, CoreOptions, Plugin, PluginContext } from '../core';\nimport type { CollectionItem, DocCollectionItem, MetaCollectionItem } from '../config/build';\nimport path from 'path';\nimport { type CodeGen, createCodegen, ident, slash } from '../utils/codegen';\nimport { glob } from 'tinyglobby';\nimport { createFSCache } from '../utils/fs-cache';\nimport { createHash } from 'crypto';\nimport type { LazyEntry } from '../runtime/dynamic';\nimport type { EmitEntry } from '../core';\nimport { parseFrontmatter } from '../utils/frontmatter';\nimport type { ServerOptions } from '../runtime/server';\n\nexport interface IndexFilePluginOptions {\n target?: 'default' | 'vite';\n\n /**\n * add `.js` extensions to imports, needed for ESM without bundler resolution\n */\n addJsExtension?: boolean;\n\n /**\n * Generate entry point for browser\n * @defaultValue true\n */\n browser?: boolean;\n\n /**\n * Generate entry point for dynamic compilation\n * @defaultValue true\n */\n dynamic?: boolean;\n}\n\nexport interface IndexFilePlugin {\n ['index-file']?: {\n generateTypeConfig?: (this: PluginContext) => string | void;\n serverOptions?: (this: PluginContext, options: ServerOptions) => void;\n };\n}\n\ninterface FileGenContext {\n core: Core;\n workspace?: string;\n codegen: CodeGen;\n serverOptions: ServerOptions;\n tc: string;\n}\n\nconst indexFileCache = createFSCache();\n\nexport default function indexFile(options: IndexFilePluginOptions = {}): Plugin {\n const { target = 'default', addJsExtension, browser = true, dynamic = true } = options;\n let dynamicCollections: CollectionItem[];\n\n function isDynamic(collection: CollectionItem) {\n return (\n (collection.type === 'docs' && collection.docs.dynamic) ||\n (collection.type === 'doc' && collection.dynamic)\n );\n }\n\n function generateConfigs(core: Core): {\n serverOptions: ServerOptions;\n tc: string;\n } {\n const serverOptions: ServerOptions = {};\n const typeConfigs: string[] = ['import(\"@hanzo/docs-mdx/runtime/types\").InternalTypeConfig'];\n const ctx = core.getPluginContext();\n\n for (const plugin of core.getPlugins()) {\n const indexFilePlugin = plugin['index-file'];\n if (!indexFilePlugin) continue;\n\n indexFilePlugin.serverOptions?.call(ctx, serverOptions);\n const config = indexFilePlugin.generateTypeConfig?.call(ctx);\n if (config) typeConfigs.push(config);\n }\n\n return {\n serverOptions,\n tc: typeConfigs.join(' & '),\n };\n }\n\n return {\n name: 'index-file',\n config() {\n dynamicCollections = this.core.getCollections().filter(isDynamic);\n },\n configureServer(server) {\n if (!server.watcher) return;\n\n server.watcher.on('all', async (event, file) => {\n indexFileCache.delete(file);\n\n // dynamic collections always require re-generation on change\n if (dynamicCollections.length === 0) {\n // vite uses `import.meta.glob`, no need to re-generate\n if (target === 'vite') return;\n // only re-generate when adding/deleting entries\n if (target === 'default' && event === 'change') return;\n }\n\n const updatedCollection = this.core\n .getCollections()\n .find((collection) => collection.hasFile(file));\n\n if (!updatedCollection) return;\n if (!isDynamic(updatedCollection)) {\n if (target === 'vite') return;\n if (target === 'default' && event === 'change') return;\n }\n\n await this.core.emit({\n filterPlugin: (plugin) => plugin.name === 'index-file',\n filterWorkspace: () => false,\n write: true,\n });\n });\n },\n async emit() {\n const globCache = new Map<string, Promise<string[]>>();\n const { workspace, outDir } = this.core.getOptions();\n const { serverOptions, tc } = generateConfigs(this.core);\n const toEmitEntry = async (\n path: string,\n content: (ctx: FileGenContext) => Promise<void>,\n ): Promise<EmitEntry> => {\n const codegen = createCodegen({\n target,\n outDir: outDir,\n jsExtension: addJsExtension,\n globCache,\n });\n await content({\n core: this.core,\n codegen,\n serverOptions,\n tc,\n workspace: workspace?.name,\n });\n return {\n path,\n content: codegen.toString(),\n };\n };\n\n const out: Promise<EmitEntry>[] = [toEmitEntry('server.ts', generateServerIndexFile)];\n\n if (dynamic) out.push(toEmitEntry('dynamic.ts', generateDynamicIndexFile));\n\n if (browser) out.push(toEmitEntry('browser.ts', generateBrowserIndexFile));\n\n return await Promise.all(out);\n },\n };\n}\n\nasync function generateServerIndexFile(ctx: FileGenContext) {\n const { core, codegen, serverOptions, tc } = ctx;\n codegen.lines.push(\n `import { server } from '@hanzo/docs-mdx/runtime/server';`,\n `import type * as Config from '${codegen.formatImportPath(core.getOptions().configPath)}';`,\n '',\n `const create = server<typeof Config, ${tc}>(${JSON.stringify(serverOptions)});`,\n );\n\n async function generateCollectionObject(collection: CollectionItem): Promise<string | undefined> {\n const base = getBase(collection);\n\n switch (collection.type) {\n case 'docs': {\n if (collection.docs.dynamic) return;\n\n if (collection.docs.async) {\n const [metaGlob, headGlob, bodyGlob] = await Promise.all([\n generateMetaCollectionGlob(ctx, collection.meta, true),\n generateDocCollectionFrontmatterGlob(ctx, collection.docs, true),\n generateDocCollectionGlob(ctx, collection.docs),\n ]);\n\n return `await create.docsLazy(\"${collection.name}\", \"${base}\", ${metaGlob}, ${headGlob}, ${bodyGlob})`;\n }\n\n const [metaGlob, docGlob] = await Promise.all([\n generateMetaCollectionGlob(ctx, collection.meta, true),\n generateDocCollectionGlob(ctx, collection.docs, true),\n ]);\n\n return `await create.docs(\"${collection.name}\", \"${base}\", ${metaGlob}, ${docGlob})`;\n }\n case 'doc':\n if (collection.dynamic) return;\n\n if (collection.async) {\n const [headGlob, bodyGlob] = await Promise.all([\n generateDocCollectionFrontmatterGlob(ctx, collection, true),\n generateDocCollectionGlob(ctx, collection),\n ]);\n\n return `await create.docLazy(\"${collection.name}\", \"${base}\", ${headGlob}, ${bodyGlob})`;\n }\n\n return `await create.doc(\"${collection.name}\", \"${base}\", ${await generateDocCollectionGlob(\n ctx,\n collection,\n true,\n )})`;\n case 'meta':\n return `await create.meta(\"${collection.name}\", \"${base}\", ${await generateMetaCollectionGlob(\n ctx,\n collection,\n true,\n )})`;\n }\n }\n\n await codegen.pushAsync(\n core.getCollections().map(async (collection) => {\n const obj = await generateCollectionObject(collection);\n if (!obj) return;\n\n return `\\nexport const ${collection.name} = ${obj};`;\n }),\n );\n}\n\nasync function generateDynamicIndexFile(ctx: FileGenContext) {\n const { core, codegen, serverOptions, tc } = ctx;\n const { configPath, environment, outDir } = core.getOptions();\n // serializable config options\n const partialOptions: CoreOptions = {\n configPath,\n environment,\n outDir,\n };\n codegen.lines.push(\n `import { dynamic } from '@hanzo/docs-mdx/runtime/dynamic';`,\n `import * as Config from '${codegen.formatImportPath(configPath)}';`,\n '',\n `const create = await dynamic<typeof Config, ${tc}>(Config, ${JSON.stringify(partialOptions)}, ${JSON.stringify(serverOptions)});`,\n );\n\n async function generateCollectionObjectEntry(\n collection: DocCollectionItem,\n absolutePath: string,\n ) {\n const fullPath = path.relative(process.cwd(), absolutePath);\n const content = await indexFileCache.read(fullPath).catch(() => '');\n const parsed = parseFrontmatter(content);\n const data = await core.transformFrontmatter(\n {\n collection,\n filePath: fullPath,\n source: content,\n },\n parsed.data as Record<string, unknown>,\n );\n\n const hash = createHash('md5').update(content).digest('hex');\n const infoStr: string[] = [\n // make sure it's included in vercel/nft\n `absolutePath: path.resolve(${JSON.stringify(fullPath)})`,\n ];\n for (const [k, v] of Object.entries({\n info: {\n fullPath,\n path: path.relative(collection.dir, absolutePath),\n },\n data,\n hash,\n } satisfies LazyEntry)) {\n infoStr.push(`${k}: ${JSON.stringify(v)}`);\n }\n\n return `{ ${infoStr.join(', ')} }`;\n }\n\n async function generateCollectionObject(parent: CollectionItem): Promise<string | undefined> {\n let collection: DocCollectionItem | undefined;\n if (parent.type === 'doc') collection = parent;\n else if (parent.type === 'docs') collection = parent.docs;\n\n if (!collection || !collection.dynamic) return;\n\n const files = await glob(collection.patterns, {\n cwd: collection.dir,\n absolute: true,\n });\n const entries = await Promise.all(\n files.map((file) => generateCollectionObjectEntry(collection, file)),\n );\n\n switch (parent.type) {\n case 'docs': {\n const metaGlob = await generateMetaCollectionGlob(ctx, parent.meta, true);\n\n return `await create.docs(\"${parent.name}\", \"${getBase(parent)}\", ${metaGlob}, ${entries.join(', ')})`;\n }\n case 'doc':\n return `await create.doc(\"${collection.name}\", \"${getBase(collection)}\", ${entries.join(', ')})`;\n }\n }\n\n await codegen.pushAsync(\n core.getCollections().map(async (collection) => {\n const obj = await generateCollectionObject(collection);\n if (!obj) return;\n\n return `\\nexport const ${collection.name} = ${obj};`;\n }),\n );\n}\n\nasync function generateBrowserIndexFile(ctx: FileGenContext) {\n const { core, codegen, tc } = ctx;\n codegen.lines.push(\n `import { browser } from '@hanzo/docs-mdx/runtime/browser';`,\n `import type * as Config from '${codegen.formatImportPath(core.getOptions().configPath)}';`,\n '',\n `const create = browser<typeof Config, ${tc}>();`,\n );\n\n async function generateCollectionObject(collection: CollectionItem): Promise<string | undefined> {\n switch (collection.type) {\n case 'docs': {\n if (collection.docs.dynamic) return;\n\n return generateCollectionObject(collection.docs);\n }\n case 'doc':\n if (collection.dynamic) return;\n\n return `create.doc(\"${collection.name}\", ${await generateDocCollectionGlob(ctx, collection)})`;\n }\n }\n\n codegen.lines.push('const browserCollections = {');\n\n await codegen.pushAsync(\n core.getCollections().map(async (collection) => {\n const obj = await generateCollectionObject(collection);\n if (!obj) return;\n\n return ident(`${collection.name}: ${obj},`);\n }),\n );\n\n codegen.lines.push('};', 'export default browserCollections;');\n}\n\nfunction getBase(collection: CollectionItem) {\n return slash(path.relative(process.cwd(), collection.dir));\n}\n\nfunction generateDocCollectionFrontmatterGlob(\n { codegen, workspace }: FileGenContext,\n collection: DocCollectionItem,\n eager = false,\n) {\n return codegen.generateGlobImport(collection.patterns, {\n query: {\n collection: collection.name,\n only: 'frontmatter',\n workspace,\n },\n import: 'frontmatter',\n base: collection.dir,\n eager,\n });\n}\n\nfunction generateDocCollectionGlob(\n { codegen, workspace }: FileGenContext,\n collection: DocCollectionItem,\n eager = false,\n) {\n return codegen.generateGlobImport(collection.patterns, {\n query: {\n collection: collection.name,\n workspace,\n },\n base: collection.dir,\n eager,\n });\n}\n\nfunction generateMetaCollectionGlob(\n { codegen, workspace }: FileGenContext,\n collection: MetaCollectionItem,\n eager = false,\n) {\n return codegen.generateGlobImport(collection.patterns, {\n query: {\n collection: collection.name,\n workspace,\n },\n import: 'default',\n base: collection.dir,\n eager,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.d.ts","names":[],"sources":["../../src/plugins/json-schema.ts"],"
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","names":[],"sources":["../../src/plugins/json-schema.ts"],"mappings":";;;UAMiB,iBAAA;;AAAjB;;;;EAME,MAAA;AAAA;;;;;;iBAQsB,UAAA,CAAA;EAAa;AAAA,IAAkB,iBAAA,GAAyB,MAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","names":[
|
|
1
|
+
{"version":3,"file":"json-schema.js","names":[],"sources":["../../src/plugins/json-schema.ts"],"sourcesContent":["import type { EmitEntry, Plugin } from '../core';\nimport type { DocsCollectionItem, MetaCollectionItem } from '../config/build';\nimport { z } from 'zod';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface JSONSchemaOptions {\n /**\n * insert `$schema` field to JSON files on creation.\n *\n * @defaultValue false\n */\n insert?: boolean;\n}\n\n/**\n * Generate JSON schemas locally for collection schemas\n *\n * note: **it only works with Zod**\n */\nexport default function jsonSchema({ insert = false }: JSONSchemaOptions = {}): Plugin {\n function getSchemaPath(name: string) {\n return `json-schema/${name}.json`;\n }\n\n return {\n configureServer(server) {\n const { outDir } = this.core.getOptions();\n if (!server.watcher || !insert) return;\n\n server.watcher.on('add', async (file) => {\n let parent: DocsCollectionItem | undefined;\n let match: MetaCollectionItem | undefined;\n for (const collection of this.core.getCollections()) {\n if (collection.type === 'meta' && collection.hasFile(file)) {\n match = collection;\n break;\n }\n if (collection.type === 'docs' && collection.meta.hasFile(file)) {\n parent = collection;\n match = collection.meta;\n break;\n }\n }\n\n if (!match) return;\n let obj: object;\n try {\n const content = (await fs.readFile(file)).toString();\n obj = content.length > 0 ? JSON.parse(content) : {};\n } catch {\n return;\n }\n\n if ('$schema' in obj) return;\n const schemaPath = path.join(\n outDir,\n getSchemaPath(parent ? `${parent.name}.meta` : match.name),\n );\n const updated = {\n $schema: path.relative(path.dirname(file), schemaPath),\n ...obj,\n };\n\n await fs.writeFile(file, JSON.stringify(updated, null, 2));\n });\n },\n emit() {\n const files: EmitEntry[] = [];\n\n function onSchema(name: string, schema: z.ZodSchema) {\n files.push({\n path: getSchemaPath(name),\n content: JSON.stringify(\n z.toJSONSchema(schema, {\n io: 'input',\n unrepresentable: 'any',\n }),\n ),\n });\n }\n\n for (const collection of this.core.getCollections()) {\n if (collection.type === 'docs') {\n if (collection.meta.schema instanceof z.ZodType) {\n onSchema(`${collection.name}.meta`, collection.meta.schema);\n }\n\n if (collection.docs.schema instanceof z.ZodType) {\n onSchema(`${collection.name}.docs`, collection.docs.schema);\n }\n } else if (collection.schema instanceof z.ZodType) {\n onSchema(collection.name, collection.schema);\n }\n }\n\n return files;\n },\n };\n}\n"],"mappings":";;;;;;;;;;AAoBA,SAAwB,WAAW,EAAE,SAAS,UAA6B,EAAE,EAAU;CACrF,SAAS,cAAc,MAAc;AACnC,SAAO,eAAe,KAAK;;AAG7B,QAAO;EACL,gBAAgB,QAAQ;GACtB,MAAM,EAAE,WAAW,KAAK,KAAK,YAAY;AACzC,OAAI,CAAC,OAAO,WAAW,CAAC,OAAQ;AAEhC,UAAO,QAAQ,GAAG,OAAO,OAAO,SAAS;IACvC,IAAI;IACJ,IAAI;AACJ,SAAK,MAAM,cAAc,KAAK,KAAK,gBAAgB,EAAE;AACnD,SAAI,WAAW,SAAS,UAAU,WAAW,QAAQ,KAAK,EAAE;AAC1D,cAAQ;AACR;;AAEF,SAAI,WAAW,SAAS,UAAU,WAAW,KAAK,QAAQ,KAAK,EAAE;AAC/D,eAAS;AACT,cAAQ,WAAW;AACnB;;;AAIJ,QAAI,CAAC,MAAO;IACZ,IAAI;AACJ,QAAI;KACF,MAAM,WAAW,MAAM,GAAG,SAAS,KAAK,EAAE,UAAU;AACpD,WAAM,QAAQ,SAAS,IAAI,KAAK,MAAM,QAAQ,GAAG,EAAE;YAC7C;AACN;;AAGF,QAAI,aAAa,IAAK;IACtB,MAAM,aAAa,KAAK,KACtB,QACA,cAAc,SAAS,GAAG,OAAO,KAAK,SAAS,MAAM,KAAK,CAC3D;IACD,MAAM,UAAU;KACd,SAAS,KAAK,SAAS,KAAK,QAAQ,KAAK,EAAE,WAAW;KACtD,GAAG;KACJ;AAED,UAAM,GAAG,UAAU,MAAM,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC;KAC1D;;EAEJ,OAAO;GACL,MAAM,QAAqB,EAAE;GAE7B,SAAS,SAAS,MAAc,QAAqB;AACnD,UAAM,KAAK;KACT,MAAM,cAAc,KAAK;KACzB,SAAS,KAAK,UACZ,EAAE,aAAa,QAAQ;MACrB,IAAI;MACJ,iBAAiB;MAClB,CAAC,CACH;KACF,CAAC;;AAGJ,QAAK,MAAM,cAAc,KAAK,KAAK,gBAAgB,CACjD,KAAI,WAAW,SAAS,QAAQ;AAC9B,QAAI,WAAW,KAAK,kBAAkB,EAAE,QACtC,UAAS,GAAG,WAAW,KAAK,QAAQ,WAAW,KAAK,OAAO;AAG7D,QAAI,WAAW,KAAK,kBAAkB,EAAE,QACtC,UAAS,GAAG,WAAW,KAAK,QAAQ,WAAW,KAAK,OAAO;cAEpD,WAAW,kBAAkB,EAAE,QACxC,UAAS,WAAW,MAAM,WAAW,OAAO;AAIhD,UAAO;;EAEV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"last-modified.d.ts","names":[],"sources":["../../src/plugins/last-modified.ts"],"
|
|
1
|
+
{"version":3,"file":"last-modified.d.ts","names":[],"sources":["../../src/plugins/last-modified.ts"],"mappings":";;;KAMK,gBAAA,IAAoB,QAAA,aAAqB,OAAA,CAAQ,IAAA;AAAA,UAErC,yBAAA;EAFZ;;;;;;;;;AAEL;;EAYE,cAAA,WAAyB,gBAAA;EAAgB;;;EAKzC,MAAA,IAAU,UAAA;AAAA;;;AACX;iBAauB,YAAA,CAAa,OAAA,GAAS,yBAAA,GAAiC,MAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as ident } from "../codegen-
|
|
1
|
+
import { n as ident } from "../codegen-DzglA9tJ.js";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { x } from "tinyexec";
|
|
4
4
|
|
|
@@ -29,10 +29,10 @@ function lastModified(options = {}) {
|
|
|
29
29
|
lines.push("}");
|
|
30
30
|
return lines.join("\n");
|
|
31
31
|
},
|
|
32
|
-
serverOptions(options
|
|
33
|
-
options
|
|
34
|
-
options
|
|
35
|
-
options
|
|
32
|
+
serverOptions(options) {
|
|
33
|
+
options.doc ??= {};
|
|
34
|
+
options.doc.passthroughs ??= [];
|
|
35
|
+
options.doc.passthroughs.push("lastModified");
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
config() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"last-modified.js","names":[
|
|
1
|
+
{"version":3,"file":"last-modified.js","names":[],"sources":["../../src/plugins/last-modified.ts"],"sourcesContent":["import path from 'node:path';\nimport { x } from 'tinyexec';\nimport type { Plugin } from '../core';\nimport { ident } from '../utils/codegen';\n\nconst cache = new Map<string, Promise<Date | null>>();\ntype VersionControlFn = (filePath: string) => Promise<Date | null | undefined>;\n\nexport interface LastModifiedPluginOptions {\n /**\n * Version control to obtain the last modified time.\n *\n * - `git`: Requires `git` to be installed.\n *\n * If you are using Vercel, please set `VERCEL_DEEP_CLONE` environment variable to `true`.\n *\n * - A function: return the last modified time for given file path.\n *\n * @defaultValue 'git'\n */\n versionControl?: 'git' | VersionControlFn;\n\n /**\n * Filter the collections to include by names\n */\n filter?: (collection: string) => boolean;\n}\n\nconst ExtendTypes = `{\n /**\n * Last modified date of document file, obtained from version control.\n *\n */\n lastModified?: Date;\n}`;\n\n/**\n * Injects `lastModified` property to page exports.\n */\nexport default function lastModified(options: LastModifiedPluginOptions = {}): Plugin {\n const { versionControl = 'git', filter = () => true } = options;\n let fn: VersionControlFn;\n\n return {\n name: 'last-modified',\n 'index-file': {\n generateTypeConfig() {\n const lines: string[] = [];\n lines.push('{');\n lines.push(' DocData: {');\n for (const collection of this.core.getCollections()) {\n if (filter(collection.name)) {\n lines.push(ident(`${collection.name}: ${ExtendTypes},`, 2));\n }\n }\n lines.push(' }');\n lines.push('}');\n return lines.join('\\n');\n },\n serverOptions(options) {\n options.doc ??= {};\n options.doc.passthroughs ??= [];\n options.doc.passthroughs.push('lastModified');\n },\n },\n config() {\n const { workspace } = this.core.getOptions();\n const cwd = workspace ? path.resolve(workspace.dir) : process.cwd();\n\n switch (versionControl) {\n case 'git':\n fn = (v) => getGitTimestamp(v, cwd);\n break;\n default:\n fn = versionControl;\n }\n },\n doc: {\n async vfile(file) {\n if (!filter(this.collection.name)) return;\n\n const timestamp = await fn(this.filePath);\n if (timestamp) {\n file.data['mdx-export'] ??= [];\n file.data['mdx-export'].push({\n name: 'lastModified',\n value: timestamp,\n });\n }\n },\n },\n };\n}\n\nasync function getGitTimestamp(file: string, cwd: string): Promise<Date | null> {\n const cached = cache.get(file);\n if (cached) return cached;\n\n const timePromise = (async () => {\n const out = await x('git', ['log', '-1', '--pretty=\"%ai\"', path.relative(cwd, file)], {\n nodeOptions: {\n cwd,\n },\n });\n\n if (out.exitCode !== 0) return null;\n const date = new Date(out.stdout);\n return isNaN(date.getTime()) ? null : date;\n })();\n\n cache.set(file, timePromise);\n return timePromise;\n}\n"],"mappings":";;;;;AAKA,MAAM,wBAAQ,IAAI,KAAmC;AAuBrD,MAAM,cAAc;;;;;;;;;;AAWpB,SAAwB,aAAa,UAAqC,EAAE,EAAU;CACpF,MAAM,EAAE,iBAAiB,OAAO,eAAe,SAAS;CACxD,IAAI;AAEJ,QAAO;EACL,MAAM;EACN,cAAc;GACZ,qBAAqB;IACnB,MAAM,QAAkB,EAAE;AAC1B,UAAM,KAAK,IAAI;AACf,UAAM,KAAK,eAAe;AAC1B,SAAK,MAAM,cAAc,KAAK,KAAK,gBAAgB,CACjD,KAAI,OAAO,WAAW,KAAK,CACzB,OAAM,KAAK,MAAM,GAAG,WAAW,KAAK,IAAI,YAAY,IAAI,EAAE,CAAC;AAG/D,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,IAAI;AACf,WAAO,MAAM,KAAK,KAAK;;GAEzB,cAAc,SAAS;AACrB,YAAQ,QAAQ,EAAE;AAClB,YAAQ,IAAI,iBAAiB,EAAE;AAC/B,YAAQ,IAAI,aAAa,KAAK,eAAe;;GAEhD;EACD,SAAS;GACP,MAAM,EAAE,cAAc,KAAK,KAAK,YAAY;GAC5C,MAAM,MAAM,YAAY,KAAK,QAAQ,UAAU,IAAI,GAAG,QAAQ,KAAK;AAEnE,WAAQ,gBAAR;IACE,KAAK;AACH,WAAM,MAAM,gBAAgB,GAAG,IAAI;AACnC;IACF,QACE,MAAK;;;EAGX,KAAK,EACH,MAAM,MAAM,MAAM;AAChB,OAAI,CAAC,OAAO,KAAK,WAAW,KAAK,CAAE;GAEnC,MAAM,YAAY,MAAM,GAAG,KAAK,SAAS;AACzC,OAAI,WAAW;AACb,SAAK,KAAK,kBAAkB,EAAE;AAC9B,SAAK,KAAK,cAAc,KAAK;KAC3B,MAAM;KACN,OAAO;KACR,CAAC;;KAGP;EACF;;AAGH,eAAe,gBAAgB,MAAc,KAAmC;CAC9E,MAAM,SAAS,MAAM,IAAI,KAAK;AAC9B,KAAI,OAAQ,QAAO;CAEnB,MAAM,eAAe,YAAY;EAC/B,MAAM,MAAM,MAAM,EAAE,OAAO;GAAC;GAAO;GAAM;GAAkB,KAAK,SAAS,KAAK,KAAK;GAAC,EAAE,EACpF,aAAa,EACX,KACD,EACF,CAAC;AAEF,MAAI,IAAI,aAAa,EAAG,QAAO;EAC/B,MAAM,OAAO,IAAI,KAAK,IAAI,OAAO;AACjC,SAAO,MAAM,KAAK,SAAS,CAAC,GAAG,OAAO;KACpC;AAEJ,OAAM,IAAI,MAAM,YAAY;AAC5B,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-
|
|
1
|
+
{"version":3,"file":"preset-B14ViDfq.js","names":[],"sources":["../src/config/preset.ts"],"sourcesContent":["import type { ProcessorOptions } from '@mdx-js/mdx';\nimport type { Pluggable } from 'unified';\nimport type * as Plugins from '@hanzo/docs-core/mdx-plugins';\nimport type { BuildEnvironment } from './build';\n\ntype ResolvePlugins = Pluggable[] | ((v: Pluggable[]) => Pluggable[]);\n\nexport type DefaultMDXOptions = Omit<\n NonNullable<ProcessorOptions>,\n 'rehypePlugins' | 'remarkPlugins' | '_ctx'\n> & {\n rehypePlugins?: ResolvePlugins;\n remarkPlugins?: ResolvePlugins;\n\n /**\n * Properties to export from `vfile.data`\n */\n valueToExport?: string[];\n\n remarkStructureOptions?: Plugins.StructureOptions | false;\n remarkHeadingOptions?: Plugins.RemarkHeadingOptions;\n remarkImageOptions?: Plugins.RemarkImageOptions | false;\n remarkCodeTabOptions?: Plugins.RemarkCodeTabOptions | false;\n remarkNpmOptions?: Plugins.RemarkNpmOptions | false;\n rehypeCodeOptions?: Plugins.RehypeCodeOptions | false;\n};\n\nfunction pluginOption(\n def: (v: Pluggable[]) => (Pluggable | false)[],\n options: ResolvePlugins = [],\n): Pluggable[] {\n const list = def(Array.isArray(options) ? options : []).filter(Boolean) as Pluggable[];\n\n if (typeof options === 'function') {\n return options(list);\n }\n\n return list;\n}\n\nexport type MDXPresetOptions =\n | ({ preset?: 'hanzo-docs' } & DefaultMDXOptions)\n | ({\n preset: 'minimal';\n } & ProcessorOptions);\n\n/**\n * apply MDX processor presets\n */\nexport function applyMdxPreset(\n options: MDXPresetOptions = {},\n): (environment: BuildEnvironment) => Promise<ProcessorOptions> {\n return async (environment = 'bundler') => {\n if (options.preset === 'minimal') return options;\n\n const plugins = await import('@hanzo/docs-core/mdx-plugins');\n const {\n valueToExport = [],\n rehypeCodeOptions,\n remarkImageOptions,\n remarkHeadingOptions,\n remarkStructureOptions,\n remarkCodeTabOptions,\n remarkNpmOptions,\n ...mdxOptions\n } = options;\n\n const remarkPlugins = pluginOption(\n (v) => [\n plugins.remarkGfm,\n [\n plugins.remarkHeading,\n {\n generateToc: false,\n ...remarkHeadingOptions,\n },\n ],\n remarkImageOptions !== false && [\n plugins.remarkImage,\n {\n ...remarkImageOptions,\n useImport: remarkImageOptions?.useImport ?? environment === 'bundler',\n },\n ],\n 'remarkCodeTab' in plugins &&\n remarkCodeTabOptions !== false && [plugins.remarkCodeTab, remarkCodeTabOptions],\n 'remarkNpm' in plugins &&\n remarkNpmOptions !== false && [plugins.remarkNpm, remarkNpmOptions],\n ...v,\n remarkStructureOptions !== false && [\n plugins.remarkStructure,\n {\n exportAs: 'structuredData',\n ...remarkStructureOptions,\n } satisfies Plugins.StructureOptions,\n ],\n valueToExport.length > 0 &&\n (() => {\n return (_, file) => {\n file.data['mdx-export'] ??= [];\n\n for (const name of valueToExport) {\n if (!(name in file.data)) continue;\n\n file.data['mdx-export'].push({\n name,\n value: file.data[name],\n });\n }\n };\n }),\n ],\n mdxOptions.remarkPlugins,\n );\n\n const rehypePlugins = pluginOption(\n (v) => [\n rehypeCodeOptions !== false && [plugins.rehypeCode, rehypeCodeOptions],\n ...v,\n plugins.rehypeToc,\n ],\n mdxOptions.rehypePlugins,\n );\n\n return {\n ...mdxOptions,\n outputFormat: environment === 'runtime' ? 'function-body' : mdxOptions.outputFormat,\n remarkPlugins,\n rehypePlugins,\n };\n };\n}\n"],"mappings":";AA2BA,SAAS,aACP,KACA,UAA0B,EAAE,EACf;CACb,MAAM,OAAO,IAAI,MAAM,QAAQ,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAC,OAAO,QAAQ;AAEvE,KAAI,OAAO,YAAY,WACrB,QAAO,QAAQ,KAAK;AAGtB,QAAO;;;;;AAYT,SAAgB,eACd,UAA4B,EAAE,EACgC;AAC9D,QAAO,OAAO,cAAc,cAAc;AACxC,MAAI,QAAQ,WAAW,UAAW,QAAO;EAEzC,MAAM,UAAU,MAAM,OAAO;EAC7B,MAAM,EACJ,gBAAgB,EAAE,EAClB,mBACA,oBACA,sBACA,wBACA,sBACA,kBACA,GAAG,eACD;EAEJ,MAAM,gBAAgB,cACnB,MAAM;GACL,QAAQ;GACR,CACE,QAAQ,eACR;IACE,aAAa;IACb,GAAG;IACJ,CACF;GACD,uBAAuB,SAAS,CAC9B,QAAQ,aACR;IACE,GAAG;IACH,WAAW,oBAAoB,aAAa,gBAAgB;IAC7D,CACF;GACD,mBAAmB,WACjB,yBAAyB,SAAS,CAAC,QAAQ,eAAe,qBAAqB;GACjF,eAAe,WACb,qBAAqB,SAAS,CAAC,QAAQ,WAAW,iBAAiB;GACrE,GAAG;GACH,2BAA2B,SAAS,CAClC,QAAQ,iBACR;IACE,UAAU;IACV,GAAG;IACJ,CACF;GACD,cAAc,SAAS,YACd;AACL,YAAQ,GAAG,SAAS;AAClB,UAAK,KAAK,kBAAkB,EAAE;AAE9B,UAAK,MAAM,QAAQ,eAAe;AAChC,UAAI,EAAE,QAAQ,KAAK,MAAO;AAE1B,WAAK,KAAK,cAAc,KAAK;OAC3B;OACA,OAAO,KAAK,KAAK;OAClB,CAAC;;;;GAIX,EACD,WAAW,cACZ;EAED,MAAM,gBAAgB,cACnB,MAAM;GACL,sBAAsB,SAAS,CAAC,QAAQ,YAAY,kBAAkB;GACtE,GAAG;GACH,QAAQ;GACT,EACD,WAAW,cACZ;AAED,SAAO;GACL,GAAG;GACH,cAAc,gBAAgB,YAAY,kBAAkB,WAAW;GACvE;GACA;GACD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import * as path$1 from "node:path";
|
|
1
|
+
import { t as parseFrontmatter } from "./frontmatter-DePDVaRD.js";
|
|
3
2
|
import * as fs$1 from "node:fs/promises";
|
|
3
|
+
import * as path$1 from "node:path";
|
|
4
4
|
import { unified } from "unified";
|
|
5
5
|
import { visit } from "unist-util-visit";
|
|
6
6
|
import { remarkHeading } from "@hanzo/docs-core/mdx-plugins";
|
|
@@ -201,7 +201,7 @@ function remarkInclude() {
|
|
|
201
201
|
};
|
|
202
202
|
}
|
|
203
203
|
const parser = _getProcessor(ext === ".mdx" ? "mdx" : "md");
|
|
204
|
-
const parsed =
|
|
204
|
+
const parsed = parseFrontmatter(content);
|
|
205
205
|
const targetFile = new VFile({
|
|
206
206
|
path: targetPath,
|
|
207
207
|
value: parsed.content,
|
|
@@ -244,4 +244,4 @@ function remarkInclude() {
|
|
|
244
244
|
|
|
245
245
|
//#endregion
|
|
246
246
|
export { flattenNode as n, remarkInclude as t };
|
|
247
|
-
//# sourceMappingURL=remark-include-
|
|
247
|
+
//# sourceMappingURL=remark-include-DfEJ3erI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remark-include-DfEJ3erI.js","names":["fs","path"],"sources":["../src/loaders/mdx/remark-unravel.ts","../src/loaders/mdx/mdast-utils.ts","../src/loaders/mdx/remark-include.ts"],"sourcesContent":["// from internal remark plugins in https://github.com/mdx-js/mdx/blob/main/packages/mdx/lib/plugin/remark-mark-and-unravel.js\n// we need to ensure consistency with MDX.js when parsing embed content in `remark-include`\nimport { visit } from 'unist-util-visit';\nimport type { Transformer } from 'unified';\nimport type { Root, RootContent } from 'mdast';\n\nexport function remarkMarkAndUnravel(): Transformer<Root, Root> {\n return (tree) => {\n visit(tree, function (node, index, parent) {\n let offset = -1;\n let all = true;\n let oneOrMore = false;\n\n if (parent && typeof index === 'number' && node.type === 'paragraph') {\n const children = node.children;\n\n while (++offset < children.length) {\n const child = children[offset];\n\n if (child.type === 'mdxJsxTextElement' || child.type === 'mdxTextExpression') {\n oneOrMore = true;\n } else if (child.type === 'text' && child.value.trim().length === 0) {\n // Empty.\n } else {\n all = false;\n break;\n }\n }\n\n if (all && oneOrMore) {\n offset = -1;\n const newChildren: RootContent[] = [];\n\n while (++offset < children.length) {\n const child = children[offset];\n\n if (child.type === 'mdxJsxTextElement') {\n // @ts-expect-error: mutate because it is faster; content model is fine.\n child.type = 'mdxJsxFlowElement';\n }\n\n if (child.type === 'mdxTextExpression') {\n // @ts-expect-error: mutate because it is faster; content model is fine.\n child.type = 'mdxFlowExpression';\n }\n\n if (child.type === 'text' && /^[\\t\\r\\n ]+$/.test(String(child.value))) {\n // Empty.\n } else {\n newChildren.push(child);\n }\n }\n\n parent.children.splice(index, 1, ...newChildren);\n return index;\n }\n }\n });\n };\n}\n","import type { RootContent } from 'mdast';\n\nexport function flattenNode(node: RootContent): string {\n if ('children' in node) return node.children.map((child) => flattenNode(child)).join('');\n\n if ('value' in node) return node.value;\n\n return '';\n}\n","import { type Processor, type Transformer, unified } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport type { Code, Node, Root, RootContent } from 'mdast';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs/promises';\nimport { parseFrontmatter } from '../../utils/frontmatter';\nimport type { MdxJsxFlowElement, MdxJsxTextElement } from 'mdast-util-mdx-jsx';\nimport { remarkHeading } from '@hanzo/docs-core/mdx-plugins';\nimport { VFile } from 'vfile';\nimport type { Directives } from 'mdast-util-directive';\nimport { remarkMarkAndUnravel } from './remark-unravel';\nimport { flattenNode } from './mdast-utils';\n\n/**\n * VS Code–style region extraction\n * Adapted from VitePress:\n * https://github.com/vuejs/vitepress/blob/main/src/node/markdown/plugins/snippet.ts\n */\n\n// region marker regexes\nconst REGION_MARKERS = [\n {\n start: /^\\s*\\/\\/\\s*#?region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*\\/\\/\\s*#?endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*<!--\\s*#?region\\b\\s*(.*?)\\s*-->/,\n end: /^\\s*<!--\\s*#?endregion\\b\\s*(.*?)\\s*-->/,\n },\n {\n start: /^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\//,\n end: /^\\s*\\/\\*\\s*#endregion\\b\\s*(.*?)\\s*\\*\\//,\n },\n {\n start: /^\\s*#[rR]egion\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#[eE]nd ?[rR]egion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*#\\s*#?region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#\\s*#?endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*(?:--|::|@?REM)\\s*#region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*(?:--|::|@?REM)\\s*#endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*#pragma\\s+region\\b\\s*(.*?)\\s*$/,\n end: /^\\s*#pragma\\s+endregion\\b\\s*(.*?)\\s*$/,\n },\n {\n start: /^\\s*\\(\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\)/,\n end: /^\\s*\\(\\*\\s*#endregion\\b\\s*(.*?)\\s*\\*\\)/,\n },\n];\n\nfunction dedent(lines: string[]): string {\n const minIndent = lines.reduce((min, line) => {\n const match = line.match(/^(\\s*)\\S/);\n return match ? Math.min(min, match[1].length) : min;\n }, Infinity);\n\n return minIndent === Infinity\n ? lines.join('\\n')\n : lines.map((l) => l.slice(minIndent)).join('\\n');\n}\n\nfunction extractCodeRegion(content: string, regionName: string): string {\n const lines = content.split('\\n');\n\n for (let i = 0; i < lines.length; i++) {\n for (const re of REGION_MARKERS) {\n let match = re.start.exec(lines[i]);\n if (match?.[1] !== regionName) continue;\n\n let depth = 1;\n const extractedLines: string[] = [];\n for (let j = i + 1; j < lines.length; j++) {\n match = re.start.exec(lines[j]);\n if (match) {\n depth++;\n continue;\n }\n\n match = re.end.exec(lines[j]);\n if (match) {\n if (match[1] === regionName) depth = 0;\n else if (match[1] === '') depth--;\n else continue;\n\n if (depth > 0) continue;\n return dedent(extractedLines);\n } else {\n extractedLines.push(lines[j]);\n }\n }\n }\n }\n throw new Error(`Region \"${regionName}\" not found`);\n}\n\nexport interface Params {\n lang?: string;\n meta?: string;\n}\n\nconst ElementLikeTypes: ElementLikeContent['type'][] = [\n 'mdxJsxFlowElement',\n 'mdxJsxTextElement',\n 'containerDirective',\n 'textDirective',\n 'leafDirective',\n];\ntype ElementLikeContent = MdxJsxFlowElement | MdxJsxTextElement | Directives;\n\nfunction isElementLike(node: Node): node is ElementLikeContent {\n return ElementLikeTypes.includes(node.type as ElementLikeContent['type']);\n}\n\nfunction parseElementAttributes(\n element: ElementLikeContent,\n): Record<string, string | null | undefined> {\n if (Array.isArray(element.attributes)) {\n const attributes: Record<string, string | null> = {};\n\n for (const attr of element.attributes) {\n if (\n attr.type === 'mdxJsxAttribute' &&\n (typeof attr.value === 'string' || attr.value === null)\n ) {\n attributes[attr.name] = attr.value;\n }\n }\n\n return attributes;\n }\n\n return element.attributes ?? {};\n}\n\nfunction parseSpecifier(specifier: string): {\n file: string;\n section?: string;\n} {\n const idx = specifier.lastIndexOf('#');\n if (idx === -1) return { file: specifier };\n\n return {\n file: specifier.slice(0, idx),\n section: specifier.slice(idx + 1),\n };\n}\n\nfunction extractSection(root: Root, section: string): Root | undefined {\n let nodes: RootContent[] | undefined;\n let capturingHeadingContent = false;\n\n visit(root, (node) => {\n if (node.type === 'heading') {\n if (capturingHeadingContent) {\n return false;\n }\n\n if (node.data?.hProperties?.id === section) {\n capturingHeadingContent = true;\n nodes = [node];\n return 'skip';\n }\n\n return;\n }\n\n if (capturingHeadingContent) {\n nodes?.push(node as RootContent);\n return 'skip';\n }\n\n if (isElementLike(node) && node.name === 'section') {\n const attributes = parseElementAttributes(node);\n\n if (attributes.id === section) {\n nodes = node.children;\n return false;\n }\n }\n });\n\n if (nodes)\n return {\n type: 'root',\n children: nodes,\n };\n}\n\nexport function remarkInclude(this: Processor): Transformer<Root, Root> {\n const TagName = 'include';\n\n const embedContent = async (\n targetPath: string,\n heading: string | undefined,\n params: Params,\n parent: VFile,\n ) => {\n const { _getProcessor = () => this, _compiler } = parent.data;\n let content: string;\n try {\n content = (await fs.readFile(targetPath)).toString();\n } catch (e) {\n throw new Error(\n `failed to read file ${targetPath}\\n${e instanceof Error ? e.message : String(e)}`,\n { cause: e },\n );\n }\n\n const ext = path.extname(targetPath);\n _compiler?.addDependency(targetPath);\n // For non-Markdown files, support VS Code–style region extraction\n if (params.lang || (ext !== '.md' && ext !== '.mdx')) {\n const lang = params.lang ?? ext.slice(1);\n let value = content;\n if (heading) {\n value = extractCodeRegion(content, heading.trim());\n }\n return {\n type: 'code',\n lang,\n meta: params.meta,\n value,\n data: {},\n } satisfies Code;\n }\n\n const parser = _getProcessor(ext === '.mdx' ? 'mdx' : 'md');\n const parsed = parseFrontmatter(content);\n const targetFile = new VFile({\n path: targetPath,\n value: parsed.content,\n data: {\n ...parent.data,\n frontmatter: parsed.data as Record<string, unknown>,\n },\n });\n let mdast = parser.parse(targetFile) as Root;\n const baseProcessor = unified().use(remarkMarkAndUnravel);\n\n if (heading) {\n // parse headings before extraction\n const extracted = extractSection(await baseProcessor.use(remarkHeading).run(mdast), heading);\n if (!extracted)\n throw new Error(\n `Cannot find section ${heading} in ${targetPath}, make sure you have encapsulated the section in a <section id=\"${heading}\"> tag, or a :::section directive with remark-directive configured.`,\n );\n\n mdast = extracted;\n } else {\n mdast = await baseProcessor.run(mdast);\n }\n\n await update(mdast, targetFile);\n return mdast;\n };\n\n async function update(tree: Root, file: VFile) {\n const queue: Promise<void>[] = [];\n\n visit(tree, ElementLikeTypes, (_node, _, parent) => {\n const node = _node as ElementLikeContent;\n if (node.name !== TagName) return;\n\n const specifier = flattenNode(node);\n if (specifier.length === 0) return 'skip';\n\n const attributes = parseElementAttributes(node);\n const { file: relativePath, section } = parseSpecifier(specifier);\n const targetPath = path.resolve('cwd' in attributes ? file.cwd : file.dirname!, relativePath);\n\n queue.push(\n embedContent(targetPath, section, attributes, file).then((replace) => {\n Object.assign(parent && parent.type === 'paragraph' ? parent : node, replace);\n }),\n );\n\n return 'skip';\n });\n\n await Promise.all(queue);\n }\n\n return async (tree, file) => {\n await update(tree, file);\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) {
|
|
6
|
+
__defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
if (!no_symbols) {
|
|
12
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
13
|
+
}
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { __exportAll as t };
|