Commit iniziale

This commit is contained in:
Paolo A
2025-02-18 22:59:07 +00:00
commit 4bbf35cefb
6879 changed files with 623784 additions and 0 deletions

View File

@@ -0,0 +1,135 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var CollectionMode;
(function (CollectionMode) {
CollectionMode[CollectionMode["key"] = 0] = "key";
CollectionMode[CollectionMode["value"] = 1] = "value";
})(CollectionMode || (CollectionMode = {}));
const CONFIG = Object.freeze({
key: {
terminator: '=',
quotes: {},
},
value: {
terminator: ';',
quotes: {
'"': '"',
"'": "'",
'{': '}',
},
},
});
function connectionStringParser(connectionString, parserConfig = CONFIG) {
const parsed = {};
let collectionMode = CollectionMode.key;
let started = false;
let finished = false;
let quoted = false;
let quote = '';
let buffer = '';
let currentKey = '';
let pointer = 0;
function start() {
started = true;
}
function finish() {
finished = true;
}
function reset() {
started = false;
finished = false;
quoted = false;
quote = '';
buffer = '';
}
function config() {
return collectionMode === CollectionMode.key ? parserConfig.key : parserConfig.value;
}
function isTerminator(char) {
return config().terminator === char;
}
function isStartQuote(char) {
return Object.keys(config().quotes).some((val) => char === val);
}
function isEndQuote(char) {
return quoted && char === config().quotes[quote];
}
function push(char) {
buffer += char;
}
function collect() {
if (!quoted) {
buffer = buffer.trim();
}
switch (collectionMode) {
case CollectionMode.key:
currentKey = buffer.toLowerCase();
collectionMode = CollectionMode.value;
break;
case CollectionMode.value:
collectionMode = CollectionMode.key;
parsed[currentKey] = buffer;
currentKey = '';
break;
}
reset();
}
while (pointer < connectionString.length) {
const current = connectionString.charAt(pointer);
if (!finished) {
if (!started) {
if (current.trim()) {
start();
if (isStartQuote(current)) {
quoted = true;
quote = current;
}
else {
push(current);
}
}
}
else {
if (quoted && isEndQuote(current)) {
const next = connectionString.charAt(pointer + 1);
if (current === next) {
push(current);
pointer++;
}
else {
finish();
}
}
else if (!quoted && isTerminator(current)) {
const next = connectionString.charAt(pointer + 1);
if (current === next) {
push(current);
pointer++;
}
else {
collect();
}
}
else {
push(current);
}
}
}
else if (isTerminator(current)) {
collect();
}
else if (current.trim()) {
throw new Error('Malformed connection string');
}
pointer++;
}
if (quoted && !finished) {
throw new Error('Connection string terminated unexpectedly');
}
else {
collect();
}
return parsed;
}
exports.default = connectionStringParser;
//# sourceMappingURL=connection-string.js.map