@open-mercato/core 0.6.8-develop.7049.1.b41427429a → 0.6.8-develop.7051.1.2e20648fd5
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.
|
@@ -138,7 +138,11 @@ const crud = makeCrudRoute({
|
|
|
138
138
|
updatedAt: "updated_at",
|
|
139
139
|
name: "name",
|
|
140
140
|
area_ha: "area_ha",
|
|
141
|
-
areaHa: "area_ha"
|
|
141
|
+
areaHa: "area_ha",
|
|
142
|
+
origin_country: "origin_country",
|
|
143
|
+
originCountry: "origin_country",
|
|
144
|
+
plot_type: "plot_type",
|
|
145
|
+
plotType: "plot_type"
|
|
142
146
|
},
|
|
143
147
|
buildFilters,
|
|
144
148
|
transformItem: transformPlotItem
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/eudr/api/plots/route.ts"],
|
|
4
|
-
"sourcesContent": ["import type { EntityManager, FilterQuery } from '@mikro-orm/postgresql'\nimport { z } from 'zod'\nimport { makeCrudRoute } from '@open-mercato/shared/lib/crud/factory'\nimport { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { splitCustomFieldPayload } from '@open-mercato/shared/lib/crud/custom-fields'\nimport { buildIlikeTerm } from '@open-mercato/shared/lib/db/buildIlikeTerm'\nimport { parseBooleanToken } from '@open-mercato/shared/lib/boolean'\nimport { withScopedPayload } from '@open-mercato/shared/lib/api/scoped'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { E } from '#generated/entities.ids.generated'\nimport { EudrPlot } from '../../data/entities'\nimport { resolveDetailReadScope } from '../../lib/detail-read-scope'\nimport {\n EUDR_PLOT_TYPES,\n plotCreateSchema,\n plotUpdateSchema,\n} from '../../data/validators'\nimport {\n createEudrCrudOpenApi,\n createPagedListResponseSchema,\n defaultOkResponseSchema,\n} from '../openapi'\n\ntype TranslateFn = (key: string, fallback?: string) => string\n\nconst rawBodySchema = z.object({}).passthrough()\n\nconst listSchema = z.object({\n page: z.coerce.number().min(1).default(1),\n pageSize: z.coerce.number().min(1).max(100).default(50),\n search: z.string().optional(),\n supplierEntityId: z.string().uuid().optional(),\n plotType: z.enum(EUDR_PLOT_TYPES).optional(),\n isActive: z.string().optional(),\n originCountry: z.string().length(2).optional(),\n id: z.string().uuid().optional(),\n ids: z.string().optional(),\n sortField: z.string().optional(),\n sortDir: z.enum(['asc', 'desc']).optional(),\n})\n\ntype PlotListQuery = z.infer<typeof listSchema>\n\nconst routeMetadata = {\n GET: { requireAuth: true, requireFeatures: ['eudr.plots.view'] },\n POST: { requireAuth: true, requireFeatures: ['eudr.plots.manage'] },\n PUT: { requireAuth: true, requireFeatures: ['eudr.plots.manage'] },\n DELETE: { requireAuth: true, requireFeatures: ['eudr.plots.manage'] },\n}\n\nexport const metadata = routeMetadata\n\nfunction toIsoString(value: unknown): string | null {\n if (value instanceof Date) return value.toISOString()\n if (typeof value !== 'string' || value.length === 0) return null\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? value : date.toISOString()\n}\n\nfunction asStringOrNull(value: unknown): string | null {\n return typeof value === 'string' ? value : null\n}\n\nfunction stringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return []\n return value.filter((entry): entry is string => typeof entry === 'string')\n}\n\nfunction resolveDeleteInput(parsed: unknown, ctx: { request?: Request }, translate: TranslateFn) {\n const record = parsed && typeof parsed === 'object' ? recordFrom(parsed) : {}\n const body = record.body && typeof record.body === 'object' ? recordFrom(record.body) : null\n const query = record.query && typeof record.query === 'object' ? recordFrom(record.query) : null\n const requestId = ctx.request ? new URL(ctx.request.url).searchParams.get('id') : null\n const id = asStringOrNull(body?.id) ?? asStringOrNull(record.id) ?? asStringOrNull(query?.id) ?? requestId\n if (!id) throw new CrudHttpError(400, { error: translate('eudr.errors.plot_required', 'Plot id is required') })\n return { id }\n}\n\nfunction recordFrom(value: object): Record<string, unknown> {\n return value as Record<string, unknown>\n}\n\nfunction buildFilters(query: PlotListQuery): Record<string, unknown> {\n const filters: Record<string, unknown> = {}\n if (query.id) filters.id = { $eq: query.id }\n if (query.supplierEntityId) filters.supplier_entity_id = { $eq: query.supplierEntityId }\n if (query.plotType) filters.plot_type = { $eq: query.plotType }\n if (query.originCountry) filters.origin_country = { $eq: query.originCountry.toUpperCase() }\n const isActive = parseBooleanToken(query.isActive)\n if (isActive !== null) filters.is_active = { $eq: isActive }\n const search = typeof query.search === 'string' ? query.search.trim() : ''\n if (search) {\n const searchPattern = buildIlikeTerm(search)\n filters.$or = [\n { name: { $ilike: searchPattern } },\n { external_id: { $ilike: searchPattern } },\n ]\n }\n return filters\n}\n\nfunction transformPlotItem(item: unknown) {\n if (!item || typeof item !== 'object') return item\n const record = item as Record<string, unknown>\n // Bare list items intentionally omit `geometry`; the afterList hook attaches\n // it (with decryption) for id/ids detail reads only.\n return {\n id: record.id,\n supplierEntityId: record.supplier_entity_id ?? null,\n supplierSnapshot: record.supplier_snapshot ?? null,\n name: record.name ?? null,\n externalId: record.external_id ?? null,\n originCountry: record.origin_country ?? null,\n plotType: record.plot_type ?? null,\n areaHa: record.area_ha ?? null,\n validationWarnings: stringArray(record.validation_warnings),\n producerName: record.producer_name ?? null,\n isActive: typeof record.is_active === 'boolean' ? record.is_active : parseBooleanToken(typeof record.is_active === 'string' ? record.is_active : null),\n createdAt: toIsoString(record.created_at),\n updatedAt: toIsoString(record.updated_at),\n }\n}\n\nconst listFields = [\n 'id',\n 'supplier_entity_id',\n 'supplier_snapshot',\n 'name',\n 'external_id',\n 'origin_country',\n 'plot_type',\n 'area_ha',\n 'validation_warnings',\n 'is_active',\n 'created_at',\n 'updated_at',\n]\n\nconst crud = makeCrudRoute({\n metadata: routeMetadata,\n orm: {\n entity: EudrPlot,\n idField: 'id',\n orgField: 'organizationId',\n tenantField: 'tenantId',\n softDeleteField: 'deletedAt',\n },\n indexer: { entityType: E.eudr.eudr_plot },\n list: {\n schema: listSchema,\n entityId: E.eudr.eudr_plot,\n fields: listFields,\n sortFieldMap: {\n created_at: 'created_at',\n createdAt: 'created_at',\n updated_at: 'updated_at',\n updatedAt: 'updated_at',\n name: 'name',\n area_ha: 'area_ha',\n areaHa: 'area_ha',\n },\n buildFilters,\n transformItem: transformPlotItem,\n },\n actions: {\n create: {\n commandId: 'eudr.plots.create',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n const scoped = withScopedPayload(raw ?? {}, ctx, translate)\n const { base, custom } = splitCustomFieldPayload(scoped)\n const parsed = plotCreateSchema.parse(base)\n const input = { ...parsed, tenantId: scoped.tenantId, organizationId: scoped.organizationId }\n return Object.keys(custom).length ? { ...input, customFields: custom } : input\n },\n response: ({ result }) => ({ id: result?.entityId ?? result?.id ?? null }),\n status: 201,\n },\n update: {\n commandId: 'eudr.plots.update',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n const scoped = withScopedPayload(raw ?? {}, ctx, translate)\n const { base, custom } = splitCustomFieldPayload(scoped)\n const parsed = plotUpdateSchema.parse(base)\n const input = { ...parsed, tenantId: scoped.tenantId, organizationId: scoped.organizationId }\n return Object.keys(custom).length ? { ...input, customFields: custom } : input\n },\n response: ({ result }) => {\n const updatedAt = result?.updatedAt\n return {\n ok: true,\n updatedAt: updatedAt instanceof Date ? updatedAt.toISOString() : (typeof updatedAt === 'string' ? updatedAt : null),\n }\n },\n },\n delete: {\n commandId: 'eudr.plots.delete',\n schema: rawBodySchema,\n mapInput: async ({ parsed, ctx }) => {\n const { translate } = await resolveTranslations()\n return resolveDeleteInput(parsed, ctx, translate)\n },\n response: () => ({ ok: true }),\n },\n },\n hooks: {\n afterList: async (payload, ctx) => {\n const detailRead = (typeof ctx.query.id === 'string' && ctx.query.id.length > 0)\n || (typeof ctx.query.ids === 'string' && ctx.query.ids.length > 0)\n if (!detailRead) return\n const items: unknown[] = Array.isArray(payload?.items) ? payload.items : []\n if (!items.length) return\n const scope = resolveDetailReadScope(ctx)\n if (!scope) return\n const ids = items\n .map((item) => (item && typeof item === 'object' ? asStringOrNull((item as Record<string, unknown>).id) : null))\n .filter((id): id is string => id !== null)\n if (!ids.length) return\n const em = ctx.container.resolve('em') as EntityManager\n const where: FilterQuery<EudrPlot> = {\n id: { $in: ids },\n deletedAt: null,\n tenantId: scope.tenantId,\n organizationId: scope.organizationFilter,\n }\n const decrypted = await findWithDecryption(\n em,\n EudrPlot,\n where,\n {},\n { tenantId: scope.tenantId, organizationId: scope.decryptionOrganizationId },\n )\n const byId = new Map(decrypted.map((plot) => [plot.id, plot]))\n for (const item of items) {\n if (!item || typeof item !== 'object') continue\n const record = item as Record<string, unknown>\n const id = asStringOrNull(record.id)\n const plot = id ? byId.get(id) : null\n if (!plot) continue\n record.geometry = plot.geometry ?? null\n record.producerName = plot.producerName ?? null\n record.description = plot.description ?? null\n }\n },\n },\n})\n\nexport const GET = crud.GET\nexport const POST = crud.POST\nexport const PUT = crud.PUT\nexport const DELETE = crud.DELETE\n\nconst plotListItemSchema = z.object({\n id: z.string().uuid(),\n supplierEntityId: z.string().uuid().nullable().optional(),\n supplierSnapshot: z.object({\n displayName: z.string().nullable().optional(),\n }).nullable().optional(),\n name: z.string().nullable().optional(),\n externalId: z.string().nullable().optional(),\n originCountry: z.string().nullable().optional(),\n plotType: z.enum(EUDR_PLOT_TYPES).nullable().optional(),\n areaHa: z.union([z.string(), z.number()]).nullable().optional(),\n geometry: z.unknown().nullable().optional().describe(\n 'Present only on detail reads requested with id or ids; omitted from bare paginated list reads.',\n ),\n validationWarnings: z.array(z.string()),\n producerName: z.string().nullable().optional(),\n isActive: z.boolean().nullable().optional(),\n createdAt: z.string().nullable().optional(),\n updatedAt: z.string().nullable().optional(),\n})\n\nexport const openApi = createEudrCrudOpenApi({\n resourceName: 'Plot',\n querySchema: listSchema,\n listResponseSchema: createPagedListResponseSchema(plotListItemSchema),\n create: {\n schema: plotCreateSchema,\n description: 'Creates an EUDR supplier plot for the scoped organization.',\n },\n update: {\n schema: plotUpdateSchema,\n responseSchema: defaultOkResponseSchema,\n description: 'Updates an EUDR supplier plot.',\n },\n del: {\n schema: z.object({ id: z.string().uuid() }),\n responseSchema: defaultOkResponseSchema,\n description: 'Deletes an EUDR supplier plot by id. Request body or query may provide the identifier.',\n },\n})\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import type { EntityManager, FilterQuery } from '@mikro-orm/postgresql'\nimport { z } from 'zod'\nimport { makeCrudRoute } from '@open-mercato/shared/lib/crud/factory'\nimport { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { splitCustomFieldPayload } from '@open-mercato/shared/lib/crud/custom-fields'\nimport { buildIlikeTerm } from '@open-mercato/shared/lib/db/buildIlikeTerm'\nimport { parseBooleanToken } from '@open-mercato/shared/lib/boolean'\nimport { withScopedPayload } from '@open-mercato/shared/lib/api/scoped'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { E } from '#generated/entities.ids.generated'\nimport { EudrPlot } from '../../data/entities'\nimport { resolveDetailReadScope } from '../../lib/detail-read-scope'\nimport {\n EUDR_PLOT_TYPES,\n plotCreateSchema,\n plotUpdateSchema,\n} from '../../data/validators'\nimport {\n createEudrCrudOpenApi,\n createPagedListResponseSchema,\n defaultOkResponseSchema,\n} from '../openapi'\n\ntype TranslateFn = (key: string, fallback?: string) => string\n\nconst rawBodySchema = z.object({}).passthrough()\n\nconst listSchema = z.object({\n page: z.coerce.number().min(1).default(1),\n pageSize: z.coerce.number().min(1).max(100).default(50),\n search: z.string().optional(),\n supplierEntityId: z.string().uuid().optional(),\n plotType: z.enum(EUDR_PLOT_TYPES).optional(),\n isActive: z.string().optional(),\n originCountry: z.string().length(2).optional(),\n id: z.string().uuid().optional(),\n ids: z.string().optional(),\n sortField: z.string().optional(),\n sortDir: z.enum(['asc', 'desc']).optional(),\n})\n\ntype PlotListQuery = z.infer<typeof listSchema>\n\nconst routeMetadata = {\n GET: { requireAuth: true, requireFeatures: ['eudr.plots.view'] },\n POST: { requireAuth: true, requireFeatures: ['eudr.plots.manage'] },\n PUT: { requireAuth: true, requireFeatures: ['eudr.plots.manage'] },\n DELETE: { requireAuth: true, requireFeatures: ['eudr.plots.manage'] },\n}\n\nexport const metadata = routeMetadata\n\nfunction toIsoString(value: unknown): string | null {\n if (value instanceof Date) return value.toISOString()\n if (typeof value !== 'string' || value.length === 0) return null\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? value : date.toISOString()\n}\n\nfunction asStringOrNull(value: unknown): string | null {\n return typeof value === 'string' ? value : null\n}\n\nfunction stringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return []\n return value.filter((entry): entry is string => typeof entry === 'string')\n}\n\nfunction resolveDeleteInput(parsed: unknown, ctx: { request?: Request }, translate: TranslateFn) {\n const record = parsed && typeof parsed === 'object' ? recordFrom(parsed) : {}\n const body = record.body && typeof record.body === 'object' ? recordFrom(record.body) : null\n const query = record.query && typeof record.query === 'object' ? recordFrom(record.query) : null\n const requestId = ctx.request ? new URL(ctx.request.url).searchParams.get('id') : null\n const id = asStringOrNull(body?.id) ?? asStringOrNull(record.id) ?? asStringOrNull(query?.id) ?? requestId\n if (!id) throw new CrudHttpError(400, { error: translate('eudr.errors.plot_required', 'Plot id is required') })\n return { id }\n}\n\nfunction recordFrom(value: object): Record<string, unknown> {\n return value as Record<string, unknown>\n}\n\nfunction buildFilters(query: PlotListQuery): Record<string, unknown> {\n const filters: Record<string, unknown> = {}\n if (query.id) filters.id = { $eq: query.id }\n if (query.supplierEntityId) filters.supplier_entity_id = { $eq: query.supplierEntityId }\n if (query.plotType) filters.plot_type = { $eq: query.plotType }\n if (query.originCountry) filters.origin_country = { $eq: query.originCountry.toUpperCase() }\n const isActive = parseBooleanToken(query.isActive)\n if (isActive !== null) filters.is_active = { $eq: isActive }\n const search = typeof query.search === 'string' ? query.search.trim() : ''\n if (search) {\n const searchPattern = buildIlikeTerm(search)\n filters.$or = [\n { name: { $ilike: searchPattern } },\n { external_id: { $ilike: searchPattern } },\n ]\n }\n return filters\n}\n\nfunction transformPlotItem(item: unknown) {\n if (!item || typeof item !== 'object') return item\n const record = item as Record<string, unknown>\n // Bare list items intentionally omit `geometry`; the afterList hook attaches\n // it (with decryption) for id/ids detail reads only.\n return {\n id: record.id,\n supplierEntityId: record.supplier_entity_id ?? null,\n supplierSnapshot: record.supplier_snapshot ?? null,\n name: record.name ?? null,\n externalId: record.external_id ?? null,\n originCountry: record.origin_country ?? null,\n plotType: record.plot_type ?? null,\n areaHa: record.area_ha ?? null,\n validationWarnings: stringArray(record.validation_warnings),\n producerName: record.producer_name ?? null,\n isActive: typeof record.is_active === 'boolean' ? record.is_active : parseBooleanToken(typeof record.is_active === 'string' ? record.is_active : null),\n createdAt: toIsoString(record.created_at),\n updatedAt: toIsoString(record.updated_at),\n }\n}\n\nconst listFields = [\n 'id',\n 'supplier_entity_id',\n 'supplier_snapshot',\n 'name',\n 'external_id',\n 'origin_country',\n 'plot_type',\n 'area_ha',\n 'validation_warnings',\n 'is_active',\n 'created_at',\n 'updated_at',\n]\n\nconst crud = makeCrudRoute({\n metadata: routeMetadata,\n orm: {\n entity: EudrPlot,\n idField: 'id',\n orgField: 'organizationId',\n tenantField: 'tenantId',\n softDeleteField: 'deletedAt',\n },\n indexer: { entityType: E.eudr.eudr_plot },\n list: {\n schema: listSchema,\n entityId: E.eudr.eudr_plot,\n fields: listFields,\n sortFieldMap: {\n created_at: 'created_at',\n createdAt: 'created_at',\n updated_at: 'updated_at',\n updatedAt: 'updated_at',\n name: 'name',\n area_ha: 'area_ha',\n areaHa: 'area_ha',\n origin_country: 'origin_country',\n originCountry: 'origin_country',\n plot_type: 'plot_type',\n plotType: 'plot_type',\n },\n buildFilters,\n transformItem: transformPlotItem,\n },\n actions: {\n create: {\n commandId: 'eudr.plots.create',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n const scoped = withScopedPayload(raw ?? {}, ctx, translate)\n const { base, custom } = splitCustomFieldPayload(scoped)\n const parsed = plotCreateSchema.parse(base)\n const input = { ...parsed, tenantId: scoped.tenantId, organizationId: scoped.organizationId }\n return Object.keys(custom).length ? { ...input, customFields: custom } : input\n },\n response: ({ result }) => ({ id: result?.entityId ?? result?.id ?? null }),\n status: 201,\n },\n update: {\n commandId: 'eudr.plots.update',\n schema: rawBodySchema,\n mapInput: async ({ raw, ctx }) => {\n const { translate } = await resolveTranslations()\n const scoped = withScopedPayload(raw ?? {}, ctx, translate)\n const { base, custom } = splitCustomFieldPayload(scoped)\n const parsed = plotUpdateSchema.parse(base)\n const input = { ...parsed, tenantId: scoped.tenantId, organizationId: scoped.organizationId }\n return Object.keys(custom).length ? { ...input, customFields: custom } : input\n },\n response: ({ result }) => {\n const updatedAt = result?.updatedAt\n return {\n ok: true,\n updatedAt: updatedAt instanceof Date ? updatedAt.toISOString() : (typeof updatedAt === 'string' ? updatedAt : null),\n }\n },\n },\n delete: {\n commandId: 'eudr.plots.delete',\n schema: rawBodySchema,\n mapInput: async ({ parsed, ctx }) => {\n const { translate } = await resolveTranslations()\n return resolveDeleteInput(parsed, ctx, translate)\n },\n response: () => ({ ok: true }),\n },\n },\n hooks: {\n afterList: async (payload, ctx) => {\n const detailRead = (typeof ctx.query.id === 'string' && ctx.query.id.length > 0)\n || (typeof ctx.query.ids === 'string' && ctx.query.ids.length > 0)\n if (!detailRead) return\n const items: unknown[] = Array.isArray(payload?.items) ? payload.items : []\n if (!items.length) return\n const scope = resolveDetailReadScope(ctx)\n if (!scope) return\n const ids = items\n .map((item) => (item && typeof item === 'object' ? asStringOrNull((item as Record<string, unknown>).id) : null))\n .filter((id): id is string => id !== null)\n if (!ids.length) return\n const em = ctx.container.resolve('em') as EntityManager\n const where: FilterQuery<EudrPlot> = {\n id: { $in: ids },\n deletedAt: null,\n tenantId: scope.tenantId,\n organizationId: scope.organizationFilter,\n }\n const decrypted = await findWithDecryption(\n em,\n EudrPlot,\n where,\n {},\n { tenantId: scope.tenantId, organizationId: scope.decryptionOrganizationId },\n )\n const byId = new Map(decrypted.map((plot) => [plot.id, plot]))\n for (const item of items) {\n if (!item || typeof item !== 'object') continue\n const record = item as Record<string, unknown>\n const id = asStringOrNull(record.id)\n const plot = id ? byId.get(id) : null\n if (!plot) continue\n record.geometry = plot.geometry ?? null\n record.producerName = plot.producerName ?? null\n record.description = plot.description ?? null\n }\n },\n },\n})\n\nexport const GET = crud.GET\nexport const POST = crud.POST\nexport const PUT = crud.PUT\nexport const DELETE = crud.DELETE\n\nconst plotListItemSchema = z.object({\n id: z.string().uuid(),\n supplierEntityId: z.string().uuid().nullable().optional(),\n supplierSnapshot: z.object({\n displayName: z.string().nullable().optional(),\n }).nullable().optional(),\n name: z.string().nullable().optional(),\n externalId: z.string().nullable().optional(),\n originCountry: z.string().nullable().optional(),\n plotType: z.enum(EUDR_PLOT_TYPES).nullable().optional(),\n areaHa: z.union([z.string(), z.number()]).nullable().optional(),\n geometry: z.unknown().nullable().optional().describe(\n 'Present only on detail reads requested with id or ids; omitted from bare paginated list reads.',\n ),\n validationWarnings: z.array(z.string()),\n producerName: z.string().nullable().optional(),\n isActive: z.boolean().nullable().optional(),\n createdAt: z.string().nullable().optional(),\n updatedAt: z.string().nullable().optional(),\n})\n\nexport const openApi = createEudrCrudOpenApi({\n resourceName: 'Plot',\n querySchema: listSchema,\n listResponseSchema: createPagedListResponseSchema(plotListItemSchema),\n create: {\n schema: plotCreateSchema,\n description: 'Creates an EUDR supplier plot for the scoped organization.',\n },\n update: {\n schema: plotUpdateSchema,\n responseSchema: defaultOkResponseSchema,\n description: 'Updates an EUDR supplier plot.',\n },\n del: {\n schema: z.object({ id: z.string().uuid() }),\n responseSchema: defaultOkResponseSchema,\n description: 'Deletes an EUDR supplier plot by id. Request body or query may provide the identifier.',\n },\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-mercato/core",
|
|
3
|
-
"version": "0.6.8-develop.
|
|
3
|
+
"version": "0.6.8-develop.7051.1.2e20648fd5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -252,16 +252,16 @@
|
|
|
252
252
|
"zod": "^4.4.3"
|
|
253
253
|
},
|
|
254
254
|
"peerDependencies": {
|
|
255
|
-
"@open-mercato/ai-assistant": "0.6.8-develop.
|
|
256
|
-
"@open-mercato/shared": "0.6.8-develop.
|
|
257
|
-
"@open-mercato/ui": "0.6.8-develop.
|
|
255
|
+
"@open-mercato/ai-assistant": "0.6.8-develop.7051.1.2e20648fd5",
|
|
256
|
+
"@open-mercato/shared": "0.6.8-develop.7051.1.2e20648fd5",
|
|
257
|
+
"@open-mercato/ui": "0.6.8-develop.7051.1.2e20648fd5",
|
|
258
258
|
"react": "^19.0.0",
|
|
259
259
|
"react-dom": "^19.0.0"
|
|
260
260
|
},
|
|
261
261
|
"devDependencies": {
|
|
262
|
-
"@open-mercato/ai-assistant": "0.6.8-develop.
|
|
263
|
-
"@open-mercato/shared": "0.6.8-develop.
|
|
264
|
-
"@open-mercato/ui": "0.6.8-develop.
|
|
262
|
+
"@open-mercato/ai-assistant": "0.6.8-develop.7051.1.2e20648fd5",
|
|
263
|
+
"@open-mercato/shared": "0.6.8-develop.7051.1.2e20648fd5",
|
|
264
|
+
"@open-mercato/ui": "0.6.8-develop.7051.1.2e20648fd5",
|
|
265
265
|
"@testing-library/dom": "^10.4.1",
|
|
266
266
|
"@testing-library/jest-dom": "^7.0.0",
|
|
267
267
|
"@testing-library/react": "^16.3.1",
|
|
@@ -159,6 +159,10 @@ const crud = makeCrudRoute({
|
|
|
159
159
|
name: 'name',
|
|
160
160
|
area_ha: 'area_ha',
|
|
161
161
|
areaHa: 'area_ha',
|
|
162
|
+
origin_country: 'origin_country',
|
|
163
|
+
originCountry: 'origin_country',
|
|
164
|
+
plot_type: 'plot_type',
|
|
165
|
+
plotType: 'plot_type',
|
|
162
166
|
},
|
|
163
167
|
buildFilters,
|
|
164
168
|
transformItem: transformPlotItem,
|