W
Wasp•4mo ago
Sven

getting error when implementing a query

I am implementing a query that gets user credentials form the db, uses these to fetch data and return the data to the client side. But i get this error: [ Wasp ] server/operations/queries/index.ts(63,14): error TS2322: Type '(args: unknown, context: { user: AuthUser; }) => Promise<Payload>' is not assignable to type '(args: any, context: { user: AuthUser; }) => Promise<void | { [date: string]: OrderData; }>'. [ Wasp ] Type 'Promise<Payload>' is not assignable to type 'Promise<void | { [date: string]: OrderData; }>'. [ Wasp ] Type 'Payload' is not assignable to type 'void | { [date: string]: OrderData; }'. [ Wasp ] Type 'string' is not assignable to type 'void | { [date: string]: OrderData; }'. [ Wasp ] server/operations/queries/index.ts(63,62): error TS2344: Type '(args: any, context: any) => Promise<{ [date: string]: OrderData; } | void>' does not satisfy the constraint 'GenericAuthenticatedOperationDefinition'. [ Wasp ] Type 'Promise<void | { [date: string]: OrderData; }>' is not assignable to type 'Payload | Promise<Payload>'. [ Wasp ] Type 'Promise<void | { [date: string]: OrderData; }>' is not assignable to type 'Symbol | Set<SuperJSONValue> | Map<SuperJSONValue, SuperJSONValue> | Promise<Payload>'. [ Wasp ] Type 'Promise<void | { [date: string]: OrderData; }>' is not assignable to type 'Promise<Payload>'. [ Wasp ] Type 'void | { [date: string]: OrderData; }' is not assignable to type 'Payload'. [ Wasp ] Type '{ [date: string]: OrderData; }' is not assignable to type 'Payload'. [ Wasp ] Type '{ [date: string]: OrderData; }' is missing the following properties from type 'Date': toDateString, toTimeString, toLocaleDateString, toLocaleTimeString, and 37 more. [ Wasp ] server/operations/queries/index.ts(65,5): error TS2345: Argument of type '(args: any, context: any) => Promise<{ [date: string]: OrderData; } | void>' is not assignable to parameter of type 'GenericAuthenticatedO
22 Replies
kapa.ai
kapa.ai•4mo ago
Hi @Sven. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- The error message you're seeing suggests that the return type of your query function doesn't match the expected return type. In Wasp, the implementation of a query is a NodeJS function that takes two arguments: args and context. The type of args and the return type of the function depend on the query. From the error message, it seems like your function is expected to return a Promise that resolves to either void or an object with string keys and OrderData values. However, your function is currently returning a Promise that resolves to a Payload type, which is not compatible. Here's a general example of how to define a query in Wasp:
import { type GetFoo } from 'wasp/server/operations'

type Foo = // ...

export const getFoo: GetFoo<{ id: number }, Foo> = (args, context) => {
// implementation
};
import { type GetFoo } from 'wasp/server/operations'

type Foo = // ...

export const getFoo: GetFoo<{ id: number }, Foo> = (args, context) => {
// implementation
};
In this example, the getFoo function is expected to receive an object with an id field of type number (this is the type of args), and return a value of type Foo (this must match the type of the Query's return value). Please ensure that your function's return type matches the expected return type. If you're still having trouble, could you provide more details about your query and its implementation? That would help in giving a more specific solution. For more information, you can refer to the Wasp documentation on implementing queries (https://wasp-lang.dev/docs/data-model/operations/queries#implementing-queries). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Sven
SvenOP•4mo ago
@kapa.ai i also get these: [ Wasp ] Type 'Promise<{ [date: string]: OrderData; }>' is not assignable to type 'Payload | Promise<Payload>'. [ Wasp ] Type 'Promise<{ [date: string]: OrderData; }>' is not assignable to type 'Symbol | Set<SuperJSONValue> | Map<SuperJSONValue, SuperJSONValue> | Promise<Payload>'. [ Wasp ] Type 'Promise<{ [date: string]: OrderData; }>' is not assignable to type 'Promise<Payload>'. [ Wasp ] Type '{ [date: string]: OrderData; }' is not assignable to type 'Payload'. [ Wasp ] Type '{ [date: string]: OrderData; }' is missing the following properties from type 'Date': toDateString, toTimeString, toLocaleDateString, toLocaleTimeString, and 37 more.
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error messages you're seeing are TypeScript type errors. They're saying that the return type of your function doesn't match the expected return type. In Wasp, the return type of a query is typically a Promise<Payload>, where Payload is the type of the data you're returning. However, your function is returning a Promise<{ [date: string]: OrderData; }>, which is not assignable to Payload. The error message also suggests that the Payload type is expected to have properties of a Date object, but the object you're returning ({ [date: string]: OrderData; }) doesn't have these properties. Here's a general example of how to define a query in Wasp:
import { type GetFoo } from 'wasp/server/operations'

type Foo = // ...

export const getFoo: GetFoo<{ id: number }, Foo> = (args, context) => {
// implementation
};
import { type GetFoo } from 'wasp/server/operations'

type Foo = // ...

export const getFoo: GetFoo<{ id: number }, Foo> = (args, context) => {
// implementation
};
In this example, the getFoo function is expected to receive an object with an id field of type number (this is the type of args), and return a value of type Foo (this must match the type of the Query's return value). Please ensure that your function's return type matches the expected return type. If you're still having trouble, could you provide more details about your query and its implementation? That would help in giving a more specific solution. For more information, you can refer to the Wasp documentation on implementing queries (https://wasp-lang.dev/docs/data-model/operations/queries#implementing-queries). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Sven
SvenOP•4mo ago
Now i get this:
[ Wasp ] server/operations/actions/index.ts(85,14): error TS2322: Type '(args: unknown, context: { user: AuthUser; }) => Promise<Payload>' is not assignable to type '(args: StoreUserSalesDataPayload, context: { user: AuthUser; }) => Promise<UserSalesData>'.
[ Wasp ] Type 'Promise<Payload>' is not assignable to type 'Promise<UserSalesData>'.
[ Wasp ] Type 'Payload' is not assignable to type 'UserSalesData'.
[ Wasp ] Type 'string' is not assignable to type 'UserSalesData'.
[ Wasp ] server/operations/actions/index.ts(85,60): error TS2344: Type 'StoreUserSalesData<StoreUserSalesDataPayload, UserSalesData>' does not satisfy the constraint 'GenericAuthenticatedOperationDefinition'.
[ Wasp ] Type 'Promise<UserSalesData>' is not assignable to type 'Payload | Promise<Payload>'.
[ Wasp ] Type 'Promise<UserSalesData>' is not assignable to type 'Symbol | Set<SuperJSONValue> | Map<SuperJSONValue, SuperJSONValue> | Promise<Payload>'.
[ Wasp ] Type 'Promise<UserSalesData>' is not assignable to type 'Promise<Payload>'.
[ Wasp ] Type 'UserSalesData' is not assignable to type 'Payload'.
[ Wasp ] Type 'UserSalesData' is not assignable to type 'SuperJSONObject'.
[ Wasp ] server/operations/actions/index.ts(85,14): error TS2322: Type '(args: unknown, context: { user: AuthUser; }) => Promise<Payload>' is not assignable to type '(args: StoreUserSalesDataPayload, context: { user: AuthUser; }) => Promise<UserSalesData>'.
[ Wasp ] Type 'Promise<Payload>' is not assignable to type 'Promise<UserSalesData>'.
[ Wasp ] Type 'Payload' is not assignable to type 'UserSalesData'.
[ Wasp ] Type 'string' is not assignable to type 'UserSalesData'.
[ Wasp ] server/operations/actions/index.ts(85,60): error TS2344: Type 'StoreUserSalesData<StoreUserSalesDataPayload, UserSalesData>' does not satisfy the constraint 'GenericAuthenticatedOperationDefinition'.
[ Wasp ] Type 'Promise<UserSalesData>' is not assignable to type 'Payload | Promise<Payload>'.
[ Wasp ] Type 'Promise<UserSalesData>' is not assignable to type 'Symbol | Set<SuperJSONValue> | Map<SuperJSONValue, SuperJSONValue> | Promise<Payload>'.
[ Wasp ] Type 'Promise<UserSalesData>' is not assignable to type 'Promise<Payload>'.
[ Wasp ] Type 'UserSalesData' is not assignable to type 'Payload'.
[ Wasp ] Type 'UserSalesData' is not assignable to type 'SuperJSONObject'.
@kapa.ai
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error messages you're seeing are TypeScript type errors. They're saying that the return type of your action function doesn't match the expected return type. In Wasp, the return type of an action is typically a Promise<Payload>, where Payload is the type of the data you're returning. However, your function is returning a Promise<UserSalesData>, which is not assignable to Payload. Here's a general example of how to define an action in Wasp:
import { type CreateFoo } from 'wasp/server/operations'

type Foo = // ...

export const createFoo: CreateFoo<{ id: number }, Foo> = (args, context) => {
// implementation
}
import { type CreateFoo } from 'wasp/server/operations'

type Foo = // ...

export const createFoo: CreateFoo<{ id: number }, Foo> = (args, context) => {
// implementation
}
In this example, the createFoo function is expected to receive an object with an id field of type number (this is the type of args), and return a value of type Foo (this must match the type of the Action's return value). Please ensure that your function's return type matches the expected return type. If you're still having trouble, could you provide more details about your action and its implementation? That would help in giving a more specific solution. For more information, you can refer to the Wasp documentation on implementing actions (https://wasp-lang.dev/docs/data-model/operations/actions#implementing-actions). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins? Let me check the knowledge base for you. One moment! :books: ---------------------- This is a Wasp action function named storeUserSalesData. It's an asynchronous function that takes two arguments: args and context. The args object contains the data that the function needs to perform its task. In this case, it includes date, totalRevenue, totalQuantity, productsSold, ordersToNL, and ordersToBE. The context object provides additional information and tools that the function can use. In this case, it's used to access the current user (context.user) and the UserSalesData entity (context.entities.UserSalesData). The function first checks if the user is authenticated. If not, it throws an error. Next, it prepares the sales data for insertion into the database. It creates a new salesData object with the provided args and the user's ID. It also converts the totalRevenue to a Decimal using Prisma. Then, it inserts the new salesData into the UserSalesData table in the database. Finally, it returns the result of the insertion without converting totalRevenue to a string. Here's the type definition for this function:
export const storeUserSalesData: StoreUserSalesData<StoreUserSalesDataPayload, UserSalesData>
export const storeUserSalesData: StoreUserSalesData<StoreUserSalesDataPayload, UserSalesData>
This means that storeUserSalesData is a StoreUserSalesData function that takes a StoreUserSalesDataPayload as its arguments and returns a UserSalesData object. For more information on how to implement actions in Wasp, you can refer to the Wasp documentation on implementing actions (https://wasp-lang.dev/docs/data-model/operations/actions#implementing-actions). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Sven
SvenOP•4mo ago
number; productsSold: JsonValue; ordersToNL: number; ordersToBE: number; }, unknown> & {}' is not assignable to type 'SuperJSONObject'.
Property 'totalRevenue' is incompatible with index signature.
Type 'Decimal' is not assignable to type 'SuperJSONValue'.
Type 'Decimal' is not assignable to type 'SuperJSONObject'.
Index signature for type 'string' is missing in type 'Decimal'.ts(2344)
number; productsSold: JsonValue; ordersToNL: number; ordersToBE: number; }, unknown> & {}' is not assignable to type 'SuperJSONObject'.
Property 'totalRevenue' is incompatible with index signature.
Type 'Decimal' is not assignable to type 'SuperJSONValue'.
Type 'Decimal' is not assignable to type 'SuperJSONObject'.
Index signature for type 'string' is missing in type 'Decimal'.ts(2344)
how do i fix this @kapa.ai
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error message you're seeing is a TypeScript type error. It's saying that the totalRevenue property of your object is of type Decimal, which is not assignable to SuperJSONValue. SuperJSONValue is a type used by SuperJSON, a library for serializing JavaScript values. It includes all JSON-serializable values, plus some additional ones like Date, RegExp, Map, Set, BigInt, undefined, and typed arrays. However, Decimal is not included in SuperJSONValue, which is why you're seeing this error. To fix this, you need to convert the Decimal value to a type that is assignable to SuperJSONValue. For example, you could convert it to a string or a number:
const salesData = {
// ...
totalRevenue: parseFloat(new Prisma.Decimal(totalRevenue).toString()), // Convert to number
// ...
};
const salesData = {
// ...
totalRevenue: parseFloat(new Prisma.Decimal(totalRevenue).toString()), // Convert to number
// ...
};
Or:
const salesData = {
// ...
totalRevenue: new Prisma.Decimal(totalRevenue).toString(), // Convert to string
// ...
};
const salesData = {
// ...
totalRevenue: new Prisma.Decimal(totalRevenue).toString(), // Convert to string
// ...
};
Please note that converting to a number may lead to loss of precision if the Decimal value has more decimal places than a number can accurately represent. Converting to a string will preserve all decimal places, but you'll need to convert it back to a Decimal or a number when you want to do arithmetic operations. For more information on how to work with Decimal values in Prisma, you can refer to the Prisma documentation on the Decimal type (https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-decimal). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Sven
SvenOP•4mo ago
@kapa.ai
ype 'JsonValue' is not assignable to type 'JsonNull | InputJsonValue | undefined'.
Type 'null' is not assignable to type 'JsonNull | InputJsonValue | undefined'.ts(2322)
index.d.ts(18969, 5): The expected type comes from property 'productsSold' which is declared here on type '(Without<UserSalesDataCreateInput, UserSalesDataUncheckedCreateInput> & UserSalesDataUncheckedCreateInput) | (Without<...> & UserSalesDataCreateInput)'
ype 'JsonValue' is not assignable to type 'JsonNull | InputJsonValue | undefined'.
Type 'null' is not assignable to type 'JsonNull | InputJsonValue | undefined'.ts(2322)
index.d.ts(18969, 5): The expected type comes from property 'productsSold' which is declared here on type '(Without<UserSalesDataCreateInput, UserSalesDataUncheckedCreateInput> & UserSalesDataUncheckedCreateInput) | (Without<...> & UserSalesDataCreateInput)'
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error message you're seeing is a TypeScript type error. It's saying that the productsSold property of your object is of type JsonValue, which is not assignable to JsonNull | InputJsonValue | undefined. InputJsonValue is a type used by Prisma, a database toolkit for TypeScript and Node.js. It includes all JSON-serializable values, plus null and undefined. However, JsonValue is not included in InputJsonValue, which is why you're seeing this error. To fix this, you need to ensure that the productsSold value is of a type that is assignable to InputJsonValue. For example, if productsSold is an object, you could convert it to a string using JSON.stringify():
return context.entities.UserSalesData.create({
data: {
// ...
productsSold: JSON.stringify(args.productsSold), // Convert to string
// ...
},
});
return context.entities.UserSalesData.create({
data: {
// ...
productsSold: JSON.stringify(args.productsSold), // Convert to string
// ...
},
});
Or, if productsSold is an array of objects, you could map each object to a string:
return context.entities.UserSalesData.create({
data: {
// ...
productsSold: args.productsSold.map(JSON.stringify), // Convert each object to string
// ...
},
});
return context.entities.UserSalesData.create({
data: {
// ...
productsSold: args.productsSold.map(JSON.stringify), // Convert each object to string
// ...
},
});
Please note that you'll need to parse the string back to an object or an array when you want to use the productsSold value. For more information on how to work with JSON values in Prisma, you can refer to the Prisma documentation on the Json type (https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Sven
SvenOP•4mo ago
Type 'GetResult<{ id: number; userId: string; date: Date; totalRevenue: Decimal; totalQuantity: number; productsSold: JsonValue; ordersToNL: number; ordersToBE: number; }, unknown> & {}' does not satisfy the constraint 'Payload'.
Type 'GetResult<{ id: number; userId: string; date: Date; totalRevenue: Decimal; totalQuantity: number; productsSold: JsonValue; ordersToNL: number; ordersToBE: number; }, unknown> & {}' is not assignable to type 'SuperJSONObject'.
Property 'totalRevenue' is incompatible with index signature.
Type 'Decimal' is not assignable to type 'SuperJSONValue'.
Type 'Decimal' is not assignable to type 'SuperJSONObject'.
Index signature for type 'string' is missing in type 'Decimal'.ts(2344)
Type 'GetResult<{ id: number; userId: string; date: Date; totalRevenue: Decimal; totalQuantity: number; productsSold: JsonValue; ordersToNL: number; ordersToBE: number; }, unknown> & {}' does not satisfy the constraint 'Payload'.
Type 'GetResult<{ id: number; userId: string; date: Date; totalRevenue: Decimal; totalQuantity: number; productsSold: JsonValue; ordersToNL: number; ordersToBE: number; }, unknown> & {}' is not assignable to type 'SuperJSONObject'.
Property 'totalRevenue' is incompatible with index signature.
Type 'Decimal' is not assignable to type 'SuperJSONValue'.
Type 'Decimal' is not assignable to type 'SuperJSONObject'.
Index signature for type 'string' is missing in type 'Decimal'.ts(2344)
Then i get this error
import { StoreUserSalesData } from 'wasp/server/operations'
import { UserSalesData } from 'wasp/entities';
import { Decimal } from '@prisma/client/runtime';


type StoreUserSalesDataPayload = Pick<UserSalesData, 'userId' | 'date' | 'totalQuantity' | 'productsSold' | 'ordersToNL' | 'ordersToBE'> & {
totalRevenue: string;
};

export const storeUserSalesData: StoreUserSalesData<StoreUserSalesDataPayload, UserSalesData> = async (
args,
context
) => {
if (!context.user) {
throw new Error('User is not authenticated')
}
// const encryptedClientSecret = encrypt(args.clientSecret);
// const encryptedClientId = encrypt(args.clientId);

return context.entities.UserSalesData.create({
data: {
userId: context.user.id,
date: args.date,
totalRevenue: args.totalQuantity,
totalQuantity: args.totalQuantity,
productsSold: JSON.stringify(args.productsSold),
ordersToNL: args.ordersToNL,
ordersToBE:args.ordersToBE,

},
});
};
import { StoreUserSalesData } from 'wasp/server/operations'
import { UserSalesData } from 'wasp/entities';
import { Decimal } from '@prisma/client/runtime';


type StoreUserSalesDataPayload = Pick<UserSalesData, 'userId' | 'date' | 'totalQuantity' | 'productsSold' | 'ordersToNL' | 'ordersToBE'> & {
totalRevenue: string;
};

export const storeUserSalesData: StoreUserSalesData<StoreUserSalesDataPayload, UserSalesData> = async (
args,
context
) => {
if (!context.user) {
throw new Error('User is not authenticated')
}
// const encryptedClientSecret = encrypt(args.clientSecret);
// const encryptedClientId = encrypt(args.clientId);

return context.entities.UserSalesData.create({
data: {
userId: context.user.id,
date: args.date,
totalRevenue: args.totalQuantity,
totalQuantity: args.totalQuantity,
productsSold: JSON.stringify(args.productsSold),
ordersToNL: args.ordersToNL,
ordersToBE:args.ordersToBE,

},
});
};
at UserSalesData> @kapa.ai
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error message you're seeing is a TypeScript type error. It's saying that the totalRevenue property of your object is of type Decimal, which is not assignable to SuperJSONValue. SuperJSONValue is a type used by SuperJSON, a library for serializing JavaScript values. It includes all JSON-serializable values, plus some additional ones like Date, RegExp, Map, Set, BigInt, undefined, and typed arrays. However, Decimal is not included in SuperJSONValue, which is why you're seeing this error. To fix this, you need to convert the Decimal value to a type that is assignable to SuperJSONValue. For example, you could convert it to a string or a number:
return context.entities.UserSalesData.create({{
data: {{
// ...
totalRevenue: parseFloat(args.totalRevenue), // Convert to number
// ...
}},
}});
return context.entities.UserSalesData.create({{
data: {{
// ...
totalRevenue: parseFloat(args.totalRevenue), // Convert to number
// ...
}},
}});
Or:
return context.entities.UserSalesData.create({{
data: {{
// ...
totalRevenue: args.totalRevenue, // Already a string
// ...
}},
}});
return context.entities.UserSalesData.create({{
data: {{
// ...
totalRevenue: args.totalRevenue, // Already a string
// ...
}},
}});
Please note that converting to a number may lead to loss of precision if the Decimal value has more decimal places than a number can accurately represent. Converting to a string will preserve all decimal places, but you'll need to convert it back to a Decimal or a number when you want to do arithmetic operations. For more information on how to work with Decimal values in Prisma, you can refer to the Prisma documentation on the Decimal type (https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-decimal). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins? Let me check the knowledge base for you. One moment! :books: ---------------------- The error message you're seeing is related to ES Modules in Node.js. It's saying that a directory import is not supported for ES Modules. This happens when you try to import a directory instead of a specific module or file. In your case, the error is occurring when trying to import from the directory /home/sven/SaaS/Bol-Pilot/app/.wasp/out/sdk/wasp/dist/client/operations/actions. To fix this, you need to specify the exact file you want to import from within that directory. For example, if there's a file named index.js in that directory, you would import it like this:
import { something } from '/home/sven/SaaS/Bol-Pilot/app/.wasp/out/sdk/wasp/dist/client/operations/actions/index.js';
import { something } from '/home/sven/SaaS/Bol-Pilot/app/.wasp/out/sdk/wasp/dist/client/operations/actions/index.js';
This error can also occur if you're using a version of Node.js that doesn't fully support ES Modules. As of Node.js 14, ES Modules are stable, but there are still some differences and limitations compared to CommonJS modules. If you're using an older version of Node.js, you might consider upgrading. For more information on ES Modules in Node.js, you can refer to the Node.js documentation on ES Modules (https://nodejs.org/api/esm.html#esm_modules_ecmascript_modules). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Sven
SvenOP•4mo ago
@kapa.ai that is something on the boilerplates end, could it be a wrongly defined query or action or wrong imported?
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error you're seeing is related to how Node.js handles ES Modules, and it's unlikely to be caused by a wrongly defined query or action in Wasp. However, it could be related to how these queries or actions are being imported in your code. In Wasp, queries and actions are defined in separate files and then imported where they're needed. If the import statements are not correctly pointing to these files, you might see errors like the one you're experiencing. Here's an example of how to correctly import a query or action in Wasp:
// Importing a query
import getTasks from '@wasp/queries/getTasks.js'

// Importing an action
import createTask from '@wasp/actions/createTask.js'
// Importing a query
import getTasks from '@wasp/queries/getTasks.js'

// Importing an action
import createTask from '@wasp/actions/createTask.js'
Make sure that the paths in your import statements correctly point to the query or action files. If the paths are incorrect, Node.js might try to import from a directory instead of a file, leading to the ERR_UNSUPPORTED_DIR_IMPORT error. If you're still seeing the error after checking your import statements, it might be a problem with the Wasp framework itself. In that case, I would recommend opening an issue on the Wasp GitHub repository (https://github.com/wasp-lang/wasp/issues) to get help from the Wasp developers. ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Sven
SvenOP•4mo ago
@kapa.ai can i use actions on serverside
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- Yes, you can use actions on the server side in Wasp. However, the way you import and use them is slightly different compared to the client side. On the server side, you should import actions from wasp/server/operations instead of wasp/client/operations. Also, when calling an action imported from wasp/server/operations, you need to pass a context that contains the user info. If your action doesn't require authentication, you should be able to pass an empty object as the context. Here's an example of how to import and use an action on the server side:
// Import the action
import { createTask } from 'wasp/server/operations'

// Use the action
const newTask = await createTask(context, { description: 'Learn TypeScript' })
// Import the action
import { createTask } from 'wasp/server/operations'

// Use the action
const newTask = await createTask(context, { description: 'Learn TypeScript' })
In this example, context is an object that contains the user info. The exact structure of this object depends on your application's authentication setup. For more information, you can refer to the Wasp documentation on actions (https://wasp-lang.dev/docs/data-model/operations/actions#using-actions) and the discussion on the Wasp Discord server (https://discord.com/channels/686873244791210014/1218567315185209464). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
miho
miho•4mo ago
@sodic one for you
Sven
SvenOP•4mo ago
hmm nvm
kapa.ai
kapa.ai•4mo ago
Let me check the knowledge base for you. One moment! :books: ---------------------- The error message you're seeing is indicating that context.entities.ClientCredentials is undefined, and therefore it can't access the findFirst method. This could be due to a few reasons: 1. The ClientCredentials entity might not be correctly defined or exported in your Wasp code. Make sure that you have a ClientCredentials entity defined in your entities directory and that it's correctly exported. 2. The context object passed to your action might not be correctly initialized. In Wasp, the context object is automatically provided and it includes the entities object which gives you access to your database models. If context is not correctly initialized, context.entities would be undefined. 3. There might be a typo in the entity name. Ensure that the entity name in your action matches exactly with the defined entity name. JavaScript is case-sensitive. Here's an example of how to define an entity in Wasp:
entity ClientCredentials {
id: Int @id @default(autoincrement())
userId: String
// other fields...
}
entity ClientCredentials {
id: Int @id @default(autoincrement())
userId: String
// other fields...
}
And here's how you might use it in an action:
const clientCredentials = await context.entities.ClientCredentials.findFirst({
where: { userId: context.user.id },
});
const clientCredentials = await context.entities.ClientCredentials.findFirst({
where: { userId: context.user.id },
});
If you're still having trouble, could you provide more details about your ClientCredentials entity and how you're initializing context? That would help in giving a more specific solution. For more information, you can refer to the Wasp documentation on entities (https://wasp-lang.dev/docs/data-model/entities) and actions (https://wasp-lang.dev/docs/data-model/operations/actions). ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @Sven, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
Filip
Filip•4mo ago
Hey, still need help or did you figure it out?
Sven
SvenOP•4mo ago
Well i solved it. Not sure why but i was using an action or query in another action. I think this led the error because i combined them Thanks dtill
Filip
Filip•4mo ago
Hmm, that should work though If you do it again and Wasp starts misbehaving, let me know 🙂
Sven
SvenOP•4mo ago
Alright
Want results from more Discord servers?
Add your server