parsePath static method
Implementation
static List<Object> parsePath(String path) {
final trimmed = path.trim();
if (trimmed.isEmpty) return const [];
if (trimmed.startsWith('/')) {
return [
for (final part in trimmed.substring(1).split('/'))
if (part.isNotEmpty)
int.tryParse(part) ??
Uri.decodeComponent(
part.replaceAll('~1', '/').replaceAll('~0', '~')),
];
}
final segments = <Object>[];
final pattern = RegExp(r'([^.\[\]]+)|\[(\d+)\]');
var index = 0;
for (final match in pattern.allMatches(trimmed)) {
if (match.start != index) {
throw FormatException('unexpected character at index $index');
}
final key = match.group(1);
final listIndex = match.group(2);
if (key != null) {
segments.add(key);
} else if (listIndex != null) {
segments.add(int.parse(listIndex));
}
index = match.end;
if (index < trimmed.length && trimmed[index] == '.') {
index++;
}
}
if (index != trimmed.length) {
throw FormatException('unexpected trailing character at index $index');
}
return segments;
}