UNPKG

@prisma/language-server

Version:
55 lines 2.18 kB
"use strict"; 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