paraphrase 3.1.1 → 3.1.3
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/{types/index.d.ts → index.d.ts} +9 -8
- package/index.js +21 -39
- package/index.js.map +1 -7
- package/index.mjs +17 -36
- package/index.mjs.map +1 -7
- package/package.json +9 -10
|
@@ -34,11 +34,12 @@ interface Phraser {
|
|
|
34
34
|
*
|
|
35
35
|
* phraser('Hello, ${name}', {name: 'Martin'})
|
|
36
36
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
declare function paraphrase(...args: (RegExp | RegExp[] | IParaphraseOptions)[]): Phraser;
|
|
38
|
+
declare const dollar: Phraser;
|
|
39
|
+
declare const double: Phraser;
|
|
40
|
+
declare const single: Phraser;
|
|
41
|
+
declare const percent: Phraser;
|
|
42
|
+
declare const hash: Phraser;
|
|
43
|
+
declare const loose: Phraser;
|
|
44
|
+
|
|
45
|
+
export { dollar, double, hash, loose, paraphrase, percent, single };
|
package/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -17,8 +18,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
19
|
|
|
19
20
|
// src/index.ts
|
|
20
|
-
var
|
|
21
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
22
23
|
dollar: () => dollar,
|
|
23
24
|
double: () => double,
|
|
24
25
|
hash: () => hash,
|
|
@@ -27,7 +28,7 @@ __export(src_exports, {
|
|
|
27
28
|
percent: () => percent,
|
|
28
29
|
single: () => single
|
|
29
30
|
});
|
|
30
|
-
module.exports = __toCommonJS(
|
|
31
|
+
module.exports = __toCommonJS(index_exports);
|
|
31
32
|
|
|
32
33
|
// src/notate/index.ts
|
|
33
34
|
function notate(source, string = "") {
|
|
@@ -46,28 +47,11 @@ function notate(source, string = "") {
|
|
|
46
47
|
var isObject = (obj) => `${obj}` === "[object Object]";
|
|
47
48
|
|
|
48
49
|
// src/flavours/index.ts
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Template: 'Hello, {{name}}'
|
|
56
|
-
*/
|
|
57
|
-
double: /{{([^{}]*)}}/gm,
|
|
58
|
-
/**
|
|
59
|
-
* Template: 'Hello, {name}'
|
|
60
|
-
*/
|
|
61
|
-
single: /{([^{}]*)}/gm,
|
|
62
|
-
/**
|
|
63
|
-
* Template: 'Hello, #{name}'
|
|
64
|
-
*/
|
|
65
|
-
hash: /#{([^{}]*)}/gm,
|
|
66
|
-
/**
|
|
67
|
-
* Template: 'Hello, %{name}'
|
|
68
|
-
*/
|
|
69
|
-
percent: /%{([^{}]*)}/gm
|
|
70
|
-
};
|
|
50
|
+
var dollarPattern = /\${([^{}]*)}/gm;
|
|
51
|
+
var doublePattern = /{{([^{}]*)}}/gm;
|
|
52
|
+
var singlePattern = /{([^{}]*)}/gm;
|
|
53
|
+
var hashPattern = /#{([^{}]*)}/gm;
|
|
54
|
+
var percentPattern = /%{([^{}]*)}/gm;
|
|
71
55
|
|
|
72
56
|
// src/index.ts
|
|
73
57
|
var VALID_RESULT_TYPES = Object.seal([
|
|
@@ -91,9 +75,7 @@ function paraphrase(...args) {
|
|
|
91
75
|
`paraphrase expects first argument to be a string, got a ${typeof string} (${string})`
|
|
92
76
|
);
|
|
93
77
|
}
|
|
94
|
-
if (!data)
|
|
95
|
-
return string;
|
|
96
|
-
}
|
|
78
|
+
if (!data) return string;
|
|
97
79
|
if (VALID_RESULT_TYPES.includes(typeof data)) {
|
|
98
80
|
data = [data, ...replacements];
|
|
99
81
|
}
|
|
@@ -112,17 +94,17 @@ function paraphrase(...args) {
|
|
|
112
94
|
});
|
|
113
95
|
return phraser;
|
|
114
96
|
}
|
|
115
|
-
var dollar = paraphrase(
|
|
116
|
-
var double = paraphrase(
|
|
117
|
-
var single = paraphrase(
|
|
118
|
-
var percent = paraphrase(
|
|
119
|
-
var hash = paraphrase(
|
|
97
|
+
var dollar = paraphrase(dollarPattern);
|
|
98
|
+
var double = paraphrase(doublePattern);
|
|
99
|
+
var single = paraphrase(singlePattern);
|
|
100
|
+
var percent = paraphrase(percentPattern);
|
|
101
|
+
var hash = paraphrase(hashPattern);
|
|
120
102
|
var loose = paraphrase(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
103
|
+
dollarPattern,
|
|
104
|
+
doublePattern,
|
|
105
|
+
percentPattern,
|
|
106
|
+
hashPattern,
|
|
107
|
+
singlePattern
|
|
126
108
|
);
|
|
127
109
|
// Annotate the CommonJS export names for ESM import in node:
|
|
128
110
|
0 && (module.exports = {
|
|
@@ -134,4 +116,4 @@ var loose = paraphrase(
|
|
|
134
116
|
percent,
|
|
135
117
|
single
|
|
136
118
|
});
|
|
137
|
-
//# sourceMappingURL=index.js.map
|
|
119
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/index.ts", "src/notate/index.ts", "src/isObject/index.ts", "src/flavours/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { notate } from \"./notate/index\";\nimport { isObject } from \"./isObject/index\";\nimport { flavours } from \"./flavours/index\";\n\n/**\n * Valid types of results for the interpolated string\n */\nconst VALID_RESULT_TYPES: [\"string\", \"number\"] = Object.seal([\n \"string\",\n \"number\",\n]);\n\ninterface IParaphraseOptions {\n /**\n * Should continue to resolve result string until replacements have been exhausted\n */\n recursive?: boolean;\n /**\n * Should resolve dot notation within template\n */\n resolve?: boolean;\n /**\n * Should remove unmatched template instances\n */\n clean?: boolean;\n}\n\ninterface Phraser {\n (\n /**\n * Template string to parse\n */\n string: string | undefined,\n /**\n * Data to use for interpolation, preferrably an object, but an array will work too, and a primitive values will be treated as an array of \"...rest\" arguments\n */\n ...data: (Record<string, any> | any)[]\n ): string;\n patterns: RegExp[];\n}\n\n/**\n * Create new paraphrase method instance\n * @param {...RegExp[]} replacers[] One or more patterns to use for string replacement\n * @param {IParaphraseOptions} [options] The last argument can be an options object\n * @returns {Phraser} phraser function instance\n *\n * @example const phraser = paraphrase(/\\${([^{}]*)}/gm);\n *\n * phraser('Hello, ${name}', {name: 'Martin'})\n */\nexport function paraphrase(\n ...args: (RegExp | RegExp[] | IParaphraseOptions)[]\n): Phraser {\n const options: IParaphraseOptions = {\n recursive: true,\n resolve: true,\n clean: false,\n };\n if (args.length && isObject(args[args.length - 1])) {\n Object.assign(options, args.pop() as IParaphraseOptions);\n }\n const patterns = args.flat().filter((arg) => arg instanceof RegExp);\n\n Object.freeze(patterns);\n\n /**\n * phraser description\n * @param {string} string Template\n * @param {Object|(string|number)} data Data for filling\n * @param {...(string|number)} replacements Replacement for filling\n * @return {string} Result\n */\n function phraser(\n string: string = \"\",\n data: string | number | Record<string, any>,\n ...replacements: (string | number)[]\n ): string {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `paraphrase expects first argument to be a string, got a ${typeof string} (${string})`\n );\n }\n\n if (!data) {\n return string;\n }\n\n if (VALID_RESULT_TYPES.includes(typeof data as any)) {\n data = [data, ...replacements];\n }\n\n /**\n * Replace method build with internal reference to the passed in data structure\n * @param {string} haystack The full string match\n * @param {string} needle The content to identify as data member\n * @return {string} Found value\n */\n function replace(haystack: string, needle: string): string {\n const replacement = options.resolve\n ? notate(data, needle.trim())\n : data[needle.trim()];\n\n return VALID_RESULT_TYPES.includes(typeof replacement as any)\n ? replacement\n : options.clean\n ? \"\"\n : haystack;\n }\n\n const result = (patterns as RegExp[]).reduce(\n (string: string, pattern: RegExp): string =>\n string.replace(pattern, replace),\n string\n );\n\n return !options.recursive || string === result\n ? result\n : phraser(result, data, ...replacements);\n }\n\n Object.defineProperty(phraser, \"patterns\", {\n get: () => patterns,\n });\n\n return phraser as Phraser;\n}\n\nexport const dollar = paraphrase(flavours.dollar);\nexport const double = paraphrase(flavours.double);\nexport const single = paraphrase(flavours.single);\nexport const percent = paraphrase(flavours.percent);\nexport const hash = paraphrase(flavours.hash);\nexport const loose = paraphrase(\n flavours.dollar,\n flavours.double,\n flavours.percent,\n flavours.hash,\n flavours.single\n);\n", "/**\n * Resolve dot notation strings\n *\n * @param {any} context Object to start notation search on (defaults to global scope)\n * @param {string} [string=''] Dot notation representation\n * @return {any} Whatever it finds / undefined\n *\n * @example\n * const obj = {\n * top_level: {\n * nested: {\n * value: 'My Value'\n * }\n * }\n * };\n *\n * notate(obj, 'top_level.nested.value');\n * // 'My Value'\n *\n * notate(obj, 'top_level.missing.value');\n * // undefined\n */\nexport function notate(source: any, string: string = \"\"): any {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `Expected notation query to be a string, instead got ${typeof string} (${string})`\n );\n }\n return string\n .split(\".\")\n .reduce(\n (previous, current) =>\n typeof previous === \"object\" && previous ? previous[current] : previous,\n source\n );\n}\n", "/**\n * Is this a basic object?\n * @param {any} obj Target to test\n * @return {boolean} true if object\n */\nexport const isObject = (obj: any): boolean => `${obj}` === \"[object Object]\";\n", "export const flavours: Record<string, RegExp> = {\n /**\n * Template: 'Hello, ${name}'\n */\n dollar: /\\${([^{}]*)}/gm,\n /**\n * Template: 'Hello, {{name}}'\n */\n double: /{{([^{}]*)}}/gm,\n /**\n * Template: 'Hello, {name}'\n */\n single: /{([^{}]*)}/gm,\n /**\n * Template: 'Hello, #{name}'\n */\n hash: /#{([^{}]*)}/gm,\n /**\n * Template: 'Hello, %{name}'\n */\n percent: /%{([^{}]*)}/gm,\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACsBO,SAAS,OAAO,QAAa,SAAiB,IAAS;AAC5D,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI;AAAA,MACR,uDAAuD,OAAO,WAAW;AAAA,IAC3E;AAAA,EACF;AACA,SAAO,OACJ,MAAM,GAAG,EACT;AAAA,IACC,CAAC,UAAU,YACT,OAAO,aAAa,YAAY,WAAW,SAAS,OAAO,IAAI;AAAA,IACjE;AAAA,EACF;AACJ;;;AC9BO,IAAM,WAAW,CAAC,QAAsB,GAAG,UAAU;;;ACLrD,IAAM,WAAmC;AAAA;AAAA;AAAA;AAAA,EAI9C,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,MAAM;AAAA;AAAA;AAAA;AAAA,EAIN,SAAS;AACX;;;AHdA,IAAM,qBAA2C,OAAO,KAAK;AAAA,EAC3D;AAAA,EACA;AACF,CAAC;AAyCM,SAAS,cACX,MACM;AACT,QAAM,UAA8B;AAAA,IAClC,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACA,MAAI,KAAK,UAAU,SAAS,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG;AAClD,WAAO,OAAO,SAAS,KAAK,IAAI,CAAuB;AAAA,EACzD;AACA,QAAM,WAAW,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,eAAe,MAAM;AAElE,SAAO,OAAO,QAAQ;AAStB,WAAS,QACP,SAAiB,IACjB,SACG,cACK;AACR,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI;AAAA,QACR,2DAA2D,OAAO,WAAW;AAAA,MAC/E;AAAA,IACF;AAEA,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QAAI,mBAAmB,SAAS,OAAO,IAAW,GAAG;AACnD,aAAO,CAAC,MAAM,GAAG,YAAY;AAAA,IAC/B;AAQA,aAAS,QAAQ,UAAkB,QAAwB;AACzD,YAAM,cAAc,QAAQ,UACxB,OAAO,MAAM,OAAO,KAAK,CAAC,IAC1B,KAAK,OAAO,KAAK,CAAC;AAEtB,aAAO,mBAAmB,SAAS,OAAO,WAAkB,IACxD,cACA,QAAQ,QACR,KACA;AAAA,IACN;AAEA,UAAM,SAAU,SAAsB;AAAA,MACpC,CAACA,SAAgB,YACfA,QAAO,QAAQ,SAAS,OAAO;AAAA,MACjC;AAAA,IACF;AAEA,WAAO,CAAC,QAAQ,aAAa,WAAW,SACpC,SACA,QAAQ,QAAQ,MAAM,GAAG,YAAY;AAAA,EAC3C;AAEA,SAAO,eAAe,SAAS,YAAY;AAAA,IACzC,KAAK,MAAM;AAAA,EACb,CAAC;AAED,SAAO;AACT;AAEO,IAAM,SAAS,WAAW,SAAS,MAAM;AACzC,IAAM,SAAS,WAAW,SAAS,MAAM;AACzC,IAAM,SAAS,WAAW,SAAS,MAAM;AACzC,IAAM,UAAU,WAAW,SAAS,OAAO;AAC3C,IAAM,OAAO,WAAW,SAAS,IAAI;AACrC,IAAM,QAAQ;AAAA,EACnB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;",
|
|
6
|
-
"names": ["string"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"sources":["src/index.ts","src/notate/index.ts","src/isObject/index.ts","src/flavours/index.ts"],"sourcesContent":["import { notate } from \"./notate/index.ts\";\nimport { isObject } from \"./isObject/index.ts\";\nimport {\n dollarPattern,\n doublePattern,\n percentPattern,\n hashPattern,\n singlePattern,\n} from \"./flavours/index.ts\";\n\n/**\n * Valid types of results for the interpolated string\n */\nconst VALID_RESULT_TYPES: [\"string\", \"number\"] = Object.seal([\n \"string\",\n \"number\",\n]);\n\ninterface IParaphraseOptions {\n /**\n * Should continue to resolve result string until replacements have been exhausted\n */\n recursive?: boolean;\n /**\n * Should resolve dot notation within template\n */\n resolve?: boolean;\n /**\n * Should remove unmatched template instances\n */\n clean?: boolean;\n}\n\ninterface Phraser {\n (\n /**\n * Template string to parse\n */\n string: string | undefined,\n /**\n * Data to use for interpolation, preferrably an object, but an array will work too, and a primitive values will be treated as an array of \"...rest\" arguments\n */\n ...data: (Record<string, any> | any)[]\n ): string;\n patterns: RegExp[];\n}\n\n/**\n * Create new paraphrase method instance\n * @param {...RegExp[]} replacers[] One or more patterns to use for string replacement\n * @param {IParaphraseOptions} [options] The last argument can be an options object\n * @returns {Phraser} phraser function instance\n *\n * @example const phraser = paraphrase(/\\${([^{}]*)}/gm);\n *\n * phraser('Hello, ${name}', {name: 'Martin'})\n */\nexport function paraphrase(\n ...args: (RegExp | RegExp[] | IParaphraseOptions)[]\n): Phraser {\n const options: IParaphraseOptions = {\n recursive: true,\n resolve: true,\n clean: false,\n };\n if (args.length && isObject(args[args.length - 1])) {\n Object.assign(options, args.pop() as IParaphraseOptions);\n }\n const patterns = args.flat().filter((arg) => arg instanceof RegExp);\n\n Object.freeze(patterns);\n\n /**\n * phraser description\n * @param {string} string Template\n * @param {Object|(string|number)} data Data for filling\n * @param {...(string|number)} replacements Replacement for filling\n * @return {string} Result\n */\n function phraser(\n string: string = \"\",\n data: string | number | Record<string, any>,\n ...replacements: (string | number)[]\n ): string {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `paraphrase expects first argument to be a string, got a ${typeof string} (${string})`,\n );\n }\n\n if (!data) return string;\n\n if (VALID_RESULT_TYPES.includes(typeof data as any)) {\n data = [data, ...replacements];\n }\n\n /**\n * Replace method build with internal reference to the passed in data structure\n * @param {string} haystack The full string match\n * @param {string} needle The content to identify as data member\n * @return {string} Found value\n */\n function replace(haystack: string, needle: string): string {\n const replacement = options.resolve\n ? notate(data, needle.trim())\n : (data as Record<string, any>)[needle.trim()];\n\n return VALID_RESULT_TYPES.includes(typeof replacement as any)\n ? replacement\n : options.clean\n ? \"\"\n : haystack;\n }\n\n const result = (patterns as RegExp[]).reduce(\n (string: string, pattern: RegExp): string =>\n string.replace(pattern, replace),\n string,\n );\n\n return !options.recursive || string === result\n ? result\n : phraser(result, data, ...replacements);\n }\n\n Object.defineProperty(phraser, \"patterns\", {\n get: () => patterns,\n });\n\n return phraser as Phraser;\n}\n\nexport const dollar = paraphrase(dollarPattern);\nexport const double = paraphrase(doublePattern);\nexport const single = paraphrase(singlePattern);\nexport const percent = paraphrase(percentPattern);\nexport const hash = paraphrase(hashPattern);\nexport const loose = paraphrase(\n dollarPattern,\n doublePattern,\n percentPattern,\n hashPattern,\n singlePattern,\n);\n","/**\n * Resolve dot notation strings\n *\n * @param {any} context Object to start notation search on (defaults to global scope)\n * @param {string} [string=''] Dot notation representation\n * @return {any} Whatever it finds / undefined\n *\n * @example\n * const obj = {\n * top_level: {\n * nested: {\n * value: 'My Value'\n * }\n * }\n * };\n *\n * notate(obj, 'top_level.nested.value');\n * // 'My Value'\n *\n * notate(obj, 'top_level.missing.value');\n * // undefined\n */\nexport function notate(source: any, string: string = \"\"): any {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `Expected notation query to be a string, instead got ${typeof string} (${string})`,\n );\n }\n return string\n .split(\".\")\n .reduce(\n (previous, current) =>\n typeof previous === \"object\" && previous ? previous[current] : previous,\n source,\n );\n}\n","/**\n * Is this a basic object?\n * @param {any} obj Target to test\n * @return {boolean} true if object\n */\nexport const isObject = (obj: any): boolean => `${obj}` === \"[object Object]\";\n","/**\n * Template: 'Hello, ${name}'\n */\nexport const dollarPattern = /\\${([^{}]*)}/gm;\n\n/**\n * Template: 'Hello, {{name}}'\n */\nexport const doublePattern = /{{([^{}]*)}}/gm;\n\n/**\n * Template: 'Hello, {name}'\n */\nexport const singlePattern = /{([^{}]*)}/gm;\n\n/**\n * Template: 'Hello, #{name}'\n */\nexport const hashPattern = /#{([^{}]*)}/gm;\n\n/**\n * Template: 'Hello, %{name}'\n */\nexport const percentPattern = /%{([^{}]*)}/gm;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACsBO,SAAS,OAAO,QAAa,SAAiB,IAAS;AAC5D,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI;AAAA,MACR,uDAAuD,OAAO,MAAM,KAAK,MAAM;AAAA,IACjF;AAAA,EACF;AACA,SAAO,OACJ,MAAM,GAAG,EACT;AAAA,IACC,CAAC,UAAU,YACT,OAAO,aAAa,YAAY,WAAW,SAAS,OAAO,IAAI;AAAA,IACjE;AAAA,EACF;AACJ;;;AC9BO,IAAM,WAAW,CAAC,QAAsB,GAAG,GAAG,OAAO;;;ACFrD,IAAM,gBAAgB;AAKtB,IAAM,gBAAgB;AAKtB,IAAM,gBAAgB;AAKtB,IAAM,cAAc;AAKpB,IAAM,iBAAiB;;;AHV9B,IAAM,qBAA2C,OAAO,KAAK;AAAA,EAC3D;AAAA,EACA;AACF,CAAC;AAyCM,SAAS,cACX,MACM;AACT,QAAM,UAA8B;AAAA,IAClC,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACA,MAAI,KAAK,UAAU,SAAS,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG;AAClD,WAAO,OAAO,SAAS,KAAK,IAAI,CAAuB;AAAA,EACzD;AACA,QAAM,WAAW,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,eAAe,MAAM;AAElE,SAAO,OAAO,QAAQ;AAStB,WAAS,QACP,SAAiB,IACjB,SACG,cACK;AACR,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI;AAAA,QACR,2DAA2D,OAAO,MAAM,KAAK,MAAM;AAAA,MACrF;AAAA,IACF;AAEA,QAAI,CAAC,KAAM,QAAO;AAElB,QAAI,mBAAmB,SAAS,OAAO,IAAW,GAAG;AACnD,aAAO,CAAC,MAAM,GAAG,YAAY;AAAA,IAC/B;AAQA,aAAS,QAAQ,UAAkB,QAAwB;AACzD,YAAM,cAAc,QAAQ,UACxB,OAAO,MAAM,OAAO,KAAK,CAAC,IACzB,KAA6B,OAAO,KAAK,CAAC;AAE/C,aAAO,mBAAmB,SAAS,OAAO,WAAkB,IACxD,cACA,QAAQ,QACN,KACA;AAAA,IACR;AAEA,UAAM,SAAU,SAAsB;AAAA,MACpC,CAACA,SAAgB,YACfA,QAAO,QAAQ,SAAS,OAAO;AAAA,MACjC;AAAA,IACF;AAEA,WAAO,CAAC,QAAQ,aAAa,WAAW,SACpC,SACA,QAAQ,QAAQ,MAAM,GAAG,YAAY;AAAA,EAC3C;AAEA,SAAO,eAAe,SAAS,YAAY;AAAA,IACzC,KAAK,MAAM;AAAA,EACb,CAAC;AAED,SAAO;AACT;AAEO,IAAM,SAAS,WAAW,aAAa;AACvC,IAAM,SAAS,WAAW,aAAa;AACvC,IAAM,SAAS,WAAW,aAAa;AACvC,IAAM,UAAU,WAAW,cAAc;AACzC,IAAM,OAAO,WAAW,WAAW;AACnC,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":["string"]}
|
package/index.mjs
CHANGED
|
@@ -15,28 +15,11 @@ function notate(source, string = "") {
|
|
|
15
15
|
var isObject = (obj) => `${obj}` === "[object Object]";
|
|
16
16
|
|
|
17
17
|
// src/flavours/index.ts
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Template: 'Hello, {{name}}'
|
|
25
|
-
*/
|
|
26
|
-
double: /{{([^{}]*)}}/gm,
|
|
27
|
-
/**
|
|
28
|
-
* Template: 'Hello, {name}'
|
|
29
|
-
*/
|
|
30
|
-
single: /{([^{}]*)}/gm,
|
|
31
|
-
/**
|
|
32
|
-
* Template: 'Hello, #{name}'
|
|
33
|
-
*/
|
|
34
|
-
hash: /#{([^{}]*)}/gm,
|
|
35
|
-
/**
|
|
36
|
-
* Template: 'Hello, %{name}'
|
|
37
|
-
*/
|
|
38
|
-
percent: /%{([^{}]*)}/gm
|
|
39
|
-
};
|
|
18
|
+
var dollarPattern = /\${([^{}]*)}/gm;
|
|
19
|
+
var doublePattern = /{{([^{}]*)}}/gm;
|
|
20
|
+
var singlePattern = /{([^{}]*)}/gm;
|
|
21
|
+
var hashPattern = /#{([^{}]*)}/gm;
|
|
22
|
+
var percentPattern = /%{([^{}]*)}/gm;
|
|
40
23
|
|
|
41
24
|
// src/index.ts
|
|
42
25
|
var VALID_RESULT_TYPES = Object.seal([
|
|
@@ -60,9 +43,7 @@ function paraphrase(...args) {
|
|
|
60
43
|
`paraphrase expects first argument to be a string, got a ${typeof string} (${string})`
|
|
61
44
|
);
|
|
62
45
|
}
|
|
63
|
-
if (!data)
|
|
64
|
-
return string;
|
|
65
|
-
}
|
|
46
|
+
if (!data) return string;
|
|
66
47
|
if (VALID_RESULT_TYPES.includes(typeof data)) {
|
|
67
48
|
data = [data, ...replacements];
|
|
68
49
|
}
|
|
@@ -81,17 +62,17 @@ function paraphrase(...args) {
|
|
|
81
62
|
});
|
|
82
63
|
return phraser;
|
|
83
64
|
}
|
|
84
|
-
var dollar = paraphrase(
|
|
85
|
-
var double = paraphrase(
|
|
86
|
-
var single = paraphrase(
|
|
87
|
-
var percent = paraphrase(
|
|
88
|
-
var hash = paraphrase(
|
|
65
|
+
var dollar = paraphrase(dollarPattern);
|
|
66
|
+
var double = paraphrase(doublePattern);
|
|
67
|
+
var single = paraphrase(singlePattern);
|
|
68
|
+
var percent = paraphrase(percentPattern);
|
|
69
|
+
var hash = paraphrase(hashPattern);
|
|
89
70
|
var loose = paraphrase(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
71
|
+
dollarPattern,
|
|
72
|
+
doublePattern,
|
|
73
|
+
percentPattern,
|
|
74
|
+
hashPattern,
|
|
75
|
+
singlePattern
|
|
95
76
|
);
|
|
96
77
|
export {
|
|
97
78
|
dollar,
|
|
@@ -102,4 +83,4 @@ export {
|
|
|
102
83
|
percent,
|
|
103
84
|
single
|
|
104
85
|
};
|
|
105
|
-
//# sourceMappingURL=index.mjs.map
|
|
86
|
+
//# sourceMappingURL=index.mjs.map
|
package/index.mjs.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["src/notate/index.ts", "src/isObject/index.ts", "src/flavours/index.ts", "src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Resolve dot notation strings\n *\n * @param {any} context Object to start notation search on (defaults to global scope)\n * @param {string} [string=''] Dot notation representation\n * @return {any} Whatever it finds / undefined\n *\n * @example\n * const obj = {\n * top_level: {\n * nested: {\n * value: 'My Value'\n * }\n * }\n * };\n *\n * notate(obj, 'top_level.nested.value');\n * // 'My Value'\n *\n * notate(obj, 'top_level.missing.value');\n * // undefined\n */\nexport function notate(source: any, string: string = \"\"): any {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `Expected notation query to be a string, instead got ${typeof string} (${string})`\n );\n }\n return string\n .split(\".\")\n .reduce(\n (previous, current) =>\n typeof previous === \"object\" && previous ? previous[current] : previous,\n source\n );\n}\n", "/**\n * Is this a basic object?\n * @param {any} obj Target to test\n * @return {boolean} true if object\n */\nexport const isObject = (obj: any): boolean => `${obj}` === \"[object Object]\";\n", "export const flavours: Record<string, RegExp> = {\n /**\n * Template: 'Hello, ${name}'\n */\n dollar: /\\${([^{}]*)}/gm,\n /**\n * Template: 'Hello, {{name}}'\n */\n double: /{{([^{}]*)}}/gm,\n /**\n * Template: 'Hello, {name}'\n */\n single: /{([^{}]*)}/gm,\n /**\n * Template: 'Hello, #{name}'\n */\n hash: /#{([^{}]*)}/gm,\n /**\n * Template: 'Hello, %{name}'\n */\n percent: /%{([^{}]*)}/gm,\n};\n", "import { notate } from \"./notate/index\";\nimport { isObject } from \"./isObject/index\";\nimport { flavours } from \"./flavours/index\";\n\n/**\n * Valid types of results for the interpolated string\n */\nconst VALID_RESULT_TYPES: [\"string\", \"number\"] = Object.seal([\n \"string\",\n \"number\",\n]);\n\ninterface IParaphraseOptions {\n /**\n * Should continue to resolve result string until replacements have been exhausted\n */\n recursive?: boolean;\n /**\n * Should resolve dot notation within template\n */\n resolve?: boolean;\n /**\n * Should remove unmatched template instances\n */\n clean?: boolean;\n}\n\ninterface Phraser {\n (\n /**\n * Template string to parse\n */\n string: string | undefined,\n /**\n * Data to use for interpolation, preferrably an object, but an array will work too, and a primitive values will be treated as an array of \"...rest\" arguments\n */\n ...data: (Record<string, any> | any)[]\n ): string;\n patterns: RegExp[];\n}\n\n/**\n * Create new paraphrase method instance\n * @param {...RegExp[]} replacers[] One or more patterns to use for string replacement\n * @param {IParaphraseOptions} [options] The last argument can be an options object\n * @returns {Phraser} phraser function instance\n *\n * @example const phraser = paraphrase(/\\${([^{}]*)}/gm);\n *\n * phraser('Hello, ${name}', {name: 'Martin'})\n */\nexport function paraphrase(\n ...args: (RegExp | RegExp[] | IParaphraseOptions)[]\n): Phraser {\n const options: IParaphraseOptions = {\n recursive: true,\n resolve: true,\n clean: false,\n };\n if (args.length && isObject(args[args.length - 1])) {\n Object.assign(options, args.pop() as IParaphraseOptions);\n }\n const patterns = args.flat().filter((arg) => arg instanceof RegExp);\n\n Object.freeze(patterns);\n\n /**\n * phraser description\n * @param {string} string Template\n * @param {Object|(string|number)} data Data for filling\n * @param {...(string|number)} replacements Replacement for filling\n * @return {string} Result\n */\n function phraser(\n string: string = \"\",\n data: string | number | Record<string, any>,\n ...replacements: (string | number)[]\n ): string {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `paraphrase expects first argument to be a string, got a ${typeof string} (${string})`\n );\n }\n\n if (!data) {\n return string;\n }\n\n if (VALID_RESULT_TYPES.includes(typeof data as any)) {\n data = [data, ...replacements];\n }\n\n /**\n * Replace method build with internal reference to the passed in data structure\n * @param {string} haystack The full string match\n * @param {string} needle The content to identify as data member\n * @return {string} Found value\n */\n function replace(haystack: string, needle: string): string {\n const replacement = options.resolve\n ? notate(data, needle.trim())\n : data[needle.trim()];\n\n return VALID_RESULT_TYPES.includes(typeof replacement as any)\n ? replacement\n : options.clean\n ? \"\"\n : haystack;\n }\n\n const result = (patterns as RegExp[]).reduce(\n (string: string, pattern: RegExp): string =>\n string.replace(pattern, replace),\n string\n );\n\n return !options.recursive || string === result\n ? result\n : phraser(result, data, ...replacements);\n }\n\n Object.defineProperty(phraser, \"patterns\", {\n get: () => patterns,\n });\n\n return phraser as Phraser;\n}\n\nexport const dollar = paraphrase(flavours.dollar);\nexport const double = paraphrase(flavours.double);\nexport const single = paraphrase(flavours.single);\nexport const percent = paraphrase(flavours.percent);\nexport const hash = paraphrase(flavours.hash);\nexport const loose = paraphrase(\n flavours.dollar,\n flavours.double,\n flavours.percent,\n flavours.hash,\n flavours.single\n);\n"],
|
|
5
|
-
"mappings": ";AAsBO,SAAS,OAAO,QAAa,SAAiB,IAAS;AAC5D,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI;AAAA,MACR,uDAAuD,OAAO,WAAW;AAAA,IAC3E;AAAA,EACF;AACA,SAAO,OACJ,MAAM,GAAG,EACT;AAAA,IACC,CAAC,UAAU,YACT,OAAO,aAAa,YAAY,WAAW,SAAS,OAAO,IAAI;AAAA,IACjE;AAAA,EACF;AACJ;;;AC9BO,IAAM,WAAW,CAAC,QAAsB,GAAG,UAAU;;;ACLrD,IAAM,WAAmC;AAAA;AAAA;AAAA;AAAA,EAI9C,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,MAAM;AAAA;AAAA;AAAA;AAAA,EAIN,SAAS;AACX;;;ACdA,IAAM,qBAA2C,OAAO,KAAK;AAAA,EAC3D;AAAA,EACA;AACF,CAAC;AAyCM,SAAS,cACX,MACM;AACT,QAAM,UAA8B;AAAA,IAClC,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACA,MAAI,KAAK,UAAU,SAAS,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG;AAClD,WAAO,OAAO,SAAS,KAAK,IAAI,CAAuB;AAAA,EACzD;AACA,QAAM,WAAW,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,eAAe,MAAM;AAElE,SAAO,OAAO,QAAQ;AAStB,WAAS,QACP,SAAiB,IACjB,SACG,cACK;AACR,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI;AAAA,QACR,2DAA2D,OAAO,WAAW;AAAA,MAC/E;AAAA,IACF;AAEA,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QAAI,mBAAmB,SAAS,OAAO,IAAW,GAAG;AACnD,aAAO,CAAC,MAAM,GAAG,YAAY;AAAA,IAC/B;AAQA,aAAS,QAAQ,UAAkB,QAAwB;AACzD,YAAM,cAAc,QAAQ,UACxB,OAAO,MAAM,OAAO,KAAK,CAAC,IAC1B,KAAK,OAAO,KAAK,CAAC;AAEtB,aAAO,mBAAmB,SAAS,OAAO,WAAkB,IACxD,cACA,QAAQ,QACR,KACA;AAAA,IACN;AAEA,UAAM,SAAU,SAAsB;AAAA,MACpC,CAACA,SAAgB,YACfA,QAAO,QAAQ,SAAS,OAAO;AAAA,MACjC;AAAA,IACF;AAEA,WAAO,CAAC,QAAQ,aAAa,WAAW,SACpC,SACA,QAAQ,QAAQ,MAAM,GAAG,YAAY;AAAA,EAC3C;AAEA,SAAO,eAAe,SAAS,YAAY;AAAA,IACzC,KAAK,MAAM;AAAA,EACb,CAAC;AAED,SAAO;AACT;AAEO,IAAM,SAAS,WAAW,SAAS,MAAM;AACzC,IAAM,SAAS,WAAW,SAAS,MAAM;AACzC,IAAM,SAAS,WAAW,SAAS,MAAM;AACzC,IAAM,UAAU,WAAW,SAAS,OAAO;AAC3C,IAAM,OAAO,WAAW,SAAS,IAAI;AACrC,IAAM,QAAQ;AAAA,EACnB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;",
|
|
6
|
-
"names": ["string"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"sources":["src/notate/index.ts","src/isObject/index.ts","src/flavours/index.ts","src/index.ts"],"sourcesContent":["/**\n * Resolve dot notation strings\n *\n * @param {any} context Object to start notation search on (defaults to global scope)\n * @param {string} [string=''] Dot notation representation\n * @return {any} Whatever it finds / undefined\n *\n * @example\n * const obj = {\n * top_level: {\n * nested: {\n * value: 'My Value'\n * }\n * }\n * };\n *\n * notate(obj, 'top_level.nested.value');\n * // 'My Value'\n *\n * notate(obj, 'top_level.missing.value');\n * // undefined\n */\nexport function notate(source: any, string: string = \"\"): any {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `Expected notation query to be a string, instead got ${typeof string} (${string})`,\n );\n }\n return string\n .split(\".\")\n .reduce(\n (previous, current) =>\n typeof previous === \"object\" && previous ? previous[current] : previous,\n source,\n );\n}\n","/**\n * Is this a basic object?\n * @param {any} obj Target to test\n * @return {boolean} true if object\n */\nexport const isObject = (obj: any): boolean => `${obj}` === \"[object Object]\";\n","/**\n * Template: 'Hello, ${name}'\n */\nexport const dollarPattern = /\\${([^{}]*)}/gm;\n\n/**\n * Template: 'Hello, {{name}}'\n */\nexport const doublePattern = /{{([^{}]*)}}/gm;\n\n/**\n * Template: 'Hello, {name}'\n */\nexport const singlePattern = /{([^{}]*)}/gm;\n\n/**\n * Template: 'Hello, #{name}'\n */\nexport const hashPattern = /#{([^{}]*)}/gm;\n\n/**\n * Template: 'Hello, %{name}'\n */\nexport const percentPattern = /%{([^{}]*)}/gm;\n","import { notate } from \"./notate/index.ts\";\nimport { isObject } from \"./isObject/index.ts\";\nimport {\n dollarPattern,\n doublePattern,\n percentPattern,\n hashPattern,\n singlePattern,\n} from \"./flavours/index.ts\";\n\n/**\n * Valid types of results for the interpolated string\n */\nconst VALID_RESULT_TYPES: [\"string\", \"number\"] = Object.seal([\n \"string\",\n \"number\",\n]);\n\ninterface IParaphraseOptions {\n /**\n * Should continue to resolve result string until replacements have been exhausted\n */\n recursive?: boolean;\n /**\n * Should resolve dot notation within template\n */\n resolve?: boolean;\n /**\n * Should remove unmatched template instances\n */\n clean?: boolean;\n}\n\ninterface Phraser {\n (\n /**\n * Template string to parse\n */\n string: string | undefined,\n /**\n * Data to use for interpolation, preferrably an object, but an array will work too, and a primitive values will be treated as an array of \"...rest\" arguments\n */\n ...data: (Record<string, any> | any)[]\n ): string;\n patterns: RegExp[];\n}\n\n/**\n * Create new paraphrase method instance\n * @param {...RegExp[]} replacers[] One or more patterns to use for string replacement\n * @param {IParaphraseOptions} [options] The last argument can be an options object\n * @returns {Phraser} phraser function instance\n *\n * @example const phraser = paraphrase(/\\${([^{}]*)}/gm);\n *\n * phraser('Hello, ${name}', {name: 'Martin'})\n */\nexport function paraphrase(\n ...args: (RegExp | RegExp[] | IParaphraseOptions)[]\n): Phraser {\n const options: IParaphraseOptions = {\n recursive: true,\n resolve: true,\n clean: false,\n };\n if (args.length && isObject(args[args.length - 1])) {\n Object.assign(options, args.pop() as IParaphraseOptions);\n }\n const patterns = args.flat().filter((arg) => arg instanceof RegExp);\n\n Object.freeze(patterns);\n\n /**\n * phraser description\n * @param {string} string Template\n * @param {Object|(string|number)} data Data for filling\n * @param {...(string|number)} replacements Replacement for filling\n * @return {string} Result\n */\n function phraser(\n string: string = \"\",\n data: string | number | Record<string, any>,\n ...replacements: (string | number)[]\n ): string {\n if (typeof string !== \"string\") {\n throw new TypeError(\n `paraphrase expects first argument to be a string, got a ${typeof string} (${string})`,\n );\n }\n\n if (!data) return string;\n\n if (VALID_RESULT_TYPES.includes(typeof data as any)) {\n data = [data, ...replacements];\n }\n\n /**\n * Replace method build with internal reference to the passed in data structure\n * @param {string} haystack The full string match\n * @param {string} needle The content to identify as data member\n * @return {string} Found value\n */\n function replace(haystack: string, needle: string): string {\n const replacement = options.resolve\n ? notate(data, needle.trim())\n : (data as Record<string, any>)[needle.trim()];\n\n return VALID_RESULT_TYPES.includes(typeof replacement as any)\n ? replacement\n : options.clean\n ? \"\"\n : haystack;\n }\n\n const result = (patterns as RegExp[]).reduce(\n (string: string, pattern: RegExp): string =>\n string.replace(pattern, replace),\n string,\n );\n\n return !options.recursive || string === result\n ? result\n : phraser(result, data, ...replacements);\n }\n\n Object.defineProperty(phraser, \"patterns\", {\n get: () => patterns,\n });\n\n return phraser as Phraser;\n}\n\nexport const dollar = paraphrase(dollarPattern);\nexport const double = paraphrase(doublePattern);\nexport const single = paraphrase(singlePattern);\nexport const percent = paraphrase(percentPattern);\nexport const hash = paraphrase(hashPattern);\nexport const loose = paraphrase(\n dollarPattern,\n doublePattern,\n percentPattern,\n hashPattern,\n singlePattern,\n);\n"],"mappings":";AAsBO,SAAS,OAAO,QAAa,SAAiB,IAAS;AAC5D,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI;AAAA,MACR,uDAAuD,OAAO,MAAM,KAAK,MAAM;AAAA,IACjF;AAAA,EACF;AACA,SAAO,OACJ,MAAM,GAAG,EACT;AAAA,IACC,CAAC,UAAU,YACT,OAAO,aAAa,YAAY,WAAW,SAAS,OAAO,IAAI;AAAA,IACjE;AAAA,EACF;AACJ;;;AC9BO,IAAM,WAAW,CAAC,QAAsB,GAAG,GAAG,OAAO;;;ACFrD,IAAM,gBAAgB;AAKtB,IAAM,gBAAgB;AAKtB,IAAM,gBAAgB;AAKtB,IAAM,cAAc;AAKpB,IAAM,iBAAiB;;;ACV9B,IAAM,qBAA2C,OAAO,KAAK;AAAA,EAC3D;AAAA,EACA;AACF,CAAC;AAyCM,SAAS,cACX,MACM;AACT,QAAM,UAA8B;AAAA,IAClC,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACA,MAAI,KAAK,UAAU,SAAS,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG;AAClD,WAAO,OAAO,SAAS,KAAK,IAAI,CAAuB;AAAA,EACzD;AACA,QAAM,WAAW,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,eAAe,MAAM;AAElE,SAAO,OAAO,QAAQ;AAStB,WAAS,QACP,SAAiB,IACjB,SACG,cACK;AACR,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI;AAAA,QACR,2DAA2D,OAAO,MAAM,KAAK,MAAM;AAAA,MACrF;AAAA,IACF;AAEA,QAAI,CAAC,KAAM,QAAO;AAElB,QAAI,mBAAmB,SAAS,OAAO,IAAW,GAAG;AACnD,aAAO,CAAC,MAAM,GAAG,YAAY;AAAA,IAC/B;AAQA,aAAS,QAAQ,UAAkB,QAAwB;AACzD,YAAM,cAAc,QAAQ,UACxB,OAAO,MAAM,OAAO,KAAK,CAAC,IACzB,KAA6B,OAAO,KAAK,CAAC;AAE/C,aAAO,mBAAmB,SAAS,OAAO,WAAkB,IACxD,cACA,QAAQ,QACN,KACA;AAAA,IACR;AAEA,UAAM,SAAU,SAAsB;AAAA,MACpC,CAACA,SAAgB,YACfA,QAAO,QAAQ,SAAS,OAAO;AAAA,MACjC;AAAA,IACF;AAEA,WAAO,CAAC,QAAQ,aAAa,WAAW,SACpC,SACA,QAAQ,QAAQ,MAAM,GAAG,YAAY;AAAA,EAC3C;AAEA,SAAO,eAAe,SAAS,YAAY;AAAA,IACzC,KAAK,MAAM;AAAA,EACb,CAAC;AAED,SAAO;AACT;AAEO,IAAM,SAAS,WAAW,aAAa;AACvC,IAAM,SAAS,WAAW,aAAa;AACvC,IAAM,SAAS,WAAW,aAAa;AACvC,IAAM,UAAU,WAAW,cAAc;AACzC,IAAM,OAAO,WAAW,WAAW;AACnC,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":["string"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "paraphrase",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.3",
|
|
4
4
|
"description": "🧩 Create flavoured string template interpolation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"string",
|
|
@@ -39,25 +39,24 @@
|
|
|
39
39
|
"default": "./index.js"
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
|
-
"types": "./
|
|
42
|
+
"types": "./index.d.ts",
|
|
43
43
|
"files": [
|
|
44
44
|
"index.js",
|
|
45
45
|
"index.js.map",
|
|
46
46
|
"index.mjs",
|
|
47
47
|
"index.mjs.map",
|
|
48
|
-
"
|
|
48
|
+
"index.d.ts"
|
|
49
49
|
],
|
|
50
50
|
"scripts": {
|
|
51
|
-
"test": "
|
|
51
|
+
"test": "node --test **/test.ts",
|
|
52
52
|
"format": "prettier --write .",
|
|
53
|
-
"build": "
|
|
53
|
+
"build": "tsup src/index.ts --format cjs,esm --dts --out-dir . --sourcemap",
|
|
54
54
|
"prepublishOnly": "npm run build"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@types/
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"ts-jest": "^29.0.5"
|
|
57
|
+
"@types/node": "^25.0.10",
|
|
58
|
+
"prettier": "^3.0.3",
|
|
59
|
+
"tsup": "^8.5.1",
|
|
60
|
+
"typescript": "^5.9.3"
|
|
62
61
|
}
|
|
63
62
|
}
|