pte-interpolation-core 1.3.0 → 1.3.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.cjs CHANGED
@@ -61,7 +61,10 @@ function interpolateToString(blocks, values, fallback = defaultFallback) {
61
61
  return children.map((child) => {
62
62
  if (child._type === VARIABLE_TYPE_PREFIX) {
63
63
  const variableKey = child.variableKey;
64
- return values[variableKey] !== void 0 ? values[variableKey] : fallback(variableKey);
64
+ if (typeof variableKey === "string") {
65
+ return values[variableKey] !== void 0 ? values[variableKey] : fallback(variableKey);
66
+ }
67
+ return "";
65
68
  }
66
69
  return typeof child.text === "string" ? child.text : "";
67
70
  }).join("");
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/extractVariableKeys.ts","../src/getMissingVariableKeys.ts","../src/interpolateToString.ts"],"sourcesContent":["export {VARIABLE_TYPE_PREFIX} from './constants'\nexport {extractVariableKeys} from './extractVariableKeys'\nexport {getMissingVariableKeys} from './getMissingVariableKeys'\nexport {interpolateToString} from './interpolateToString'\nexport type {\n InterpolationFallback,\n InterpolationValues,\n PortableTextBlockLike,\n PortableTextChild,\n PteInterpolationVariableBlock,\n} from './types'\n","/** @public */\nexport const VARIABLE_TYPE_PREFIX = 'pteInterpolationVariable'\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {PortableTextBlockLike} from './types'\n\n/** @public */\nexport function extractVariableKeys(blocks: PortableTextBlockLike[]): string[] {\n const seen = new Set<string>()\n\n return blocks.reduce<string[]>((keys, block) => {\n const children = block.children ?? []\n\n return children.reduce((accumulated, child) => {\n if (child._type !== VARIABLE_TYPE_PREFIX) return accumulated\n\n const variableKey = child.variableKey\n if (typeof variableKey !== 'string') return accumulated\n if (seen.has(variableKey)) return accumulated\n\n seen.add(variableKey)\n return [...accumulated, variableKey]\n }, keys)\n }, [])\n}\n","import {extractVariableKeys} from './extractVariableKeys'\nimport type {InterpolationValues, PortableTextBlockLike} from './types'\n\n/** @public */\nexport function getMissingVariableKeys(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n): string[] {\n return extractVariableKeys(blocks).filter((key) => values[key] === undefined)\n}\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {InterpolationFallback, InterpolationValues, PortableTextBlockLike} from './types'\n\nfunction defaultFallback(variableKey: string): string {\n return `{${variableKey}}`\n}\n\n/** @public */\nexport function interpolateToString(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n fallback: InterpolationFallback = defaultFallback,\n): string {\n return blocks\n .map((block) => {\n const children = block.children ?? []\n\n return children\n .map((child) => {\n if (child._type === VARIABLE_TYPE_PREFIX) {\n const variableKey = child.variableKey as string\n return values[variableKey] !== undefined ? values[variableKey] : fallback(variableKey)\n }\n\n return typeof child.text === 'string' ? child.text : ''\n })\n .join('')\n })\n .join('\\n')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCO,IAAM,uBAAuB;;;ACG7B,SAAS,oBAAoB,QAA2C;AAC7E,QAAM,OAAO,oBAAI,IAAY;AAE7B,SAAO,OAAO,OAAiB,CAAC,MAAM,UAAU;AAC9C,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SAAS,OAAO,CAAC,aAAa,UAAU;AAC7C,UAAI,MAAM,UAAU,qBAAsB,QAAO;AAEjD,YAAM,cAAc,MAAM;AAC1B,UAAI,OAAO,gBAAgB,SAAU,QAAO;AAC5C,UAAI,KAAK,IAAI,WAAW,EAAG,QAAO;AAElC,WAAK,IAAI,WAAW;AACpB,aAAO,CAAC,GAAG,aAAa,WAAW;AAAA,IACrC,GAAG,IAAI;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ACjBO,SAAS,uBACd,QACA,QACU;AACV,SAAO,oBAAoB,MAAM,EAAE,OAAO,CAAC,QAAQ,OAAO,GAAG,MAAM,MAAS;AAC9E;;;ACNA,SAAS,gBAAgB,aAA6B;AACpD,SAAO,IAAI,WAAW;AACxB;AAGO,SAAS,oBACd,QACA,QACA,WAAkC,iBAC1B;AACR,SAAO,OACJ,IAAI,CAAC,UAAU;AACd,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SACJ,IAAI,CAAC,UAAU;AACd,UAAI,MAAM,UAAU,sBAAsB;AACxC,cAAM,cAAc,MAAM;AAC1B,eAAO,OAAO,WAAW,MAAM,SAAY,OAAO,WAAW,IAAI,SAAS,WAAW;AAAA,MACvF;AAEA,aAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IACvD,CAAC,EACA,KAAK,EAAE;AAAA,EACZ,CAAC,EACA,KAAK,IAAI;AACd;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/extractVariableKeys.ts","../src/getMissingVariableKeys.ts","../src/interpolateToString.ts"],"sourcesContent":["export {VARIABLE_TYPE_PREFIX} from './constants'\nexport {extractVariableKeys} from './extractVariableKeys'\nexport {getMissingVariableKeys} from './getMissingVariableKeys'\nexport {interpolateToString} from './interpolateToString'\nexport type {\n InterpolationFallback,\n InterpolationValues,\n PortableTextBlockLike,\n PortableTextChild,\n PteInterpolationVariableBlock,\n} from './types'\n","/** @public */\nexport const VARIABLE_TYPE_PREFIX = 'pteInterpolationVariable'\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {PortableTextBlockLike} from './types'\n\n/** @public */\nexport function extractVariableKeys(blocks: PortableTextBlockLike[]): string[] {\n const seen = new Set<string>()\n\n return blocks.reduce<string[]>((keys, block) => {\n const children = block.children ?? []\n\n return children.reduce((accumulated, child) => {\n if (child._type !== VARIABLE_TYPE_PREFIX) return accumulated\n\n const variableKey = child.variableKey\n if (typeof variableKey !== 'string') return accumulated\n if (seen.has(variableKey)) return accumulated\n\n seen.add(variableKey)\n return [...accumulated, variableKey]\n }, keys)\n }, [])\n}\n","import {extractVariableKeys} from './extractVariableKeys'\nimport type {InterpolationValues, PortableTextBlockLike} from './types'\n\n/** @public */\nexport function getMissingVariableKeys(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n): string[] {\n return extractVariableKeys(blocks).filter((key) => values[key] === undefined)\n}\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {InterpolationFallback, InterpolationValues, PortableTextBlockLike} from './types'\n\nfunction defaultFallback(variableKey: string): string {\n return `{${variableKey}}`\n}\n\n/** @public */\nexport function interpolateToString(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n fallback: InterpolationFallback = defaultFallback,\n): string {\n return blocks\n .map((block) => {\n const children = block.children ?? []\n\n return children\n .map((child) => {\n if (child._type === VARIABLE_TYPE_PREFIX) {\n const variableKey = child.variableKey\n if (typeof variableKey === 'string') {\n return values[variableKey] !== undefined ? values[variableKey] : fallback(variableKey)\n }\n return ''\n }\n\n return typeof child.text === 'string' ? child.text : ''\n })\n .join('')\n })\n .join('\\n')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCO,IAAM,uBAAuB;;;ACG7B,SAAS,oBAAoB,QAA2C;AAC7E,QAAM,OAAO,oBAAI,IAAY;AAE7B,SAAO,OAAO,OAAiB,CAAC,MAAM,UAAU;AAC9C,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SAAS,OAAO,CAAC,aAAa,UAAU;AAC7C,UAAI,MAAM,UAAU,qBAAsB,QAAO;AAEjD,YAAM,cAAc,MAAM;AAC1B,UAAI,OAAO,gBAAgB,SAAU,QAAO;AAC5C,UAAI,KAAK,IAAI,WAAW,EAAG,QAAO;AAElC,WAAK,IAAI,WAAW;AACpB,aAAO,CAAC,GAAG,aAAa,WAAW;AAAA,IACrC,GAAG,IAAI;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ACjBO,SAAS,uBACd,QACA,QACU;AACV,SAAO,oBAAoB,MAAM,EAAE,OAAO,CAAC,QAAQ,OAAO,GAAG,MAAM,MAAS;AAC9E;;;ACNA,SAAS,gBAAgB,aAA6B;AACpD,SAAO,IAAI,WAAW;AACxB;AAGO,SAAS,oBACd,QACA,QACA,WAAkC,iBAC1B;AACR,SAAO,OACJ,IAAI,CAAC,UAAU;AACd,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SACJ,IAAI,CAAC,UAAU;AACd,UAAI,MAAM,UAAU,sBAAsB;AACxC,cAAM,cAAc,MAAM;AAC1B,YAAI,OAAO,gBAAgB,UAAU;AACnC,iBAAO,OAAO,WAAW,MAAM,SAAY,OAAO,WAAW,IAAI,SAAS,WAAW;AAAA,QACvF;AACA,eAAO;AAAA,MACT;AAEA,aAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IACvD,CAAC,EACA,KAAK,EAAE;AAAA,EACZ,CAAC,EACA,KAAK,IAAI;AACd;","names":[]}
package/dist/index.js CHANGED
@@ -32,7 +32,10 @@ function interpolateToString(blocks, values, fallback = defaultFallback) {
32
32
  return children.map((child) => {
33
33
  if (child._type === VARIABLE_TYPE_PREFIX) {
34
34
  const variableKey = child.variableKey;
35
- return values[variableKey] !== void 0 ? values[variableKey] : fallback(variableKey);
35
+ if (typeof variableKey === "string") {
36
+ return values[variableKey] !== void 0 ? values[variableKey] : fallback(variableKey);
37
+ }
38
+ return "";
36
39
  }
37
40
  return typeof child.text === "string" ? child.text : "";
38
41
  }).join("");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/extractVariableKeys.ts","../src/getMissingVariableKeys.ts","../src/interpolateToString.ts"],"sourcesContent":["/** @public */\nexport const VARIABLE_TYPE_PREFIX = 'pteInterpolationVariable'\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {PortableTextBlockLike} from './types'\n\n/** @public */\nexport function extractVariableKeys(blocks: PortableTextBlockLike[]): string[] {\n const seen = new Set<string>()\n\n return blocks.reduce<string[]>((keys, block) => {\n const children = block.children ?? []\n\n return children.reduce((accumulated, child) => {\n if (child._type !== VARIABLE_TYPE_PREFIX) return accumulated\n\n const variableKey = child.variableKey\n if (typeof variableKey !== 'string') return accumulated\n if (seen.has(variableKey)) return accumulated\n\n seen.add(variableKey)\n return [...accumulated, variableKey]\n }, keys)\n }, [])\n}\n","import {extractVariableKeys} from './extractVariableKeys'\nimport type {InterpolationValues, PortableTextBlockLike} from './types'\n\n/** @public */\nexport function getMissingVariableKeys(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n): string[] {\n return extractVariableKeys(blocks).filter((key) => values[key] === undefined)\n}\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {InterpolationFallback, InterpolationValues, PortableTextBlockLike} from './types'\n\nfunction defaultFallback(variableKey: string): string {\n return `{${variableKey}}`\n}\n\n/** @public */\nexport function interpolateToString(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n fallback: InterpolationFallback = defaultFallback,\n): string {\n return blocks\n .map((block) => {\n const children = block.children ?? []\n\n return children\n .map((child) => {\n if (child._type === VARIABLE_TYPE_PREFIX) {\n const variableKey = child.variableKey as string\n return values[variableKey] !== undefined ? values[variableKey] : fallback(variableKey)\n }\n\n return typeof child.text === 'string' ? child.text : ''\n })\n .join('')\n })\n .join('\\n')\n}\n"],"mappings":";AACO,IAAM,uBAAuB;;;ACG7B,SAAS,oBAAoB,QAA2C;AAC7E,QAAM,OAAO,oBAAI,IAAY;AAE7B,SAAO,OAAO,OAAiB,CAAC,MAAM,UAAU;AAC9C,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SAAS,OAAO,CAAC,aAAa,UAAU;AAC7C,UAAI,MAAM,UAAU,qBAAsB,QAAO;AAEjD,YAAM,cAAc,MAAM;AAC1B,UAAI,OAAO,gBAAgB,SAAU,QAAO;AAC5C,UAAI,KAAK,IAAI,WAAW,EAAG,QAAO;AAElC,WAAK,IAAI,WAAW;AACpB,aAAO,CAAC,GAAG,aAAa,WAAW;AAAA,IACrC,GAAG,IAAI;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ACjBO,SAAS,uBACd,QACA,QACU;AACV,SAAO,oBAAoB,MAAM,EAAE,OAAO,CAAC,QAAQ,OAAO,GAAG,MAAM,MAAS;AAC9E;;;ACNA,SAAS,gBAAgB,aAA6B;AACpD,SAAO,IAAI,WAAW;AACxB;AAGO,SAAS,oBACd,QACA,QACA,WAAkC,iBAC1B;AACR,SAAO,OACJ,IAAI,CAAC,UAAU;AACd,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SACJ,IAAI,CAAC,UAAU;AACd,UAAI,MAAM,UAAU,sBAAsB;AACxC,cAAM,cAAc,MAAM;AAC1B,eAAO,OAAO,WAAW,MAAM,SAAY,OAAO,WAAW,IAAI,SAAS,WAAW;AAAA,MACvF;AAEA,aAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IACvD,CAAC,EACA,KAAK,EAAE;AAAA,EACZ,CAAC,EACA,KAAK,IAAI;AACd;","names":[]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/extractVariableKeys.ts","../src/getMissingVariableKeys.ts","../src/interpolateToString.ts"],"sourcesContent":["/** @public */\nexport const VARIABLE_TYPE_PREFIX = 'pteInterpolationVariable'\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {PortableTextBlockLike} from './types'\n\n/** @public */\nexport function extractVariableKeys(blocks: PortableTextBlockLike[]): string[] {\n const seen = new Set<string>()\n\n return blocks.reduce<string[]>((keys, block) => {\n const children = block.children ?? []\n\n return children.reduce((accumulated, child) => {\n if (child._type !== VARIABLE_TYPE_PREFIX) return accumulated\n\n const variableKey = child.variableKey\n if (typeof variableKey !== 'string') return accumulated\n if (seen.has(variableKey)) return accumulated\n\n seen.add(variableKey)\n return [...accumulated, variableKey]\n }, keys)\n }, [])\n}\n","import {extractVariableKeys} from './extractVariableKeys'\nimport type {InterpolationValues, PortableTextBlockLike} from './types'\n\n/** @public */\nexport function getMissingVariableKeys(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n): string[] {\n return extractVariableKeys(blocks).filter((key) => values[key] === undefined)\n}\n","import {VARIABLE_TYPE_PREFIX} from './constants'\nimport type {InterpolationFallback, InterpolationValues, PortableTextBlockLike} from './types'\n\nfunction defaultFallback(variableKey: string): string {\n return `{${variableKey}}`\n}\n\n/** @public */\nexport function interpolateToString(\n blocks: PortableTextBlockLike[],\n values: InterpolationValues,\n fallback: InterpolationFallback = defaultFallback,\n): string {\n return blocks\n .map((block) => {\n const children = block.children ?? []\n\n return children\n .map((child) => {\n if (child._type === VARIABLE_TYPE_PREFIX) {\n const variableKey = child.variableKey\n if (typeof variableKey === 'string') {\n return values[variableKey] !== undefined ? values[variableKey] : fallback(variableKey)\n }\n return ''\n }\n\n return typeof child.text === 'string' ? child.text : ''\n })\n .join('')\n })\n .join('\\n')\n}\n"],"mappings":";AACO,IAAM,uBAAuB;;;ACG7B,SAAS,oBAAoB,QAA2C;AAC7E,QAAM,OAAO,oBAAI,IAAY;AAE7B,SAAO,OAAO,OAAiB,CAAC,MAAM,UAAU;AAC9C,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SAAS,OAAO,CAAC,aAAa,UAAU;AAC7C,UAAI,MAAM,UAAU,qBAAsB,QAAO;AAEjD,YAAM,cAAc,MAAM;AAC1B,UAAI,OAAO,gBAAgB,SAAU,QAAO;AAC5C,UAAI,KAAK,IAAI,WAAW,EAAG,QAAO;AAElC,WAAK,IAAI,WAAW;AACpB,aAAO,CAAC,GAAG,aAAa,WAAW;AAAA,IACrC,GAAG,IAAI;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ACjBO,SAAS,uBACd,QACA,QACU;AACV,SAAO,oBAAoB,MAAM,EAAE,OAAO,CAAC,QAAQ,OAAO,GAAG,MAAM,MAAS;AAC9E;;;ACNA,SAAS,gBAAgB,aAA6B;AACpD,SAAO,IAAI,WAAW;AACxB;AAGO,SAAS,oBACd,QACA,QACA,WAAkC,iBAC1B;AACR,SAAO,OACJ,IAAI,CAAC,UAAU;AACd,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,WAAO,SACJ,IAAI,CAAC,UAAU;AACd,UAAI,MAAM,UAAU,sBAAsB;AACxC,cAAM,cAAc,MAAM;AAC1B,YAAI,OAAO,gBAAgB,UAAU;AACnC,iBAAO,OAAO,WAAW,MAAM,SAAY,OAAO,WAAW,IAAI,SAAS,WAAW;AAAA,QACvF;AACA,eAAO;AAAA,MACT;AAEA,aAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IACvD,CAAC,EACA,KAAK,EAAE;AAAA,EACZ,CAAC,EACA,KAAK,IAAI;AACd;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pte-interpolation-core",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Framework-agnostic utilities for Portable Text variable interpolation",
@@ -81,6 +81,14 @@ export const duplicateVariableBlock: PortableTextBlockLike[] = [
81
81
 
82
82
  export const blockWithNoChildren: PortableTextBlockLike[] = [{_type: 'block', _key: 'block-1'}]
83
83
 
84
+ export const blockWithMissingVariableKey: PortableTextBlockLike[] = [
85
+ {
86
+ _type: 'block',
87
+ _key: 'block-1',
88
+ children: [{_type: 'pteInterpolationVariable', _key: 'var-1'}],
89
+ },
90
+ ]
91
+
84
92
  export const blockWithNonStringVariableKey: PortableTextBlockLike[] = [
85
93
  {
86
94
  _type: 'block',
@@ -1,6 +1,8 @@
1
1
  import {describe, expect, it} from 'vitest'
2
2
  import {interpolateToString} from '../interpolateToString'
3
3
  import {
4
+ blockWithMissingVariableKey,
5
+ blockWithNonStringVariableKey,
4
6
  consecutiveVariablesBlock,
5
7
  emptyBlocksContent,
6
8
  multiBlockContent,
@@ -56,4 +58,12 @@ describe('interpolateToString', () => {
56
58
  }),
57
59
  ).toBe('Name: Patrick Pickles, Email: patrick@example.com')
58
60
  })
61
+
62
+ it('returns empty string for a variable block with a missing variableKey', () => {
63
+ expect(interpolateToString(blockWithMissingVariableKey, {})).toBe('')
64
+ })
65
+
66
+ it('returns empty string for a variable block with a non-string variableKey', () => {
67
+ expect(interpolateToString(blockWithNonStringVariableKey, {})).toBe('')
68
+ })
59
69
  })
@@ -18,8 +18,11 @@ export function interpolateToString(
18
18
  return children
19
19
  .map((child) => {
20
20
  if (child._type === VARIABLE_TYPE_PREFIX) {
21
- const variableKey = child.variableKey as string
22
- return values[variableKey] !== undefined ? values[variableKey] : fallback(variableKey)
21
+ const variableKey = child.variableKey
22
+ if (typeof variableKey === 'string') {
23
+ return values[variableKey] !== undefined ? values[variableKey] : fallback(variableKey)
24
+ }
25
+ return ''
23
26
  }
24
27
 
25
28
  return typeof child.text === 'string' ? child.text : ''