@tinacms/mdx 1.3.23 → 1.3.24

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.
@@ -38352,12 +38352,17 @@ function stringifyProps(element2, parentField, flatten2, imageCallback) {
38352
38352
  }
38353
38353
  break;
38354
38354
  case "object":
38355
+ const result = findAndTransformNestedRichText(
38356
+ field,
38357
+ value,
38358
+ imageCallback
38359
+ );
38355
38360
  attributes2.push({
38356
38361
  type: "mdxJsxAttribute",
38357
38362
  name: name2,
38358
38363
  value: {
38359
38364
  type: "mdxJsxAttributeValueExpression",
38360
- value: stringifyObj(value, flatten2)
38365
+ value: stringifyObj(result, flatten2)
38361
38366
  }
38362
38367
  });
38363
38368
  break;
@@ -38463,6 +38468,61 @@ function assertShape(value, callback, errorMessage) {
38463
38468
  function isPlainObject2(value) {
38464
38469
  return typeof value === "object" && value !== null && !Array.isArray(value);
38465
38470
  }
38471
+ var findAndTransformNestedRichText = (field, value, imageCallback, parentValue = {}) => {
38472
+ switch (field.type) {
38473
+ case "rich-text": {
38474
+ assertShape(
38475
+ value,
38476
+ (value2) => value2.type === "root" && Array.isArray(value2.children),
38477
+ `Nested rich-text element is not a valid shape for field ${field.name}`
38478
+ );
38479
+ parentValue[field.name] = stringifyMDX(value, field, imageCallback);
38480
+ break;
38481
+ }
38482
+ case "object": {
38483
+ if (field.list) {
38484
+ if (Array.isArray(value)) {
38485
+ value.forEach((item) => {
38486
+ Object.entries(item).forEach(([key, subValue]) => {
38487
+ if (field.fields) {
38488
+ const subField = field.fields.find(({ name: name2 }) => name2 === key);
38489
+ if (subField) {
38490
+ findAndTransformNestedRichText(
38491
+ subField,
38492
+ subValue,
38493
+ imageCallback,
38494
+ item
38495
+ );
38496
+ }
38497
+ }
38498
+ });
38499
+ });
38500
+ }
38501
+ } else {
38502
+ if (isObject(value)) {
38503
+ Object.entries(value).forEach(([key, subValue]) => {
38504
+ if (field.fields) {
38505
+ const subField = field.fields.find(({ name: name2 }) => name2 === key);
38506
+ if (subField) {
38507
+ findAndTransformNestedRichText(
38508
+ subField,
38509
+ subValue,
38510
+ imageCallback,
38511
+ value
38512
+ );
38513
+ }
38514
+ }
38515
+ });
38516
+ }
38517
+ }
38518
+ break;
38519
+ }
38520
+ }
38521
+ return value;
38522
+ };
38523
+ function isObject(value) {
38524
+ return typeof value === "object" && value !== null && !Array.isArray(value);
38525
+ }
38466
38526
 
38467
38527
  // src/stringify/marks.ts
38468
38528
  var matches = (a, b) => {
@@ -46649,7 +46709,7 @@ var extractAttribute = (attribute, field, imageCallback) => {
46649
46709
  return extractString(attribute, field);
46650
46710
  }
46651
46711
  case "object":
46652
- return extractObject(extractExpression(attribute), field);
46712
+ return extractObject(extractExpression(attribute), field, imageCallback);
46653
46713
  case "rich-text":
46654
46714
  const JSXString = extractRaw(attribute);
46655
46715
  if (JSXString) {
@@ -46674,24 +46734,24 @@ var extractScalar = (attribute, field) => {
46674
46734
  return attribute.expression.value;
46675
46735
  }
46676
46736
  };
46677
- var extractObject = (attribute, field) => {
46737
+ var extractObject = (attribute, field, imageCallback) => {
46678
46738
  if (field.list) {
46679
46739
  assertType(attribute.expression, "ArrayExpression");
46680
46740
  return attribute.expression.elements.map((element2) => {
46681
46741
  assertHasType(element2);
46682
46742
  assertType(element2, "ObjectExpression");
46683
- return extractObjectExpression(element2, field);
46743
+ return extractObjectExpression(element2, field, imageCallback);
46684
46744
  });
46685
46745
  } else {
46686
46746
  assertType(attribute.expression, "ObjectExpression");
46687
- return extractObjectExpression(attribute.expression, field);
46747
+ return extractObjectExpression(attribute.expression, field, imageCallback);
46688
46748
  }
46689
46749
  };
46690
- var extractObjectExpression = (expression, field) => {
46750
+ var extractObjectExpression = (expression, field, imageCallback) => {
46691
46751
  const properties = {};
46692
46752
  expression.properties?.forEach((property) => {
46693
46753
  assertType(property, "Property");
46694
- const { key, value } = extractKeyValue(property, field);
46754
+ const { key, value } = extractKeyValue(property, field, imageCallback);
46695
46755
  properties[key] = value;
46696
46756
  });
46697
46757
  return properties;
@@ -46704,7 +46764,7 @@ var getField = (objectField, name2) => {
46704
46764
  return objectField.fields.find((f) => f.name === name2);
46705
46765
  }
46706
46766
  };
46707
- var extractKeyValue = (property, parentField) => {
46767
+ var extractKeyValue = (property, parentField, imageCallback) => {
46708
46768
  assertType(property.key, "Identifier");
46709
46769
  const key = property.key.name;
46710
46770
  const field = getField(parentField, key);
@@ -46714,12 +46774,16 @@ var extractKeyValue = (property, parentField) => {
46714
46774
  const value = property.value.elements.map((element2) => {
46715
46775
  assertHasType(element2);
46716
46776
  assertType(element2, "ObjectExpression");
46717
- return extractObjectExpression(element2, field);
46777
+ return extractObjectExpression(element2, field, imageCallback);
46718
46778
  });
46719
46779
  return { key, value };
46720
46780
  } else {
46721
46781
  assertType(property.value, "ObjectExpression");
46722
- const value = extractObjectExpression(property.value, field);
46782
+ const value = extractObjectExpression(
46783
+ property.value,
46784
+ field,
46785
+ imageCallback
46786
+ );
46723
46787
  return { key, value };
46724
46788
  }
46725
46789
  } else if (field?.list) {
@@ -46730,6 +46794,13 @@ var extractKeyValue = (property, parentField) => {
46730
46794
  return element2.value;
46731
46795
  });
46732
46796
  return { key, value };
46797
+ } else if (field?.type === "rich-text") {
46798
+ assertType(property.value, "Literal");
46799
+ const raw = property.value.value;
46800
+ if (typeof raw === "string") {
46801
+ return { key, value: parseMDX(raw, field, imageCallback) };
46802
+ }
46803
+ throw new Error(`Unable to parse rich-text`);
46733
46804
  } else {
46734
46805
  assertType(property.value, "Literal");
46735
46806
  return { key, value: property.value.value };
package/dist/index.js CHANGED
@@ -40236,12 +40236,17 @@ function stringifyProps(element, parentField, flatten2, imageCallback) {
40236
40236
  }
40237
40237
  break;
40238
40238
  case "object":
40239
+ const result = findAndTransformNestedRichText(
40240
+ field,
40241
+ value,
40242
+ imageCallback
40243
+ );
40239
40244
  attributes2.push({
40240
40245
  type: "mdxJsxAttribute",
40241
40246
  name: name2,
40242
40247
  value: {
40243
40248
  type: "mdxJsxAttributeValueExpression",
40244
- value: stringifyObj(value, flatten2)
40249
+ value: stringifyObj(result, flatten2)
40245
40250
  }
40246
40251
  });
40247
40252
  break;
@@ -40347,6 +40352,61 @@ function assertShape(value, callback, errorMessage) {
40347
40352
  function isPlainObject2(value) {
40348
40353
  return typeof value === "object" && value !== null && !Array.isArray(value);
40349
40354
  }
40355
+ var findAndTransformNestedRichText = (field, value, imageCallback, parentValue = {}) => {
40356
+ switch (field.type) {
40357
+ case "rich-text": {
40358
+ assertShape(
40359
+ value,
40360
+ (value2) => value2.type === "root" && Array.isArray(value2.children),
40361
+ `Nested rich-text element is not a valid shape for field ${field.name}`
40362
+ );
40363
+ parentValue[field.name] = stringifyMDX(value, field, imageCallback);
40364
+ break;
40365
+ }
40366
+ case "object": {
40367
+ if (field.list) {
40368
+ if (Array.isArray(value)) {
40369
+ value.forEach((item) => {
40370
+ Object.entries(item).forEach(([key, subValue]) => {
40371
+ if (field.fields) {
40372
+ const subField = field.fields.find(({ name: name2 }) => name2 === key);
40373
+ if (subField) {
40374
+ findAndTransformNestedRichText(
40375
+ subField,
40376
+ subValue,
40377
+ imageCallback,
40378
+ item
40379
+ );
40380
+ }
40381
+ }
40382
+ });
40383
+ });
40384
+ }
40385
+ } else {
40386
+ if (isObject(value)) {
40387
+ Object.entries(value).forEach(([key, subValue]) => {
40388
+ if (field.fields) {
40389
+ const subField = field.fields.find(({ name: name2 }) => name2 === key);
40390
+ if (subField) {
40391
+ findAndTransformNestedRichText(
40392
+ subField,
40393
+ subValue,
40394
+ imageCallback,
40395
+ value
40396
+ );
40397
+ }
40398
+ }
40399
+ });
40400
+ }
40401
+ }
40402
+ break;
40403
+ }
40404
+ }
40405
+ return value;
40406
+ };
40407
+ function isObject(value) {
40408
+ return typeof value === "object" && value !== null && !Array.isArray(value);
40409
+ }
40350
40410
 
40351
40411
  // src/stringify/marks.ts
40352
40412
  var matches = (a, b) => {
@@ -48546,7 +48606,7 @@ var extractAttribute = (attribute, field, imageCallback) => {
48546
48606
  return extractString(attribute, field);
48547
48607
  }
48548
48608
  case "object":
48549
- return extractObject(extractExpression(attribute), field);
48609
+ return extractObject(extractExpression(attribute), field, imageCallback);
48550
48610
  case "rich-text":
48551
48611
  const JSXString = extractRaw(attribute);
48552
48612
  if (JSXString) {
@@ -48571,25 +48631,25 @@ var extractScalar = (attribute, field) => {
48571
48631
  return attribute.expression.value;
48572
48632
  }
48573
48633
  };
48574
- var extractObject = (attribute, field) => {
48634
+ var extractObject = (attribute, field, imageCallback) => {
48575
48635
  if (field.list) {
48576
48636
  assertType(attribute.expression, "ArrayExpression");
48577
48637
  return attribute.expression.elements.map((element) => {
48578
48638
  assertHasType(element);
48579
48639
  assertType(element, "ObjectExpression");
48580
- return extractObjectExpression(element, field);
48640
+ return extractObjectExpression(element, field, imageCallback);
48581
48641
  });
48582
48642
  } else {
48583
48643
  assertType(attribute.expression, "ObjectExpression");
48584
- return extractObjectExpression(attribute.expression, field);
48644
+ return extractObjectExpression(attribute.expression, field, imageCallback);
48585
48645
  }
48586
48646
  };
48587
- var extractObjectExpression = (expression, field) => {
48647
+ var extractObjectExpression = (expression, field, imageCallback) => {
48588
48648
  var _a3;
48589
48649
  const properties = {};
48590
48650
  (_a3 = expression.properties) == null ? void 0 : _a3.forEach((property) => {
48591
48651
  assertType(property, "Property");
48592
- const { key, value } = extractKeyValue(property, field);
48652
+ const { key, value } = extractKeyValue(property, field, imageCallback);
48593
48653
  properties[key] = value;
48594
48654
  });
48595
48655
  return properties;
@@ -48602,7 +48662,7 @@ var getField = (objectField, name2) => {
48602
48662
  return objectField.fields.find((f) => f.name === name2);
48603
48663
  }
48604
48664
  };
48605
- var extractKeyValue = (property, parentField) => {
48665
+ var extractKeyValue = (property, parentField, imageCallback) => {
48606
48666
  assertType(property.key, "Identifier");
48607
48667
  const key = property.key.name;
48608
48668
  const field = getField(parentField, key);
@@ -48612,12 +48672,16 @@ var extractKeyValue = (property, parentField) => {
48612
48672
  const value = property.value.elements.map((element) => {
48613
48673
  assertHasType(element);
48614
48674
  assertType(element, "ObjectExpression");
48615
- return extractObjectExpression(element, field);
48675
+ return extractObjectExpression(element, field, imageCallback);
48616
48676
  });
48617
48677
  return { key, value };
48618
48678
  } else {
48619
48679
  assertType(property.value, "ObjectExpression");
48620
- const value = extractObjectExpression(property.value, field);
48680
+ const value = extractObjectExpression(
48681
+ property.value,
48682
+ field,
48683
+ imageCallback
48684
+ );
48621
48685
  return { key, value };
48622
48686
  }
48623
48687
  } else if (field == null ? void 0 : field.list) {
@@ -48628,6 +48692,13 @@ var extractKeyValue = (property, parentField) => {
48628
48692
  return element.value;
48629
48693
  });
48630
48694
  return { key, value };
48695
+ } else if ((field == null ? void 0 : field.type) === "rich-text") {
48696
+ assertType(property.value, "Literal");
48697
+ const raw = property.value.value;
48698
+ if (typeof raw === "string") {
48699
+ return { key, value: parseMDX(raw, field, imageCallback) };
48700
+ }
48701
+ throw new Error(`Unable to parse rich-text`);
48631
48702
  } else {
48632
48703
  assertType(property.value, "Literal");
48633
48704
  return { key, value: property.value.value };
package/dist/index.mjs CHANGED
@@ -40224,12 +40224,17 @@ function stringifyProps(element, parentField, flatten2, imageCallback) {
40224
40224
  }
40225
40225
  break;
40226
40226
  case "object":
40227
+ const result = findAndTransformNestedRichText(
40228
+ field,
40229
+ value,
40230
+ imageCallback
40231
+ );
40227
40232
  attributes2.push({
40228
40233
  type: "mdxJsxAttribute",
40229
40234
  name: name2,
40230
40235
  value: {
40231
40236
  type: "mdxJsxAttributeValueExpression",
40232
- value: stringifyObj(value, flatten2)
40237
+ value: stringifyObj(result, flatten2)
40233
40238
  }
40234
40239
  });
40235
40240
  break;
@@ -40335,6 +40340,61 @@ function assertShape(value, callback, errorMessage) {
40335
40340
  function isPlainObject2(value) {
40336
40341
  return typeof value === "object" && value !== null && !Array.isArray(value);
40337
40342
  }
40343
+ var findAndTransformNestedRichText = (field, value, imageCallback, parentValue = {}) => {
40344
+ switch (field.type) {
40345
+ case "rich-text": {
40346
+ assertShape(
40347
+ value,
40348
+ (value2) => value2.type === "root" && Array.isArray(value2.children),
40349
+ `Nested rich-text element is not a valid shape for field ${field.name}`
40350
+ );
40351
+ parentValue[field.name] = stringifyMDX(value, field, imageCallback);
40352
+ break;
40353
+ }
40354
+ case "object": {
40355
+ if (field.list) {
40356
+ if (Array.isArray(value)) {
40357
+ value.forEach((item) => {
40358
+ Object.entries(item).forEach(([key, subValue]) => {
40359
+ if (field.fields) {
40360
+ const subField = field.fields.find(({ name: name2 }) => name2 === key);
40361
+ if (subField) {
40362
+ findAndTransformNestedRichText(
40363
+ subField,
40364
+ subValue,
40365
+ imageCallback,
40366
+ item
40367
+ );
40368
+ }
40369
+ }
40370
+ });
40371
+ });
40372
+ }
40373
+ } else {
40374
+ if (isObject(value)) {
40375
+ Object.entries(value).forEach(([key, subValue]) => {
40376
+ if (field.fields) {
40377
+ const subField = field.fields.find(({ name: name2 }) => name2 === key);
40378
+ if (subField) {
40379
+ findAndTransformNestedRichText(
40380
+ subField,
40381
+ subValue,
40382
+ imageCallback,
40383
+ value
40384
+ );
40385
+ }
40386
+ }
40387
+ });
40388
+ }
40389
+ }
40390
+ break;
40391
+ }
40392
+ }
40393
+ return value;
40394
+ };
40395
+ function isObject(value) {
40396
+ return typeof value === "object" && value !== null && !Array.isArray(value);
40397
+ }
40338
40398
 
40339
40399
  // src/stringify/marks.ts
40340
40400
  var matches = (a, b) => {
@@ -48521,7 +48581,7 @@ var extractAttribute = (attribute, field, imageCallback) => {
48521
48581
  return extractString(attribute, field);
48522
48582
  }
48523
48583
  case "object":
48524
- return extractObject(extractExpression(attribute), field);
48584
+ return extractObject(extractExpression(attribute), field, imageCallback);
48525
48585
  case "rich-text":
48526
48586
  const JSXString = extractRaw(attribute);
48527
48587
  if (JSXString) {
@@ -48546,24 +48606,24 @@ var extractScalar = (attribute, field) => {
48546
48606
  return attribute.expression.value;
48547
48607
  }
48548
48608
  };
48549
- var extractObject = (attribute, field) => {
48609
+ var extractObject = (attribute, field, imageCallback) => {
48550
48610
  if (field.list) {
48551
48611
  assertType(attribute.expression, "ArrayExpression");
48552
48612
  return attribute.expression.elements.map((element) => {
48553
48613
  assertHasType(element);
48554
48614
  assertType(element, "ObjectExpression");
48555
- return extractObjectExpression(element, field);
48615
+ return extractObjectExpression(element, field, imageCallback);
48556
48616
  });
48557
48617
  } else {
48558
48618
  assertType(attribute.expression, "ObjectExpression");
48559
- return extractObjectExpression(attribute.expression, field);
48619
+ return extractObjectExpression(attribute.expression, field, imageCallback);
48560
48620
  }
48561
48621
  };
48562
- var extractObjectExpression = (expression, field) => {
48622
+ var extractObjectExpression = (expression, field, imageCallback) => {
48563
48623
  const properties = {};
48564
48624
  expression.properties?.forEach((property) => {
48565
48625
  assertType(property, "Property");
48566
- const { key, value } = extractKeyValue(property, field);
48626
+ const { key, value } = extractKeyValue(property, field, imageCallback);
48567
48627
  properties[key] = value;
48568
48628
  });
48569
48629
  return properties;
@@ -48576,7 +48636,7 @@ var getField = (objectField, name2) => {
48576
48636
  return objectField.fields.find((f) => f.name === name2);
48577
48637
  }
48578
48638
  };
48579
- var extractKeyValue = (property, parentField) => {
48639
+ var extractKeyValue = (property, parentField, imageCallback) => {
48580
48640
  assertType(property.key, "Identifier");
48581
48641
  const key = property.key.name;
48582
48642
  const field = getField(parentField, key);
@@ -48586,12 +48646,16 @@ var extractKeyValue = (property, parentField) => {
48586
48646
  const value = property.value.elements.map((element) => {
48587
48647
  assertHasType(element);
48588
48648
  assertType(element, "ObjectExpression");
48589
- return extractObjectExpression(element, field);
48649
+ return extractObjectExpression(element, field, imageCallback);
48590
48650
  });
48591
48651
  return { key, value };
48592
48652
  } else {
48593
48653
  assertType(property.value, "ObjectExpression");
48594
- const value = extractObjectExpression(property.value, field);
48654
+ const value = extractObjectExpression(
48655
+ property.value,
48656
+ field,
48657
+ imageCallback
48658
+ );
48595
48659
  return { key, value };
48596
48660
  }
48597
48661
  } else if (field?.list) {
@@ -48602,6 +48666,13 @@ var extractKeyValue = (property, parentField) => {
48602
48666
  return element.value;
48603
48667
  });
48604
48668
  return { key, value };
48669
+ } else if (field?.type === "rich-text") {
48670
+ assertType(property.value, "Literal");
48671
+ const raw = property.value.value;
48672
+ if (typeof raw === "string") {
48673
+ return { key, value: parseMDX(raw, field, imageCallback) };
48674
+ }
48675
+ throw new Error(`Unable to parse rich-text`);
48605
48676
  } else {
48606
48677
  assertType(property.value, "Literal");
48607
48678
  return { key, value: property.value.value };
@@ -0,0 +1,2 @@
1
+ import { RichTextField } from '@tinacms/schema-tools';
2
+ export declare const field: RichTextField;
@@ -0,0 +1,2 @@
1
+ import { RichTextField } from '@tinacms/schema-tools';
2
+ export declare const field: RichTextField;
@@ -0,0 +1,2 @@
1
+ import { RichTextField } from '@tinacms/schema-tools';
2
+ export declare const field: RichTextField;
@@ -1,18 +1,18 @@
1
- import type { RichTextType } from '@tinacms/schema-tools';
1
+ import type { RichTextField } from '@tinacms/schema-tools';
2
2
  import type { MdxJsxAttribute } from 'mdast-util-mdx-jsx';
3
3
  import * as Plate from '../parse/plate';
4
4
  import type * as Md from 'mdast';
5
- export declare const stringifyPropsInline: (element: Plate.MdxInlineElement, field: RichTextType, imageCallback: (url: string) => string) => {
5
+ export declare const stringifyPropsInline: (element: Plate.MdxInlineElement, field: RichTextField, imageCallback: (url: string) => string) => {
6
6
  attributes: MdxJsxAttribute[];
7
7
  children: Md.PhrasingContent[];
8
8
  };
9
- export declare function stringifyProps(element: Plate.MdxInlineElement, parentField: RichTextType, flatten: boolean, imageCallback: (url: string) => string): {
9
+ export declare function stringifyProps(element: Plate.MdxInlineElement, parentField: RichTextField, flatten: boolean, imageCallback: (url: string) => string): {
10
10
  attributes: MdxJsxAttribute[];
11
11
  children: Md.PhrasingContent[];
12
12
  useDirective: boolean;
13
13
  directiveType: string;
14
14
  };
15
- export declare function stringifyProps(element: Plate.MdxBlockElement, parentField: RichTextType, flatten: boolean, imageCallback: (url: string) => string): {
15
+ export declare function stringifyProps(element: Plate.MdxBlockElement, parentField: RichTextField, flatten: boolean, imageCallback: (url: string) => string): {
16
16
  attributes: MdxJsxAttribute[];
17
17
  children: Md.BlockContent[];
18
18
  useDirective: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinacms/mdx",
3
- "version": "1.3.23",
3
+ "version": "1.3.24",
4
4
  "typings": "dist/index.d.ts",
5
5
  "main": "dist/index.js",
6
6
  "browser": "dist/index.browser.mjs",