@kubb/core 5.0.0-alpha.20 → 5.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{PluginDriver-BkSenc-R.d.ts → PluginDriver-CEQPafXV.d.ts} +271 -104
- package/dist/hooks.cjs +7 -94
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +6 -79
- package/dist/hooks.js +6 -91
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +313 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +260 -24
- package/dist/index.js +308 -33
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/defineBuilder.ts +26 -0
- package/src/defineGenerator.ts +3 -0
- package/src/definePreset.ts +9 -5
- package/src/defineResolver.ts +333 -16
- package/src/hooks/index.ts +1 -2
- package/src/hooks/{usePluginDriver.ts → useDriver.ts} +1 -4
- package/src/hooks/useMode.ts +1 -1
- package/src/hooks/usePlugin.ts +1 -1
- package/src/index.ts +10 -1
- package/src/renderNode.tsx +10 -13
- package/src/types.ts +204 -16
- package/src/utils/getBarrelFiles.ts +1 -1
- package/src/utils/getPreset.ts +17 -6
- package/src/hooks/useKubb.ts +0 -160
package/dist/index.js
CHANGED
|
@@ -1463,7 +1463,7 @@ const fsStorage = createStorage(() => ({
|
|
|
1463
1463
|
}));
|
|
1464
1464
|
//#endregion
|
|
1465
1465
|
//#region package.json
|
|
1466
|
-
var version$1 = "5.0.0-alpha.
|
|
1466
|
+
var version$1 = "5.0.0-alpha.21";
|
|
1467
1467
|
//#endregion
|
|
1468
1468
|
//#region src/utils/diagnostics.ts
|
|
1469
1469
|
/**
|
|
@@ -1851,6 +1851,26 @@ function createPlugin(build) {
|
|
|
1851
1851
|
return (options) => build(options ?? {});
|
|
1852
1852
|
}
|
|
1853
1853
|
//#endregion
|
|
1854
|
+
//#region src/defineBuilder.ts
|
|
1855
|
+
/**
|
|
1856
|
+
* Defines a builder for a plugin — a named collection of schema-building helpers that
|
|
1857
|
+
* can be exported alongside the plugin and imported by other plugins or generators.
|
|
1858
|
+
*
|
|
1859
|
+
* @example
|
|
1860
|
+
* export const builder = defineBuilder<PluginTs>(() => ({
|
|
1861
|
+
* name: 'default',
|
|
1862
|
+
* buildParamsSchema({ params, node, resolver }) {
|
|
1863
|
+
* return createSchema({ type: 'object', properties: [] })
|
|
1864
|
+
* },
|
|
1865
|
+
* buildDataSchemaNode({ node, resolver }) {
|
|
1866
|
+
* return createSchema({ type: 'object', properties: [] })
|
|
1867
|
+
* },
|
|
1868
|
+
* }))
|
|
1869
|
+
*/
|
|
1870
|
+
function defineBuilder(build) {
|
|
1871
|
+
return build();
|
|
1872
|
+
}
|
|
1873
|
+
//#endregion
|
|
1854
1874
|
//#region src/defineGenerator.ts
|
|
1855
1875
|
function defineGenerator(generator) {
|
|
1856
1876
|
if (generator.type === "react") return {
|
|
@@ -1900,8 +1920,8 @@ function defineLogger(logger) {
|
|
|
1900
1920
|
//#endregion
|
|
1901
1921
|
//#region src/definePreset.ts
|
|
1902
1922
|
/**
|
|
1903
|
-
* Creates a typed preset object that bundles a name, resolvers,
|
|
1904
|
-
* transformers — the building block for composable plugin presets.
|
|
1923
|
+
* Creates a typed preset object that bundles a name, resolvers, optional
|
|
1924
|
+
* transformers, and optional generators — the building block for composable plugin presets.
|
|
1905
1925
|
*
|
|
1906
1926
|
* @example
|
|
1907
1927
|
* import { definePreset } from '@kubb/core'
|
|
@@ -1912,12 +1932,17 @@ function defineLogger(logger) {
|
|
|
1912
1932
|
* @example
|
|
1913
1933
|
* // With custom transformers
|
|
1914
1934
|
* export const myPreset = definePreset('myPreset', { resolvers: [resolverTsLegacy], transformers: [myTransformer] })
|
|
1935
|
+
*
|
|
1936
|
+
* @example
|
|
1937
|
+
* // With generators
|
|
1938
|
+
* export const myPreset = definePreset('myPreset', { resolvers: [resolverTsLegacy], generators: [typeGeneratorLegacy] })
|
|
1915
1939
|
*/
|
|
1916
|
-
function definePreset(name, { resolvers, transformers }) {
|
|
1940
|
+
function definePreset(name, { resolvers, transformers, generators }) {
|
|
1917
1941
|
return {
|
|
1918
1942
|
name,
|
|
1919
1943
|
resolvers,
|
|
1920
|
-
transformers
|
|
1944
|
+
transformers,
|
|
1945
|
+
generators
|
|
1921
1946
|
};
|
|
1922
1947
|
}
|
|
1923
1948
|
//#endregion
|
|
@@ -1952,6 +1977,7 @@ function matchesOperationPattern(node, type, pattern) {
|
|
|
1952
1977
|
}
|
|
1953
1978
|
/**
|
|
1954
1979
|
* Checks if a schema matches a pattern for a given filter type (`schemaName`).
|
|
1980
|
+
*
|
|
1955
1981
|
* Returns `null` when the filter type doesn't apply to schemas.
|
|
1956
1982
|
*/
|
|
1957
1983
|
function matchesSchemaPattern(node, type, pattern) {
|
|
@@ -1961,7 +1987,11 @@ function matchesSchemaPattern(node, type, pattern) {
|
|
|
1961
1987
|
}
|
|
1962
1988
|
}
|
|
1963
1989
|
/**
|
|
1964
|
-
* Default name resolver
|
|
1990
|
+
* Default name resolver used by `defineResolver`.
|
|
1991
|
+
*
|
|
1992
|
+
* - `camelCase` for `function` and `file` types.
|
|
1993
|
+
* - `PascalCase` for `type`.
|
|
1994
|
+
* - `camelCase` for everything else.
|
|
1965
1995
|
*/
|
|
1966
1996
|
function defaultResolver(name, type) {
|
|
1967
1997
|
let resolvedName = camelCase(name);
|
|
@@ -1970,8 +2000,27 @@ function defaultResolver(name, type) {
|
|
|
1970
2000
|
return resolvedName;
|
|
1971
2001
|
}
|
|
1972
2002
|
/**
|
|
1973
|
-
* Default option resolver — applies include/exclude filters and merges
|
|
1974
|
-
*
|
|
2003
|
+
* Default option resolver — applies include/exclude filters and merges matching override options.
|
|
2004
|
+
*
|
|
2005
|
+
* Returns `null` when the node is filtered out by an `exclude` rule or not matched by any `include` rule.
|
|
2006
|
+
*
|
|
2007
|
+
* @example Include/exclude filtering
|
|
2008
|
+
* ```ts
|
|
2009
|
+
* const options = defaultResolveOptions(operationNode, {
|
|
2010
|
+
* options: { output: 'types' },
|
|
2011
|
+
* exclude: [{ type: 'tag', pattern: 'internal' }],
|
|
2012
|
+
* })
|
|
2013
|
+
* // → null when node has tag 'internal'
|
|
2014
|
+
* ```
|
|
2015
|
+
*
|
|
2016
|
+
* @example Override merging
|
|
2017
|
+
* ```ts
|
|
2018
|
+
* const options = defaultResolveOptions(operationNode, {
|
|
2019
|
+
* options: { enumType: 'asConst' },
|
|
2020
|
+
* override: [{ type: 'operationId', pattern: 'listPets', options: { enumType: 'enum' } }],
|
|
2021
|
+
* })
|
|
2022
|
+
* // → { enumType: 'enum' } when operationId matches
|
|
2023
|
+
* ```
|
|
1975
2024
|
*/
|
|
1976
2025
|
function defaultResolveOptions(node, { options, exclude = [], include, override = [] }) {
|
|
1977
2026
|
if (isOperationNode(node)) {
|
|
@@ -1998,27 +2047,245 @@ function defaultResolveOptions(node, { options, exclude = [], include, override
|
|
|
1998
2047
|
return options;
|
|
1999
2048
|
}
|
|
2000
2049
|
/**
|
|
2001
|
-
*
|
|
2002
|
-
* Override `default` or `resolveOptions` in the builder to customize the behavior.
|
|
2050
|
+
* Default path resolver used by `defineResolver`.
|
|
2003
2051
|
*
|
|
2004
|
-
*
|
|
2052
|
+
* - Returns the output directory in `single` mode.
|
|
2053
|
+
* - Resolves into a tag- or path-based subdirectory when `group` and a `tag`/`path` value are provided.
|
|
2054
|
+
* - Falls back to a flat `output/baseName` path otherwise.
|
|
2055
|
+
*
|
|
2056
|
+
* A custom `group.name` function overrides the default subdirectory naming.
|
|
2057
|
+
* For `tag` groups the default is `${camelCase(tag)}Controller`.
|
|
2058
|
+
* For `path` groups the default is the first path segment after `/`.
|
|
2059
|
+
*
|
|
2060
|
+
* @example Flat output
|
|
2061
|
+
* ```ts
|
|
2062
|
+
* defaultResolvePath({ baseName: 'petTypes.ts' }, { root: '/src', output: { path: 'types' } })
|
|
2063
|
+
* // → '/src/types/petTypes.ts'
|
|
2064
|
+
* ```
|
|
2065
|
+
*
|
|
2066
|
+
* @example Tag-based grouping
|
|
2067
|
+
* ```ts
|
|
2068
|
+
* defaultResolvePath(
|
|
2069
|
+
* { baseName: 'petTypes.ts', tag: 'pets' },
|
|
2070
|
+
* { root: '/src', output: { path: 'types' }, group: { type: 'tag' } },
|
|
2071
|
+
* )
|
|
2072
|
+
* // → '/src/types/petsController/petTypes.ts'
|
|
2073
|
+
* ```
|
|
2074
|
+
*
|
|
2075
|
+
* @example Path-based grouping
|
|
2076
|
+
* ```ts
|
|
2077
|
+
* defaultResolvePath(
|
|
2078
|
+
* { baseName: 'petTypes.ts', path: '/pets/list' },
|
|
2079
|
+
* { root: '/src', output: { path: 'types' }, group: { type: 'path' } },
|
|
2080
|
+
* )
|
|
2081
|
+
* // → '/src/types/pets/petTypes.ts'
|
|
2082
|
+
* ```
|
|
2083
|
+
*
|
|
2084
|
+
* @example Single-file mode
|
|
2085
|
+
* ```ts
|
|
2086
|
+
* defaultResolvePath(
|
|
2087
|
+
* { baseName: 'petTypes.ts', pathMode: 'single' },
|
|
2088
|
+
* { root: '/src', output: { path: 'types' } },
|
|
2089
|
+
* )
|
|
2090
|
+
* // → '/src/types'
|
|
2091
|
+
* ```
|
|
2092
|
+
*/
|
|
2093
|
+
function defaultResolvePath({ baseName, pathMode, tag, path: groupPath }, { root, output, group }) {
|
|
2094
|
+
if ((pathMode ?? getMode(path.resolve(root, output.path))) === "single") return path.resolve(root, output.path);
|
|
2095
|
+
if (group && (groupPath || tag)) {
|
|
2096
|
+
const groupName = group.name ? group.name : (ctx) => {
|
|
2097
|
+
if (group.type === "path") return `${ctx.group.split("/")[1]}`;
|
|
2098
|
+
return `${camelCase(ctx.group)}Controller`;
|
|
2099
|
+
};
|
|
2100
|
+
return path.resolve(root, output.path, groupName({ group: group.type === "path" ? groupPath : tag }), baseName);
|
|
2101
|
+
}
|
|
2102
|
+
return path.resolve(root, output.path, baseName);
|
|
2103
|
+
}
|
|
2104
|
+
/**
|
|
2105
|
+
* Default file resolver used by `defineResolver`.
|
|
2106
|
+
*
|
|
2107
|
+
* Resolves a `KubbFile.File` by combining name resolution (`resolver.default`) with
|
|
2108
|
+
* path resolution (`resolver.resolvePath`). The resolved file always has empty
|
|
2109
|
+
* `sources`, `imports`, and `exports` arrays — consumers populate those separately.
|
|
2110
|
+
*
|
|
2111
|
+
* In `single` mode the name is omitted and the file sits directly in the output directory.
|
|
2112
|
+
*
|
|
2113
|
+
* @example Resolve a schema file
|
|
2114
|
+
* ```ts
|
|
2115
|
+
* const file = defaultResolveFile.call(resolver,
|
|
2116
|
+
* { name: 'pet', extname: '.ts' },
|
|
2117
|
+
* { root: '/src', output: { path: 'types' } },
|
|
2118
|
+
* )
|
|
2119
|
+
* // → { baseName: 'pet.ts', path: '/src/types/pet.ts', sources: [], ... }
|
|
2120
|
+
* ```
|
|
2121
|
+
*
|
|
2122
|
+
* @example Resolve an operation file with tag grouping
|
|
2123
|
+
* ```ts
|
|
2124
|
+
* const file = defaultResolveFile.call(resolver,
|
|
2125
|
+
* { name: 'listPets', extname: '.ts', tag: 'pets' },
|
|
2126
|
+
* { root: '/src', output: { path: 'types' }, group: { type: 'tag' } },
|
|
2127
|
+
* )
|
|
2128
|
+
* // → { baseName: 'listPets.ts', path: '/src/types/petsController/listPets.ts', ... }
|
|
2129
|
+
* ```
|
|
2130
|
+
*/
|
|
2131
|
+
function defaultResolveFile({ name, extname, tag, path: groupPath }, context) {
|
|
2132
|
+
const pathMode = getMode(path.resolve(context.root, context.output.path));
|
|
2133
|
+
const baseName = `${pathMode === "single" ? "" : this.default(name, "file")}${extname}`;
|
|
2134
|
+
const filePath = this.resolvePath({
|
|
2135
|
+
baseName,
|
|
2136
|
+
pathMode,
|
|
2137
|
+
tag,
|
|
2138
|
+
path: groupPath
|
|
2139
|
+
}, context);
|
|
2140
|
+
return {
|
|
2141
|
+
path: filePath,
|
|
2142
|
+
baseName: path.basename(filePath),
|
|
2143
|
+
meta: { pluginName: this.pluginName },
|
|
2144
|
+
sources: [],
|
|
2145
|
+
imports: [],
|
|
2146
|
+
exports: []
|
|
2147
|
+
};
|
|
2148
|
+
}
|
|
2149
|
+
/**
|
|
2150
|
+
* Generates the default "Generated by Kubb" banner from config and optional node metadata.
|
|
2151
|
+
*/
|
|
2152
|
+
function buildDefaultBanner({ title, description, version, config }) {
|
|
2153
|
+
try {
|
|
2154
|
+
let source = "";
|
|
2155
|
+
if (Array.isArray(config.input)) {
|
|
2156
|
+
const first = config.input[0];
|
|
2157
|
+
if (first && "path" in first) source = path.basename(first.path);
|
|
2158
|
+
} else if ("path" in config.input) source = path.basename(config.input.path);
|
|
2159
|
+
else if ("data" in config.input) source = "text content";
|
|
2160
|
+
let banner = "/**\n* Generated by Kubb (https://kubb.dev/).\n* Do not edit manually.\n";
|
|
2161
|
+
if (config.output.defaultBanner === "simple") {
|
|
2162
|
+
banner += "*/\n";
|
|
2163
|
+
return banner;
|
|
2164
|
+
}
|
|
2165
|
+
if (source) banner += `* Source: ${source}\n`;
|
|
2166
|
+
if (title) banner += `* Title: ${title}\n`;
|
|
2167
|
+
if (description) {
|
|
2168
|
+
const formattedDescription = description.replace(/\n/gm, "\n* ");
|
|
2169
|
+
banner += `* Description: ${formattedDescription}\n`;
|
|
2170
|
+
}
|
|
2171
|
+
if (version) banner += `* OpenAPI spec version: ${version}\n`;
|
|
2172
|
+
banner += "*/\n";
|
|
2173
|
+
return banner;
|
|
2174
|
+
} catch (_error) {
|
|
2175
|
+
return "/**\n* Generated by Kubb (https://kubb.dev/).\n* Do not edit manually.\n*/";
|
|
2176
|
+
}
|
|
2177
|
+
}
|
|
2178
|
+
/**
|
|
2179
|
+
* Default banner resolver — returns the banner string for a generated file.
|
|
2180
|
+
*
|
|
2181
|
+
* - When `output.banner` is a function and `node` is provided, calls it with the node.
|
|
2182
|
+
* - When `output.banner` is a function and `node` is absent, falls back to the default Kubb banner.
|
|
2183
|
+
* - When `output.banner` is a string, returns it directly.
|
|
2184
|
+
* - When `config.output.defaultBanner` is `false`, returns `undefined`.
|
|
2185
|
+
* - Otherwise returns the default "Generated by Kubb" banner.
|
|
2186
|
+
*
|
|
2187
|
+
* @example String banner
|
|
2188
|
+
* ```ts
|
|
2189
|
+
* defaultResolveBanner(undefined, { output: { banner: '// my banner' }, config })
|
|
2190
|
+
* // → '// my banner'
|
|
2191
|
+
* ```
|
|
2192
|
+
*
|
|
2193
|
+
* @example Function banner with node
|
|
2194
|
+
* ```ts
|
|
2195
|
+
* defaultResolveBanner(rootNode, { output: { banner: (node) => `// v${node.version}` }, config })
|
|
2196
|
+
* // → '// v3.0.0'
|
|
2197
|
+
* ```
|
|
2198
|
+
*
|
|
2199
|
+
* @example Disabled banner
|
|
2200
|
+
* ```ts
|
|
2201
|
+
* defaultResolveBanner(undefined, { config: { output: { defaultBanner: false }, ...config } })
|
|
2202
|
+
* // → undefined
|
|
2203
|
+
* ```
|
|
2204
|
+
*/
|
|
2205
|
+
function defaultResolveBanner(node, { output, config }) {
|
|
2206
|
+
if (typeof output?.banner === "function") return node ? output.banner(node) : buildDefaultBanner({ config });
|
|
2207
|
+
if (typeof output?.banner === "string") return output.banner;
|
|
2208
|
+
if (config.output.defaultBanner === false) return;
|
|
2209
|
+
return buildDefaultBanner({ config });
|
|
2210
|
+
}
|
|
2211
|
+
/**
|
|
2212
|
+
* Default footer resolver — returns the footer string for a generated file.
|
|
2213
|
+
*
|
|
2214
|
+
* - When `output.footer` is a function and `node` is provided, calls it with the node.
|
|
2215
|
+
* - When `output.footer` is a function and `node` is absent, returns `undefined`.
|
|
2216
|
+
* - When `output.footer` is a string, returns it directly.
|
|
2217
|
+
* - Otherwise returns `undefined`.
|
|
2218
|
+
*
|
|
2219
|
+
* @example String footer
|
|
2220
|
+
* ```ts
|
|
2221
|
+
* defaultResolveFooter(undefined, { output: { footer: '// end of file' }, config })
|
|
2222
|
+
* // → '// end of file'
|
|
2223
|
+
* ```
|
|
2224
|
+
*
|
|
2225
|
+
* @example Function footer with node
|
|
2226
|
+
* ```ts
|
|
2227
|
+
* defaultResolveFooter(rootNode, { output: { footer: (node) => `// ${node.title}` }, config })
|
|
2228
|
+
* // → '// Pet Store'
|
|
2229
|
+
* ```
|
|
2230
|
+
*/
|
|
2231
|
+
function defaultResolveFooter(node, { output }) {
|
|
2232
|
+
if (typeof output?.footer === "function") return node ? output.footer(node) : void 0;
|
|
2233
|
+
if (typeof output?.footer === "string") return output.footer;
|
|
2234
|
+
}
|
|
2235
|
+
/**
|
|
2236
|
+
* Defines a resolver for a plugin, injecting built-in defaults for name casing,
|
|
2237
|
+
* include/exclude/override filtering, path resolution, and file construction.
|
|
2238
|
+
*
|
|
2239
|
+
* All four defaults can be overridden by providing them in the builder function:
|
|
2240
|
+
* - `default` — name casing strategy (camelCase / PascalCase)
|
|
2241
|
+
* - `resolveOptions` — include/exclude/override filtering
|
|
2242
|
+
* - `resolvePath` — output path computation
|
|
2243
|
+
* - `resolveFile` — full `KubbFile.File` construction
|
|
2244
|
+
*
|
|
2245
|
+
* Methods in the builder have access to `this` (the full resolver object), so they
|
|
2246
|
+
* can call other resolver methods without circular imports.
|
|
2247
|
+
*
|
|
2248
|
+
* @example Basic resolver with naming helpers
|
|
2249
|
+
* ```ts
|
|
2005
2250
|
* export const resolver = defineResolver<PluginTs>(() => ({
|
|
2006
2251
|
* name: 'default',
|
|
2007
|
-
* resolveName(
|
|
2008
|
-
* return this.default(name, 'function')
|
|
2252
|
+
* resolveName(node) {
|
|
2253
|
+
* return this.default(node.name, 'function')
|
|
2254
|
+
* },
|
|
2255
|
+
* resolveTypedName(node) {
|
|
2256
|
+
* return this.default(node.name, 'type')
|
|
2009
2257
|
* },
|
|
2010
|
-
*
|
|
2011
|
-
*
|
|
2258
|
+
* }))
|
|
2259
|
+
* ```
|
|
2260
|
+
*
|
|
2261
|
+
* @example Override resolvePath for a custom output structure
|
|
2262
|
+
* ```ts
|
|
2263
|
+
* export const resolver = defineResolver<PluginTs>(() => ({
|
|
2264
|
+
* name: 'custom',
|
|
2265
|
+
* resolvePath({ baseName }, { root, output }) {
|
|
2266
|
+
* return path.resolve(root, output.path, 'generated', baseName)
|
|
2012
2267
|
* },
|
|
2268
|
+
* }))
|
|
2269
|
+
* ```
|
|
2270
|
+
*
|
|
2271
|
+
* @example Use this.default inside a helper
|
|
2272
|
+
* ```ts
|
|
2273
|
+
* export const resolver = defineResolver<PluginTs>(() => ({
|
|
2274
|
+
* name: 'default',
|
|
2013
2275
|
* resolveParamName(node, param) {
|
|
2014
|
-
* return this.
|
|
2276
|
+
* return this.default(`${node.operationId} ${param.in} ${param.name}`, 'type')
|
|
2015
2277
|
* },
|
|
2016
2278
|
* }))
|
|
2279
|
+
* ```
|
|
2017
2280
|
*/
|
|
2018
2281
|
function defineResolver(build) {
|
|
2019
2282
|
return {
|
|
2020
2283
|
default: defaultResolver,
|
|
2021
2284
|
resolveOptions: defaultResolveOptions,
|
|
2285
|
+
resolvePath: defaultResolvePath,
|
|
2286
|
+
resolveFile: defaultResolveFile,
|
|
2287
|
+
resolveBanner: defaultResolveBanner,
|
|
2288
|
+
resolveFooter: defaultResolveFooter,
|
|
2022
2289
|
...build()
|
|
2023
2290
|
};
|
|
2024
2291
|
}
|
|
@@ -2028,13 +2295,17 @@ function defineResolver(build) {
|
|
|
2028
2295
|
* Renders a React component for a list of operation nodes (V2 generators).
|
|
2029
2296
|
*/
|
|
2030
2297
|
async function renderOperations(nodes, options) {
|
|
2031
|
-
const { config, fabric, plugin, Component, adapter } = options;
|
|
2298
|
+
const { config, fabric, plugin, Component, driver, adapter } = options;
|
|
2032
2299
|
if (!Component) return;
|
|
2033
2300
|
const fabricChild = createReactFabric();
|
|
2034
2301
|
await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
|
|
2035
|
-
meta: {
|
|
2302
|
+
meta: {
|
|
2303
|
+
plugin,
|
|
2304
|
+
driver
|
|
2305
|
+
},
|
|
2036
2306
|
children: /* @__PURE__ */ jsx(Component, {
|
|
2037
2307
|
config,
|
|
2308
|
+
plugin,
|
|
2038
2309
|
adapter,
|
|
2039
2310
|
nodes,
|
|
2040
2311
|
options: options.options
|
|
@@ -2047,17 +2318,17 @@ async function renderOperations(nodes, options) {
|
|
|
2047
2318
|
* Renders a React component for a single operation node (V2 generators).
|
|
2048
2319
|
*/
|
|
2049
2320
|
async function renderOperation(node, options) {
|
|
2050
|
-
const { config, fabric, plugin, Component, adapter, driver
|
|
2321
|
+
const { config, fabric, plugin, Component, adapter, driver } = options;
|
|
2051
2322
|
if (!Component) return;
|
|
2052
2323
|
const fabricChild = createReactFabric();
|
|
2053
2324
|
await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
|
|
2054
2325
|
meta: {
|
|
2055
2326
|
plugin,
|
|
2056
|
-
driver
|
|
2057
|
-
mode
|
|
2327
|
+
driver
|
|
2058
2328
|
},
|
|
2059
2329
|
children: /* @__PURE__ */ jsx(Component, {
|
|
2060
2330
|
config,
|
|
2331
|
+
plugin,
|
|
2061
2332
|
adapter,
|
|
2062
2333
|
node,
|
|
2063
2334
|
options: options.options
|
|
@@ -2070,17 +2341,17 @@ async function renderOperation(node, options) {
|
|
|
2070
2341
|
* Renders a React component for a single schema node (V2 generators).
|
|
2071
2342
|
*/
|
|
2072
2343
|
async function renderSchema(node, options) {
|
|
2073
|
-
const { config, fabric, plugin, Component, adapter, driver
|
|
2344
|
+
const { config, fabric, plugin, Component, adapter, driver } = options;
|
|
2074
2345
|
if (!Component) return;
|
|
2075
2346
|
const fabricChild = createReactFabric();
|
|
2076
2347
|
await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
|
|
2077
2348
|
meta: {
|
|
2078
2349
|
plugin,
|
|
2079
|
-
driver
|
|
2080
|
-
mode
|
|
2350
|
+
driver
|
|
2081
2351
|
},
|
|
2082
2352
|
children: /* @__PURE__ */ jsx(Component, {
|
|
2083
2353
|
config,
|
|
2354
|
+
plugin,
|
|
2084
2355
|
adapter,
|
|
2085
2356
|
node,
|
|
2086
2357
|
options: options.options
|
|
@@ -2401,7 +2672,7 @@ function buildDirectoryTree(files, rootFolder = "") {
|
|
|
2401
2672
|
function getBarrelFilesByRoot(root, files) {
|
|
2402
2673
|
const cachedFiles = /* @__PURE__ */ new Map();
|
|
2403
2674
|
TreeNode.build(files, root)?.forEach((treeNode) => {
|
|
2404
|
-
if (!treeNode
|
|
2675
|
+
if (!treeNode?.children || !treeNode.parent?.data.path) return;
|
|
2405
2676
|
const barrelFile = {
|
|
2406
2677
|
path: join(treeNode.parent?.data.path, "index.ts"),
|
|
2407
2678
|
baseName: "index.ts",
|
|
@@ -2499,21 +2770,25 @@ function mergeResolvers(...resolvers) {
|
|
|
2499
2770
|
//#endregion
|
|
2500
2771
|
//#region src/utils/getPreset.ts
|
|
2501
2772
|
/**
|
|
2502
|
-
* Resolves a named preset into merged resolvers and
|
|
2773
|
+
* Resolves a named preset into merged resolvers, transformers, and generators.
|
|
2503
2774
|
*
|
|
2504
|
-
* - Merges the preset's resolvers on top of the first (default)
|
|
2775
|
+
* - Merges the preset's resolvers on top of the first (default)
|
|
2505
2776
|
* - Merges any additional user-supplied resolvers on top of that to produce the final `resolver`.
|
|
2506
2777
|
* - Concatenates preset transformers before user-supplied transformers.
|
|
2778
|
+
* - Combines preset generators with user-supplied generators; falls back to the `default` preset's generators when neither provides any.
|
|
2507
2779
|
*/
|
|
2508
2780
|
function getPreset(params) {
|
|
2509
|
-
const { preset: presetName, presets, resolvers, transformers: userTransformers } = params;
|
|
2781
|
+
const { preset: presetName, presets, resolvers, transformers: userTransformers, generators: userGenerators } = params;
|
|
2510
2782
|
const [defaultResolver, ...userResolvers] = resolvers;
|
|
2511
2783
|
const preset = presets[presetName];
|
|
2512
|
-
const
|
|
2784
|
+
const resolver = mergeResolvers(mergeResolvers(defaultResolver, ...preset?.resolvers ?? []), ...userResolvers ?? []);
|
|
2785
|
+
const transformers = [...preset?.transformers ?? [], ...userTransformers ?? []];
|
|
2786
|
+
const presetGenerators = preset?.generators ?? [];
|
|
2787
|
+
const defaultPresetGenerators = presets["default"]?.generators ?? [];
|
|
2513
2788
|
return {
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2789
|
+
resolver,
|
|
2790
|
+
transformers,
|
|
2791
|
+
generators: presetGenerators.length > 0 || userGenerators.length ? [...presetGenerators, ...userGenerators] : defaultPresetGenerators,
|
|
2517
2792
|
preset
|
|
2518
2793
|
};
|
|
2519
2794
|
}
|
|
@@ -2600,6 +2875,6 @@ function satisfiesDependency(dependency, version, cwd) {
|
|
|
2600
2875
|
return satisfies(semVer, version);
|
|
2601
2876
|
}
|
|
2602
2877
|
//#endregion
|
|
2603
|
-
export { AsyncEventEmitter, FunctionParams, PluginDriver, URLPath, build, build as default, createAdapter, createPlugin, createStorage, defaultResolveOptions, defineConfig, defineGenerator, defineLogger, definePreset, definePresets, definePrinter, defineResolver, detectFormatter, detectLinter, formatters, fsStorage, getBarrelFiles, getConfigs, getMode, getPreset, isInputPath, linters, logLevel, memoryStorage, mergeResolvers, renderOperation, renderOperations, renderSchema, safeBuild, satisfiesDependency, setup };
|
|
2878
|
+
export { AsyncEventEmitter, FunctionParams, PluginDriver, URLPath, build, build as default, buildDefaultBanner, createAdapter, createPlugin, createStorage, defaultResolveBanner, defaultResolveFile, defaultResolveFooter, defaultResolveOptions, defaultResolvePath, defineBuilder, defineConfig, defineGenerator, defineLogger, definePreset, definePresets, definePrinter, defineResolver, detectFormatter, detectLinter, formatters, fsStorage, getBarrelFiles, getConfigs, getMode, getPreset, isInputPath, linters, logLevel, memoryStorage, mergeResolvers, renderOperation, renderOperations, renderSchema, safeBuild, satisfiesDependency, setup };
|
|
2604
2879
|
|
|
2605
2880
|
//# sourceMappingURL=index.js.map
|