@intlayer/core 6.1.3 → 6.1.4
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/cjs/index.cjs +3 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/transpiler/markdown/getMarkdownMetadata.cjs +2 -18
- package/dist/cjs/transpiler/markdown/getMarkdownMetadata.cjs.map +1 -1
- package/dist/cjs/utils/parseYaml.cjs +58 -0
- package/dist/cjs/utils/parseYaml.cjs.map +1 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/transpiler/markdown/getMarkdownMetadata.mjs +2 -18
- package/dist/esm/transpiler/markdown/getMarkdownMetadata.mjs.map +1 -1
- package/dist/esm/utils/parseYaml.mjs +34 -0
- package/dist/esm/utils/parseYaml.mjs.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/transpiler/markdown/getMarkdownMetadata.d.ts.map +1 -1
- package/dist/types/utils/parseYaml.d.ts +2 -0
- package/dist/types/utils/parseYaml.d.ts.map +1 -0
- package/package.json +48 -12
package/dist/cjs/index.cjs
CHANGED
|
@@ -26,6 +26,7 @@ __reExport(index_exports, require('./utils/checkIsURLAbsolute.cjs'), module.expo
|
|
|
26
26
|
__reExport(index_exports, require('./utils/intl.cjs'), module.exports);
|
|
27
27
|
__reExport(index_exports, require('./utils/isSameKeyPath.cjs'), module.exports);
|
|
28
28
|
__reExport(index_exports, require('./utils/isValidReactElement.cjs'), module.exports);
|
|
29
|
+
__reExport(index_exports, require('./utils/parseYaml.cjs'), module.exports);
|
|
29
30
|
// Annotate the CommonJS export names for ESM import in node:
|
|
30
31
|
0 && (module.exports = {
|
|
31
32
|
...require('./deepTranformPlugins/index.cjs'),
|
|
@@ -38,6 +39,7 @@ __reExport(index_exports, require('./utils/isValidReactElement.cjs'), module.exp
|
|
|
38
39
|
...require('./utils/checkIsURLAbsolute.cjs'),
|
|
39
40
|
...require('./utils/intl.cjs'),
|
|
40
41
|
...require('./utils/isSameKeyPath.cjs'),
|
|
41
|
-
...require('./utils/isValidReactElement.cjs')
|
|
42
|
+
...require('./utils/isValidReactElement.cjs'),
|
|
43
|
+
...require('./utils/parseYaml.cjs')
|
|
42
44
|
});
|
|
43
45
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './deepTranformPlugins';\nexport * from './dictionaryManipulator/index';\nexport * from './formatters/index';\nexport * from './interpreter/index';\nexport * from './localization/index';\nexport * from './transpiler/index';\nexport * from './types/index';\nexport * from './utils/checkIsURLAbsolute';\nexport * from './utils/intl';\nexport * from './utils/isSameKeyPath';\nexport * from './utils/isValidReactElement';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,kCAAd;AACA,0BAAc,0CADd;AAEA,0BAAc,+BAFd;AAGA,0BAAc,gCAHd;AAIA,0BAAc,iCAJd;AAKA,0BAAc,+BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,uCAPd;AAQA,0BAAc,yBARd;AASA,0BAAc,kCATd;AAUA,0BAAc,wCAVd;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './deepTranformPlugins';\nexport * from './dictionaryManipulator/index';\nexport * from './formatters/index';\nexport * from './interpreter/index';\nexport * from './localization/index';\nexport * from './transpiler/index';\nexport * from './types/index';\nexport * from './utils/checkIsURLAbsolute';\nexport * from './utils/intl';\nexport * from './utils/isSameKeyPath';\nexport * from './utils/isValidReactElement';\nexport * from './utils/parseYaml';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,kCAAd;AACA,0BAAc,0CADd;AAEA,0BAAc,+BAFd;AAGA,0BAAc,gCAHd;AAIA,0BAAc,iCAJd;AAKA,0BAAc,+BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,uCAPd;AAQA,0BAAc,yBARd;AASA,0BAAc,kCATd;AAUA,0BAAc,wCAVd;AAWA,0BAAc,8BAXd;","names":[]}
|
|
@@ -21,23 +21,7 @@ __export(getMarkdownMetadata_exports, {
|
|
|
21
21
|
getMarkdownMetadata: () => getMarkdownMetadata
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(getMarkdownMetadata_exports);
|
|
24
|
-
|
|
25
|
-
let normalizedInput = input.trim().replace(/^\[/, "[").replace(/^\{/, "{").replace(/\]$/, "]").replace(/\}$/, "}").replace(/([\w\d_]+)\s*:/g, '"$1":').replace(/:\s*([a-zA-Z_][\w\d_]*)/g, ': "$1"');
|
|
26
|
-
normalizedInput = normalizedInput.replace(
|
|
27
|
-
/\[([^\[\]]+?)\]/g,
|
|
28
|
-
(_match, arrayContent) => {
|
|
29
|
-
const newContent = arrayContent.split(",").map((item) => {
|
|
30
|
-
const trimmed = item.trim();
|
|
31
|
-
if (trimmed.startsWith('"') && trimmed.endsWith('"') || !isNaN(Number(trimmed))) {
|
|
32
|
-
return trimmed;
|
|
33
|
-
}
|
|
34
|
-
return `"${trimmed}"`;
|
|
35
|
-
}).join(", ");
|
|
36
|
-
return `[${newContent}]`;
|
|
37
|
-
}
|
|
38
|
-
);
|
|
39
|
-
return JSON.parse(normalizedInput);
|
|
40
|
-
};
|
|
24
|
+
var import_parseYaml = require('../../utils/parseYaml.cjs');
|
|
41
25
|
const getMarkdownMetadata = (markdown) => {
|
|
42
26
|
try {
|
|
43
27
|
const lines = markdown.split(/\r?\n/);
|
|
@@ -84,7 +68,7 @@ const getMarkdownMetadata = (markdown) => {
|
|
|
84
68
|
currentArrayItems = [];
|
|
85
69
|
} else {
|
|
86
70
|
try {
|
|
87
|
-
metadata[key] =
|
|
71
|
+
metadata[key] = (0, import_parseYaml.parseYaml)(value);
|
|
88
72
|
} catch (e) {
|
|
89
73
|
metadata[key] = value;
|
|
90
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/transpiler/markdown/getMarkdownMetadata.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../src/transpiler/markdown/getMarkdownMetadata.ts"],"sourcesContent":["import { parseYaml } from '../../utils/parseYaml';\n\nexport const getMarkdownMetadata = <T extends Record<string, any>>(\n markdown: string\n): T => {\n try {\n const lines = markdown.split(/\\r?\\n/);\n\n // Check if the very first non-empty line is the metadata start delimiter.\n const firstNonEmptyLine = lines.find((line) => line.trim() !== '');\n\n if (!firstNonEmptyLine || firstNonEmptyLine.trim() !== '---') {\n const result: T = {} as T;\n return result;\n }\n\n const metadata: T = {} as T;\n let inMetadataBlock = false;\n let currentKey: string | null = null;\n let currentArrayItems: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmedLine = line.trim();\n\n // Toggle metadata block on encountering the delimiter.\n if (trimmedLine === '---') {\n if (!inMetadataBlock) {\n // Begin metadata block.\n inMetadataBlock = true;\n continue;\n } else {\n // End of metadata block; finalize any pending array and stop processing.\n if (currentKey && currentArrayItems.length > 0) {\n (metadata as Record<string, any>)[currentKey] = currentArrayItems;\n }\n break;\n }\n }\n\n // If we're inside the metadata block, parse key: value pairs.\n if (inMetadataBlock) {\n // Check if this line is an array item (starts with - )\n const arrayItemMatch = line.match(/^\\s*-\\s+(.+)$/);\n if (arrayItemMatch && currentKey) {\n // This is an array item for the current key\n currentArrayItems.push(arrayItemMatch[1].trim());\n continue;\n }\n\n // If we have a pending array from a previous key, save it\n if (currentKey && currentArrayItems.length > 0) {\n (metadata as Record<string, any>)[currentKey] = currentArrayItems;\n currentKey = null;\n currentArrayItems = [];\n }\n\n // Check for key: value pairs\n const match = line.match(/^([^:]+)\\s*:\\s*(.*)$/);\n if (match) {\n const key = match[1].trim();\n const value = match[2].trim();\n\n if (value === '') {\n // This might be the start of a multi-line structure (like an array)\n currentKey = key;\n currentArrayItems = [];\n } else {\n try {\n (metadata as Record<string, any>)[key] = parseYaml(value);\n } catch (e) {\n (metadata as Record<string, any>)[key] = value;\n }\n }\n }\n }\n }\n\n return metadata;\n } catch (e) {\n const result: T = {} as T;\n return result;\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA0B;AAEnB,MAAM,sBAAsB,CACjC,aACM;AACN,MAAI;AACF,UAAM,QAAQ,SAAS,MAAM,OAAO;AAGpC,UAAM,oBAAoB,MAAM,KAAK,CAAC,SAAS,KAAK,KAAK,MAAM,EAAE;AAEjE,QAAI,CAAC,qBAAqB,kBAAkB,KAAK,MAAM,OAAO;AAC5D,YAAM,SAAY,CAAC;AACnB,aAAO;AAAA,IACT;AAEA,UAAM,WAAc,CAAC;AACrB,QAAI,kBAAkB;AACtB,QAAI,aAA4B;AAChC,QAAI,oBAA8B,CAAC;AAEnC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,cAAc,KAAK,KAAK;AAG9B,UAAI,gBAAgB,OAAO;AACzB,YAAI,CAAC,iBAAiB;AAEpB,4BAAkB;AAClB;AAAA,QACF,OAAO;AAEL,cAAI,cAAc,kBAAkB,SAAS,GAAG;AAC9C,YAAC,SAAiC,UAAU,IAAI;AAAA,UAClD;AACA;AAAA,QACF;AAAA,MACF;AAGA,UAAI,iBAAiB;AAEnB,cAAM,iBAAiB,KAAK,MAAM,eAAe;AACjD,YAAI,kBAAkB,YAAY;AAEhC,4BAAkB,KAAK,eAAe,CAAC,EAAE,KAAK,CAAC;AAC/C;AAAA,QACF;AAGA,YAAI,cAAc,kBAAkB,SAAS,GAAG;AAC9C,UAAC,SAAiC,UAAU,IAAI;AAChD,uBAAa;AACb,8BAAoB,CAAC;AAAA,QACvB;AAGA,cAAM,QAAQ,KAAK,MAAM,sBAAsB;AAC/C,YAAI,OAAO;AACT,gBAAM,MAAM,MAAM,CAAC,EAAE,KAAK;AAC1B,gBAAM,QAAQ,MAAM,CAAC,EAAE,KAAK;AAE5B,cAAI,UAAU,IAAI;AAEhB,yBAAa;AACb,gCAAoB,CAAC;AAAA,UACvB,OAAO;AACL,gBAAI;AACF,cAAC,SAAiC,GAAG,QAAI,4BAAU,KAAK;AAAA,YAC1D,SAAS,GAAG;AACV,cAAC,SAAiC,GAAG,IAAI;AAAA,YAC3C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,UAAM,SAAY,CAAC;AACnB,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var parseYaml_exports = {};
|
|
20
|
+
__export(parseYaml_exports, {
|
|
21
|
+
parseYaml: () => parseYaml
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(parseYaml_exports);
|
|
24
|
+
const parseYaml = (input) => {
|
|
25
|
+
const trimmedInput = input.trim();
|
|
26
|
+
if (!trimmedInput) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
if (!trimmedInput.startsWith("[") && !trimmedInput.startsWith("{")) {
|
|
30
|
+
if (!isNaN(Number(trimmedInput))) {
|
|
31
|
+
return JSON.parse(trimmedInput);
|
|
32
|
+
}
|
|
33
|
+
if (trimmedInput.startsWith('"') && trimmedInput.endsWith('"') || trimmedInput.startsWith("'") && trimmedInput.endsWith("'")) {
|
|
34
|
+
return JSON.parse(trimmedInput);
|
|
35
|
+
}
|
|
36
|
+
return trimmedInput;
|
|
37
|
+
}
|
|
38
|
+
let normalizedInput = trimmedInput.replace(/^\[/, "[").replace(/^\{/, "{").replace(/\]$/, "]").replace(/\}$/, "}").replace(/([\w\d_]+)\s*:/g, '"$1":').replace(/:\s*([a-zA-Z_][\w\d_]*)/g, ': "$1"');
|
|
39
|
+
normalizedInput = normalizedInput.replace(
|
|
40
|
+
/\[([^\[\]]+?)\]/g,
|
|
41
|
+
(_match, arrayContent) => {
|
|
42
|
+
const newContent = arrayContent.split(",").map((item) => {
|
|
43
|
+
const trimmed = item.trim();
|
|
44
|
+
if (trimmed.startsWith('"') && trimmed.endsWith('"') || !isNaN(Number(trimmed))) {
|
|
45
|
+
return trimmed;
|
|
46
|
+
}
|
|
47
|
+
return `"${trimmed}"`;
|
|
48
|
+
}).join(", ");
|
|
49
|
+
return `[${newContent}]`;
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
return JSON.parse(normalizedInput);
|
|
53
|
+
};
|
|
54
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
55
|
+
0 && (module.exports = {
|
|
56
|
+
parseYaml
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=parseYaml.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/parseYaml.ts"],"sourcesContent":["export const parseYaml = <T = any>(input: string): T | null => {\n const trimmedInput = input.trim();\n\n // Handle empty input\n if (!trimmedInput) {\n return null;\n }\n\n // If it's a simple unquoted string (not an array or object), return it as-is\n if (!trimmedInput.startsWith('[') && !trimmedInput.startsWith('{')) {\n // Check if it's a number\n if (!isNaN(Number(trimmedInput))) {\n return JSON.parse(trimmedInput) as T;\n }\n // Check if it's already a quoted string\n if (\n (trimmedInput.startsWith('\"') && trimmedInput.endsWith('\"')) ||\n (trimmedInput.startsWith(\"'\") && trimmedInput.endsWith(\"'\"))\n ) {\n return JSON.parse(trimmedInput) as T;\n }\n // Return as unquoted string\n return trimmedInput as T;\n }\n\n // Normalize different bracket types and keys/values\n let normalizedInput = trimmedInput\n .replace(/^\\[/, '[') // Keep array brackets\n .replace(/^\\{/, '{') // Keep object brackets\n .replace(/\\]$/, ']') // Keep array brackets\n .replace(/\\}$/, '}') // Keep object brackets\n .replace(/([\\w\\d_]+)\\s*:/g, '\"$1\":') // Ensure JSON-valid keys (e.g., key: -> \"key\":)\n .replace(/:\\s*([a-zA-Z_][\\w\\d_]*)/g, ': \"$1\"'); // Handle unquoted string values\n\n // Fix arrays with unquoted items (e.g., [content, anotherContent])\n normalizedInput = normalizedInput.replace(\n /\\[([^\\[\\]]+?)\\]/g,\n (_match, arrayContent) => {\n const newContent = (arrayContent as string)\n .split(',')\n .map((item) => {\n const trimmed = item.trim();\n // If already quoted or is a valid number, return as is.\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n !isNaN(Number(trimmed))\n ) {\n return trimmed;\n }\n return `\"${trimmed}\"`;\n })\n .join(', ');\n return `[${newContent}]`;\n }\n );\n\n // Parse the string into an object\n return JSON.parse(normalizedInput) as T;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,YAAY,CAAU,UAA4B;AAC7D,QAAM,eAAe,MAAM,KAAK;AAGhC,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,aAAa,WAAW,GAAG,KAAK,CAAC,aAAa,WAAW,GAAG,GAAG;AAElE,QAAI,CAAC,MAAM,OAAO,YAAY,CAAC,GAAG;AAChC,aAAO,KAAK,MAAM,YAAY;AAAA,IAChC;AAEA,QACG,aAAa,WAAW,GAAG,KAAK,aAAa,SAAS,GAAG,KACzD,aAAa,WAAW,GAAG,KAAK,aAAa,SAAS,GAAG,GAC1D;AACA,aAAO,KAAK,MAAM,YAAY;AAAA,IAChC;AAEA,WAAO;AAAA,EACT;AAGA,MAAI,kBAAkB,aACnB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,4BAA4B,QAAQ;AAG/C,oBAAkB,gBAAgB;AAAA,IAChC;AAAA,IACA,CAAC,QAAQ,iBAAiB;AACxB,YAAM,aAAc,aACjB,MAAM,GAAG,EACT,IAAI,CAAC,SAAS;AACb,cAAM,UAAU,KAAK,KAAK;AAE1B,YACG,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,KAChD,CAAC,MAAM,OAAO,OAAO,CAAC,GACtB;AACA,iBAAO;AAAA,QACT;AACA,eAAO,IAAI,OAAO;AAAA,MACpB,CAAC,EACA,KAAK,IAAI;AACZ,aAAO,IAAI,UAAU;AAAA,IACvB;AAAA,EACF;AAGA,SAAO,KAAK,MAAM,eAAe;AACnC;","names":[]}
|
package/dist/esm/index.mjs
CHANGED
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './deepTranformPlugins';\nexport * from './dictionaryManipulator/index';\nexport * from './formatters/index';\nexport * from './interpreter/index';\nexport * from './localization/index';\nexport * from './transpiler/index';\nexport * from './types/index';\nexport * from './utils/checkIsURLAbsolute';\nexport * from './utils/intl';\nexport * from './utils/isSameKeyPath';\nexport * from './utils/isValidReactElement';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './deepTranformPlugins';\nexport * from './dictionaryManipulator/index';\nexport * from './formatters/index';\nexport * from './interpreter/index';\nexport * from './localization/index';\nexport * from './transpiler/index';\nexport * from './types/index';\nexport * from './utils/checkIsURLAbsolute';\nexport * from './utils/intl';\nexport * from './utils/isSameKeyPath';\nexport * from './utils/isValidReactElement';\nexport * from './utils/parseYaml';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
let normalizedInput = input.trim().replace(/^\[/, "[").replace(/^\{/, "{").replace(/\]$/, "]").replace(/\}$/, "}").replace(/([\w\d_]+)\s*:/g, '"$1":').replace(/:\s*([a-zA-Z_][\w\d_]*)/g, ': "$1"');
|
|
3
|
-
normalizedInput = normalizedInput.replace(
|
|
4
|
-
/\[([^\[\]]+?)\]/g,
|
|
5
|
-
(_match, arrayContent) => {
|
|
6
|
-
const newContent = arrayContent.split(",").map((item) => {
|
|
7
|
-
const trimmed = item.trim();
|
|
8
|
-
if (trimmed.startsWith('"') && trimmed.endsWith('"') || !isNaN(Number(trimmed))) {
|
|
9
|
-
return trimmed;
|
|
10
|
-
}
|
|
11
|
-
return `"${trimmed}"`;
|
|
12
|
-
}).join(", ");
|
|
13
|
-
return `[${newContent}]`;
|
|
14
|
-
}
|
|
15
|
-
);
|
|
16
|
-
return JSON.parse(normalizedInput);
|
|
17
|
-
};
|
|
1
|
+
import { parseYaml } from "../../utils/parseYaml.mjs";
|
|
18
2
|
const getMarkdownMetadata = (markdown) => {
|
|
19
3
|
try {
|
|
20
4
|
const lines = markdown.split(/\r?\n/);
|
|
@@ -61,7 +45,7 @@ const getMarkdownMetadata = (markdown) => {
|
|
|
61
45
|
currentArrayItems = [];
|
|
62
46
|
} else {
|
|
63
47
|
try {
|
|
64
|
-
metadata[key] =
|
|
48
|
+
metadata[key] = parseYaml(value);
|
|
65
49
|
} catch (e) {
|
|
66
50
|
metadata[key] = value;
|
|
67
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/transpiler/markdown/getMarkdownMetadata.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../src/transpiler/markdown/getMarkdownMetadata.ts"],"sourcesContent":["import { parseYaml } from '../../utils/parseYaml';\n\nexport const getMarkdownMetadata = <T extends Record<string, any>>(\n markdown: string\n): T => {\n try {\n const lines = markdown.split(/\\r?\\n/);\n\n // Check if the very first non-empty line is the metadata start delimiter.\n const firstNonEmptyLine = lines.find((line) => line.trim() !== '');\n\n if (!firstNonEmptyLine || firstNonEmptyLine.trim() !== '---') {\n const result: T = {} as T;\n return result;\n }\n\n const metadata: T = {} as T;\n let inMetadataBlock = false;\n let currentKey: string | null = null;\n let currentArrayItems: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmedLine = line.trim();\n\n // Toggle metadata block on encountering the delimiter.\n if (trimmedLine === '---') {\n if (!inMetadataBlock) {\n // Begin metadata block.\n inMetadataBlock = true;\n continue;\n } else {\n // End of metadata block; finalize any pending array and stop processing.\n if (currentKey && currentArrayItems.length > 0) {\n (metadata as Record<string, any>)[currentKey] = currentArrayItems;\n }\n break;\n }\n }\n\n // If we're inside the metadata block, parse key: value pairs.\n if (inMetadataBlock) {\n // Check if this line is an array item (starts with - )\n const arrayItemMatch = line.match(/^\\s*-\\s+(.+)$/);\n if (arrayItemMatch && currentKey) {\n // This is an array item for the current key\n currentArrayItems.push(arrayItemMatch[1].trim());\n continue;\n }\n\n // If we have a pending array from a previous key, save it\n if (currentKey && currentArrayItems.length > 0) {\n (metadata as Record<string, any>)[currentKey] = currentArrayItems;\n currentKey = null;\n currentArrayItems = [];\n }\n\n // Check for key: value pairs\n const match = line.match(/^([^:]+)\\s*:\\s*(.*)$/);\n if (match) {\n const key = match[1].trim();\n const value = match[2].trim();\n\n if (value === '') {\n // This might be the start of a multi-line structure (like an array)\n currentKey = key;\n currentArrayItems = [];\n } else {\n try {\n (metadata as Record<string, any>)[key] = parseYaml(value);\n } catch (e) {\n (metadata as Record<string, any>)[key] = value;\n }\n }\n }\n }\n }\n\n return metadata;\n } catch (e) {\n const result: T = {} as T;\n return result;\n }\n};\n"],"mappings":"AAAA,SAAS,iBAAiB;AAEnB,MAAM,sBAAsB,CACjC,aACM;AACN,MAAI;AACF,UAAM,QAAQ,SAAS,MAAM,OAAO;AAGpC,UAAM,oBAAoB,MAAM,KAAK,CAAC,SAAS,KAAK,KAAK,MAAM,EAAE;AAEjE,QAAI,CAAC,qBAAqB,kBAAkB,KAAK,MAAM,OAAO;AAC5D,YAAM,SAAY,CAAC;AACnB,aAAO;AAAA,IACT;AAEA,UAAM,WAAc,CAAC;AACrB,QAAI,kBAAkB;AACtB,QAAI,aAA4B;AAChC,QAAI,oBAA8B,CAAC;AAEnC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,cAAc,KAAK,KAAK;AAG9B,UAAI,gBAAgB,OAAO;AACzB,YAAI,CAAC,iBAAiB;AAEpB,4BAAkB;AAClB;AAAA,QACF,OAAO;AAEL,cAAI,cAAc,kBAAkB,SAAS,GAAG;AAC9C,YAAC,SAAiC,UAAU,IAAI;AAAA,UAClD;AACA;AAAA,QACF;AAAA,MACF;AAGA,UAAI,iBAAiB;AAEnB,cAAM,iBAAiB,KAAK,MAAM,eAAe;AACjD,YAAI,kBAAkB,YAAY;AAEhC,4BAAkB,KAAK,eAAe,CAAC,EAAE,KAAK,CAAC;AAC/C;AAAA,QACF;AAGA,YAAI,cAAc,kBAAkB,SAAS,GAAG;AAC9C,UAAC,SAAiC,UAAU,IAAI;AAChD,uBAAa;AACb,8BAAoB,CAAC;AAAA,QACvB;AAGA,cAAM,QAAQ,KAAK,MAAM,sBAAsB;AAC/C,YAAI,OAAO;AACT,gBAAM,MAAM,MAAM,CAAC,EAAE,KAAK;AAC1B,gBAAM,QAAQ,MAAM,CAAC,EAAE,KAAK;AAE5B,cAAI,UAAU,IAAI;AAEhB,yBAAa;AACb,gCAAoB,CAAC;AAAA,UACvB,OAAO;AACL,gBAAI;AACF,cAAC,SAAiC,GAAG,IAAI,UAAU,KAAK;AAAA,YAC1D,SAAS,GAAG;AACV,cAAC,SAAiC,GAAG,IAAI;AAAA,YAC3C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,UAAM,SAAY,CAAC;AACnB,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const parseYaml = (input) => {
|
|
2
|
+
const trimmedInput = input.trim();
|
|
3
|
+
if (!trimmedInput) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
if (!trimmedInput.startsWith("[") && !trimmedInput.startsWith("{")) {
|
|
7
|
+
if (!isNaN(Number(trimmedInput))) {
|
|
8
|
+
return JSON.parse(trimmedInput);
|
|
9
|
+
}
|
|
10
|
+
if (trimmedInput.startsWith('"') && trimmedInput.endsWith('"') || trimmedInput.startsWith("'") && trimmedInput.endsWith("'")) {
|
|
11
|
+
return JSON.parse(trimmedInput);
|
|
12
|
+
}
|
|
13
|
+
return trimmedInput;
|
|
14
|
+
}
|
|
15
|
+
let normalizedInput = trimmedInput.replace(/^\[/, "[").replace(/^\{/, "{").replace(/\]$/, "]").replace(/\}$/, "}").replace(/([\w\d_]+)\s*:/g, '"$1":').replace(/:\s*([a-zA-Z_][\w\d_]*)/g, ': "$1"');
|
|
16
|
+
normalizedInput = normalizedInput.replace(
|
|
17
|
+
/\[([^\[\]]+?)\]/g,
|
|
18
|
+
(_match, arrayContent) => {
|
|
19
|
+
const newContent = arrayContent.split(",").map((item) => {
|
|
20
|
+
const trimmed = item.trim();
|
|
21
|
+
if (trimmed.startsWith('"') && trimmed.endsWith('"') || !isNaN(Number(trimmed))) {
|
|
22
|
+
return trimmed;
|
|
23
|
+
}
|
|
24
|
+
return `"${trimmed}"`;
|
|
25
|
+
}).join(", ");
|
|
26
|
+
return `[${newContent}]`;
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
return JSON.parse(normalizedInput);
|
|
30
|
+
};
|
|
31
|
+
export {
|
|
32
|
+
parseYaml
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=parseYaml.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/parseYaml.ts"],"sourcesContent":["export const parseYaml = <T = any>(input: string): T | null => {\n const trimmedInput = input.trim();\n\n // Handle empty input\n if (!trimmedInput) {\n return null;\n }\n\n // If it's a simple unquoted string (not an array or object), return it as-is\n if (!trimmedInput.startsWith('[') && !trimmedInput.startsWith('{')) {\n // Check if it's a number\n if (!isNaN(Number(trimmedInput))) {\n return JSON.parse(trimmedInput) as T;\n }\n // Check if it's already a quoted string\n if (\n (trimmedInput.startsWith('\"') && trimmedInput.endsWith('\"')) ||\n (trimmedInput.startsWith(\"'\") && trimmedInput.endsWith(\"'\"))\n ) {\n return JSON.parse(trimmedInput) as T;\n }\n // Return as unquoted string\n return trimmedInput as T;\n }\n\n // Normalize different bracket types and keys/values\n let normalizedInput = trimmedInput\n .replace(/^\\[/, '[') // Keep array brackets\n .replace(/^\\{/, '{') // Keep object brackets\n .replace(/\\]$/, ']') // Keep array brackets\n .replace(/\\}$/, '}') // Keep object brackets\n .replace(/([\\w\\d_]+)\\s*:/g, '\"$1\":') // Ensure JSON-valid keys (e.g., key: -> \"key\":)\n .replace(/:\\s*([a-zA-Z_][\\w\\d_]*)/g, ': \"$1\"'); // Handle unquoted string values\n\n // Fix arrays with unquoted items (e.g., [content, anotherContent])\n normalizedInput = normalizedInput.replace(\n /\\[([^\\[\\]]+?)\\]/g,\n (_match, arrayContent) => {\n const newContent = (arrayContent as string)\n .split(',')\n .map((item) => {\n const trimmed = item.trim();\n // If already quoted or is a valid number, return as is.\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n !isNaN(Number(trimmed))\n ) {\n return trimmed;\n }\n return `\"${trimmed}\"`;\n })\n .join(', ');\n return `[${newContent}]`;\n }\n );\n\n // Parse the string into an object\n return JSON.parse(normalizedInput) as T;\n};\n"],"mappings":"AAAO,MAAM,YAAY,CAAU,UAA4B;AAC7D,QAAM,eAAe,MAAM,KAAK;AAGhC,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,aAAa,WAAW,GAAG,KAAK,CAAC,aAAa,WAAW,GAAG,GAAG;AAElE,QAAI,CAAC,MAAM,OAAO,YAAY,CAAC,GAAG;AAChC,aAAO,KAAK,MAAM,YAAY;AAAA,IAChC;AAEA,QACG,aAAa,WAAW,GAAG,KAAK,aAAa,SAAS,GAAG,KACzD,aAAa,WAAW,GAAG,KAAK,aAAa,SAAS,GAAG,GAC1D;AACA,aAAO,KAAK,MAAM,YAAY;AAAA,IAChC;AAEA,WAAO;AAAA,EACT;AAGA,MAAI,kBAAkB,aACnB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,4BAA4B,QAAQ;AAG/C,oBAAkB,gBAAgB;AAAA,IAChC;AAAA,IACA,CAAC,QAAQ,iBAAiB;AACxB,YAAM,aAAc,aACjB,MAAM,GAAG,EACT,IAAI,CAAC,SAAS;AACb,cAAM,UAAU,KAAK,KAAK;AAE1B,YACG,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,KAChD,CAAC,MAAM,OAAO,OAAO,CAAC,GACtB;AACA,iBAAO;AAAA,QACT;AACA,eAAO,IAAI,OAAO;AAAA,MACpB,CAAC,EACA,KAAK,IAAI;AACZ,aAAO,IAAI,UAAU;AAAA,IACvB;AAAA,EACF;AAGA,SAAO,KAAK,MAAM,eAAe;AACnC;","names":[]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMarkdownMetadata.d.ts","sourceRoot":"","sources":["../../../../src/transpiler/markdown/getMarkdownMetadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getMarkdownMetadata.d.ts","sourceRoot":"","sources":["../../../../src/transpiler/markdown/getMarkdownMetadata.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/D,UAAU,MAAM,KACf,CA+EF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseYaml.d.ts","sourceRoot":"","sources":["../../../src/utils/parseYaml.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,CAAC,GAAG,GAAG,EAAE,OAAO,MAAM,KAAG,CAAC,GAAG,IA0DtD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/core",
|
|
3
|
-
"version": "6.1.
|
|
3
|
+
"version": "6.1.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Includes core Intlayer functions like translation, dictionary, and utility functions shared across multiple packages.",
|
|
6
6
|
"keywords": [
|
|
@@ -109,6 +109,42 @@
|
|
|
109
109
|
"types": "dist/types/index.d.ts",
|
|
110
110
|
"typesVersions": {
|
|
111
111
|
"*": {
|
|
112
|
+
".": [
|
|
113
|
+
"./dist/types/index.d.ts"
|
|
114
|
+
],
|
|
115
|
+
"file": [
|
|
116
|
+
"./dist/types/transpiler/file/file.d.ts"
|
|
117
|
+
],
|
|
118
|
+
"file/browser": [
|
|
119
|
+
"./dist/types/transpiler/file/file.d.ts"
|
|
120
|
+
],
|
|
121
|
+
"compact": [
|
|
122
|
+
"./dist/types/formatters/compact.d.ts"
|
|
123
|
+
],
|
|
124
|
+
"currency": [
|
|
125
|
+
"./dist/types/formatters/currency.d.ts"
|
|
126
|
+
],
|
|
127
|
+
"date": [
|
|
128
|
+
"./dist/types/formatters/date.d.ts"
|
|
129
|
+
],
|
|
130
|
+
"relativeTime": [
|
|
131
|
+
"./dist/types/formatters/relativeTime.d.ts"
|
|
132
|
+
],
|
|
133
|
+
"number": [
|
|
134
|
+
"./dist/types/formatters/number.d.ts"
|
|
135
|
+
],
|
|
136
|
+
"units": [
|
|
137
|
+
"./dist/types/formatters/units.d.ts"
|
|
138
|
+
],
|
|
139
|
+
"list": [
|
|
140
|
+
"./dist/types/formatters/list.d.ts"
|
|
141
|
+
],
|
|
142
|
+
"percentage": [
|
|
143
|
+
"./dist/types/formatters/percentage.d.ts"
|
|
144
|
+
],
|
|
145
|
+
"intl": [
|
|
146
|
+
"./dist/types/utils/intl.d.ts"
|
|
147
|
+
],
|
|
112
148
|
"package.json": [
|
|
113
149
|
"./package.json"
|
|
114
150
|
]
|
|
@@ -120,10 +156,10 @@
|
|
|
120
156
|
],
|
|
121
157
|
"dependencies": {
|
|
122
158
|
"negotiator": "^1.0.0",
|
|
123
|
-
"@intlayer/api": "6.1.
|
|
124
|
-
"@intlayer/
|
|
125
|
-
"@intlayer/dictionaries-entry": "6.1.
|
|
126
|
-
"@intlayer/
|
|
159
|
+
"@intlayer/api": "6.1.4",
|
|
160
|
+
"@intlayer/unmerged-dictionaries-entry": "6.1.4",
|
|
161
|
+
"@intlayer/dictionaries-entry": "6.1.4",
|
|
162
|
+
"@intlayer/config": "6.1.4"
|
|
127
163
|
},
|
|
128
164
|
"devDependencies": {
|
|
129
165
|
"@types/negotiator": "^0.6.3",
|
|
@@ -138,16 +174,16 @@
|
|
|
138
174
|
"typescript": "^5.9.2",
|
|
139
175
|
"vitest": "^3.2.4",
|
|
140
176
|
"@utils/eslint-config": "1.0.4",
|
|
141
|
-
"@utils/ts-config": "1.0.4",
|
|
142
177
|
"@utils/ts-config-types": "1.0.4",
|
|
143
|
-
"@utils/tsup-config": "1.0.4"
|
|
178
|
+
"@utils/tsup-config": "1.0.4",
|
|
179
|
+
"@utils/ts-config": "1.0.4"
|
|
144
180
|
},
|
|
145
181
|
"peerDependencies": {
|
|
146
|
-
"@intlayer/
|
|
147
|
-
"@intlayer/
|
|
148
|
-
"
|
|
149
|
-
"@intlayer/
|
|
150
|
-
"intlayer": "6.1.
|
|
182
|
+
"@intlayer/api": "6.1.4",
|
|
183
|
+
"@intlayer/dictionaries-entry": "6.1.4",
|
|
184
|
+
"intlayer": "6.1.4",
|
|
185
|
+
"@intlayer/config": "6.1.4",
|
|
186
|
+
"@intlayer/unmerged-dictionaries-entry": "6.1.4"
|
|
151
187
|
},
|
|
152
188
|
"engines": {
|
|
153
189
|
"node": ">=14.18"
|