@drupal-kit/core
Advanced tools
+6
-0
| # @drupal-kit/core | ||
| ## 0.11.3 | ||
| ### Patch Changes | ||
| - [#99](https://github.com/wunderwerkio/drupal-kit/pull/99) [`344c9ae`](https://github.com/wunderwerkio/drupal-kit/commit/344c9ae8092785e70193c81547d86479b7a57a0c) Thanks [@chfoidl](https://github.com/chfoidl)! - Remove negative lookbehind regex to support older browsers | ||
| ## 0.11.2 | ||
@@ -4,0 +10,0 @@ |
+10
-2
@@ -116,6 +116,14 @@ import { Result } from '@wunderwerk/ts-functional/results'; | ||
| const trimSlashesFromSegment = (segment) => { | ||
| return segment.replace(/^\/+|(?<!\/)\/+$/g, ""); | ||
| let start = 0; | ||
| let end = segment.length; | ||
| while (start < end && segment[start] === "/") { | ||
| start++; | ||
| } | ||
| while (end > start && segment[end - 1] === "/") { | ||
| end--; | ||
| } | ||
| return segment.substring(start, end); | ||
| }; | ||
| const VERSION = "0.11.2"; | ||
| const VERSION = "0.11.3"; | ||
@@ -122,0 +130,0 @@ class Drupalkit { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.mjs","sources":["../src/DrupalkitError.ts","../src/fetch-wrapper.ts","../src/utils.ts","../src/version.ts","../src/Drupalkit.ts"],"sourcesContent":["import * as DrupalkitTypes from \"@drupal-kit/types\";\n\nimport { RequestErrorOptions } from \"./types.js\";\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n\nexport type DrupalkitErrorOptions = RequestErrorOptions;\n\n/**\n * Custom error class to help with error handling.\n */\nexport class DrupalkitError extends Error {\n /**\n * Error name.\n */\n readonly name: \"HttpError\";\n\n /**\n * HTTP status code.\n */\n readonly statusCode: number;\n\n /**\n * Request options that lead to the error.\n */\n readonly request: DrupalkitTypes.RequestRequestOptions;\n\n /**\n * Response object if a response was received.\n */\n readonly response?: DrupalkitTypes.DrupalkitResponse<unknown>;\n\n /**\n * Construct a new DrupalkitError.\n *\n * @param message - Error message.\n * @param statusCode - HTTP status code.\n * @param options - Request / Response that lead to the error.\n */\n constructor(\n message: string,\n statusCode: number,\n options: DrupalkitErrorOptions,\n ) {\n super(message);\n\n // Maintains proper stack trace (only available on V8)\n // @ts-ignore\n if (Error.captureStackTrace) {\n // @ts-ignore\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.statusCode = statusCode;\n\n if (options.response) {\n this.response = options.response;\n }\n\n // redact request credentials without mutating original request options\n const requestCopy = Object.assign({}, options.request);\n if (options.request.headers?.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(\n /(?!\\w).*$/,\n \" [REDACTED]\",\n ),\n });\n }\n\n this.request = requestCopy;\n }\n}\n","import { isPlainObject } from \"is-plain-object\";\nimport { Fetch, RequestRequestOptions } from \"@drupal-kit/types\";\n\nimport { DrupalkitError } from \"./DrupalkitError.js\";\n\n/**\n * Function that wraps the fetch call.\n *\n * Sets up the request and handles errors and responses.\n *\n * @param requestOptions - Options for the request.\n */\nexport default function fetchWrapper<R>(\n requestOptions: RequestRequestOptions & {\n redirect?: \"error\" | \"follow\" | \"manual\";\n fetch?: Fetch;\n },\n) {\n if (\n isPlainObject(requestOptions.body) ||\n Array.isArray(requestOptions.body)\n ) {\n requestOptions.body = JSON.stringify(requestOptions.body);\n }\n\n const headers: { [header: string]: string } = {};\n let status: number;\n let url: string;\n\n const fetch: typeof globalThis.fetch =\n requestOptions.fetch || globalThis.fetch;\n\n return fetch(\n requestOptions.url,\n Object.assign(\n {\n method: requestOptions.method,\n body: requestOptions.body,\n headers: requestOptions.headers as HeadersInit,\n redirect: requestOptions.redirect,\n },\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n requestOptions as any,\n ),\n )\n .then(async (response) => {\n url = response.url;\n status = response.status;\n\n for (const [key, value] of response.headers) {\n headers[key] = value;\n }\n\n if (status === 204 || status === 205) {\n return;\n }\n\n if (status >= 400) {\n const data = await getResponseData(response);\n\n const error = new DrupalkitError(toErrorMessage(data), status, {\n response: {\n url,\n status,\n headers,\n data,\n },\n request: requestOptions,\n });\n\n throw error;\n }\n\n return getResponseData(response);\n })\n .then((data) => {\n return {\n status,\n url,\n headers,\n data: data as R,\n };\n })\n .catch((error) => {\n if (error instanceof DrupalkitError) throw error;\n // @todo Uncomment if AbortSignal is implemented.\n //else if (error.name === \"AbortError\") throw error;\n\n throw new DrupalkitError(error.message, 500, {\n request: requestOptions,\n });\n });\n}\n\n/**\n * Extract data from response depending on the content type.\n *\n * @param response - Response object.\n */\nasync function getResponseData(response: Response) {\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType && /application\\/(vnd\\.api\\+json|json)/.test(contentType)) {\n return response.json();\n }\n\n return response.text();\n}\n\n/**\n * Convert the error message to a human readable string.\n *\n * @param data - Error data.\n */\nfunction toErrorMessage(data: unknown): string {\n if (typeof data === \"string\") return data;\n\n // istanbul ignore else - just in case\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = data as any;\n\n if (data && typeof data === \"object\") {\n if (\"message\" in data) {\n if (\"errors\" in data && Array.isArray(data.errors)) {\n return `${data.message}: ${data.errors\n .map((err) => JSON.stringify(err))\n .join(\", \")}`;\n }\n\n return String(data.message);\n }\n }\n\n // istanbul ignore next - just in case\n return `Unknown error: ${JSON.stringify(data)}`;\n}\n","/**\n * Trim slashes at start / end from given segment.\n *\n * @param segment - The segment or url.\n */\nexport const trimSlashesFromSegment = (segment: string) => {\n return segment.replace(/^\\/+|(?<!\\/)\\/+$/g, \"\");\n};\n","export const VERSION = \"0.11.2\";","import { Result } from \"@wunderwerk/ts-functional/results\";\nimport Hook, { HookCollection } from \"before-after-hook\";\nimport qs from \"qs\";\nimport {\n DrupalkitResponse,\n Fetch,\n Log,\n OverrideableRequestOptions,\n RequestOptions,\n RequestRequestOptions,\n Url,\n} from \"@drupal-kit/types\";\n\nimport { DrupalkitError } from \"./DrupalkitError.js\";\nimport fetchWrapper from \"./fetch-wrapper.js\";\nimport {\n Constructor,\n DrupalkitOptions,\n DrupalkitPlugin,\n Hooks,\n Query,\n ReturnTypeOf,\n UnionToIntersection,\n} from \"./types.js\";\nimport { trimSlashesFromSegment } from \"./utils.js\";\nimport { VERSION } from \"./version.js\";\n\n/**\n * Drupalkit base calss.\n */\nexport class Drupalkit {\n /**\n * Array of plugins.\n */\n static plugins: DrupalkitPlugin[] = [];\n\n // assigned during constructor\n readonly fetch?: Fetch;\n readonly baseUrl: string;\n readonly availableLocales: string[] = [];\n readonly defaultLocale?: string;\n readonly agent: string;\n readonly log: Log;\n readonly hook: HookCollection<Hooks>;\n private locale?: string;\n private auth?: string;\n\n /**\n * Attach a plugin (or many) to your Drupalkit instance.\n *\n * @param newPlugins - Array of plugins to attach.\n * @example\n * const API = Drupalkit.plugin(plugin1, plugin2, plugin3, ...)\n */\n static plugin<\n S extends Constructor<object> & { plugins: unknown[] },\n T extends DrupalkitPlugin[],\n >(this: S, ...newPlugins: T) {\n const currentPlugins = this.plugins;\n\n /**\n * New class with attached plugins.\n */\n const NewDrupalkit = class extends this {\n static plugins = currentPlugins.concat(\n newPlugins.filter((plugin) => !currentPlugins.includes(plugin)),\n );\n };\n\n return NewDrupalkit as typeof this &\n Constructor<UnionToIntersection<ReturnTypeOf<T>>>;\n }\n\n /**\n * Construct new drupalkit instance.\n *\n * @param options - The drupakit options.\n */\n constructor(options: DrupalkitOptions) {\n const hook = new Hook.Collection<Hooks>();\n\n /* eslint-disable no-console */\n /* eslint-disable jsdoc/require-jsdoc */\n /* eslint-disable @typescript-eslint/no-empty-function */\n this.log = Object.assign(\n {\n debug: () => {},\n info: () => {},\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n },\n options.log,\n );\n /* eslint-enable no-console */\n /* eslint-enable jsdoc/require-jsdoc */\n /* eslint-disable @typescript-eslint/no-empty-function */\n\n this.hook = hook;\n this.baseUrl = trimSlashesFromSegment(options.baseUrl);\n this.agent = `drupal-kit/${VERSION}`;\n\n if (options.locale) {\n this.locale = options.locale;\n this.availableLocales.push(options.locale);\n }\n\n if (options.defaultLocale) {\n this.defaultLocale = options.defaultLocale;\n\n // Add default locale to available if it's not already there.\n if (!this.availableLocales.includes(options.defaultLocale)) {\n this.availableLocales.push(options.defaultLocale);\n }\n }\n\n if (options.availableLocales) {\n this.availableLocales = options.availableLocales;\n }\n\n // Set default locale to locale if set.\n if (!options.defaultLocale && options.locale) {\n this.defaultLocale = options.locale;\n } else if (!options.locale && options.defaultLocale) {\n this.locale = options.defaultLocale;\n }\n\n if (options.fetch) {\n this.fetch = options.fetch;\n }\n\n this.applyPlugins(options);\n }\n\n /**\n * Dispatch a request to the Drupal API.\n *\n * @param url - Relative or absolute url.\n * @param options - Request options.\n * @param optionOverrides - Optional overridden options. These options are merged correctly with the actual options and allow for user-specific overrides.\n */\n public request<R>(\n url: Url,\n options: RequestOptions,\n optionOverrides?: OverrideableRequestOptions,\n ): Promise<Result<DrupalkitResponse<R, number>, DrupalkitError>> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n const request = (options: RequestRequestOptions) => {\n return fetchWrapper<R>(options);\n };\n\n const headers = {\n ...options.headers,\n \"user-agent\": this.agent,\n };\n\n if (optionOverrides?.headers) {\n Object.assign(headers, optionOverrides.headers);\n }\n\n // Delete auth header if unauthenticated is true.\n if (options.unauthenticated || optionOverrides?.unauthenticated) {\n delete headers.authorization;\n } else if (this.auth) {\n headers.authorization = this.auth;\n }\n\n const requestOptions = {\n ...options,\n ...optionOverrides,\n url: this.buildUrl(url, {\n localeOverride: optionOverrides?.locale ?? options.locale,\n }),\n baseUrl: this.baseUrl,\n log: this.log,\n headers,\n };\n\n const p = this.hook(\"request\", request, requestOptions)\n .then((response) => Result.Ok(response as DrupalkitResponse<R, number>))\n .catch((error) => {\n if (error instanceof DrupalkitError) return Result.Err(error);\n\n return Result.Err(\n new DrupalkitError(error.message, 500, {\n request: requestOptions,\n }),\n );\n });\n\n return p;\n }\n\n /**\n * Set authorization header value.\n *\n * @param auth - The authorization header value.\n */\n public setAuth(auth: string) {\n this.auth = auth;\n }\n\n /**\n * Checks if auth data is set.\n */\n public hasAuth() {\n return !!this.auth;\n }\n\n /**\n * Unsets previously set auth info.\n *\n * Makes sure that subsequent requests are anonymous.\n */\n public unsetAuth() {\n this.auth = undefined;\n }\n\n /**\n * Set the locale.\n *\n * @param locale - The locale.\n */\n public setLocale(locale: string) {\n this.locale = locale;\n }\n\n /**\n * Constructs a Drupal API url.\n *\n * @param url - The url for the request. Can be relative or absolute.\n * @param options - An optional object containing additional options.\n * @param options.localeOverride - An optional override for the locale.\n * @param options.customPrefix - A custom prefix to prepend to the url.\n * @param options.query - An optional object containing query parameters.\n * @returns The constructed URL as a string.\n */\n public buildUrl(\n url: Url,\n options?: {\n localeOverride?: string;\n customPrefix?: string;\n query?: Query;\n },\n ) {\n // Do nothing with absolute urls.\n if (url.startsWith(\"http\")) {\n return url;\n }\n\n const locale = options?.localeOverride ?? this.locale;\n\n let finalUrl = this.baseUrl;\n\n // Prepend locale to url if the locale is not the default one.\n if (locale && locale !== this.defaultLocale) {\n finalUrl += \"/\" + locale;\n }\n\n // Add custom prefix if provided.\n if (options?.customPrefix) {\n finalUrl += \"/\" + trimSlashesFromSegment(options.customPrefix);\n }\n\n // Only append url if not empty.\n if (url) {\n finalUrl += \"/\" + trimSlashesFromSegment(url);\n }\n\n if (options?.query) {\n finalUrl += \"?\" + qs.stringify(options.query);\n }\n\n return finalUrl;\n }\n\n /**\n * Applies all plugins to the drupalkit instance.\n *\n * Plugin data will be merged up to two levels.\n *\n * @param options - The drupalkit options.\n * @see https://stackoverflow.com/a/16345172\n */\n private applyPlugins(options: DrupalkitOptions) {\n const classConstructor = this.constructor as typeof Drupalkit;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mergedPluginData: Record<string, any> = {};\n\n classConstructor.plugins.forEach((plugin) => {\n const pluginData = plugin(this, options);\n if (!pluginData) {\n return;\n }\n\n for (const [key, value] of Object.entries(pluginData)) {\n if (!mergedPluginData[key]) {\n mergedPluginData[key] = {};\n }\n\n if (typeof value === \"object\") {\n Object.assign(mergedPluginData[key], value);\n } else {\n mergedPluginData[key] = value;\n }\n }\n });\n\n Object.assign(this, mergedPluginData);\n }\n}\n"],"names":["options"],"mappings":";;;;;AAWO,MAAM,uBAAuB,KAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BxC,WAAA,CACE,OACA,EAAA,UAAA,EACA,OACA,EAAA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAIb,IAAA,IAAI,MAAM,iBAAmB,EAAA;AAE3B,MAAM,KAAA,CAAA,iBAAA,CAAkB,IAAM,EAAA,IAAA,CAAK,WAAW,CAAA,CAAA;AAAA,KAChD;AAEA,IAAA,IAAA,CAAK,IAAO,GAAA,WAAA,CAAA;AACZ,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAElB,IAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,MAAA,IAAA,CAAK,WAAW,OAAQ,CAAA,QAAA,CAAA;AAAA,KAC1B;AAGA,IAAA,MAAM,cAAc,MAAO,CAAA,MAAA,CAAO,EAAC,EAAG,QAAQ,OAAO,CAAA,CAAA;AACrD,IAAI,IAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,EAAS,aAAe,EAAA;AAC1C,MAAA,WAAA,CAAY,UAAU,MAAO,CAAA,MAAA,CAAO,EAAI,EAAA,OAAA,CAAQ,QAAQ,OAAS,EAAA;AAAA,QAC/D,aAAe,EAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,CAAQ,aAAc,CAAA,OAAA;AAAA,UACnD,WAAA;AAAA,UACA,aAAA;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,IAAA,CAAK,OAAU,GAAA,WAAA,CAAA;AAAA,GACjB;AACF;;AC7DA,SAAwB,aACtB,cAIA,EAAA;AACA,EACE,IAAA,aAAA,CAAc,eAAe,IAAI,CAAA,IACjC,MAAM,OAAQ,CAAA,cAAA,CAAe,IAAI,CACjC,EAAA;AACA,IAAA,cAAA,CAAe,IAAO,GAAA,IAAA,CAAK,SAAU,CAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AAAA,GAC1D;AAEA,EAAA,MAAM,UAAwC,EAAC,CAAA;AAC/C,EAAI,IAAA,MAAA,CAAA;AACJ,EAAI,IAAA,GAAA,CAAA;AAEJ,EAAM,MAAA,KAAA,GACJ,cAAe,CAAA,KAAA,IAAS,UAAW,CAAA,KAAA,CAAA;AAErC,EAAO,OAAA,KAAA;AAAA,IACL,cAAe,CAAA,GAAA;AAAA,IACf,MAAO,CAAA,MAAA;AAAA,MACL;AAAA,QACE,QAAQ,cAAe,CAAA,MAAA;AAAA,QACvB,MAAM,cAAe,CAAA,IAAA;AAAA,QACrB,SAAS,cAAe,CAAA,OAAA;AAAA,QACxB,UAAU,cAAe,CAAA,QAAA;AAAA,OAC3B;AAAA;AAAA,MAEA,cAAA;AAAA,KACF;AAAA,GACF,CACG,IAAK,CAAA,OAAO,QAAa,KAAA;AACxB,IAAA,GAAA,GAAM,QAAS,CAAA,GAAA,CAAA;AACf,IAAA,MAAA,GAAS,QAAS,CAAA,MAAA,CAAA;AAElB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,SAAS,OAAS,EAAA;AAC3C,MAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,KACjB;AAEA,IAAI,IAAA,MAAA,KAAW,GAAO,IAAA,MAAA,KAAW,GAAK,EAAA;AACpC,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,UAAU,GAAK,EAAA;AACjB,MAAM,MAAA,IAAA,GAAO,MAAM,eAAA,CAAgB,QAAQ,CAAA,CAAA;AAE3C,MAAA,MAAM,QAAQ,IAAI,cAAA,CAAe,cAAe,CAAA,IAAI,GAAG,MAAQ,EAAA;AAAA,QAC7D,QAAU,EAAA;AAAA,UACR,GAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA;AAAA,UACA,IAAA;AAAA,SACF;AAAA,QACA,OAAS,EAAA,cAAA;AAAA,OACV,CAAA,CAAA;AAED,MAAM,MAAA,KAAA,CAAA;AAAA,KACR;AAEA,IAAA,OAAO,gBAAgB,QAAQ,CAAA,CAAA;AAAA,GAChC,CAAA,CACA,IAAK,CAAA,CAAC,IAAS,KAAA;AACd,IAAO,OAAA;AAAA,MACL,MAAA;AAAA,MACA,GAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,KACF,CAAA;AAAA,GACD,CAAA,CACA,KAAM,CAAA,CAAC,KAAU,KAAA;AAChB,IAAI,IAAA,KAAA,YAAiB,gBAAsB,MAAA,KAAA,CAAA;AAI3C,IAAA,MAAM,IAAI,cAAA,CAAe,KAAM,CAAA,OAAA,EAAS,GAAK,EAAA;AAAA,MAC3C,OAAS,EAAA,cAAA;AAAA,KACV,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACL,CAAA;AAOA,eAAe,gBAAgB,QAAoB,EAAA;AACjD,EAAA,MAAM,WAAc,GAAA,QAAA,CAAS,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,CAAA;AAEvD,EAAA,IAAI,WAAe,IAAA,oCAAA,CAAqC,IAAK,CAAA,WAAW,CAAG,EAAA;AACzE,IAAA,OAAO,SAAS,IAAK,EAAA,CAAA;AAAA,GACvB;AAEA,EAAA,OAAO,SAAS,IAAK,EAAA,CAAA;AACvB,CAAA;AAOA,SAAS,eAAe,IAAuB,EAAA;AAC7C,EAAI,IAAA,OAAO,IAAS,KAAA,QAAA,EAAiB,OAAA,IAAA,CAAA;AAIrC,EAAO,IAAA,GAAA,IAAA,CAAA;AAEP,EAAI,IAAA,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAU,EAAA;AACpC,IAAA,IAAI,aAAa,IAAM,EAAA;AACrB,MAAA,IAAI,YAAY,IAAQ,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAM,CAAG,EAAA;AAClD,QAAA,OAAO,GAAG,IAAK,CAAA,OAAO,CAAK,EAAA,EAAA,IAAA,CAAK,OAC7B,GAAI,CAAA,CAAC,GAAQ,KAAA,IAAA,CAAK,UAAU,GAAG,CAAC,CAChC,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,OACf;AAEA,MAAO,OAAA,MAAA,CAAO,KAAK,OAAO,CAAA,CAAA;AAAA,KAC5B;AAAA,GACF;AAGA,EAAA,OAAO,CAAkB,eAAA,EAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AAC/C;;AClIa,MAAA,sBAAA,GAAyB,CAAC,OAAoB,KAAA;AACzD,EAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,mBAAA,EAAqB,EAAE,CAAA,CAAA;AAChD,CAAA;;ACPO,MAAM,OAAU,GAAA,QAAA;;AC8BhB,MAAM,SAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgDrB,YAAY,OAA2B,EAAA;AAvCvC,IAAA,IAAA,CAAS,mBAA6B,EAAC,CAAA;AAwCrC,IAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,UAAkB,EAAA,CAAA;AAKxC,IAAA,IAAA,CAAK,MAAM,MAAO,CAAA,MAAA;AAAA,MAChB;AAAA,QACE,OAAO,MAAM;AAAA,SAAC;AAAA,QACd,MAAM,MAAM;AAAA,SAAC;AAAA,QACb,IAAM,EAAA,OAAA,CAAQ,IAAK,CAAA,IAAA,CAAK,OAAO,CAAA;AAAA,QAC/B,KAAO,EAAA,OAAA,CAAQ,KAAM,CAAA,IAAA,CAAK,OAAO,CAAA;AAAA,OACnC;AAAA,MACA,OAAQ,CAAA,GAAA;AAAA,KACV,CAAA;AAKA,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAK,IAAA,CAAA,OAAA,GAAU,sBAAuB,CAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AACrD,IAAK,IAAA,CAAA,KAAA,GAAQ,cAAc,OAAO,CAAA,CAAA,CAAA;AAElC,IAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,MAAA,IAAA,CAAK,SAAS,OAAQ,CAAA,MAAA,CAAA;AACtB,MAAK,IAAA,CAAA,gBAAA,CAAiB,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,KAC3C;AAEA,IAAA,IAAI,QAAQ,aAAe,EAAA;AACzB,MAAA,IAAA,CAAK,gBAAgB,OAAQ,CAAA,aAAA,CAAA;AAG7B,MAAA,IAAI,CAAC,IAAK,CAAA,gBAAA,CAAiB,QAAS,CAAA,OAAA,CAAQ,aAAa,CAAG,EAAA;AAC1D,QAAK,IAAA,CAAA,gBAAA,CAAiB,IAAK,CAAA,OAAA,CAAQ,aAAa,CAAA,CAAA;AAAA,OAClD;AAAA,KACF;AAEA,IAAA,IAAI,QAAQ,gBAAkB,EAAA;AAC5B,MAAA,IAAA,CAAK,mBAAmB,OAAQ,CAAA,gBAAA,CAAA;AAAA,KAClC;AAGA,IAAA,IAAI,CAAC,OAAA,CAAQ,aAAiB,IAAA,OAAA,CAAQ,MAAQ,EAAA;AAC5C,MAAA,IAAA,CAAK,gBAAgB,OAAQ,CAAA,MAAA,CAAA;AAAA,KACpB,MAAA,IAAA,CAAC,OAAQ,CAAA,MAAA,IAAU,QAAQ,aAAe,EAAA;AACnD,MAAA,IAAA,CAAK,SAAS,OAAQ,CAAA,aAAA,CAAA;AAAA,KACxB;AAEA,IAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,MAAA,IAAA,CAAK,QAAQ,OAAQ,CAAA,KAAA,CAAA;AAAA,KACvB;AAEA,IAAA,IAAA,CAAK,aAAa,OAAO,CAAA,CAAA;AAAA,GAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA7EA,OAAO,UAGO,UAAe,EAAA;AAzD/B,IAAA,IAAA,EAAA,CAAA;AA0DI,IAAA,MAAM,iBAAiB,IAAK,CAAA,OAAA,CAAA;AAK5B,IAAM,MAAA,YAAA,IAAe,mBAAc,IAAK,CAAA;AAAA,KAIxC,EAJqB,EACZ,CAAA,OAAA,GAAU,cAAe,CAAA,MAAA;AAAA,MAC9B,UAAA,CAAW,OAAO,CAAC,MAAA,KAAW,CAAC,cAAe,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,KAF7C,EAAA,EAAA,CAAA,CAAA;AAMrB,IAAO,OAAA,YAAA,CAAA;AAAA,GAET;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqEO,OAAA,CACL,GACA,EAAA,OAAA,EACA,eAC+D,EAAA;AAE/D,IAAM,MAAA,OAAA,GAAU,CAACA,QAAmC,KAAA;AAClD,MAAA,OAAO,aAAgBA,QAAO,CAAA,CAAA;AAAA,KAChC,CAAA;AAEA,IAAA,MAAM,OAAU,GAAA;AAAA,MACd,GAAG,OAAQ,CAAA,OAAA;AAAA,MACX,cAAc,IAAK,CAAA,KAAA;AAAA,KACrB,CAAA;AAEA,IAAA,IAAI,iBAAiB,OAAS,EAAA;AAC5B,MAAO,MAAA,CAAA,MAAA,CAAO,OAAS,EAAA,eAAA,CAAgB,OAAO,CAAA,CAAA;AAAA,KAChD;AAGA,IAAI,IAAA,OAAA,CAAQ,eAAmB,IAAA,eAAA,EAAiB,eAAiB,EAAA;AAC/D,MAAA,OAAO,OAAQ,CAAA,aAAA,CAAA;AAAA,KACjB,MAAA,IAAW,KAAK,IAAM,EAAA;AACpB,MAAA,OAAA,CAAQ,gBAAgB,IAAK,CAAA,IAAA,CAAA;AAAA,KAC/B;AAEA,IAAA,MAAM,cAAiB,GAAA;AAAA,MACrB,GAAG,OAAA;AAAA,MACH,GAAG,eAAA;AAAA,MACH,GAAA,EAAK,IAAK,CAAA,QAAA,CAAS,GAAK,EAAA;AAAA,QACtB,cAAA,EAAgB,eAAiB,EAAA,MAAA,IAAU,OAAQ,CAAA,MAAA;AAAA,OACpD,CAAA;AAAA,MACD,SAAS,IAAK,CAAA,OAAA;AAAA,MACd,KAAK,IAAK,CAAA,GAAA;AAAA,MACV,OAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,IAAI,IAAK,CAAA,IAAA,CAAK,SAAW,EAAA,OAAA,EAAS,cAAc,CACnD,CAAA,IAAA,CAAK,CAAC,QAAA,KAAa,OAAO,EAAG,CAAA,QAAwC,CAAC,CACtE,CAAA,KAAA,CAAM,CAAC,KAAU,KAAA;AAChB,MAAA,IAAI,KAAiB,YAAA,cAAA,EAAuB,OAAA,MAAA,CAAO,IAAI,KAAK,CAAA,CAAA;AAE5D,MAAA,OAAO,MAAO,CAAA,GAAA;AAAA,QACZ,IAAI,cAAA,CAAe,KAAM,CAAA,OAAA,EAAS,GAAK,EAAA;AAAA,UACrC,OAAS,EAAA,cAAA;AAAA,SACV,CAAA;AAAA,OACH,CAAA;AAAA,KACD,CAAA,CAAA;AAEH,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,IAAc,EAAA;AAC3B,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAU,GAAA;AACf,IAAO,OAAA,CAAC,CAAC,IAAK,CAAA,IAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAY,GAAA;AACjB,IAAA,IAAA,CAAK,IAAO,GAAA,KAAA,CAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,MAAgB,EAAA;AAC/B,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYO,QAAA,CACL,KACA,OAKA,EAAA;AAEA,IAAI,IAAA,GAAA,CAAI,UAAW,CAAA,MAAM,CAAG,EAAA;AAC1B,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,MAAA,GAAS,OAAS,EAAA,cAAA,IAAkB,IAAK,CAAA,MAAA,CAAA;AAE/C,IAAA,IAAI,WAAW,IAAK,CAAA,OAAA,CAAA;AAGpB,IAAI,IAAA,MAAA,IAAU,MAAW,KAAA,IAAA,CAAK,aAAe,EAAA;AAC3C,MAAA,QAAA,IAAY,GAAM,GAAA,MAAA,CAAA;AAAA,KACpB;AAGA,IAAA,IAAI,SAAS,YAAc,EAAA;AACzB,MAAY,QAAA,IAAA,GAAA,GAAM,sBAAuB,CAAA,OAAA,CAAQ,YAAY,CAAA,CAAA;AAAA,KAC/D;AAGA,IAAA,IAAI,GAAK,EAAA;AACP,MAAY,QAAA,IAAA,GAAA,GAAM,uBAAuB,GAAG,CAAA,CAAA;AAAA,KAC9C;AAEA,IAAA,IAAI,SAAS,KAAO,EAAA;AAClB,MAAA,QAAA,IAAY,GAAM,GAAA,EAAA,CAAG,SAAU,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,KAC9C;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,aAAa,OAA2B,EAAA;AAC9C,IAAA,MAAM,mBAAmB,IAAK,CAAA,WAAA,CAAA;AAG9B,IAAA,MAAM,mBAAwC,EAAC,CAAA;AAE/C,IAAiB,gBAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC3C,MAAM,MAAA,UAAA,GAAa,MAAO,CAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AACvC,MAAA,IAAI,CAAC,UAAY,EAAA;AACf,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,UAAU,CAAG,EAAA;AACrD,QAAI,IAAA,CAAC,gBAAiB,CAAA,GAAG,CAAG,EAAA;AAC1B,UAAiB,gBAAA,CAAA,GAAG,IAAI,EAAC,CAAA;AAAA,SAC3B;AAEA,QAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,UAAA,MAAA,CAAO,MAAO,CAAA,gBAAA,CAAiB,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,SACrC,MAAA;AACL,UAAA,gBAAA,CAAiB,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,SAC1B;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAED,IAAO,MAAA,CAAA,MAAA,CAAO,MAAM,gBAAgB,CAAA,CAAA;AAAA,GACtC;AACF,CAAA;AAAA;AAAA;AAAA;AAxRa,SAAA,CAIJ,UAA6B,EAAC;;;;"} | ||
| {"version":3,"file":"index.mjs","sources":["../src/DrupalkitError.ts","../src/fetch-wrapper.ts","../src/utils.ts","../src/version.ts","../src/Drupalkit.ts"],"sourcesContent":["import * as DrupalkitTypes from \"@drupal-kit/types\";\n\nimport { RequestErrorOptions } from \"./types.js\";\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n\nexport type DrupalkitErrorOptions = RequestErrorOptions;\n\n/**\n * Custom error class to help with error handling.\n */\nexport class DrupalkitError extends Error {\n /**\n * Error name.\n */\n readonly name: \"HttpError\";\n\n /**\n * HTTP status code.\n */\n readonly statusCode: number;\n\n /**\n * Request options that lead to the error.\n */\n readonly request: DrupalkitTypes.RequestRequestOptions;\n\n /**\n * Response object if a response was received.\n */\n readonly response?: DrupalkitTypes.DrupalkitResponse<unknown>;\n\n /**\n * Construct a new DrupalkitError.\n *\n * @param message - Error message.\n * @param statusCode - HTTP status code.\n * @param options - Request / Response that lead to the error.\n */\n constructor(\n message: string,\n statusCode: number,\n options: DrupalkitErrorOptions,\n ) {\n super(message);\n\n // Maintains proper stack trace (only available on V8)\n // @ts-ignore\n if (Error.captureStackTrace) {\n // @ts-ignore\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = \"HttpError\";\n this.statusCode = statusCode;\n\n if (options.response) {\n this.response = options.response;\n }\n\n // redact request credentials without mutating original request options\n const requestCopy = Object.assign({}, options.request);\n if (options.request.headers?.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(\n /(?!\\w).*$/,\n \" [REDACTED]\",\n ),\n });\n }\n\n this.request = requestCopy;\n }\n}\n","import { isPlainObject } from \"is-plain-object\";\nimport { Fetch, RequestRequestOptions } from \"@drupal-kit/types\";\n\nimport { DrupalkitError } from \"./DrupalkitError.js\";\n\n/**\n * Function that wraps the fetch call.\n *\n * Sets up the request and handles errors and responses.\n *\n * @param requestOptions - Options for the request.\n */\nexport default function fetchWrapper<R>(\n requestOptions: RequestRequestOptions & {\n redirect?: \"error\" | \"follow\" | \"manual\";\n fetch?: Fetch;\n },\n) {\n if (\n isPlainObject(requestOptions.body) ||\n Array.isArray(requestOptions.body)\n ) {\n requestOptions.body = JSON.stringify(requestOptions.body);\n }\n\n const headers: { [header: string]: string } = {};\n let status: number;\n let url: string;\n\n const fetch: typeof globalThis.fetch =\n requestOptions.fetch || globalThis.fetch;\n\n return fetch(\n requestOptions.url,\n Object.assign(\n {\n method: requestOptions.method,\n body: requestOptions.body,\n headers: requestOptions.headers as HeadersInit,\n redirect: requestOptions.redirect,\n },\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n requestOptions as any,\n ),\n )\n .then(async (response) => {\n url = response.url;\n status = response.status;\n\n for (const [key, value] of response.headers) {\n headers[key] = value;\n }\n\n if (status === 204 || status === 205) {\n return;\n }\n\n if (status >= 400) {\n const data = await getResponseData(response);\n\n const error = new DrupalkitError(toErrorMessage(data), status, {\n response: {\n url,\n status,\n headers,\n data,\n },\n request: requestOptions,\n });\n\n throw error;\n }\n\n return getResponseData(response);\n })\n .then((data) => {\n return {\n status,\n url,\n headers,\n data: data as R,\n };\n })\n .catch((error) => {\n if (error instanceof DrupalkitError) throw error;\n // @todo Uncomment if AbortSignal is implemented.\n //else if (error.name === \"AbortError\") throw error;\n\n throw new DrupalkitError(error.message, 500, {\n request: requestOptions,\n });\n });\n}\n\n/**\n * Extract data from response depending on the content type.\n *\n * @param response - Response object.\n */\nasync function getResponseData(response: Response) {\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType && /application\\/(vnd\\.api\\+json|json)/.test(contentType)) {\n return response.json();\n }\n\n return response.text();\n}\n\n/**\n * Convert the error message to a human readable string.\n *\n * @param data - Error data.\n */\nfunction toErrorMessage(data: unknown): string {\n if (typeof data === \"string\") return data;\n\n // istanbul ignore else - just in case\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data = data as any;\n\n if (data && typeof data === \"object\") {\n if (\"message\" in data) {\n if (\"errors\" in data && Array.isArray(data.errors)) {\n return `${data.message}: ${data.errors\n .map((err) => JSON.stringify(err))\n .join(\", \")}`;\n }\n\n return String(data.message);\n }\n }\n\n // istanbul ignore next - just in case\n return `Unknown error: ${JSON.stringify(data)}`;\n}\n","/**\n * Trim slashes at start / end from given segment.\n *\n * @param segment - The segment or url.\n */\nexport const trimSlashesFromSegment = (segment: string) => {\n // return segment.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n let start = 0;\n let end = segment.length;\n\n while (start < end && segment[start] === \"/\") {\n start++;\n }\n\n while (end > start && segment[end - 1] === \"/\") {\n end--;\n }\n\n return segment.substring(start, end);\n};\n","export const VERSION = \"0.11.3\";","import { Result } from \"@wunderwerk/ts-functional/results\";\nimport Hook, { HookCollection } from \"before-after-hook\";\nimport qs from \"qs\";\nimport {\n DrupalkitResponse,\n Fetch,\n Log,\n OverrideableRequestOptions,\n RequestOptions,\n RequestRequestOptions,\n Url,\n} from \"@drupal-kit/types\";\n\nimport { DrupalkitError } from \"./DrupalkitError.js\";\nimport fetchWrapper from \"./fetch-wrapper.js\";\nimport {\n Constructor,\n DrupalkitOptions,\n DrupalkitPlugin,\n Hooks,\n Query,\n ReturnTypeOf,\n UnionToIntersection,\n} from \"./types.js\";\nimport { trimSlashesFromSegment } from \"./utils.js\";\nimport { VERSION } from \"./version.js\";\n\n/**\n * Drupalkit base calss.\n */\nexport class Drupalkit {\n /**\n * Array of plugins.\n */\n static plugins: DrupalkitPlugin[] = [];\n\n // assigned during constructor\n readonly fetch?: Fetch;\n readonly baseUrl: string;\n readonly availableLocales: string[] = [];\n readonly defaultLocale?: string;\n readonly agent: string;\n readonly log: Log;\n readonly hook: HookCollection<Hooks>;\n private locale?: string;\n private auth?: string;\n\n /**\n * Attach a plugin (or many) to your Drupalkit instance.\n *\n * @param newPlugins - Array of plugins to attach.\n * @example\n * const API = Drupalkit.plugin(plugin1, plugin2, plugin3, ...)\n */\n static plugin<\n S extends Constructor<object> & { plugins: unknown[] },\n T extends DrupalkitPlugin[],\n >(this: S, ...newPlugins: T) {\n const currentPlugins = this.plugins;\n\n /**\n * New class with attached plugins.\n */\n const NewDrupalkit = class extends this {\n static plugins = currentPlugins.concat(\n newPlugins.filter((plugin) => !currentPlugins.includes(plugin)),\n );\n };\n\n return NewDrupalkit as typeof this &\n Constructor<UnionToIntersection<ReturnTypeOf<T>>>;\n }\n\n /**\n * Construct new drupalkit instance.\n *\n * @param options - The drupakit options.\n */\n constructor(options: DrupalkitOptions) {\n const hook = new Hook.Collection<Hooks>();\n\n /* eslint-disable no-console */\n /* eslint-disable jsdoc/require-jsdoc */\n /* eslint-disable @typescript-eslint/no-empty-function */\n this.log = Object.assign(\n {\n debug: () => {},\n info: () => {},\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n },\n options.log,\n );\n /* eslint-enable no-console */\n /* eslint-enable jsdoc/require-jsdoc */\n /* eslint-disable @typescript-eslint/no-empty-function */\n\n this.hook = hook;\n this.baseUrl = trimSlashesFromSegment(options.baseUrl);\n this.agent = `drupal-kit/${VERSION}`;\n\n if (options.locale) {\n this.locale = options.locale;\n this.availableLocales.push(options.locale);\n }\n\n if (options.defaultLocale) {\n this.defaultLocale = options.defaultLocale;\n\n // Add default locale to available if it's not already there.\n if (!this.availableLocales.includes(options.defaultLocale)) {\n this.availableLocales.push(options.defaultLocale);\n }\n }\n\n if (options.availableLocales) {\n this.availableLocales = options.availableLocales;\n }\n\n // Set default locale to locale if set.\n if (!options.defaultLocale && options.locale) {\n this.defaultLocale = options.locale;\n } else if (!options.locale && options.defaultLocale) {\n this.locale = options.defaultLocale;\n }\n\n if (options.fetch) {\n this.fetch = options.fetch;\n }\n\n this.applyPlugins(options);\n }\n\n /**\n * Dispatch a request to the Drupal API.\n *\n * @param url - Relative or absolute url.\n * @param options - Request options.\n * @param optionOverrides - Optional overridden options. These options are merged correctly with the actual options and allow for user-specific overrides.\n */\n public request<R>(\n url: Url,\n options: RequestOptions,\n optionOverrides?: OverrideableRequestOptions,\n ): Promise<Result<DrupalkitResponse<R, number>, DrupalkitError>> {\n // eslint-disable-next-line jsdoc/require-jsdoc\n const request = (options: RequestRequestOptions) => {\n return fetchWrapper<R>(options);\n };\n\n const headers = {\n ...options.headers,\n \"user-agent\": this.agent,\n };\n\n if (optionOverrides?.headers) {\n Object.assign(headers, optionOverrides.headers);\n }\n\n // Delete auth header if unauthenticated is true.\n if (options.unauthenticated || optionOverrides?.unauthenticated) {\n delete headers.authorization;\n } else if (this.auth) {\n headers.authorization = this.auth;\n }\n\n const requestOptions = {\n ...options,\n ...optionOverrides,\n url: this.buildUrl(url, {\n localeOverride: optionOverrides?.locale ?? options.locale,\n }),\n baseUrl: this.baseUrl,\n log: this.log,\n headers,\n };\n\n const p = this.hook(\"request\", request, requestOptions)\n .then((response) => Result.Ok(response as DrupalkitResponse<R, number>))\n .catch((error) => {\n if (error instanceof DrupalkitError) return Result.Err(error);\n\n return Result.Err(\n new DrupalkitError(error.message, 500, {\n request: requestOptions,\n }),\n );\n });\n\n return p;\n }\n\n /**\n * Set authorization header value.\n *\n * @param auth - The authorization header value.\n */\n public setAuth(auth: string) {\n this.auth = auth;\n }\n\n /**\n * Checks if auth data is set.\n */\n public hasAuth() {\n return !!this.auth;\n }\n\n /**\n * Unsets previously set auth info.\n *\n * Makes sure that subsequent requests are anonymous.\n */\n public unsetAuth() {\n this.auth = undefined;\n }\n\n /**\n * Set the locale.\n *\n * @param locale - The locale.\n */\n public setLocale(locale: string) {\n this.locale = locale;\n }\n\n /**\n * Constructs a Drupal API url.\n *\n * @param url - The url for the request. Can be relative or absolute.\n * @param options - An optional object containing additional options.\n * @param options.localeOverride - An optional override for the locale.\n * @param options.customPrefix - A custom prefix to prepend to the url.\n * @param options.query - An optional object containing query parameters.\n * @returns The constructed URL as a string.\n */\n public buildUrl(\n url: Url,\n options?: {\n localeOverride?: string;\n customPrefix?: string;\n query?: Query;\n },\n ) {\n // Do nothing with absolute urls.\n if (url.startsWith(\"http\")) {\n return url;\n }\n\n const locale = options?.localeOverride ?? this.locale;\n\n let finalUrl = this.baseUrl;\n\n // Prepend locale to url if the locale is not the default one.\n if (locale && locale !== this.defaultLocale) {\n finalUrl += \"/\" + locale;\n }\n\n // Add custom prefix if provided.\n if (options?.customPrefix) {\n finalUrl += \"/\" + trimSlashesFromSegment(options.customPrefix);\n }\n\n // Only append url if not empty.\n if (url) {\n finalUrl += \"/\" + trimSlashesFromSegment(url);\n }\n\n if (options?.query) {\n finalUrl += \"?\" + qs.stringify(options.query);\n }\n\n return finalUrl;\n }\n\n /**\n * Applies all plugins to the drupalkit instance.\n *\n * Plugin data will be merged up to two levels.\n *\n * @param options - The drupalkit options.\n * @see https://stackoverflow.com/a/16345172\n */\n private applyPlugins(options: DrupalkitOptions) {\n const classConstructor = this.constructor as typeof Drupalkit;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mergedPluginData: Record<string, any> = {};\n\n classConstructor.plugins.forEach((plugin) => {\n const pluginData = plugin(this, options);\n if (!pluginData) {\n return;\n }\n\n for (const [key, value] of Object.entries(pluginData)) {\n if (!mergedPluginData[key]) {\n mergedPluginData[key] = {};\n }\n\n if (typeof value === \"object\") {\n Object.assign(mergedPluginData[key], value);\n } else {\n mergedPluginData[key] = value;\n }\n }\n });\n\n Object.assign(this, mergedPluginData);\n }\n}\n"],"names":["options"],"mappings":"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"} |
+4
-4
| { | ||
| "name": "@drupal-kit/core", | ||
| "version": "0.11.2", | ||
| "version": "0.11.3", | ||
| "type": "module", | ||
@@ -13,5 +13,5 @@ "types": "./dist/index.d.ts", | ||
| "devDependencies": { | ||
| "@drupal-kit/config-typescript": "0.11.2", | ||
| "@drupal-kit/eslint-config": "0.11.2", | ||
| "@drupal-kit/types": "0.11.2", | ||
| "@drupal-kit/config-typescript": "0.11.3", | ||
| "@drupal-kit/eslint-config": "0.11.3", | ||
| "@drupal-kit/types": "0.11.3", | ||
| "@rollup/plugin-typescript": "^11.1.1", | ||
@@ -18,0 +18,0 @@ "@swc/core": "^1.6.5", |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
43808
2.34%492
1.65%