@prisma/language-server
Version:
Prisma Language Server
55 lines • 2.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFirstDatasourceName = getFirstDatasourceName;
exports.getFirstDatasourceProvider = getFirstDatasourceProvider;
exports.getAllPreviewFeaturesFromGenerators = getAllPreviewFeaturesFromGenerators;
function getFirstDatasourceName(schema) {
const datasourceBlockFirstLine = schema
.linesAsArray()
.find((line) => line.text.startsWith('datasource') && line.text.includes('{'));
if (!datasourceBlockFirstLine) {
return undefined;
}
const indexOfBracket = datasourceBlockFirstLine.text.indexOf('{');
return datasourceBlockFirstLine.text.slice('datasource'.length, indexOfBracket).trim();
}
function getFirstDatasourceProvider(schema) {
// matches provider inside datasource in any position
// thanks to https://regex101.com for the online scratchpad
const result = schema.findWithRegex(/datasource.*\{(\n|\N)\s*(.*\n)?\n*\s*provider\s=\s(\"(.*)\")[^}]+}/);
if (!result || !result.match[4]) {
return undefined;
}
const datasourceProvider = result.match[4];
if (typeof datasourceProvider === 'string' && datasourceProvider.length >= 1) {
return datasourceProvider;
}
}
function getAllPreviewFeaturesFromGenerators(schema) {
/**
* ```prisma
* generator client {
* provider = "prisma-client-js"
* // previewFeatures = [] // This will be ignored
* previewFeatures = ["views"]
* }
* ```
*
* ? for more info: https://regex101.com/r/ezoTU2/2
*/
const previewFeaturesRegex = /^\s*(?!\/\/\s)previewFeatures\s*=\s*(\[.*\])/m;
const result = schema.findWithRegex(previewFeaturesRegex);
if (!result || !result.match[1]) {
return undefined;
}
try {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const previewFeatures = JSON.parse(result.match[1]);
if (Array.isArray(previewFeatures) && previewFeatures.length > 0) {
return previewFeatures.map((it) => it.toLowerCase());
}
}
catch (e) { }
return undefined;
}
//# sourceMappingURL=configBlock.js.map