Changes
20 changed files (+125/-140)
-
-
@@ -2,16 +2,11 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 import type { DocumentMetadata } from "../metadata_parser/interface.ts"; import type { FileReader } from "../filesystem_reader/interface.ts"; export interface DocumentContent< Kind extends string = string, Content = unknown, > { kind: Kind; content: Content; } import type { DocumentContent, DocumentMetadata, FileReader, } from "../types.ts"; export interface ParseParameters { fileReader: FileReader;
-
-
-
@@ -2,11 +2,8 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 import type { ContentParser, DocumentContent, ParseParameters, } from "./interface.ts"; import type { ContentParser, ParseParameters } from "./interface.ts"; import type { DocumentContent } from "../types.ts"; import { isJSONCanvas, type JSONCanvas } from "./json_canvas/types.ts";
-
-
-
@@ -2,7 +2,8 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 import type { ContentParser, DocumentContent } from "./interface.ts"; import type { ContentParser } from "./interface.ts"; import type { DocumentContent } from "../types.ts"; export type NullDocument = DocumentContent<"null", null>;
-
-
-
@@ -5,10 +5,9 @@import { assertObjectMatch } from "../deps/deno.land/std/assert/mod.ts"; import { VaultParser } from "../metadata_parser/vault_parser.ts"; import type { DocumentMetadata } from "../metadata_parser/interface.ts"; import { MemoryFsReader } from "../filesystem_reader/memory_fs.ts"; import type { FileReader } from "../filesystem_reader/interface.ts"; import { ObsidianMarkdownParser } from "./obsidian_markdown.ts"; import type { DocumentMetadata, FileReader } from "../types.ts"; const metadataParser = new VaultParser();
-
-
-
@@ -5,11 +5,8 @@import type * as Mdast from "../deps/esm.sh/mdast/types.ts"; import { fromMarkdown } from "../deps/esm.sh/mdast-util-from-markdown/mod.ts"; import type { ContentParser, DocumentContent, ParseParameters, } from "./interface.ts"; import type { ContentParser, ParseParameters } from "./interface.ts"; import type { DocumentContent } from "../types.ts"; export type ObsidianMarkdownDocument = DocumentContent< "obsidian_markdown",
-
-
-
@@ -8,7 +8,7 @@ assertExists,} from "../deps/deno.land/std/assert/mod.ts"; import { DenoFsReader } from "./deno_fs.ts"; import type { DirectoryReader } from "./interface.ts"; import type { DirectoryReader } from "../types.ts"; Deno.test("Should read file tree", { // Skip this test if read permission is not granted.
-
-
-
@@ -4,12 +4,12 @@ // SPDX-License-Identifier: Apache-2.0import { SEPARATOR } from "../deps/deno.land/std/path/mod.ts"; import type { FileSystemReader } from "./interface.ts"; import type { DirectoryReader, FileReader, FileSystemReader, RootDirectoryReader, } from "./interface.ts"; } from "../types.ts"; export class DenoFsReader implements FileSystemReader { #root: string;
-
-
-
@@ -2,29 +2,7 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 export interface FileReader { readonly type: "file"; readonly name: string; readonly path: readonly string[]; readonly parent: DirectoryReader | RootDirectoryReader; read(): Promise<Uint8Array>; } export interface DirectoryReader { readonly type: "directory"; readonly name: string; readonly path: readonly string[]; readonly parent: DirectoryReader | RootDirectoryReader; read(): Promise<ReadonlyArray<FileReader | DirectoryReader>>; } export interface RootDirectoryReader { readonly type: "root"; read(): Promise<ReadonlyArray<FileReader | DirectoryReader>>; } import type { RootDirectoryReader } from "../types.ts"; export interface FileSystemReader { /**
-
-
-
@@ -8,7 +8,7 @@ assertObjectMatch,} from "../deps/deno.land/std/assert/mod.ts"; import { MemoryFsReader } from "./memory_fs.ts"; import type { DirectoryReader, FileReader } from "./interface.ts"; import type { DirectoryReader, FileReader } from "../types.ts"; Deno.test("Should create a in-memory file tree", async () => { const reader = new MemoryFsReader([
-
-
-
@@ -2,12 +2,12 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 import type { FileSystemReader } from "./interface.ts"; import type { DirectoryReader, FileReader, FileSystemReader, RootDirectoryReader, } from "./interface.ts"; } from "../types.ts"; interface FileBuilder { path: string | readonly string[];
-
-
-
@@ -4,30 +4,9 @@ // SPDX-License-Identifier: Apache-2.0import type { DirectoryReader, DocumentMetadata, FileReader, } from "../filesystem_reader/interface.ts"; export interface DocumentMetadata { /** * An identifier for a document, unique among a directory the document belongs to. */ readonly name: string; /** * Human-readable text representing a title of the *document*. * Although there is no restriction on available characters, you should avoid using * control characters. * ([Unicode control characters - Wikipedia](https://en.wikipedia.org/wiki/Unicode_control_characters)) */ readonly title: string; /** * Language for a document directory or a document. * If this is empty, Macana looks up the most closest document directory language set. * If none of the ancestors have a language, Macana will use a user given default language. */ readonly language?: string; } } from "../types.ts"; /** * Skip this parser.
-
-
-
@@ -4,9 +4,9 @@ // SPDX-License-Identifier: Apache-2.0import { assertObjectMatch } from "../deps/deno.land/std/assert/mod.ts"; import type { DirectoryReader } from "../filesystem_reader/interface.ts"; import { MemoryFsReader } from "../filesystem_reader/memory_fs.ts"; import { VaultParser } from "./vault_parser.ts"; import type { DirectoryReader } from "../types.ts"; Deno.test("Should use filename as title", async () => { const fs = new MemoryFsReader([
-
-
-
@@ -5,11 +5,12 @@import { extname } from "../deps/deno.land/std/path/mod.ts"; import * as yamlFrontmatter from "../deps/deno.land/std/front_matter/yaml.ts"; import type { MetadataParser, Skip } from "./interface.ts"; import type { DirectoryReader, DocumentMetadata, FileReader, } from "../filesystem_reader/interface.ts"; import type { DocumentMetadata, MetadataParser, Skip } from "./interface.ts"; } from "../types.ts"; function getFrontMatterValue( frontmatter: Record<string, unknown>,
-
-
-
@@ -6,14 +6,10 @@ /** @jsx h */import { h, renderSSR } from "../../deps/deno.land/x/nano_jsx/mod.ts"; import type { Document, DocumentDirectory, DocumentTree, } from "../../tree_builder/interface.ts"; import type { BuildParameters, PageBuilder } from "../interface.ts"; import type { ObsidianMarkdownDocument } from "../../content_parser/obsidian_markdown.ts"; import type { JSONCanvasDocument } from "../../content_parser/json_canvas.ts"; import type { Document, DocumentDirectory, DocumentTree } from "../../types.ts"; import * as css from "./css.ts";
-
-
-
@@ -13,10 +13,7 @@ } from "../../../deps/deno.land/x/nano_jsx/jsx-runtime/index.ts";import { toHast } from "../../../deps/esm.sh/mdast-util-to-hast/mod.ts"; import { toJsxRuntime } from "../../../deps/esm.sh/hast-util-to-jsx-runtime/mod.ts"; import type { Document, DocumentTree, } from "../../../tree_builder/interface.ts"; import type { Document, DocumentTree } from "../../../types.ts"; import type { ObsidianMarkdownDocument } from "../../../content_parser/obsidian_markdown.ts"; import type { JSONCanvasDocument } from "../../../content_parser/json_canvas.ts";
-
-
-
@@ -10,7 +10,7 @@ import type {Document, DocumentDirectory, DocumentTree, } from "../../../../tree_builder/interface.ts"; } from "../../../../types.ts"; import { css } from "../../css.ts"; import { usePathResolver } from "../../contexts/path_resolver.tsx";
-
-
-
@@ -2,9 +2,9 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 import type { DocumentTree } from "../tree_builder/interface.ts"; import type { FileSystemWriter } from "../filesystem_writer/interface.ts"; import type { FileSystemReader } from "../filesystem_reader/interface.ts"; import type { DocumentTree } from "../types.ts"; export interface BuildParameters { readonly documentTree: DocumentTree;
-
-
-
@@ -2,17 +2,14 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 import type { BuildParameters, TreeBuilder } from "./interface.ts"; import type { DirectoryReader, FileReader, } from "../filesystem_reader/interface.ts"; import type { BuildParameters, Document, DocumentDirectory, DocumentTree, TreeBuilder, } from "./interface.ts"; FileReader, } from "../types.ts"; export interface DefaultTreeBuilderConfig { /**
-
-
-
@@ -2,51 +2,10 @@ // SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>// // SPDX-License-Identifier: Apache-2.0 import type { DirectoryReader, FileReader, FileSystemReader, } from "../filesystem_reader/interface.ts"; import type { DocumentMetadata, MetadataParser, } from "../metadata_parser/interface.ts"; import type { ContentParser, DocumentContent, } from "../content_parser/interface.ts"; export interface Document<Content extends DocumentContent = DocumentContent> { readonly type: "document"; readonly metadata: DocumentMetadata; readonly file: FileReader; readonly content: Content; /** * Document path: list of names, not file paths. */ readonly path: readonly string[]; } export interface DocumentDirectory { readonly type: "directory"; readonly metadata: DocumentMetadata; readonly directory: DirectoryReader; readonly entries: ReadonlyArray<Document | DocumentDirectory>; /** * Document path: list of names, not file paths. */ readonly path: readonly string[]; } export interface DocumentTree { readonly type: "tree"; readonly nodes: ReadonlyArray<Document | DocumentDirectory>; readonly defaultLanguage: string; } import type { FileSystemReader } from "../filesystem_reader/interface.ts"; import type { MetadataParser } from "../metadata_parser/interface.ts"; import type { ContentParser } from "../content_parser/interface.ts"; import type { DocumentTree } from "../types.ts"; export interface BuildParameters { readonly fileSystemReader: FileSystemReader;
-
-
types.ts (new)
-
@@ -0,0 +1,89 @@// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com> // // SPDX-License-Identifier: Apache-2.0 export interface FileReader { readonly type: "file"; readonly name: string; readonly path: readonly string[]; readonly parent: DirectoryReader | RootDirectoryReader; read(): Promise<Uint8Array>; } export interface DirectoryReader { readonly type: "directory"; readonly name: string; readonly path: readonly string[]; readonly parent: DirectoryReader | RootDirectoryReader; read(): Promise<ReadonlyArray<FileReader | DirectoryReader>>; } export interface RootDirectoryReader { readonly type: "root"; read(): Promise<ReadonlyArray<FileReader | DirectoryReader>>; } export interface DocumentMetadata { /** * An identifier for a document, unique among a directory the document belongs to. */ readonly name: string; /** * Human-readable text representing a title of the *document*. * Although there is no restriction on available characters, you should avoid using * control characters. * ([Unicode control characters - Wikipedia](https://en.wikipedia.org/wiki/Unicode_control_characters)) */ readonly title: string; /** * Language for a document directory or a document. * If this is empty, Macana looks up the most closest document directory language set. * If none of the ancestors have a language, Macana will use a user given default language. */ readonly language?: string; } export interface DocumentContent< Kind extends string = string, Content = unknown, > { kind: Kind; content: Content; } export interface Document<Content extends DocumentContent = DocumentContent> { readonly type: "document"; readonly metadata: DocumentMetadata; readonly file: FileReader; readonly content: Content; /** * Document path: list of names, not file paths. */ readonly path: readonly string[]; } export interface DocumentDirectory { readonly type: "directory"; readonly metadata: DocumentMetadata; readonly directory: DirectoryReader; readonly entries: ReadonlyArray<Document | DocumentDirectory>; /** * Document path: list of names, not file paths. */ readonly path: readonly string[]; } export interface DocumentTree { readonly type: "tree"; readonly nodes: ReadonlyArray<Document | DocumentDirectory>; readonly defaultLanguage: string; }
-