@firok-arc-project/arc-centrifuge 0.5.0

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.
Files changed (67) hide show
  1. package/centrifuge.iml +9 -0
  2. package/dist/doc.d.ts +5 -0
  3. package/dist/doc.d.ts.map +1 -0
  4. package/dist/doc.js +60 -0
  5. package/dist/doc.js.map +1 -0
  6. package/dist/file-system.d.ts +3 -0
  7. package/dist/file-system.d.ts.map +1 -0
  8. package/dist/file-system.js +39 -0
  9. package/dist/file-system.js.map +1 -0
  10. package/dist/fs/fs-meta.d.ts +3 -0
  11. package/dist/fs/fs-meta.d.ts.map +1 -0
  12. package/dist/fs/fs-meta.js +36 -0
  13. package/dist/fs/fs-meta.js.map +1 -0
  14. package/dist/gen-all-tag-json.d.ts +3 -0
  15. package/dist/gen-all-tag-json.d.ts.map +1 -0
  16. package/dist/gen-all-tag-json.js +7 -0
  17. package/dist/gen-all-tag-json.js.map +1 -0
  18. package/dist/gen-tag-indexing.d.ts +4 -0
  19. package/dist/gen-tag-indexing.d.ts.map +1 -0
  20. package/dist/gen-tag-indexing.js +29 -0
  21. package/dist/gen-tag-indexing.js.map +1 -0
  22. package/dist/gen-timeline-indexing.d.ts +4 -0
  23. package/dist/gen-timeline-indexing.d.ts.map +1 -0
  24. package/dist/gen-timeline-indexing.js +17 -0
  25. package/dist/gen-timeline-indexing.js.map +1 -0
  26. package/dist/gen.d.ts +4 -0
  27. package/dist/gen.d.ts.map +1 -0
  28. package/dist/gen.js +16 -0
  29. package/dist/gen.js.map +1 -0
  30. package/dist/id-entity.d.ts +3 -0
  31. package/dist/id-entity.d.ts.map +1 -0
  32. package/dist/id-entity.js +8 -0
  33. package/dist/id-entity.js.map +1 -0
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +31 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/meta-config.d.ts +3 -0
  39. package/dist/meta-config.d.ts.map +1 -0
  40. package/dist/meta-config.js +49 -0
  41. package/dist/meta-config.js.map +1 -0
  42. package/dist/tag/tags.d.ts +5 -0
  43. package/dist/tag/tags.d.ts.map +1 -0
  44. package/dist/tag/tags.js +39 -0
  45. package/dist/tag/tags.js.map +1 -0
  46. package/dist/tag-indexing.d.ts +6 -0
  47. package/dist/tag-indexing.d.ts.map +1 -0
  48. package/dist/tag-indexing.js +41 -0
  49. package/dist/tag-indexing.js.map +1 -0
  50. package/package.json +29 -0
  51. package/readme.md +74 -0
  52. package/src/doc.ts +92 -0
  53. package/src/file-system.ts +59 -0
  54. package/src/gen-all-tag-json.ts +11 -0
  55. package/src/gen-tag-indexing.ts +50 -0
  56. package/src/gen-timeline-indexing.ts +27 -0
  57. package/src/gen.ts +26 -0
  58. package/src/id-entity.ts +11 -0
  59. package/src/index.ts +42 -0
  60. package/src/meta-config.ts +76 -0
  61. package/src/types/doc-meta-def.d.ts +17 -0
  62. package/src/types/file-system-def.d.ts +25 -0
  63. package/src/types/id-entity-def.d.ts +7 -0
  64. package/src/types/meta-config-def.d.ts +11 -0
  65. package/src/types/tag-data-def.d.ts +44 -0
  66. package/src/types/tag-indexing-def.d.ts +16 -0
  67. package/tsconfig.json +61 -0
package/centrifuge.iml ADDED
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="WEB_MODULE" version="4">
3
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
4
+ <exclude-output />
5
+ <content url="file://$MODULE_DIR$" />
6
+ <orderEntry type="inheritedJdk" />
7
+ <orderEntry type="sourceFolder" forTests="false" />
8
+ </component>
9
+ </module>
package/dist/doc.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { FolderNode } from './types/file-system-def';
2
+ import { DocMeta, DocMetaMap } from './types/doc-meta-def';
3
+ export declare function collectDocMeta(folder: FolderNode): Promise<DocMetaMap>;
4
+ export declare function getSortedDocMeta(map: DocMetaMap): DocMeta[];
5
+ //# sourceMappingURL=doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../src/doc.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,sBAAsB,CAAA;AA0ExD,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAK5E;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAAE,CAK3D"}
package/dist/doc.js ADDED
@@ -0,0 +1,60 @@
1
+ import * as fs from 'node:fs';
2
+ import matter from 'gray-matter';
3
+ /**
4
+ * 读取文档中的元数据
5
+ * */
6
+ function loadDocMeta(textDoc, pathRelative) {
7
+ const fileMatter = matter(textDoc);
8
+ // console.log('matter', fileMatter)
9
+ const json = fileMatter.data;
10
+ let { id, title, createTimestamp, updateTimestamp, sortTimestamp, tags, } = json;
11
+ if ('string' !== typeof id)
12
+ throw 'doc id not found: ' + json;
13
+ if ('string' !== typeof title)
14
+ throw 'doc title not found: ' + json;
15
+ const dateCreate = new Date(json.createTimestamp);
16
+ const dateUpdate = new Date(json.updateTimestamp);
17
+ const dateSort = new Date(json.sortTimestamp);
18
+ createTimestamp = dateCreate.getTime();
19
+ updateTimestamp = dateUpdate.getTime();
20
+ sortTimestamp = dateSort.getTime();
21
+ if (!Array.isArray(tags))
22
+ tags = [];
23
+ return {
24
+ ...json,
25
+ id,
26
+ title,
27
+ createTimestamp,
28
+ updateTimestamp,
29
+ sortTimestamp,
30
+ tags,
31
+ pathRelative,
32
+ };
33
+ }
34
+ function findDocData(folder, map) {
35
+ for (const file of folder.listChildrenFile) {
36
+ if (file.filename.endsWith('.md')) {
37
+ const textFile = fs.readFileSync(file.pathAbsolute, {
38
+ encoding: 'utf-8',
39
+ });
40
+ const dataDoc = loadDocMeta(textFile, file.pathRelative);
41
+ if (map[dataDoc.id] != null)
42
+ throw 'doc id duplicated: ' + dataDoc.id;
43
+ map[dataDoc.id] = dataDoc;
44
+ }
45
+ }
46
+ for (const childFolder of folder.listChildrenFolder) {
47
+ findDocData(childFolder, map);
48
+ }
49
+ }
50
+ export async function collectDocMeta(folder) {
51
+ const ret = {};
52
+ findDocData(folder, ret);
53
+ return ret;
54
+ }
55
+ export function getSortedDocMeta(map) {
56
+ return Object.values(map).sort((a, b) => {
57
+ return a.sortTimestamp - b.sortTimestamp;
58
+ });
59
+ }
60
+ //# sourceMappingURL=doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.js","sourceRoot":"","sources":["../src/doc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,OAAO,MAAM,MAAM,aAAa,CAAA;AAIhC;;KAEK;AACL,SAAS,WAAW,CAClB,OAAe,EACf,YAAoB;IAGpB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAClC,oCAAoC;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAe,CAAA;IACvC,IAAI,EACF,EAAE,EACF,KAAK,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,IAAI,GACL,GAAG,IAAI,CAAA;IAER,IAAG,QAAQ,KAAK,OAAO,EAAE;QACvB,MAAM,oBAAoB,GAAG,IAAI,CAAA;IACnC,IAAG,QAAQ,KAAK,OAAO,KAAK;QAC1B,MAAM,uBAAuB,GAAG,IAAI,CAAA;IAEtC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACjD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC7C,eAAe,GAAG,UAAU,CAAC,OAAO,EAAE,CAAA;IACtC,eAAe,GAAG,UAAU,CAAC,OAAO,EAAE,CAAA;IACtC,aAAa,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;IAElC,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACrB,IAAI,GAAG,EAAE,CAAA;IAEX,OAAO;QACL,GAAG,IAAI;QACP,EAAE;QACF,KAAK;QACL,eAAe;QACf,eAAe;QACf,aAAa;QACb,IAAI;QACJ,YAAY;KACF,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB,EAAE,GAAe;IAEtD,KAAI,MAAM,IAAI,IAAI,MAAM,CAAC,gBAAgB,EACzC,CAAC;QACC,IAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAChC,CAAC;YACC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;gBAClD,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAA;YAEF,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAExD,IAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI;gBACxB,MAAM,qBAAqB,GAAG,OAAO,CAAC,EAAE,CAAA;YAE1C,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,KAAI,MAAM,WAAW,IAAI,MAAM,CAAC,kBAAkB,EAClD,CAAC;QACC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAkB;IAErD,MAAM,GAAG,GAAe,EAAE,CAAA;IAC1B,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAe;IAE9C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtC,OAAO,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FolderNode } from './types/file-system-def';
2
+ export declare function readFileSystem(pathDir: string, pathBaseDir?: string): FolderNode;
3
+ //# sourceMappingURL=file-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../src/file-system.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,UAAU,EAAC,MAAM,yBAAyB,CAAA;AAE5D,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,UAAU,CAiDZ"}
@@ -0,0 +1,39 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ export function readFileSystem(pathDir, pathBaseDir) {
4
+ if (pathBaseDir == null)
5
+ pathBaseDir = pathDir;
6
+ const listDirent = fs.readdirSync(pathDir, {
7
+ withFileTypes: true,
8
+ });
9
+ const pathAbsolute = path.resolve(pathDir);
10
+ const pathRelative = path.relative(pathBaseDir, pathDir);
11
+ console.log('pathBaseDir', pathBaseDir, 'pathDir', pathDir, 'pathAbsolute', pathAbsolute, 'pathRelative', pathRelative);
12
+ const listFolder = [];
13
+ const listFile = [];
14
+ for (const obj of listDirent) {
15
+ const pathAbsolute = path.resolve(pathDir, obj.name);
16
+ const pathRelative = path.relative(pathBaseDir, pathAbsolute);
17
+ if (obj.isFile()) {
18
+ const filename = obj.name;
19
+ const fileExt = filename.split('.').pop();
20
+ listFile.push({
21
+ filename,
22
+ fileExt,
23
+ pathAbsolute,
24
+ pathRelative,
25
+ });
26
+ }
27
+ else if (obj.isDirectory()) {
28
+ const folderNode = readFileSystem(pathAbsolute, pathBaseDir);
29
+ listFolder.push(folderNode);
30
+ }
31
+ }
32
+ return {
33
+ listChildrenFile: listFile,
34
+ listChildrenFolder: listFolder,
35
+ pathAbsolute,
36
+ pathRelative,
37
+ };
38
+ }
39
+ //# sourceMappingURL=file-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../src/file-system.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAIjC,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,WAAoB;IAGpB,IAAG,WAAW,IAAI,IAAI;QACpB,WAAW,GAAG,OAAO,CAAA;IAEvB,MAAM,UAAU,GAAa,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE;QACnD,aAAa,EAAE,IAAI;KACpB,CAAC,CAAA;IACF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,CACT,aAAa,EAAE,WAAW,EACxB,SAAS,EAAE,OAAO,EAClB,cAAc,EAAE,YAAY,EAC5B,cAAc,EAAE,YAAY,CAC7B,CAAA;IAEH,MAAM,UAAU,GAAiB,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAe,EAAE,CAAA;IAE/B,KAAI,MAAM,GAAG,IAAI,UAAU,EAC3B,CAAC;QACC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QAE7D,IAAG,GAAG,CAAC,MAAM,EAAE,EACf,CAAC;YACC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAA;YACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YACzC,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ;gBACR,OAAO;gBACP,YAAY;gBACZ,YAAY;aACD,CAAC,CAAA;QAChB,CAAC;aACI,IAAG,GAAG,CAAC,WAAW,EAAE,EACzB,CAAC;YACC,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YAC5D,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,OAAO;QACL,gBAAgB,EAAE,QAAQ;QAC1B,kBAAkB,EAAE,UAAU;QAC9B,YAAY;QACZ,YAAY;KACC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FolderNode } from './fs-meta-data.d.ts';
2
+ export declare function readFileSystem(pathDir: string, pathBaseDir: string): FolderNode;
3
+ //# sourceMappingURL=fs-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-meta.d.ts","sourceRoot":"","sources":["../../src/fs/fs-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,UAAU,EAAC,MAAM,qBAAqB,CAAA;AAM7D,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAwC/E"}
@@ -0,0 +1,36 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ export function readFileSystem(pathDir, pathBaseDir) {
4
+ const listDirent = fs.readdirSync(pathDir, {
5
+ withFileTypes: true,
6
+ });
7
+ const pathAbsolute = path.resolve(pathDir);
8
+ const pathRelative = path.relative(pathBaseDir, pathDir);
9
+ const listFolder = [];
10
+ const listFile = [];
11
+ for (const obj of listDirent) {
12
+ const pathAbsolute = path.resolve(pathDir, obj.name);
13
+ const pathRelative = path.relative(pathDir, pathAbsolute);
14
+ if (obj.isFile()) {
15
+ const filename = obj.name;
16
+ const fileExt = filename.split('.').pop();
17
+ listFile.push({
18
+ filename,
19
+ fileExt,
20
+ pathAbsolute,
21
+ pathRelative,
22
+ });
23
+ }
24
+ else if (obj.isDirectory()) {
25
+ const folderNode = readFileSystem(pathAbsolute, pathBaseDir);
26
+ listFolder.push(folderNode);
27
+ }
28
+ }
29
+ return {
30
+ listChildrenFile: listFile,
31
+ listChildrenFolder: listFolder,
32
+ pathAbsolute,
33
+ pathRelative,
34
+ };
35
+ }
36
+ //# sourceMappingURL=fs-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-meta.js","sourceRoot":"","sources":["../../src/fs/fs-meta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAGjC,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,WAAmB;IAEjE,MAAM,UAAU,GAAa,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE;QACnD,aAAa,EAAE,IAAI;KACpB,CAAC,CAAA;IACF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAExD,MAAM,UAAU,GAAiB,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAe,EAAE,CAAA;IAE/B,KAAI,MAAM,GAAG,IAAI,UAAU,EAC3B,CAAC;QACC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAEzD,IAAG,GAAG,CAAC,MAAM,EAAE,EACf,CAAC;YACC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAA;YACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YACzC,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ;gBACR,OAAO;gBACP,YAAY;gBACZ,YAAY;aACD,CAAC,CAAA;QAChB,CAAC;aACI,IAAG,GAAG,CAAC,WAAW,EAAE,EACzB,CAAC;YACC,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YAC5D,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,OAAO;QACL,gBAAgB,EAAE,QAAQ;QAC1B,kBAAkB,EAAE,UAAU;QAC9B,YAAY;QACZ,YAAY;KACC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TagMap } from './types/tag-data-def';
2
+ export declare function genAllTagJson(mapTag: TagMap, pathFolderTarget: string): Promise<void>;
3
+ //# sourceMappingURL=gen-all-tag-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-all-tag-json.d.ts","sourceRoot":"","sources":["../src/gen-all-tag-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAA;AAG3C,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3F"}
@@ -0,0 +1,7 @@
1
+ import { write, resolve } from './gen.js';
2
+ export async function genAllTagJson(mapTag, pathFolderTarget) {
3
+ const pathFileTarget = resolve(pathFolderTarget, 'all-tag.json');
4
+ let content = JSON.stringify(Object.values(mapTag));
5
+ await write(pathFileTarget, content);
6
+ }
7
+ //# sourceMappingURL=gen-all-tag-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-all-tag-json.js","sourceRoot":"","sources":["../src/gen-all-tag-json.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,MAAM,UAAU,CAAA;AAEvC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,gBAAwB;IAE1E,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAA;IAEhE,IAAI,OAAO,GAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAE3D,MAAM,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AACtC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { TagMap } from './types/tag-data-def';
2
+ import { DocMeta } from './types/doc-meta-def';
3
+ export declare function genTagIndexing(mapTag: TagMap, listSortedDocMeta: DocMeta[], pathFolderTarget: string): Promise<void>;
4
+ //# sourceMappingURL=gen-tag-indexing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-tag-indexing.d.ts","sourceRoot":"","sources":["../src/gen-tag-indexing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAC,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAC,OAAO,EAAa,MAAM,sBAAsB,CAAA;AAsCxD,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,OAAO,EAAE,EAC5B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -0,0 +1,29 @@
1
+ import { resolve, write } from './gen.js';
2
+ /**
3
+ * 为某个标签生成索引内容
4
+ * */
5
+ async function genTagIndexingSingle(tag, listSortedDocMeta, pathFolderTarget) {
6
+ if (!tag.indexing)
7
+ return;
8
+ const tagId = tag.id;
9
+ const listDocMeta = listSortedDocMeta.filter(docMeta => docMeta.tags.includes(tagId));
10
+ const pathFileIndexingAll = resolve(pathFolderTarget, `tag-indexing-${tagId}-all.json`);
11
+ await write(pathFileIndexingAll, listDocMeta);
12
+ if (!tag.indexingPagination)
13
+ return;
14
+ const pageSize = tag.indexingPaginationSize;
15
+ const pageCount = Math.ceil(listDocMeta.length / pageSize);
16
+ for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {
17
+ const start = pageIndex * pageSize;
18
+ const end = Math.min(start + pageSize, listDocMeta.length);
19
+ const listDocMetaPage = listDocMeta.slice(start, end);
20
+ const pathFileIndexingPage = resolve(pathFolderTarget, `tag-indexing-${tagId}-${pageIndex}.json`);
21
+ await write(pathFileIndexingPage, listDocMetaPage);
22
+ }
23
+ }
24
+ export async function genTagIndexing(mapTag, listSortedDocMeta, pathFolderTarget) {
25
+ for (const tag of Object.values(mapTag)) {
26
+ await genTagIndexingSingle(tag, listSortedDocMeta, pathFolderTarget);
27
+ }
28
+ }
29
+ //# sourceMappingURL=gen-tag-indexing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-tag-indexing.js","sourceRoot":"","sources":["../src/gen-tag-indexing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,UAAU,CAAA;AAEvC;;KAEK;AACL,KAAK,UAAU,oBAAoB,CACjC,GAAY,EACZ,iBAA4B,EAC5B,gBAAwB;IAGxB,IAAG,CAAC,GAAG,CAAC,QAAQ;QACd,OAAM;IAER,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAA;IAEpB,MAAM,WAAW,GACf,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IAEnE,MAAM,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,WAAW,CAAC,CAAA;IACvF,MAAM,KAAK,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;IAE7C,IAAG,CAAC,GAAG,CAAC,kBAAkB;QACxB,OAAM;IAER,MAAM,QAAQ,GAAG,GAAG,CAAC,sBAAsB,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;IAC1D,KAAI,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,EACzD,CAAC;QACC,MAAM,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QAC1D,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACrD,MAAM,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,SAAS,OAAO,CAAC,CAAA;QACjG,MAAM,KAAK,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAA;IACpD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,iBAA4B,EAC5B,gBAAwB;IAGxB,KAAI,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACtC,CAAC;QACC,MAAM,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;IACtE,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { DocMeta } from './types/doc-meta-def';
2
+ import { MetaConfig } from './types/meta-config-def';
3
+ export declare function genTimelineIndexing(listSortedDocMeta: DocMeta[], pathFolderTarget: string, metaConfig: MetaConfig): Promise<void>;
4
+ //# sourceMappingURL=gen-timeline-indexing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-timeline-indexing.d.ts","sourceRoot":"","sources":["../src/gen-timeline-indexing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,sBAAsB,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,wBAAsB,mBAAmB,CACvC,iBAAiB,EAAE,OAAO,EAAE,EAC5B,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,17 @@
1
+ import { resolve, write } from './gen.js';
2
+ export async function genTimelineIndexing(listSortedDocMeta, pathFolderTarget, metaConfig) {
3
+ const pathFileIndexingAll = resolve(pathFolderTarget, 'timeline-indexing-all.json');
4
+ await write(pathFileIndexingAll, listSortedDocMeta);
5
+ if (!metaConfig.timelinePagination)
6
+ return;
7
+ const pageSize = metaConfig.timelinePaginationSize;
8
+ const pageCount = Math.ceil(listSortedDocMeta.length / pageSize);
9
+ for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {
10
+ const start = pageIndex * pageSize;
11
+ const end = Math.min(start + pageSize, listSortedDocMeta.length);
12
+ const listDocMeta = listSortedDocMeta.slice(start, end);
13
+ const pathFileIndexing = resolve(pathFolderTarget, `timeline-indexing-${pageIndex}.json`);
14
+ await write(pathFileIndexing, listDocMeta);
15
+ }
16
+ }
17
+ //# sourceMappingURL=gen-timeline-indexing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-timeline-indexing.js","sourceRoot":"","sources":["../src/gen-timeline-indexing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,UAAU,CAAA;AAGvC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,iBAA4B,EAC5B,gBAAwB,EACxB,UAAsB;IAGtB,MAAM,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAA;IACnF,MAAM,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAA;IAEnD,IAAG,CAAC,UAAU,CAAC,kBAAkB;QAC/B,OAAM;IAER,MAAM,QAAQ,GAAG,UAAU,CAAC,sBAAsB,CAAA;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;IAChE,KAAI,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,EACzD,CAAC;QACC,MAAM,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAChE,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACvD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,SAAS,OAAO,CAAC,CAAA;QACzF,MAAM,KAAK,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC"}
package/dist/gen.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare function write(pathFile: string, content: string | object): Promise<void>;
2
+ export declare function resolve(pathFrom: string, pathTo: string): string;
3
+ export declare function relative(pathFrom: string, pathTo: string): string;
4
+ //# sourceMappingURL=gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../src/gen.ts"],"names":[],"mappings":"AAGA,wBAAsB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,iBAYrE;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGjE"}
package/dist/gen.js ADDED
@@ -0,0 +1,16 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ export async function write(pathFile, content) {
4
+ const pathFolderParent = path.dirname(pathFile);
5
+ if (!fs.existsSync(pathFolderParent))
6
+ fs.mkdirSync(pathFolderParent, { recursive: true });
7
+ content = 'object' === typeof content ? JSON.stringify(content) : content;
8
+ fs.writeFileSync(pathFile, content, { encoding: 'utf8', });
9
+ }
10
+ export function resolve(pathFrom, pathTo) {
11
+ return path.resolve(pathFrom, pathTo);
12
+ }
13
+ export function relative(pathFrom, pathTo) {
14
+ return path.relative(pathFrom, pathTo);
15
+ }
16
+ //# sourceMappingURL=gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.js","sourceRoot":"","sources":["../src/gen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,QAAgB,EAAE,OAAwB;IAEpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/C,IAAG,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAErD,OAAO,GAAG,QAAQ,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACzE,EAAE,CAAC,aAAa,CACd,QAAQ,EACR,OAAO,EACP,EAAE,QAAQ,EAAE,MAAM,GAAG,CACtB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAgB,EAAE,MAAc;IAEtD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,MAAc;IAEvD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IdEntity, IdMap } from './types/id-entity-def';
2
+ export declare function toMap<TypeEntity extends IdEntity>(list: TypeEntity[]): IdMap<TypeEntity>;
3
+ //# sourceMappingURL=id-entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-entity.d.ts","sourceRoot":"","sources":["../src/id-entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,uBAAuB,CAAA;AAErD,wBAAgB,KAAK,CAAC,UAAU,SAAS,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAQxF"}
@@ -0,0 +1,8 @@
1
+ export function toMap(list) {
2
+ const ret = {};
3
+ for (const entity of list) {
4
+ ret[entity.id] = entity;
5
+ }
6
+ return ret;
7
+ }
8
+ //# sourceMappingURL=id-entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-entity.js","sourceRoot":"","sources":["../src/id-entity.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,KAAK,CAA8B,IAAkB;IAEnE,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAI,MAAM,MAAM,IAAI,IAAI,EACxB,CAAC;QACC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAA;IACzB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function main(): Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,wBAAsB,IAAI,kBA0BzB"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ import * as process from 'node:process';
2
+ import * as path from 'node:path';
3
+ import { readFileSystem } from './file-system.js';
4
+ import { readMetaConfig } from './meta-config.js';
5
+ import { toMap } from './id-entity.js';
6
+ import { collectDocMeta, getSortedDocMeta } from './doc.js';
7
+ import { genAllTagJson } from './gen-all-tag-json.js';
8
+ import { genTagIndexing } from './gen-tag-indexing.js';
9
+ import { genTimelineIndexing } from './gen-timeline-indexing.js';
10
+ export async function main() {
11
+ // 获取命令行参数
12
+ const args = process.argv.slice(2);
13
+ if (args.length < 1)
14
+ throw '未指定配置文件路径';
15
+ // 始终把第一个字符串当做本次识别和处理的基础目录
16
+ const pathMetaConfig = path.resolve(args[0]);
17
+ const metaConfig = await readMetaConfig(pathMetaConfig);
18
+ const mapTag = toMap(metaConfig.tags); // 处理 tag 数据
19
+ const folderSource = readFileSystem(metaConfig.sourceFolder);
20
+ const mapDocMeta = await collectDocMeta(folderSource);
21
+ const listSortedDocMeta = getSortedDocMeta(mapDocMeta);
22
+ console.log('mapTag', mapTag);
23
+ console.log('mapDocMeta', mapDocMeta);
24
+ // 开始生成并写入索引数据
25
+ const pathFolderTarget = metaConfig.targetFolder;
26
+ await genAllTagJson(mapTag, pathFolderTarget);
27
+ await genTimelineIndexing(listSortedDocMeta, pathFolderTarget, metaConfig);
28
+ await genTagIndexing(mapTag, listSortedDocMeta, pathFolderTarget);
29
+ }
30
+ await main();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAA;AAEpC,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,UAAU,CAAA;AACzD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAE9D,MAAM,CAAC,KAAK,UAAU,IAAI;IAExB,UAAU;IACV,MAAM,IAAI,GAAa,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE5C,IAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAChB,MAAM,WAAW,CAAA;IAEnB,0BAA0B;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAA;IAEvD,MAAM,MAAM,GAAW,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,YAAY;IAE1D,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;IAC5D,MAAM,UAAU,GAAe,MAAM,cAAc,CAAC,YAAY,CAAC,CAAA;IACjE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAEtD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC7B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IAErC,cAAc;IACd,MAAM,gBAAgB,GAAG,UAAU,CAAC,YAAY,CAAA;IAChD,MAAM,aAAa,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC7C,MAAM,mBAAmB,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAA;IAC1E,MAAM,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,IAAI,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { MetaConfig } from './types/meta-config-def';
2
+ export declare function readMetaConfig(pathConfig: string): Promise<MetaConfig>;
3
+ //# sourceMappingURL=meta-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-config.d.ts","sourceRoot":"","sources":["../src/meta-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAA;AAKlD,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsE5E"}
@@ -0,0 +1,49 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import JSON5 from 'json5';
4
+ export async function readMetaConfig(pathConfig) {
5
+ pathConfig = path.resolve(pathConfig); // 把 pathConfig 处理成绝对路径
6
+ const textMetaConfig = fs.readFileSync(pathConfig, {
7
+ encoding: 'utf8',
8
+ });
9
+ const jsonMetaConfig = JSON5.parse(textMetaConfig);
10
+ let { sourceFolder, targetFolder, tags, timelinePagination, timelinePaginationSize, } = jsonMetaConfig;
11
+ // 把 sourceFolder 和 targetFolder 处理成绝对路径
12
+ sourceFolder = path.resolve(path.dirname(pathConfig), sourceFolder);
13
+ targetFolder = path.resolve(path.dirname(pathConfig), targetFolder);
14
+ if ('string' !== typeof sourceFolder)
15
+ throw 'sourceFolder not found: ' + jsonMetaConfig;
16
+ if ('string' !== typeof targetFolder)
17
+ throw 'targetFolder not found: ' + jsonMetaConfig;
18
+ if (!Array.isArray(tags))
19
+ tags = [];
20
+ timelinePagination = timelinePagination ?? true;
21
+ timelinePaginationSize = timelinePaginationSize ?? 10;
22
+ const setTagId = new Set();
23
+ for (const tag of tags) {
24
+ let { id, name, desc, icon, hidden, indexing, indexingPagination, indexingPaginationSize, } = tag;
25
+ if ('string' !== typeof id)
26
+ throw 'tag id not found: ' + tag;
27
+ if (setTagId.has(id))
28
+ throw 'tag id duplicated: ' + id;
29
+ setTagId.add(id);
30
+ if ('string' !== typeof name)
31
+ tag.name = null;
32
+ if ('string' !== typeof desc)
33
+ tag.desc = null;
34
+ if ('string' !== typeof icon)
35
+ tag.icon = null;
36
+ tag.hidden = !!hidden;
37
+ tag.indexing = indexing ?? false;
38
+ tag.indexingPagination = indexingPagination ?? true;
39
+ tag.indexingPaginationSize = indexingPaginationSize ?? 10;
40
+ }
41
+ return {
42
+ sourceFolder,
43
+ targetFolder,
44
+ tags,
45
+ timelinePagination,
46
+ timelinePaginationSize,
47
+ };
48
+ }
49
+ //# sourceMappingURL=meta-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-config.js","sourceRoot":"","sources":["../src/meta-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IAErD,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA,CAAE,uBAAuB;IAE9D,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE;QACjD,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAe,CAAA;IAChE,IAAI,EACF,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,kBAAkB,EAClB,sBAAsB,GACvB,GAAG,cAAc,CAAA;IAElB,wCAAwC;IACxC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAA;IACnE,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAA;IAEnE,IAAG,QAAQ,KAAK,OAAO,YAAY;QACjC,MAAM,0BAA0B,GAAG,cAAc,CAAA;IACnD,IAAG,QAAQ,KAAK,OAAO,YAAY;QACjC,MAAM,0BAA0B,GAAG,cAAc,CAAA;IACnD,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACrB,IAAI,GAAG,EAAE,CAAA;IAEX,kBAAkB,GAAG,kBAAkB,IAAI,IAAI,CAAA;IAC/C,sBAAsB,GAAG,sBAAsB,IAAI,EAAE,CAAA;IAErD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,KAAI,MAAM,GAAG,IAAI,IAAI,EACrB,CAAC;QACC,IAAI,EACF,EAAE,EACF,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,sBAAsB,GACvB,GAAG,GAAG,CAAA;QAEP,IAAG,QAAQ,KAAK,OAAO,EAAE;YACvB,MAAM,oBAAoB,GAAG,GAAG,CAAA;QAClC,IAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,qBAAqB,GAAG,EAAE,CAAA;QAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEhB,IAAG,QAAQ,KAAK,OAAO,IAAI;YACzB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QACjB,IAAG,QAAQ,KAAK,OAAO,IAAI;YACzB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QACjB,IAAG,QAAQ,KAAK,OAAO,IAAI;YACzB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QAEjB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAA;QACrB,GAAG,CAAC,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAA;QAChC,GAAG,CAAC,kBAAkB,GAAG,kBAAkB,IAAI,IAAI,CAAA;QACnD,GAAG,CAAC,sBAAsB,GAAG,sBAAsB,IAAI,EAAE,CAAA;IAC3D,CAAC;IAED,OAAO;QACL,YAAY;QACZ,YAAY;QACZ,IAAI;QACJ,kBAAkB;QAClB,sBAAsB;KACT,CAAA;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { TagData } from './tag-data.d.ts';
2
+ import { FolderNode } from '../fs/fs-meta-data';
3
+ export type TagMap = Record<string, TagData>;
4
+ export declare function collectTagData(folder: FolderNode): Promise<TagMap>;
5
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/tag/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAA;AAI7C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA2C5C,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAKxE"}
@@ -0,0 +1,39 @@
1
+ import * as fs from 'node:fs';
2
+ import JSON5 from 'json5';
3
+ function loadTagData(json) {
4
+ if (json.id == null)
5
+ throw 'tag id not found: ' + json;
6
+ return {
7
+ id: json.id,
8
+ name: json.name,
9
+ desc: json.desc,
10
+ hidden: !!json.hidden,
11
+ indexing: !!json.indexing,
12
+ indexingPagination: !!json.indexingPagination,
13
+ indexingPaginationSize: json.indexingPaginationSize ?? 10,
14
+ indexingPaginationMethod: json.indexingPaginationMethod ?? 'createTimestamp',
15
+ };
16
+ }
17
+ function findTagData(folder, map) {
18
+ for (const file of folder.listChildrenFile) {
19
+ if (file.filename.endsWith('.tag.json') || file.filename.endsWith('.tag.json5')) {
20
+ const textFile = fs.readFileSync(file.pathAbsolute, {
21
+ encoding: 'utf-8',
22
+ });
23
+ const json = JSON5.parse(textFile);
24
+ const tag = loadTagData(json);
25
+ if (map[tag.id] != null)
26
+ throw 'tag id duplicated: ' + tag.id;
27
+ map[tag.id] = tag;
28
+ }
29
+ }
30
+ for (const childFolder of folder.listChildrenFolder) {
31
+ findTagData(childFolder, map);
32
+ }
33
+ }
34
+ export async function collectTagData(folder) {
35
+ const ret = {};
36
+ findTagData(folder, ret);
37
+ return ret;
38
+ }
39
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tag/tags.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,SAAS,WAAW,CAAC,IAAS;IAE5B,IAAG,IAAI,CAAC,EAAE,IAAI,IAAI;QAChB,MAAM,oBAAoB,GAAG,IAAI,CAAA;IACnC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;QACrB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;QACzB,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB;QAC7C,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,IAAI,EAAE;QACzD,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,IAAI,iBAAiB;KAClE,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB,EAAE,GAAW;IAElD,KAAI,MAAM,IAAI,IAAI,MAAM,CAAC,gBAAgB,EACzC,CAAC;QACC,IAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC9E,CAAC;YACC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;gBAClD,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAA;YACF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAClC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;YAE7B,IAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;gBACpB,MAAM,qBAAqB,GAAG,GAAG,CAAC,EAAE,CAAA;YAEtC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;QACnB,CAAC;IACH,CAAC;IAED,KAAI,MAAM,WAAW,IAAI,MAAM,CAAC,kBAAkB,EAClD,CAAC;QACC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAkB;IAErD,MAAM,GAAG,GAAW,EAAE,CAAA;IACtB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxB,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { TagData, TagMap } from './types/tag-data-def';
2
+ import { TagIndexingData } from './types/tag-indexing-def';
3
+ import { DocMetaMap } from './types/doc-meta-def';
4
+ export declare function createTagIndexing(tag: TagData, docMetaMap: DocMetaMap): TagIndexingData;
5
+ export declare function createTagIndexingMap(tagMap: TagMap, docMetaMap: DocMetaMap): Record<string, TagIndexingData>;
6
+ //# sourceMappingURL=tag-indexing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-indexing.d.ts","sourceRoot":"","sources":["../src/tag-indexing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,MAAM,EAAC,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAC,eAAe,EAAkB,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AAE/C,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,UAAU,GACrB,eAAe,CAyCjB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACrB,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAQjC"}
@@ -0,0 +1,41 @@
1
+ export function createTagIndexing(tag, docMetaMap) {
2
+ const tagId = tag.id;
3
+ const listDocMeta = Object.values(docMetaMap)
4
+ .filter(docMeta => docMeta.tags.includes(tagId));
5
+ listDocMeta.sort((dm1, dm2) => {
6
+ switch (tag.indexingPaginationMethod) {
7
+ case 'createTimestamp':
8
+ return dm2.createTimestamp - dm1.createTimestamp;
9
+ case 'updateTimestamp':
10
+ return dm2.updateTimestamp - dm1.updateTimestamp;
11
+ default:
12
+ throw 'unknown indexingPaginationMethod: ' + tag.indexingPaginationMethod;
13
+ }
14
+ });
15
+ // 根据分页容量, 创建分页列表
16
+ const listPage = [];
17
+ const pageSize = tag.indexingPaginationSize;
18
+ const pageCount = Math.ceil(listDocMeta.length / pageSize);
19
+ for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {
20
+ const start = pageIndex * pageSize;
21
+ const end = Math.min(start + pageSize, listDocMeta.length);
22
+ listPage.push({
23
+ pageIndex,
24
+ listDocMeta: listDocMeta.slice(start, end),
25
+ });
26
+ }
27
+ return {
28
+ tagId,
29
+ pageSize,
30
+ pageCount,
31
+ listPage,
32
+ };
33
+ }
34
+ export function createTagIndexingMap(tagMap, docMetaMap) {
35
+ const ret = {};
36
+ for (const tag of Object.values(tagMap)) {
37
+ ret[tag.id] = createTagIndexing(tag, docMetaMap);
38
+ }
39
+ return ret;
40
+ }
41
+ //# sourceMappingURL=tag-indexing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-indexing.js","sourceRoot":"","sources":["../src/tag-indexing.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,iBAAiB,CAC/B,GAAY,EACZ,UAAsB;IAGtB,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAA;IAEpB,MAAM,WAAW,GACf,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IAEpD,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5B,QAAQ,GAAG,CAAC,wBAAwB,EACpC,CAAC;YACC,KAAK,iBAAiB;gBACpB,OAAO,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAA;YAClD,KAAK,iBAAiB;gBACpB,OAAO,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAA;YAClD;gBACE,MAAM,oCAAoC,GAAG,GAAG,CAAC,wBAAwB,CAAA;QAC7E,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,iBAAiB;IACjB,MAAM,QAAQ,GAAsB,EAAE,CAAA;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,sBAAsB,CAAA;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;IAE1D,KAAI,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,EACzD,CAAC;QACC,MAAM,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QAC1D,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS;YACT,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;SAC3C,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,KAAK;QACL,QAAQ;QACR,SAAS;QACT,QAAQ;KACU,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,UAAsB;IAGtB,MAAM,GAAG,GAAoC,EAAE,CAAA;IAC/C,KAAI,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACtC,CAAC;QACC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAClD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@firok-arc-project/arc-centrifuge",
3
+ "version": "0.5.0",
4
+ "description": "lib used to convert markdown content into meta JSON",
5
+ "private": false,
6
+ "keywords": [
7
+ "lib",
8
+ "SSG"
9
+ ],
10
+ "license": "ISC",
11
+ "author": "Firok",
12
+ "type": "module",
13
+ "main": "dist/main.js",
14
+ "types": "dist/index.d.ts",
15
+ "scripts": {
16
+ "build": "npx tsc",
17
+ "test:build-first": "npx tsc && node ./dist/index.js ../example-source/meta-config.json5",
18
+ "test:direct": "node dist/index.js ../example-source/meta-config.json5",
19
+ "publish": "npm publish --access public"
20
+ },
21
+ "devDependencies": {
22
+ "typescript": "^5.9.3"
23
+ },
24
+ "dependencies": {
25
+ "@types/node": "^25.0.3",
26
+ "gray-matter": "^4.0.3",
27
+ "json5": "^2.2.3"
28
+ }
29
+ }