UNPKG

prismaql

Version:

A powerful tool for managing and editing Prisma schema files using a SQL-like DSL.

152 lines (147 loc) 5.36 kB
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/update-enum.ts var update_enum_exports = {}; __export(update_enum_exports, { updateEnum: () => updateEnum }); module.exports = __toCommonJS(update_enum_exports); // src/modules/handler-registries/handler-registry.ts var handlerResponse = (dsl) => { return { error: (error) => { return { dsl, error }; }, result: (result) => { return { dsl, result }; } }; }; // 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/prehandlers/mutation-handlers/update-enum.ts var updateEnum = (prismaState, data) => { const { args, options } = data; const response = handlerResponse(data); const enumName = args?.enums?.[0]; if (!enumName) { return response.error("No enum name provided. Example: UPDATE ENUM ->[EnumName] ({A|B|C})"); } if (!data.prismaBlock) { return response.error("No enum block provided. Example: 'UPDATE ENUM EnumName ->[({A|B|C})];'"); } let keys = []; if (data.prismaBlock) { keys = data.prismaBlock.split(/\s+/); } if (!keys.length) { return response.error("No enum options provided. Example: 'UPDATE ENUM EnumName ({ ->[A|B|C] });'"); } try { const enumOptions = keys?.map((key) => constantCase(key)); const builder = prismaState.builder; const prevEnum = builder.findByType("enum", { name: enumName }); if (!prevEnum) { builder.enum(enumName, enumOptions); return response.result(`Enum ${enumName} added successfully`); } const oldValues = prevEnum.enumerators.filter((el) => el.type == "enumerator").map((e) => e.name); const doExtend = !options?.replace; let finalValues; if (doExtend) { finalValues = Array.from(/* @__PURE__ */ new Set([...oldValues, ...enumOptions])); } else { finalValues = enumOptions; } builder.drop(enumName); builder.enum(enumName, finalValues); 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 = { updateEnum });