Commit iniziale
This commit is contained in:
135
node_modules/@tediousjs/connection-string/lib/parser/connection-string.js
generated
vendored
Normal file
135
node_modules/@tediousjs/connection-string/lib/parser/connection-string.js
generated
vendored
Normal 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
|
||||
Reference in New Issue
Block a user