@interactive-inc/docs-client 1.0.5 → 1.0.8

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 (3) hide show
  1. package/build/index.d.ts +574 -401
  2. package/build/index.js +558 -182
  3. package/package.json +1 -1
package/build/index.js CHANGED
@@ -1233,24 +1233,6 @@ var DocFileMdMetaValue = class _DocFileMdMetaValue {
1233
1233
  this.validateValue(value, customSchema);
1234
1234
  Object.freeze(this);
1235
1235
  }
1236
- validateValue(value, schema) {
1237
- const keys = Object.keys(schema);
1238
- for (const key of keys) {
1239
- const schemaField = schema[key];
1240
- const fieldValue = this.getValueField(value, key);
1241
- if (schemaField.required && fieldValue === void 0) {
1242
- throw new Error(`Required field "${key}" is missing`);
1243
- }
1244
- if (fieldValue !== void 0) {
1245
- const factory = new DocMetaFieldFactory();
1246
- factory.fromType(key, schemaField.type, fieldValue);
1247
- }
1248
- }
1249
- }
1250
- getValueField(value, key) {
1251
- const record = value;
1252
- return record[key];
1253
- }
1254
1236
  get keys() {
1255
1237
  return Object.keys(this.value);
1256
1238
  }
@@ -1269,24 +1251,6 @@ var DocFileMdMetaValue = class _DocFileMdMetaValue {
1269
1251
  this.customSchema
1270
1252
  );
1271
1253
  }
1272
- /**
1273
- * Return a new instance with an unknown schema
1274
- * Allows accepting Record<string, unknown> schemas from external sources
1275
- */
1276
- withUnknownSchema(draft) {
1277
- const typedSchema = draft;
1278
- const newValue = {};
1279
- for (const key in typedSchema) {
1280
- if (key in this.value) {
1281
- const unknownValue = this.value;
1282
- newValue[key] = unknownValue[key];
1283
- }
1284
- }
1285
- return new _DocFileMdMetaValue(
1286
- newValue,
1287
- typedSchema
1288
- );
1289
- }
1290
1254
  schemaField(key) {
1291
1255
  const field = this.customSchema[key];
1292
1256
  if (field === void 0) {
@@ -1367,6 +1331,33 @@ var DocFileMdMetaValue = class _DocFileMdMetaValue {
1367
1331
  }
1368
1332
  return true;
1369
1333
  }
1334
+ toJson() {
1335
+ return this.value;
1336
+ }
1337
+ toYaml() {
1338
+ return stringify(this.value).trim();
1339
+ }
1340
+ validateValue(value, schema) {
1341
+ if (Object.keys(schema).length === 0) {
1342
+ return;
1343
+ }
1344
+ const keys = Object.keys(schema);
1345
+ for (const key of keys) {
1346
+ const schemaField = schema[key];
1347
+ const fieldValue = this.getValueField(value, key);
1348
+ if (schemaField.required && fieldValue === void 0) {
1349
+ throw new Error(`Required field "${key}" is missing`);
1350
+ }
1351
+ if (fieldValue !== void 0) {
1352
+ const factory = new DocMetaFieldFactory();
1353
+ factory.fromType(key, schemaField.type, fieldValue);
1354
+ }
1355
+ }
1356
+ }
1357
+ getValueField(value, key) {
1358
+ const record = value;
1359
+ return record[key];
1360
+ }
1370
1361
  /**
1371
1362
  * Generate from Markdown text
1372
1363
  */
@@ -1381,7 +1372,7 @@ var DocFileMdMetaValue = class _DocFileMdMetaValue {
1381
1372
  }).parse(yamlRecord);
1382
1373
  const schemaFieldKeys = Object.keys(customSchema);
1383
1374
  const factory = new DocCustomSchemaFieldFactory();
1384
- const validatedRecord = {};
1375
+ const validatedRecord = { ...record };
1385
1376
  for (const key of schemaFieldKeys) {
1386
1377
  const schemaField = customSchema[key];
1387
1378
  const customSchemaField = factory.fromType(key, schemaField);
@@ -1408,12 +1399,6 @@ var DocFileMdMetaValue = class _DocFileMdMetaValue {
1408
1399
  }
1409
1400
  return new _DocFileMdMetaValue(record, customSchema);
1410
1401
  }
1411
- toJson() {
1412
- return this.value;
1413
- }
1414
- toYaml() {
1415
- return stringify(this.value).trim();
1416
- }
1417
1402
  };
1418
1403
 
1419
1404
  // lib/values/doc-file-md-content-value.ts
@@ -1714,6 +1699,12 @@ var DocFilePathValue = class _DocFilePathValue {
1714
1699
  get isArchived() {
1715
1700
  return this.path.includes("/.archive/");
1716
1701
  }
1702
+ /**
1703
+ * Export as JSON format
1704
+ */
1705
+ toJson() {
1706
+ return this.value;
1707
+ }
1717
1708
  /**
1718
1709
  * Create instance from relative path (DI support)
1719
1710
  */
@@ -1735,12 +1726,6 @@ var DocFilePathValue = class _DocFilePathValue {
1735
1726
  pathSystem
1736
1727
  );
1737
1728
  }
1738
- /**
1739
- * Export as JSON format
1740
- */
1741
- toJson() {
1742
- return this.value;
1743
- }
1744
1729
  };
1745
1730
 
1746
1731
  // lib/values/doc-relation-file-value.ts
@@ -1770,16 +1755,10 @@ var DocRelationFileValue = class _DocRelationFileValue {
1770
1755
  return this.value.label || this.value.name;
1771
1756
  }
1772
1757
  /**
1773
- * Create from file path and title
1758
+ * Convert to JSON format
1774
1759
  */
1775
- static from(filePath, title) {
1776
- const fileName = _DocRelationFileValue.extractFileName(filePath);
1777
- return new _DocRelationFileValue({
1778
- name: fileName,
1779
- label: title || fileName,
1780
- value: null,
1781
- path: null
1782
- });
1760
+ toJson() {
1761
+ return { ...this.value };
1783
1762
  }
1784
1763
  /**
1785
1764
  * Extract file name from file path (without extension)
@@ -1788,10 +1767,16 @@ var DocRelationFileValue = class _DocRelationFileValue {
1788
1767
  return filePath.split("/").pop()?.replace(".md", "") || filePath;
1789
1768
  }
1790
1769
  /**
1791
- * Convert to JSON format
1770
+ * Create from file path and title
1792
1771
  */
1793
- toJson() {
1794
- return { ...this.value };
1772
+ static from(filePath, title) {
1773
+ const fileName = _DocRelationFileValue.extractFileName(filePath);
1774
+ return new _DocRelationFileValue({
1775
+ name: fileName,
1776
+ label: title || fileName,
1777
+ value: null,
1778
+ path: null
1779
+ });
1795
1780
  }
1796
1781
  };
1797
1782
 
@@ -1809,32 +1794,23 @@ var DocRelationValue = class _DocRelationValue {
1809
1794
  get path() {
1810
1795
  return this.value.path;
1811
1796
  }
1812
- /**
1813
- * List of related files (value objects)
1814
- */
1815
- get files() {
1816
- return this.value.files.map((file) => new DocRelationFileValue(file));
1817
- }
1818
1797
  /**
1819
1798
  * Get file count
1820
1799
  */
1821
1800
  get fileCount() {
1822
- return this.files.length;
1801
+ return this.files().length;
1823
1802
  }
1824
1803
  /**
1825
1804
  * Whether it's empty
1826
1805
  */
1827
1806
  get isEmpty() {
1828
- return this.files.length === 0;
1807
+ return this.files().length === 0;
1829
1808
  }
1830
1809
  /**
1831
- * Create empty relation entity
1810
+ * List of related files (value objects)
1832
1811
  */
1833
- static empty(path) {
1834
- return new _DocRelationValue({
1835
- path,
1836
- files: []
1837
- });
1812
+ files() {
1813
+ return this.value.files.map((file) => new DocRelationFileValue(file));
1838
1814
  }
1839
1815
  /**
1840
1816
  * Export as JSON format
@@ -1842,9 +1818,18 @@ var DocRelationValue = class _DocRelationValue {
1842
1818
  toJson() {
1843
1819
  return {
1844
1820
  path: this.path,
1845
- files: this.files.map((file) => file.toJson())
1821
+ files: this.files().map((file) => file.toJson())
1846
1822
  };
1847
1823
  }
1824
+ /**
1825
+ * Create empty relation entity
1826
+ */
1827
+ static empty(path) {
1828
+ return new _DocRelationValue({
1829
+ path,
1830
+ files: []
1831
+ });
1832
+ }
1848
1833
  };
1849
1834
 
1850
1835
  // lib/doc-file-relation-reference.ts
@@ -1985,6 +1970,10 @@ import { stringify as stringify3 } from "yaml";
1985
1970
  // lib/values/doc-file-index-meta-value.ts
1986
1971
  import { parse as parse2, stringify as stringify2 } from "yaml";
1987
1972
 
1973
+ // lib/constants.ts
1974
+ var INDEX_META = "index-meta";
1975
+ var DOC_NODE_TYPE_DIRECTORY = "directory";
1976
+
1988
1977
  // lib/values/doc-schema-field/doc-schema-field-boolean-value.ts
1989
1978
  var DocSchemaFieldBooleanValue = class _DocSchemaFieldBooleanValue {
1990
1979
  constructor(key, value) {
@@ -2028,11 +2017,11 @@ var DocSchemaFieldBooleanValue = class _DocSchemaFieldBooleanValue {
2028
2017
  default: null
2029
2018
  });
2030
2019
  }
2031
- static normalize(key, record) {
2020
+ static from(key, record) {
2032
2021
  const value = record;
2033
2022
  return new _DocSchemaFieldBooleanValue(key, {
2034
2023
  type: value.type,
2035
- required: value.required,
2024
+ required: value.required ?? false,
2036
2025
  title: value.title ?? null,
2037
2026
  description: value.description ?? null,
2038
2027
  default: value.default ?? null
@@ -2087,11 +2076,11 @@ var DocSchemaFieldMultiNumberValue = class _DocSchemaFieldMultiNumberValue {
2087
2076
  default: null
2088
2077
  });
2089
2078
  }
2090
- static normalize(key, record) {
2079
+ static from(key, record) {
2091
2080
  const value = record;
2092
2081
  return new _DocSchemaFieldMultiNumberValue(key, {
2093
2082
  type: value.type,
2094
- required: value.required,
2083
+ required: value.required ?? false,
2095
2084
  title: value.title ?? null,
2096
2085
  description: value.description ?? null,
2097
2086
  default: value.default ?? null
@@ -2150,11 +2139,11 @@ var DocSchemaFieldMultiRelationValue = class _DocSchemaFieldMultiRelationValue {
2150
2139
  path: ""
2151
2140
  });
2152
2141
  }
2153
- static normalize(key, record) {
2142
+ static from(key, record) {
2154
2143
  const value = record;
2155
2144
  return new _DocSchemaFieldMultiRelationValue(key, {
2156
2145
  type: value.type,
2157
- required: value.required,
2146
+ required: value.required ?? false,
2158
2147
  title: value.title ?? null,
2159
2148
  description: value.description ?? null,
2160
2149
  default: value.default ?? null,
@@ -2216,11 +2205,11 @@ var DocSchemaFieldMultiSelectNumberValue = class _DocSchemaFieldMultiSelectNumbe
2216
2205
  options: []
2217
2206
  });
2218
2207
  }
2219
- static normalize(key, record) {
2208
+ static from(key, record) {
2220
2209
  const value = record;
2221
2210
  return new _DocSchemaFieldMultiSelectNumberValue(key, {
2222
2211
  type: value.type,
2223
- required: value.required,
2212
+ required: value.required ?? false,
2224
2213
  title: value.title ?? null,
2225
2214
  description: value.description ?? null,
2226
2215
  default: value.default ?? null,
@@ -2282,11 +2271,11 @@ var DocSchemaFieldMultiSelectTextValue = class _DocSchemaFieldMultiSelectTextVal
2282
2271
  options: []
2283
2272
  });
2284
2273
  }
2285
- static normalize(key, record) {
2274
+ static from(key, record) {
2286
2275
  const value = record;
2287
2276
  return new _DocSchemaFieldMultiSelectTextValue(key, {
2288
2277
  type: value.type,
2289
- required: value.required,
2278
+ required: value.required ?? false,
2290
2279
  title: value.title ?? null,
2291
2280
  description: value.description ?? null,
2292
2281
  default: value.default ?? null,
@@ -2342,11 +2331,11 @@ var DocSchemaFieldMultiTextValue = class _DocSchemaFieldMultiTextValue {
2342
2331
  default: null
2343
2332
  });
2344
2333
  }
2345
- static normalize(key, record) {
2334
+ static from(key, record) {
2346
2335
  const value = record;
2347
2336
  return new _DocSchemaFieldMultiTextValue(key, {
2348
2337
  type: value.type,
2349
- required: value.required,
2338
+ required: value.required ?? false,
2350
2339
  title: value.title ?? null,
2351
2340
  description: value.description ?? null,
2352
2341
  default: value.default ?? null
@@ -2397,11 +2386,11 @@ var DocSchemaFieldNumberValue = class _DocSchemaFieldNumberValue {
2397
2386
  default: null
2398
2387
  });
2399
2388
  }
2400
- static normalize(key, record) {
2389
+ static from(key, record) {
2401
2390
  const value = record;
2402
2391
  return new _DocSchemaFieldNumberValue(key, {
2403
2392
  type: value.type,
2404
- required: value.required,
2393
+ required: value.required ?? false,
2405
2394
  title: value.title ?? null,
2406
2395
  description: value.description ?? null,
2407
2396
  default: value.default ?? null
@@ -2456,11 +2445,11 @@ var DocSchemaFieldRelationValue = class _DocSchemaFieldRelationValue {
2456
2445
  path: ""
2457
2446
  });
2458
2447
  }
2459
- static normalize(key, record) {
2448
+ static from(key, record) {
2460
2449
  const value = record;
2461
2450
  return new _DocSchemaFieldRelationValue(key, {
2462
2451
  type: value.type,
2463
- required: value.required,
2452
+ required: value.required ?? false,
2464
2453
  title: value.title ?? null,
2465
2454
  description: value.description ?? null,
2466
2455
  default: value.default ?? null,
@@ -2519,11 +2508,11 @@ var DocSchemaFieldSelectNumberValue = class _DocSchemaFieldSelectNumberValue {
2519
2508
  options: []
2520
2509
  });
2521
2510
  }
2522
- static normalize(key, record) {
2511
+ static from(key, record) {
2523
2512
  const value = record;
2524
2513
  return new _DocSchemaFieldSelectNumberValue(key, {
2525
2514
  type: value.type,
2526
- required: value.required,
2515
+ required: value.required ?? false,
2527
2516
  title: value.title ?? null,
2528
2517
  description: value.description ?? null,
2529
2518
  default: value.default ?? null,
@@ -2584,11 +2573,11 @@ var DocSchemaFieldSelectTextValue = class _DocSchemaFieldSelectTextValue {
2584
2573
  options: []
2585
2574
  });
2586
2575
  }
2587
- static normalize(key, record) {
2576
+ static from(key, record) {
2588
2577
  const value = record;
2589
2578
  return new _DocSchemaFieldSelectTextValue(key, {
2590
2579
  type: value.type,
2591
- required: value.required,
2580
+ required: value.required ?? false,
2592
2581
  title: value.title ?? null,
2593
2582
  description: value.description ?? null,
2594
2583
  default: value.default ?? null,
@@ -2640,11 +2629,11 @@ var DocSchemaFieldTextValue = class _DocSchemaFieldTextValue {
2640
2629
  default: null
2641
2630
  });
2642
2631
  }
2643
- static normalize(key, record) {
2632
+ static from(key, record) {
2644
2633
  const value = record;
2645
2634
  return new _DocSchemaFieldTextValue(key, {
2646
2635
  type: value.type,
2647
- required: value.required,
2636
+ required: value.required ?? false,
2648
2637
  title: value.title ?? null,
2649
2638
  description: value.description ?? null,
2650
2639
  default: value.default ?? null
@@ -2690,41 +2679,41 @@ var DocFileIndexSchemaFieldFactory = class {
2690
2679
  }
2691
2680
  throw new Error(`Unknown field type: ${type}`);
2692
2681
  }
2693
- normalize(key, record) {
2682
+ from(key, record) {
2694
2683
  const value = record;
2695
2684
  const type = value.type;
2696
2685
  if (type === "text") {
2697
- return DocSchemaFieldTextValue.normalize(key, record);
2686
+ return DocSchemaFieldTextValue.from(key, record);
2698
2687
  }
2699
2688
  if (type === "number") {
2700
- return DocSchemaFieldNumberValue.normalize(key, record);
2689
+ return DocSchemaFieldNumberValue.from(key, record);
2701
2690
  }
2702
2691
  if (type === "boolean") {
2703
- return DocSchemaFieldBooleanValue.normalize(key, record);
2692
+ return DocSchemaFieldBooleanValue.from(key, record);
2704
2693
  }
2705
2694
  if (type === "select-text") {
2706
- return DocSchemaFieldSelectTextValue.normalize(key, record);
2695
+ return DocSchemaFieldSelectTextValue.from(key, record);
2707
2696
  }
2708
2697
  if (type === "select-number") {
2709
- return DocSchemaFieldSelectNumberValue.normalize(key, record);
2698
+ return DocSchemaFieldSelectNumberValue.from(key, record);
2710
2699
  }
2711
2700
  if (type === "relation") {
2712
- return DocSchemaFieldRelationValue.normalize(key, record);
2701
+ return DocSchemaFieldRelationValue.from(key, record);
2713
2702
  }
2714
2703
  if (type === "multi-text") {
2715
- return DocSchemaFieldMultiTextValue.normalize(key, record);
2704
+ return DocSchemaFieldMultiTextValue.from(key, record);
2716
2705
  }
2717
2706
  if (type === "multi-number") {
2718
- return DocSchemaFieldMultiNumberValue.normalize(key, record);
2707
+ return DocSchemaFieldMultiNumberValue.from(key, record);
2719
2708
  }
2720
2709
  if (type === "multi-select-text") {
2721
- return DocSchemaFieldMultiSelectTextValue.normalize(key, record);
2710
+ return DocSchemaFieldMultiSelectTextValue.from(key, record);
2722
2711
  }
2723
2712
  if (type === "multi-select-number") {
2724
- return DocSchemaFieldMultiSelectNumberValue.normalize(key, record);
2713
+ return DocSchemaFieldMultiSelectNumberValue.from(key, record);
2725
2714
  }
2726
2715
  if (type === "multi-relation") {
2727
- return DocSchemaFieldMultiRelationValue.normalize(key, record);
2716
+ return DocSchemaFieldMultiRelationValue.from(key, record);
2728
2717
  }
2729
2718
  throw new Error(`Unknown field type: ${type}`);
2730
2719
  }
@@ -2755,35 +2744,40 @@ var DocFileIndexSchemaValue = class _DocFileIndexSchemaValue {
2755
2744
  if (!fieldValue) {
2756
2745
  throw new Error(`Field "${key}" not found in schema`);
2757
2746
  }
2758
- switch (fieldValue.type) {
2759
- case "text":
2760
- return new DocSchemaFieldTextValue(key, fieldValue);
2761
- case "number":
2762
- return new DocSchemaFieldNumberValue(key, fieldValue);
2763
- case "boolean":
2764
- return new DocSchemaFieldBooleanValue(key, fieldValue);
2765
- case "relation":
2766
- return new DocSchemaFieldRelationValue(key, fieldValue);
2767
- case "select-text":
2768
- return new DocSchemaFieldSelectTextValue(key, fieldValue);
2769
- case "select-number":
2770
- return new DocSchemaFieldSelectNumberValue(key, fieldValue);
2771
- case "multi-text":
2772
- return new DocSchemaFieldMultiTextValue(key, fieldValue);
2773
- case "multi-number":
2774
- return new DocSchemaFieldMultiNumberValue(key, fieldValue);
2775
- case "multi-relation":
2776
- return new DocSchemaFieldMultiRelationValue(key, fieldValue);
2777
- case "multi-select-text":
2778
- return new DocSchemaFieldMultiSelectTextValue(key, fieldValue);
2779
- case "multi-select-number":
2780
- return new DocSchemaFieldMultiSelectNumberValue(
2781
- key,
2782
- fieldValue
2783
- );
2784
- default:
2785
- throw new Error("Unknown field type");
2747
+ if (fieldValue.type === "text") {
2748
+ return new DocSchemaFieldTextValue(key, fieldValue);
2749
+ }
2750
+ if (fieldValue.type === "number") {
2751
+ return new DocSchemaFieldNumberValue(key, fieldValue);
2786
2752
  }
2753
+ if (fieldValue.type === "boolean") {
2754
+ return new DocSchemaFieldBooleanValue(key, fieldValue);
2755
+ }
2756
+ if (fieldValue.type === "relation") {
2757
+ return new DocSchemaFieldRelationValue(key, fieldValue);
2758
+ }
2759
+ if (fieldValue.type === "select-text") {
2760
+ return new DocSchemaFieldSelectTextValue(key, fieldValue);
2761
+ }
2762
+ if (fieldValue.type === "select-number") {
2763
+ return new DocSchemaFieldSelectNumberValue(key, fieldValue);
2764
+ }
2765
+ if (fieldValue.type === "multi-text") {
2766
+ return new DocSchemaFieldMultiTextValue(key, fieldValue);
2767
+ }
2768
+ if (fieldValue.type === "multi-number") {
2769
+ return new DocSchemaFieldMultiNumberValue(key, fieldValue);
2770
+ }
2771
+ if (fieldValue.type === "multi-relation") {
2772
+ return new DocSchemaFieldMultiRelationValue(key, fieldValue);
2773
+ }
2774
+ if (fieldValue.type === "multi-select-text") {
2775
+ return new DocSchemaFieldMultiSelectTextValue(key, fieldValue);
2776
+ }
2777
+ if (fieldValue.type === "multi-select-number") {
2778
+ return new DocSchemaFieldMultiSelectNumberValue(key, fieldValue);
2779
+ }
2780
+ throw new Error("Unknown field type");
2787
2781
  }
2788
2782
  relation(key) {
2789
2783
  const fieldValue = this.value[key];
@@ -2805,24 +2799,6 @@ var DocFileIndexSchemaValue = class _DocFileIndexSchemaValue {
2805
2799
  }
2806
2800
  return new DocSchemaFieldMultiRelationValue(key, fieldValue);
2807
2801
  }
2808
- /**
2809
- * Get all fields
2810
- * Note: For type safety, it's recommended to use field() method individually
2811
- */
2812
- get fields() {
2813
- return this.fieldNames.map((name) => {
2814
- const value = this.value[name];
2815
- if (value === void 0) {
2816
- throw new Error(`Field "${name}" does not exist in schema.`);
2817
- }
2818
- return this.value[name];
2819
- });
2820
- }
2821
- get relationFields() {
2822
- return this.fields.filter((t) => {
2823
- return t instanceof DocSchemaFieldRelationValue || t instanceof DocSchemaFieldMultiRelationValue;
2824
- });
2825
- }
2826
2802
  toJson() {
2827
2803
  return this.value;
2828
2804
  }
@@ -2841,14 +2817,10 @@ var DocFileIndexMetaValue = class _DocFileIndexMetaValue {
2841
2817
  this.value = value;
2842
2818
  this.customSchema = customSchema;
2843
2819
  this.config = config;
2844
- zDocFileIndexMeta.parse(value);
2845
2820
  this.additionalProperties = additionalProperties;
2821
+ zDocFileIndexMeta.parse(value);
2846
2822
  Object.freeze(this);
2847
2823
  }
2848
- /**
2849
- * Additional properties to include in the meta data
2850
- */
2851
- additionalProperties;
2852
2824
  /**
2853
2825
  * Get icon
2854
2826
  */
@@ -2871,9 +2843,8 @@ var DocFileIndexMetaValue = class _DocFileIndexMetaValue {
2871
2843
  * Update icon field
2872
2844
  */
2873
2845
  withIcon(value) {
2874
- const currentData = this.toJson();
2875
2846
  return new _DocFileIndexMetaValue(
2876
- { ...currentData, icon: value },
2847
+ { ...this.value, icon: value },
2877
2848
  this.customSchema,
2878
2849
  this.config,
2879
2850
  this.additionalProperties
@@ -2884,10 +2855,7 @@ var DocFileIndexMetaValue = class _DocFileIndexMetaValue {
2884
2855
  */
2885
2856
  withSchema(value) {
2886
2857
  return new _DocFileIndexMetaValue(
2887
- {
2888
- ...this.value,
2889
- schema: value
2890
- },
2858
+ { ...this.value, schema: value },
2891
2859
  this.customSchema,
2892
2860
  this.config,
2893
2861
  this.additionalProperties
@@ -2901,7 +2869,7 @@ var DocFileIndexMetaValue = class _DocFileIndexMetaValue {
2901
2869
  const typedSchema = draft;
2902
2870
  return new _DocFileIndexMetaValue(
2903
2871
  {
2904
- type: "index-meta",
2872
+ type: INDEX_META,
2905
2873
  icon: this.value.icon,
2906
2874
  schema: typedSchema
2907
2875
  },
@@ -3013,13 +2981,32 @@ var DocFileIndexMetaValue = class _DocFileIndexMetaValue {
3013
2981
  * Normalize entire schema
3014
2982
  */
3015
2983
  static normalizeSchema(schema, customSchema) {
2984
+ const factory = new DocFileIndexSchemaFieldFactory();
2985
+ if (Object.keys(customSchema).length === 0) {
2986
+ const dynamicRecord = {};
2987
+ for (const key of Object.keys(schema)) {
2988
+ const schemaValue = schema[key];
2989
+ if (schemaValue !== void 0 && schemaValue !== null) {
2990
+ const field = factory.from(key, schemaValue);
2991
+ const normalizedValue = {
2992
+ ...field.value,
2993
+ required: field.value.required ?? false
2994
+ };
2995
+ dynamicRecord[key] = normalizedValue;
2996
+ }
2997
+ }
2998
+ return dynamicRecord;
2999
+ }
3016
3000
  const record = {};
3017
3001
  const customSchemaKeys = Object.keys(customSchema);
3018
- const factory = new DocFileIndexSchemaFieldFactory();
3019
3002
  for (const key of customSchemaKeys) {
3020
3003
  const schemaValue = schema[key];
3021
- const field = factory.normalize(key, schemaValue);
3022
- record[key] = field.value;
3004
+ const field = factory.from(key, schemaValue);
3005
+ const normalizedValue = {
3006
+ ...field.value,
3007
+ required: field.value.required ?? false
3008
+ };
3009
+ record[key] = normalizedValue;
3023
3010
  }
3024
3011
  return record;
3025
3012
  }
@@ -3030,7 +3017,11 @@ var DocFileIndexMetaValue = class _DocFileIndexMetaValue {
3030
3017
  for (const key of customSchemaKeys) {
3031
3018
  const field = customSchema[key];
3032
3019
  const customSchemaField = factory.empty(key, field.type);
3033
- record[key] = customSchemaField.value;
3020
+ const normalizedValue = {
3021
+ ...customSchemaField.value,
3022
+ required: customSchemaField.value.required ?? false
3023
+ };
3024
+ record[key] = normalizedValue;
3034
3025
  }
3035
3026
  return record;
3036
3027
  }
@@ -3205,7 +3196,12 @@ ${this.toMarkdownText()}`;
3205
3196
  * Output in JSON format
3206
3197
  */
3207
3198
  toJson() {
3208
- return this.value;
3199
+ const metaValue = this.meta();
3200
+ const metaJson = metaValue.toJson();
3201
+ return {
3202
+ ...this.value,
3203
+ meta: metaJson
3204
+ };
3209
3205
  }
3210
3206
  };
3211
3207
 
@@ -3340,6 +3336,13 @@ var DocFileIndexReference = class _DocFileIndexReference {
3340
3336
  this.customSchema
3341
3337
  );
3342
3338
  }
3339
+ async readSchemaValue() {
3340
+ const indexFile = await this.read();
3341
+ if (indexFile instanceof Error) {
3342
+ return {};
3343
+ }
3344
+ return indexFile.content.meta().schema().value;
3345
+ }
3343
3346
  /**
3344
3347
  * Read file content
3345
3348
  */
@@ -4408,13 +4411,6 @@ var DocDirectoryReference = class _DocDirectoryReference {
4408
4411
  async exists() {
4409
4412
  return await this.fileSystem.exists(this.relativePath);
4410
4413
  }
4411
- /**
4412
- * Generate unique filename
4413
- */
4414
- uniqueFileName(prefix = "document") {
4415
- const [uuid] = crypto.randomUUID().split("-");
4416
- return `${prefix}-${uuid}.md`;
4417
- }
4418
4414
  /**
4419
4415
  * Create new Markdown file
4420
4416
  */
@@ -4435,6 +4431,13 @@ var DocDirectoryReference = class _DocDirectoryReference {
4435
4431
  }
4436
4432
  return fileRef;
4437
4433
  }
4434
+ /**
4435
+ * Generate unique filename
4436
+ */
4437
+ uniqueFileName(prefix = "document") {
4438
+ const [uuid] = crypto.randomUUID().split("-");
4439
+ return `${prefix}-${uuid}.md`;
4440
+ }
4438
4441
  };
4439
4442
 
4440
4443
  // lib/values/doc-tree-file-node-value.ts
@@ -4514,7 +4517,7 @@ var DocTreeDirectoryNodeValue = class _DocTreeDirectoryNodeValue {
4514
4517
  return this.props.children;
4515
4518
  }
4516
4519
  get type() {
4517
- return "directory";
4520
+ return DOC_NODE_TYPE_DIRECTORY;
4518
4521
  }
4519
4522
  /**
4520
4523
  * Convert to plain object
@@ -4523,7 +4526,7 @@ var DocTreeDirectoryNodeValue = class _DocTreeDirectoryNodeValue {
4523
4526
  return {
4524
4527
  name: this.name,
4525
4528
  path: this.path,
4526
- type: "directory",
4529
+ type: DOC_NODE_TYPE_DIRECTORY,
4527
4530
  icon: this.icon,
4528
4531
  title: this.title,
4529
4532
  children: this.children.map((child) => child.toJson())
@@ -5867,13 +5870,381 @@ var docCustomSchemaField = {
5867
5870
  };
5868
5871
  }
5869
5872
  };
5873
+
5874
+ // lib/values/doc-custom-schema-field-value.ts
5875
+ var DocCustomSchemaFieldValue = class {
5876
+ constructor(value) {
5877
+ this.value = value;
5878
+ zDocCustomSchemaField.parse(value);
5879
+ Object.freeze(this);
5880
+ }
5881
+ validate(value) {
5882
+ if (this.value.type === "text") {
5883
+ try {
5884
+ return zDocMetaFieldText.parse(value);
5885
+ } catch {
5886
+ if (this.value.required) {
5887
+ return DocMetaFieldTextValue.defaultValue();
5888
+ }
5889
+ return null;
5890
+ }
5891
+ }
5892
+ if (this.value.type === "number") {
5893
+ try {
5894
+ return zDocMetaFieldNumber.parse(value);
5895
+ } catch {
5896
+ if (this.value.required) {
5897
+ return DocMetaFieldNumberValue.defaultValue();
5898
+ }
5899
+ return null;
5900
+ }
5901
+ }
5902
+ if (this.value.type === "boolean") {
5903
+ try {
5904
+ return zDocMetaFieldBoolean.parse(value);
5905
+ } catch {
5906
+ if (this.value.required) {
5907
+ return DocMetaFieldBooleanValue.defaultValue();
5908
+ }
5909
+ return null;
5910
+ }
5911
+ }
5912
+ if (this.value.type === "select-text") {
5913
+ try {
5914
+ return zDocMetaFieldSelectText.parse(value);
5915
+ } catch {
5916
+ if (this.value.required) {
5917
+ return DocMetaFieldSelectTextValue.defaultValue();
5918
+ }
5919
+ return null;
5920
+ }
5921
+ }
5922
+ if (this.value.type === "select-number") {
5923
+ try {
5924
+ return zDocMetaFieldSelectNumber.parse(value);
5925
+ } catch {
5926
+ if (this.value.required) {
5927
+ return DocMetaFieldSelectNumberValue.defaultValue();
5928
+ }
5929
+ return null;
5930
+ }
5931
+ }
5932
+ if (this.value.type === "relation") {
5933
+ try {
5934
+ return zDocMetaFieldRelation.parse(value);
5935
+ } catch {
5936
+ if (this.value.required) {
5937
+ return DocMetaFieldRelationValue.defaultValue();
5938
+ }
5939
+ return null;
5940
+ }
5941
+ }
5942
+ if (this.value.type === "multi-text") {
5943
+ try {
5944
+ return zDocMetaFieldMultiText.parse(value);
5945
+ } catch {
5946
+ if (this.value.required) {
5947
+ return DocMetaFieldMultiTextValue.defaultValue();
5948
+ }
5949
+ return null;
5950
+ }
5951
+ }
5952
+ if (this.value.type === "multi-number") {
5953
+ try {
5954
+ return zDocMetaFieldMultiNumber.parse(value);
5955
+ } catch {
5956
+ if (this.value.required) {
5957
+ return DocMetaFieldMultiNumberValue.defaultValue();
5958
+ }
5959
+ return null;
5960
+ }
5961
+ }
5962
+ if (this.value.type === "multi-select-text") {
5963
+ try {
5964
+ return zDocMetaFieldMultiSelectText.parse(value);
5965
+ } catch {
5966
+ if (this.value.required) {
5967
+ return DocMetaFieldMultiSelectTextValue.defaultValue();
5968
+ }
5969
+ return null;
5970
+ }
5971
+ }
5972
+ if (this.value.type === "multi-select-number") {
5973
+ try {
5974
+ return zDocMetaFieldMultiSelectNumber.parse(value);
5975
+ } catch {
5976
+ if (this.value.required) {
5977
+ return DocMetaFieldMultiSelectNumberValue.defaultValue();
5978
+ }
5979
+ return null;
5980
+ }
5981
+ }
5982
+ if (this.value.type === "multi-relation") {
5983
+ try {
5984
+ return zDocMetaFieldMultiRelation.parse(value);
5985
+ } catch {
5986
+ if (this.value.required) {
5987
+ return DocMetaFieldMultiRelationValue.defaultValue();
5988
+ }
5989
+ return null;
5990
+ }
5991
+ }
5992
+ throw new Error("Unknown field type");
5993
+ }
5994
+ };
5995
+
5996
+ // lib/values/doc-directory-path-value.ts
5997
+ var DocDirectoryPathValue = class _DocDirectoryPathValue {
5998
+ constructor(value, pathSystem) {
5999
+ this.value = value;
6000
+ this.pathSystem = pathSystem;
6001
+ Object.freeze(this);
6002
+ }
6003
+ /**
6004
+ * Relative directory path
6005
+ */
6006
+ get path() {
6007
+ return this.value.path;
6008
+ }
6009
+ /**
6010
+ * Directory name
6011
+ */
6012
+ get name() {
6013
+ return this.value.name;
6014
+ }
6015
+ /**
6016
+ * Get parent directory path
6017
+ */
6018
+ get parent() {
6019
+ if (this.path === "." || this.path === "") {
6020
+ return null;
6021
+ }
6022
+ const parentPath = this.pathSystem.dirname(this.path);
6023
+ const parentName = parentPath === "." ? "" : this.pathSystem.basename(parentPath);
6024
+ return new _DocDirectoryPathValue(
6025
+ {
6026
+ path: parentPath,
6027
+ name: parentName,
6028
+ fullPath: this.pathSystem.dirname(this.fullPath)
6029
+ },
6030
+ this.pathSystem
6031
+ );
6032
+ }
6033
+ /**
6034
+ * Parent directory path
6035
+ */
6036
+ get parentPath() {
6037
+ return this.pathSystem.dirname(this.path);
6038
+ }
6039
+ /**
6040
+ * Depth (number of directory levels)
6041
+ */
6042
+ get depth() {
6043
+ if (this.path === "." || this.path === "") {
6044
+ return 0;
6045
+ }
6046
+ return this.path.split(this.pathSystem.separator).filter(Boolean).length;
6047
+ }
6048
+ /**
6049
+ * Path segments (array of directories)
6050
+ */
6051
+ get segments() {
6052
+ return this.path.split(this.pathSystem.separator).filter(Boolean);
6053
+ }
6054
+ /**
6055
+ * Relative path from root (without leading slash)
6056
+ */
6057
+ get normalizedPath() {
6058
+ return this.path.replace(/^\/+/, "");
6059
+ }
6060
+ /**
6061
+ * Whether this is an archive directory (directory name is "_")
6062
+ */
6063
+ get isArchived() {
6064
+ return this.name === "_";
6065
+ }
6066
+ /**
6067
+ * Whether this is a hidden directory
6068
+ */
6069
+ get isHidden() {
6070
+ return this.name.startsWith(".");
6071
+ }
6072
+ /**
6073
+ * Whether this is the root directory
6074
+ */
6075
+ get isRoot() {
6076
+ return this.path === "." || this.path === "";
6077
+ }
6078
+ /**
6079
+ * Absolute path
6080
+ */
6081
+ get fullPath() {
6082
+ return this.value.fullPath;
6083
+ }
6084
+ /**
6085
+ * Get index file path
6086
+ */
6087
+ get indexFile() {
6088
+ return DocFilePathValue.fromPathWithSystem(
6089
+ this.pathSystem.join(this.path, "index.md"),
6090
+ this.pathSystem,
6091
+ this.pathSystem.dirname(this.fullPath)
6092
+ );
6093
+ }
6094
+ /**
6095
+ * Create file path
6096
+ */
6097
+ file(fileName) {
6098
+ return DocFilePathValue.fromPathWithSystem(
6099
+ this.pathSystem.join(this.path, fileName),
6100
+ this.pathSystem,
6101
+ this.pathSystem.dirname(this.fullPath)
6102
+ );
6103
+ }
6104
+ /**
6105
+ * Create subdirectory path
6106
+ */
6107
+ subdirectory(dirName) {
6108
+ const subPath = this.pathSystem.join(this.path, dirName);
6109
+ return new _DocDirectoryPathValue(
6110
+ {
6111
+ path: subPath,
6112
+ name: dirName,
6113
+ fullPath: this.pathSystem.join(this.fullPath, dirName)
6114
+ },
6115
+ this.pathSystem
6116
+ );
6117
+ }
6118
+ /**
6119
+ * Create instance from relative path (DI support)
6120
+ */
6121
+ static fromPathWithSystem(dirPath, basePath, pathSystem) {
6122
+ const name = dirPath === "." ? "" : pathSystem.basename(dirPath);
6123
+ const fullPath = dirPath === "." ? basePath : pathSystem.join(basePath, dirPath);
6124
+ return new _DocDirectoryPathValue(
6125
+ {
6126
+ path: dirPath,
6127
+ name,
6128
+ fullPath
6129
+ },
6130
+ pathSystem
6131
+ );
6132
+ }
6133
+ /**
6134
+ * Export as JSON format
6135
+ */
6136
+ toJson() {
6137
+ return this.value;
6138
+ }
6139
+ /**
6140
+ * Check if paths are equal
6141
+ */
6142
+ equals(other) {
6143
+ return this.path === other.path;
6144
+ }
6145
+ /**
6146
+ * Check if specified directory is a descendant of this directory
6147
+ */
6148
+ contains(other) {
6149
+ const relative = this.pathSystem.relative(this.path, other.path);
6150
+ return !relative.startsWith("..") && relative !== "";
6151
+ }
6152
+ };
6153
+
6154
+ // lib/values/doc-relation-field-value.ts
6155
+ var DocRelationFieldValue = class _DocRelationFieldValue {
6156
+ constructor(value) {
6157
+ this.value = value;
6158
+ zDocRelationField.parse(value);
6159
+ Object.freeze(this);
6160
+ }
6161
+ /**
6162
+ * Get field name
6163
+ */
6164
+ get fieldName() {
6165
+ return this.value.fieldName;
6166
+ }
6167
+ /**
6168
+ * Get relation target path
6169
+ */
6170
+ get relationPath() {
6171
+ return this.value.filePath;
6172
+ }
6173
+ /**
6174
+ * Get whether it's an array type
6175
+ */
6176
+ get isArray() {
6177
+ return this.value.isArray;
6178
+ }
6179
+ /**
6180
+ * Check if it's a single relation
6181
+ */
6182
+ get isSingle() {
6183
+ return !this.value.isArray;
6184
+ }
6185
+ /**
6186
+ * Check if it's a multiple relation
6187
+ */
6188
+ get isMultiple() {
6189
+ return this.value.isArray;
6190
+ }
6191
+ /**
6192
+ * Get target directory name
6193
+ */
6194
+ get targetDirectoryName() {
6195
+ const parts = this.value.filePath.split("/");
6196
+ return parts[parts.length - 1] || "";
6197
+ }
6198
+ /**
6199
+ * Generate full relation path
6200
+ */
6201
+ fullPath(basePath) {
6202
+ if (this.value.filePath.startsWith("/")) {
6203
+ return this.value.filePath;
6204
+ }
6205
+ return `${basePath}/${this.value.filePath}`;
6206
+ }
6207
+ /**
6208
+ * Check equality
6209
+ */
6210
+ equals(other) {
6211
+ return this.fieldName === other.fieldName && this.relationPath === other.relationPath && this.isArray === other.isArray;
6212
+ }
6213
+ /**
6214
+ * Convert to JSON format
6215
+ */
6216
+ toJson() {
6217
+ return { ...this.value };
6218
+ }
6219
+ /**
6220
+ * Create from data
6221
+ */
6222
+ static from(data) {
6223
+ const validated = zDocRelationField.parse(data);
6224
+ return new _DocRelationFieldValue(validated);
6225
+ }
6226
+ /**
6227
+ * Create from properties
6228
+ */
6229
+ static fromProps(props) {
6230
+ return new _DocRelationFieldValue(props);
6231
+ }
6232
+ };
5870
6233
  export {
5871
6234
  DocClient,
6235
+ DocCustomSchemaFieldValue,
6236
+ DocDirectoryPathValue,
5872
6237
  DocDirectoryReference,
6238
+ DocFileIndexContentValue,
5873
6239
  DocFileIndexEntity,
6240
+ DocFileIndexMetaValue,
5874
6241
  DocFileIndexReference,
6242
+ DocFileIndexSchemaValue,
6243
+ DocFileMdContentValue,
5875
6244
  DocFileMdEntity,
6245
+ DocFileMdMetaValue,
5876
6246
  DocFileMdReference,
6247
+ DocFilePathValue,
5877
6248
  DocFileRelationReference,
5878
6249
  DocFileSystem,
5879
6250
  DocFileSystemMock,
@@ -5883,7 +6254,12 @@ export {
5883
6254
  DocMarkdownSystem,
5884
6255
  DocPathSystem,
5885
6256
  DocPathSystemMock,
6257
+ DocRelationFieldValue,
6258
+ DocRelationFileValue,
6259
+ DocRelationValue,
5886
6260
  DocSchemaBuilder,
6261
+ DocTreeDirectoryNodeValue,
6262
+ DocTreeFileNodeValue,
5887
6263
  assertType,
5888
6264
  defaultTestConfig,
5889
6265
  defineSchema,