czon 0.2.7 → 0.2.9

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.
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { IRenderContext } from '../types';
3
+ export declare const RootPage: React.FC<{
4
+ ctx: IRenderContext;
5
+ }>;
6
+ //# sourceMappingURL=RootPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootPage.d.ts","sourceRoot":"","sources":["../../src/ssg/RootPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,CAwDtD,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RootPage = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const languages_1 = require("../languages");
9
+ // /index.html 的根页面
10
+ // 需要实现多语言选择,自动重定向到用户浏览器语言对应的首页
11
+ // 需要对 SEO 友好,提供适当的 meta 标签
12
+ const RootPage = props => {
13
+ const mapUserLangToSupported = {};
14
+ for (const lang of props.ctx.site.options.langs || []) {
15
+ mapUserLangToSupported[lang] = lang;
16
+ const langPrefix = lang.split('-')[0];
17
+ if (!mapUserLangToSupported[langPrefix]) {
18
+ mapUserLangToSupported[langPrefix] = lang;
19
+ }
20
+ }
21
+ return (react_1.default.createElement("html", { lang: "en" },
22
+ react_1.default.createElement("head", null,
23
+ react_1.default.createElement("meta", { charSet: "UTF-8" }),
24
+ react_1.default.createElement("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0" }),
25
+ react_1.default.createElement("title", null, "CZON Multilingual Site Navigator"),
26
+ react_1.default.createElement("meta", { name: "description", content: "Select your preferred language to explore our content." }),
27
+ props.ctx.site.options.langs.map(lang => (react_1.default.createElement("link", { rel: "alternate", hrefLang: lang, href: `${lang}/index.html` }))),
28
+ react_1.default.createElement("link", { rel: "alternate", hrefLang: "x-default", href: `${props.ctx.site.options.langs[0]}/index.html` })),
29
+ react_1.default.createElement("body", null,
30
+ react_1.default.createElement("h1", null, "Welcome to CZON Multilingual Site"),
31
+ react_1.default.createElement("p", null, "Please select your preferred language if automatic redirection does not work:"),
32
+ react_1.default.createElement("ul", null, props.ctx.site.options.langs?.map(lang => (react_1.default.createElement("li", { key: lang },
33
+ react_1.default.createElement("a", { href: `/${lang}/index.html` },
34
+ "(",
35
+ languages_1.LANGUAGE_NAMES[lang] || lang,
36
+ ")"))))),
37
+ react_1.default.createElement("script", null, `
38
+ // 自动重定向到用户浏览器语言对应的首页
39
+ (function() {
40
+ const mapUserLangToSupported = ${JSON.stringify(mapUserLangToSupported)};
41
+ for (const lang of navigator.languages) {
42
+ if (mapUserLangToSupported[lang]) {
43
+ window.location.href = mapUserLangToSupported[lang] + '/index.html';
44
+ return;
45
+ }
46
+ }
47
+ window.location.href = '${props.ctx.site.options.langs[0]}/index.html'; // 默认语言
48
+ })();
49
+
50
+ `))));
51
+ };
52
+ exports.RootPage = RootPage;
53
+ //# sourceMappingURL=RootPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootPage.js","sourceRoot":"","sources":["../../src/ssg/RootPage.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,4CAA8C;AAG9C,mBAAmB;AACnB,+BAA+B;AAC/B,2BAA2B;AACpB,MAAM,QAAQ,GAAsC,KAAK,CAAC,EAAE;IACjE,MAAM,sBAAsB,GAA2B,EAAE,CAAC;IAE1D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACtD,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,sBAAsB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,CACL,wCAAM,IAAI,EAAC,IAAI;QACb;YACE,wCAAM,OAAO,EAAC,OAAO,GAAG;YACxB,wCAAM,IAAI,EAAC,UAAU,EAAC,OAAO,EAAC,uCAAuC,GAAG;YACxE,gFAA+C;YAC/C,wCAAM,IAAI,EAAC,aAAa,EAAC,OAAO,EAAC,wDAAwD,GAAG;YAC3F,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACzC,wCAAM,GAAG,EAAC,WAAW,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,aAAa,GAAI,CACrE,CAAC;YACF,wCACE,GAAG,EAAC,WAAW,EACf,QAAQ,EAAC,WAAW,EACpB,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,aAAa,GACtD,CACG;QACP;YACE,8EAA0C;YAC1C,yHAAoF;YACpF,0CACG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACzC,sCAAI,GAAG,EAAE,IAAI;gBACX,qCAAG,IAAI,EAAE,IAAI,IAAI,aAAa;;oBAAI,0BAAc,CAAC,IAAI,CAAC,IAAI,IAAI;wBAAM,CACjE,CACN,CAAC,CACC;YACL,8CACG;;;6CAGkC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC;;;;;;;sCAO7C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC;;;WAG3D,CACM,CACJ,CACF,CACR,CAAC;AACJ,CAAC,CAAC;AAxDW,QAAA,QAAQ,YAwDnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI1C,eAAO,MAAM,GAAG,GAAI,OAAO,cAAc,sBAkCxC,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,eAAO,MAAM,GAAG,GAAI,OAAO,cAAc,sBAkCxC,CAAC"}
package/dist/ssg/app.js CHANGED
@@ -7,9 +7,10 @@ exports.App = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const ContentPage_1 = require("./ContentPage");
9
9
  const RedirectPage_1 = require("./RedirectPage");
10
+ const RootPage_1 = require("./RootPage");
10
11
  const App = (props) => {
11
12
  if (props.path === '/index.html') {
12
- return react_1.default.createElement(RedirectPage_1.RedirectPage, { from: props.path, to: `/${props.site.options.langs[0]}/index.html` });
13
+ return react_1.default.createElement(RootPage_1.RootPage, { ctx: props });
13
14
  }
14
15
  // 每个语言的首页
15
16
  for (const lang of props.site.options.langs || []) {
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,+CAA4C;AAC5C,iDAA8C;AAEvC,MAAM,GAAG,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC,aAAa,GAAI,CAAC;IAC/F,CAAC;IAED,UAAU;IACV,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC/D,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,SAAU,CAAC,QAAS,CAAC,IAAI,OAAO,GAAI,CAAC;YAC5F,kBAAkB;YAClB,WAAW;YACX,UAAU;YACV,sCAAsC;YACtC,wCAAwC;YACxC,0CAA0C;YAC1C,gDAAgD;YAChD,2DAA2D;YAC3D,eAAe;YACf,UAAU;YACV,WAAW;YACX,KAAK;QACP,CAAC;QACD,SAAS;QACT,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrF,IAAI,CAAC,UAAU;oBAAE,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;gBAC9E,OAAO,8BAAC,yBAAW,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAW,GAAI,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;AAC/D,CAAC,CAAC;AAlCW,QAAA,GAAG,OAkCd"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/ssg/app.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,+CAA4C;AAC5C,iDAA8C;AAC9C,yCAAsC;AAE/B,MAAM,GAAG,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,8BAAC,mBAAQ,IAAC,GAAG,EAAE,KAAK,GAAI,CAAC;IAClC,CAAC;IAED,UAAU;IACV,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC/D,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,SAAU,CAAC,QAAS,CAAC,IAAI,OAAO,GAAI,CAAC;YAC5F,kBAAkB;YAClB,WAAW;YACX,UAAU;YACV,sCAAsC;YACtC,wCAAwC;YACxC,0CAA0C;YAC1C,gDAAgD;YAChD,2DAA2D;YAC3D,eAAe;YACf,UAAU;YACV,WAAW;YACX,KAAK;QACP,CAAC;QACD,SAAS;QACT,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrF,IAAI,CAAC,UAAU;oBAAE,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;gBAC9E,OAAO,8BAAC,yBAAW,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAW,GAAI,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,8BAAC,2BAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,GAAI,CAAC;AAC/D,CAAC,CAAC;AAlCW,QAAA,GAAG,OAkCd"}
@@ -1 +1 @@
1
- {"version":3,"file":"Navigator.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd,CAoCA,CAAC"}
1
+ {"version":3,"file":"Navigator.d.ts","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd,CA6CA,CAAC"}
@@ -5,11 +5,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Navigator = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
+ const sortBy_1 = require("../../utils/sortBy");
8
9
  const Navigator = props => {
9
10
  const categories = [...new Set(props.ctx.site.files.map(f => f.category))];
10
11
  return (react_1.default.createElement("ul", { className: "nav-list" }, categories.map(category => {
11
12
  const categoryKey = category || 'NO_CATEGORY';
12
- const filesInCategory = props.ctx.site.files.filter(f => f.category === category && f.metadata);
13
+ const filesInCategory = (0, sortBy_1.toSortedBy)(props.ctx.site.files.filter(f => f.category === category && f.metadata), [
14
+ // 无日期的排前面
15
+ [x => (x.metadata?.inferred_date ? 1 : 0), 'asc'],
16
+ // 日期降序
17
+ [x => x.metadata?.inferred_date || '', 'desc'],
18
+ ]);
19
+ if (filesInCategory.length === 0)
20
+ return null;
13
21
  return (react_1.default.createElement("div", { key: categoryKey },
14
22
  react_1.default.createElement("li", { className: "nav-item font-bold", key: categoryKey }, category || '--'),
15
23
  filesInCategory.map(file => {
@@ -1 +1 @@
1
- {"version":3,"file":"Navigator.js","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAGnB,MAAM,SAAS,GAIjB,KAAK,CAAC,EAAE;IACX,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,IACrB,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QACzB,MAAM,WAAW,GAAG,QAAQ,IAAI,aAAa,CAAC;QAC9C,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAC3C,CAAC;QACF,OAAO,CACL,uCAAK,GAAG,EAAE,WAAW;YACnB,sCAAI,SAAS,EAAC,oBAAoB,EAAC,GAAG,EAAE,WAAW,IAChD,QAAQ,IAAI,IAAI,CACd;YACJ,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CACnD,CAAC;gBACF,MAAM,QAAQ,GACZ,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,QAAS,CAAC,KAAK,IAAI,YAAY,CAAC;gBAEzE,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI;oBACrC,qCAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,IAC7D,QAAQ,CACP,CACD,CACN,CAAC;YACJ,CAAC,CAAC,CACE,CACP,CAAC;IACJ,CAAC,CAAC,CACC,CACN,CAAC;AACJ,CAAC,CAAC;AAxCW,QAAA,SAAS,aAwCpB"}
1
+ {"version":3,"file":"Navigator.js","sourceRoot":"","sources":["../../../src/ssg/components/Navigator.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,+CAAgD;AAEzC,MAAM,SAAS,GAIjB,KAAK,CAAC,EAAE;IACX,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,IACrB,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QACzB,MAAM,WAAW,GAAG,QAAQ,IAAI,aAAa,CAAC;QAC9C,MAAM,eAAe,GAAG,IAAA,mBAAU,EAChC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,EACvE;YACE,UAAU;YACV,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;YACjD,OAAO;YACP,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,IAAI,EAAE,EAAE,MAAM,CAAC;SAC/C,CACF,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE9C,OAAO,CACL,uCAAK,GAAG,EAAE,WAAW;YACnB,sCAAI,SAAS,EAAC,oBAAoB,EAAC,GAAG,EAAE,WAAW,IAChD,QAAQ,IAAI,IAAI,CACd;YACJ,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,IAAI,GAAG,OAAO,CAAC;gBAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CACnD,CAAC;gBACF,MAAM,QAAQ,GACZ,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,QAAS,CAAC,KAAK,IAAI,YAAY,CAAC;gBAEzE,OAAO,CACL,sCAAI,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI;oBACrC,qCAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,IAC7D,QAAQ,CACP,CACD,CACN,CAAC;YACJ,CAAC,CAAC,CACE,CACP,CAAC;IACJ,CAAC,CAAC,CACC,CACN,CAAC;AACJ,CAAC,CAAC;AAjDW,QAAA,SAAS,aAiDpB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Sort an array by multiple key functions.
3
+ * @param arr - The array to sort.
4
+ * @param keyFns - An array of functions to extract the sort keys.
5
+ * @returns - The sorted array (new array).
6
+ */
7
+ export declare const toSortedBy: <T>(arr: T[], keyFns: Array<[func: (item: T) => any, order: "asc" | "desc"]>) => T[];
8
+ //# sourceMappingURL=sortBy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortBy.d.ts","sourceRoot":"","sources":["../../src/utils/sortBy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAC1B,KAAK,CAAC,EAAE,EACR,QAAQ,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,KAC7D,CAAC,EAsBH,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toSortedBy = void 0;
4
+ /**
5
+ * Sort an array by multiple key functions.
6
+ * @param arr - The array to sort.
7
+ * @param keyFns - An array of functions to extract the sort keys.
8
+ * @returns - The sorted array (new array).
9
+ */
10
+ const toSortedBy = (arr, keyFns) => {
11
+ return arr
12
+ .map(item => ({ item, keys: keyFns.map(([fn]) => fn(item)) }))
13
+ .sort((a, b) => {
14
+ for (let i = 0; i < a.keys.length; i++) {
15
+ const order = keyFns[i][1];
16
+ const vA = a.keys[i];
17
+ const vB = b.keys[i];
18
+ if (vA !== vB) {
19
+ if (typeof vA === 'number' && typeof vB === 'number') {
20
+ return order === 'asc' ? vA - vB : vB - vA;
21
+ }
22
+ else {
23
+ // some of the values are strings
24
+ return order === 'asc'
25
+ ? String(vA).localeCompare(String(vB))
26
+ : String(vB).localeCompare(String(vA));
27
+ }
28
+ }
29
+ }
30
+ return 0;
31
+ })
32
+ .map(({ item }) => item);
33
+ };
34
+ exports.toSortedBy = toSortedBy;
35
+ //# sourceMappingURL=sortBy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortBy.js","sourceRoot":"","sources":["../../src/utils/sortBy.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CACxB,GAAQ,EACR,MAA8D,EACzD,EAAE;IACP,OAAO,GAAG;SACP,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;SAC7D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACd,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;oBACrD,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,iCAAiC;oBACjC,OAAO,KAAK,KAAK,KAAK;wBACpB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACtC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAC;AAzBW,QAAA,UAAU,cAyBrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "czon",
3
- "version": "0.2.7",
3
+ "version": "0.2.9",
4
4
  "description": "CZone - AI enhanced Markdown content engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",