diff --git a/docs-util/packages/react-docs-generator/src/classes/typedoc-manager.ts b/docs-util/packages/react-docs-generator/src/classes/typedoc-manager.ts index 368c01e1d2..78bddecb97 100644 --- a/docs-util/packages/react-docs-generator/src/classes/typedoc-manager.ts +++ b/docs-util/packages/react-docs-generator/src/classes/typedoc-manager.ts @@ -6,7 +6,7 @@ import { TSFunctionSignatureType, TypeDescriptor, } from "react-docgen/dist/Documentation.js" -import { Comment } from "typedoc" +import { Comment, ReferenceReflection, ReferenceType } from "typedoc" import { Application, Context, @@ -72,6 +72,8 @@ export default class TypedocManager { tsconfig: this.options.tsconfigPath, plugin: ["typedoc-plugin-custom"], enableInternalResolve: true, + internalModule: "internal", + checkVariables: true, logLevel: this.options.verbose ? "Verbose" : "None", }) @@ -108,24 +110,35 @@ export default class TypedocManager { // since the component may be a child of an exported component // we use the reflectionPathName to retrieve the component // by its "reflection path" - const reflection = this.project?.getChildByName( - reflectionPathName - ) as DeclarationReflection + let reflection = this.project?.getChildByName(reflectionPathName) as + | DeclarationReflection + | ReferenceReflection + if (reflection && reflection instanceof ReferenceReflection) { + // load declaration reflection + reflection = reflection.getTargetReflection() as DeclarationReflection + } if (!reflection) { return spec } - // retrieve the signature of the reflection - // this is helpful to retrieve the props of the component - const mappedSignature = reflection.sources?.length - ? this.getMappedSignatureFromSource(reflection.sources[0]) - : undefined + const doesReflectionHaveSignature = + reflection.type?.type === "reference" && + reflection.type.reflection instanceof DeclarationReflection && + reflection.type.reflection.signatures?.length - if ( - mappedSignature?.signatures[0].parameters?.length && - mappedSignature.signatures[0].parameters[0].type - ) { - const signature = mappedSignature.signatures[0] + // If the original reflection in the reference type has a signature + // use that signature. Else, try to get the signature from the mapping. + const signature = doesReflectionHaveSignature + ? ( + (reflection.type! as ReferenceType) + .reflection as DeclarationReflection + ).signatures![0] + : reflection.sources?.length + ? this.getMappedSignatureFromSource(reflection.sources[0]) + ?.signatures[0] + : undefined + + if (signature?.parameters?.length && signature.parameters[0].type) { // get the props of the component from the // first parameter in the signature. const props = getTypeChildren({ @@ -212,7 +225,7 @@ export default class TypedocManager { return } spec.props![prop.name] = { - description: this.normalizeDescription(this.getDescription(prop)), + description, required: !prop.flags.isOptional, tsType: prop.type ? this.getTsType(prop.type) @@ -446,8 +459,9 @@ export default class TypedocManager { // this is useful for the CustomResolver to check // if a variable is a React component. isReactComponent(name: string): boolean { - const reflection = this.getReflectionByName(name) - + const reflection = this.getReflectionByName(name, { + hasSignature: true, + }) if ( !reflection || !(reflection instanceof DeclarationReflection) || @@ -459,7 +473,9 @@ export default class TypedocManager { return reflection.signatures.some( (signature) => signature.type?.type === "reference" && - signature.type.name === "ReactNode" + (signature.type.name === "ReactNode" || + (signature.type.name === "Element" && + signature.type.package === "@types/react")) ) } @@ -571,11 +587,27 @@ export default class TypedocManager { } // Gets a reflection by its name. - getReflectionByName(name: string): DeclarationReflection | undefined { + getReflectionByName( + name: string, + options?: { + hasSignature?: boolean + } + ): DeclarationReflection | undefined { return this.project - ? (Object.values(this.project?.reflections || {}).find( - (ref) => ref.name === name - ) as DeclarationReflection) + ? (Object.values(this.project?.reflections || {}).find((ref) => { + if (ref.name !== name) { + return false + } + + if ( + options?.hasSignature && + (!(ref instanceof DeclarationReflection) || !ref.signatures) + ) { + return false + } + + return true + }) as DeclarationReflection) : undefined } } diff --git a/docs-util/packages/typedoc-config/extended-tsconfig/tsdoc.json b/docs-util/packages/typedoc-config/extended-tsconfig/tsdoc.json index e58d7ccc79..d411c222d8 100644 --- a/docs-util/packages/typedoc-config/extended-tsconfig/tsdoc.json +++ b/docs-util/packages/typedoc-config/extended-tsconfig/tsdoc.json @@ -45,6 +45,10 @@ { "tagName": "@typeParamDefinition", "syntaxKind": "block" + }, + { + "tagName": "@parentIgnore", + "syntaxKind": "block" } ] } \ No newline at end of file diff --git a/docs-util/packages/typedoc-config/fulfillment.js b/docs-util/packages/typedoc-config/fulfillment.js index 2561520e65..220e63b5c0 100644 --- a/docs-util/packages/typedoc-config/fulfillment.js +++ b/docs-util/packages/typedoc-config/fulfillment.js @@ -5,4 +5,5 @@ module.exports = getConfig({ entryPointPath: "packages/medusa/src/interfaces/fulfillment-service.ts", tsConfigName: "medusa.json", name: "fulfillment", + parentIgnore: true, }) diff --git a/docs-util/packages/typedoc-plugin-custom/src/index.ts b/docs-util/packages/typedoc-plugin-custom/src/index.ts index 9d430eca20..7935febf0a 100644 --- a/docs-util/packages/typedoc-plugin-custom/src/index.ts +++ b/docs-util/packages/typedoc-plugin-custom/src/index.ts @@ -5,6 +5,7 @@ import { load as parseOasSchemaPlugin } from "./parse-oas-schema-plugin" import { load as apiIgnorePlugin } from "./api-ignore" import { load as eslintExamplePlugin } from "./eslint-example" import { load as signatureModifierPlugin } from "./signature-modifier" +import { load as parentIgnorePlugin } from "./parent-ignore" import { GenerateNamespacePlugin } from "./generate-namespace" export function load(app: Application) { @@ -14,6 +15,7 @@ export function load(app: Application) { apiIgnorePlugin(app) eslintExamplePlugin(app) signatureModifierPlugin(app) + parentIgnorePlugin(app) new GenerateNamespacePlugin(app) } diff --git a/docs-util/packages/typedoc-plugin-custom/src/parent-ignore.ts b/docs-util/packages/typedoc-plugin-custom/src/parent-ignore.ts new file mode 100644 index 0000000000..80b46eddb6 --- /dev/null +++ b/docs-util/packages/typedoc-plugin-custom/src/parent-ignore.ts @@ -0,0 +1,47 @@ +import { + Application, + Context, + Converter, + DeclarationReflection, + ParameterType, + ReflectionKind, +} from "typedoc" + +export function load(app: Application) { + app.options.addDeclaration({ + name: "parentIgnore", + help: "Whether to ignore items with the `@parentIgnore` tag.", + type: ParameterType.Boolean, // The default + defaultValue: false, + }) + + app.converter.on(Converter.EVENT_RESOLVE_BEGIN, (context: Context) => { + const isParentIgnoreEnabled = app.options.getValue("parentIgnore") + for (const reflection of context.project.getReflectionsByKind( + ReflectionKind.All + )) { + if ( + isParentIgnoreEnabled && + reflection instanceof DeclarationReflection + ) { + reflection.comment?.blockTags + .filter((tag) => tag.tag === "@parentIgnore") + .forEach((tag) => { + const fieldNames = tag.content + .map((content) => content.text) + .join("") + .split(",") + reflection.children = reflection.children?.filter( + (child) => !fieldNames.includes(child.name) + ) + }) + } + + if (reflection.comment) { + reflection.comment.blockTags = reflection.comment?.blockTags.filter( + (tag) => tag.tag !== "@parentIgnore" + ) + } + } + }) +} diff --git a/docs-util/packages/typedoc-plugin-custom/src/resolve-references-plugin.ts b/docs-util/packages/typedoc-plugin-custom/src/resolve-references-plugin.ts index 65857c0f56..a3176ec953 100644 --- a/docs-util/packages/typedoc-plugin-custom/src/resolve-references-plugin.ts +++ b/docs-util/packages/typedoc-plugin-custom/src/resolve-references-plugin.ts @@ -32,10 +32,18 @@ export function load(app: Application) { defaultValue: false, }) + app.options.addDeclaration({ + name: "checkVariables", + help: "Whether to check for and add variables.", + type: ParameterType.Boolean, + defaultValue: false, + }) + let activeReflection: Reflection | undefined const referencedSymbols = new Map>() const symbolToActiveRefl = new Map() const knownPrograms = new Map() + let checkedVariableSymbols = false function discoverMissingExports( context: Context, @@ -90,6 +98,48 @@ export function load(app: Application) { } ) + app.converter.on(Converter.EVENT_CREATE_DECLARATION, (context: Context) => { + if (!app.options.getValue("checkVariables") || checkedVariableSymbols) { + return + } + checkedVariableSymbols = true + + context.program + .getSourceFiles() + .filter((file) => + app.entryPoints.some((entryPoint) => file.fileName.includes(entryPoint)) + ) + .forEach((file) => { + if ("locals" in file) { + const localVariables = file.locals as Map + if (!localVariables.size) { + return + } + + const internalNs = getOrCreateInternalNs({ + context, + scope: context.project, + nameSuffix: `${Math.random() * 100}`, + }) + + if (!internalNs) { + return + } + + const internalContext = context.withScope(internalNs) + + for (const [, value] of localVariables) { + if (!value.valueDeclaration) { + continue + } + if (shouldConvertSymbol(value, context.checker)) { + internalContext.converter.convertSymbol(internalContext, value) + } + } + } + }) + }) + app.converter.on( Converter.EVENT_RESOLVE_BEGIN, function onResolveBegin(context: Context) { @@ -118,21 +168,7 @@ export function load(app: Application) { // Nasty hack here that will almost certainly break in future TypeDoc versions. context.setActiveProgram(program) - const internalModuleOption = - context.converter.application.options.getValue("internalModule") - - let internalNs: DeclarationReflection | undefined = undefined - if (internalModuleOption) { - internalNs = context - .withScope(mod) - .createDeclarationReflection( - ReflectionKind.Module, - void 0, - void 0, - context.converter.application.options.getValue("internalModule") - ) - context.finalizeDeclarationReflection(internalNs) - } + const internalNs = getOrCreateInternalNs({ context, scope: mod }) const internalContext = context.withScope(internalNs || mod) @@ -199,3 +235,35 @@ function shouldConvertSymbol(symbol: ts.Symbol, checker: ts.TypeChecker) { return true } + +function getOrCreateInternalNs({ + context, + scope, + nameSuffix = "", +}: { + context: Context + scope: Reflection + nameSuffix?: string +}): DeclarationReflection | undefined { + const internalNsName = + context.converter.application.options.getValue("internalModule") + if (!internalNsName) { + return undefined + } + let internalNs = context.project.getChildByName( + `${internalNsName}${nameSuffix}` + ) as DeclarationReflection + if (!internalNs) { + internalNs = context + .withScope(scope) + .createDeclarationReflection( + ReflectionKind.Module, + void 0, + void 0, + `${internalNsName}${nameSuffix}` + ) + context.finalizeDeclarationReflection(internalNs) + } + + return internalNs +} diff --git a/docs-util/packages/types/lib/index.d.ts b/docs-util/packages/types/lib/index.d.ts index a0192232ed..c1c4c98bdc 100644 --- a/docs-util/packages/types/lib/index.d.ts +++ b/docs-util/packages/types/lib/index.d.ts @@ -205,5 +205,15 @@ export declare module "typedoc" { * Namespace names whose child members should have their own documents. */ allReflectionsHaveOwnDocumentInNamespace: string[] + /** + * Whether to ignore items with the `@parentIgnore` tag. + * @defaultValue false + */ + parentIgnore: boolean + /** + * Whether to check for and add variables. + * @defaultValue false + */ + checkVariables: boolean } } diff --git a/docs-util/packages/types/tsconfig.json b/docs-util/packages/types/tsconfig.json index db235fff10..2dcc93b513 100644 --- a/docs-util/packages/types/tsconfig.json +++ b/docs-util/packages/types/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "rootDir": "lib", }, - "include": ["lib/index.d.ts"] + "include": ["lib"] } \ No newline at end of file diff --git a/packages/design-system/ui/src/components/command-bar/command-bar.tsx b/packages/design-system/ui/src/components/command-bar/command-bar.tsx index 9142fb6126..d0336042d3 100644 --- a/packages/design-system/ui/src/components/command-bar/command-bar.tsx +++ b/packages/design-system/ui/src/components/command-bar/command-bar.tsx @@ -144,6 +144,9 @@ const Command = React.forwardRef( ( { className, + /** + * @ignore + */ type = "button", /** * The command's label. diff --git a/packages/generated/client-types/src/lib/models/Cart.ts b/packages/generated/client-types/src/lib/models/Cart.ts index a158634c11..4bf0c8efb2 100644 --- a/packages/generated/client-types/src/lib/models/Cart.ts +++ b/packages/generated/client-types/src/lib/models/Cart.ts @@ -182,4 +182,8 @@ export interface Cart { * The total of gift cards with taxes */ gift_card_tax_total?: number + /** + * The associated sales channels. + */ + sales_channels?: Array | null } diff --git a/packages/generated/client-types/src/lib/models/Order.ts b/packages/generated/client-types/src/lib/models/Order.ts index 90e2e5feee..ea77259435 100644 --- a/packages/generated/client-types/src/lib/models/Order.ts +++ b/packages/generated/client-types/src/lib/models/Order.ts @@ -267,4 +267,8 @@ export interface Order { * An optional key-value map with additional details */ metadata: Record | null + /** + * The associated sales channels. + */ + sales_channels?: Array | null } diff --git a/packages/generated/client-types/src/lib/models/PublishableApiKeySalesChannel.ts b/packages/generated/client-types/src/lib/models/PublishableApiKeySalesChannel.ts index e2edb20e18..f7684955ac 100644 --- a/packages/generated/client-types/src/lib/models/PublishableApiKeySalesChannel.ts +++ b/packages/generated/client-types/src/lib/models/PublishableApiKeySalesChannel.ts @@ -7,6 +7,10 @@ import { SetRelation, Merge } from "../core/ModelUtils" * This represents the association between the Publishable API keys and Sales Channels */ export interface PublishableApiKeySalesChannel { + /** + * The relation's ID + */ + id?: string /** * The sales channel's ID */ @@ -15,4 +19,16 @@ export interface PublishableApiKeySalesChannel { * The publishable API key's ID */ publishable_key_id: string + /** + * The date with timezone at which the resource was created. + */ + created_at: string + /** + * The date with timezone at which the resource was updated. + */ + updated_at: string + /** + * The date with timezone at which the resource was deleted. + */ + deleted_at: string | null } diff --git a/packages/generated/client-types/src/lib/models/SalesChannel.ts b/packages/generated/client-types/src/lib/models/SalesChannel.ts index 0c052c4f98..ec6b11e78a 100644 --- a/packages/generated/client-types/src/lib/models/SalesChannel.ts +++ b/packages/generated/client-types/src/lib/models/SalesChannel.ts @@ -3,6 +3,9 @@ /* eslint-disable */ import { SetRelation, Merge } from "../core/ModelUtils" +import type { Cart } from "./Cart" +import type { Order } from "./Order" +import type { PublishableApiKey } from "./PublishableApiKey" import type { SalesChannelLocation } from "./SalesChannelLocation" /** @@ -45,4 +48,16 @@ export interface SalesChannel { * An optional key-value map with additional details */ metadata?: Record | null + /** + * The associated carts. + */ + carts?: Array | null + /** + * The associated orders. + */ + orders?: Array | null + /** + * The associated publishable API keys. + */ + publishableKeys?: Array | null } diff --git a/packages/medusa-js/src/resources/customers.ts b/packages/medusa-js/src/resources/customers.ts index ab95f80da5..ce5e8ba8db 100644 --- a/packages/medusa-js/src/resources/customers.ts +++ b/packages/medusa-js/src/resources/customers.ts @@ -35,7 +35,6 @@ class CustomerResource extends BaseResource { * Register a new customer. This will also automatically authenticate the customer and set their login session in the response Cookie header. * Subsequent requests sent with the JS client are sent with the Cookie session automatically. * @param {StorePostCustomersReq} payload - The details of the customer to be created. - * @param {string} query - Filters and pagination configurations to apply on the retrieved product collections. * @param {Record} customHeaders - Custom headers to attach to the request. * @returns { ResponsePromise} Resolves to the created customer's details. * diff --git a/packages/medusa/src/interfaces/file-service.ts b/packages/medusa/src/interfaces/file-service.ts index e1c504121d..99d145d160 100644 --- a/packages/medusa/src/interfaces/file-service.ts +++ b/packages/medusa/src/interfaces/file-service.ts @@ -29,7 +29,6 @@ export interface IFileService extends TransactionBaseService { /** * upload file to fileservice from stream * @param fileData file metadata relevant for fileservice to create and upload the file - * @param fileStream readable stream of the file to upload * */ getUploadStreamDescriptor( fileData: UploadStreamDescriptorType diff --git a/packages/medusa/src/interfaces/fulfillment-service.ts b/packages/medusa/src/interfaces/fulfillment-service.ts index b9ca14a6c1..b5519cec51 100644 --- a/packages/medusa/src/interfaces/fulfillment-service.ts +++ b/packages/medusa/src/interfaces/fulfillment-service.ts @@ -390,12 +390,21 @@ export interface FulfillmentService extends TransactionBaseService { ): Promise } +/** + * @parentIgnore activeManager_,atomicPhase_,shouldRetryTransaction_,withTransaction + */ export abstract class AbstractFulfillmentService extends TransactionBaseService implements FulfillmentService { + /** + * @ignore + */ static _isFulfillmentService = true + /** + * @ignore + */ static isFulfillmentService(object): boolean { return object?.constructor?._isFulfillmentService } diff --git a/packages/medusa/src/interfaces/price-selection-strategy.ts b/packages/medusa/src/interfaces/price-selection-strategy.ts index 8a7a61fe0a..b09cd488e1 100644 --- a/packages/medusa/src/interfaces/price-selection-strategy.ts +++ b/packages/medusa/src/interfaces/price-selection-strategy.ts @@ -8,16 +8,23 @@ export interface IPriceSelectionStrategy extends ITransactionBaseService { /** * Calculate the original and discount price for a given variant in a set of * circumstances described in the context. - * @param variantId The variant id of the variant for which to retrieve prices - * @param context Details relevant to determine the correct pricing of the variant * @return pricing details in an object containing the calculated lowest price, * the default price an all valid prices for the given variant */ calculateVariantPrice( data: { + /** + * The variant id of the variant for which to retrieve prices + */ variantId: string + /** + * The variant's quantity. + */ quantity?: number }[], + /** + * Details relevant to determine the correct pricing of the variant + */ context: PriceSelectionContext ): Promise> diff --git a/packages/medusa/src/models/cart.ts b/packages/medusa/src/models/cart.ts index a213b237d7..72a165f297 100644 --- a/packages/medusa/src/models/cart.ts +++ b/packages/medusa/src/models/cart.ts @@ -228,6 +228,13 @@ * description: The total of gift cards with taxes * type: integer * example: 0 + * sales_channels: + * description: The associated sales channels. + * type: array + * nullable: true + * x-expandable: "sales_channels" + * items: + * $ref: "#/components/schemas/SalesChannel" */ import { diff --git a/packages/medusa/src/models/order.ts b/packages/medusa/src/models/order.ts index c5141e4cfb..b2af49dbe7 100644 --- a/packages/medusa/src/models/order.ts +++ b/packages/medusa/src/models/order.ts @@ -742,4 +742,12 @@ export class Order extends BaseEntity { * externalDocs: * description: "Learn about the metadata attribute, and how to delete and update it." * url: "https://docs.medusajs.com/development/entities/overview#metadata-attribute" + * sales_channels: + * description: The associated sales channels. + * type: array + * nullable: true + * x-expandable: "sales_channels" + * x-featureFlag: "medusa_v2" + * items: + * $ref: "#/components/schemas/SalesChannel" */ diff --git a/packages/medusa/src/models/publishable-api-key-sales-channel.ts b/packages/medusa/src/models/publishable-api-key-sales-channel.ts index 744b5e0146..9addc0c629 100644 --- a/packages/medusa/src/models/publishable-api-key-sales-channel.ts +++ b/packages/medusa/src/models/publishable-api-key-sales-channel.ts @@ -30,7 +30,14 @@ export class PublishableApiKeySalesChannel extends BaseEntity { * required: * - publishable_key_id * - sales_channel_id + * - created_at + * - updated_at + * - deleted_at * properties: + * id: + * description: The relation's ID + * type: string + * example: pksc_01G8X9A7ESKAJXG2H0E6F1MW7A * sales_channel_id: * description: The sales channel's ID * type: string @@ -39,4 +46,17 @@ export class PublishableApiKeySalesChannel extends BaseEntity { * description: The publishable API key's ID * type: string * example: pak_01G1G5V21KADXNGH29BJMAJ4B4 + * created_at: + * description: The date with timezone at which the resource was created. + * type: string + * format: date-time + * updated_at: + * description: The date with timezone at which the resource was updated. + * type: string + * format: date-time + * deleted_at: + * description: The date with timezone at which the resource was deleted. + * nullable: true + * type: string + * format: date-time */ diff --git a/packages/medusa/src/models/sales-channel.ts b/packages/medusa/src/models/sales-channel.ts index 4e3f5c8525..0141ab7ed0 100644 --- a/packages/medusa/src/models/sales-channel.ts +++ b/packages/medusa/src/models/sales-channel.ts @@ -165,4 +165,27 @@ export class SalesChannel extends SoftDeletableEntity { * externalDocs: * description: "Learn about the metadata attribute, and how to delete and update it." * url: "https://docs.medusajs.com/development/entities/overview#metadata-attribute" + * carts: + * description: The associated carts. + * type: array + * nullable: true + * x-expandable: "carts" + * x-featureFlag: "medusa_v2" + * items: + * $ref: "#/components/schemas/Cart" + * orders: + * description: The associated orders. + * type: array + * nullable: true + * x-expandable: "orders" + * x-featureFlag: "medusa_v2" + * items: + * $ref: "#/components/schemas/Order" + * publishableKeys: + * description: The associated publishable API keys. + * type: array + * nullable: true + * x-expandable: "publishableKeys" + * items: + * $ref: "#/components/schemas/PublishableApiKey" */ diff --git a/packages/medusa/src/services/customer.ts b/packages/medusa/src/services/customer.ts index 39fcd3ca5c..5b085f77db 100644 --- a/packages/medusa/src/services/customer.ts +++ b/packages/medusa/src/services/customer.ts @@ -416,7 +416,6 @@ class CustomerService extends TransactionBaseService { * Updates the customers' billing address. * @param {Customer} customer - the Customer to update * @param {Object|string} addressOrId - the value to set the billing address to - * @param {Object} addrRepo - address repository * @return {Promise} the result of the update operation */ async updateBillingAddress_( diff --git a/packages/medusa/src/services/fulfillment.ts b/packages/medusa/src/services/fulfillment.ts index 265080ca4c..304eaab483 100644 --- a/packages/medusa/src/services/fulfillment.ts +++ b/packages/medusa/src/services/fulfillment.ts @@ -101,10 +101,6 @@ class FulfillmentService extends TransactionBaseService { * Retrieves the order line items, given an array of items. * @param order - the order to get line items from * @param items - the items to get - * @param transformer - a function to apply to each of the items - * retrieved from the order, should return a line item. If the transformer - * returns an undefined value the line item will be filtered from the - * returned array. * @return the line items generated by the transformer. */ async getFulfillmentItems_( diff --git a/packages/medusa/src/services/new-totals.ts b/packages/medusa/src/services/new-totals.ts index d9baafafde..2ab6b15046 100644 --- a/packages/medusa/src/services/new-totals.ts +++ b/packages/medusa/src/services/new-totals.ts @@ -79,10 +79,8 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the items totals for either the legacy calculation or the new calculation - * @param items - * @param includeTax - * @param calculationContext - * @param taxRate + * @param items + * @param param1 */ async getLineItemTotals( items: LineItem | LineItem[], @@ -138,17 +136,18 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the totals for an item - * @param item - * @param includeTax - * @param lineItemAllocation - * @param taxLines Only needed to force the usage of the specified tax lines, often in the case where the item does not hold the tax lines - * @param calculationContext + * @param item + * @param param1 + * @returns */ protected async getLineItemTotals_( item: LineItem, { includeTax, lineItemAllocation, + /** + * Only needed to force the usage of the specified tax lines, often in the case where the item does not hold the tax lines + */ taxLines, calculationContext, }: { @@ -247,9 +246,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the legacy calculated totals using the tax rate * @param item - * @param taxRate - * @param lineItemAllocation - * @param calculationContext + * @param param1 */ protected async getLineItemTotalsLegacy( item: LineItem, @@ -327,8 +324,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * Return the amount that can be refund on a line item * @param lineItem - * @param calculationContext - * @param taxRate + * @param param1 */ getLineItemRefund( lineItem: { @@ -396,8 +392,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * @param lineItem - * @param calculationContext - * @param taxRate + * @param param1 * @protected */ protected getLineItemRefundLegacy( @@ -440,9 +435,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the gift cards totals * @param giftCardableAmount - * @param giftCardTransactions - * @param region - * @param giftCards + * @param param1 */ async getGiftCardTotals( giftCardableAmount: number, @@ -520,8 +513,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the gift cards totals based on their transactions - * @param gift_card_transactions - * @param region + * @param param0 */ getGiftCardTransactionsTotals({ giftCardTransactions, @@ -564,10 +556,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the shipping methods totals for either the legacy calculation or the new calculation * @param shippingMethods - * @param includeTax - * @param discounts - * @param taxRate - * @param calculationContext + * @param param1 */ async getShippingMethodTotals( shippingMethods: ShippingMethod | ShippingMethod[], @@ -658,10 +647,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the shipping method totals * @param shippingMethod - * @param includeTax - * @param calculationContext - * @param taxLines - * @param discounts + * @param param1 */ protected async getShippingMethodTotals_( shippingMethod: ShippingMethod, @@ -742,9 +728,7 @@ export default class NewTotalsService extends TransactionBaseService { /** * Calculate and return the shipping method totals legacy using the tax rate * @param shippingMethod - * @param calculationContext - * @param taxRate - * @param discounts + * @param param1 */ protected async getShippingMethodTotalsLegacy( shippingMethod: ShippingMethod, diff --git a/packages/medusa/src/services/note.ts b/packages/medusa/src/services/note.ts index 306b81bbdc..1535194cc5 100644 --- a/packages/medusa/src/services/note.ts +++ b/packages/medusa/src/services/note.ts @@ -69,16 +69,22 @@ class NoteService extends TransactionBaseService { /** Fetches all notes related to the given selector * @param selector - the query object for find * @param config - the configuration used to find the objects. contains relations, skip, and take. - * @param config.relations - Which relations to include in the resulting list of Notes. - * @param config.take - How many Notes to take in the resulting list of Notes. - * @param config.skip - How many Notes to skip in the resulting list of Notes. * @return notes related to the given search. */ async list( selector: Selector, config: FindConfig = { + /** + * How many Notes to skip in the resulting list of Notes. + */ skip: 0, + /** + * How many Notes to take in the resulting list of Notes. + */ take: 50, + /** + * Which relations to include in the resulting list of Notes. + */ relations: [], } ): Promise { @@ -90,16 +96,22 @@ class NoteService extends TransactionBaseService { /** Fetches all notes related to the given selector * @param selector - the query object for find * @param config - the configuration used to find the objects. contains relations, skip, and take. - * @param config.relations - Which relations to include in the resulting list of Notes. - * @param config.take - How many Notes to take in the resulting list of Notes. - * @param config.skip - How many Notes to skip in the resulting list of Notes. * @return notes related to the given search. */ async listAndCount( selector: Selector, config: FindConfig = { + /** + * How many Notes to skip in the resulting list of Notes. + */ skip: 0, + /** + * How many Notes to take in the resulting list of Notes. + */ take: 50, + /** + * Which relations to include in the resulting list of Notes. + */ relations: [], } ): Promise<[Note[], number]> { diff --git a/packages/medusa/src/services/product-variant-inventory.ts b/packages/medusa/src/services/product-variant-inventory.ts index e6fa3e9afa..c2e1669cc4 100644 --- a/packages/medusa/src/services/product-variant-inventory.ts +++ b/packages/medusa/src/services/product-variant-inventory.ts @@ -249,15 +249,21 @@ class ProductVariantInventoryService extends TransactionBaseService { /** * Attach a variant to an inventory item - * @param variantId variant id - * @param inventoryItemId inventory item id - * @param requiredQuantity quantity of variant to attach * @returns the variant inventory item */ async attachInventoryItem( attachments: { + /** + * variant id + */ variantId: string + /** + * inventory item id + */ inventoryItemId: string + /** + * quantity of variant to attach + */ requiredQuantity?: number }[] ): Promise diff --git a/packages/medusa/src/utils/calculate-price-tax-amount.ts b/packages/medusa/src/utils/calculate-price-tax-amount.ts index abc9cbb199..396f3322d7 100644 --- a/packages/medusa/src/utils/calculate-price-tax-amount.ts +++ b/packages/medusa/src/utils/calculate-price-tax-amount.ts @@ -1,10 +1,8 @@ /** * Return the tax amount that + * * - is includes in the price if it is tax inclusive * - will be applied on to the price if it is tax exclusive - * @param price - * @param includesTax - * @param taxRate */ export function calculatePriceTaxAmount({ price, diff --git a/packages/oas/medusa-oas-cli/redocly/redocly-config.yaml b/packages/oas/medusa-oas-cli/redocly/redocly-config.yaml index 7b8ffadc3d..138d4fea4e 100644 --- a/packages/oas/medusa-oas-cli/redocly/redocly-config.yaml +++ b/packages/oas/medusa-oas-cli/redocly/redocly-config.yaml @@ -13,6 +13,7 @@ decorators: - Order - Payment - PaymentSession + - SalesChannel ClaimImage: - ClaimItem ClaimItem: @@ -43,6 +44,7 @@ decorators: - Fulfillment GiftCard: - Order + - Region GiftCardTransaction: - GiftCard - Order @@ -73,6 +75,9 @@ decorators: - Refund - Return - Swap + - SalesChannel + - Region + - LineItem OrderEdit: - Order OrderItemChange: @@ -134,6 +139,10 @@ decorators: - Region TrackingLink: - Fulfillment + SalesChannel: + - Order + - Cart + - PublishableApiKey # Similar config to /www/docs/docusaurus.config.js > redocusaurus # Allows to emulate rendering of API public documentation when using `yarn redocly preview-docs openapi.yaml` diff --git a/packages/workflows-sdk/src/utils/composer/helpers/step-response.ts b/packages/workflows-sdk/src/utils/composer/helpers/step-response.ts index 11ce065e66..d7a95d0263 100644 --- a/packages/workflows-sdk/src/utils/composer/helpers/step-response.ts +++ b/packages/workflows-sdk/src/utils/composer/helpers/step-response.ts @@ -39,7 +39,76 @@ export class StepResponse { /** * Creates a StepResponse that indicates that the step has failed and the retry mechanism should not kick in anymore. * - * @param message - An optional message to be logged. Default to `Permanent failure`. + * @param message - An optional message to be logged. + * + * @example + * import { Product } from "@medusajs/medusa" + * import { + * createStep, + * StepResponse, + * createWorkflow + * } from "@medusajs/workflows-sdk" + * + * interface CreateProductInput { + * title: string + * } + * + * export const createProductStep = createStep( + * "createProductStep", + * async function ( + * input: CreateProductInput, + * context + * ) { + * const productService = context.container.resolve( + * "productService" + * ) + * + * try { + * const product = await productService.create(input) + * return new StepResponse({ + * product + * }, { + * product_id: product.id + * }) + * } catch (e) { + * return StepResponse.permanentFailure(`Couldn't create the product: ${e}`) + * } + * } + * ) + * + * interface WorkflowInput { + * title: string + * } + * + * const myWorkflow = createWorkflow< + * WorkflowInput, + * Product + * >("my-workflow", (input) => { + * // Everything here will be executed and resolved later + * // during the execution. Including the data access. + * + * const product = createProductStep(input) + * } + * ) + * + * myWorkflow() + * .run({ + * input: { + * title: "Shirt" + * } + * }) + * .then(({ errors, result }) => { + * if (errors.length) { + * errors.forEach((err) => { + * if (typeof err.error === "object" && "message" in err.error) { + * console.error(err.error.message) + * } else { + * console.error(err.error) + * } + * }) + * } + * console.log(result) + * }) */ static permanentFailure(message = "Permanent failure"): never { throw new PermanentStepFailureError(message) diff --git a/www/apps/docs/content/medusa-react/overview.mdx b/www/apps/docs/content/medusa-react/overview.mdx index 71b02ed49f..b4035e98e3 100644 --- a/www/apps/docs/content/medusa-react/overview.mdx +++ b/www/apps/docs/content/medusa-react/overview.mdx @@ -412,7 +412,7 @@ import { useAdminProducts } from "medusa-react" const Products = () => { const { products, isLoading } = useAdminProducts({ - expand: "collection" + expand: "collection", }) return ( @@ -445,7 +445,7 @@ import { useAdminProducts } from "medusa-react" const Products = () => { const { products, isLoading } = useAdminProducts({ - expand: "variants,collection" + expand: "variants,collection", }) return ( @@ -478,7 +478,7 @@ import { useAdminProducts } from "medusa-react" const Products = () => { const { products, isLoading } = useAdminProducts({ - expand: "" + expand: "", }) return ( @@ -558,7 +558,7 @@ import { useAdminProducts } from "medusa-react" const Products = () => { const { products, isLoading } = useAdminProducts({ fields: "title", - expand: "" + expand: "", }) return ( @@ -654,7 +654,7 @@ import { useAdminProducts } from "medusa-react" const Products = () => { const { products, isLoading } = useAdminProducts({ fields: "", - expand: "" + expand: "", }) return ( @@ -698,10 +698,10 @@ const Products = () => { products, limit, offset, - isLoading + isLoading, } = useAdminProducts({ limit: 20, - offset: 0 + offset: 0, }) return ( @@ -736,14 +736,14 @@ For example, if the `count` is `100` and the `limit` is `50`, you can divide the The `order` field, available on hooks supporting pagination, allows you to sort the retrieved items by an attribute of that item. For example, you can sort products by their `created_at` attribute by setting `order` to `created_at`: -```ts +```tsx import React from "react" import { useAdminProducts } from "medusa-react" const Products = () => { const { products, - isLoading + isLoading, } = useAdminProducts({ order: "created_at", }) @@ -768,14 +768,14 @@ export default Products By default, the sort direction will be ascending. To change it to descending, pass a dash (`-`) before the attribute name. For example: -```ts +```tsx import React from "react" import { useAdminProducts } from "medusa-react" const Products = () => { const { products, - isLoading + isLoading, } = useAdminProducts({ order: "-created_at", }) diff --git a/www/apps/ui/src/specs/Popover/Popover.Content.json b/www/apps/ui/src/specs/Popover/Popover.Content.json index d1918e3347..4b6bb28927 100644 --- a/www/apps/ui/src/specs/Popover/Popover.Content.json +++ b/www/apps/ui/src/specs/Popover/Popover.Content.json @@ -69,14 +69,6 @@ ] }, "required": false - }, - "forceMount": { - "description": "Used to force mounting when more control is needed. Useful when\ncontrolling animation with React animation libraries.", - "required": false, - "tsType": { - "name": "literal", - "value": "true" - } } } } \ No newline at end of file diff --git a/www/apps/ui/src/specs/ToastProvider/ToastProvider.json b/www/apps/ui/src/specs/ToastProvider/ToastProvider.json new file mode 100644 index 0000000000..20552f510d --- /dev/null +++ b/www/apps/ui/src/specs/ToastProvider/ToastProvider.json @@ -0,0 +1,6 @@ +{ + "description": "", + "methods": [], + "displayName": "ToastProvider", + "props": {} +} \ No newline at end of file