1#![doc = include_str!("../README.md")]
2#![deny(rust_2018_idioms, unsafe_code, missing_docs)]
3
4pub use psl_core::builtin_connectors;
5use psl_core::parser_database::{ExtensionTypes, Files, NoExtensionTypes};
6pub use psl_core::{
7 ALL_PREVIEW_FEATURES,
8 Configuration,
9 ConnectorRegistry,
10 Datasource,
11 DatasourceConnectorData,
12 DatasourceUrls,
13 FeatureMapWithProvider,
14 Generator,
15 GeneratorConfigValue,
16 PreviewFeature,
17 PreviewFeatures,
18 StringFromEnvVar,
19 ValidatedSchema,
20 builtin_connectors::{can_have_capability, can_support_relation_load_strategy, has_capability},
21 datamodel_connector,
22 diagnostics::{self, Diagnostics},
23 generators,
24 is_reserved_type_name,
25 mcf::config_to_mcf_json_value as get_config,
26 mcf::{generators_to_json, render_sources_to_json}, parser_database::{self, SourceFile},
28 reachable_only_with_capability,
29 reformat,
30 reformat_multiple,
31 reformat_validated_schema_into_single,
32 schema_ast,
33 set_config_dir,
34};
35
36pub mod get_config {
38 pub use psl_core::mcf::{config_to_mcf_json_value as get_config, *};
39}
40
41pub fn parse_configuration(schema: &str) -> Result<Configuration, Diagnostics> {
44 psl_core::parse_configuration(schema, builtin_connectors::BUILTIN_CONNECTORS)
45}
46
47pub fn parse_configuration_multi_file(
50 files: &[(String, SourceFile)],
51) -> Result<(Files, Configuration), (Files, Diagnostics)> {
52 psl_core::parse_configuration_multi_file(files, builtin_connectors::BUILTIN_CONNECTORS)
53}
54
55pub fn error_tolerant_parse_configuration(files: &[(String, SourceFile)]) -> (Files, Configuration, Diagnostics) {
60 psl_core::error_tolerant_parse_configuration(files, builtin_connectors::BUILTIN_CONNECTORS)
61}
62
63pub fn parse_schema(
65 file: impl Into<SourceFile>,
66 extension_types: &dyn ExtensionTypes,
67) -> Result<ValidatedSchema, String> {
68 let mut schema = validate(file.into(), extension_types);
69 schema
70 .diagnostics
71 .to_result()
72 .map_err(|err| err.to_pretty_string("schema.prisma", schema.db.source_assert_single()))?;
73 Ok(schema)
74}
75
76pub fn parse_schema_without_extensions(file: impl Into<SourceFile>) -> Result<ValidatedSchema, String> {
79 parse_schema(file, &NoExtensionTypes)
80}
81
82pub fn parse_schema_multi(
84 files: &[(String, SourceFile)],
85 extension_types: &dyn ExtensionTypes,
86) -> Result<ValidatedSchema, String> {
87 let mut schema = validate_multi_file(files, extension_types);
88
89 schema
90 .diagnostics
91 .to_result()
92 .map_err(|err| schema.db.render_diagnostics(&err))?;
93
94 Ok(schema)
95}
96
97pub fn parse_schema_multi_without_extensions(files: &[(String, SourceFile)]) -> Result<ValidatedSchema, String> {
100 parse_schema_multi(files, &NoExtensionTypes)
101}
102
103pub fn validate(file: SourceFile, extension_types: &dyn ExtensionTypes) -> ValidatedSchema {
106 psl_core::validate(file, builtin_connectors::BUILTIN_CONNECTORS, extension_types)
107}
108
109pub fn validate_without_extensions(file: SourceFile) -> ValidatedSchema {
113 validate(file, &NoExtensionTypes)
114}
115
116pub fn parse_without_validation(
118 file: SourceFile,
119 connector_registry: ConnectorRegistry<'_>,
120 extension_types: &dyn ExtensionTypes,
121) -> ValidatedSchema {
122 psl_core::parse_without_validation(file, connector_registry, extension_types)
123}
124
125pub fn validate_multi_file(files: &[(String, SourceFile)], extension_types: &dyn ExtensionTypes) -> ValidatedSchema {
128 psl_core::validate_multi_file(files, builtin_connectors::BUILTIN_CONNECTORS, extension_types)
129}
130
131pub fn validate_multi_file_without_extensions(files: &[(String, SourceFile)]) -> ValidatedSchema {
135 validate_multi_file(files, &NoExtensionTypes)
136}