@lssm/example.crm-pipeline 0.0.0-canary-20251213172311 → 0.0.0-canary-20251215231151
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/.turbo/turbo-build.log +26 -23
- package/CHANGELOG.md +8 -8
- package/dist/contracts/index.js +1 -1
- package/dist/entities/index.js +1 -1
- package/dist/events/contact.event.js +1 -0
- package/dist/events/deal.event.js +1 -0
- package/dist/events/index.js +1 -0
- package/dist/events/task.event.js +1 -0
- package/dist/index.js +1 -1
- package/dist/presentations/index.js +1 -1
- package/dist/presentations/pipeline.presentation.js +1 -0
- package/package.json +26 -20
- package/src/contracts/index.ts +1 -1
- package/src/entities/index.ts +23 -41
- package/src/events/contact.event.ts +26 -0
- package/src/{events.ts → events/deal.event.ts} +0 -58
- package/src/events/index.ts +3 -0
- package/src/events/task.event.ts +23 -0
- package/src/example.ts +4 -3
- package/src/index.ts +1 -1
- package/src/presentations/index.ts +2 -38
- package/src/presentations/{pipeline.ts → pipeline.presentation.ts} +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/events.js +0 -1
- package/dist/presentations/pipeline.js +0 -1
- /package/dist/contracts/{deal.js → deal.contracts.js} +0 -0
- /package/dist/{feature.js → crm-pipeline.feature.js} +0 -0
- /package/dist/entities/{company.js → company.entity.js} +0 -0
- /package/dist/entities/{contact.js → contact.entity.js} +0 -0
- /package/dist/entities/{deal.js → deal.entity.js} +0 -0
- /package/dist/entities/{task.js → task.entity.js} +0 -0
- /package/dist/presentations/{dashboard.js → dashboard.presentation.js} +0 -0
- /package/src/contracts/{deal.ts → deal.contracts.ts} +0 -0
- /package/src/{feature.ts → crm-pipeline.feature.ts} +0 -0
- /package/src/entities/{company.ts → company.entity.ts} +0 -0
- /package/src/entities/{contact.ts → contact.entity.ts} +0 -0
- /package/src/entities/{deal.ts → deal.entity.ts} +0 -0
- /package/src/entities/{task.ts → task.entity.ts} +0 -0
- /package/src/presentations/{dashboard.ts → dashboard.presentation.ts} +0 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
$ bun build:bundle && bun build:types
|
|
2
2
|
$ tsdown
|
|
3
|
-
[34mℹ[39m tsdown [2mv0.17.
|
|
3
|
+
[34mℹ[39m tsdown [2mv0.17.4[22m powered by rolldown [2mv1.0.0-beta.53[22m
|
|
4
4
|
[34mℹ[39m config file: [4m/home/runner/work/contractspec/contractspec/packages/examples/crm-pipeline/tsdown.config.js[24m
|
|
5
|
-
[34mℹ[39m entry: [34msrc/
|
|
5
|
+
[34mℹ[39m entry: [34msrc/crm-pipeline.feature.ts, src/example.ts, src/index.ts, src/contracts/deal.contracts.ts, src/contracts/index.ts, src/docs/crm-pipeline.docblock.ts, src/docs/index.ts, src/entities/company.entity.ts, src/entities/contact.entity.ts, src/entities/deal.entity.ts, src/entities/index.ts, src/entities/task.entity.ts, src/events/contact.event.ts, src/events/deal.event.ts, src/events/index.ts, src/events/task.event.ts, src/handlers/deal.handlers.ts, src/handlers/index.ts, src/handlers/mock-data.ts, src/presentations/dashboard.presentation.ts, src/presentations/index.ts, src/presentations/pipeline.presentation.ts[39m
|
|
6
6
|
[34mℹ[39m target: [34mesnext[39m
|
|
7
7
|
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
8
8
|
[34mℹ[39m Build start
|
|
9
|
-
[34mℹ[39m [2mdist/[22m[1mcontracts/deal.js[22m [2m5.38 kB[22m [2m│ gzip: 1.27 kB[22m
|
|
10
|
-
[34mℹ[39m [2mdist/[22m[1mindex.js[22m
|
|
11
|
-
[34mℹ[39m [2mdist/[22m[1mhandlers/mock-data.js[22m
|
|
12
|
-
[34mℹ[39m [2mdist/[22m[1mdocs/crm-pipeline.docblock.js[22m
|
|
13
|
-
[34mℹ[39m [2mdist/[22m[
|
|
14
|
-
[34mℹ[39m [2mdist/[22m[1mentities/
|
|
15
|
-
[34mℹ[39m [2mdist/[22m[
|
|
16
|
-
[34mℹ[39m [2mdist/[22m[1mhandlers/deal.handlers.js[22m
|
|
17
|
-
[34mℹ[39m [2mdist/[22m[1mentities/contact.js[22m
|
|
18
|
-
[34mℹ[39m [2mdist/[22m[1mpresentations/pipeline.js[22m
|
|
19
|
-
[34mℹ[39m [2mdist/[22m[
|
|
20
|
-
[34mℹ[39m [2mdist/[22m[1mentities/company.js[22m
|
|
21
|
-
[34mℹ[39m [2mdist/[22m[1mcontracts/index.js[22m
|
|
22
|
-
[34mℹ[39m [2mdist/[22m[1mentities/index.js[22m
|
|
23
|
-
[34mℹ[39m [2mdist/[22m[1mpresentations/dashboard.js[22m
|
|
24
|
-
[34mℹ[39m [2mdist/[22m[1mhandlers/index.js[22m
|
|
25
|
-
[34mℹ[39m [2mdist/[22m[
|
|
26
|
-
[34mℹ[39m [2mdist/[22m[
|
|
27
|
-
[34mℹ[39m [2mdist/[22m[
|
|
28
|
-
[34mℹ[39m
|
|
29
|
-
[
|
|
9
|
+
[34mℹ[39m [2mdist/[22m[1mcontracts/deal.contracts.js[22m [2m5.38 kB[22m [2m│ gzip: 1.27 kB[22m
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m3.60 kB[22m [2m│ gzip: 1.10 kB[22m
|
|
11
|
+
[34mℹ[39m [2mdist/[22m[1mhandlers/mock-data.js[22m [2m3.36 kB[22m [2m│ gzip: 0.97 kB[22m
|
|
12
|
+
[34mℹ[39m [2mdist/[22m[1mdocs/crm-pipeline.docblock.js[22m [2m3.31 kB[22m [2m│ gzip: 1.36 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22m[1mentities/deal.entity.js[22m [2m2.52 kB[22m [2m│ gzip: 0.87 kB[22m
|
|
14
|
+
[34mℹ[39m [2mdist/[22m[1mentities/task.entity.js[22m [2m2.35 kB[22m [2m│ gzip: 0.81 kB[22m
|
|
15
|
+
[34mℹ[39m [2mdist/[22m[1mevents/deal.event.js[22m [2m2.07 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
16
|
+
[34mℹ[39m [2mdist/[22m[1mhandlers/deal.handlers.js[22m [2m1.85 kB[22m [2m│ gzip: 0.78 kB[22m
|
|
17
|
+
[34mℹ[39m [2mdist/[22m[1mentities/contact.entity.js[22m [2m1.68 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
18
|
+
[34mℹ[39m [2mdist/[22m[1mpresentations/pipeline.presentation.js[22m [2m1.49 kB[22m [2m│ gzip: 0.49 kB[22m
|
|
19
|
+
[34mℹ[39m [2mdist/[22m[1mcrm-pipeline.feature.js[22m [2m1.41 kB[22m [2m│ gzip: 0.44 kB[22m
|
|
20
|
+
[34mℹ[39m [2mdist/[22m[1mentities/company.entity.js[22m [2m1.35 kB[22m [2m│ gzip: 0.59 kB[22m
|
|
21
|
+
[34mℹ[39m [2mdist/[22m[1mcontracts/index.js[22m [2m0.80 kB[22m [2m│ gzip: 0.27 kB[22m
|
|
22
|
+
[34mℹ[39m [2mdist/[22m[1mentities/index.js[22m [2m0.76 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
23
|
+
[34mℹ[39m [2mdist/[22m[1mpresentations/dashboard.presentation.js[22m [2m0.74 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
24
|
+
[34mℹ[39m [2mdist/[22m[1mhandlers/index.js[22m [2m0.60 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
25
|
+
[34mℹ[39m [2mdist/[22m[1mevents/contact.event.js[22m [2m0.59 kB[22m [2m│ gzip: 0.30 kB[22m
|
|
26
|
+
[34mℹ[39m [2mdist/[22m[1mexample.js[22m [2m0.59 kB[22m [2m│ gzip: 0.36 kB[22m
|
|
27
|
+
[34mℹ[39m [2mdist/[22m[1mevents/task.event.js[22m [2m0.58 kB[22m [2m│ gzip: 0.29 kB[22m
|
|
28
|
+
[34mℹ[39m [2mdist/[22m[1mpresentations/index.js[22m [2m0.44 kB[22m [2m│ gzip: 0.17 kB[22m
|
|
29
|
+
[34mℹ[39m [2mdist/[22m[1mevents/index.js[22m [2m0.35 kB[22m [2m│ gzip: 0.17 kB[22m
|
|
30
|
+
[34mℹ[39m [2mdist/[22m[1mdocs/index.js[22m [2m0.04 kB[22m [2m│ gzip: 0.06 kB[22m
|
|
31
|
+
[34mℹ[39m 22 files, total: 35.86 kB
|
|
32
|
+
[32m✔[39m Build complete in [32m57ms[39m
|
|
30
33
|
$ tsc --noEmit
|
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# @lssm/example.crm-pipeline
|
|
2
2
|
|
|
3
|
-
## 0.0.0-canary-
|
|
3
|
+
## 0.0.0-canary-20251215231151
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
7
|
- 3086383: refactor: dependencies upgrade
|
|
8
8
|
- Updated dependencies [3086383]
|
|
9
|
-
- @lssm/lib.contracts@0.0.0-canary-
|
|
10
|
-
- @lssm/lib.schema@0.0.0-canary-
|
|
11
|
-
- @lssm/lib.jobs@0.0.0-canary-
|
|
12
|
-
- @lssm/lib.bus@0.0.0-canary-
|
|
13
|
-
- @lssm/lib.identity-rbac@0.0.0-canary-
|
|
14
|
-
- @lssm/module.audit-trail@0.0.0-canary-
|
|
15
|
-
- @lssm/module.notifications@0.0.0-canary-
|
|
9
|
+
- @lssm/lib.contracts@0.0.0-canary-20251215231151
|
|
10
|
+
- @lssm/lib.schema@0.0.0-canary-20251215231151
|
|
11
|
+
- @lssm/lib.jobs@0.0.0-canary-20251215231151
|
|
12
|
+
- @lssm/lib.bus@0.0.0-canary-20251215231151
|
|
13
|
+
- @lssm/lib.identity-rbac@0.0.0-canary-20251215231151
|
|
14
|
+
- @lssm/module.audit-trail@0.0.0-canary-20251215231151
|
|
15
|
+
- @lssm/module.notifications@0.0.0-canary-20251215231151
|
package/dist/contracts/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CreateDealContract as e,CreateDealInputModel as t,DealLostPayloadModel as n,DealModel as r,DealMovedPayloadModel as i,DealStatusFilterEnum as a,DealWonPayloadModel as o,ListDealsContract as s,ListDealsInputModel as c,ListDealsOutputModel as l,LoseDealContract as u,LoseDealInputModel as d,MoveDealContract as f,MoveDealInputModel as p,WinDealContract as m,WinDealInputModel as h}from"./deal.js";export{e as CreateDealContract,t as CreateDealInputModel,n as DealLostPayloadModel,r as DealModel,i as DealMovedPayloadModel,a as DealStatusFilterEnum,o as DealWonPayloadModel,s as ListDealsContract,c as ListDealsInputModel,l as ListDealsOutputModel,u as LoseDealContract,d as LoseDealInputModel,f as MoveDealContract,p as MoveDealInputModel,m as WinDealContract,h as WinDealInputModel};
|
|
1
|
+
import{CreateDealContract as e,CreateDealInputModel as t,DealLostPayloadModel as n,DealModel as r,DealMovedPayloadModel as i,DealStatusFilterEnum as a,DealWonPayloadModel as o,ListDealsContract as s,ListDealsInputModel as c,ListDealsOutputModel as l,LoseDealContract as u,LoseDealInputModel as d,MoveDealContract as f,MoveDealInputModel as p,WinDealContract as m,WinDealInputModel as h}from"./deal.contracts.js";export{e as CreateDealContract,t as CreateDealInputModel,n as DealLostPayloadModel,r as DealModel,i as DealMovedPayloadModel,a as DealStatusFilterEnum,o as DealWonPayloadModel,s as ListDealsContract,c as ListDealsInputModel,l as ListDealsOutputModel,u as LoseDealContract,d as LoseDealInputModel,f as MoveDealContract,p as MoveDealInputModel,m as WinDealContract,h as WinDealInputModel};
|
package/dist/entities/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{CompanyEntity as e,CompanySizeEnum as t}from"./company.entity.js";import{ContactEntity as n,ContactStatusEnum as r}from"./contact.entity.js";import{DealEntity as i,DealStatusEnum as a,PipelineEntity as o,StageEntity as s}from"./deal.entity.js";import{ActivityEntity as c,TaskEntity as l,TaskPriorityEnum as u,TaskStatusEnum as d,TaskTypeEnum as f}from"./task.entity.js";const p={moduleId:`@lssm/example.crm-pipeline`,entities:[e,n,i,o,s,l,c],enums:[t,r,a,f,u,d]};export{c as ActivityEntity,e as CompanyEntity,t as CompanySizeEnum,n as ContactEntity,r as ContactStatusEnum,i as DealEntity,a as DealStatusEnum,o as PipelineEntity,s as StageEntity,l as TaskEntity,u as TaskPriorityEnum,d as TaskStatusEnum,f as TaskTypeEnum,p as crmPipelineSchemaContribution};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";import{defineEvent as n}from"@lssm/lib.contracts";const r=n({name:`contact.created`,version:1,description:`A new contact has been created.`,payload:t({name:`ContactCreatedPayload`,description:`Payload when a contact is created`,fields:{contactId:{type:e.String_unsecure(),isOptional:!1},email:{type:e.EmailAddress(),isOptional:!0},organizationId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}})});export{r as ContactCreatedEvent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";import{defineEvent as n}from"@lssm/lib.contracts";const r=t({name:`DealCreatedPayload`,description:`Payload when a deal is created`,fields:{dealId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},value:{type:e.Float_unsecure(),isOptional:!1},pipelineId:{type:e.String_unsecure(),isOptional:!1},stageId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),i=t({name:`DealMovedEventPayload`,description:`Payload when a deal is moved to another stage`,fields:{dealId:{type:e.String_unsecure(),isOptional:!1},fromStageId:{type:e.String_unsecure(),isOptional:!1},toStageId:{type:e.String_unsecure(),isOptional:!1},movedBy:{type:e.String_unsecure(),isOptional:!1},movedAt:{type:e.DateTime(),isOptional:!1}}}),a=t({name:`DealWonEventPayload`,description:`Payload when a deal is won`,fields:{dealId:{type:e.String_unsecure(),isOptional:!1},value:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!1},contactId:{type:e.String_unsecure(),isOptional:!0},companyId:{type:e.String_unsecure(),isOptional:!0},ownerId:{type:e.String_unsecure(),isOptional:!1},wonAt:{type:e.DateTime(),isOptional:!1}}}),o=t({name:`DealLostEventPayload`,description:`Payload when a deal is lost`,fields:{dealId:{type:e.String_unsecure(),isOptional:!1},value:{type:e.Float_unsecure(),isOptional:!1},reason:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1},lostAt:{type:e.DateTime(),isOptional:!1}}}),s=n({name:`deal.created`,version:1,description:`A new deal has been created.`,payload:r}),c=n({name:`deal.moved`,version:1,description:`A deal has been moved to a different stage.`,payload:i}),l=n({name:`deal.won`,version:1,description:`A deal has been won.`,payload:a}),u=n({name:`deal.lost`,version:1,description:`A deal has been lost.`,payload:o});export{s as DealCreatedEvent,u as DealLostEvent,c as DealMovedEvent,l as DealWonEvent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ContactCreatedEvent as e}from"./contact.event.js";import{DealCreatedEvent as t,DealLostEvent as n,DealMovedEvent as r,DealWonEvent as i}from"./deal.event.js";import{TaskCompletedEvent as a}from"./task.event.js";export{e as ContactCreatedEvent,t as DealCreatedEvent,n as DealLostEvent,r as DealMovedEvent,i as DealWonEvent,a as TaskCompletedEvent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";import{defineEvent as n}from"@lssm/lib.contracts";const r=n({name:`task.completed`,version:1,description:`A task has been completed.`,payload:t({name:`TaskCompletedPayload`,description:`Payload when a task is completed`,fields:{taskId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},assignedTo:{type:e.String_unsecure(),isOptional:!1},completedBy:{type:e.String_unsecure(),isOptional:!1},completedAt:{type:e.DateTime(),isOptional:!1}}})});export{r as TaskCompletedEvent};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{CrmPipelineFeature as e}from"./crm-pipeline.feature.js";import t from"./example.js";import{CompanyEntity as n,CompanySizeEnum as r}from"./entities/company.entity.js";import{ContactEntity as i,ContactStatusEnum as a}from"./entities/contact.entity.js";import{DealEntity as o,DealStatusEnum as s,PipelineEntity as c,StageEntity as l}from"./entities/deal.entity.js";import{ActivityEntity as u,TaskEntity as d,TaskPriorityEnum as f,TaskStatusEnum as p,TaskTypeEnum as m}from"./entities/task.entity.js";import{crmPipelineSchemaContribution as h}from"./entities/index.js";import{CreateDealContract as g,CreateDealInputModel as _,DealLostPayloadModel as v,DealModel as y,DealMovedPayloadModel as b,DealStatusFilterEnum as x,DealWonPayloadModel as S,ListDealsContract as C,ListDealsInputModel as w,ListDealsOutputModel as T,LoseDealContract as E,LoseDealInputModel as D,MoveDealContract as O,MoveDealInputModel as k,WinDealContract as ee,WinDealInputModel as A}from"./contracts/deal.contracts.js";import"./contracts/index.js";import{ContactCreatedEvent as j}from"./events/contact.event.js";import{DealCreatedEvent as M,DealLostEvent as N,DealMovedEvent as P,DealWonEvent as F}from"./events/deal.event.js";import{TaskCompletedEvent as I}from"./events/task.event.js";import"./events/index.js";import{MOCK_COMPANIES as L,MOCK_CONTACTS as R,MOCK_DEALS as z,MOCK_STAGES as B}from"./handlers/mock-data.js";import{mockCreateDealHandler as V,mockGetDealsByStageHandler as H,mockGetPipelineStagesHandler as U,mockListDealsHandler as W,mockLoseDealHandler as G,mockMoveDealHandler as K,mockWinDealHandler as q}from"./handlers/deal.handlers.js";import{CrmDashboardPresentation as J,PipelineMetricsPresentation as Y}from"./presentations/dashboard.presentation.js";import{DealCardPresentation as X,DealDetailPresentation as Z,DealListPresentation as Q,PipelineKanbanPresentation as $}from"./presentations/pipeline.presentation.js";import"./presentations/index.js";import"./docs/index.js";import{identityRbacSchemaContribution as te}from"@lssm/lib.identity-rbac";import{auditTrailSchemaContribution as ne}from"@lssm/module.audit-trail";import{notificationsSchemaContribution as re}from"@lssm/module.notifications";const ie={modules:[te,ne,re,h],provider:`postgresql`,outputPath:`./prisma/schema/generated.prisma`};export{u as ActivityEntity,n as CompanyEntity,r as CompanySizeEnum,j as ContactCreatedEvent,i as ContactEntity,a as ContactStatusEnum,g as CreateDealContract,_ as CreateDealInputModel,J as CrmDashboardPresentation,e as CrmPipelineFeature,X as DealCardPresentation,M as DealCreatedEvent,Z as DealDetailPresentation,o as DealEntity,Q as DealListPresentation,N as DealLostEvent,v as DealLostPayloadModel,y as DealModel,P as DealMovedEvent,b as DealMovedPayloadModel,s as DealStatusEnum,x as DealStatusFilterEnum,F as DealWonEvent,S as DealWonPayloadModel,C as ListDealsContract,w as ListDealsInputModel,T as ListDealsOutputModel,E as LoseDealContract,D as LoseDealInputModel,L as MOCK_COMPANIES,R as MOCK_CONTACTS,z as MOCK_DEALS,B as MOCK_STAGES,O as MoveDealContract,k as MoveDealInputModel,c as PipelineEntity,$ as PipelineKanbanPresentation,Y as PipelineMetricsPresentation,l as StageEntity,I as TaskCompletedEvent,d as TaskEntity,f as TaskPriorityEnum,p as TaskStatusEnum,m as TaskTypeEnum,ee as WinDealContract,A as WinDealInputModel,h as crmPipelineSchemaContribution,t as example,V as mockCreateDealHandler,H as mockGetDealsByStageHandler,U as mockGetPipelineStagesHandler,W as mockListDealsHandler,G as mockLoseDealHandler,K as mockMoveDealHandler,q as mockWinDealHandler,ie as schemaComposition};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{CrmDashboardPresentation as e,PipelineMetricsPresentation as t}from"./dashboard.presentation.js";import{DealCardPresentation as n,DealDetailPresentation as r,DealListPresentation as i,PipelineKanbanPresentation as a}from"./pipeline.presentation.js";export{e as CrmDashboardPresentation,n as DealCardPresentation,r as DealDetailPresentation,i as DealListPresentation,a as PipelineKanbanPresentation,t as PipelineMetricsPresentation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{DealModel as e}from"../contracts/deal.contracts.js";const t={meta:{name:`crm.pipeline.kanban`,version:1,description:`Kanban board view of deals organized by stage`,domain:`crm-pipeline`,owners:[`crm-team`],tags:[`pipeline`,`kanban`,`deals`]},source:{type:`component`,framework:`react`,componentKey:`PipelineKanbanView`,props:e},targets:[`react`,`markdown`],policy:{flags:[`crm.pipeline.enabled`]}},n={meta:{name:`crm.deal.list`,version:1,description:`List view of deals with value, status, and owner info`,domain:`crm-pipeline`,owners:[`crm-team`],tags:[`deal`,`list`]},source:{type:`component`,framework:`react`,componentKey:`DealListView`,props:e},targets:[`react`,`markdown`,`application/json`],policy:{flags:[`crm.deals.enabled`]}},r={meta:{name:`crm.deal.detail`,version:1,description:`Detailed view of a deal with activities, contacts, and history`,domain:`crm-pipeline`,owners:[`crm-team`],tags:[`deal`,`detail`]},source:{type:`component`,framework:`react`,componentKey:`DealDetailView`},targets:[`react`,`markdown`],policy:{flags:[`crm.deals.enabled`]}},i={meta:{name:`crm.deal.card`,version:1,description:`Compact deal card for kanban board display`,domain:`crm-pipeline`,owners:[`crm-team`],tags:[`deal`,`card`,`kanban`]},source:{type:`component`,framework:`react`,componentKey:`DealCard`,props:e},targets:[`react`],policy:{flags:[`crm.deals.enabled`]}};export{i as DealCardPresentation,r as DealDetailPresentation,n as DealListPresentation,t as PipelineKanbanPresentation};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/example.crm-pipeline",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251215231151",
|
|
4
4
|
"description": "CRM Pipeline - Contacts, Companies, Deals, Tasks",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -8,23 +8,26 @@
|
|
|
8
8
|
"exports": {
|
|
9
9
|
".": "./src/index.ts",
|
|
10
10
|
"./contracts": "./src/contracts/index.ts",
|
|
11
|
-
"./contracts/deal": "./src/contracts/deal.ts",
|
|
11
|
+
"./contracts/deal.contracts": "./src/contracts/deal.contracts.ts",
|
|
12
|
+
"./crm-pipeline.feature": "./src/crm-pipeline.feature.ts",
|
|
12
13
|
"./docs": "./src/docs/index.ts",
|
|
13
14
|
"./docs/crm-pipeline.docblock": "./src/docs/crm-pipeline.docblock.ts",
|
|
14
15
|
"./entities": "./src/entities/index.ts",
|
|
15
|
-
"./entities/company": "./src/entities/company.ts",
|
|
16
|
-
"./entities/contact": "./src/entities/contact.ts",
|
|
17
|
-
"./entities/deal": "./src/entities/deal.ts",
|
|
18
|
-
"./entities/task": "./src/entities/task.ts",
|
|
19
|
-
"./events": "./src/events.ts",
|
|
16
|
+
"./entities/company.entity": "./src/entities/company.entity.ts",
|
|
17
|
+
"./entities/contact.entity": "./src/entities/contact.entity.ts",
|
|
18
|
+
"./entities/deal.entity": "./src/entities/deal.entity.ts",
|
|
19
|
+
"./entities/task.entity": "./src/entities/task.entity.ts",
|
|
20
|
+
"./events": "./src/events/index.ts",
|
|
21
|
+
"./events/contact.event": "./src/events/contact.event.ts",
|
|
22
|
+
"./events/deal.event": "./src/events/deal.event.ts",
|
|
23
|
+
"./events/task.event": "./src/events/task.event.ts",
|
|
20
24
|
"./example": "./src/example.ts",
|
|
21
|
-
"./feature": "./src/feature.ts",
|
|
22
25
|
"./handlers": "./src/handlers/index.ts",
|
|
23
26
|
"./handlers/deal.handlers": "./src/handlers/deal.handlers.ts",
|
|
24
27
|
"./handlers/mock-data": "./src/handlers/mock-data.ts",
|
|
25
28
|
"./presentations": "./src/presentations/index.ts",
|
|
26
|
-
"./presentations/dashboard": "./src/presentations/dashboard.ts",
|
|
27
|
-
"./presentations/pipeline": "./src/presentations/pipeline.ts",
|
|
29
|
+
"./presentations/dashboard.presentation": "./src/presentations/dashboard.presentation.ts",
|
|
30
|
+
"./presentations/pipeline.presentation": "./src/presentations/pipeline.presentation.ts",
|
|
28
31
|
"./*": "./*"
|
|
29
32
|
},
|
|
30
33
|
"scripts": {
|
|
@@ -51,7 +54,7 @@
|
|
|
51
54
|
"devDependencies": {
|
|
52
55
|
"@lssm/tool.tsdown": "workspace:*",
|
|
53
56
|
"@lssm/tool.typescript": "workspace:*",
|
|
54
|
-
"tsdown": "^0.17.
|
|
57
|
+
"tsdown": "^0.17.4",
|
|
55
58
|
"typescript": "^5.9.3"
|
|
56
59
|
},
|
|
57
60
|
"module": "./dist/index.js",
|
|
@@ -59,23 +62,26 @@
|
|
|
59
62
|
"exports": {
|
|
60
63
|
".": "./dist/index.js",
|
|
61
64
|
"./contracts": "./dist/contracts/index.js",
|
|
62
|
-
"./contracts/deal": "./dist/contracts/deal.js",
|
|
65
|
+
"./contracts/deal.contracts": "./dist/contracts/deal.contracts.js",
|
|
66
|
+
"./crm-pipeline.feature": "./dist/crm-pipeline.feature.js",
|
|
63
67
|
"./docs": "./dist/docs/index.js",
|
|
64
68
|
"./docs/crm-pipeline.docblock": "./dist/docs/crm-pipeline.docblock.js",
|
|
65
69
|
"./entities": "./dist/entities/index.js",
|
|
66
|
-
"./entities/company": "./dist/entities/company.js",
|
|
67
|
-
"./entities/contact": "./dist/entities/contact.js",
|
|
68
|
-
"./entities/deal": "./dist/entities/deal.js",
|
|
69
|
-
"./entities/task": "./dist/entities/task.js",
|
|
70
|
-
"./events": "./dist/events.js",
|
|
70
|
+
"./entities/company.entity": "./dist/entities/company.entity.js",
|
|
71
|
+
"./entities/contact.entity": "./dist/entities/contact.entity.js",
|
|
72
|
+
"./entities/deal.entity": "./dist/entities/deal.entity.js",
|
|
73
|
+
"./entities/task.entity": "./dist/entities/task.entity.js",
|
|
74
|
+
"./events": "./dist/events/index.js",
|
|
75
|
+
"./events/contact.event": "./dist/events/contact.event.js",
|
|
76
|
+
"./events/deal.event": "./dist/events/deal.event.js",
|
|
77
|
+
"./events/task.event": "./dist/events/task.event.js",
|
|
71
78
|
"./example": "./dist/example.js",
|
|
72
|
-
"./feature": "./dist/feature.js",
|
|
73
79
|
"./handlers": "./dist/handlers/index.js",
|
|
74
80
|
"./handlers/deal.handlers": "./dist/handlers/deal.handlers.js",
|
|
75
81
|
"./handlers/mock-data": "./dist/handlers/mock-data.js",
|
|
76
82
|
"./presentations": "./dist/presentations/index.js",
|
|
77
|
-
"./presentations/dashboard": "./dist/presentations/dashboard.js",
|
|
78
|
-
"./presentations/pipeline": "./dist/presentations/pipeline.js",
|
|
83
|
+
"./presentations/dashboard.presentation": "./dist/presentations/dashboard.presentation.js",
|
|
84
|
+
"./presentations/pipeline.presentation": "./dist/presentations/pipeline.presentation.js",
|
|
79
85
|
"./*": "./*"
|
|
80
86
|
}
|
|
81
87
|
}
|
package/src/contracts/index.ts
CHANGED
package/src/entities/index.ts
CHANGED
|
@@ -1,60 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
1
|
+
export * from './company.entity';
|
|
2
|
+
export * from './contact.entity';
|
|
3
|
+
export * from './deal.entity';
|
|
4
|
+
export * from './task.entity';
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// Deal entities
|
|
8
|
-
export {
|
|
9
|
-
DealStatusEnum,
|
|
10
|
-
PipelineEntity,
|
|
11
|
-
StageEntity,
|
|
12
|
-
DealEntity,
|
|
13
|
-
} from './deal';
|
|
14
|
-
|
|
15
|
-
// Task entities
|
|
16
|
-
export {
|
|
17
|
-
TaskTypeEnum,
|
|
18
|
-
TaskPriorityEnum,
|
|
19
|
-
TaskStatusEnum,
|
|
20
|
-
TaskEntity,
|
|
21
|
-
ActivityEntity,
|
|
22
|
-
} from './task';
|
|
23
|
-
|
|
24
|
-
// Schema contribution
|
|
25
|
-
import { ContactEntity, ContactStatusEnum } from './contact';
|
|
26
|
-
import { CompanyEntity, CompanySizeEnum } from './company';
|
|
6
|
+
import type { ModuleSchemaContribution } from '@lssm/lib.schema';
|
|
7
|
+
import { CompanyEntity, CompanySizeEnum } from './company.entity';
|
|
8
|
+
import { ContactEntity, ContactStatusEnum } from './contact.entity';
|
|
27
9
|
import {
|
|
10
|
+
DealEntity,
|
|
28
11
|
PipelineEntity,
|
|
29
12
|
StageEntity,
|
|
30
|
-
DealEntity,
|
|
31
13
|
DealStatusEnum,
|
|
32
|
-
} from './deal';
|
|
14
|
+
} from './deal.entity';
|
|
33
15
|
import {
|
|
34
16
|
TaskEntity,
|
|
35
17
|
ActivityEntity,
|
|
36
18
|
TaskTypeEnum,
|
|
37
19
|
TaskPriorityEnum,
|
|
38
20
|
TaskStatusEnum,
|
|
39
|
-
} from './task';
|
|
40
|
-
import type { ModuleSchemaContribution } from '@lssm/lib.schema';
|
|
41
|
-
|
|
42
|
-
export const crmPipelineEntities = [
|
|
43
|
-
ContactEntity,
|
|
44
|
-
CompanyEntity,
|
|
45
|
-
PipelineEntity,
|
|
46
|
-
StageEntity,
|
|
47
|
-
DealEntity,
|
|
48
|
-
TaskEntity,
|
|
49
|
-
ActivityEntity,
|
|
50
|
-
];
|
|
21
|
+
} from './task.entity';
|
|
51
22
|
|
|
23
|
+
/**
|
|
24
|
+
* CRM Pipeline schema contribution.
|
|
25
|
+
*/
|
|
52
26
|
export const crmPipelineSchemaContribution: ModuleSchemaContribution = {
|
|
53
27
|
moduleId: '@lssm/example.crm-pipeline',
|
|
54
|
-
entities:
|
|
28
|
+
entities: [
|
|
29
|
+
CompanyEntity,
|
|
30
|
+
ContactEntity,
|
|
31
|
+
DealEntity,
|
|
32
|
+
PipelineEntity,
|
|
33
|
+
StageEntity,
|
|
34
|
+
TaskEntity,
|
|
35
|
+
ActivityEntity,
|
|
36
|
+
],
|
|
55
37
|
enums: [
|
|
56
|
-
ContactStatusEnum,
|
|
57
38
|
CompanySizeEnum,
|
|
39
|
+
ContactStatusEnum,
|
|
58
40
|
DealStatusEnum,
|
|
59
41
|
TaskTypeEnum,
|
|
60
42
|
TaskPriorityEnum,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ScalarTypeEnum, defineSchemaModel } from '@lssm/lib.schema';
|
|
2
|
+
import { defineEvent } from '@lssm/lib.contracts';
|
|
3
|
+
|
|
4
|
+
// ============ Contact Event Payloads ============
|
|
5
|
+
|
|
6
|
+
const ContactCreatedPayload = defineSchemaModel({
|
|
7
|
+
name: 'ContactCreatedPayload',
|
|
8
|
+
description: 'Payload when a contact is created',
|
|
9
|
+
fields: {
|
|
10
|
+
contactId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
11
|
+
email: { type: ScalarTypeEnum.EmailAddress(), isOptional: true },
|
|
12
|
+
organizationId: {
|
|
13
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
14
|
+
isOptional: false,
|
|
15
|
+
},
|
|
16
|
+
ownerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
17
|
+
createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export const ContactCreatedEvent = defineEvent({
|
|
22
|
+
name: 'contact.created',
|
|
23
|
+
version: 1,
|
|
24
|
+
description: 'A new contact has been created.',
|
|
25
|
+
payload: ContactCreatedPayload,
|
|
26
|
+
});
|
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
import { ScalarTypeEnum, defineSchemaModel } from '@lssm/lib.schema';
|
|
2
2
|
import { defineEvent } from '@lssm/lib.contracts';
|
|
3
3
|
|
|
4
|
-
// ============ Contact Event Payloads ============
|
|
5
|
-
|
|
6
|
-
const ContactCreatedPayload = defineSchemaModel({
|
|
7
|
-
name: 'ContactCreatedPayload',
|
|
8
|
-
description: 'Payload when a contact is created',
|
|
9
|
-
fields: {
|
|
10
|
-
contactId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
11
|
-
email: { type: ScalarTypeEnum.EmailAddress(), isOptional: true },
|
|
12
|
-
organizationId: {
|
|
13
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
14
|
-
isOptional: false,
|
|
15
|
-
},
|
|
16
|
-
ownerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
17
|
-
createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
|
|
21
4
|
// ============ Deal Event Payloads ============
|
|
22
5
|
|
|
23
6
|
const DealCreatedPayload = defineSchemaModel({
|
|
@@ -72,29 +55,6 @@ const DealLostPayload = defineSchemaModel({
|
|
|
72
55
|
},
|
|
73
56
|
});
|
|
74
57
|
|
|
75
|
-
// ============ Task Event Payloads ============
|
|
76
|
-
|
|
77
|
-
const TaskCompletedPayload = defineSchemaModel({
|
|
78
|
-
name: 'TaskCompletedPayload',
|
|
79
|
-
description: 'Payload when a task is completed',
|
|
80
|
-
fields: {
|
|
81
|
-
taskId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
82
|
-
type: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
83
|
-
assignedTo: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
84
|
-
completedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
85
|
-
completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
// ============ Events ============
|
|
90
|
-
|
|
91
|
-
export const ContactCreatedEvent = defineEvent({
|
|
92
|
-
name: 'contact.created',
|
|
93
|
-
version: 1,
|
|
94
|
-
description: 'A new contact has been created.',
|
|
95
|
-
payload: ContactCreatedPayload,
|
|
96
|
-
});
|
|
97
|
-
|
|
98
58
|
export const DealCreatedEvent = defineEvent({
|
|
99
59
|
name: 'deal.created',
|
|
100
60
|
version: 1,
|
|
@@ -122,21 +82,3 @@ export const DealLostEvent = defineEvent({
|
|
|
122
82
|
description: 'A deal has been lost.',
|
|
123
83
|
payload: DealLostPayload,
|
|
124
84
|
});
|
|
125
|
-
|
|
126
|
-
export const TaskCompletedEvent = defineEvent({
|
|
127
|
-
name: 'task.completed',
|
|
128
|
-
version: 1,
|
|
129
|
-
description: 'A task has been completed.',
|
|
130
|
-
payload: TaskCompletedPayload,
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
// ============ All Events ============
|
|
134
|
-
|
|
135
|
-
export const CrmPipelineEvents = {
|
|
136
|
-
ContactCreatedEvent,
|
|
137
|
-
DealCreatedEvent,
|
|
138
|
-
DealMovedEvent,
|
|
139
|
-
DealWonEvent,
|
|
140
|
-
DealLostEvent,
|
|
141
|
-
TaskCompletedEvent,
|
|
142
|
-
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ScalarTypeEnum, defineSchemaModel } from '@lssm/lib.schema';
|
|
2
|
+
import { defineEvent } from '@lssm/lib.contracts';
|
|
3
|
+
|
|
4
|
+
// ============ Task Event Payloads ============
|
|
5
|
+
|
|
6
|
+
const TaskCompletedPayload = defineSchemaModel({
|
|
7
|
+
name: 'TaskCompletedPayload',
|
|
8
|
+
description: 'Payload when a task is completed',
|
|
9
|
+
fields: {
|
|
10
|
+
taskId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
11
|
+
type: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
12
|
+
assignedTo: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
13
|
+
completedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
14
|
+
completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const TaskCompletedEvent = defineEvent({
|
|
19
|
+
name: 'task.completed',
|
|
20
|
+
version: 1,
|
|
21
|
+
description: 'A task has been completed.',
|
|
22
|
+
payload: TaskCompletedPayload,
|
|
23
|
+
});
|
package/src/example.ts
CHANGED
|
@@ -18,12 +18,13 @@ const example = {
|
|
|
18
18
|
},
|
|
19
19
|
surfaces: {
|
|
20
20
|
templates: true,
|
|
21
|
-
sandbox: {
|
|
21
|
+
sandbox: {
|
|
22
|
+
enabled: true,
|
|
23
|
+
modes: ['playground', 'specs', 'builder', 'markdown', 'evolution'],
|
|
24
|
+
},
|
|
22
25
|
studio: { enabled: true, installable: true },
|
|
23
26
|
mcp: { enabled: true },
|
|
24
27
|
},
|
|
25
28
|
} as const;
|
|
26
29
|
|
|
27
30
|
export default example;
|
|
28
|
-
|
|
29
|
-
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,7 @@ export * from './contracts';
|
|
|
6
6
|
export * from './events';
|
|
7
7
|
export * from './handlers';
|
|
8
8
|
export * from './presentations';
|
|
9
|
-
export * from './feature';
|
|
9
|
+
export * from './crm-pipeline.feature';
|
|
10
10
|
export { default as example } from './example';
|
|
11
11
|
import './docs';
|
|
12
12
|
|
|
@@ -1,38 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
// Pipeline presentations
|
|
6
|
-
export {
|
|
7
|
-
PipelineKanbanPresentation,
|
|
8
|
-
DealListPresentation,
|
|
9
|
-
DealDetailPresentation,
|
|
10
|
-
DealCardPresentation,
|
|
11
|
-
} from './pipeline';
|
|
12
|
-
|
|
13
|
-
// Dashboard presentations
|
|
14
|
-
export {
|
|
15
|
-
CrmDashboardPresentation,
|
|
16
|
-
PipelineMetricsPresentation,
|
|
17
|
-
} from './dashboard';
|
|
18
|
-
|
|
19
|
-
// Re-export all presentations as an array
|
|
20
|
-
import {
|
|
21
|
-
PipelineKanbanPresentation,
|
|
22
|
-
DealListPresentation,
|
|
23
|
-
DealDetailPresentation,
|
|
24
|
-
DealCardPresentation,
|
|
25
|
-
} from './pipeline';
|
|
26
|
-
import {
|
|
27
|
-
CrmDashboardPresentation,
|
|
28
|
-
PipelineMetricsPresentation,
|
|
29
|
-
} from './dashboard';
|
|
30
|
-
|
|
31
|
-
export const CrmPipelinePresentations = [
|
|
32
|
-
CrmDashboardPresentation,
|
|
33
|
-
PipelineKanbanPresentation,
|
|
34
|
-
DealListPresentation,
|
|
35
|
-
DealDetailPresentation,
|
|
36
|
-
DealCardPresentation,
|
|
37
|
-
PipelineMetricsPresentation,
|
|
38
|
-
];
|
|
1
|
+
export * from './dashboard.presentation';
|
|
2
|
+
export * from './pipeline.presentation';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Pipeline Presentation Descriptors
|
|
3
3
|
*/
|
|
4
4
|
import type { PresentationDescriptorV2 } from '@lssm/lib.contracts';
|
|
5
|
-
import { DealModel } from '../contracts/deal';
|
|
5
|
+
import { DealModel } from '../contracts/deal.contracts';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Kanban board presentation for the sales pipeline.
|