@lssm/example.saas-boilerplate 0.0.0-canary-20251216033905 → 0.0.0-canary-20251216062412

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.
@@ -2,18 +2,18 @@ $ bun build:bundle && bun build:types
2
2
  $ tsdown
3
3
  ℹ tsdown v0.17.4 powered by rolldown v1.0.0-beta.53
4
4
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/saas-boilerplate/tsdown.config.js
5
- ℹ entry: src/example.ts, src/index.ts, src/saas.feature.ts, src/billing/billing.contracts.ts, src/billing/billing.entity.ts, src/billing/billing.enum.ts, src/billing/billing.event.ts, src/billing/billing.handler.ts, src/billing/billing.presentation.ts, src/billing/billing.schema.ts, src/billing/index.ts, src/dashboard/dashboard.presentation.ts, src/dashboard/index.ts, src/docs/index.ts, src/docs/saas-boilerplate.docblock.ts, src/handlers/index.ts, src/presentations/index.ts, src/project/index.ts, src/project/project.contracts.ts, src/project/project.entity.ts, src/project/project.enum.ts, src/project/project.event.ts, src/project/project.handler.ts, src/project/project.presentation.ts, src/project/project.schema.ts, src/settings/index.ts, src/settings/settings.entity.ts, src/settings/settings.enum.ts, src/shared/mock-data.ts
5
+ ℹ entry: src/example.ts, src/index.ts, src/saas-boilerplate.feature.ts, src/dashboard/dashboard.presentation.ts, src/dashboard/index.ts, src/docs/index.ts, src/docs/saas-boilerplate.docblock.ts, src/billing/billing.contracts.ts, src/billing/billing.entity.ts, src/billing/billing.enum.ts, src/billing/billing.event.ts, src/billing/billing.handler.ts, src/billing/billing.presentation.ts, src/billing/billing.schema.ts, src/billing/index.ts, src/handlers/index.ts, src/presentations/index.ts, src/project/index.ts, src/project/project.contracts.ts, src/project/project.entity.ts, src/project/project.enum.ts, src/project/project.event.ts, src/project/project.handler.ts, src/project/project.presentation.ts, src/project/project.schema.ts, src/settings/index.ts, src/settings/settings.entity.ts, src/settings/settings.enum.ts, src/shared/mock-data.ts
6
6
  ℹ target: esnext
7
7
  ℹ tsconfig: tsconfig.json
8
8
  ℹ Build start
9
- ℹ dist/index.js 5.03 kB │ gzip: 1.28 kB
9
+ ℹ dist/index.js 5.04 kB │ gzip: 1.28 kB
10
10
  ℹ dist/docs/saas-boilerplate.docblock.js 3.46 kB │ gzip: 1.38 kB
11
11
  ℹ dist/project/project.contracts.js 2.78 kB │ gzip: 0.94 kB
12
12
  ℹ dist/billing/billing.schema.js 2.73 kB │ gzip: 0.70 kB
13
13
  ℹ dist/billing/billing.entity.js 2.57 kB │ gzip: 0.94 kB
14
14
  ℹ dist/project/project.schema.js 2.57 kB │ gzip: 0.59 kB
15
15
  ℹ dist/shared/mock-data.js 2.06 kB │ gzip: 0.78 kB
16
- ℹ dist/saas.feature.js 1.95 kB │ gzip: 0.52 kB
16
+ ℹ dist/saas-boilerplate.feature.js 2.00 kB │ gzip: 0.52 kB
17
17
  ℹ dist/project/index.js 1.87 kB │ gzip: 0.50 kB
18
18
  ℹ dist/billing/index.js 1.87 kB │ gzip: 0.51 kB
19
19
  ℹ dist/billing/billing.contracts.js 1.86 kB │ gzip: 0.69 kB
@@ -35,6 +35,6 @@ $ tsdown
35
35
  ℹ dist/settings/index.js 0.21 kB │ gzip: 0.13 kB
36
36
  ℹ dist/dashboard/index.js 0.17 kB │ gzip: 0.11 kB
37
37
  ℹ dist/docs/index.js 0.04 kB │ gzip: 0.06 kB
38
- ℹ 29 files, total: 42.99 kB
39
- ✔ Build complete in 102ms
38
+ ℹ 29 files, total: 43.06 kB
39
+ ✔ Build complete in 96ms
40
40
  $ tsc --noEmit
package/CHANGELOG.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # @lssm/example.saas-boilerplate
2
2
 
3
- ## 0.0.0-canary-20251216033905
3
+ ## 0.0.0-canary-20251216062412
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-20251216033905
10
- - @lssm/lib.schema@0.0.0-canary-20251216033905
11
- - @lssm/lib.jobs@0.0.0-canary-20251216033905
12
- - @lssm/lib.bus@0.0.0-canary-20251216033905
13
- - @lssm/lib.identity-rbac@0.0.0-canary-20251216033905
14
- - @lssm/module.audit-trail@0.0.0-canary-20251216033905
15
- - @lssm/module.notifications@0.0.0-canary-20251216033905
9
+ - @lssm/lib.contracts@0.0.0-canary-20251216062412
10
+ - @lssm/lib.schema@0.0.0-canary-20251216062412
11
+ - @lssm/lib.jobs@0.0.0-canary-20251216062412
12
+ - @lssm/lib.bus@0.0.0-canary-20251216062412
13
+ - @lssm/lib.identity-rbac@0.0.0-canary-20251216062412
14
+ - @lssm/module.audit-trail@0.0.0-canary-20251216062412
15
+ - @lssm/module.notifications@0.0.0-canary-20251216062412
@@ -1 +1 @@
1
- import{CheckFeatureAccessInputModel as e,CheckFeatureAccessOutputModel as t,GetUsageSummaryInputModel as n,GetUsageSummaryOutputModel as r,RecordUsageInputModel as i,RecordUsageOutputModel as a,SubscriptionModel as o,UsageRecordedPayloadModel as s}from"./billing.schema.js";import{defineCommand as c,defineQuery as l}from"@lssm/lib.contracts";const u=[`example.saas-boilerplate`],d=l({meta:{name:`saas.billing.subscription.get`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`subscription`],description:`Get organization subscription status.`,goal:`Show current plan and billing status.`,context:`Billing page, plan upgrade prompts.`},io:{input:null,output:o},policy:{auth:`user`}}),f=c({meta:{name:`saas.billing.usage.record`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`usage`],description:`Record usage of a metered feature.`,goal:`Track feature usage for billing.`,context:`Called by services when metered features are used.`},io:{input:i,output:a},policy:{auth:`user`},sideEffects:{emits:[{name:`billing.usage.recorded`,version:1,when:`Usage is recorded`,payload:s}]}}),p=l({meta:{name:`saas.billing.usage.summary`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`usage`],description:`Get usage summary for the current billing period.`,goal:`Show usage vs limits.`,context:`Billing page, usage dashboards.`},io:{input:n,output:r},policy:{auth:`user`}}),m=l({meta:{name:`saas.billing.feature.check`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`feature`],description:`Check if organization has access to a feature.`,goal:`Gate features based on plan/usage.`,context:`Feature access checks, upgrade prompts.`},io:{input:e,output:t},policy:{auth:`user`}});export{m as CheckFeatureAccessContract,d as GetSubscriptionContract,p as GetUsageSummaryContract,f as RecordUsageContract};
1
+ import{CheckFeatureAccessInputModel as e,CheckFeatureAccessOutputModel as t,GetUsageSummaryInputModel as n,GetUsageSummaryOutputModel as r,RecordUsageInputModel as i,RecordUsageOutputModel as a,SubscriptionModel as o,UsageRecordedPayloadModel as s}from"./billing.schema.js";import{defineCommand as c,defineQuery as l}from"@lssm/lib.contracts";const u=[`@example.saas-boilerplate`],d=l({meta:{name:`saas.billing.subscription.get`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`subscription`],description:`Get organization subscription status.`,goal:`Show current plan and billing status.`,context:`Billing page, plan upgrade prompts.`},io:{input:null,output:o},policy:{auth:`user`}}),f=c({meta:{name:`saas.billing.usage.record`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`usage`],description:`Record usage of a metered feature.`,goal:`Track feature usage for billing.`,context:`Called by services when metered features are used.`},io:{input:i,output:a},policy:{auth:`user`},sideEffects:{emits:[{name:`billing.usage.recorded`,version:1,when:`Usage is recorded`,payload:s}]}}),p=l({meta:{name:`saas.billing.usage.summary`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`usage`],description:`Get usage summary for the current billing period.`,goal:`Show usage vs limits.`,context:`Billing page, usage dashboards.`},io:{input:n,output:r},policy:{auth:`user`}}),m=l({meta:{name:`saas.billing.feature.check`,version:1,stability:`stable`,owners:[...u],tags:[`saas`,`billing`,`feature`],description:`Check if organization has access to a feature.`,goal:`Gate features based on plan/usage.`,context:`Feature access checks, upgrade prompts.`},io:{input:e,output:t},policy:{auth:`user`}});export{m as CheckFeatureAccessContract,d as GetSubscriptionContract,p as GetUsageSummaryContract,f as RecordUsageContract};
@@ -1 +1 @@
1
- const e={meta:{name:`saas.billing.subscription`,version:1,description:`Subscription status with plan info, limits, and current usage`,domain:`saas-boilerplate`,owners:[`saas-team`],tags:[`billing`,`subscription`]},source:{type:`component`,framework:`react`,componentKey:`SubscriptionView`},targets:[`react`,`markdown`],policy:{flags:[`saas.billing.enabled`]}},t={meta:{name:`saas.billing.usage`,version:1,description:`Usage metrics and breakdown by resource type`,domain:`saas-boilerplate`,owners:[`saas-team`],tags:[`billing`,`usage`,`metrics`]},source:{type:`component`,framework:`react`,componentKey:`UsageDashboardView`},targets:[`react`,`markdown`],policy:{flags:[`saas.billing.enabled`]}};export{e as SubscriptionPresentation,t as UsageDashboardPresentation};
1
+ const e={meta:{name:`saas.billing.subscription`,version:1,description:`Subscription status with plan info, limits, and current usage`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`billing`,`subscription`]},source:{type:`component`,framework:`react`,componentKey:`SubscriptionView`},targets:[`react`,`markdown`],policy:{flags:[`saas.billing.enabled`]}},t={meta:{name:`saas.billing.usage`,version:1,description:`Usage metrics and breakdown by resource type`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`billing`,`usage`,`metrics`]},source:{type:`component`,framework:`react`,componentKey:`UsageDashboardView`},targets:[`react`,`markdown`],policy:{flags:[`saas.billing.enabled`]}};export{e as SubscriptionPresentation,t as UsageDashboardPresentation};
@@ -1 +1 @@
1
- const e={meta:{name:`saas.dashboard`,version:1,description:`Main SaaS dashboard with project overview, usage stats, and quick actions`,domain:`saas-boilerplate`,owners:[`saas-team`],tags:[`dashboard`,`overview`]},source:{type:`component`,framework:`react`,componentKey:`SaasDashboard`},targets:[`react`,`markdown`],policy:{flags:[`saas.enabled`]}},t={meta:{name:`saas.settings`,version:1,description:`Organization and user settings panel`,domain:`saas-boilerplate`,owners:[`saas-team`],tags:[`settings`,`config`]},source:{type:`component`,framework:`react`,componentKey:`SettingsPanel`},targets:[`react`],policy:{flags:[`saas.enabled`]}};export{e as SaasDashboardPresentation,t as SettingsPanelPresentation};
1
+ const e={meta:{name:`saas.dashboard`,version:1,description:`Main SaaS dashboard with project overview, usage stats, and quick actions`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`dashboard`,`overview`]},source:{type:`component`,framework:`react`,componentKey:`SaasDashboard`},targets:[`react`,`markdown`],policy:{flags:[`saas.enabled`]}},t={meta:{name:`saas.settings`,version:1,description:`Organization and user settings panel`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`settings`,`config`]},source:{type:`component`,framework:`react`,componentKey:`SettingsPanel`},targets:[`react`],policy:{flags:[`saas.enabled`]}};export{e as SaasDashboardPresentation,t as SettingsPanelPresentation};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import e from"./example.js";import{FeatureAccessReasonEnum as t,SubscriptionStatusSchemaEnum as n}from"./billing/billing.enum.js";import{CheckFeatureAccessInputModel as r,CheckFeatureAccessOutputModel as i,GetUsageSummaryInputModel as a,GetUsageSummaryOutputModel as o,RecordUsageInputModel as s,RecordUsageOutputModel as c,SubscriptionModel as ee,UsageRecordedPayloadModel as te,UsageSummaryModel as ne}from"./billing/billing.schema.js";import{CheckFeatureAccessContract as re,GetSubscriptionContract as l,GetUsageSummaryContract as u,RecordUsageContract as d}from"./billing/billing.contracts.js";import{SubscriptionChangedEvent as f,UsageLimitReachedEvent as p,UsageRecordedEvent as m}from"./billing/billing.event.js";import{BillingUsageEntity as h,SubscriptionEntity as g,SubscriptionStatusEnum as _,UsageLimitEntity as v}from"./billing/billing.entity.js";import{SubscriptionPresentation as y,UsageDashboardPresentation as b}from"./billing/billing.presentation.js";import{mockCheckFeatureAccessHandler as x,mockGetSubscriptionHandler as S,mockGetUsageSummaryHandler as C,mockRecordUsageHandler as w}from"./billing/billing.handler.js";import"./billing/index.js";import{ProjectStatusFilterEnum as T,ProjectStatusSchemaEnum as E}from"./project/project.enum.js";import{CreateProjectInputModel as D,DeleteProjectInputModel as O,DeleteProjectOutputModel as k,GetProjectInputModel as A,ListProjectsInputModel as j,ListProjectsOutputModel as M,ProjectDeletedPayloadModel as N,ProjectModel as P,UpdateProjectInputModel as F}from"./project/project.schema.js";import{CreateProjectContract as ie,DeleteProjectContract as I,GetProjectContract as L,ListProjectsContract as R,UpdateProjectContract as z}from"./project/project.contracts.js";import{ProjectArchivedEvent as B,ProjectCreatedEvent as V,ProjectDeletedEvent as H,ProjectUpdatedEvent as U}from"./project/project.event.js";import{ProjectEntity as W,ProjectMemberEntity as G,ProjectStatusEnum as K}from"./project/project.entity.js";import{ProjectDetailPresentation as q,ProjectListPresentation as J}from"./project/project.presentation.js";import{mockCreateProjectHandler as Y,mockDeleteProjectHandler as ae,mockGetProjectHandler as oe,mockListProjectsHandler as se,mockUpdateProjectHandler as ce}from"./project/project.handler.js";import"./project/index.js";import{SettingsScopeEnum as X}from"./settings/settings.enum.js";import{FeatureFlagEntity as Z,SettingsEntity as Q}from"./settings/settings.entity.js";import"./settings/index.js";import{SaasDashboardPresentation as le,SettingsPanelPresentation as ue}from"./dashboard/dashboard.presentation.js";import{SaasBoilerplateFeature as de}from"./saas.feature.js";import"./docs/index.js";import{identityRbacSchemaContribution as fe}from"@lssm/lib.identity-rbac";import{jobsSchemaContribution as pe}from"@lssm/lib.jobs";import{auditTrailSchemaContribution as me}from"@lssm/module.audit-trail";import{notificationsSchemaContribution as he}from"@lssm/module.notifications";const $={moduleId:`@lssm/example.saas-boilerplate`,entities:[W,G,Q,Z,g,h,v],enums:[K,X,_]},ge={modules:[fe,pe,me,he,$],provider:`postgresql`,outputPath:`./prisma/schema/generated.prisma`};export{h as BillingUsageEntity,re as CheckFeatureAccessContract,r as CheckFeatureAccessInputModel,i as CheckFeatureAccessOutputModel,ie as CreateProjectContract,D as CreateProjectInputModel,I as DeleteProjectContract,O as DeleteProjectInputModel,k as DeleteProjectOutputModel,t as FeatureAccessReasonEnum,Z as FeatureFlagEntity,L as GetProjectContract,A as GetProjectInputModel,l as GetSubscriptionContract,u as GetUsageSummaryContract,a as GetUsageSummaryInputModel,o as GetUsageSummaryOutputModel,R as ListProjectsContract,j as ListProjectsInputModel,M as ListProjectsOutputModel,B as ProjectArchivedEvent,V as ProjectCreatedEvent,H as ProjectDeletedEvent,N as ProjectDeletedPayloadModel,q as ProjectDetailPresentation,W as ProjectEntity,J as ProjectListPresentation,G as ProjectMemberEntity,P as ProjectModel,K as ProjectStatusEnum,T as ProjectStatusFilterEnum,E as ProjectStatusSchemaEnum,U as ProjectUpdatedEvent,d as RecordUsageContract,s as RecordUsageInputModel,c as RecordUsageOutputModel,de as SaasBoilerplateFeature,le as SaasDashboardPresentation,Q as SettingsEntity,ue as SettingsPanelPresentation,X as SettingsScopeEnum,f as SubscriptionChangedEvent,g as SubscriptionEntity,ee as SubscriptionModel,y as SubscriptionPresentation,_ as SubscriptionStatusEnum,n as SubscriptionStatusSchemaEnum,z as UpdateProjectContract,F as UpdateProjectInputModel,b as UsageDashboardPresentation,v as UsageLimitEntity,p as UsageLimitReachedEvent,m as UsageRecordedEvent,te as UsageRecordedPayloadModel,ne as UsageSummaryModel,e as example,x as mockCheckFeatureAccessHandler,Y as mockCreateProjectHandler,ae as mockDeleteProjectHandler,oe as mockGetProjectHandler,S as mockGetSubscriptionHandler,C as mockGetUsageSummaryHandler,se as mockListProjectsHandler,w as mockRecordUsageHandler,ce as mockUpdateProjectHandler,$ as saasBoilerplateSchemaContribution,ge as schemaComposition};
1
+ import e from"./example.js";import{FeatureAccessReasonEnum as t,SubscriptionStatusSchemaEnum as n}from"./billing/billing.enum.js";import{CheckFeatureAccessInputModel as r,CheckFeatureAccessOutputModel as i,GetUsageSummaryInputModel as a,GetUsageSummaryOutputModel as o,RecordUsageInputModel as s,RecordUsageOutputModel as c,SubscriptionModel as ee,UsageRecordedPayloadModel as te,UsageSummaryModel as ne}from"./billing/billing.schema.js";import{CheckFeatureAccessContract as re,GetSubscriptionContract as l,GetUsageSummaryContract as u,RecordUsageContract as d}from"./billing/billing.contracts.js";import{SubscriptionChangedEvent as f,UsageLimitReachedEvent as p,UsageRecordedEvent as m}from"./billing/billing.event.js";import{BillingUsageEntity as h,SubscriptionEntity as g,SubscriptionStatusEnum as _,UsageLimitEntity as v}from"./billing/billing.entity.js";import{SubscriptionPresentation as y,UsageDashboardPresentation as b}from"./billing/billing.presentation.js";import{mockCheckFeatureAccessHandler as x,mockGetSubscriptionHandler as S,mockGetUsageSummaryHandler as C,mockRecordUsageHandler as w}from"./billing/billing.handler.js";import"./billing/index.js";import{ProjectStatusFilterEnum as T,ProjectStatusSchemaEnum as E}from"./project/project.enum.js";import{CreateProjectInputModel as D,DeleteProjectInputModel as O,DeleteProjectOutputModel as k,GetProjectInputModel as A,ListProjectsInputModel as j,ListProjectsOutputModel as M,ProjectDeletedPayloadModel as N,ProjectModel as P,UpdateProjectInputModel as F}from"./project/project.schema.js";import{CreateProjectContract as ie,DeleteProjectContract as I,GetProjectContract as L,ListProjectsContract as R,UpdateProjectContract as z}from"./project/project.contracts.js";import{ProjectArchivedEvent as B,ProjectCreatedEvent as V,ProjectDeletedEvent as H,ProjectUpdatedEvent as U}from"./project/project.event.js";import{ProjectEntity as W,ProjectMemberEntity as G,ProjectStatusEnum as K}from"./project/project.entity.js";import{ProjectDetailPresentation as q,ProjectListPresentation as J}from"./project/project.presentation.js";import{mockCreateProjectHandler as Y,mockDeleteProjectHandler as ae,mockGetProjectHandler as oe,mockListProjectsHandler as se,mockUpdateProjectHandler as ce}from"./project/project.handler.js";import"./project/index.js";import{SettingsScopeEnum as X}from"./settings/settings.enum.js";import{FeatureFlagEntity as Z,SettingsEntity as Q}from"./settings/settings.entity.js";import"./settings/index.js";import{SaasDashboardPresentation as le,SettingsPanelPresentation as ue}from"./dashboard/dashboard.presentation.js";import{SaasBoilerplateFeature as de}from"./saas-boilerplate.feature.js";import"./docs/index.js";import{identityRbacSchemaContribution as fe}from"@lssm/lib.identity-rbac";import{jobsSchemaContribution as pe}from"@lssm/lib.jobs";import{auditTrailSchemaContribution as me}from"@lssm/module.audit-trail";import{notificationsSchemaContribution as he}from"@lssm/module.notifications";const $={moduleId:`@lssm/example.saas-boilerplate`,entities:[W,G,Q,Z,g,h,v],enums:[K,X,_]},ge={modules:[fe,pe,me,he,$],provider:`postgresql`,outputPath:`./prisma/schema/generated.prisma`};export{h as BillingUsageEntity,re as CheckFeatureAccessContract,r as CheckFeatureAccessInputModel,i as CheckFeatureAccessOutputModel,ie as CreateProjectContract,D as CreateProjectInputModel,I as DeleteProjectContract,O as DeleteProjectInputModel,k as DeleteProjectOutputModel,t as FeatureAccessReasonEnum,Z as FeatureFlagEntity,L as GetProjectContract,A as GetProjectInputModel,l as GetSubscriptionContract,u as GetUsageSummaryContract,a as GetUsageSummaryInputModel,o as GetUsageSummaryOutputModel,R as ListProjectsContract,j as ListProjectsInputModel,M as ListProjectsOutputModel,B as ProjectArchivedEvent,V as ProjectCreatedEvent,H as ProjectDeletedEvent,N as ProjectDeletedPayloadModel,q as ProjectDetailPresentation,W as ProjectEntity,J as ProjectListPresentation,G as ProjectMemberEntity,P as ProjectModel,K as ProjectStatusEnum,T as ProjectStatusFilterEnum,E as ProjectStatusSchemaEnum,U as ProjectUpdatedEvent,d as RecordUsageContract,s as RecordUsageInputModel,c as RecordUsageOutputModel,de as SaasBoilerplateFeature,le as SaasDashboardPresentation,Q as SettingsEntity,ue as SettingsPanelPresentation,X as SettingsScopeEnum,f as SubscriptionChangedEvent,g as SubscriptionEntity,ee as SubscriptionModel,y as SubscriptionPresentation,_ as SubscriptionStatusEnum,n as SubscriptionStatusSchemaEnum,z as UpdateProjectContract,F as UpdateProjectInputModel,b as UsageDashboardPresentation,v as UsageLimitEntity,p as UsageLimitReachedEvent,m as UsageRecordedEvent,te as UsageRecordedPayloadModel,ne as UsageSummaryModel,e as example,x as mockCheckFeatureAccessHandler,Y as mockCreateProjectHandler,ae as mockDeleteProjectHandler,oe as mockGetProjectHandler,S as mockGetSubscriptionHandler,C as mockGetUsageSummaryHandler,se as mockListProjectsHandler,w as mockRecordUsageHandler,ce as mockUpdateProjectHandler,$ as saasBoilerplateSchemaContribution,ge as schemaComposition};
@@ -1 +1 @@
1
- import{ProjectModel as e}from"./project.schema.js";const t={meta:{name:`saas.project.list`,version:1,description:`List view of projects with status, tags, and last updated info`,domain:`saas-boilerplate`,owners:[`saas-team`],tags:[`project`,`list`,`dashboard`]},source:{type:`component`,framework:`react`,componentKey:`ProjectListView`,props:e},targets:[`react`,`markdown`,`application/json`],policy:{flags:[`saas.projects.enabled`]}},n={meta:{name:`saas.project.detail`,version:1,description:`Detailed view of a project with settings and activity`,domain:`saas-boilerplate`,owners:[`saas-team`],tags:[`project`,`detail`]},source:{type:`component`,framework:`react`,componentKey:`ProjectDetailView`},targets:[`react`,`markdown`],policy:{flags:[`saas.projects.enabled`]}};export{n as ProjectDetailPresentation,t as ProjectListPresentation};
1
+ import{ProjectModel as e}from"./project.schema.js";const t={meta:{name:`saas.project.list`,version:1,description:`List view of projects with status, tags, and last updated info`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`project`,`list`,`dashboard`]},source:{type:`component`,framework:`react`,componentKey:`ProjectListView`,props:e},targets:[`react`,`markdown`,`application/json`],policy:{flags:[`saas.projects.enabled`]}},n={meta:{name:`saas.project.detail`,version:1,description:`Detailed view of a project with settings and activity`,domain:`saas-boilerplate`,owners:[`@saas-team`],tags:[`project`,`detail`]},source:{type:`component`,framework:`react`,componentKey:`ProjectDetailView`},targets:[`react`,`markdown`],policy:{flags:[`saas.projects.enabled`]}};export{n as ProjectDetailPresentation,t as ProjectListPresentation};
@@ -0,0 +1 @@
1
+ const e={meta:{key:`saas-boilerplate`,title:`SaaS Boilerplate`,description:`SaaS application foundation with projects, billing, and settings`,domain:`saas`,owners:[`@saas-team`],tags:[`saas`,`projects`,`billing`],stability:`experimental`},operations:[{name:`saas.project.create`,version:1},{name:`saas.project.get`,version:1},{name:`saas.project.update`,version:1},{name:`saas.project.delete`,version:1},{name:`saas.project.list`,version:1},{name:`saas.billing.subscription.get`,version:1},{name:`saas.billing.usage.record`,version:1},{name:`saas.billing.usage.summary`,version:1},{name:`saas.billing.feature.check`,version:1}],events:[{name:`project.created`,version:1},{name:`project.updated`,version:1},{name:`project.deleted`,version:1},{name:`project.archived`,version:1},{name:`billing.usage.recorded`,version:1},{name:`billing.subscription.changed`,version:1},{name:`billing.limit.reached`,version:1}],presentations:[{name:`saas.dashboard`,version:1},{name:`saas.project.list`,version:1},{name:`saas.project.detail`,version:1},{name:`saas.billing.subscription`,version:1},{name:`saas.billing.usage`,version:1},{name:`saas.settings`,version:1}],opToPresentation:[{op:{name:`saas.project.list`,version:1},pres:{name:`saas.project.list`,version:1}},{op:{name:`saas.project.get`,version:1},pres:{name:`saas.project.detail`,version:1}},{op:{name:`saas.billing.subscription.get`,version:1},pres:{name:`saas.billing.subscription`,version:1}},{op:{name:`saas.billing.usage.summary`,version:1},pres:{name:`saas.billing.usage`,version:1}}],presentationsTargets:[{name:`saas.dashboard`,version:1,targets:[`react`,`markdown`]},{name:`saas.project.list`,version:1,targets:[`react`,`markdown`,`application/json`]},{name:`saas.billing.subscription`,version:1,targets:[`react`,`markdown`]},{name:`saas.billing.usage`,version:1,targets:[`react`,`markdown`]}],capabilities:{requires:[{key:`identity`,version:1},{key:`audit-trail`,version:1},{key:`notifications`,version:1}]}};export{e as SaasBoilerplateFeature};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/example.saas-boilerplate",
3
- "version": "0.0.0-canary-20251216033905",
3
+ "version": "0.0.0-canary-20251216062412",
4
4
  "description": "SaaS Boilerplate - Users, Orgs, Projects, Billing, Settings",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -30,7 +30,7 @@
30
30
  "./project/project.handler": "./src/project/project.handler.ts",
31
31
  "./project/project.presentation": "./src/project/project.presentation.ts",
32
32
  "./project/project.schema": "./src/project/project.schema.ts",
33
- "./saas.feature": "./src/saas.feature.ts",
33
+ "./saas-boilerplate.feature": "./src/saas-boilerplate.feature.ts",
34
34
  "./settings": "./src/settings/index.ts",
35
35
  "./settings/settings.entity": "./src/settings/settings.entity.ts",
36
36
  "./settings/settings.enum": "./src/settings/settings.enum.ts",
@@ -91,7 +91,7 @@
91
91
  "./project/project.handler": "./dist/project/project.handler.js",
92
92
  "./project/project.presentation": "./dist/project/project.presentation.js",
93
93
  "./project/project.schema": "./dist/project/project.schema.js",
94
- "./saas.feature": "./dist/saas.feature.js",
94
+ "./saas-boilerplate.feature": "./dist/saas-boilerplate.feature.js",
95
95
  "./settings": "./dist/settings/index.js",
96
96
  "./settings/settings.entity": "./dist/settings/settings.entity.js",
97
97
  "./settings/settings.enum": "./dist/settings/settings.enum.js",
@@ -10,7 +10,7 @@ import {
10
10
  CheckFeatureAccessOutputModel,
11
11
  } from './billing.schema';
12
12
 
13
- const OWNERS = ['example.saas-boilerplate'] as const;
13
+ const OWNERS = ['@example.saas-boilerplate'] as const;
14
14
 
15
15
  /**
16
16
  * Get subscription status.
@@ -10,7 +10,7 @@ export const SubscriptionPresentation: PresentationDescriptorV2 = {
10
10
  description:
11
11
  'Subscription status with plan info, limits, and current usage',
12
12
  domain: 'saas-boilerplate',
13
- owners: ['saas-team'],
13
+ owners: ['@saas-team'],
14
14
  tags: ['billing', 'subscription'],
15
15
  },
16
16
  source: {
@@ -33,7 +33,7 @@ export const UsageDashboardPresentation: PresentationDescriptorV2 = {
33
33
  version: 1,
34
34
  description: 'Usage metrics and breakdown by resource type',
35
35
  domain: 'saas-boilerplate',
36
- owners: ['saas-team'],
36
+ owners: ['@saas-team'],
37
37
  tags: ['billing', 'usage', 'metrics'],
38
38
  },
39
39
  source: {
@@ -10,7 +10,7 @@ export const SaasDashboardPresentation: PresentationDescriptorV2 = {
10
10
  description:
11
11
  'Main SaaS dashboard with project overview, usage stats, and quick actions',
12
12
  domain: 'saas-boilerplate',
13
- owners: ['saas-team'],
13
+ owners: ['@saas-team'],
14
14
  tags: ['dashboard', 'overview'],
15
15
  },
16
16
  source: {
@@ -33,7 +33,7 @@ export const SettingsPanelPresentation: PresentationDescriptorV2 = {
33
33
  version: 1,
34
34
  description: 'Organization and user settings panel',
35
35
  domain: 'saas-boilerplate',
36
- owners: ['saas-team'],
36
+ owners: ['@saas-team'],
37
37
  tags: ['settings', 'config'],
38
38
  },
39
39
  source: {
package/src/index.ts CHANGED
@@ -8,7 +8,7 @@ export * from './settings';
8
8
  export * from './dashboard';
9
9
 
10
10
  // Export feature and example metadata
11
- export * from './saas.feature';
11
+ export * from './saas-boilerplate.feature';
12
12
  export { default as example } from './example';
13
13
 
14
14
  // Import docs for registration
@@ -11,7 +11,7 @@ export const ProjectListPresentation: PresentationDescriptorV2 = {
11
11
  description:
12
12
  'List view of projects with status, tags, and last updated info',
13
13
  domain: 'saas-boilerplate',
14
- owners: ['saas-team'],
14
+ owners: ['@saas-team'],
15
15
  tags: ['project', 'list', 'dashboard'],
16
16
  },
17
17
  source: {
@@ -35,7 +35,7 @@ export const ProjectDetailPresentation: PresentationDescriptorV2 = {
35
35
  version: 1,
36
36
  description: 'Detailed view of a project with settings and activity',
37
37
  domain: 'saas-boilerplate',
38
- owners: ['saas-team'],
38
+ owners: ['@saas-team'],
39
39
  tags: ['project', 'detail'],
40
40
  },
41
41
  source: {
@@ -16,7 +16,7 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
16
16
  description:
17
17
  'SaaS application foundation with projects, billing, and settings',
18
18
  domain: 'saas',
19
- owners: ['saas-team'],
19
+ owners: ['@saas-team'],
20
20
  tags: ['saas', 'projects', 'billing'],
21
21
  stability: 'experimental',
22
22
  },
@@ -31,10 +31,10 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
31
31
  { name: 'saas.project.list', version: 1 },
32
32
 
33
33
  // Billing operations
34
- { name: 'saas.billing.getSubscription', version: 1 },
35
- { name: 'saas.billing.recordUsage', version: 1 },
36
- { name: 'saas.billing.getUsageSummary', version: 1 },
37
- { name: 'saas.billing.checkFeatureAccess', version: 1 },
34
+ { name: 'saas.billing.subscription.get', version: 1 },
35
+ { name: 'saas.billing.usage.record', version: 1 },
36
+ { name: 'saas.billing.usage.summary', version: 1 },
37
+ { name: 'saas.billing.feature.check', version: 1 },
38
38
  ],
39
39
 
40
40
  // Events emitted by this feature
@@ -43,11 +43,12 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
43
43
  { name: 'project.created', version: 1 },
44
44
  { name: 'project.updated', version: 1 },
45
45
  { name: 'project.deleted', version: 1 },
46
+ { name: 'project.archived', version: 1 },
46
47
 
47
48
  // Billing events
48
- { name: 'usage.recorded', version: 1 },
49
- { name: 'subscription.updated', version: 1 },
50
- { name: 'limit.exceeded', version: 1 },
49
+ { name: 'billing.usage.recorded', version: 1 },
50
+ { name: 'billing.subscription.changed', version: 1 },
51
+ { name: 'billing.limit.reached', version: 1 },
51
52
  ],
52
53
 
53
54
  // Presentations associated with this feature
@@ -71,11 +72,11 @@ export const SaasBoilerplateFeature: FeatureModuleSpec = {
71
72
  pres: { name: 'saas.project.detail', version: 1 },
72
73
  },
73
74
  {
74
- op: { name: 'saas.billing.getSubscription', version: 1 },
75
+ op: { name: 'saas.billing.subscription.get', version: 1 },
75
76
  pres: { name: 'saas.billing.subscription', version: 1 },
76
77
  },
77
78
  {
78
- op: { name: 'saas.billing.getUsageSummary', version: 1 },
79
+ op: { name: 'saas.billing.usage.summary', version: 1 },
79
80
  pres: { name: 'saas.billing.usage', version: 1 },
80
81
  },
81
82
  ],