• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

nodeplusplus / xregex-json / 95

pending completion
95

Pull #12

circleci

Unknown Committer
Unknown Commit Message
Pull Request #12: Bump json5 from 2.1.2 to 2.2.3

29 of 29 branches covered (100.0%)

Branch coverage included in aggregate %.

38 of 38 relevant lines covered (100.0%)

11.68 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/parse.ts
1
import { unflatten } from "flat";
2✔
2

3
import { GenericObject, ParseSeperators } from "./types/XJSON";
4
import { SEPERATOR_SEGMENT, SEPERATOR_KEY_VALUE } from "./constants";
2✔
5

6
export function parse<T>(data: string, seperators?: ParseSeperators): T | null {
2✔
7
  if (!data || typeof data !== "string") return null;
6✔
8

9
  const { segment: segmentSeperator, keyValue: keyValueSeperator } = {
3✔
10
    segment: SEPERATOR_SEGMENT,
11
    keyValue: SEPERATOR_KEY_VALUE,
12
    ...seperators,
13
  };
14

15
  const segments = data
3✔
16
    .split(segmentSeperator)
17
    .map((segment) => parseSegment(segment, keyValueSeperator))
18✔
18
    .filter(Boolean);
19
  return unflatten(Object.assign({}, ...segments), { object: false });
3✔
20
}
21

22
export function parseSegment(
2✔
23
  data: string,
24
  seperator = SEPERATOR_KEY_VALUE
11✔
25
): GenericObject | null {
26
  if (!data || typeof data !== "string") return null;
30✔
27
  data = data.trim();
27✔
28

29
  const firstSeperator = data.indexOf(seperator);
27✔
30
  // Key must be defined, so index of seperator cannot be 0
31
  if (firstSeperator <= 0) return null;
27✔
32

33
  const field = data.slice(0, firstSeperator);
24✔
34
  const value = data.slice(firstSeperator + 1, data.length);
24✔
35

36
  // Number
37
  if (Number.isFinite(Number(value))) return { [field]: Number(value) };
24✔
38
  // Boolean
39
  if (["true", "false"].includes(value)) {
21✔
40
    return { [field]: value === "true" };
4✔
41
  }
42
  // Datetime
43
  const ISO_REGEX = /(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})\.(\d{3})Z/;
17✔
44
  if (ISO_REGEX.test(value)) return { [field]: new Date(value) };
17✔
45
  // Other case
46
  return { [field]: value };
11✔
47
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc