@orval/solid-start 8.0.0 → 8.0.1

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/README.md CHANGED
@@ -9,6 +9,8 @@ SolidStart client for Orval - generates type-safe API client code using SolidSta
9
9
  - ✅ Type-safe API calls
10
10
  - ✅ Full TypeScript support
11
11
  - ✅ Works with SolidStart's server-side execution model
12
+ - ✅ Uses native Fetch API by default
13
+ - ✅ Supports custom mutators with Fetch API signature
12
14
 
13
15
  ## Installation
14
16
 
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { Verbs, generateFormDataAndUrlEncodedFunction, generateMutatorConfig, generateMutatorRequestOptions, generateVerbImports, getIsBodyVerb, pascal, sanitize, toObjectString } from "@orval/core";
1
+ import { Verbs, generateBodyOptions, generateFormDataAndUrlEncodedFunction, generateVerbImports, getIsBodyVerb, isObject, pascal, sanitize, toObjectString } from "@orval/core";
2
2
 
3
3
  //#region src/index.ts
4
4
  const SOLID_START_DEPENDENCIES = [{
@@ -29,20 +29,7 @@ const getSolidStartDependencies = () => SOLID_START_DEPENDENCIES;
29
29
  const generateSolidStartTitle = (title) => {
30
30
  return `${pascal(sanitize(title))}`;
31
31
  };
32
- const generateSolidStartHeader = ({ title, isRequestOptions, isMutator, isGlobalMutator }) => `
33
- ${isRequestOptions && !isGlobalMutator ? `interface RequestOptions {
34
- headers?: Record<string, string>;
35
- signal?: AbortSignal;
36
- }` : ""}
37
-
38
- ${isRequestOptions && isMutator ? `type ThirdParameter<T extends (...args: any) => any> = T extends (
39
- config: any,
40
- httpClient: any,
41
- args: infer P,
42
- ) => any
43
- ? P
44
- : never;` : ""}
45
-
32
+ const generateSolidStartHeader = ({ title }) => `
46
33
  /**
47
34
  * Cache Invalidation:
48
35
  *
@@ -64,10 +51,8 @@ const generateSolidStartFooter = () => {
64
51
  return "};\n";
65
52
  };
66
53
  const generateImplementation = ({ headers, queryParams, operationName, response, mutator, body, props, verb, override, formData, formUrlEncoded, paramsSerializer }, { route, context }) => {
67
- const isRequestOptions = override.requestOptions !== false;
68
54
  const isFormData = !override.formData.disabled;
69
55
  const isFormUrlEncoded = override.formUrlEncoded !== false;
70
- const isExactOptionalPropertyTypes = !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;
71
56
  const bodyForm = generateFormDataAndUrlEncodedFunction({
72
57
  formData,
73
58
  formUrlEncoded,
@@ -79,32 +64,39 @@ const generateImplementation = ({ headers, queryParams, operationName, response,
79
64
  const isGetVerb = verb === Verbs.GET;
80
65
  const isBodyVerb = getIsBodyVerb(verb);
81
66
  if (mutator) {
82
- const mutatorConfig = generateMutatorConfig({
83
- route,
84
- body,
85
- headers,
86
- queryParams,
87
- response,
88
- verb,
89
- isFormData,
90
- isFormUrlEncoded,
91
- hasSignal: false,
92
- isExactOptionalPropertyTypes
93
- });
94
- const requestOptions = isRequestOptions ? generateMutatorRequestOptions(override.requestOptions, mutator.hasThirdArg) : "";
95
67
  const propsImplementation$1 = mutator.bodyTypeName && body.definition ? toObjectString(props, "implementation").replace(new RegExp(String.raw`(\w*):\s?${body.definition}`), `$1: ${mutator.bodyTypeName}<${body.definition}>`) : toObjectString(props, "implementation");
68
+ const queryParamsCode$1 = queryParams ? `const queryString = new URLSearchParams(params as any).toString();
69
+ const url = queryString ? \`${route}?\${queryString}\` : \`${route}\`;` : `const url = \`${route}\`;`;
70
+ const fetchMethodOption = `method: '${verb.toUpperCase()}'`;
71
+ const ignoreContentTypes = ["multipart/form-data"];
72
+ const overrideHeaders = isObject(override.requestOptions) && override.requestOptions.headers ? Object.entries(override.requestOptions.headers).map(([key, value]) => `'${key}': \`${value}\``) : [];
73
+ const headersToAdd = [
74
+ ...body.contentType && !ignoreContentTypes.includes(body.contentType) ? [`'Content-Type': '${body.contentType}'`] : [],
75
+ ...overrideHeaders,
76
+ ...headers ? ["...headers"] : []
77
+ ];
78
+ const fetchHeadersOption = headersToAdd.length > 0 ? `headers: { ${headersToAdd.join(",")} }` : "";
79
+ const requestBodyParams = generateBodyOptions(body, isFormData, isFormUrlEncoded);
80
+ const fetchBodyOption = requestBodyParams ? isFormData && body.formData || isFormUrlEncoded && body.formUrlEncoded || body.contentType === "text/plain" ? `body: ${requestBodyParams}` : `body: JSON.stringify(${requestBodyParams})` : "";
81
+ const fetchOptions = `{
82
+ ${fetchMethodOption}${fetchHeadersOption ? "," : ""}
83
+ ${fetchHeadersOption}${fetchBodyOption ? "," : ""}
84
+ ${fetchBodyOption}
85
+ }`;
96
86
  if (isGetVerb) return ` ${operationName}: query(async (${propsImplementation$1}) => {${bodyForm}
87
+ ${queryParamsCode$1}
97
88
  return ${mutator.name}<${dataType}>(
98
- ${mutatorConfig},
99
- fetch,
100
- ${requestOptions});
89
+ url,
90
+ ${fetchOptions}
91
+ );
101
92
  }, "${operationName}"),
102
93
  `;
103
94
  else return ` ${operationName}: action(async (${propsImplementation$1}) => {${bodyForm}
95
+ ${queryParamsCode$1}
104
96
  return ${mutator.name}<${dataType}>(
105
- ${mutatorConfig},
106
- fetch,
107
- ${requestOptions});
97
+ url,
98
+ ${fetchOptions}
99
+ );
108
100
  }, "${operationName}"),
109
101
  `;
110
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["SOLID_START_DEPENDENCIES: GeneratorDependency[]","getSolidStartDependencies: ClientDependenciesBuilder","generateSolidStartTitle: ClientTitleBuilder","generateSolidStartHeader: ClientHeaderBuilder","generateSolidStartFooter: ClientFooterBuilder","propsImplementation","generateSolidStart: ClientBuilder","solidStartClientBuilder: ClientGeneratorsBuilder"],"sources":["../src/index.ts"],"sourcesContent":["import {\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientFooterBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n type ClientTitleBuilder,\n generateFormDataAndUrlEncodedFunction,\n generateMutatorConfig,\n generateMutatorRequestOptions,\n generateVerbImports,\n type GeneratorDependency,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n getIsBodyVerb,\n pascal,\n sanitize,\n toObjectString,\n Verbs,\n} from '@orval/core';\n\nconst SOLID_START_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'query', values: true },\n { name: 'action', values: true },\n { name: 'cache', values: true },\n { name: 'revalidate', values: true },\n ],\n dependency: '@solidjs/router',\n },\n {\n exports: [{ name: 'DeepNonNullable' }],\n dependency: '@orval/core',\n },\n];\n\nexport const getSolidStartDependencies: ClientDependenciesBuilder = () =>\n SOLID_START_DEPENDENCIES;\n\nexport const generateSolidStartTitle: ClientTitleBuilder = (title) => {\n const sanTitle = sanitize(title);\n return `${pascal(sanTitle)}`;\n};\n\nexport const generateSolidStartHeader: ClientHeaderBuilder = ({\n title,\n isRequestOptions,\n isMutator,\n isGlobalMutator,\n}) => `\n${\n isRequestOptions && !isGlobalMutator\n ? `interface RequestOptions {\n headers?: Record<string, string>;\n signal?: AbortSignal;\n}`\n : ''\n}\n\n${\n isRequestOptions && isMutator\n ? `type ThirdParameter<T extends (...args: any) => any> = T extends (\n config: any,\n httpClient: any,\n args: infer P,\n) => any\n ? P\n : never;`\n : ''\n}\n\n/**\n * Cache Invalidation:\n *\n * Each query provides .key and .keyFor() for cache invalidation.\n *\n * Examples:\n * // Invalidate all calls to a query\n * revalidate(${title}.listPets.key);\n *\n * // Invalidate a specific call with arguments\n * revalidate(${title}.showPetById.keyFor(\"pet-123\", 1));\n *\n * // Invalidate multiple queries\n * revalidate([${title}.listPets.key, ${title}.showPetById.keyFor(\"pet-123\", 1)]);\n */\nexport const ${title} = {\n`;\n\nexport const generateSolidStartFooter: ClientFooterBuilder = () => {\n return '};\\n';\n};\n\nconst generateImplementation = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n override,\n formData,\n formUrlEncoded,\n paramsSerializer,\n }: GeneratorVerbOptions,\n { route, context }: GeneratorOptions,\n) => {\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n const dataType = response.definition.success || 'unknown';\n const isGetVerb = verb === Verbs.GET;\n const isBodyVerb = getIsBodyVerb(verb);\n\n if (mutator) {\n const mutatorConfig = generateMutatorConfig({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n isFormData,\n isFormUrlEncoded,\n hasSignal: false,\n isExactOptionalPropertyTypes,\n });\n\n const requestOptions = isRequestOptions\n ? generateMutatorRequestOptions(\n override.requestOptions,\n mutator.hasThirdArg,\n )\n : '';\n\n const propsImplementation =\n mutator.bodyTypeName && body.definition\n ? toObjectString(props, 'implementation').replace(\n new RegExp(String.raw`(\\w*):\\s?${body.definition}`),\n `$1: ${mutator.bodyTypeName}<${body.definition}>`,\n )\n : toObjectString(props, 'implementation');\n\n if (isGetVerb) {\n // Use query for GET requests\n return ` ${operationName}: query(async (${propsImplementation}) => {${bodyForm}\n return ${mutator.name}<${dataType}>(\n ${mutatorConfig},\n fetch,\n ${requestOptions});\n }, \"${operationName}\"),\n`;\n } else {\n // Use action for mutations\n return ` ${operationName}: action(async (${propsImplementation}) => {${bodyForm}\n return ${mutator.name}<${dataType}>(\n ${mutatorConfig},\n fetch,\n ${requestOptions});\n }, \"${operationName}\"),\n`;\n }\n }\n\n const propsImplementation = toObjectString(props, 'implementation');\n\n // Build query params string\n const queryParamsCode = queryParams\n ? `const queryString = new URLSearchParams(params as any).toString();\n const url = queryString ? \\`${route}?\\${queryString}\\` : \\`${route}\\`;`\n : `const url = \\`${route}\\`;`;\n\n // Build headers object\n const headersCode = headers\n ? `headers: { ...headers, 'Content-Type': 'application/json' }`\n : `headers: { 'Content-Type': 'application/json' }`;\n\n // Build body code\n const bodyCode =\n isBodyVerb && body.implementation\n ? `,\n body: JSON.stringify(${body.implementation})`\n : '';\n\n if (isGetVerb) {\n // Use query for GET requests\n return ` ${operationName}: query(async (${propsImplementation}) => {${bodyForm}\n ${queryParamsCode}\n const response = await fetch(url, {\n method: '${verb.toUpperCase()}',\n ${headersCode}\n });\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n return response.json() as Promise<${dataType}>;\n }, \"${operationName}\"),\n`;\n } else {\n // Use action for mutations (POST, PUT, PATCH, DELETE)\n return ` ${operationName}: action(async (${propsImplementation}) => {${bodyForm}\n ${queryParamsCode}\n const response = await fetch(url, {\n method: '${verb.toUpperCase()}',\n ${headersCode}${bodyCode}\n });\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n return response.json() as Promise<${dataType}>;\n }, \"${operationName}\"),\n`;\n }\n};\n\nexport const generateSolidStart: ClientBuilder = (verbOptions, options) => {\n const imports = generateVerbImports(verbOptions);\n const implementation = generateImplementation(verbOptions, options);\n\n return { implementation, imports };\n};\n\nconst solidStartClientBuilder: ClientGeneratorsBuilder = {\n client: generateSolidStart,\n header: generateSolidStartHeader,\n dependencies: getSolidStartDependencies,\n footer: generateSolidStartFooter,\n title: generateSolidStartTitle,\n};\n\nexport const builder = () => () => solidStartClientBuilder;\n\nexport default builder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["SOLID_START_DEPENDENCIES: GeneratorDependency[]","getSolidStartDependencies: ClientDependenciesBuilder","generateSolidStartTitle: ClientTitleBuilder","generateSolidStartHeader: ClientHeaderBuilder","generateSolidStartFooter: ClientFooterBuilder","propsImplementation","queryParamsCode","headersToAdd: string[]","generateSolidStart: ClientBuilder","solidStartClientBuilder: ClientGeneratorsBuilder"],"sources":["../src/index.ts"],"sourcesContent":["import {\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientFooterBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n type ClientTitleBuilder,\n generateBodyOptions,\n generateFormDataAndUrlEncodedFunction,\n generateVerbImports,\n type GeneratorDependency,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n getIsBodyVerb,\n isObject,\n pascal,\n sanitize,\n toObjectString,\n Verbs,\n} from '@orval/core';\n\nconst SOLID_START_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n { name: 'query', values: true },\n { name: 'action', values: true },\n { name: 'cache', values: true },\n { name: 'revalidate', values: true },\n ],\n dependency: '@solidjs/router',\n },\n {\n exports: [{ name: 'DeepNonNullable' }],\n dependency: '@orval/core',\n },\n];\n\nexport const getSolidStartDependencies: ClientDependenciesBuilder = () =>\n SOLID_START_DEPENDENCIES;\n\nexport const generateSolidStartTitle: ClientTitleBuilder = (title) => {\n const sanTitle = sanitize(title);\n return `${pascal(sanTitle)}`;\n};\n\nexport const generateSolidStartHeader: ClientHeaderBuilder = ({ title }) => `\n/**\n * Cache Invalidation:\n *\n * Each query provides .key and .keyFor() for cache invalidation.\n *\n * Examples:\n * // Invalidate all calls to a query\n * revalidate(${title}.listPets.key);\n *\n * // Invalidate a specific call with arguments\n * revalidate(${title}.showPetById.keyFor(\"pet-123\", 1));\n *\n * // Invalidate multiple queries\n * revalidate([${title}.listPets.key, ${title}.showPetById.keyFor(\"pet-123\", 1)]);\n */\nexport const ${title} = {\n`;\n\nexport const generateSolidStartFooter: ClientFooterBuilder = () => {\n return '};\\n';\n};\n\nconst generateImplementation = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n override,\n formData,\n formUrlEncoded,\n paramsSerializer,\n }: GeneratorVerbOptions,\n { route, context }: GeneratorOptions,\n) => {\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n const dataType = response.definition.success || 'unknown';\n const isGetVerb = verb === Verbs.GET;\n const isBodyVerb = getIsBodyVerb(verb);\n\n if (mutator) {\n const propsImplementation =\n mutator.bodyTypeName && body.definition\n ? toObjectString(props, 'implementation').replace(\n new RegExp(String.raw`(\\w*):\\s?${body.definition}`),\n `$1: ${mutator.bodyTypeName}<${body.definition}>`,\n )\n : toObjectString(props, 'implementation');\n\n // Build query params string\n const queryParamsCode = queryParams\n ? `const queryString = new URLSearchParams(params as any).toString();\n const url = queryString ? \\`${route}?\\${queryString}\\` : \\`${route}\\`;`\n : `const url = \\`${route}\\`;`;\n\n // Build fetch options using Fetch API signature\n const fetchMethodOption = `method: '${verb.toUpperCase()}'`;\n const ignoreContentTypes = ['multipart/form-data'];\n const overrideHeaders =\n isObject(override.requestOptions) && override.requestOptions.headers\n ? Object.entries(override.requestOptions.headers).map(\n ([key, value]) => `'${key}': \\`${value}\\``,\n )\n : [];\n\n const headersToAdd: string[] = [\n ...(body.contentType && !ignoreContentTypes.includes(body.contentType)\n ? [`'Content-Type': '${body.contentType}'`]\n : []),\n ...overrideHeaders,\n ...(headers ? ['...headers'] : []),\n ];\n\n const fetchHeadersOption =\n headersToAdd.length > 0 ? `headers: { ${headersToAdd.join(',')} }` : '';\n\n const requestBodyParams = generateBodyOptions(\n body,\n isFormData,\n isFormUrlEncoded,\n );\n const fetchBodyOption = requestBodyParams\n ? (isFormData && body.formData) ||\n (isFormUrlEncoded && body.formUrlEncoded) ||\n body.contentType === 'text/plain'\n ? `body: ${requestBodyParams}`\n : `body: JSON.stringify(${requestBodyParams})`\n : '';\n\n const fetchOptions = `{\n ${fetchMethodOption}${fetchHeadersOption ? ',' : ''}\n ${fetchHeadersOption}${fetchBodyOption ? ',' : ''}\n ${fetchBodyOption}\n }`;\n\n if (isGetVerb) {\n // Use query for GET requests\n return ` ${operationName}: query(async (${propsImplementation}) => {${bodyForm}\n ${queryParamsCode}\n return ${mutator.name}<${dataType}>(\n url,\n ${fetchOptions}\n );\n }, \"${operationName}\"),\n`;\n } else {\n // Use action for mutations\n return ` ${operationName}: action(async (${propsImplementation}) => {${bodyForm}\n ${queryParamsCode}\n return ${mutator.name}<${dataType}>(\n url,\n ${fetchOptions}\n );\n }, \"${operationName}\"),\n`;\n }\n }\n\n const propsImplementation = toObjectString(props, 'implementation');\n\n // Build query params string\n const queryParamsCode = queryParams\n ? `const queryString = new URLSearchParams(params as any).toString();\n const url = queryString ? \\`${route}?\\${queryString}\\` : \\`${route}\\`;`\n : `const url = \\`${route}\\`;`;\n\n // Build headers object\n const headersCode = headers\n ? `headers: { ...headers, 'Content-Type': 'application/json' }`\n : `headers: { 'Content-Type': 'application/json' }`;\n\n // Build body code\n const bodyCode =\n isBodyVerb && body.implementation\n ? `,\n body: JSON.stringify(${body.implementation})`\n : '';\n\n if (isGetVerb) {\n // Use query for GET requests\n return ` ${operationName}: query(async (${propsImplementation}) => {${bodyForm}\n ${queryParamsCode}\n const response = await fetch(url, {\n method: '${verb.toUpperCase()}',\n ${headersCode}\n });\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n return response.json() as Promise<${dataType}>;\n }, \"${operationName}\"),\n`;\n } else {\n // Use action for mutations (POST, PUT, PATCH, DELETE)\n return ` ${operationName}: action(async (${propsImplementation}) => {${bodyForm}\n ${queryParamsCode}\n const response = await fetch(url, {\n method: '${verb.toUpperCase()}',\n ${headersCode}${bodyCode}\n });\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n return response.json() as Promise<${dataType}>;\n }, \"${operationName}\"),\n`;\n }\n};\n\nexport const generateSolidStart: ClientBuilder = (verbOptions, options) => {\n const imports = generateVerbImports(verbOptions);\n const implementation = generateImplementation(verbOptions, options);\n\n return { implementation, imports };\n};\n\nconst solidStartClientBuilder: ClientGeneratorsBuilder = {\n client: generateSolidStart,\n header: generateSolidStartHeader,\n dependencies: getSolidStartDependencies,\n footer: generateSolidStartFooter,\n title: generateSolidStartTitle,\n};\n\nexport const builder = () => () => solidStartClientBuilder;\n\nexport default builder;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orval/solid-start",
3
- "version": "8.0.0",
3
+ "version": "8.0.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -22,7 +22,7 @@
22
22
  "nuke": "rimraf .turbo dist node_modules"
23
23
  },
24
24
  "dependencies": {
25
- "@orval/core": "8.0.0"
25
+ "@orval/core": "8.0.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "eslint": "9.39.2",