prismaql
Version:
A powerful tool for managing and editing Prisma schema files using a SQL-like DSL.
141 lines (136 loc) • 4.89 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/modules/prehandlers/mutation-handlers/add-enum.ts
var add_enum_exports = {};
__export(add_enum_exports, {
addEnum: () => addEnum
});
module.exports = __toCommonJS(add_enum_exports);
// node_modules/change-case/dist/index.cjs
var SPLIT_LOWER_UPPER_RE = new RegExp("([\\p{Ll}\\d])(\\p{Lu})", "gu");
var SPLIT_UPPER_UPPER_RE = new RegExp("(\\p{Lu})([\\p{Lu}][\\p{Ll}])", "gu");
var SPLIT_SEPARATE_NUMBER_RE = new RegExp("(\\d)\\p{Ll}|(\\p{L})\\d", "u");
var DEFAULT_STRIP_REGEXP = /[^\p{L}\d]+/giu;
var SPLIT_REPLACE_VALUE = "$1\0$2";
var DEFAULT_PREFIX_SUFFIX_CHARACTERS = "";
function split(value) {
let result = value.trim();
result = result.replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE).replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);
result = result.replace(DEFAULT_STRIP_REGEXP, "\0");
let start = 0;
let end = result.length;
while (result.charAt(start) === "\0")
start++;
if (start === end)
return [];
while (result.charAt(end - 1) === "\0")
end--;
return result.slice(start, end).split(/\0/g);
}
function splitSeparateNumbers(value) {
const words = split(value);
for (let i = 0; i < words.length; i++) {
const word = words[i];
const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);
if (match) {
const offset = match.index + (match[1] ?? match[2]).length;
words.splice(i, 1, word.slice(0, offset), word.slice(offset));
}
}
return words;
}
function constantCase(input, options) {
const [prefix, words, suffix] = splitPrefixSuffix(input, options);
return prefix + words.map(upperFactory(options?.locale)).join(options?.delimiter ?? "_") + suffix;
}
function upperFactory(locale) {
return locale === false ? (input) => input.toUpperCase() : (input) => input.toLocaleUpperCase(locale);
}
function splitPrefixSuffix(input, options = {}) {
const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);
const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
let prefixIndex = 0;
let suffixIndex = input.length;
while (prefixIndex < input.length) {
const char = input.charAt(prefixIndex);
if (!prefixCharacters.includes(char))
break;
prefixIndex++;
}
while (suffixIndex > prefixIndex) {
const index = suffixIndex - 1;
const char = input.charAt(index);
if (!suffixCharacters.includes(char))
break;
suffixIndex = index;
}
return [
input.slice(0, prefixIndex),
splitFn(input.slice(prefixIndex, suffixIndex)),
input.slice(suffixIndex)
];
}
// src/modules/handler-registries/handler-registry.ts
var handlerResponse = (dsl) => {
return {
error: (error) => {
return { dsl, error };
},
result: (result) => {
return {
dsl,
result
};
}
};
};
// src/modules/prehandlers/mutation-handlers/add-enum.ts
var addEnum = (prismaState, data) => {
const { args } = data;
const response = handlerResponse(data);
const enumName = (args?.enums || [])[0];
if (!enumName.length) {
return response.error("No enum name provided. Example: 'ADD ENUM ->[EnumName] ({A|B|C});'");
}
if (!data.prismaBlock) {
return response.error("No enum block provided. Example: 'ADD ENUM EnumName ->[({A|B|C})];'");
}
let keys = [];
if (data.prismaBlock) {
keys = data.prismaBlock.split(/\s+/).map((key) => constantCase(key));
}
if (!keys.length) {
return response.error("No enum options provided. Example: 'ADD ENUM EnumName ({ ->[A|B|C] });'");
}
try {
const builder = prismaState.builder;
const prevEnum = builder.findByType("enum", { name: enumName });
if (prevEnum) {
return response.error(`Enum ${enumName} already exists`);
}
builder.enum(enumName, keys);
return response.result(`Enum ${enumName} added successfully!`);
} catch (error) {
return response.error(`Error adding enum: ${error.message}`);
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
addEnum
});