मुख्य कंटेंट तक स्किप करें

API संदर्भ

@powerduck/conf-patch का पूरा संदर्भ, जिसमें हर एक्सपोर्ट किए गए प्रतीक के सिग्नेचर और डिफ़ॉल्ट मान शामिल हैं।

दो प्रवेश बिंदु उपलब्ध हैं:

  • @powerduck/conf-patch — नीचे दिए सभी कार्य: मुख्य स्तर, फ़ाइल स्तर, OpenAPI सत्यापन और उपयोगिताएँ।
  • @powerduck/conf-patch/core — केवल ब्राउज़र-अनुकूल भाग: patchContent, setContentValue, deleteContentValue, PatchContentOptions, शर्त जाँचने वाले सहायक फ़ंक्शन और ConfigFormat, JsonPatchOp, JsonPathSegment प्रकार।

मुख्य स्तर (ब्राउज़र के अनुकूल)​

patchContent​

कॉन्फ़िगरेशन स्ट्रिंग पर RFC 6902 पैच ऑपरेशन का ऐरे लागू करता है। यह शुद्ध फ़ंक्शन है और फ़ाइल सिस्टम तक नहीं पहुँचता।

function patchContent(
content: string,
ops: JsonPatchOp[],
format: ConfigFormat,
options?: PatchContentOptions,
): string;
पैरामीटरप्रकारविवरण
contentstringमूल कॉन्फ़िगरेशन सामग्री। दिए गए format के अनुसार मान्य होनी चाहिए।
opsJsonPatchOp[]क्रम से लागू किए जाने वाले ऑपरेशन। खाली ऐरे content को बिना बदले लौटाता है।
formatConfigFormat"json" | "jsonc" | "yaml"।
options.strictbooleantrue (डिफ़ॉल्ट) पर विफल ऑपरेशन अपवाद उत्पन्न करता है। false पर उसे छोड़ दिया जाता है और console.warn से चेतावनी दी जाती है।

लौटाता है: पैच लागू होने के बाद की कॉन्फ़िगरेशन सामग्री (string)।

अपवाद: content स्ट्रिंग न हो या ops अमान्य हो तो TypeError; strict के true होने पर विफल ऑपरेशन का विवरण देने वाली त्रुटि।

import { patchContent } from "@powerduck/conf-patch/core";

patchContent(
'{"name": "app"}',
[{ op: "add", path: ["version"], value: "1.0.0" }],
"json",
);
// => '{\n "name": "app",\n "version": "1.0.0"\n}'

setContentValue​

एक मान सेट करता या बनाता है। अंदर एक add ऑपरेशन के साथ patchContent बुलाता है। RFC 6902 के अनुसार, add मौजूदा ऑब्जेक्ट प्रॉपर्टी बदलता है या ऐरे इंडेक्स पर तत्व डालता है।

function setContentValue(
content: string,
path: readonly (string | number)[],
value: unknown,
format: ConfigFormat,
): string;
पैरामीटरप्रकारविवरण
contentstringमूल कॉन्फ़िगरेशन सामग्री।
pathreadonly (string | number)[]खंडों में दिया पथ, जैसे ["server", "port"]। खाली नहीं हो सकता।
valueunknownलिखा जाने वाला मान।
formatConfigFormatकॉन्फ़िगरेशन फ़ॉर्मैट।

लौटाता है: अपडेट की गई सामग्री (string)।

setContentValue("server:\n port: 3000\n", ["server", "port"], 8080, "yaml");

deleteContentValue​

कुंजी या ऐरे तत्व हटाता है। अंदर एक remove ऑपरेशन के साथ patchContent बुलाता है। पथ मौजूद होना चाहिए।

function deleteContentValue(
content: string,
path: readonly (string | number)[],
format: ConfigFormat,
): string;
deleteContentValue(
'{"name": "app", "legacy": true}',
["legacy"],
"json",
);

PatchContentOptions​

interface PatchContentOptions {
/** When true, failed operations throw. When false, they are skipped with a warning. Default: true */
strict?: boolean;
}

फ़ाइल स्तर (केवल Node.js / Electron)​

readConfigFile​

स्थानीय फ़ाइल पथ या file:// URL से UTF-8 टेक्स्ट पढ़ता है।

function readConfigFile(filePath: string): Promise<string>;
पैरामीटरप्रकारविवरण
filePathstringपूर्ण पथ, सापेक्ष पथ या file:// URL। खाली नहीं हो सकता।

लौटाता है: मूल UTF-8 सामग्री (Promise<string>)।

अपवाद: फ़ाइल पढ़ने में विफलता पर मूल फ़ाइल सिस्टम त्रुटि को समाहित करने वाली त्रुटि।


writeConfigFile​

अस्थायी फ़ाइल और नाम बदलने की प्रक्रिया से एटॉमिक लेखन करता है। डिफ़ॉल्ट रूप से अनन्य फ़ाइल लॉक उपयोग होता है। लॉक लेने से पहले पैरेंट डायरेक्टरी बनाई जाती हैं।

function writeConfigFile(
filePath: string,
content: string,
options?: WriteConfigOptions,
): Promise<void>;
पैरामीटरप्रकारविवरण
filePathstringकॉन्फ़िगरेशन फ़ाइल का पथ।
contentstringलिखी जाने वाली सामग्री। स्ट्रिंग होनी चाहिए।
optionsWriteConfigOptionsनीचे देखें।

अपवाद: अमान्य इनपुट पर TypeError; लेखन की फ़ाइल सिस्टम त्रुटियाँ समाहित करके दी जाती हैं।

WriteConfigOptions​

विकल्पप्रकारडिफ़ॉल्टविवरण
lockbooleantrueलेखन के दौरान फ़ाइल लॉक चालू करता है।
lockTimeoutMsnumberwithFileLock का डिफ़ॉल्ट (10 सेकंड)लॉक लेने के लिए अधिकतम प्रतीक्षा समय, मिलीसेकंड में।
lockRetryDelayMsnumberwithFileLock का डिफ़ॉल्ट (25 मिलीसेकंड)तेज़ी से बढ़ती प्रतीक्षा शुरू होने से पहले का प्रारंभिक पुनः प्रयास विलंब, मिलीसेकंड में।
lockStaleThresholdMsnumberwithFileLock का डिफ़ॉल्टलॉक की आयु, मिलीसेकंड में, जिसके बाद उसे पुनर्प्राप्त किया जा सकता है।
allowStaleRecoverybooleanfalseपुराने लॉक अपने-आप वापस लेने की अनुमति।
import { writeConfigFile } from "@powerduck/conf-patch";

await writeConfigFile("config.json", '{"name": "app"}');

patchConfigFile​

फ़ाइल स्तर का मुख्य लेनदेन: लॉक के भीतर फ़ाइल पढ़ता है, patchContent लागू करता है और केवल सामग्री बदलने पर एटॉमिक रूप से वापस लिखता है। options.format न देने पर एक्सटेंशन से फ़ॉर्मैट पहचाना जाता है।

function patchConfigFile(
filePath: string,
ops: JsonPatchOp[],
options?: PatchConfigOptions,
): Promise<void>;
पैरामीटरप्रकारविवरण
filePathstringकॉन्फ़िगरेशन फ़ाइल का पथ। खाली नहीं हो सकता।
opsJsonPatchOp[]लागू किए जाने वाले ऑपरेशन। खाली ऐरे बिना पढ़े या लिखे लौट जाता है।
optionsPatchConfigOptionsनीचे देखें।

अपवाद: filePath खाली हो, लॉक विकल्प अमान्य हों या फ़ॉर्मैट पहचाना न जा सके और format भी न दिया हो तो TypeError; strict के true होने पर ऑपरेशन की त्रुटि।

PatchConfigOptions​

विकल्पप्रकारडिफ़ॉल्टविवरण
formatConfigFormatस्वचालित पहचानस्पष्ट फ़ॉर्मैट, जिसे एक्सटेंशन की पहचान पर प्राथमिकता मिलती है।
strictbooleantrueविफल ऑपरेशन अपवाद उत्पन्न करते हैं।
lockbooleantrueफ़ाइल लॉक चालू करता है।
lockTimeoutMsnumber10 सेकंडगैर-ऋणात्मक मान। लॉक की अधिकतम प्रतीक्षा।
lockRetryDelayMsnumber25 मिलीसेकंडधनात्मक मान। प्रारंभिक पुनः प्रयास विलंब।
lockStaleThresholdMsnumberगणना से तयधनात्मक मान। पुराने लॉक की पुनर्प्राप्ति के लिए आवश्यक आयु।
allowStaleRecoverybooleanfalseपुराने लॉक अपने-आप वापस लेता है।
await patchConfigFile("config.json", [
{ op: "replace", path: ["server", "host"], value: "0.0.0.0" },
{ op: "add", path: ["server", "ssl"], value: true },
{ op: "remove", path: ["legacySection"] },
]);

setConfigValue​

फ़ाइल में नेस्टेड मान जोड़ता या बदलता है। एक add ऑपरेशन patchConfigFile को सौंपता है।

function setConfigValue(
filePath: string,
path: readonly (string | number)[],
value: unknown,
options?: PatchConfigOptions,
): Promise<void>;
await setConfigValue("config.yaml", ["database", "port"], 5432);

deleteConfigValue​

फ़ाइल से मौजूदा नेस्टेड मान हटाता है। एक remove ऑपरेशन patchConfigFile को सौंपता है।

function deleteConfigValue(
filePath: string,
path: readonly (string | number)[],
options?: PatchConfigOptions,
): Promise<void>;
await deleteConfigValue("config.json", ["features", "betaPreview"]);

withFileLock​

प्रक्रिया के भीतर की कतार और अनन्य लॉक फ़ाइल (<file>.confedit.lock) के अंतर्गत असिंक्रोनस कॉलबैक चलाता है। लॉक स्वामित्व टोकन उपयोग करते हैं। पुराना लॉक तभी पुनर्प्राप्त होता है जब allowStaleRecovery, true हो और उसकी आयु staleThresholdMs से अधिक हो। PID दोबारा उपयोग किए जा सकते हैं, इसलिए उनकी जाँच नहीं की जाती।

function withFileLock<T>(
filePath: string,
callback: () => Promise<T>,
options?: FileLockOptions,
): Promise<T>;
पैरामीटरप्रकारविवरण
filePathstringलॉक की जाने वाली फ़ाइल।
callback() => Promise<T>लॉक बनाए रखते समय चलने वाला कार्य।
optionsFileLockOptionsनीचे देखें।

लौटाता है: callback का परिणाम (Promise<T>)। कॉलबैक अपवाद उत्पन्न करे तब भी लॉक finally ब्लॉक में छोड़ा जाता है।

FileLockOptions​

विकल्पप्रकारडिफ़ॉल्टविवरण
timeoutMsnumber10000लॉक की अधिकतम प्रतीक्षा, मिलीसेकंड में। गैर-ऋणात्मक होनी चाहिए।
retryDelayMsnumber25प्रारंभिक विलंब, मिलीसेकंड में। धनात्मक होना चाहिए। विलंब 1.5 गुना बढ़ता है, अधिकतम 1000 मिलीसेकंड तक।
staleThresholdMsnumbermax(timeoutMs * 2, 60000)पुनर्प्राप्ति की अनुमति देने वाली लॉक आयु, मिलीसेकंड में। धनात्मक होनी चाहिए।
allowStaleRecoverybooleanfalseपुराने लॉक की स्वचालित पुनर्प्राप्ति। सक्रिय लेनदेन बाधित न हों, इसलिए Electron की एकल मुख्य प्रक्रिया में यह डिफ़ॉल्ट रूप से बंद है।
import { withFileLock } from "@powerduck/conf-patch";

await withFileLock("state.json", async () => {
// ... read, modify, write ...
}, { timeoutMs: 5000 });

releaseAllLocalLocks​

वर्तमान प्रक्रिया की सभी लॉक फ़ाइलें हटाता है। सक्रिय फ़ाइल लेनदेन पूरे होने के बाद, अनुप्रयोग बंद करते समय उपयोग करें। Electron में असिंक्रोनस सफ़ाई के लिए पहला निकास इवेंट रोकें और सफ़ाई पूरी होने पर निकास जारी रखें; उदाहरण देखें। अलग-अलग लॉक की विफलताएँ अनदेखी की जाती हैं।

function releaseAllLocalLocks(): Promise<void>;

OpenAPI सत्यापन​

validateOpenAPISpec​

मूल OpenAPI/Swagger सामग्री को JSON या YAML के रूप में सत्यापित करता है। डिफ़ॉल्ट रूप से इनपुट सामग्री माना जाता है; केवल inputKind: "file" पर फ़ाइल पथ समझा जाता है। सत्यापन @powerduck/openapi-parser करता है; यह फ़ंक्शन इनपुट पर सुरक्षा जाँच जोड़ता है।

function validateOpenAPISpec(
input: string,
options?: ValidateOpenApiOptions,
): Promise<AnyOpenAPIDocument>;
पैरामीटरप्रकारविवरण
inputstringमूल विनिर्देश सामग्री, या inputKind: "file" पर फ़ाइल पथ।
optionsValidateOpenApiOptionsनीचे देखें।

लौटाता है: सफलता पर सत्यापित दस्तावेज़ (Promise<AnyOpenAPIDocument>)।

अपवाद: खाली या गैर-स्ट्रिंग इनपुट पर TypeError; अमान्य विकल्प या सत्यापन विफलता पर OpenApiValidationError।


validateOpenAPIFile​

सहायक फ़ंक्शन जो inputKind: "file" और दिए पथ वाले baseFilePath के साथ validateOpenAPISpec बुलाता है। allowedRootDirectory आवश्यक है।

function validateOpenAPIFile(
filePath: string,
options?: ValidateOpenApiOptions,
): Promise<AnyOpenAPIDocument>;
import { validateOpenAPIFile } from "@powerduck/conf-patch";

const doc = await validateOpenAPIFile("./configs/openapi.yaml", {
allowedRootDirectory: "./configs",
});

ValidateOpenApiOptions​

विकल्पप्रकारडिफ़ॉल्टविवरण
inputKind"content" | "file""content"input को कैसे समझना है।
baseFilePathstring—संदर्भ समाधान के लिए आधार पथ।
allowedRootDirectorystring—फ़ाइल इनपुट की मूल डायरेक्टरी। inputKind के "file" होने पर अनिवार्य।
timeoutMsnumber15000ऑपरेशन की समय-सीमा, मिलीसेकंड में।
maxInputBytesnumber5242880 (5 MB)मूल इनपुट का अधिकतम आकार, बाइट में।
maxDocumentNodesnumber100000पार्स किए दस्तावेज़ में अधिकतम नोड, DoS सुरक्षा के लिए।
maxDocumentDepthnumber100अधिकतम नेस्टिंग गहराई, DoS सुरक्षा के लिए।
maxValidationErrorsnumber50संदेश में शामिल त्रुटियों की अधिकतम संख्या।
maxErrorMessageLengthnumber1000हर सत्यापन त्रुटि में अधिकतम वर्ण।
signalAbortSignal—वैकल्पिक रद्द करने का संकेत।

OpenApiValidationError​

सत्यापन विफल होने पर संरचित त्रुटि। क्लाइंट को लौटाने से पहले अनुप्रयोग की सीमा पर त्रुटि का उपयुक्त रूप बनाएँ; संदेश और कारण में स्थानीय पथ या दस्तावेज़ विवरण हो सकते हैं।

class OpenApiValidationError extends Error {
readonly code: string;
readonly cause?: unknown;
constructor(code: string, message: string, cause?: unknown);
}
प्रॉपर्टीप्रकारविवरण
codestringप्रोग्राम से पढ़ा जा सकने वाला त्रुटि कोड; नीचे की तालिका देखें।
messagestringउपयोगकर्ता के पढ़ने योग्य विवरण।
causeunknownवैकल्पिक मूल त्रुटि।

त्रुटि कोड​

कोडअर्थ
INVALID_OPTIONअमान्य विकल्प मान दिया गया।
INPUT_TOO_LARGEमूल सामग्री maxInputBytes से अधिक है।
INPUT_FILE_TOO_LARGEइनपुट फ़ाइल आकार सीमा से बड़ी है।
FILE_INPUT_FORBIDDENallowedRootDirectory के बिना फ़ाइल इनपुट उपयोग हुआ।
PATH_OUTSIDE_ROOTहल किया गया फ़ाइल पथ allowedRootDirectory के बाहर है।
PARSE_ERRORJSON/YAML सामग्री पार्स नहीं हो सकी।
INVALID_DOCUMENT_SHAPEदस्तावेज़ JSON ऑब्जेक्ट नहीं है।
UNSUPPORTED_VERSIONदस्तावेज़ समर्थित OpenAPI/Swagger संस्करण घोषित नहीं करता; केवल मुख्य संस्करण 2 और 3 स्वीकार किए जाते हैं।
DOCUMENT_TOO_DEEPनेस्टिंग गहराई maxDocumentDepth से अधिक है।
DOCUMENT_TOO_LARGEनोड की संख्या maxDocumentNodes से अधिक है।
SPEC_VALIDATION_FAILEDविनिर्देश OpenAPI सत्यापन में विफल रहा।
OPERATION_TIMEOUTऑपरेशन ने timeoutMs पार कर लिया।
OPERATION_ABORTEDऑपरेशन signal से रद्द हुआ।
UNKNOWN_ERRORअनपेक्षित त्रुटि।

उपयोगिताएँ​

detectFormat​

फ़ाइल पथ या file:// URL के एक्सटेंशन से ConfigFormat पहचानता है।

function detectFormat(filePath: string): ConfigFormat;
एक्सटेंशनपरिणाम
.json"json"
.jsonc"jsonc"
.yaml, .yml"yaml"
कोई अन्य एक्सटेंशनत्रुटि उत्पन्न करता है

normalizeFilePath​

स्थानीय पथ या file: URL को सिस्टम के पूर्ण पथ में बदलता है। मान्य खाली स्थान और Unicode फ़ाइल नाम बनाए रखता है।

function normalizeFilePath(filePath: string): string;

file: URL को fileURLToPath से डिकोड किया जाता है; पूर्ण पथ बिना बदले लौटता है; सापेक्ष पथ process.cwd() के आधार पर हल होता है।


शर्त जाँचने वाले सहायक फ़ंक्शन​

इन्हें उन्नत उपयोग और आंतरिक मॉड्यूल के लिए दोबारा एक्सपोर्ट किया जाता है। अनुप्रयोग कोड को सीधे इनकी कम ही आवश्यकता होती है।

assertNonEmptyString​

function assertNonEmptyString(value: unknown, label: string): asserts value is string;

value खाली न होने वाली स्ट्रिंग न हो तो TypeError उत्पन्न करता है।

assertPatchPath​

function assertPatchPath(
path: readonly (string | number)[],
label?: string, // default "path"
): void;

path ऐसा गैर-खाली ऐरे न हो जिसके खंड गैर-खाली स्ट्रिंग या सुरक्षित गैर-ऋणात्मक पूर्णांक हों, तो अपवाद उत्पन्न करता है।

assertPatchOperations​

function assertPatchOperations(ops: JsonPatchOp[]): void;

हर ऑपरेशन जाँचता है: op, "add" | "replace" | "remove" होना चाहिए; path को assertPatchPath पास करना चाहिए; add/replace में अपनी value प्रॉपर्टी होनी चाहिए।

assertConfigFormat​

function assertConfigFormat(format: ConfigFormat): void;

format, "json", "jsonc" या "yaml" न हो तो अपवाद उत्पन्न करता है।

getErrorMessage​

function getErrorMessage(error: unknown): string;

Error इंस्टेंस के लिए error.message, अन्यथा String(error) लौटाता है।

createError​

function createError(message: string, cause: unknown): Error;

Error बनाकर Object.defineProperty से cause प्रॉपर्टी जोड़ता है; पुराने रनटाइम के लिए वैकल्पिक तरीका भी है।


प्रकार​

ConfigFormat​

type ConfigFormat = "json" | "jsonc" | "yaml";

JsonPathSegment​

type JsonPathSegment = string | number;

JsonPatchOp​

interface JsonPatchOp {
op: "add" | "replace" | "remove";
path: JsonPathSegment[];
/** Required for "add" and "replace". */
value?: unknown;
}
caution

केवल "add", "replace" और "remove" समर्थित हैं। "move", "copy" और "test" जानबूझकर शामिल नहीं किए गए हैं।

PatchConfigOptions​

interface PatchConfigOptions {
format?: ConfigFormat;
strict?: boolean;
lock?: boolean;
lockTimeoutMs?: number;
lockRetryDelayMs?: number;
lockStaleThresholdMs?: number;
/** Whether stale locks can be automatically reclaimed. Defaults to false. */
allowStaleRecovery?: boolean;
}

FileLockOptions​

interface FileLockOptions {
/** Max time to wait for a lock. Defaults to 10 seconds. */
timeoutMs?: number;
/** Initial retry delay. Defaults to 25ms. */
retryDelayMs?: number;
/** Explicit lock age after which recovery is allowed. */
staleThresholdMs?: number;
/** Whether stale locks can be automatically reclaimed. Defaults to false. */
allowStaleRecovery?: boolean;
}

WriteConfigOptions​

interface WriteConfigOptions {
lock?: boolean;
lockTimeoutMs?: number;
lockRetryDelayMs?: number;
lockStaleThresholdMs?: number;
allowStaleRecovery?: boolean;
}

PatchContentOptions​

interface PatchContentOptions {
strict?: boolean;
}

OpenApiInputKind​

type OpenApiInputKind = "content" | "file";

AnyOpenAPIDocument​

सत्यापन से लौटने वाली समर्थित OpenAPI/Swagger दस्तावेज़ संरचनाओं का यूनियन प्रकार:

type AnyOpenAPIDocument =
| OpenAPIV2.Document // Swagger 2.0
| OpenAPIV3.Document // OpenAPI 3.0.x
| OpenAPIV3_1.Document // OpenAPI 3.1.x
| OpenAPIV3_2Document; // OpenAPI 3.2 (permissive structural type)

OpenAPIV3_2Document अपेक्षाकृत लचीला संरचनात्मक प्रकार है:

interface OpenAPIV3_2Document {
openapi: string;
info: Record<string, unknown>;
paths?: Record<string, unknown>;
[key: string]: unknown;
}

एक्सपोर्ट सारांश​

प्रतीकमुख्य प्रवेशमुख्य स्तर का उपपथश्रेणी
patchContent✓✓फ़ंक्शन
setContentValue✓✓फ़ंक्शन
deleteContentValue✓✓फ़ंक्शन
PatchContentOptions✓✓प्रकार
assertNonEmptyString✓✓फ़ंक्शन
assertPatchPath✓✓फ़ंक्शन
assertPatchOperations✓✓फ़ंक्शन
assertConfigFormat✓✓फ़ंक्शन
getErrorMessage✓✓फ़ंक्शन
createError✓✓फ़ंक्शन
ConfigFormat✓✓प्रकार
JsonPatchOp✓✓प्रकार
JsonPathSegment✓✓प्रकार
readConfigFile✓—फ़ंक्शन
writeConfigFile✓—फ़ंक्शन
WriteConfigOptions✓—प्रकार
patchConfigFile✓—फ़ंक्शन
setConfigValue✓—फ़ंक्शन
deleteConfigValue✓—फ़ंक्शन
withFileLock✓—फ़ंक्शन
releaseAllLocalLocks✓—फ़ंक्शन
PatchConfigOptions✓—प्रकार
FileLockOptions✓—प्रकार
detectFormat✓—फ़ंक्शन
normalizeFilePath✓—फ़ंक्शन
validateOpenAPISpec✓—फ़ंक्शन
validateOpenAPIFile✓—फ़ंक्शन
OpenApiValidationError✓—क्लास
ValidateOpenApiOptions✓—प्रकार
OpenApiInputKind✓—प्रकार
AnyOpenAPIDocument✓—प्रकार