@open-mercato/core 0.4.2-canary-19703ca707 → 0.4.2-canary-470129ce32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
- package/dist/modules/directory/api/get/tenants/lookup.js +2 -0
- package/dist/modules/directory/api/get/tenants/lookup.js.map +2 -2
- package/dist/modules/notifications/migrations/Migration20260129082610.js +13 -0
- package/dist/modules/notifications/migrations/Migration20260129082610.js.map +7 -0
- package/dist/modules/query_index/cli.js +63 -7
- package/dist/modules/query_index/cli.js.map +2 -2
- package/package.json +2 -2
- package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
- package/src/modules/directory/api/get/tenants/lookup.ts +2 -0
- package/src/modules/notifications/migrations/.snapshot-open-mercato.json +36 -0
- package/src/modules/notifications/migrations/Migration20260129082610.ts +13 -0
- package/src/modules/query_index/cli.ts +82 -13
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateCustomerTodoSettings } from "./config.js";
|
|
3
|
+
const CustomerTodosWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "customers.dashboard.todos",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/customers/widgets/dashboard/customer-todos/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateCustomerTodoSettings, type CustomerTodoWidgetSettings } from './config'\nconst CustomerTodosWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerTodoWidgetSettings> = {\n metadata: {\n id: 'customers.dashboard.todos',\n title: 'Customer Todos',\n description: 'Review the latest tasks linked to customers and jump directly to their records.',\n features: ['dashboards.view', 'customers.widgets.todos'],\n defaultSize: 'md',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'activities'],\n category: 'customers',\n icon: 'check-square',\n supportsRefresh: true,\n },\n Widget: CustomerTodosWidget,\n hydrateSettings: hydrateCustomerTodoSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,mCAAoE;AAC/F,MAAM,sBAAsB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE/E,MAAM,SAA4D;AAAA,EAChE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,yBAAyB;AAAA,IACvD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,YAAY;AAAA,IAChC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,EACrB;AACF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateNewCustomersSettings } from "./config.js";
|
|
3
|
+
const CustomerNewCustomersWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "customers.dashboard.newCustomers",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/customers/widgets/dashboard/new-customers/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateNewCustomersSettings, type CustomerNewCustomersSettings } from './config'\nconst CustomerNewCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerNewCustomersSettings> = {\n metadata: {\n id: 'customers.dashboard.newCustomers',\n title: 'New Customers',\n description: 'Track the most recently added customers to follow up quickly.',\n features: ['dashboards.view', 'customers.widgets.new-customers'],\n defaultSize: 'sm',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers'],\n category: 'customers',\n icon: 'user-plus',\n supportsRefresh: true,\n },\n Widget: CustomerNewCustomersWidget,\n hydrateSettings: hydrateNewCustomersSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n kind: settings.kind,\n }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,mCAAsE;AACjG,MAAM,6BAA6B,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEtF,MAAM,SAA8D;AAAA,EAClE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,iCAAiC;AAAA,IAC/D,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,WAAW;AAAA,IAClB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,EACjB;AACF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateNewDealsSettings } from "./config.js";
|
|
3
|
+
const CustomerNewDealsWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "customers.dashboard.newDeals",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/customers/widgets/dashboard/new-deals/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateNewDealsSettings, type CustomerNewDealsSettings } from './config'\nconst CustomerNewDealsWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerNewDealsSettings> = {\n metadata: {\n id: 'customers.dashboard.newDeals',\n title: 'New Deals',\n description: 'Track the most recently created customer deals to follow up quickly.',\n features: ['dashboards.view', 'customers.widgets.new-deals'],\n defaultSize: 'sm',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'deals'],\n category: 'customers',\n icon: 'handshake',\n supportsRefresh: true,\n },\n Widget: CustomerNewDealsWidget,\n hydrateSettings: hydrateNewDealsSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,+BAA8D;AACzF,MAAM,yBAAyB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAElF,MAAM,SAA0D;AAAA,EAC9D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,6BAA6B;AAAA,IAC3D,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,OAAO;AAAA,IAC3B,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,EACrB;AACF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import {
|
|
3
3
|
DEFAULT_SETTINGS,
|
|
4
4
|
hydrateNextInteractionsSettings
|
|
5
5
|
} from "./config.js";
|
|
6
|
+
const CustomerNextInteractionsWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
6
7
|
const widget = {
|
|
7
8
|
metadata: {
|
|
8
9
|
id: "customers.dashboard.nextInteractions",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/customers/widgets/dashboard/next-interactions/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport {\n DEFAULT_SETTINGS,\n hydrateNextInteractionsSettings,\n type CustomerNextInteractionsSettings,\n} from './config'\nconst CustomerNextInteractionsWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<CustomerNextInteractionsSettings> = {\n metadata: {\n id: 'customers.dashboard.nextInteractions',\n title: 'Next Customer Interactions',\n description: 'See the customers with the next interactions scheduled to stay proactive.',\n features: ['dashboards.view', 'customers.widgets.next-interactions'],\n defaultSize: 'md',\n defaultEnabled: true,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['customers', 'activities'],\n category: 'customers',\n icon: 'calendar',\n supportsRefresh: true,\n },\n Widget: CustomerNextInteractionsWidget,\n hydrateSettings: hydrateNextInteractionsSettings,\n dehydrateSettings: (settings) => ({\n pageSize: settings.pageSize,\n includePast: settings.includePast,\n }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,MAAM,iCAAiC,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE1F,MAAM,SAAkE;AAAA,EACtE,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,mBAAmB,qCAAqC;AAAA,IACnE,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,YAAY;AAAA,IAChC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,mBAAmB,CAAC,cAAc;AAAA,IAChC,UAAU,SAAS;AAAA,IACnB,aAAa,SAAS;AAAA,EACxB;AACF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const AovKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.aovKpi",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type AovKpiSettings } from './config'\nconst AovKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<AovKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.aovKpi',\n title: 'Average Order Value',\n description: 'Average order value with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'trending-up',\n supportsRefresh: true,\n },\n Widget: AovKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAA4C;AACvE,MAAM,eAAe,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAExE,MAAM,SAAgD;AAAA,EACpD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const NewCustomersKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.newCustomersKpi",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type NewCustomersKpiSettings } from './config'\nconst NewCustomersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<NewCustomersKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.newCustomersKpi',\n title: 'Customer Growth',\n description: 'New customer count with period comparison',\n features: ['analytics.view', 'customers.people.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'customers', 'kpi'],\n category: 'analytics',\n icon: 'user-plus',\n supportsRefresh: true,\n },\n Widget: NewCustomersKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAqD;AAChF,MAAM,wBAAwB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEjF,MAAM,SAAyD;AAAA,EAC7D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,uBAAuB;AAAA,IACpD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,aAAa,KAAK;AAAA,IACtC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const OrdersByStatusWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.ordersByStatus",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type OrdersByStatusSettings } from './config'\nconst OrdersByStatusWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<OrdersByStatusSettings> = {\n metadata: {\n id: 'dashboards.analytics.ordersByStatus',\n title: 'Orders by Status',\n description: 'Distribution of orders by status',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'chart'],\n category: 'analytics',\n icon: 'pie-chart',\n supportsRefresh: true,\n },\n Widget: OrdersByStatusWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, variant: s.variant }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAoD;AAC/E,MAAM,uBAAuB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEhF,MAAM,SAAwD;AAAA,EAC5D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,OAAO;AAAA,IACpC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,SAAS,EAAE,QAAQ;AAC1E;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const OrdersKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.ordersKpi",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type OrdersKpiSettings } from './config'\nconst OrdersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<OrdersKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.ordersKpi',\n title: 'Orders',\n description: 'Total order count with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'shopping-cart',\n supportsRefresh: true,\n },\n Widget: OrdersKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAA+C;AAC1E,MAAM,kBAAkB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE3E,MAAM,SAAmD;AAAA,EACvD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const PipelineSummaryWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.pipelineSummary",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type PipelineSummarySettings } from './config'\nconst PipelineSummaryWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<PipelineSummarySettings> = {\n metadata: {\n id: 'dashboards.analytics.pipelineSummary',\n title: 'Pipeline Summary',\n description: 'Deal value by pipeline stage',\n features: ['analytics.view', 'customers.deals.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'customers', 'deals', 'chart'],\n category: 'analytics',\n icon: 'git-branch',\n supportsRefresh: true,\n },\n Widget: PipelineSummaryWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAqD;AAChF,MAAM,wBAAwB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAEjF,MAAM,SAAyD;AAAA,EAC7D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,sBAAsB;AAAA,IACnD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,aAAa,SAAS,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU;AACtD;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const RevenueKpiWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.revenueKpi",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type RevenueKpiSettings } from './config'\nconst RevenueKpiWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<RevenueKpiSettings> = {\n metadata: {\n id: 'dashboards.analytics.revenueKpi',\n title: 'Revenue',\n description: 'Total revenue with period comparison',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'sm',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'kpi'],\n category: 'analytics',\n icon: 'dollar-sign',\n supportsRefresh: true,\n },\n Widget: RevenueKpiWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, showComparison: s.showComparison }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAgD;AAC3E,MAAM,mBAAmB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE5E,MAAM,SAAoD;AAAA,EACxD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,KAAK;AAAA,IAClC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,gBAAgB,EAAE,eAAe;AACxF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const RevenueTrendWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.revenueTrend",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type RevenueTrendSettings } from './config'\nconst RevenueTrendWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<RevenueTrendSettings> = {\n metadata: {\n id: 'dashboards.analytics.revenueTrend',\n title: 'Revenue Trend',\n description: 'Revenue over time with customizable granularity',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'lg',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'chart'],\n category: 'analytics',\n icon: 'line-chart',\n supportsRefresh: true,\n },\n Widget: RevenueTrendWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, granularity: s.granularity, showArea: s.showArea }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAkD;AAC7E,MAAM,qBAAqB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE9E,MAAM,SAAsD;AAAA,EAC1D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,OAAO;AAAA,IACpC,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,aAAa,EAAE,aAAa,UAAU,EAAE,SAAS;AACxG;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const SalesByRegionWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.salesByRegion",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type SalesByRegionSettings } from './config'\nconst SalesByRegionWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<SalesByRegionSettings> = {\n metadata: {\n id: 'dashboards.analytics.salesByRegion',\n title: 'Sales by Region',\n description: 'Revenue distribution by shipping region',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'geography', 'chart'],\n category: 'analytics',\n icon: 'map-pin',\n supportsRefresh: true,\n },\n Widget: SalesByRegionWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAmD;AAC9E,MAAM,sBAAsB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE/E,MAAM,SAAuD;AAAA,EAC3D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,aAAa,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,MAAM;AACtE;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const TopCustomersWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.topCustomers",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/top-customers/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type TopCustomersSettings } from './config'\nconst TopCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<TopCustomersSettings> = {\n metadata: {\n id: 'dashboards.analytics.topCustomers',\n title: 'Top Customers',\n description: 'Top customers by revenue',\n features: ['analytics.view', 'sales.orders.view', 'customers.people.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'customers', 'table'],\n category: 'analytics',\n icon: 'users',\n supportsRefresh: true,\n },\n Widget: TopCustomersWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAkD;AAC7E,MAAM,qBAAqB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE9E,MAAM,SAAsD;AAAA,EAC1D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,qBAAqB,uBAAuB;AAAA,IACzE,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,aAAa,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,MAAM;AACtE;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { lazyDashboardWidget } from "@open-mercato/shared/modules/dashboard/widgets";
|
|
2
2
|
import { DEFAULT_SETTINGS, hydrateSettings } from "./config.js";
|
|
3
|
+
const TopProductsWidget = lazyDashboardWidget(() => import("./widget.client.js"));
|
|
3
4
|
const widget = {
|
|
4
5
|
metadata: {
|
|
5
6
|
id: "dashboards.analytics.topProducts",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/dashboards/widgets/dashboard/top-products/widget.ts"],
|
|
4
|
-
"sourcesContent": ["import type
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'\nimport { DEFAULT_SETTINGS, hydrateSettings, type TopProductsSettings } from './config'\nconst TopProductsWidget = lazyDashboardWidget(() => import('./widget.client'))\n\nconst widget: DashboardWidgetModule<TopProductsSettings> = {\n metadata: {\n id: 'dashboards.analytics.topProducts',\n title: 'Top Products',\n description: 'Top-selling products by revenue',\n features: ['analytics.view', 'sales.orders.view'],\n defaultSize: 'md',\n defaultEnabled: false,\n defaultSettings: DEFAULT_SETTINGS,\n tags: ['analytics', 'sales', 'products', 'chart'],\n category: 'analytics',\n icon: 'bar-chart-2',\n supportsRefresh: true,\n },\n Widget: TopProductsWidget,\n hydrateSettings,\n dehydrateSettings: (s) => ({ dateRange: s.dateRange, limit: s.limit, layout: s.layout }),\n}\n\nexport default widget\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,2BAAuD;AAChE,SAAS,kBAAkB,uBAAiD;AAC5E,MAAM,oBAAoB,oBAAoB,MAAM,OAAO,iBAAiB,CAAC;AAE7E,MAAM,SAAqD;AAAA,EACzD,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU,CAAC,kBAAkB,mBAAmB;AAAA,IAChD,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,MAAM,CAAC,aAAa,SAAS,YAAY,OAAO;AAAA,IAChD,UAAU;AAAA,IACV,MAAM;AAAA,IACN,iBAAiB;AAAA,EACnB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,OAAO,EAAE,OAAO,QAAQ,EAAE,OAAO;AACxF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/modules/directory/api/get/tenants/lookup.ts"],
|
|
4
|
-
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { z } from 'zod'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { Tenant } from '@open-mercato/core/modules/directory/data/entities'\nimport type { OpenApiMethodDoc, OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\n\nexport const metadata = {\n GET: {\n requireAuth: false,\n },\n}\n\nconst tenantLookupQuerySchema = z.object({\n tenantId: z.string().uuid(),\n})\n\nexport async function GET(req: Request) {\n const url = new URL(req.url)\n const tenantId = url.searchParams.get('tenantId') || url.searchParams.get('tenant') || ''\n const parsed = tenantLookupQuerySchema.safeParse({ tenantId })\n if (!parsed.success) {\n return NextResponse.json({ ok: false, error: 'Invalid tenant id.' }, { status: 400 })\n }\n\n const container = await createRequestContainer()\n const em = (container.resolve('em') as EntityManager)\n const tenant = await em.findOne(Tenant, { id: parsed.data.tenantId, deletedAt: null })\n if (!tenant) {\n return NextResponse.json({ ok: false, error: 'Tenant not found.' }, { status: 404 })\n }\n return NextResponse.json({\n ok: true,\n tenant: { id: String(tenant.id), name: tenant.name },\n })\n}\n\nconst lookupTag = 'Directory'\n\nconst tenantLookupSuccessSchema = z.object({\n ok: z.literal(true),\n tenant: z.object({\n id: z.string().uuid(),\n name: z.string(),\n }),\n})\n\nconst tenantLookupErrorSchema = z.object({\n ok: z.literal(false),\n error: z.string(),\n})\n\nconst tenantLookupDoc: OpenApiMethodDoc = {\n summary: 'Public tenant lookup',\n description: 'Resolves tenant metadata for login/activation flows.',\n tags: [lookupTag],\n query: tenantLookupQuerySchema,\n responses: [\n { status: 200, description: 'Tenant resolved.', schema: tenantLookupSuccessSchema },\n ],\n errors: [\n { status: 400, description: 'Invalid tenant id', schema: tenantLookupErrorSchema },\n { status: 404, description: 'Tenant not found', schema: tenantLookupErrorSchema },\n ],\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: lookupTag,\n summary: 'Public tenant lookup',\n methods: {\n GET: tenantLookupDoc,\n },\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,SAAS;AAElB,SAAS,8BAA8B;AACvC,SAAS,cAAc;AAGhB,MAAM,WAAW;AAAA,EACtB,KAAK;AAAA,IACH,aAAa;AAAA,EACf;AACF;AAEA,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,UAAU,EAAE,OAAO,EAAE,KAAK;AAC5B,CAAC;AAED,eAAsB,IAAI,KAAc;AACtC,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,QAAM,WAAW,IAAI,aAAa,IAAI,UAAU,KAAK,IAAI,aAAa,IAAI,QAAQ,KAAK;AACvF,QAAM,SAAS,wBAAwB,UAAU,EAAE,SAAS,CAAC;AAC7D,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,qBAAqB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtF;AAEA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,KAAM,UAAU,QAAQ,IAAI;AAClC,QAAM,SAAS,MAAM,GAAG,QAAQ,QAAQ,EAAE,IAAI,OAAO,KAAK,UAAU,WAAW,KAAK,CAAC;AACrF,MAAI,CAAC,QAAQ;AACX,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,oBAAoB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AACA,SAAO,aAAa,KAAK;AAAA,IACvB,IAAI;AAAA,IACJ,QAAQ,EAAE,IAAI,OAAO,OAAO,EAAE,GAAG,MAAM,OAAO,KAAK;AAAA,EACrD,CAAC;AACH;AAEA,MAAM,YAAY;AAElB,MAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,IAAI,EAAE,QAAQ,IAAI;AAAA,EAClB,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,IACpB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAED,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,IAAI,EAAE,QAAQ,KAAK;AAAA,EACnB,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,MAAM,kBAAoC;AAAA,EACxC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,CAAC,SAAS;AAAA,EAChB,OAAO;AAAA,EACP,WAAW;AAAA,IACT,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,0BAA0B;AAAA,EACpF;AAAA,EACA,QAAQ;AAAA,IACN,EAAE,QAAQ,KAAK,aAAa,qBAAqB,QAAQ,wBAAwB;AAAA,IACjF,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,wBAAwB;AAAA,EAClF;AACF;AAEO,MAAM,UAA2B;AAAA,EACtC,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,EACP;AACF;",
|
|
4
|
+
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { z } from 'zod'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { Tenant } from '@open-mercato/core/modules/directory/data/entities'\nimport type { OpenApiMethodDoc, OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\n\nexport const metadata = {\n GET: {\n requireAuth: false,\n },\n}\n\nconst tenantLookupQuerySchema = z.object({\n tenantId: z.string().uuid(),\n})\n\nexport async function GET(req: Request) {\n const url = new URL(req.url)\n const tenantId = url.searchParams.get('tenantId') || url.searchParams.get('tenant') || ''\n const parsed = tenantLookupQuerySchema.safeParse({ tenantId })\n if (!parsed.success) {\n return NextResponse.json({ ok: false, error: 'Invalid tenant id.' }, { status: 400 })\n }\n\n const container = await createRequestContainer()\n const em = (container.resolve('em') as EntityManager)\n const tenant = await em.findOne(Tenant, { id: parsed.data.tenantId, deletedAt: null })\n if (!tenant) {\n return NextResponse.json({ ok: false, error: 'Tenant not found.' }, { status: 404 })\n }\n return NextResponse.json({\n ok: true,\n tenant: { id: String(tenant.id), name: tenant.name },\n })\n}\n\nconst lookupTag = 'Directory'\n\nconst tenantLookupSuccessSchema = z.object({\n ok: z.literal(true),\n tenant: z.object({\n id: z.string().uuid(),\n name: z.string(),\n }),\n})\n\nconst tenantLookupErrorSchema = z.object({\n ok: z.literal(false),\n error: z.string(),\n})\n\nconst tenantLookupDoc: OpenApiMethodDoc = {\n summary: 'Public tenant lookup',\n description: 'Resolves tenant metadata for login/activation flows.',\n tags: [lookupTag],\n query: tenantLookupQuerySchema,\n responses: [\n { status: 200, description: 'Tenant resolved.', schema: tenantLookupSuccessSchema },\n ],\n errors: [\n { status: 400, description: 'Invalid tenant id', schema: tenantLookupErrorSchema },\n { status: 404, description: 'Tenant not found', schema: tenantLookupErrorSchema },\n ],\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: lookupTag,\n summary: 'Public tenant lookup',\n methods: {\n GET: tenantLookupDoc,\n },\n}\n\nexport default GET\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,SAAS;AAElB,SAAS,8BAA8B;AACvC,SAAS,cAAc;AAGhB,MAAM,WAAW;AAAA,EACtB,KAAK;AAAA,IACH,aAAa;AAAA,EACf;AACF;AAEA,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,UAAU,EAAE,OAAO,EAAE,KAAK;AAC5B,CAAC;AAED,eAAsB,IAAI,KAAc;AACtC,QAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAC3B,QAAM,WAAW,IAAI,aAAa,IAAI,UAAU,KAAK,IAAI,aAAa,IAAI,QAAQ,KAAK;AACvF,QAAM,SAAS,wBAAwB,UAAU,EAAE,SAAS,CAAC;AAC7D,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,qBAAqB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtF;AAEA,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,KAAM,UAAU,QAAQ,IAAI;AAClC,QAAM,SAAS,MAAM,GAAG,QAAQ,QAAQ,EAAE,IAAI,OAAO,KAAK,UAAU,WAAW,KAAK,CAAC;AACrF,MAAI,CAAC,QAAQ;AACX,WAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,oBAAoB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AACA,SAAO,aAAa,KAAK;AAAA,IACvB,IAAI;AAAA,IACJ,QAAQ,EAAE,IAAI,OAAO,OAAO,EAAE,GAAG,MAAM,OAAO,KAAK;AAAA,EACrD,CAAC;AACH;AAEA,MAAM,YAAY;AAElB,MAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,IAAI,EAAE,QAAQ,IAAI;AAAA,EAClB,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,IACpB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AACH,CAAC;AAED,MAAM,0BAA0B,EAAE,OAAO;AAAA,EACvC,IAAI,EAAE,QAAQ,KAAK;AAAA,EACnB,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,MAAM,kBAAoC;AAAA,EACxC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM,CAAC,SAAS;AAAA,EAChB,OAAO;AAAA,EACP,WAAW;AAAA,IACT,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,0BAA0B;AAAA,EACpF;AAAA,EACA,QAAQ;AAAA,IACN,EAAE,QAAQ,KAAK,aAAa,qBAAqB,QAAQ,wBAAwB;AAAA,IACjF,EAAE,QAAQ,KAAK,aAAa,oBAAoB,QAAQ,wBAAwB;AAAA,EAClF;AACF;AAEO,MAAM,UAA2B;AAAA,EACtC,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,EACP;AACF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Migration } from "@mikro-orm/migrations";
|
|
2
|
+
class Migration20260129082610 extends Migration {
|
|
3
|
+
async up() {
|
|
4
|
+
this.addSql(`alter table "notifications" add column if not exists "title_key" text null, add column if not exists "body_key" text null, add column if not exists "title_variables" jsonb null, add column if not exists "body_variables" jsonb null;`);
|
|
5
|
+
}
|
|
6
|
+
async down() {
|
|
7
|
+
this.addSql(`alter table "notifications" drop column if exists "title_key", drop column if exists "body_key", drop column if exists "title_variables", drop column if exists "body_variables";`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
Migration20260129082610
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=Migration20260129082610.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/notifications/migrations/Migration20260129082610.ts"],
|
|
4
|
+
"sourcesContent": ["import { Migration } from '@mikro-orm/migrations';\n\nexport class Migration20260129082610 extends Migration {\n\n override async up(): Promise<void> {\n this.addSql(`alter table \"notifications\" add column if not exists \"title_key\" text null, add column if not exists \"body_key\" text null, add column if not exists \"title_variables\" jsonb null, add column if not exists \"body_variables\" jsonb null;`);\n }\n\n override async down(): Promise<void> {\n this.addSql(`alter table \"notifications\" drop column if exists \"title_key\", drop column if exists \"body_key\", drop column if exists \"title_variables\", drop column if exists \"body_variables\";`);\n }\n\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,iBAAiB;AAEnB,MAAM,gCAAgC,UAAU;AAAA,EAErD,MAAe,KAAoB;AACjC,SAAK,OAAO,yOAAyO;AAAA,EACvP;AAAA,EAEA,MAAe,OAAsB;AACnC,SAAK,OAAO,mLAAmL;AAAA,EACjM;AAEF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -10,6 +10,43 @@ import { upsertIndexBatch } from "./lib/batch.js";
|
|
|
10
10
|
import { reindexEntity, DEFAULT_REINDEX_PARTITIONS } from "./lib/reindexer.js";
|
|
11
11
|
import { purgeIndexScope } from "./lib/purge.js";
|
|
12
12
|
import { flattenSystemEntityIds } from "@open-mercato/shared/lib/entities/system-entities";
|
|
13
|
+
function isIndexerVerbose() {
|
|
14
|
+
const parsed = parseBooleanToken(process.env.OM_INDEXER_VERBOSE ?? "");
|
|
15
|
+
return parsed === true;
|
|
16
|
+
}
|
|
17
|
+
function createGroupedProgress(label, partitionTargets) {
|
|
18
|
+
const totals = /* @__PURE__ */ new Map();
|
|
19
|
+
const processed = /* @__PURE__ */ new Map();
|
|
20
|
+
let bar = null;
|
|
21
|
+
const getTotals = () => {
|
|
22
|
+
let total = 0;
|
|
23
|
+
let done = 0;
|
|
24
|
+
for (const value of totals.values()) total += value;
|
|
25
|
+
for (const value of processed.values()) done += value;
|
|
26
|
+
return { total, done };
|
|
27
|
+
};
|
|
28
|
+
const tryInitBar = () => {
|
|
29
|
+
if (bar) return;
|
|
30
|
+
if (totals.size < partitionTargets.length) return;
|
|
31
|
+
const { total } = getTotals();
|
|
32
|
+
if (total <= 0) return;
|
|
33
|
+
bar = createProgressBar(label, total);
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
onProgress(partition, info) {
|
|
37
|
+
processed.set(partition, info.processed);
|
|
38
|
+
if (!totals.has(partition)) totals.set(partition, info.total);
|
|
39
|
+
tryInitBar();
|
|
40
|
+
if (!bar) return;
|
|
41
|
+
const { done } = getTotals();
|
|
42
|
+
bar.update(done);
|
|
43
|
+
},
|
|
44
|
+
complete() {
|
|
45
|
+
if (bar) bar.complete();
|
|
46
|
+
},
|
|
47
|
+
getTotals
|
|
48
|
+
};
|
|
49
|
+
}
|
|
13
50
|
function parseArgs(rest) {
|
|
14
51
|
const args = {};
|
|
15
52
|
for (let i = 0; i < rest.length; i += 1) {
|
|
@@ -444,8 +481,11 @@ const reindex = {
|
|
|
444
481
|
await purgeIndexScope(baseEm, { entityType: entity, organizationId: orgId, tenantId });
|
|
445
482
|
}
|
|
446
483
|
console.log(`Reindexing ${entity}${force ? " (forced)" : ""} in ${partitionTargets.length} partition(s)...`);
|
|
447
|
-
const
|
|
484
|
+
const verbose = isIndexerVerbose();
|
|
485
|
+
const progressState = verbose ? /* @__PURE__ */ new Map() : null;
|
|
486
|
+
const groupedProgress = !verbose && partitionTargets.length > 1 ? createGroupedProgress(`Reindexing ${entity}`, partitionTargets) : null;
|
|
448
487
|
const renderProgress = (part, entityId, info) => {
|
|
488
|
+
if (!progressState) return;
|
|
449
489
|
const state = progressState.get(part) ?? { last: 0 };
|
|
450
490
|
const now = Date.now();
|
|
451
491
|
if (now - state.last < 1e3 && info.processed < info.total) return;
|
|
@@ -461,7 +501,7 @@ const reindex = {
|
|
|
461
501
|
const label = partitionTargets.length > 1 ? ` [partition ${part + 1}/${partitionCount}]` : "";
|
|
462
502
|
if (partitionTargets.length === 1) {
|
|
463
503
|
console.log(` -> processing${label}`);
|
|
464
|
-
} else if (idx === 0) {
|
|
504
|
+
} else if (verbose && idx === 0) {
|
|
465
505
|
console.log(` -> processing partitions in parallel (count=${partitionTargets.length})`);
|
|
466
506
|
}
|
|
467
507
|
const partitionContainer = await createRequestContainer();
|
|
@@ -489,9 +529,14 @@ const reindex = {
|
|
|
489
529
|
onProgress(info) {
|
|
490
530
|
if (useBar) {
|
|
491
531
|
if (info.total > 0 && !progressBar) {
|
|
492
|
-
progressBar = createProgressBar(
|
|
532
|
+
progressBar = createProgressBar(
|
|
533
|
+
`Reindexing ${entity}${label}`,
|
|
534
|
+
info.total
|
|
535
|
+
);
|
|
493
536
|
}
|
|
494
537
|
progressBar?.update(info.processed);
|
|
538
|
+
} else if (groupedProgress) {
|
|
539
|
+
groupedProgress.onProgress(part, info);
|
|
495
540
|
} else {
|
|
496
541
|
renderProgress(part, entity, info);
|
|
497
542
|
}
|
|
@@ -500,7 +545,9 @@ const reindex = {
|
|
|
500
545
|
if (progressBar) {
|
|
501
546
|
progressBar.complete();
|
|
502
547
|
}
|
|
503
|
-
if (!useBar) {
|
|
548
|
+
if (!useBar && groupedProgress) {
|
|
549
|
+
groupedProgress.onProgress(part, { processed: partitionStats.processed, total: partitionStats.total });
|
|
550
|
+
} else if (!useBar) {
|
|
504
551
|
renderProgress(part, entity, { processed: partitionStats.processed, total: partitionStats.total });
|
|
505
552
|
} else {
|
|
506
553
|
console.log(
|
|
@@ -515,6 +562,7 @@ const reindex = {
|
|
|
515
562
|
}
|
|
516
563
|
})
|
|
517
564
|
);
|
|
565
|
+
groupedProgress?.complete();
|
|
518
566
|
const totalProcessed = stats.reduce((acc, value) => acc + value, 0);
|
|
519
567
|
console.log(`Finished ${entity}: processed ${totalProcessed} row(s) across ${partitionTargets.length} partition(s)`);
|
|
520
568
|
await recordIndexerLog(
|
|
@@ -569,8 +617,11 @@ const reindex = {
|
|
|
569
617
|
console.log(
|
|
570
618
|
`[${idx + 1}/${entityIds.length}] Reindexing ${id}${force ? " (forced)" : ""} in ${partitionTargets.length} partition(s)...`
|
|
571
619
|
);
|
|
572
|
-
const
|
|
620
|
+
const verbose = isIndexerVerbose();
|
|
621
|
+
const progressState = verbose ? /* @__PURE__ */ new Map() : null;
|
|
622
|
+
const groupedProgress = !verbose && partitionTargets.length > 1 ? createGroupedProgress(`Reindexing ${id}`, partitionTargets) : null;
|
|
573
623
|
const renderProgress = (part, entityId, info) => {
|
|
624
|
+
if (!progressState) return;
|
|
574
625
|
const state = progressState.get(part) ?? { last: 0 };
|
|
575
626
|
const now = Date.now();
|
|
576
627
|
if (now - state.last < 1e3 && info.processed < info.total) return;
|
|
@@ -586,7 +637,7 @@ const reindex = {
|
|
|
586
637
|
const label = partitionTargets.length > 1 ? ` [partition ${part + 1}/${partitionCount}]` : "";
|
|
587
638
|
if (partitionTargets.length === 1) {
|
|
588
639
|
console.log(` -> processing${label}`);
|
|
589
|
-
} else if (partitionIdx === 0) {
|
|
640
|
+
} else if (verbose && partitionIdx === 0) {
|
|
590
641
|
console.log(` -> processing partitions in parallel (count=${partitionTargets.length})`);
|
|
591
642
|
}
|
|
592
643
|
const partitionContainer = await createRequestContainer();
|
|
@@ -617,6 +668,8 @@ const reindex = {
|
|
|
617
668
|
progressBar = createProgressBar(`Reindexing ${id}${label}`, info.total);
|
|
618
669
|
}
|
|
619
670
|
progressBar?.update(info.processed);
|
|
671
|
+
} else if (groupedProgress) {
|
|
672
|
+
groupedProgress.onProgress(part, info);
|
|
620
673
|
} else {
|
|
621
674
|
renderProgress(part, id, info);
|
|
622
675
|
}
|
|
@@ -625,7 +678,9 @@ const reindex = {
|
|
|
625
678
|
if (progressBar) {
|
|
626
679
|
progressBar.complete();
|
|
627
680
|
}
|
|
628
|
-
if (!useBar) {
|
|
681
|
+
if (!useBar && groupedProgress) {
|
|
682
|
+
groupedProgress.onProgress(part, { processed: result.processed, total: result.total });
|
|
683
|
+
} else if (!useBar) {
|
|
629
684
|
renderProgress(part, id, { processed: result.processed, total: result.total });
|
|
630
685
|
} else {
|
|
631
686
|
console.log(
|
|
@@ -640,6 +695,7 @@ const reindex = {
|
|
|
640
695
|
}
|
|
641
696
|
})
|
|
642
697
|
);
|
|
698
|
+
groupedProgress?.complete();
|
|
643
699
|
const totalProcessed = partitionResults.reduce((acc, value) => acc + value, 0);
|
|
644
700
|
console.log(` -> ${id} complete: processed ${totalProcessed} row(s) across ${partitionTargets.length} partition(s)`);
|
|
645
701
|
await recordIndexerLog(
|