czon 0.4.0 → 0.4.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/build/pipeline.js +11 -0
- package/dist/build/robots.js +115 -0
- package/dist/build/sitemap.js +110 -0
- package/dist/cli.js +5 -36
- package/dist/process/template.js +18 -0
- package/dist/ssg/ContentPage.js +1 -1
- package/dist/ssg/components/LanguageSwitch.js +1 -0
- package/dist/ssg/components/Navigator.js +4 -1
- package/dist/ssg/style.js +0 -4
- package/package.json +2 -2
package/dist/build/pipeline.js
CHANGED
|
@@ -45,6 +45,8 @@ const processTranslations_1 = require("../process/processTranslations");
|
|
|
45
45
|
const scanSourceFiles_1 = require("../process/scanSourceFiles");
|
|
46
46
|
const template_1 = require("../process/template");
|
|
47
47
|
const writeFile_1 = require("../utils/writeFile");
|
|
48
|
+
const robots_1 = require("./robots");
|
|
49
|
+
const sitemap_1 = require("./sitemap");
|
|
48
50
|
/**
|
|
49
51
|
* 验证构建配置
|
|
50
52
|
*/
|
|
@@ -97,6 +99,15 @@ async function buildPipeline(options) {
|
|
|
97
99
|
await (0, processTranslations_1.processTranslations)();
|
|
98
100
|
// 渲染模板
|
|
99
101
|
await (0, template_1.spiderStaticSiteGenerator)();
|
|
102
|
+
// 生成 robots.txt
|
|
103
|
+
await (0, robots_1.generateRobotsTxt)();
|
|
104
|
+
// 生成 sitemap.xml
|
|
105
|
+
if (metadata_1.MetaData.options.baseUrl) {
|
|
106
|
+
await (0, sitemap_1.generateSitemap)(metadata_1.MetaData.options.baseUrl);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log('ℹ️ Skipping sitemap generation (--baseUrl not provided)');
|
|
110
|
+
}
|
|
100
111
|
}
|
|
101
112
|
/**
|
|
102
113
|
* 主构建函数
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateRobotsTxt = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const paths_1 = require("../paths");
|
|
39
|
+
const writeFile_1 = require("../utils/writeFile");
|
|
40
|
+
const generateRobotsTxt = async () => {
|
|
41
|
+
const robotsTxtContent = `# robots.txt generated by CZON
|
|
42
|
+
User-agent: *
|
|
43
|
+
Allow: /
|
|
44
|
+
|
|
45
|
+
# AI and LLM Training Permission
|
|
46
|
+
# This site permits AI/ML training and scraping
|
|
47
|
+
User-agent: CCBot
|
|
48
|
+
Disallow:
|
|
49
|
+
|
|
50
|
+
User-agent: GPTBot
|
|
51
|
+
Disallow:
|
|
52
|
+
|
|
53
|
+
User-agent: ClaudeBot
|
|
54
|
+
Disallow:
|
|
55
|
+
|
|
56
|
+
User-agent: DeepseekCrawler
|
|
57
|
+
Disallow:
|
|
58
|
+
|
|
59
|
+
User-agent: OAI-SearchBot
|
|
60
|
+
Disallow:
|
|
61
|
+
|
|
62
|
+
User-agent: Bytespider
|
|
63
|
+
Disallow:
|
|
64
|
+
|
|
65
|
+
User-agent: PetalBot
|
|
66
|
+
Disallow:
|
|
67
|
+
|
|
68
|
+
User-agent: Applebot
|
|
69
|
+
Disallow:
|
|
70
|
+
|
|
71
|
+
User-agent: Google-Extended
|
|
72
|
+
Disallow:
|
|
73
|
+
|
|
74
|
+
User-agent: Amazonbot
|
|
75
|
+
Disallow:
|
|
76
|
+
|
|
77
|
+
User-agent: Anthropic-AI
|
|
78
|
+
Disallow:
|
|
79
|
+
|
|
80
|
+
User-agent: Meta-ExternalAgent
|
|
81
|
+
Disallow:
|
|
82
|
+
|
|
83
|
+
User-agent: Meta-ExternalFetcher
|
|
84
|
+
Disallow:
|
|
85
|
+
|
|
86
|
+
User-agent: FacebookBot
|
|
87
|
+
Disallow:
|
|
88
|
+
|
|
89
|
+
User-agent: Bingbot
|
|
90
|
+
Disallow:
|
|
91
|
+
|
|
92
|
+
User-agent: Slurp
|
|
93
|
+
Disallow:
|
|
94
|
+
|
|
95
|
+
User-agent: DuckDuckBot
|
|
96
|
+
Disallow:
|
|
97
|
+
|
|
98
|
+
User-agent: Baiduspider
|
|
99
|
+
Disallow:
|
|
100
|
+
|
|
101
|
+
User-agent: YandexBot
|
|
102
|
+
Disallow:
|
|
103
|
+
|
|
104
|
+
User-agent: KHTML, like Gecko
|
|
105
|
+
Disallow:
|
|
106
|
+
|
|
107
|
+
Content-Signal: ai-train=yes, search=yes, ai-input=yes
|
|
108
|
+
|
|
109
|
+
Sitemap: /sitemap.xml
|
|
110
|
+
`;
|
|
111
|
+
const robotsPath = path.join(paths_1.CZON_DIST_DIR, 'robots.txt');
|
|
112
|
+
await (0, writeFile_1.writeFile)(robotsPath, robotsTxtContent);
|
|
113
|
+
};
|
|
114
|
+
exports.generateRobotsTxt = generateRobotsTxt;
|
|
115
|
+
//# sourceMappingURL=robots.js.map
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.clearSitemapCollection = exports.generateSitemap = exports.collectCategoryPage = exports.collectIndexPage = exports.collectUrl = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const paths_1 = require("../paths");
|
|
39
|
+
const writeFile_1 = require("../utils/writeFile");
|
|
40
|
+
const sitemapUrls = new Map();
|
|
41
|
+
const collectUrl = (lang, slug) => {
|
|
42
|
+
if (!slug)
|
|
43
|
+
return;
|
|
44
|
+
let entry = sitemapUrls.get(slug);
|
|
45
|
+
if (!entry) {
|
|
46
|
+
entry = { slug, langs: [] };
|
|
47
|
+
sitemapUrls.set(slug, entry);
|
|
48
|
+
}
|
|
49
|
+
if (!entry.langs.some(l => l.lang === lang)) {
|
|
50
|
+
entry.langs.push({ lang, path: `/${lang}/${slug}.html` });
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.collectUrl = collectUrl;
|
|
54
|
+
const collectIndexPage = (lang) => {
|
|
55
|
+
const slug = 'index';
|
|
56
|
+
let entry = sitemapUrls.get(slug);
|
|
57
|
+
if (!entry) {
|
|
58
|
+
entry = { slug, langs: [] };
|
|
59
|
+
sitemapUrls.set(slug, entry);
|
|
60
|
+
}
|
|
61
|
+
if (!entry.langs.some(l => l.lang === lang)) {
|
|
62
|
+
entry.langs.push({ lang, path: `/${lang}/index.html` });
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
exports.collectIndexPage = collectIndexPage;
|
|
66
|
+
const collectCategoryPage = (lang, category) => {
|
|
67
|
+
const slug = `categories_${category}`;
|
|
68
|
+
let entry = sitemapUrls.get(slug);
|
|
69
|
+
if (!entry) {
|
|
70
|
+
entry = { slug, langs: [] };
|
|
71
|
+
sitemapUrls.set(slug, entry);
|
|
72
|
+
}
|
|
73
|
+
if (!entry.langs.some(l => l.lang === lang)) {
|
|
74
|
+
entry.langs.push({ lang, path: `/${lang}/categories_${category}.html` });
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
exports.collectCategoryPage = collectCategoryPage;
|
|
78
|
+
const generateSitemap = async (baseUrl) => {
|
|
79
|
+
if (sitemapUrls.size === 0) {
|
|
80
|
+
console.warn('⚠️ No URLs collected for sitemap');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const baseUrlClean = baseUrl.replace(/\/$/, '');
|
|
84
|
+
let sitemap = `<?xml version="1.0" encoding="UTF-8"?>
|
|
85
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
|
86
|
+
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
|
87
|
+
`;
|
|
88
|
+
for (const entry of sitemapUrls.values()) {
|
|
89
|
+
sitemap += ` <url>\n`;
|
|
90
|
+
for (const langEntry of entry.langs) {
|
|
91
|
+
const fullUrl = `${baseUrlClean}${langEntry.path}`;
|
|
92
|
+
const fullUrlEncoded = encodeURI(fullUrl);
|
|
93
|
+
if (langEntry.lang === entry.langs[0].lang) {
|
|
94
|
+
sitemap += ` <loc>${fullUrlEncoded}</loc>\n`;
|
|
95
|
+
}
|
|
96
|
+
sitemap += ` <xhtml:link rel="alternate" hreflang="${langEntry.lang}" href="${fullUrlEncoded}"/>\n`;
|
|
97
|
+
}
|
|
98
|
+
sitemap += ` </url>\n`;
|
|
99
|
+
}
|
|
100
|
+
sitemap += `</urlset>`;
|
|
101
|
+
const sitemapPath = path.join(paths_1.CZON_DIST_DIR, 'sitemap.xml');
|
|
102
|
+
await (0, writeFile_1.writeFile)(sitemapPath, sitemap);
|
|
103
|
+
console.log(`✅ Generated sitemap.xml with ${sitemapUrls.size} URLs`);
|
|
104
|
+
};
|
|
105
|
+
exports.generateSitemap = generateSitemap;
|
|
106
|
+
const clearSitemapCollection = () => {
|
|
107
|
+
sitemapUrls.clear();
|
|
108
|
+
};
|
|
109
|
+
exports.clearSitemapCollection = clearSitemapCollection;
|
|
110
|
+
//# sourceMappingURL=sitemap.js.map
|
package/dist/cli.js
CHANGED
|
@@ -1,42 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
4
|
const clipanion_1 = require("clipanion");
|
|
38
5
|
const dotenv_1 = require("dotenv");
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
6
|
const pipeline_1 = require("./build/pipeline");
|
|
41
7
|
const version_1 = require("./version");
|
|
42
8
|
// 加载 .env 文件中的环境变量
|
|
@@ -45,18 +11,20 @@ const version_1 = require("./version");
|
|
|
45
11
|
class BuildCommand extends clipanion_1.Command {
|
|
46
12
|
constructor() {
|
|
47
13
|
super(...arguments);
|
|
48
|
-
this.template = clipanion_1.Option.String('-t,--template');
|
|
49
14
|
this.verbose = clipanion_1.Option.Boolean('-v,--verbose');
|
|
50
15
|
this.lang = clipanion_1.Option.Array('--lang', {
|
|
51
16
|
description: 'Target languages for translation (e.g., en-US, ja-JP)',
|
|
52
17
|
});
|
|
18
|
+
this.baseUrl = clipanion_1.Option.String('--baseUrl', {
|
|
19
|
+
description: 'Base URL for sitemap generation (e.g., https://yoursite.com). If not provided, sitemap will not be generated.',
|
|
20
|
+
});
|
|
53
21
|
}
|
|
54
22
|
async execute() {
|
|
55
23
|
try {
|
|
56
24
|
await (0, pipeline_1.buildSite)({
|
|
57
|
-
template: this.template ? path.resolve(this.template) : undefined,
|
|
58
25
|
verbose: this.verbose,
|
|
59
26
|
langs: this.lang,
|
|
27
|
+
baseUrl: this.baseUrl,
|
|
60
28
|
});
|
|
61
29
|
return 0;
|
|
62
30
|
}
|
|
@@ -76,6 +44,7 @@ BuildCommand.usage = clipanion_1.Command.Usage({
|
|
|
76
44
|
Examples:
|
|
77
45
|
$ czon build
|
|
78
46
|
$ czon build --lang en-US --lang ja-JP (translate to English and Japanese)
|
|
47
|
+
$ czon build --baseUrl https://yoursite.com (generate sitemap.xml)
|
|
79
48
|
`,
|
|
80
49
|
});
|
|
81
50
|
// 创建 CLI 应用
|
package/dist/process/template.js
CHANGED
|
@@ -38,6 +38,7 @@ const fs = __importStar(require("fs/promises"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const metadata_1 = require("../metadata");
|
|
40
40
|
const paths_1 = require("../paths");
|
|
41
|
+
const sitemap_1 = require("../build/sitemap");
|
|
41
42
|
const ssg_1 = require("../ssg");
|
|
42
43
|
const convertMarkdownToHtml_1 = require("../utils/convertMarkdownToHtml");
|
|
43
44
|
const frontmatter_1 = require("../utils/frontmatter");
|
|
@@ -46,6 +47,7 @@ const writeFile_1 = require("../utils/writeFile");
|
|
|
46
47
|
* 使用简单的爬虫抓取生成的站点页面
|
|
47
48
|
*/
|
|
48
49
|
const spiderStaticSiteGenerator = async () => {
|
|
50
|
+
(0, sitemap_1.clearSitemapCollection)();
|
|
49
51
|
const queue = ['/index.html', '/404.html'];
|
|
50
52
|
// 将每个语言的首页加入队列
|
|
51
53
|
for (const lang of metadata_1.MetaData.options.langs || []) {
|
|
@@ -117,6 +119,22 @@ const spiderStaticSiteGenerator = async () => {
|
|
|
117
119
|
return match;
|
|
118
120
|
});
|
|
119
121
|
console.info(`🕷️ Crawled ${currentPath}`);
|
|
122
|
+
// 收集 URL 用于 sitemap
|
|
123
|
+
const urlMatch = currentPath.match(/^\/([^/]+)\/(.+)\.html$/);
|
|
124
|
+
if (urlMatch) {
|
|
125
|
+
const lang = urlMatch[1];
|
|
126
|
+
const page = urlMatch[2];
|
|
127
|
+
if (page === 'index') {
|
|
128
|
+
(0, sitemap_1.collectIndexPage)(lang);
|
|
129
|
+
}
|
|
130
|
+
else if (page.startsWith('categories_')) {
|
|
131
|
+
const category = page.replace('categories_', '');
|
|
132
|
+
(0, sitemap_1.collectCategoryPage)(lang, category);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
(0, sitemap_1.collectUrl)(lang, page);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
120
138
|
await (0, writeFile_1.writeFile)(path.join(paths_1.CZON_DIST_DIR, currentPath), html);
|
|
121
139
|
// 提取生成的 HTML 中的站内链接,加入爬取队列
|
|
122
140
|
const linkRegex = /href="([^"]+)"/g;
|
package/dist/ssg/ContentPage.js
CHANGED
|
@@ -33,7 +33,7 @@ const ContentPage = props => {
|
|
|
33
33
|
react_1.default.createElement("script", { src: "https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4", defer: true }),
|
|
34
34
|
react_1.default.createElement("style", null, style_1.style)),
|
|
35
35
|
react_1.default.createElement("body", null,
|
|
36
|
-
react_1.default.createElement(PageLayout_1.PageLayout, { header: react_1.default.createElement(CZONHeader_1.CZONHeader, { ctx: props.ctx, lang: props.lang, file: props.file }), navigator: react_1.default.createElement("nav", { className: "sidebar" },
|
|
36
|
+
react_1.default.createElement(PageLayout_1.PageLayout, { header: react_1.default.createElement(CZONHeader_1.CZONHeader, { ctx: props.ctx, lang: props.lang, file: props.file }), navigator: react_1.default.createElement("nav", { className: "sidebar hidden md:block" },
|
|
37
37
|
react_1.default.createElement(Navigator_1.Navigator, { ctx: props.ctx, file: props.file, lang: props.lang })), main: react_1.default.createElement("main", { className: "content" },
|
|
38
38
|
react_1.default.createElement(ContentMeta_1.ContentMeta, { ctx: props.ctx, file: props.file, lang: props.lang }),
|
|
39
39
|
react_1.default.createElement("div", { className: "content-body" },
|
|
@@ -26,7 +26,10 @@ const Navigator = props => {
|
|
|
26
26
|
const theContent = props.ctx.contents.find(c => c.lang === props.lang && c.hash === file.hash);
|
|
27
27
|
const theTitle = theContent?.frontmatter?.title || file.metadata.title || '(no title)';
|
|
28
28
|
return (react_1.default.createElement("li", { className: "nav-item", key: file.hash },
|
|
29
|
-
react_1.default.createElement("a", { href: link, className: `nav-link ${isActive ? 'active' : ''}` },
|
|
29
|
+
react_1.default.createElement("a", { href: link, className: `nav-link ${isActive ? 'active' : ''}` },
|
|
30
|
+
theTitle,
|
|
31
|
+
" ",
|
|
32
|
+
file.metadata?.inferred_date && `(${file.metadata.inferred_date})`)));
|
|
30
33
|
})));
|
|
31
34
|
})));
|
|
32
35
|
};
|
package/dist/ssg/style.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "czon",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "CZone - AI enhanced Markdown content engine",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "npx rimraf dist && tsc",
|
|
10
10
|
"dev": "ts-node src/cli.ts",
|
|
11
|
-
"build:doc": "npm run build && node dist/cli.js build --lang zh-Hans --lang en-US --lang ja-JP --lang ko-KR --lang es-ES --lang fr-FR --lang de-DE --lang ru-RU --lang pt-PT --lang it-IT --lang nl-NL --lang pl-PL --lang sv-SE --lang fi-FI --lang da-DK --lang no-NO --lang zh-Hant --lang hi-IN --lang ar-SA --lang th-TH --lang vi-VN --lang id-ID --lang pt-BR --lang es-MX --lang tr-TR --lang uk-UA --verbose",
|
|
11
|
+
"build:doc": "npm run build && node dist/cli.js build --lang zh-Hans --lang en-US --lang ja-JP --lang ko-KR --lang es-ES --lang fr-FR --lang de-DE --lang ru-RU --lang pt-PT --lang it-IT --lang nl-NL --lang pl-PL --lang sv-SE --lang fi-FI --lang da-DK --lang no-NO --lang zh-Hant --lang hi-IN --lang ar-SA --lang th-TH --lang vi-VN --lang id-ID --lang pt-BR --lang es-MX --lang tr-TR --lang uk-UA --verbose --baseUrl 'https://czon.zccz14.com/'",
|
|
12
12
|
"test": "npm run build && node --test dist/**/*.test.js",
|
|
13
13
|
"test:types": "tsc --noEmit",
|
|
14
14
|
"test:build": "npm run build && test -f dist/index.js && test -f dist/cli.js",
|