@truto/replace-placeholders 1.0.6 → 1.0.7

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/main.cjs CHANGED
@@ -3,12 +3,15 @@ var $g5Y9E$lodashes = require("lodash-es");
3
3
  var $g5Y9E$traverse = require("traverse");
4
4
  var $g5Y9E$wildwildpath = require("wild-wild-path");
5
5
 
6
+
6
7
  function $parcel$defineInteropFlag(a) {
7
8
  Object.defineProperty(a, '__esModule', {value: true, configurable: true});
8
9
  }
10
+
9
11
  function $parcel$export(e, n, v, s) {
10
12
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
11
13
  }
14
+
12
15
  function $parcel$interopDefault(a) {
13
16
  return a && a.__esModule ? a.default : a;
14
17
  }
@@ -21,24 +24,24 @@ $parcel$export(module.exports, "default", () => $80bd448eb6ea085b$export$2e2bcd8
21
24
 
22
25
 
23
26
 
24
- function $a169b0c20575e4d3$var$replace(str = "", obj = {}) {
27
+ function $a169b0c20575e4d3$var$replace(str = '', obj = {}) {
25
28
  const regex = /{{([\w-./|:?\s]+)}}/gi;
26
29
  const typeSplitRegex = /:(?=[\w\s]+)/gm;
27
30
  const matches = str.match(regex);
28
31
  let result = str;
29
32
  if (matches) matches.forEach((match)=>{
30
- const [matchStr, defaultStr] = match.slice(2, -2).split("?:");
31
- const parts = matchStr.split("|");
32
- const isNullAllowed = parts.some((part)=>part.includes(":null"));
33
- const ignoreEmptyString = parts.some((part)=>part.includes(":ignore-empty-str"));
34
- const setUndefined = parts.some((part)=>part.includes(":undefined"));
33
+ const [matchStr, defaultStr] = match.slice(2, -2).split('?:');
34
+ const parts = matchStr.split('|');
35
+ const isNullAllowed = parts.some((part)=>part.includes(':null'));
36
+ const ignoreEmptyString = parts.some((part)=>part.includes(':ignore-empty-str'));
37
+ const setUndefined = parts.some((part)=>part.includes(':undefined'));
35
38
  const isWholeString = match === str;
36
39
  let value = undefined;
37
40
  for (const part of parts){
38
41
  const [path, ...typeParts] = part.split(typeSplitRegex);
39
- const type = (typeParts[0] || "str").trim();
42
+ const type = (typeParts[0] || 'str').trim();
40
43
  const tempValue = (0, $g5Y9E$wildwildpath.get)(obj, path.trim());
41
- if (tempValue === "" && ignoreEmptyString) continue;
44
+ if (tempValue === '' && ignoreEmptyString) continue;
42
45
  if (tempValue !== undefined) {
43
46
  value = $a169b0c20575e4d3$var$typeCast(tempValue, type, isWholeString);
44
47
  break;
@@ -46,12 +49,12 @@ function $a169b0c20575e4d3$var$replace(str = "", obj = {}) {
46
49
  }
47
50
  if (value === undefined && defaultStr) {
48
51
  const [defaultValue, defaultType] = defaultStr.split(typeSplitRegex);
49
- const type = defaultType || "str";
52
+ const type = defaultType || 'str';
50
53
  value = $a169b0c20575e4d3$var$typeCast(defaultValue, type, isWholeString);
51
54
  } else if (value === undefined) {
52
55
  if (setUndefined) {
53
56
  if (isWholeString) value = undefined;
54
- else value = "";
57
+ else value = '';
55
58
  } else if (isNullAllowed) value = null;
56
59
  else value = match // Keep the placeholder intact
57
60
  ;
@@ -64,31 +67,31 @@ function $a169b0c20575e4d3$var$replace(str = "", obj = {}) {
64
67
  function $a169b0c20575e4d3$var$typeCast(value, type, isWholeString) {
65
68
  if (value === undefined || value === null) return value;
66
69
  let valueToCheck = value;
67
- if ((0, $g5Y9E$lodashes.isString)(value) && type !== "str") valueToCheck = (0, $g5Y9E$lodashes.trim)(value);
70
+ if ((0, $g5Y9E$lodashes.isString)(value) && type !== 'str') valueToCheck = (0, $g5Y9E$lodashes.trim)(value);
68
71
  if (valueToCheck instanceof Blob || valueToCheck instanceof ReadableStream || valueToCheck instanceof WritableStream || valueToCheck instanceof TransformStream) return valueToCheck;
69
72
  let castValue;
70
73
  switch(type){
71
- case "ignore-empty-str":
74
+ case 'ignore-empty-str':
72
75
  return valueToCheck;
73
- case "undefined":
76
+ case 'undefined':
74
77
  return valueToCheck;
75
- case "null":
76
- if (valueToCheck === "null" || valueToCheck === null) return null;
77
- return isWholeString ? valueToCheck : "null";
78
- case "int":
78
+ case 'null':
79
+ if (valueToCheck === 'null' || valueToCheck === null) return null;
80
+ return isWholeString ? valueToCheck : 'null';
81
+ case 'int':
79
82
  castValue = parseInt(valueToCheck);
80
83
  return isNaN(castValue) ? valueToCheck : castValue;
81
- case "num":
84
+ case 'num':
82
85
  castValue = parseFloat(valueToCheck);
83
86
  return isNaN(castValue) ? valueToCheck : castValue;
84
- case "str":
87
+ case 'str':
85
88
  return (0, $g5Y9E$lodashes.toString)(value);
86
- case "bool":
87
- if (valueToCheck === "true" || valueToCheck === true) return true;
88
- if (valueToCheck === "false" || valueToCheck === false) return false;
89
+ case 'bool':
90
+ if (valueToCheck === 'true' || valueToCheck === true) return true;
91
+ if (valueToCheck === 'false' || valueToCheck === false) return false;
89
92
  return valueToCheck // Return the original value if it's not 'true' or 'false'
90
93
  ;
91
- case "json":
94
+ case 'json':
92
95
  if (isWholeString) {
93
96
  if ((0, $g5Y9E$lodashes.isPlainObject)(valueToCheck) || (0, $g5Y9E$lodashes.isArray)(valueToCheck)) return valueToCheck;
94
97
  try {
@@ -98,7 +101,7 @@ function $a169b0c20575e4d3$var$typeCast(value, type, isWholeString) {
98
101
  }
99
102
  }
100
103
  return valueToCheck;
101
- case "any":
104
+ case 'any':
102
105
  return valueToCheck;
103
106
  default:
104
107
  throw new Error(`Unsupported type: ${type}`);
@@ -115,7 +118,7 @@ function $72af1098ef591494$export$2e2bcd8739ae039(obj, context) {
115
118
  let hasMergeKey = false;
116
119
  const replaced = (0, ($parcel$interopDefault($g5Y9E$traverse)))(obj).map(function(value) {
117
120
  if (this.circular) this.remove();
118
- else if ((0, $g5Y9E$lodashes.isPlainObject)(value) && "$truto_merge" in value) hasMergeKey = true;
121
+ else if ((0, $g5Y9E$lodashes.isPlainObject)(value) && '$truto_merge' in value) hasMergeKey = true;
119
122
  else if ((0, $g5Y9E$lodashes.isString)(value)) this.update((0, $a169b0c20575e4d3$export$2e2bcd8739ae039)(value, context));
120
123
  else if ((0, $g5Y9E$lodashes.isArrayBuffer)(value) || value instanceof Blob) {
121
124
  const val = (0, $g5Y9E$lodashes.get)(obj, this.path);
@@ -127,14 +130,14 @@ function $72af1098ef591494$export$2e2bcd8739ae039(obj, context) {
127
130
  if (!hasMergeKey) return replaced;
128
131
  return (0, ($parcel$interopDefault($g5Y9E$traverse)))(replaced).map(function(value) {
129
132
  if (this.circular) this.remove();
130
- else if ((0, $g5Y9E$lodashes.isPlainObject)(value) && "$truto_merge" in value) {
131
- const mergeValue = value["$truto_merge"];
133
+ else if ((0, $g5Y9E$lodashes.isPlainObject)(value) && '$truto_merge' in value) {
134
+ const mergeValue = value['$truto_merge'];
132
135
  const mergeValues = (0, $g5Y9E$lodashes.isArray)(mergeValue) ? mergeValue : [
133
136
  mergeValue
134
137
  ];
135
138
  // Start with the base object (without $truto_merge key)
136
139
  let result = {};
137
- for(const key in value)if (key !== "$truto_merge") result[key] = value[key];
140
+ for(const key in value)if (key !== '$truto_merge') result[key] = value[key];
138
141
  // Merge each resolved value (already resolved in first pass)
139
142
  for (const resolvedValue of mergeValues)// Only merge if it's a plain object
140
143
  if ((0, $g5Y9E$lodashes.isPlainObject)(resolvedValue)) result = (0, ($parcel$interopDefault($g5Y9E$deepmerge)))(result, resolvedValue);
@@ -142,7 +145,7 @@ function $72af1098ef591494$export$2e2bcd8739ae039(obj, context) {
142
145
  }
143
146
  });
144
147
  }
145
- throw new Error("Invalid type");
148
+ throw new Error('Invalid type');
146
149
  }
147
150
 
148
151
 
package/dist/main.cjs.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["index.ts","replacePlaceholders.ts","replace.ts"],"sourcesContent":["import replacePlaceholders from './replacePlaceholders';\nexport default replacePlaceholders;\n","import deepmerge from 'deepmerge'\nimport { get, isArray, isArrayBuffer, isPlainObject, isString } from 'lodash-es'\nimport traverse from 'traverse'\nimport replace from './replace'\nexport default function replacePlaceholders<T>(\n obj: T extends string | string[] | Record<string, unknown> ? T : never,\n context: Record<string, unknown>\n): T {\n if (isString(obj)) {\n return replace(obj, context) as T\n }\n\n if (isArray(obj)) {\n return obj.map(item => replacePlaceholders(item, context)) as T\n }\n\n if (isPlainObject(obj)) {\n // First pass: replace all string placeholders and track if $truto_merge exists\n let hasMergeKey = false\n const replaced = traverse(obj).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n hasMergeKey = true\n } else if (isString(value)) {\n this.update(replace(value, context))\n } else if (isArrayBuffer(value) || value instanceof Blob) {\n const val = get(obj, this.path)\n this.update(val)\n this.block()\n }\n })\n\n // Second pass: handle $truto_merge (only if needed)\n if (!hasMergeKey) {\n return replaced as T\n }\n\n return traverse(replaced).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n const mergeValue = value['$truto_merge']\n const mergeValues = isArray(mergeValue) ? mergeValue : [mergeValue]\n\n // Start with the base object (without $truto_merge key)\n let result: Record<string, unknown> = {}\n for (const key in value) {\n if (key !== '$truto_merge') {\n result[key] = value[key]\n }\n }\n\n // Merge each resolved value (already resolved in first pass)\n for (const resolvedValue of mergeValues) {\n // Only merge if it's a plain object\n if (isPlainObject(resolvedValue)) {\n result = deepmerge(result, resolvedValue as Record<string, unknown>)\n }\n // Skip if it's undefined, null, a string (unresolved placeholder), or any non-object\n }\n\n this.update(result)\n }\n }) as T\n }\n\n throw new Error('Invalid type')\n}\n","import { isArray, isPlainObject, isString, toString, trim } from 'lodash-es'\nimport { get as getWild } from 'wild-wild-path'\n\nfunction replace(\n str = '',\n obj: object = {}\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n const regex = /{{([\\w-./|:?\\s]+)}}/gi\n const typeSplitRegex = /:(?=[\\w\\s]+)/gm\n const matches = str.match(regex)\n let result: string | any = str\n\n if (matches) {\n matches.forEach(match => {\n const [matchStr, defaultStr] = match.slice(2, -2).split('?:')\n const parts = matchStr.split('|')\n const isNullAllowed = parts.some(part => part.includes(':null'))\n const ignoreEmptyString = parts.some(part =>\n part.includes(':ignore-empty-str')\n )\n const setUndefined = parts.some(part => part.includes(':undefined'))\n\n const isWholeString = match === str\n\n let value: any = undefined\n for (const part of parts) {\n const [path, ...typeParts] = part.split(typeSplitRegex)\n const type: string = (typeParts[0] || 'str').trim()\n\n const tempValue = getWild(obj, path.trim())\n if (tempValue === '' && ignoreEmptyString) {\n continue\n }\n if (tempValue !== undefined) {\n value = typeCast(tempValue, type, isWholeString)\n break\n }\n }\n\n if (value === undefined && defaultStr) {\n const [defaultValue, defaultType] = defaultStr.split(typeSplitRegex)\n const type = defaultType || 'str'\n value = typeCast(defaultValue, type, isWholeString)\n } else if (value === undefined) {\n if (setUndefined) {\n if (isWholeString) {\n value = undefined\n } else {\n value = ''\n }\n } else if (isNullAllowed) {\n value = null\n } else {\n value = match // Keep the placeholder intact\n }\n }\n\n if (match === str) {\n result = value\n } else {\n result = result.replace(match, value)\n }\n })\n }\n\n return result\n}\n\nfunction typeCast(\n value: unknown,\n type: string,\n isWholeString: boolean\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n if (value === undefined || value === null) return value\n\n let valueToCheck = value\n if (isString(value) && type !== 'str') {\n valueToCheck = trim(value)\n }\n\n if (\n valueToCheck instanceof Blob ||\n valueToCheck instanceof ReadableStream ||\n valueToCheck instanceof WritableStream ||\n valueToCheck instanceof TransformStream\n ) {\n return valueToCheck\n }\n\n let castValue: any\n switch (type) {\n case 'ignore-empty-str':\n return valueToCheck\n case 'undefined':\n return valueToCheck\n case 'null':\n if (valueToCheck === 'null' || valueToCheck === null) return null\n return isWholeString ? valueToCheck : 'null'\n case 'int':\n castValue = parseInt(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'num':\n castValue = parseFloat(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'str':\n return toString(value)\n case 'bool':\n if (valueToCheck === 'true' || valueToCheck === true) return true\n if (valueToCheck === 'false' || valueToCheck === false) return false\n return valueToCheck // Return the original value if it's not 'true' or 'false'\n case 'json':\n if (isWholeString) {\n if (isPlainObject(valueToCheck) || isArray(valueToCheck))\n return valueToCheck\n try {\n return JSON.parse(valueToCheck as string)\n } catch (err) {\n return valueToCheck\n }\n }\n return valueToCheck\n case 'any':\n return valueToCheck\n default:\n throw new Error(`Unsupported type: ${type}`)\n }\n}\n\nexport default replace\n"],"names":[],"version":3,"file":"main.cjs.map"}
1
+ {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AEGA,SAAS,8BACP,MAAM,EAAE,EACR,MAAc,CAAC,CAAC;IAShB,MAAM,QAAQ;IACd,MAAM,iBAAiB;IACvB,MAAM,UAAU,IAAI,KAAK,CAAC;IAC1B,IAAI,SAAuB;IAE3B,IAAI,SACF,QAAQ,OAAO,CAAC,CAAA;QACd,MAAM,CAAC,UAAU,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;QACxD,MAAM,QAAQ,SAAS,KAAK,CAAC;QAC7B,MAAM,gBAAgB,MAAM,IAAI,CAAC,CAAA,OAAQ,KAAK,QAAQ,CAAC;QACvD,MAAM,oBAAoB,MAAM,IAAI,CAAC,CAAA,OACnC,KAAK,QAAQ,CAAC;QAEhB,MAAM,eAAe,MAAM,IAAI,CAAC,CAAA,OAAQ,KAAK,QAAQ,CAAC;QAEtD,MAAM,gBAAgB,UAAU;QAEhC,IAAI,QAAa;QACjB,KAAK,MAAM,QAAQ,MAAO;YACxB,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,KAAK,KAAK,CAAC;YACxC,MAAM,OAAe,AAAC,CAAA,SAAS,CAAC,EAAE,IAAI,KAAI,EAAG,IAAI;YAEjD,MAAM,YAAY,CAAA,GAAA,uBAAM,EAAE,KAAK,KAAK,IAAI;YACxC,IAAI,cAAc,MAAM,mBACtB;YAEF,IAAI,cAAc,WAAW;gBAC3B,QAAQ,+BAAS,WAAW,MAAM;gBAClC;YACF;QACF;QAEA,IAAI,UAAU,aAAa,YAAY;YACrC,MAAM,CAAC,cAAc,YAAY,GAAG,WAAW,KAAK,CAAC;YACrD,MAAM,OAAO,eAAe;YAC5B,QAAQ,+BAAS,cAAc,MAAM;QACvC,OAAO,IAAI,UAAU,WAAW;YAC9B,IAAI;gBACF,IAAI,eACF,QAAQ;qBAER,QAAQ;mBAEL,IAAI,eACT,QAAQ;iBAER,QAAQ,MAAM,8BAA8B;;QAEhD;QAEA,IAAI,UAAU,KACZ,SAAS;aAET,SAAS,OAAO,OAAO,CAAC,OAAO;IAEnC;IAGF,OAAO;AACT;AAEA,SAAS,+BACP,KAAc,EACd,IAAY,EACZ,aAAsB;IAStB,IAAI,UAAU,aAAa,UAAU,MAAM,OAAO;IAElD,IAAI,eAAe;IACnB,IAAI,CAAA,GAAA,wBAAO,EAAE,UAAU,SAAS,OAC9B,eAAe,CAAA,GAAA,oBAAG,EAAE;IAGtB,IACE,wBAAwB,QACxB,wBAAwB,kBACxB,wBAAwB,kBACxB,wBAAwB,iBAExB,OAAO;IAGT,IAAI;IACJ,OAAQ;QACN,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT,KAAK;YACH,IAAI,iBAAiB,UAAU,iBAAiB,MAAM,OAAO;YAC7D,OAAO,gBAAgB,eAAe;QACxC,KAAK;YACH,YAAY,SAAS;YACrB,OAAO,MAAM,aAAa,eAAe;QAC3C,KAAK;YACH,YAAY,WAAW;YACvB,OAAO,MAAM,aAAa,eAAe;QAC3C,KAAK;YACH,OAAO,CAAA,GAAA,wBAAO,EAAE;QAClB,KAAK;YACH,IAAI,iBAAiB,UAAU,iBAAiB,MAAM,OAAO;YAC7D,IAAI,iBAAiB,WAAW,iBAAiB,OAAO,OAAO;YAC/D,OAAO,aAAa,0DAA0D;;QAChF,KAAK;YACH,IAAI,eAAe;gBACjB,IAAI,CAAA,GAAA,6BAAY,EAAE,iBAAiB,CAAA,GAAA,uBAAM,EAAE,eACzC,OAAO;gBACT,IAAI;oBACF,OAAO,KAAK,KAAK,CAAC;gBACpB,EAAE,OAAO,KAAK;oBACZ,OAAO;gBACT;YACF;YACA,OAAO;QACT,KAAK;YACH,OAAO;QACT;YACE,MAAM,IAAI,MAAM,CAAC,kBAAkB,EAAE,MAAM;IAC/C;AACF;IAEA,2CAAe;;;AD1IA,kDACb,GAAsE,EACtE,OAAgC;IAEhC,IAAI,CAAA,GAAA,wBAAO,EAAE,MACX,OAAO,CAAA,GAAA,wCAAM,EAAE,KAAK;IAGtB,IAAI,CAAA,GAAA,uBAAM,EAAE,MACV,OAAO,IAAI,GAAG,CAAC,CAAA,OAAQ,yCAAoB,MAAM;IAGnD,IAAI,CAAA,GAAA,6BAAY,EAAE,MAAM;QACtB,+EAA+E;QAC/E,IAAI,cAAc;QAClB,MAAM,WAAW,CAAA,GAAA,yCAAO,EAAE,KAAK,GAAG,CAAC,SAAU,KAAK;YAChD,IAAI,IAAI,CAAC,QAAQ,EACf,IAAI,CAAC,MAAM;iBACN,IAAI,CAAA,GAAA,6BAAY,EAAE,UAAU,kBAAkB,OACnD,cAAc;iBACT,IAAI,CAAA,GAAA,wBAAO,EAAE,QAClB,IAAI,CAAC,MAAM,CAAC,CAAA,GAAA,wCAAM,EAAE,OAAO;iBACtB,IAAI,CAAA,GAAA,6BAAY,EAAE,UAAU,iBAAiB,MAAM;gBACxD,MAAM,MAAM,CAAA,GAAA,mBAAE,EAAE,KAAK,IAAI,CAAC,IAAI;gBAC9B,IAAI,CAAC,MAAM,CAAC;gBACZ,IAAI,CAAC,KAAK;YACZ;QACF;QAEA,oDAAoD;QACpD,IAAI,CAAC,aACH,OAAO;QAGT,OAAO,CAAA,GAAA,yCAAO,EAAE,UAAU,GAAG,CAAC,SAAU,KAAK;YAC3C,IAAI,IAAI,CAAC,QAAQ,EACf,IAAI,CAAC,MAAM;iBACN,IAAI,CAAA,GAAA,6BAAY,EAAE,UAAU,kBAAkB,OAAO;gBAC1D,MAAM,aAAa,KAAK,CAAC,eAAe;gBACxC,MAAM,cAAc,CAAA,GAAA,uBAAM,EAAE,cAAc,aAAa;oBAAC;iBAAW;gBAEnE,wDAAwD;gBACxD,IAAI,SAAkC,CAAC;gBACvC,IAAK,MAAM,OAAO,MAChB,IAAI,QAAQ,gBACV,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;gBAI5B,6DAA6D;gBAC7D,KAAK,MAAM,iBAAiB,YAC1B,oCAAoC;gBACpC,IAAI,CAAA,GAAA,6BAAY,EAAE,gBAChB,SAAS,CAAA,GAAA,0CAAQ,EAAE,QAAQ;gBAK/B,IAAI,CAAC,MAAM,CAAC;YACd;QACF;IACF;IAEA,MAAM,IAAI,MAAM;AAClB;;;IDnEA,2CAAe,CAAA,GAAA,wCAAkB","sources":["index.ts","replacePlaceholders.ts","replace.ts"],"sourcesContent":["import replacePlaceholders from './replacePlaceholders';\nexport default replacePlaceholders;\n","import deepmerge from 'deepmerge'\nimport { get, isArray, isArrayBuffer, isPlainObject, isString } from 'lodash-es'\nimport traverse from 'traverse'\nimport replace from './replace'\nexport default function replacePlaceholders<T>(\n obj: T extends string | string[] | Record<string, unknown> ? T : never,\n context: Record<string, unknown>\n): T {\n if (isString(obj)) {\n return replace(obj, context) as T\n }\n\n if (isArray(obj)) {\n return obj.map(item => replacePlaceholders(item, context)) as T\n }\n\n if (isPlainObject(obj)) {\n // First pass: replace all string placeholders and track if $truto_merge exists\n let hasMergeKey = false\n const replaced = traverse(obj).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n hasMergeKey = true\n } else if (isString(value)) {\n this.update(replace(value, context))\n } else if (isArrayBuffer(value) || value instanceof Blob) {\n const val = get(obj, this.path)\n this.update(val)\n this.block()\n }\n })\n\n // Second pass: handle $truto_merge (only if needed)\n if (!hasMergeKey) {\n return replaced as T\n }\n\n return traverse(replaced).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n const mergeValue = value['$truto_merge']\n const mergeValues = isArray(mergeValue) ? mergeValue : [mergeValue]\n\n // Start with the base object (without $truto_merge key)\n let result: Record<string, unknown> = {}\n for (const key in value) {\n if (key !== '$truto_merge') {\n result[key] = value[key]\n }\n }\n\n // Merge each resolved value (already resolved in first pass)\n for (const resolvedValue of mergeValues) {\n // Only merge if it's a plain object\n if (isPlainObject(resolvedValue)) {\n result = deepmerge(result, resolvedValue as Record<string, unknown>)\n }\n // Skip if it's undefined, null, a string (unresolved placeholder), or any non-object\n }\n\n this.update(result)\n }\n }) as T\n }\n\n throw new Error('Invalid type')\n}\n","import { isArray, isPlainObject, isString, toString, trim } from 'lodash-es'\nimport { get as getWild } from 'wild-wild-path'\n\nfunction replace(\n str = '',\n obj: object = {}\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n const regex = /{{([\\w-./|:?\\s]+)}}/gi\n const typeSplitRegex = /:(?=[\\w\\s]+)/gm\n const matches = str.match(regex)\n let result: string | any = str\n\n if (matches) {\n matches.forEach(match => {\n const [matchStr, defaultStr] = match.slice(2, -2).split('?:')\n const parts = matchStr.split('|')\n const isNullAllowed = parts.some(part => part.includes(':null'))\n const ignoreEmptyString = parts.some(part =>\n part.includes(':ignore-empty-str')\n )\n const setUndefined = parts.some(part => part.includes(':undefined'))\n\n const isWholeString = match === str\n\n let value: any = undefined\n for (const part of parts) {\n const [path, ...typeParts] = part.split(typeSplitRegex)\n const type: string = (typeParts[0] || 'str').trim()\n\n const tempValue = getWild(obj, path.trim())\n if (tempValue === '' && ignoreEmptyString) {\n continue\n }\n if (tempValue !== undefined) {\n value = typeCast(tempValue, type, isWholeString)\n break\n }\n }\n\n if (value === undefined && defaultStr) {\n const [defaultValue, defaultType] = defaultStr.split(typeSplitRegex)\n const type = defaultType || 'str'\n value = typeCast(defaultValue, type, isWholeString)\n } else if (value === undefined) {\n if (setUndefined) {\n if (isWholeString) {\n value = undefined\n } else {\n value = ''\n }\n } else if (isNullAllowed) {\n value = null\n } else {\n value = match // Keep the placeholder intact\n }\n }\n\n if (match === str) {\n result = value\n } else {\n result = result.replace(match, value)\n }\n })\n }\n\n return result\n}\n\nfunction typeCast(\n value: unknown,\n type: string,\n isWholeString: boolean\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n if (value === undefined || value === null) return value\n\n let valueToCheck = value\n if (isString(value) && type !== 'str') {\n valueToCheck = trim(value)\n }\n\n if (\n valueToCheck instanceof Blob ||\n valueToCheck instanceof ReadableStream ||\n valueToCheck instanceof WritableStream ||\n valueToCheck instanceof TransformStream\n ) {\n return valueToCheck\n }\n\n let castValue: any\n switch (type) {\n case 'ignore-empty-str':\n return valueToCheck\n case 'undefined':\n return valueToCheck\n case 'null':\n if (valueToCheck === 'null' || valueToCheck === null) return null\n return isWholeString ? valueToCheck : 'null'\n case 'int':\n castValue = parseInt(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'num':\n castValue = parseFloat(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'str':\n return toString(value)\n case 'bool':\n if (valueToCheck === 'true' || valueToCheck === true) return true\n if (valueToCheck === 'false' || valueToCheck === false) return false\n return valueToCheck // Return the original value if it's not 'true' or 'false'\n case 'json':\n if (isWholeString) {\n if (isPlainObject(valueToCheck) || isArray(valueToCheck))\n return valueToCheck\n try {\n return JSON.parse(valueToCheck as string)\n } catch (err) {\n return valueToCheck\n }\n }\n return valueToCheck\n case 'any':\n return valueToCheck\n default:\n throw new Error(`Unsupported type: ${type}`)\n }\n}\n\nexport default replace\n"],"names":[],"version":3,"file":"main.cjs.map"}
package/dist/module.js CHANGED
@@ -8,24 +8,24 @@ import {get as $hCgyA$get1} from "wild-wild-path";
8
8
 
9
9
 
10
10
 
11
- function $67f2b908c91abfcc$var$replace(str = "", obj = {}) {
11
+ function $67f2b908c91abfcc$var$replace(str = '', obj = {}) {
12
12
  const regex = /{{([\w-./|:?\s]+)}}/gi;
13
13
  const typeSplitRegex = /:(?=[\w\s]+)/gm;
14
14
  const matches = str.match(regex);
15
15
  let result = str;
16
16
  if (matches) matches.forEach((match)=>{
17
- const [matchStr, defaultStr] = match.slice(2, -2).split("?:");
18
- const parts = matchStr.split("|");
19
- const isNullAllowed = parts.some((part)=>part.includes(":null"));
20
- const ignoreEmptyString = parts.some((part)=>part.includes(":ignore-empty-str"));
21
- const setUndefined = parts.some((part)=>part.includes(":undefined"));
17
+ const [matchStr, defaultStr] = match.slice(2, -2).split('?:');
18
+ const parts = matchStr.split('|');
19
+ const isNullAllowed = parts.some((part)=>part.includes(':null'));
20
+ const ignoreEmptyString = parts.some((part)=>part.includes(':ignore-empty-str'));
21
+ const setUndefined = parts.some((part)=>part.includes(':undefined'));
22
22
  const isWholeString = match === str;
23
23
  let value = undefined;
24
24
  for (const part of parts){
25
25
  const [path, ...typeParts] = part.split(typeSplitRegex);
26
- const type = (typeParts[0] || "str").trim();
26
+ const type = (typeParts[0] || 'str').trim();
27
27
  const tempValue = (0, $hCgyA$get1)(obj, path.trim());
28
- if (tempValue === "" && ignoreEmptyString) continue;
28
+ if (tempValue === '' && ignoreEmptyString) continue;
29
29
  if (tempValue !== undefined) {
30
30
  value = $67f2b908c91abfcc$var$typeCast(tempValue, type, isWholeString);
31
31
  break;
@@ -33,12 +33,12 @@ function $67f2b908c91abfcc$var$replace(str = "", obj = {}) {
33
33
  }
34
34
  if (value === undefined && defaultStr) {
35
35
  const [defaultValue, defaultType] = defaultStr.split(typeSplitRegex);
36
- const type = defaultType || "str";
36
+ const type = defaultType || 'str';
37
37
  value = $67f2b908c91abfcc$var$typeCast(defaultValue, type, isWholeString);
38
38
  } else if (value === undefined) {
39
39
  if (setUndefined) {
40
40
  if (isWholeString) value = undefined;
41
- else value = "";
41
+ else value = '';
42
42
  } else if (isNullAllowed) value = null;
43
43
  else value = match // Keep the placeholder intact
44
44
  ;
@@ -51,31 +51,31 @@ function $67f2b908c91abfcc$var$replace(str = "", obj = {}) {
51
51
  function $67f2b908c91abfcc$var$typeCast(value, type, isWholeString) {
52
52
  if (value === undefined || value === null) return value;
53
53
  let valueToCheck = value;
54
- if ((0, $hCgyA$isString)(value) && type !== "str") valueToCheck = (0, $hCgyA$trim)(value);
54
+ if ((0, $hCgyA$isString)(value) && type !== 'str') valueToCheck = (0, $hCgyA$trim)(value);
55
55
  if (valueToCheck instanceof Blob || valueToCheck instanceof ReadableStream || valueToCheck instanceof WritableStream || valueToCheck instanceof TransformStream) return valueToCheck;
56
56
  let castValue;
57
57
  switch(type){
58
- case "ignore-empty-str":
58
+ case 'ignore-empty-str':
59
59
  return valueToCheck;
60
- case "undefined":
60
+ case 'undefined':
61
61
  return valueToCheck;
62
- case "null":
63
- if (valueToCheck === "null" || valueToCheck === null) return null;
64
- return isWholeString ? valueToCheck : "null";
65
- case "int":
62
+ case 'null':
63
+ if (valueToCheck === 'null' || valueToCheck === null) return null;
64
+ return isWholeString ? valueToCheck : 'null';
65
+ case 'int':
66
66
  castValue = parseInt(valueToCheck);
67
67
  return isNaN(castValue) ? valueToCheck : castValue;
68
- case "num":
68
+ case 'num':
69
69
  castValue = parseFloat(valueToCheck);
70
70
  return isNaN(castValue) ? valueToCheck : castValue;
71
- case "str":
71
+ case 'str':
72
72
  return (0, $hCgyA$toString)(value);
73
- case "bool":
74
- if (valueToCheck === "true" || valueToCheck === true) return true;
75
- if (valueToCheck === "false" || valueToCheck === false) return false;
73
+ case 'bool':
74
+ if (valueToCheck === 'true' || valueToCheck === true) return true;
75
+ if (valueToCheck === 'false' || valueToCheck === false) return false;
76
76
  return valueToCheck // Return the original value if it's not 'true' or 'false'
77
77
  ;
78
- case "json":
78
+ case 'json':
79
79
  if (isWholeString) {
80
80
  if ((0, $hCgyA$isPlainObject)(valueToCheck) || (0, $hCgyA$isArray)(valueToCheck)) return valueToCheck;
81
81
  try {
@@ -85,7 +85,7 @@ function $67f2b908c91abfcc$var$typeCast(value, type, isWholeString) {
85
85
  }
86
86
  }
87
87
  return valueToCheck;
88
- case "any":
88
+ case 'any':
89
89
  return valueToCheck;
90
90
  default:
91
91
  throw new Error(`Unsupported type: ${type}`);
@@ -102,7 +102,7 @@ function $4e62acd4800cacd9$export$2e2bcd8739ae039(obj, context) {
102
102
  let hasMergeKey = false;
103
103
  const replaced = (0, $hCgyA$traverse)(obj).map(function(value) {
104
104
  if (this.circular) this.remove();
105
- else if ((0, $hCgyA$isPlainObject)(value) && "$truto_merge" in value) hasMergeKey = true;
105
+ else if ((0, $hCgyA$isPlainObject)(value) && '$truto_merge' in value) hasMergeKey = true;
106
106
  else if ((0, $hCgyA$isString)(value)) this.update((0, $67f2b908c91abfcc$export$2e2bcd8739ae039)(value, context));
107
107
  else if ((0, $hCgyA$isArrayBuffer)(value) || value instanceof Blob) {
108
108
  const val = (0, $hCgyA$get)(obj, this.path);
@@ -114,14 +114,14 @@ function $4e62acd4800cacd9$export$2e2bcd8739ae039(obj, context) {
114
114
  if (!hasMergeKey) return replaced;
115
115
  return (0, $hCgyA$traverse)(replaced).map(function(value) {
116
116
  if (this.circular) this.remove();
117
- else if ((0, $hCgyA$isPlainObject)(value) && "$truto_merge" in value) {
118
- const mergeValue = value["$truto_merge"];
117
+ else if ((0, $hCgyA$isPlainObject)(value) && '$truto_merge' in value) {
118
+ const mergeValue = value['$truto_merge'];
119
119
  const mergeValues = (0, $hCgyA$isArray)(mergeValue) ? mergeValue : [
120
120
  mergeValue
121
121
  ];
122
122
  // Start with the base object (without $truto_merge key)
123
123
  let result = {};
124
- for(const key in value)if (key !== "$truto_merge") result[key] = value[key];
124
+ for(const key in value)if (key !== '$truto_merge') result[key] = value[key];
125
125
  // Merge each resolved value (already resolved in first pass)
126
126
  for (const resolvedValue of mergeValues)// Only merge if it's a plain object
127
127
  if ((0, $hCgyA$isPlainObject)(resolvedValue)) result = (0, $hCgyA$deepmerge)(result, resolvedValue);
@@ -129,7 +129,7 @@ function $4e62acd4800cacd9$export$2e2bcd8739ae039(obj, context) {
129
129
  }
130
130
  });
131
131
  }
132
- throw new Error("Invalid type");
132
+ throw new Error('Invalid type');
133
133
  }
134
134
 
135
135
 
@@ -1 +1 @@
1
- {"mappings":"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","sources":["index.ts","replacePlaceholders.ts","replace.ts"],"sourcesContent":["import replacePlaceholders from './replacePlaceholders';\nexport default replacePlaceholders;\n","import deepmerge from 'deepmerge'\nimport { get, isArray, isArrayBuffer, isPlainObject, isString } from 'lodash-es'\nimport traverse from 'traverse'\nimport replace from './replace'\nexport default function replacePlaceholders<T>(\n obj: T extends string | string[] | Record<string, unknown> ? T : never,\n context: Record<string, unknown>\n): T {\n if (isString(obj)) {\n return replace(obj, context) as T\n }\n\n if (isArray(obj)) {\n return obj.map(item => replacePlaceholders(item, context)) as T\n }\n\n if (isPlainObject(obj)) {\n // First pass: replace all string placeholders and track if $truto_merge exists\n let hasMergeKey = false\n const replaced = traverse(obj).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n hasMergeKey = true\n } else if (isString(value)) {\n this.update(replace(value, context))\n } else if (isArrayBuffer(value) || value instanceof Blob) {\n const val = get(obj, this.path)\n this.update(val)\n this.block()\n }\n })\n\n // Second pass: handle $truto_merge (only if needed)\n if (!hasMergeKey) {\n return replaced as T\n }\n\n return traverse(replaced).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n const mergeValue = value['$truto_merge']\n const mergeValues = isArray(mergeValue) ? mergeValue : [mergeValue]\n\n // Start with the base object (without $truto_merge key)\n let result: Record<string, unknown> = {}\n for (const key in value) {\n if (key !== '$truto_merge') {\n result[key] = value[key]\n }\n }\n\n // Merge each resolved value (already resolved in first pass)\n for (const resolvedValue of mergeValues) {\n // Only merge if it's a plain object\n if (isPlainObject(resolvedValue)) {\n result = deepmerge(result, resolvedValue as Record<string, unknown>)\n }\n // Skip if it's undefined, null, a string (unresolved placeholder), or any non-object\n }\n\n this.update(result)\n }\n }) as T\n }\n\n throw new Error('Invalid type')\n}\n","import { isArray, isPlainObject, isString, toString, trim } from 'lodash-es'\nimport { get as getWild } from 'wild-wild-path'\n\nfunction replace(\n str = '',\n obj: object = {}\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n const regex = /{{([\\w-./|:?\\s]+)}}/gi\n const typeSplitRegex = /:(?=[\\w\\s]+)/gm\n const matches = str.match(regex)\n let result: string | any = str\n\n if (matches) {\n matches.forEach(match => {\n const [matchStr, defaultStr] = match.slice(2, -2).split('?:')\n const parts = matchStr.split('|')\n const isNullAllowed = parts.some(part => part.includes(':null'))\n const ignoreEmptyString = parts.some(part =>\n part.includes(':ignore-empty-str')\n )\n const setUndefined = parts.some(part => part.includes(':undefined'))\n\n const isWholeString = match === str\n\n let value: any = undefined\n for (const part of parts) {\n const [path, ...typeParts] = part.split(typeSplitRegex)\n const type: string = (typeParts[0] || 'str').trim()\n\n const tempValue = getWild(obj, path.trim())\n if (tempValue === '' && ignoreEmptyString) {\n continue\n }\n if (tempValue !== undefined) {\n value = typeCast(tempValue, type, isWholeString)\n break\n }\n }\n\n if (value === undefined && defaultStr) {\n const [defaultValue, defaultType] = defaultStr.split(typeSplitRegex)\n const type = defaultType || 'str'\n value = typeCast(defaultValue, type, isWholeString)\n } else if (value === undefined) {\n if (setUndefined) {\n if (isWholeString) {\n value = undefined\n } else {\n value = ''\n }\n } else if (isNullAllowed) {\n value = null\n } else {\n value = match // Keep the placeholder intact\n }\n }\n\n if (match === str) {\n result = value\n } else {\n result = result.replace(match, value)\n }\n })\n }\n\n return result\n}\n\nfunction typeCast(\n value: unknown,\n type: string,\n isWholeString: boolean\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n if (value === undefined || value === null) return value\n\n let valueToCheck = value\n if (isString(value) && type !== 'str') {\n valueToCheck = trim(value)\n }\n\n if (\n valueToCheck instanceof Blob ||\n valueToCheck instanceof ReadableStream ||\n valueToCheck instanceof WritableStream ||\n valueToCheck instanceof TransformStream\n ) {\n return valueToCheck\n }\n\n let castValue: any\n switch (type) {\n case 'ignore-empty-str':\n return valueToCheck\n case 'undefined':\n return valueToCheck\n case 'null':\n if (valueToCheck === 'null' || valueToCheck === null) return null\n return isWholeString ? valueToCheck : 'null'\n case 'int':\n castValue = parseInt(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'num':\n castValue = parseFloat(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'str':\n return toString(value)\n case 'bool':\n if (valueToCheck === 'true' || valueToCheck === true) return true\n if (valueToCheck === 'false' || valueToCheck === false) return false\n return valueToCheck // Return the original value if it's not 'true' or 'false'\n case 'json':\n if (isWholeString) {\n if (isPlainObject(valueToCheck) || isArray(valueToCheck))\n return valueToCheck\n try {\n return JSON.parse(valueToCheck as string)\n } catch (err) {\n return valueToCheck\n }\n }\n return valueToCheck\n case 'any':\n return valueToCheck\n default:\n throw new Error(`Unsupported type: ${type}`)\n }\n}\n\nexport default replace\n"],"names":[],"version":3,"file":"module.js.map"}
1
+ {"mappings":"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","sources":["index.ts","replacePlaceholders.ts","replace.ts"],"sourcesContent":["import replacePlaceholders from './replacePlaceholders';\nexport default replacePlaceholders;\n","import deepmerge from 'deepmerge'\nimport { get, isArray, isArrayBuffer, isPlainObject, isString } from 'lodash-es'\nimport traverse from 'traverse'\nimport replace from './replace'\nexport default function replacePlaceholders<T>(\n obj: T extends string | string[] | Record<string, unknown> ? T : never,\n context: Record<string, unknown>\n): T {\n if (isString(obj)) {\n return replace(obj, context) as T\n }\n\n if (isArray(obj)) {\n return obj.map(item => replacePlaceholders(item, context)) as T\n }\n\n if (isPlainObject(obj)) {\n // First pass: replace all string placeholders and track if $truto_merge exists\n let hasMergeKey = false\n const replaced = traverse(obj).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n hasMergeKey = true\n } else if (isString(value)) {\n this.update(replace(value, context))\n } else if (isArrayBuffer(value) || value instanceof Blob) {\n const val = get(obj, this.path)\n this.update(val)\n this.block()\n }\n })\n\n // Second pass: handle $truto_merge (only if needed)\n if (!hasMergeKey) {\n return replaced as T\n }\n\n return traverse(replaced).map(function (value) {\n if (this.circular) {\n this.remove()\n } else if (isPlainObject(value) && '$truto_merge' in value) {\n const mergeValue = value['$truto_merge']\n const mergeValues = isArray(mergeValue) ? mergeValue : [mergeValue]\n\n // Start with the base object (without $truto_merge key)\n let result: Record<string, unknown> = {}\n for (const key in value) {\n if (key !== '$truto_merge') {\n result[key] = value[key]\n }\n }\n\n // Merge each resolved value (already resolved in first pass)\n for (const resolvedValue of mergeValues) {\n // Only merge if it's a plain object\n if (isPlainObject(resolvedValue)) {\n result = deepmerge(result, resolvedValue as Record<string, unknown>)\n }\n // Skip if it's undefined, null, a string (unresolved placeholder), or any non-object\n }\n\n this.update(result)\n }\n }) as T\n }\n\n throw new Error('Invalid type')\n}\n","import { isArray, isPlainObject, isString, toString, trim } from 'lodash-es'\nimport { get as getWild } from 'wild-wild-path'\n\nfunction replace(\n str = '',\n obj: object = {}\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n const regex = /{{([\\w-./|:?\\s]+)}}/gi\n const typeSplitRegex = /:(?=[\\w\\s]+)/gm\n const matches = str.match(regex)\n let result: string | any = str\n\n if (matches) {\n matches.forEach(match => {\n const [matchStr, defaultStr] = match.slice(2, -2).split('?:')\n const parts = matchStr.split('|')\n const isNullAllowed = parts.some(part => part.includes(':null'))\n const ignoreEmptyString = parts.some(part =>\n part.includes(':ignore-empty-str')\n )\n const setUndefined = parts.some(part => part.includes(':undefined'))\n\n const isWholeString = match === str\n\n let value: any = undefined\n for (const part of parts) {\n const [path, ...typeParts] = part.split(typeSplitRegex)\n const type: string = (typeParts[0] || 'str').trim()\n\n const tempValue = getWild(obj, path.trim())\n if (tempValue === '' && ignoreEmptyString) {\n continue\n }\n if (tempValue !== undefined) {\n value = typeCast(tempValue, type, isWholeString)\n break\n }\n }\n\n if (value === undefined && defaultStr) {\n const [defaultValue, defaultType] = defaultStr.split(typeSplitRegex)\n const type = defaultType || 'str'\n value = typeCast(defaultValue, type, isWholeString)\n } else if (value === undefined) {\n if (setUndefined) {\n if (isWholeString) {\n value = undefined\n } else {\n value = ''\n }\n } else if (isNullAllowed) {\n value = null\n } else {\n value = match // Keep the placeholder intact\n }\n }\n\n if (match === str) {\n result = value\n } else {\n result = result.replace(match, value)\n }\n })\n }\n\n return result\n}\n\nfunction typeCast(\n value: unknown,\n type: string,\n isWholeString: boolean\n):\n | string\n | number\n | boolean\n | Record<string, unknown>\n | null\n | undefined\n | unknown {\n if (value === undefined || value === null) return value\n\n let valueToCheck = value\n if (isString(value) && type !== 'str') {\n valueToCheck = trim(value)\n }\n\n if (\n valueToCheck instanceof Blob ||\n valueToCheck instanceof ReadableStream ||\n valueToCheck instanceof WritableStream ||\n valueToCheck instanceof TransformStream\n ) {\n return valueToCheck\n }\n\n let castValue: any\n switch (type) {\n case 'ignore-empty-str':\n return valueToCheck\n case 'undefined':\n return valueToCheck\n case 'null':\n if (valueToCheck === 'null' || valueToCheck === null) return null\n return isWholeString ? valueToCheck : 'null'\n case 'int':\n castValue = parseInt(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'num':\n castValue = parseFloat(valueToCheck as string)\n return isNaN(castValue) ? valueToCheck : castValue\n case 'str':\n return toString(value)\n case 'bool':\n if (valueToCheck === 'true' || valueToCheck === true) return true\n if (valueToCheck === 'false' || valueToCheck === false) return false\n return valueToCheck // Return the original value if it's not 'true' or 'false'\n case 'json':\n if (isWholeString) {\n if (isPlainObject(valueToCheck) || isArray(valueToCheck))\n return valueToCheck\n try {\n return JSON.parse(valueToCheck as string)\n } catch (err) {\n return valueToCheck\n }\n }\n return valueToCheck\n case 'any':\n return valueToCheck\n default:\n throw new Error(`Unsupported type: ${type}`)\n }\n}\n\nexport default replace\n"],"names":[],"version":3,"file":"module.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truto/replace-placeholders",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Efficiently replace placeholders in strings, arrays, and objects using data from specified paths. Powered by 'wild-wild-path' and 'lodash' for robust functionality.",
5
5
  "repository": "https://github.com/trutohq/replace-placeholders.git",
6
6
  "dependencies": {
@@ -37,22 +37,22 @@
37
37
  "yarn": "1.22.19"
38
38
  },
39
39
  "devDependencies": {
40
- "@parcel/packager-ts": "2.8.3",
41
- "@parcel/transformer-typescript-types": "2.8.3",
40
+ "@parcel/packager-ts": "2.16.3",
41
+ "@parcel/transformer-typescript-types": "2.16.3",
42
42
  "@types/deepmerge": "2.2.3",
43
43
  "@types/lodash-es": "4.17.7",
44
44
  "@types/traverse": "0.6.32",
45
45
  "@cloudflare/workers-types": "4.20250214.0",
46
46
  "@typescript-eslint/eslint-plugin": "5.46.1",
47
47
  "@typescript-eslint/parser": "5.46.1",
48
- "eslint": "8.29.0",
48
+ "eslint": "8.57.1",
49
49
  "eslint-config-prettier": "8.5.0",
50
50
  "eslint-plugin-prettier": "4.2.1",
51
- "parcel": "2.8.3",
51
+ "parcel": "2.16.3",
52
52
  "prettier": "2.8.4",
53
53
  "ts-node": "10.9.1",
54
54
  "typescript": "4.9.5",
55
- "vitest": "0.34.2"
55
+ "vitest": "0.34.6"
56
56
  },
57
57
  "private": false,
58
58
  "publishConfig": {
@@ -66,6 +66,11 @@
66
66
  "test": "vitest"
67
67
  },
68
68
  "resolutions": {
69
- "postcss": "npm:postcss@8.4.31"
69
+ "postcss": "npm:postcss@8.4.31",
70
+ "esbuild": "npm:esbuild@0.27.2",
71
+ "vite": "npm:vite@5.4.21",
72
+ "js-yaml": "npm:js-yaml@4.1.1",
73
+ "base-x": "npm:base-x@5.0.1",
74
+ "brace-expansion": "npm:brace-expansion@1.1.12"
70
75
  }
71
- }
76
+ }