@im-nobsidian/core 0.16.0 → 0.17.1

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/index.d.ts CHANGED
@@ -9,21 +9,15 @@ declare const DEFAULT_TITLE_PROPERTY = "Name";
9
9
  declare const DatabaseSyncSchema: z.ZodObject<{
10
10
  databaseId: z.ZodString;
11
11
  localFolder: z.ZodString;
12
- propertyMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
13
12
  pullFilter: z.ZodOptional<z.ZodUnknown>;
14
- titleProperty: z.ZodDefault<z.ZodString>;
15
13
  }, "strip", z.ZodTypeAny, {
16
14
  databaseId: string;
17
15
  localFolder: string;
18
- titleProperty: string;
19
- propertyMapping?: Record<string, string> | undefined;
20
16
  pullFilter?: unknown;
21
17
  }, {
22
18
  databaseId: string;
23
19
  localFolder: string;
24
- propertyMapping?: Record<string, string> | undefined;
25
20
  pullFilter?: unknown;
26
- titleProperty?: string | undefined;
27
21
  }>;
28
22
  type DatabaseSyncConfig = z.infer<typeof DatabaseSyncSchema>;
29
23
  declare const ConfigSchema: z.ZodObject<{
@@ -36,46 +30,36 @@ declare const ConfigSchema: z.ZodObject<{
36
30
  databases: z.ZodDefault<z.ZodArray<z.ZodObject<{
37
31
  databaseId: z.ZodString;
38
32
  localFolder: z.ZodString;
39
- propertyMapping: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
40
33
  pullFilter: z.ZodOptional<z.ZodUnknown>;
41
- titleProperty: z.ZodDefault<z.ZodString>;
42
34
  }, "strip", z.ZodTypeAny, {
43
35
  databaseId: string;
44
36
  localFolder: string;
45
- titleProperty: string;
46
- propertyMapping?: Record<string, string> | undefined;
47
37
  pullFilter?: unknown;
48
38
  }, {
49
39
  databaseId: string;
50
40
  localFolder: string;
51
- propertyMapping?: Record<string, string> | undefined;
52
41
  pullFilter?: unknown;
53
- titleProperty?: string | undefined;
54
42
  }>, "many">>;
55
43
  }, "strip", z.ZodTypeAny, {
56
- token: string;
57
- rootPageId: string;
58
- parentMode: "page" | "database";
59
44
  databases: {
60
45
  databaseId: string;
61
46
  localFolder: string;
62
- titleProperty: string;
63
- propertyMapping?: Record<string, string> | undefined;
64
47
  pullFilter?: unknown;
65
48
  }[];
49
+ token: string;
50
+ rootPageId: string;
51
+ parentMode: "page" | "database";
66
52
  databaseId?: string | undefined;
67
53
  }, {
68
54
  token: string;
69
55
  rootPageId: string;
70
56
  databaseId?: string | undefined;
71
- parentMode?: "page" | "database" | undefined;
72
57
  databases?: {
73
58
  databaseId: string;
74
59
  localFolder: string;
75
- propertyMapping?: Record<string, string> | undefined;
76
60
  pullFilter?: unknown;
77
- titleProperty?: string | undefined;
78
61
  }[] | undefined;
62
+ parentMode?: "page" | "database" | undefined;
79
63
  }>;
80
64
  sync: z.ZodObject<{
81
65
  direction: z.ZodDefault<z.ZodEnum<["push", "pull", "both"]>>;
@@ -197,16 +181,14 @@ declare const ConfigSchema: z.ZodObject<{
197
181
  }>;
198
182
  }, "strip", z.ZodTypeAny, {
199
183
  notion: {
200
- token: string;
201
- rootPageId: string;
202
- parentMode: "page" | "database";
203
184
  databases: {
204
185
  databaseId: string;
205
186
  localFolder: string;
206
- titleProperty: string;
207
- propertyMapping?: Record<string, string> | undefined;
208
187
  pullFilter?: unknown;
209
188
  }[];
189
+ token: string;
190
+ rootPageId: string;
191
+ parentMode: "page" | "database";
210
192
  databaseId?: string | undefined;
211
193
  };
212
194
  conversion: {
@@ -257,14 +239,12 @@ declare const ConfigSchema: z.ZodObject<{
257
239
  token: string;
258
240
  rootPageId: string;
259
241
  databaseId?: string | undefined;
260
- parentMode?: "page" | "database" | undefined;
261
242
  databases?: {
262
243
  databaseId: string;
263
244
  localFolder: string;
264
- propertyMapping?: Record<string, string> | undefined;
265
245
  pullFilter?: unknown;
266
- titleProperty?: string | undefined;
267
246
  }[] | undefined;
247
+ parentMode?: "page" | "database" | undefined;
268
248
  };
269
249
  conversion: {
270
250
  timeZone?: string | undefined;
@@ -4808,6 +4788,31 @@ interface Logger {
4808
4788
  declare function setLogger(logger: Logger): void;
4809
4789
  declare function getLogger(): Logger;
4810
4790
 
4791
+ /**
4792
+ * lookbehind 없이 앞 글을 보는 정규식 — 소스에 `(?<!…)` · `(?<=…)` 를 쓰지 않는다.
4793
+ *
4794
+ * iOS 16.4 앞의 JavaScript 는 lookbehind 를 읽지 못해, 그런 정규식 하나가 든 스크립트 전체가 뜨지 않는다 — 플러그인이
4795
+ * 모바일에서 아예 켜지지 않는다(P11). 커뮤니티 디렉터리의 검사도 데스크톱 전용이 아닌 플러그인의 lookbehind 를
4796
+ * 거절한다. `tests/utils/no-lookbehind.test.ts` 가 소스에 다시 들어오지 않게 막는다.
4797
+ *
4798
+ * `exec` 만 갈아 끼운다 — `replace` · `matchAll` · `split` · `test` 가 모두 `exec` 를 부르므로 쓰는 곳은 바뀌지 않는다.
4799
+ * 맞은 자리의 앞 글이 조건에 맞지 않으면 그 자리를 버리고 다음 글자에서 다시 찾는다. 정규식 맨 앞(또는 마지막
4800
+ * 갈래의 맨 앞)의 lookbehind 와 결과가 같다 — 엔진도 그 자리에서 lookbehind 가 막히면 다음 글자로 넘어간다.
4801
+ */
4802
+ /** 맞은 것을 받나 — `index` 는 맞은 자리, `match` 는 맞은 것(갈래를 가를 때). */
4803
+ type Lookbehind = (text: string, index: number, match: RegExpExecArray) => boolean;
4804
+ declare class LookbehindRegExp extends RegExp {
4805
+ readonly accept: Lookbehind;
4806
+ /** 실제로 찾는 정규식 — `g`(또는 `y`) 로 어느 자리에서든 이어 찾는다. */
4807
+ private readonly scanner;
4808
+ constructor(pattern: string | RegExp, flags?: string, accept?: Lookbehind);
4809
+ exec(text: string): RegExpExecArray | null;
4810
+ }
4811
+ /** `index` 바로 앞의 글자(써로게이트 쌍은 하나로) — 맨 앞이면 "". */
4812
+ declare function charBefore(text: string, index: number): string;
4813
+ /** `(?<![…])` — 바로 앞 글자가 `set`(글자 하나를 보는 정규식)에 맞지 않거나 맨 앞이다. */
4814
+ declare function notAfter(set: RegExp): Lookbehind;
4815
+
4811
4816
  /**
4812
4817
  * 경로 패턴(`paths.include` · `paths.exclude` · `.im-nobsidian-ignore`)을 목록에 대는 VaultFS.
4813
4818
  *
@@ -5096,4 +5101,4 @@ declare function readColumnLayout(lines: readonly string[]): (ColumnPlace | unde
5096
5101
  /** 열 이름표 — `열 2/3 · 50%`. 비율이 없으면 `열 2/3`. */
5097
5102
  declare function columnLabel(place: ColumnPlace): string;
5098
5103
 
5099
- export { BaseFileGenerator, type BaseFileOptions, type BasePropertyOption, type BasePropertySchema, type BaseStatusGroup, type BaseSyncOptions, type BasesFilterNode, type BasesViewMapping, type BasesViewType, BlankLineCollapser, type BookmarkTarget, CONFIG_FILE, CONFLICT_STRATEGIES, type CalendarEntry, type CalloutDesign, CalloutRestorer, CalloutTransformer, ChangeDetector, type ChangeDiff, ColorAnnotator, type ColumnPlace, type CompletenessFailure, type CompletenessLocalSource, type CompletenessOptions, type CompletenessRemoteSource, type CompletenessReport, type Config, ConfigManager, ConfigSchema, type Conflict, ConflictResolver, type ConflictStrategy, ConnectionBoundaryError, ConnectionScopeError, type ConversionContext, type ConversionPath, ConversionPipeline, type ConversionResult, type CoverConfig, type DBEntry, DB_VIEWS_FILE, DB_VIEWS_PATH, DEFAULT_CONFIG, DEFAULT_TITLE_PROPERTY, DEFAULT_WATCH_DEBOUNCE_MS, DIFF_SIGN, type DatabaseCompleteness, type DatabaseMove, type DatabaseSyncConfig, type DatabaseSyncResult, DatabaseSyncer, type DatabaseViewsConfig, type DeferredCode, type DegradeNote, type DesignColor, type DesignLine, type DesignSegment, type DiffHunk, type DiffLine, EmbedResolver, EntryEditor, type FailedOperation, type FidelityClassification, type FidelityContext, type FidelityDefect, type FidelityDefectForm, type FidelitySummary, type FileDownloadResult, FileHandler, type FileInfo, type FileRegistryEntry, type FileStatInfo, type FileSystemEntry, type FileType, type FileUploadResult, FileWatcher, type FilterCondition, FilteredVaultFS, type FolderDatabaseReport, type FolderMoveChange, FrontmatterExtractor, FrontmatterGenerator, type FullScanReason, GITIGNORE_ENTRY, type GatedOperation, type GroupByConfig, type GroupedEntries, IGNORE_FILE, INTERNAL_DIR, INTERNAL_DIR_GLOB, type IStateDB, type ImageDownloadResult, ImageHandler, type ImageReference, type InferredProperty, InlineAnnotationPreserver, InlineDBParser, type InlineStyle, type LineDiffOptions, type LineRange, type LocalChange, LocalImageRestorer, type LocalMoveAdoption, type LocalScan, type LocalScanOptions, type Logger, MARKER_BRAND, type MappingResult, type MappingType, MathNormalizer, MentionToWikilink, type MergeConflictRegion, type MergeResult, NOTION_COLOR_NAMES, NOTION_TOKEN_PREFIX, NOTION_TO_BASES_VIEW, type NestedFolderPage, type NestedFolderRecord, NodeVaultFS, type NonMdFileInfo, type NotionAccessCheck, type NotionBlock, NotionBlockBuilder, NotionClient, type NotionClientOptions, type NotionColor, type NotionPageNode, type NotionRichText, type RichTextItem as NotionRichTextItem, type NotionSidecar, OBSIDIAN_CONFIG_DIR, OBSIDIAN_ONLY_PATTERNS, type OperationType, type OutsideVault, type PageCompletenessRemoteSource, type PageCompletenessReport, type PageCover, type PageCreationPlan, type PageIcon, PathFilter, type PathFilterConfig, type PendingOperation, PendingWalError, type PlacementChange, type PlannedRow, type PreserveMarker, PreserveMarkerCollector, PreserveMarkerInjector, type Processor, type ProcessorInput, type ProcessorMetadata, type ProcessorOutput, type ProgressCallback, type ProgressItem, PropertiesTableInjector, PropertiesTableRestorer, PropertyMapper, type PropertyOption, type PropertyRename, type PropertySchema, type PropertyValue, type PullOptions, type PullResult, type PushOptions, type PushResult, RENDER_LINE_RULES, type ReadOnlySkip, type RecordPendingInput, type RegisterFileInput, type RemoteChange, type RemoteMove, type RemoteMoveSkip, type RemoteObservation, type RemoteScanInfo, type RenameHints, type RenameKind, type RenderFinding, type RenderLineRule, type ResolutionChoice, type ResolutionResult, type RichTextSegment, type RowProgress, SAVED_STATE_TABLES_QUERY, SEPARATOR_BODY, SIDECAR_SUFFIX, STATE_DB_FILE, STATE_DB_MIGRATIONS, STATE_DB_PATH, SavedStateDbError, type SchemaEdit, type SchemaFollowed, ScopedVaultFS, SidecarGenerator, type SidecarProperty, type SidecarView, StateDB, StateDbLockedError, type StateDbMigration, type StateDbTool, StateDbUnavailableError, StateLock, type StateLockClaim, type StateLockOwner, type StatusOptions, type StatusResult, type StyledRange, SyncBusyError, type SyncDirection, type SyncOptions, SyncOrchestrator, type SyncRecord, type SyncResult, type SyncStatus, TEMPLATE_FOLDER_SETTINGS, type TableLineDesign, type TranslationResult, TreeMapper, UnlinkedVaultError, UnsupportedBlockStripper, type UpsertSyncRecord, type UserBaseFilterFix, type VaultCompletenessReport, type VaultFS, type ViewConfig, ViewDataProvider, type ViewEdit, type ViewPropertyConfig, type ViewRenderData, type ViewType, WIKILINK_LOOKUPS, type WatchSyncOptions, type WatchSyncScope, WatchSyncService, type WikilinkEntry, type WikilinkLookup, WikilinkResolver, applicableChoices, assertNoPendingWal, basesViewMappingOf, basesViewTypeOf, checkNotionAccess, choiceForStrategy, classifyBodyFidelity, columnLabel, compactNotionId, computeBufferHash, computeHash, configDirFrom, connectionFolderOf, createDefaultPipeline, extractCalendarEntries, filterByMonth, filterEntries, findConnectionFolders, findNestedFolderPages, formatUnifiedDiff, generateColorCSS, generateId, getLogger, getNotionBgColor, getNotionColor, getVisibleProperties, groupEntries, hasColumnLayout, hasDesignMarker, inAnyPathScope, isHeadingLine, isHeadingMarkerLine, isInternalPath, isMarkdownPath, isRemoteDeletion, lineDiff, lintRenderedMarkdown, matchesPathScope, normalizeNotionId, normalizeVaultPath, noteNameFromPath, notionIdFromInput, notionIdsEqual, notionPageUrl, obsidianOnlyExcludes, operationLabel, parseDesignColor, parseIgnorePatterns, pendingWalBytes, readColumnLayout, readDesignLine, resolvePropertyName, sanitizeFileName, sectionLinesWithHeadingMarkers, setLogger, shortNotionId, sortEntries, stateDbLockPath, stateDbWalPath, stripMarkdownExtension, summarizeFidelity, systemTimeZone, templateFolders, threeWayMerge, toVaultPath, translateNotionFilter, verifyDatabaseCompleteness, verifyPageCompleteness, wikilinkLookupsIn };
5104
+ export { BaseFileGenerator, type BaseFileOptions, type BasePropertyOption, type BasePropertySchema, type BaseStatusGroup, type BaseSyncOptions, type BasesFilterNode, type BasesViewMapping, type BasesViewType, BlankLineCollapser, type BookmarkTarget, CONFIG_FILE, CONFLICT_STRATEGIES, type CalendarEntry, type CalloutDesign, CalloutRestorer, CalloutTransformer, ChangeDetector, type ChangeDiff, ColorAnnotator, type ColumnPlace, type CompletenessFailure, type CompletenessLocalSource, type CompletenessOptions, type CompletenessRemoteSource, type CompletenessReport, type Config, ConfigManager, ConfigSchema, type Conflict, ConflictResolver, type ConflictStrategy, ConnectionBoundaryError, ConnectionScopeError, type ConversionContext, type ConversionPath, ConversionPipeline, type ConversionResult, type CoverConfig, type DBEntry, DB_VIEWS_FILE, DB_VIEWS_PATH, DEFAULT_CONFIG, DEFAULT_TITLE_PROPERTY, DEFAULT_WATCH_DEBOUNCE_MS, DIFF_SIGN, type DatabaseCompleteness, type DatabaseMove, type DatabaseSyncConfig, type DatabaseSyncResult, DatabaseSyncer, type DatabaseViewsConfig, type DeferredCode, type DegradeNote, type DesignColor, type DesignLine, type DesignSegment, type DiffHunk, type DiffLine, EmbedResolver, EntryEditor, type FailedOperation, type FidelityClassification, type FidelityContext, type FidelityDefect, type FidelityDefectForm, type FidelitySummary, type FileDownloadResult, FileHandler, type FileInfo, type FileRegistryEntry, type FileStatInfo, type FileSystemEntry, type FileType, type FileUploadResult, FileWatcher, type FilterCondition, FilteredVaultFS, type FolderDatabaseReport, type FolderMoveChange, FrontmatterExtractor, FrontmatterGenerator, type FullScanReason, GITIGNORE_ENTRY, type GatedOperation, type GroupByConfig, type GroupedEntries, IGNORE_FILE, INTERNAL_DIR, INTERNAL_DIR_GLOB, type IStateDB, type ImageDownloadResult, ImageHandler, type ImageReference, type InferredProperty, InlineAnnotationPreserver, InlineDBParser, type InlineStyle, type LineDiffOptions, type LineRange, type LocalChange, LocalImageRestorer, type LocalMoveAdoption, type LocalScan, type LocalScanOptions, type Logger, type Lookbehind, LookbehindRegExp, MARKER_BRAND, type MappingResult, type MappingType, MathNormalizer, MentionToWikilink, type MergeConflictRegion, type MergeResult, NOTION_COLOR_NAMES, NOTION_TOKEN_PREFIX, NOTION_TO_BASES_VIEW, type NestedFolderPage, type NestedFolderRecord, NodeVaultFS, type NonMdFileInfo, type NotionAccessCheck, type NotionBlock, NotionBlockBuilder, NotionClient, type NotionClientOptions, type NotionColor, type NotionPageNode, type NotionRichText, type RichTextItem as NotionRichTextItem, type NotionSidecar, OBSIDIAN_CONFIG_DIR, OBSIDIAN_ONLY_PATTERNS, type OperationType, type OutsideVault, type PageCompletenessRemoteSource, type PageCompletenessReport, type PageCover, type PageCreationPlan, type PageIcon, PathFilter, type PathFilterConfig, type PendingOperation, PendingWalError, type PlacementChange, type PlannedRow, type PreserveMarker, PreserveMarkerCollector, PreserveMarkerInjector, type Processor, type ProcessorInput, type ProcessorMetadata, type ProcessorOutput, type ProgressCallback, type ProgressItem, PropertiesTableInjector, PropertiesTableRestorer, PropertyMapper, type PropertyOption, type PropertyRename, type PropertySchema, type PropertyValue, type PullOptions, type PullResult, type PushOptions, type PushResult, RENDER_LINE_RULES, type ReadOnlySkip, type RecordPendingInput, type RegisterFileInput, type RemoteChange, type RemoteMove, type RemoteMoveSkip, type RemoteObservation, type RemoteScanInfo, type RenameHints, type RenameKind, type RenderFinding, type RenderLineRule, type ResolutionChoice, type ResolutionResult, type RichTextSegment, type RowProgress, SAVED_STATE_TABLES_QUERY, SEPARATOR_BODY, SIDECAR_SUFFIX, STATE_DB_FILE, STATE_DB_MIGRATIONS, STATE_DB_PATH, SavedStateDbError, type SchemaEdit, type SchemaFollowed, ScopedVaultFS, SidecarGenerator, type SidecarProperty, type SidecarView, StateDB, StateDbLockedError, type StateDbMigration, type StateDbTool, StateDbUnavailableError, StateLock, type StateLockClaim, type StateLockOwner, type StatusOptions, type StatusResult, type StyledRange, SyncBusyError, type SyncDirection, type SyncOptions, SyncOrchestrator, type SyncRecord, type SyncResult, type SyncStatus, TEMPLATE_FOLDER_SETTINGS, type TableLineDesign, type TranslationResult, TreeMapper, UnlinkedVaultError, UnsupportedBlockStripper, type UpsertSyncRecord, type UserBaseFilterFix, type VaultCompletenessReport, type VaultFS, type ViewConfig, ViewDataProvider, type ViewEdit, type ViewPropertyConfig, type ViewRenderData, type ViewType, WIKILINK_LOOKUPS, type WatchSyncOptions, type WatchSyncScope, WatchSyncService, type WikilinkEntry, type WikilinkLookup, WikilinkResolver, applicableChoices, assertNoPendingWal, basesViewMappingOf, basesViewTypeOf, charBefore, checkNotionAccess, choiceForStrategy, classifyBodyFidelity, columnLabel, compactNotionId, computeBufferHash, computeHash, configDirFrom, connectionFolderOf, createDefaultPipeline, extractCalendarEntries, filterByMonth, filterEntries, findConnectionFolders, findNestedFolderPages, formatUnifiedDiff, generateColorCSS, generateId, getLogger, getNotionBgColor, getNotionColor, getVisibleProperties, groupEntries, hasColumnLayout, hasDesignMarker, inAnyPathScope, isHeadingLine, isHeadingMarkerLine, isInternalPath, isMarkdownPath, isRemoteDeletion, lineDiff, lintRenderedMarkdown, matchesPathScope, normalizeNotionId, normalizeVaultPath, notAfter, noteNameFromPath, notionIdFromInput, notionIdsEqual, notionPageUrl, obsidianOnlyExcludes, operationLabel, parseDesignColor, parseIgnorePatterns, pendingWalBytes, readColumnLayout, readDesignLine, resolvePropertyName, sanitizeFileName, sectionLinesWithHeadingMarkers, setLogger, shortNotionId, sortEntries, stateDbLockPath, stateDbWalPath, stripMarkdownExtension, summarizeFidelity, systemTimeZone, templateFolders, threeWayMerge, toVaultPath, translateNotionFilter, verifyDatabaseCompleteness, verifyPageCompleteness, wikilinkLookupsIn };
package/dist/index.js CHANGED
@@ -118,7 +118,16 @@ var REQUEST_BYTES_MAX = 5e5;
118
118
  var DEFAULT_DOWNLOAD_TIMEOUT_MS = 3e5;
119
119
  function fetchForDownload(fetchFn, url, timeoutMs = DEFAULT_DOWNLOAD_TIMEOUT_MS) {
120
120
  if (timeoutMs <= 0) return fetchFn(url);
121
- return fetchFn(url, { signal: AbortSignal.timeout(timeoutMs) });
121
+ return fetchFn(url, { signal: timeoutSignal(timeoutMs) });
122
+ }
123
+ function timeoutSignal(timeoutMs) {
124
+ if (typeof AbortSignal.timeout === "function") return AbortSignal.timeout(timeoutMs);
125
+ const controller = new AbortController();
126
+ setTimeout(
127
+ () => controller.abort(new DOMException("The operation timed out.", "TimeoutError")),
128
+ timeoutMs
129
+ );
130
+ return controller.signal;
122
131
  }
123
132
 
124
133
  // src/utils/deadline.ts
@@ -187,9 +196,7 @@ var DEFAULT_TITLE_PROPERTY = "Name";
187
196
  var DatabaseSyncSchema = z.object({
188
197
  databaseId: z.string(),
189
198
  localFolder: z.string(),
190
- propertyMapping: z.record(z.string()).optional(),
191
- pullFilter: z.unknown().optional(),
192
- titleProperty: z.string().default(DEFAULT_TITLE_PROPERTY)
199
+ pullFilter: z.unknown().optional()
193
200
  });
194
201
  var DEFAULTS = {
195
202
  version: 1,
@@ -259,12 +266,36 @@ var RETIRED_SETTINGS = [
259
266
  note: "\uAEBC\uB3C4 \uBC14\uB010 \uAC83\uC774 \uC5C6\uC5C8\uC2B5\uB2C8\uB2E4 \u2014 frontmatter \uB294 \uB298 Notion \uC18D\uC131\uC73C\uB85C \uC8FC\uACE0\uBC1B\uC2B5\uB2C8\uB2E4"
260
267
  }
261
268
  ];
269
+ var RETIRED_DATABASE_SETTINGS = [
270
+ {
271
+ key: "propertyMapping",
272
+ meant: (value) => value !== void 0,
273
+ note: "\uC5B4\uB514\uC5D0\uB3C4 \uC4F0\uC774\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4 \u2014 \uC18D\uC131\uC740 frontmatter \uC758 \uC774\uB984 \uADF8\uB300\uB85C Notion \uC18D\uC131\uACFC \uC9DD\uC9D3\uC2B5\uB2C8\uB2E4"
274
+ },
275
+ {
276
+ key: "titleProperty",
277
+ meant: (value) => value !== void 0 && value !== DEFAULT_TITLE_PROPERTY,
278
+ note: "\uC5B4\uB514\uC5D0\uB3C4 \uC4F0\uC774\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4 \u2014 \uC81C\uBAA9 \uC18D\uC131\uC740 Notion DB \uC758 title \uC18D\uC131\uC744 \uC77D\uC5B4 \uCC3E\uC2B5\uB2C8\uB2E4"
279
+ }
280
+ ];
262
281
  function retiredSettings(raw) {
263
- return RETIRED_SETTINGS.flatMap(({ path: [section, key], meant, note }) => {
264
- const group2 = raw?.[section];
282
+ const root = raw;
283
+ const lines = RETIRED_SETTINGS.flatMap(({ path: [section, key], meant, note }) => {
284
+ const group2 = root?.[section];
265
285
  const value = group2 && typeof group2 === "object" ? group2[key] : void 0;
266
286
  return meant(value) ? [`${section}.${key}: ${note}`] : [];
267
287
  });
288
+ const notion = root?.notion;
289
+ const databases = Array.isArray(notion?.databases) ? notion.databases : [];
290
+ databases.forEach((database, index) => {
291
+ if (!database || typeof database !== "object") return;
292
+ for (const { key, meant, note } of RETIRED_DATABASE_SETTINGS) {
293
+ if (meant(database[key])) {
294
+ lines.push(`notion.databases[${index}].${key}: ${note}`);
295
+ }
296
+ }
297
+ });
298
+ return lines;
268
299
  }
269
300
  var ConfigSchema = z.object({
270
301
  version: z.literal(1),
@@ -5847,6 +5878,69 @@ function decodeMarkerTarget(encoded) {
5847
5878
  var MARKER_URL_CAPTURE = "((?:[^()\\s]|\\([^()]*\\))+)";
5848
5879
  var MARKER_LABEL_CAPTURE = "([^[\\]]+)";
5849
5880
 
5881
+ // src/utils/lookbehind.ts
5882
+ var LookbehindRegExp = class _LookbehindRegExp extends RegExp {
5883
+ accept;
5884
+ /** 실제로 찾는 정규식 — `g`(또는 `y`) 로 어느 자리에서든 이어 찾는다. */
5885
+ scanner;
5886
+ constructor(pattern, flags, accept) {
5887
+ super(pattern, flags);
5888
+ const inherited = pattern instanceof _LookbehindRegExp ? pattern.accept : void 0;
5889
+ const resolved = accept ?? inherited;
5890
+ if (!resolved) throw new TypeError("LookbehindRegExp \uC5D0 \uC55E \uAE00 \uC870\uAC74\uC774 \uC5C6\uC74C");
5891
+ this.accept = resolved;
5892
+ this.scanner = new RegExp(
5893
+ this.source,
5894
+ this.sticky || this.global ? this.flags : `${this.flags}g`
5895
+ );
5896
+ }
5897
+ exec(text) {
5898
+ const keepsIndex = this.global || this.sticky;
5899
+ const start = keepsIndex ? this.lastIndex : 0;
5900
+ this.scanner.lastIndex = start;
5901
+ for (; ; ) {
5902
+ const match = start > text.length ? null : this.scanner.exec(text);
5903
+ if (match === null) {
5904
+ if (keepsIndex) this.lastIndex = 0;
5905
+ return null;
5906
+ }
5907
+ if (this.accept(text, match.index, match)) {
5908
+ if (keepsIndex) this.lastIndex = this.scanner.lastIndex;
5909
+ return match;
5910
+ }
5911
+ if (this.sticky) {
5912
+ this.lastIndex = 0;
5913
+ return null;
5914
+ }
5915
+ this.scanner.lastIndex = match.index + codeUnitsAt(text, match.index, this.unicode);
5916
+ }
5917
+ }
5918
+ };
5919
+ function codeUnitsAt(text, index, unicode) {
5920
+ return unicode && (text.codePointAt(index) ?? 0) > 65535 ? 2 : 1;
5921
+ }
5922
+ function charBefore(text, index) {
5923
+ if (index <= 0) return "";
5924
+ const low = text.charCodeAt(index - 1);
5925
+ const isLow = low >= 56320 && low <= 57343;
5926
+ const high = index >= 2 ? text.charCodeAt(index - 2) : 0;
5927
+ return isLow && high >= 55296 && high <= 56319 ? text.slice(index - 2, index) : text.slice(index - 1, index);
5928
+ }
5929
+ function notAfter(set) {
5930
+ return (text, index) => {
5931
+ const before = charBefore(text, index);
5932
+ return before === "" || !set.test(before);
5933
+ };
5934
+ }
5935
+ function notAfterText(literal) {
5936
+ return (text, index) => !text.slice(Math.max(0, index - literal.length), index).endsWith(literal);
5937
+ }
5938
+ function evenBackslashesBefore(text, index) {
5939
+ let count = 0;
5940
+ while (index - count - 1 >= 0 && text[index - count - 1] === "\\") count++;
5941
+ return count % 2 === 0;
5942
+ }
5943
+
5850
5944
  // src/converter/anchor-links.ts
5851
5945
  function splitAnchor(target) {
5852
5946
  const at = target.indexOf("#");
@@ -5900,7 +5994,11 @@ function anchorBlockOf(block) {
5900
5994
  text: (body?.rich_text ?? []).map((t) => t.plain_text ?? "").join("")
5901
5995
  };
5902
5996
  }
5903
- var ANCHORED_WIKILINK_RE = /(?<!!)\[\[([^[\]|]*#[^[\]|]*?)\\?(?:\|[^[\]]+)?\]\]/g;
5997
+ var ANCHORED_WIKILINK_RE = new LookbehindRegExp(
5998
+ /\[\[([^[\]|]*#[^[\]|]*?)\\?(?:\|[^[\]]+)?\]\]/g,
5999
+ void 0,
6000
+ notAfter(/!/)
6001
+ );
5904
6002
  function anchoredWikilinkTargets(markdown) {
5905
6003
  return [...new Set([...markdown.matchAll(ANCHORED_WIKILINK_RE)].map((m) => m[1].trim()))].filter(
5906
6004
  (target) => splitAnchor(target) !== null
@@ -5911,7 +6009,11 @@ function notionBlockUrl(pageId, blockId) {
5911
6009
  }
5912
6010
 
5913
6011
  // src/converter/pre-processors/wikilink.ts
5914
- var WIKILINK_REGEX2 = /(?<!!)\[\[([^[\]|]+)(?:\|([^[\]]+))?\]\]/g;
6012
+ var WIKILINK_REGEX2 = new LookbehindRegExp(
6013
+ /\[\[([^[\]|]+)(?:\|([^[\]]+))?\]\]/g,
6014
+ void 0,
6015
+ notAfter(/!/)
6016
+ );
5915
6017
  function withoutTableAliasEscape(target) {
5916
6018
  return target.endsWith("\\") ? target.slice(0, -1) : target;
5917
6019
  }
@@ -6144,7 +6246,7 @@ function withoutPrefix(line, prefix) {
6144
6246
  if (line.trimEnd() === prefix.trimEnd()) return "";
6145
6247
  return null;
6146
6248
  }
6147
- var DOUBLE_DOLLAR_RE = /(?<![\\$])\$\$(?!\$)/g;
6249
+ var DOUBLE_DOLLAR_RE = new LookbehindRegExp(/\$\$(?!\$)/g, void 0, notAfter(/[\\$]/));
6148
6250
  var OWN_LINE_DOLLARS_RE = new RegExp(
6149
6251
  String.raw`^(?:[ \t]*>)*[ \t]*(?:\[![^\]]*\][+-]?[ \t]*|${LIST_MARKER_SOURCE}[ \t]+)?\$\$[ \t]*$`
6150
6252
  );
@@ -6276,9 +6378,11 @@ var HEAD_LINE_PARTS_RE = /^([ \t]*(?:>[ \t]*)+)(\[![^\]\s]+\][-+]?)(.*)$/;
6276
6378
  var TITLE_EMBED_RE = /[ \t]*!\[\[([^[\]]+)\]\]/g;
6277
6379
  var MARKDOWN_IMAGE_REGEX = /!\[([^\]]*)\]\(([^)]+)\)/g;
6278
6380
  var VIDEO_HOSTS = ["youtube.com", "youtu.be", "vimeo.com"];
6279
- var STRAY_MEDIA_MARKER_RE = new RegExp(
6280
- `(?<!\u{1F4CE}[^\\n]*)%%\\s*${MARKER_BRAND_RE}:local-(?:image|file):${MARKER_PAYLOAD_CHAR}+?\\s*%%`,
6281
- "gu"
6381
+ var STRAY_MEDIA_MARKER_RE = new LookbehindRegExp(
6382
+ `%%\\s*${MARKER_BRAND_RE}:local-(?:image|file):${MARKER_PAYLOAD_CHAR}+?\\s*%%`,
6383
+ "gu",
6384
+ // 같은 줄의 앞에 📎 이 없다 — 예전 `(?<!📎[^\n]*)`
6385
+ (text, index) => !text.slice(text.lastIndexOf("\n", index - 1) + 1, index).includes("\u{1F4CE}")
6282
6386
  );
6283
6387
  var EmbedResolver = class {
6284
6388
  name = "EmbedResolver";
@@ -6778,7 +6882,7 @@ function containerBlockEnds(lines) {
6778
6882
 
6779
6883
  // src/converter/pre-processors/html-annotation.ts
6780
6884
  var UNDERLINE_REGEX = /<u>([\s\S]*?)<\/u>/g;
6781
- var HIGHLIGHT_REGEX = /(?<!=)==([^=\n]+?)==(?!=)/g;
6885
+ var HIGHLIGHT_REGEX = new LookbehindRegExp(/==([^=\n]+?)==(?!=)/g, void 0, notAfter(/=/));
6782
6886
  var MARK_REGEX = /<mark(?:\s[^>]*)?>([^\n]+?)<\/mark>/g;
6783
6887
  var COLOR_SPAN_REGEX = /<span class="notion-(\w+)(-bg)?">([\s\S]*?)<\/span>/g;
6784
6888
  var SPACED_COLOR_REGEX = new RegExp(
@@ -7500,7 +7604,7 @@ var CommentStripper = class {
7500
7604
  };
7501
7605
 
7502
7606
  // src/converter/pre-processors/footnote-guard.ts
7503
- var FOOTNOTE_TOKEN_REGEX = /(?<!\\)\[\^([^\]\s]+)\]/g;
7607
+ var FOOTNOTE_TOKEN_REGEX = new LookbehindRegExp(/\[\^([^\]\s]+)\]/g, void 0, notAfter(/\\/));
7504
7608
  var FootnoteGuard = class {
7505
7609
  name = "FootnoteGuard";
7506
7610
  order = 12;
@@ -9988,12 +10092,16 @@ function mapOutsideRanges(line, ranges, fn) {
9988
10092
  }
9989
10093
  return out + fn(line.slice(pos));
9990
10094
  }
9991
- var WIKILINK_FORMAT_CHAR_RE = /(?<!\\)([*_~`$])/g;
10095
+ var WIKILINK_FORMAT_CHAR_RE = new LookbehindRegExp(/([*_~`$])/g, void 0, notAfter(/\\/));
9992
10096
  function sendWikilinkText(text) {
9993
10097
  return text.replace(WIKILINK_FORMAT_CHAR_RE, "\\$1");
9994
10098
  }
9995
10099
  var WIKILINK_ESCAPED_RE = /\\([*_~`$<>])/g;
9996
- var PLAIN_WIKILINK_RE = /(?<!!)\[\[(?!notion:)([^[\]\n]+)\]\]/g;
10100
+ var PLAIN_WIKILINK_RE = new LookbehindRegExp(
10101
+ /\[\[(?!notion:)([^[\]\n]+)\]\]/g,
10102
+ void 0,
10103
+ notAfter(/!/)
10104
+ );
9997
10105
  function receiveWikilinkText(markdown) {
9998
10106
  if (!markdown.includes("[[")) return markdown;
9999
10107
  return mapOutsideCodeFences(
@@ -10026,6 +10134,7 @@ function extractInlineDbIds(markdown) {
10026
10134
  }
10027
10135
 
10028
10136
  // src/converter/child-tags.ts
10137
+ var UNESCAPED_UNDERSCORE_RE = new LookbehindRegExp(/_/g, void 0, notAfter(/\\/));
10029
10138
  var CHILD_PAGE_TAG_RE = /<page url="([^"]*)">([\s\S]*?)<\/page>/g;
10030
10139
  var CHILD_DATABASE_TAG_RE = /<database\b([^>]*)>([\s\S]*?)<\/database>/g;
10031
10140
  var ID32_RE = /[a-f0-9]{32}/;
@@ -10109,7 +10218,7 @@ function sendableTag(child) {
10109
10218
  if (child.kind !== "page" || !child.title.includes("_")) return child.tag;
10110
10219
  const close = "</page>";
10111
10220
  const head = child.tag.slice(0, child.tag.length - close.length - child.title.length);
10112
- return `${head}${child.title.replace(/(?<!\\)_/g, "\\_")}${close}`;
10221
+ return `${head}${child.title.replace(UNESCAPED_UNDERSCORE_RE, "\\_")}${close}`;
10113
10222
  }
10114
10223
  var CONTAINER_OPEN_RE = /^[ \t]*<(callout|details|columns|column)\b[^>]*>[ \t]*$/;
10115
10224
  var CONTAINER_CLOSE_RE = /^[ \t]*<\/(?:callout|details|columns|column)>[ \t]*$/;
@@ -10673,10 +10782,9 @@ function markersToMentions(obsidian) {
10673
10782
  // src/converter/table.ts
10674
10783
  var PIPE_TABLE_ATTRS = [["header-row", "true"]];
10675
10784
  var ESCAPED_PIPE = "\\|";
10676
- var CELL_PIPE_SOURCE = String.raw`(?<=(?:^|[^\\])(?:\\\\)*)\|`;
10677
- var CELL_PIPE_RE = new RegExp(CELL_PIPE_SOURCE);
10678
- var CELL_PIPES_RE = new RegExp(CELL_PIPE_SOURCE, "g");
10679
- var TRAILING_CELL_PIPE_RE = new RegExp(`${CELL_PIPE_SOURCE}$`);
10785
+ var CELL_PIPE_RE = new LookbehindRegExp(/\|/, void 0, evenBackslashesBefore);
10786
+ var CELL_PIPES_RE = new LookbehindRegExp(/\|/g, void 0, evenBackslashesBefore);
10787
+ var TRAILING_CELL_PIPE_RE = new LookbehindRegExp(/\|$/, void 0, evenBackslashesBefore);
10680
10788
  var CODE_PIPE_RE = /(\\*)\|/g;
10681
10789
  function encodeCodePipes(code) {
10682
10790
  return code.replace(CODE_PIPE_RE, (_m, bs) => `${bs}${bs}${ESCAPED_PIPE}`);
@@ -11364,6 +11472,7 @@ function mergeAndSplit(items) {
11364
11472
  }
11365
11473
 
11366
11474
  // src/converter/nfm-to-blocks.ts
11475
+ var UNESCAPED_PIPE_RE = new LookbehindRegExp(/\|/, void 0, notAfter(/\\/));
11367
11476
  function nfmToBlocks(nfm, options = {}) {
11368
11477
  const lines = nfm.split("\n");
11369
11478
  return prune(new NfmBlockParser(lines, options).parse(0, lines.length).map((p) => p.block));
@@ -11734,8 +11843,8 @@ function tableBlock(rows, header) {
11734
11843
  });
11735
11844
  }
11736
11845
  function pipeCells(line) {
11737
- const body = line.trim().replace(/^\|/, "").replace(/(?<!\\)\|$/, "");
11738
- return body.split(/(?<!\\)\|/).map((cell) => nfmInlineToRichText(cell.trim()));
11846
+ const body = line.trim().replace(/^\|/, "").replace(new LookbehindRegExp(/\|$/, void 0, notAfter(/\\/)), "");
11847
+ return body.split(UNESCAPED_PIPE_RE).map((cell) => nfmInlineToRichText(cell.trim()));
11739
11848
  }
11740
11849
  function emptyParagraph() {
11741
11850
  return { type: "paragraph", paragraph: { rich_text: [] } };
@@ -11973,7 +12082,12 @@ function obsidianToNotionEnhanced(obsidian) {
11973
12082
  result = sendLiteralBackslashes(result);
11974
12083
  return result;
11975
12084
  }
11976
- var ITALIC_WITH_ESCAPED_STAR_RE = /(?<![\\*\p{L}\p{N}])\*(?![\s*])((?:[^*_\n\\]|\\[^\n])*?\\\*(?:[^*_\n\\]|\\[^\n])*?)(?<![\s\\])\*(?![*\p{L}\p{N}])/gu;
12085
+ var ITALIC_WITH_ESCAPED_STAR_RE = new LookbehindRegExp(
12086
+ // 닫는 `*` 앞 글자가 공백 · `\\` 가 아니다 — 예전 `(?<![\s\\])` 를 마지막 조각(`[^…\s]` · `\\[^…\s\\]`)으로
12087
+ /\*(?![\s*])((?:[^*_\n\\]|\\[^\n])*?\\\*(?:(?:[^*_\n\\]|\\[^\n])*?(?:[^*_\n\\\s]|\\[^\n\s\\]))??)\*(?![*\p{L}\p{N}])/gu,
12088
+ void 0,
12089
+ notAfter(/[\\*\p{L}\p{N}]/u)
12090
+ );
11977
12091
  function underscoreItalicsWithStar(content) {
11978
12092
  if (!content.includes("\\*")) return content;
11979
12093
  return mapOutsideCode(
@@ -16541,6 +16655,11 @@ ${text}
16541
16655
  }
16542
16656
 
16543
16657
  // src/sync/database-creator.ts
16658
+ var PROP_REFERENCE_RE = new LookbehindRegExp(
16659
+ /prop\("([^"]+)"\)/g,
16660
+ void 0,
16661
+ notAfterText("current.")
16662
+ );
16544
16663
  function isSidecarPath(path) {
16545
16664
  return path.toLowerCase().endsWith(SIDECAR_SUFFIX);
16546
16665
  }
@@ -17102,7 +17221,7 @@ function messageOf3(error) {
17102
17221
  function dependentHint(dependent, schema, message) {
17103
17222
  const expression = dependent.body.formula?.expression;
17104
17223
  if (typeof expression === "string") {
17105
- const referenced = [...expression.matchAll(/(?<!current\.)prop\("([^"]+)"\)/g)].map((m) => m[1]).filter((name) => name !== dependent.name);
17224
+ const referenced = [...expression.matchAll(PROP_REFERENCE_RE)].map((m) => m[1]).filter((name) => name !== dependent.name);
17106
17225
  const blocked = referenced.filter(schema.stillMissing);
17107
17226
  if (blocked.length > 0) {
17108
17227
  return ` \u2014 \uAC00\uB9AC\uD0A4\uB294 \uC18D\uC131(${[...new Set(blocked)].join(", ")})\uC744 \uB9CC\uB4E4\uC9C0 \uBABB\uD574\uC11C\uB2E4`;
@@ -23257,8 +23376,7 @@ var DatabaseDiscovery = class {
23257
23376
  kind: "ok",
23258
23377
  config: {
23259
23378
  databaseId: dbId,
23260
- localFolder: `${parentFolder}/${safeName}`,
23261
- titleProperty: DEFAULT_TITLE_PROPERTY
23379
+ localFolder: `${parentFolder}/${safeName}`
23262
23380
  }
23263
23381
  };
23264
23382
  }
@@ -31419,7 +31537,7 @@ function inlineCodeRanges2(line) {
31419
31537
  const open = /`+/g;
31420
31538
  let start;
31421
31539
  while ((start = open.exec(line)) !== null) {
31422
- const close = new RegExp(`(?<!\`)${"`".repeat(start[0].length)}(?!\`)`, "g");
31540
+ const close = new LookbehindRegExp(`${"`".repeat(start[0].length)}(?!\`)`, "g", notAfter(/`/));
31423
31541
  close.lastIndex = start.index + start[0].length;
31424
31542
  const end = close.exec(line);
31425
31543
  if (end === null) continue;
@@ -31603,6 +31721,6 @@ function formatRatio(ratio) {
31603
31721
  return String(Math.round(ratio * 100) / 100);
31604
31722
  }
31605
31723
 
31606
- export { BaseFileGenerator, BlankLineCollapser, CONFIG_FILE, CONFLICT_STRATEGIES, CalloutRestorer, CalloutTransformer, ChangeDetector, ColorAnnotator, ConfigManager, ConfigSchema, ConflictResolver, ConnectionBoundaryError, ConnectionScopeError, ConversionPipeline, DB_VIEWS_FILE, DB_VIEWS_PATH, DEFAULT_CONFIG, DEFAULT_TITLE_PROPERTY, DEFAULT_WATCH_DEBOUNCE_MS, DIFF_SIGN, DatabaseSyncer, EmbedResolver, EntryEditor, FileHandler, FileWatcher, FilteredVaultFS, FrontmatterExtractor, FrontmatterGenerator, GITIGNORE_ENTRY, IGNORE_FILE, INTERNAL_DIR, INTERNAL_DIR_GLOB, ImageHandler, InlineAnnotationPreserver, InlineDBParser, LocalImageRestorer, MARKER_BRAND, MathNormalizer, MentionToWikilink, NOTION_COLOR_NAMES, NOTION_TOKEN_PREFIX, NOTION_TO_BASES_VIEW, NodeVaultFS, NotionBlockBuilder, NotionClient2 as NotionClient, OBSIDIAN_CONFIG_DIR, OBSIDIAN_ONLY_PATTERNS, PathFilter, PendingWalError, PreserveMarkerCollector, PreserveMarkerInjector, PropertiesTableInjector, PropertiesTableRestorer, PropertyMapper, RENDER_LINE_RULES, SAVED_STATE_TABLES_QUERY, SEPARATOR_BODY, SIDECAR_SUFFIX, STATE_DB_FILE, STATE_DB_MIGRATIONS, STATE_DB_PATH, SavedStateDbError, ScopedVaultFS, SidecarGenerator, StateDB, StateDbLockedError, StateDbUnavailableError, StateLock, SyncBusyError, SyncOrchestrator, TEMPLATE_FOLDER_SETTINGS, TreeMapper, UnlinkedVaultError, UnsupportedBlockStripper, ViewDataProvider, WIKILINK_LOOKUPS, WatchSyncService, WikilinkResolver, applicableChoices, assertNoPendingWal, basesViewMappingOf, basesViewTypeOf, checkNotionAccess, choiceForStrategy, classifyBodyFidelity, columnLabel, compactNotionId, computeBufferHash, computeHash, configDirFrom, connectionFolderOf, createDefaultPipeline, extractCalendarEntries, filterByMonth, filterEntries, findConnectionFolders, findNestedFolderPages, formatUnifiedDiff, generateColorCSS, generateId, getLogger, getNotionBgColor, getNotionColor, getVisibleProperties, groupEntries, hasColumnLayout, hasDesignMarker, inAnyPathScope, isHeadingLine, isHeadingMarkerLine, isInternalPath, isMarkdownPath, isRemoteDeletion, lineDiff, lintRenderedMarkdown, matchesPathScope, normalizeNotionId, normalizeVaultPath, noteNameFromPath, notionIdFromInput, notionIdsEqual, notionPageUrl, obsidianOnlyExcludes, operationLabel, parseDesignColor, parseIgnorePatterns, pendingWalBytes, readColumnLayout, readDesignLine, resolvePropertyName, sanitizeFileName, sectionLinesWithHeadingMarkers, setLogger, shortNotionId, sortEntries, stateDbLockPath, stateDbWalPath, stripMarkdownExtension, summarizeFidelity, systemTimeZone, templateFolders, threeWayMerge, toVaultPath, translateNotionFilter, verifyDatabaseCompleteness, verifyPageCompleteness, wikilinkLookupsIn };
31724
+ export { BaseFileGenerator, BlankLineCollapser, CONFIG_FILE, CONFLICT_STRATEGIES, CalloutRestorer, CalloutTransformer, ChangeDetector, ColorAnnotator, ConfigManager, ConfigSchema, ConflictResolver, ConnectionBoundaryError, ConnectionScopeError, ConversionPipeline, DB_VIEWS_FILE, DB_VIEWS_PATH, DEFAULT_CONFIG, DEFAULT_TITLE_PROPERTY, DEFAULT_WATCH_DEBOUNCE_MS, DIFF_SIGN, DatabaseSyncer, EmbedResolver, EntryEditor, FileHandler, FileWatcher, FilteredVaultFS, FrontmatterExtractor, FrontmatterGenerator, GITIGNORE_ENTRY, IGNORE_FILE, INTERNAL_DIR, INTERNAL_DIR_GLOB, ImageHandler, InlineAnnotationPreserver, InlineDBParser, LocalImageRestorer, LookbehindRegExp, MARKER_BRAND, MathNormalizer, MentionToWikilink, NOTION_COLOR_NAMES, NOTION_TOKEN_PREFIX, NOTION_TO_BASES_VIEW, NodeVaultFS, NotionBlockBuilder, NotionClient2 as NotionClient, OBSIDIAN_CONFIG_DIR, OBSIDIAN_ONLY_PATTERNS, PathFilter, PendingWalError, PreserveMarkerCollector, PreserveMarkerInjector, PropertiesTableInjector, PropertiesTableRestorer, PropertyMapper, RENDER_LINE_RULES, SAVED_STATE_TABLES_QUERY, SEPARATOR_BODY, SIDECAR_SUFFIX, STATE_DB_FILE, STATE_DB_MIGRATIONS, STATE_DB_PATH, SavedStateDbError, ScopedVaultFS, SidecarGenerator, StateDB, StateDbLockedError, StateDbUnavailableError, StateLock, SyncBusyError, SyncOrchestrator, TEMPLATE_FOLDER_SETTINGS, TreeMapper, UnlinkedVaultError, UnsupportedBlockStripper, ViewDataProvider, WIKILINK_LOOKUPS, WatchSyncService, WikilinkResolver, applicableChoices, assertNoPendingWal, basesViewMappingOf, basesViewTypeOf, charBefore, checkNotionAccess, choiceForStrategy, classifyBodyFidelity, columnLabel, compactNotionId, computeBufferHash, computeHash, configDirFrom, connectionFolderOf, createDefaultPipeline, extractCalendarEntries, filterByMonth, filterEntries, findConnectionFolders, findNestedFolderPages, formatUnifiedDiff, generateColorCSS, generateId, getLogger, getNotionBgColor, getNotionColor, getVisibleProperties, groupEntries, hasColumnLayout, hasDesignMarker, inAnyPathScope, isHeadingLine, isHeadingMarkerLine, isInternalPath, isMarkdownPath, isRemoteDeletion, lineDiff, lintRenderedMarkdown, matchesPathScope, normalizeNotionId, normalizeVaultPath, notAfter, noteNameFromPath, notionIdFromInput, notionIdsEqual, notionPageUrl, obsidianOnlyExcludes, operationLabel, parseDesignColor, parseIgnorePatterns, pendingWalBytes, readColumnLayout, readDesignLine, resolvePropertyName, sanitizeFileName, sectionLinesWithHeadingMarkers, setLogger, shortNotionId, sortEntries, stateDbLockPath, stateDbWalPath, stripMarkdownExtension, summarizeFidelity, systemTimeZone, templateFolders, threeWayMerge, toVaultPath, translateNotionFilter, verifyDatabaseCompleteness, verifyPageCompleteness, wikilinkLookupsIn };
31607
31725
  //# sourceMappingURL=index.js.map
31608
31726
  //# sourceMappingURL=index.js.map