digital-products 2.0.1

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.
Files changed (110) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +9 -0
  3. package/README.md +535 -0
  4. package/dist/api.d.ts +99 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +129 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/app.d.ts +79 -0
  9. package/dist/app.d.ts.map +1 -0
  10. package/dist/app.js +107 -0
  11. package/dist/app.js.map +1 -0
  12. package/dist/content.d.ts +58 -0
  13. package/dist/content.d.ts.map +1 -0
  14. package/dist/content.js +78 -0
  15. package/dist/content.js.map +1 -0
  16. package/dist/data.d.ts +67 -0
  17. package/dist/data.d.ts.map +1 -0
  18. package/dist/data.js +107 -0
  19. package/dist/data.js.map +1 -0
  20. package/dist/dataset.d.ts +32 -0
  21. package/dist/dataset.d.ts.map +1 -0
  22. package/dist/dataset.js +50 -0
  23. package/dist/dataset.js.map +1 -0
  24. package/dist/entities/ai.d.ts +53 -0
  25. package/dist/entities/ai.d.ts.map +1 -0
  26. package/dist/entities/ai.js +859 -0
  27. package/dist/entities/ai.js.map +1 -0
  28. package/dist/entities/content.d.ts +52 -0
  29. package/dist/entities/content.d.ts.map +1 -0
  30. package/dist/entities/content.js +784 -0
  31. package/dist/entities/content.js.map +1 -0
  32. package/dist/entities/index.d.ts +112 -0
  33. package/dist/entities/index.d.ts.map +1 -0
  34. package/dist/entities/index.js +89 -0
  35. package/dist/entities/index.js.map +1 -0
  36. package/dist/entities/interfaces.d.ts +67 -0
  37. package/dist/entities/interfaces.d.ts.map +1 -0
  38. package/dist/entities/interfaces.js +930 -0
  39. package/dist/entities/interfaces.js.map +1 -0
  40. package/dist/entities/lifecycle.d.ts +51 -0
  41. package/dist/entities/lifecycle.d.ts.map +1 -0
  42. package/dist/entities/lifecycle.js +804 -0
  43. package/dist/entities/lifecycle.js.map +1 -0
  44. package/dist/entities/products.d.ts +53 -0
  45. package/dist/entities/products.d.ts.map +1 -0
  46. package/dist/entities/products.js +798 -0
  47. package/dist/entities/products.js.map +1 -0
  48. package/dist/entities/web.d.ts +44 -0
  49. package/dist/entities/web.d.ts.map +1 -0
  50. package/dist/entities/web.js +658 -0
  51. package/dist/entities/web.js.map +1 -0
  52. package/dist/index.d.ts +29 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +36 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/mcp.d.ts +101 -0
  57. package/dist/mcp.d.ts.map +1 -0
  58. package/dist/mcp.js +140 -0
  59. package/dist/mcp.js.map +1 -0
  60. package/dist/product.d.ts +37 -0
  61. package/dist/product.d.ts.map +1 -0
  62. package/dist/product.js +54 -0
  63. package/dist/product.js.map +1 -0
  64. package/dist/registry.d.ts +9 -0
  65. package/dist/registry.d.ts.map +1 -0
  66. package/dist/registry.js +32 -0
  67. package/dist/registry.js.map +1 -0
  68. package/dist/sdk.d.ts +99 -0
  69. package/dist/sdk.d.ts.map +1 -0
  70. package/dist/sdk.js +128 -0
  71. package/dist/sdk.js.map +1 -0
  72. package/dist/site.d.ts +85 -0
  73. package/dist/site.d.ts.map +1 -0
  74. package/dist/site.js +113 -0
  75. package/dist/site.js.map +1 -0
  76. package/dist/types.d.ts +528 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +5 -0
  79. package/dist/types.js.map +1 -0
  80. package/example.ts +236 -0
  81. package/package.json +35 -0
  82. package/src/api.ts +140 -0
  83. package/src/app.ts +117 -0
  84. package/src/content.ts +82 -0
  85. package/src/data.ts +129 -0
  86. package/src/dataset.ts +53 -0
  87. package/src/entities/ai.ts +932 -0
  88. package/src/entities/content.ts +851 -0
  89. package/src/entities/index.ts +156 -0
  90. package/src/entities/interfaces.ts +1017 -0
  91. package/src/entities/lifecycle.ts +872 -0
  92. package/src/entities/products.ts +867 -0
  93. package/src/entities/web.ts +719 -0
  94. package/src/index.ts +55 -0
  95. package/src/mcp.ts +163 -0
  96. package/src/product.ts +59 -0
  97. package/src/registry.ts +41 -0
  98. package/src/sdk.ts +148 -0
  99. package/src/site.ts +127 -0
  100. package/src/types.ts +558 -0
  101. package/test/api.test.ts +247 -0
  102. package/test/app.test.ts +220 -0
  103. package/test/content.test.ts +171 -0
  104. package/test/data.test.ts +201 -0
  105. package/test/dataset.test.ts +181 -0
  106. package/test/mcp.test.ts +230 -0
  107. package/test/product.test.ts +200 -0
  108. package/test/sdk.test.ts +236 -0
  109. package/test/site.test.ts +245 -0
  110. package/tsconfig.json +9 -0
@@ -0,0 +1,804 @@
1
+ /**
2
+ * Lifecycle Entity Types (Nouns)
3
+ *
4
+ * Product lifecycle: Version, Release, Deployment, Environment, Feature
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ // =============================================================================
9
+ // Version
10
+ // =============================================================================
11
+ /**
12
+ * Version entity
13
+ *
14
+ * Product version.
15
+ */
16
+ export const Version = {
17
+ singular: 'version',
18
+ plural: 'versions',
19
+ description: 'A version of a digital product',
20
+ properties: {
21
+ // Identity
22
+ number: {
23
+ type: 'string',
24
+ description: 'Version number (semver)',
25
+ },
26
+ name: {
27
+ type: 'string',
28
+ optional: true,
29
+ description: 'Version name/codename',
30
+ },
31
+ description: {
32
+ type: 'string',
33
+ optional: true,
34
+ description: 'Version description',
35
+ },
36
+ // Semver
37
+ major: {
38
+ type: 'number',
39
+ optional: true,
40
+ description: 'Major version',
41
+ },
42
+ minor: {
43
+ type: 'number',
44
+ optional: true,
45
+ description: 'Minor version',
46
+ },
47
+ patch: {
48
+ type: 'number',
49
+ optional: true,
50
+ description: 'Patch version',
51
+ },
52
+ prerelease: {
53
+ type: 'string',
54
+ optional: true,
55
+ description: 'Prerelease identifier',
56
+ examples: ['alpha', 'beta', 'rc'],
57
+ },
58
+ // Changes
59
+ changelog: {
60
+ type: 'string',
61
+ optional: true,
62
+ description: 'Changelog content',
63
+ },
64
+ breakingChanges: {
65
+ type: 'string',
66
+ array: true,
67
+ optional: true,
68
+ description: 'Breaking changes',
69
+ },
70
+ features: {
71
+ type: 'string',
72
+ array: true,
73
+ optional: true,
74
+ description: 'New features',
75
+ },
76
+ fixes: {
77
+ type: 'string',
78
+ array: true,
79
+ optional: true,
80
+ description: 'Bug fixes',
81
+ },
82
+ // Source
83
+ commitHash: {
84
+ type: 'string',
85
+ optional: true,
86
+ description: 'Git commit hash',
87
+ },
88
+ branch: {
89
+ type: 'string',
90
+ optional: true,
91
+ description: 'Git branch',
92
+ },
93
+ tag: {
94
+ type: 'string',
95
+ optional: true,
96
+ description: 'Git tag',
97
+ },
98
+ // Artifacts
99
+ artifactUrl: {
100
+ type: 'string',
101
+ optional: true,
102
+ description: 'Build artifact URL',
103
+ },
104
+ checksum: {
105
+ type: 'string',
106
+ optional: true,
107
+ description: 'Artifact checksum',
108
+ },
109
+ // Dates
110
+ createdAt: {
111
+ type: 'date',
112
+ optional: true,
113
+ description: 'Creation date',
114
+ },
115
+ releasedAt: {
116
+ type: 'date',
117
+ optional: true,
118
+ description: 'Release date',
119
+ },
120
+ deprecatedAt: {
121
+ type: 'date',
122
+ optional: true,
123
+ description: 'Deprecation date',
124
+ },
125
+ // Status
126
+ status: {
127
+ type: 'string',
128
+ description: 'Version status',
129
+ examples: ['draft', 'prerelease', 'released', 'deprecated', 'yanked'],
130
+ },
131
+ stability: {
132
+ type: 'string',
133
+ optional: true,
134
+ description: 'Stability level',
135
+ examples: ['experimental', 'unstable', 'stable', 'lts'],
136
+ },
137
+ },
138
+ relationships: {
139
+ product: {
140
+ type: 'DigitalProduct',
141
+ description: 'Parent product',
142
+ },
143
+ releases: {
144
+ type: 'Release[]',
145
+ description: 'Releases of this version',
146
+ },
147
+ previousVersion: {
148
+ type: 'Version',
149
+ required: false,
150
+ description: 'Previous version',
151
+ },
152
+ },
153
+ actions: [
154
+ 'create',
155
+ 'update',
156
+ 'release',
157
+ 'deprecate',
158
+ 'yank',
159
+ ],
160
+ events: [
161
+ 'created',
162
+ 'updated',
163
+ 'released',
164
+ 'deprecated',
165
+ 'yanked',
166
+ ],
167
+ };
168
+ // =============================================================================
169
+ // Release
170
+ // =============================================================================
171
+ /**
172
+ * Release entity
173
+ *
174
+ * Published release of a version.
175
+ */
176
+ export const Release = {
177
+ singular: 'release',
178
+ plural: 'releases',
179
+ description: 'A published release of a product version',
180
+ properties: {
181
+ // Identity
182
+ name: {
183
+ type: 'string',
184
+ description: 'Release name',
185
+ },
186
+ tag: {
187
+ type: 'string',
188
+ optional: true,
189
+ description: 'Release tag',
190
+ },
191
+ description: {
192
+ type: 'string',
193
+ optional: true,
194
+ description: 'Release description',
195
+ },
196
+ // Type
197
+ type: {
198
+ type: 'string',
199
+ description: 'Release type',
200
+ examples: ['major', 'minor', 'patch', 'hotfix', 'prerelease', 'rc'],
201
+ },
202
+ channel: {
203
+ type: 'string',
204
+ optional: true,
205
+ description: 'Release channel',
206
+ examples: ['stable', 'beta', 'alpha', 'canary', 'nightly'],
207
+ },
208
+ // Notes
209
+ releaseNotes: {
210
+ type: 'string',
211
+ optional: true,
212
+ description: 'Release notes (markdown)',
213
+ },
214
+ highlights: {
215
+ type: 'string',
216
+ array: true,
217
+ optional: true,
218
+ description: 'Release highlights',
219
+ },
220
+ // Assets
221
+ assets: {
222
+ type: 'json',
223
+ optional: true,
224
+ description: 'Release assets',
225
+ },
226
+ downloadUrl: {
227
+ type: 'string',
228
+ optional: true,
229
+ description: 'Download URL',
230
+ },
231
+ downloadCount: {
232
+ type: 'number',
233
+ optional: true,
234
+ description: 'Download count',
235
+ },
236
+ // Compatibility
237
+ minPlatformVersion: {
238
+ type: 'string',
239
+ optional: true,
240
+ description: 'Minimum platform version',
241
+ },
242
+ maxPlatformVersion: {
243
+ type: 'string',
244
+ optional: true,
245
+ description: 'Maximum platform version',
246
+ },
247
+ supportedPlatforms: {
248
+ type: 'string',
249
+ array: true,
250
+ optional: true,
251
+ description: 'Supported platforms',
252
+ },
253
+ // Dates
254
+ publishedAt: {
255
+ type: 'date',
256
+ optional: true,
257
+ description: 'Publication date',
258
+ },
259
+ endOfLifeAt: {
260
+ type: 'date',
261
+ optional: true,
262
+ description: 'End of life date',
263
+ },
264
+ // Status
265
+ status: {
266
+ type: 'string',
267
+ description: 'Release status',
268
+ examples: ['draft', 'published', 'latest', 'superseded', 'retracted'],
269
+ },
270
+ isLatest: {
271
+ type: 'boolean',
272
+ optional: true,
273
+ description: 'Is latest release',
274
+ },
275
+ },
276
+ relationships: {
277
+ version: {
278
+ type: 'Version',
279
+ description: 'Product version',
280
+ },
281
+ deployments: {
282
+ type: 'Deployment[]',
283
+ description: 'Release deployments',
284
+ },
285
+ },
286
+ actions: [
287
+ 'create',
288
+ 'update',
289
+ 'publish',
290
+ 'unpublish',
291
+ 'setLatest',
292
+ 'retract',
293
+ ],
294
+ events: [
295
+ 'created',
296
+ 'updated',
297
+ 'published',
298
+ 'unpublished',
299
+ 'setAsLatest',
300
+ 'retracted',
301
+ ],
302
+ };
303
+ // =============================================================================
304
+ // Deployment
305
+ // =============================================================================
306
+ /**
307
+ * Deployment entity
308
+ *
309
+ * Deployment instance.
310
+ */
311
+ export const Deployment = {
312
+ singular: 'deployment',
313
+ plural: 'deployments',
314
+ description: 'A deployment of a product release',
315
+ properties: {
316
+ // Identity
317
+ id: {
318
+ type: 'string',
319
+ description: 'Deployment ID',
320
+ },
321
+ name: {
322
+ type: 'string',
323
+ optional: true,
324
+ description: 'Deployment name',
325
+ },
326
+ // Target
327
+ environment: {
328
+ type: 'string',
329
+ description: 'Target environment',
330
+ examples: ['production', 'staging', 'preview', 'development'],
331
+ },
332
+ region: {
333
+ type: 'string',
334
+ optional: true,
335
+ description: 'Deployment region',
336
+ },
337
+ // Platform
338
+ platform: {
339
+ type: 'string',
340
+ optional: true,
341
+ description: 'Deployment platform',
342
+ examples: ['vercel', 'netlify', 'cloudflare', 'aws', 'gcp', 'azure', 'kubernetes', 'custom'],
343
+ },
344
+ provider: {
345
+ type: 'string',
346
+ optional: true,
347
+ description: 'Cloud provider',
348
+ },
349
+ // Configuration
350
+ config: {
351
+ type: 'json',
352
+ optional: true,
353
+ description: 'Deployment configuration',
354
+ },
355
+ envVars: {
356
+ type: 'json',
357
+ optional: true,
358
+ description: 'Environment variables (non-sensitive)',
359
+ },
360
+ // URLs
361
+ url: {
362
+ type: 'string',
363
+ optional: true,
364
+ description: 'Deployment URL',
365
+ },
366
+ previewUrl: {
367
+ type: 'string',
368
+ optional: true,
369
+ description: 'Preview URL',
370
+ },
371
+ customDomain: {
372
+ type: 'string',
373
+ optional: true,
374
+ description: 'Custom domain',
375
+ },
376
+ // Resources
377
+ instanceCount: {
378
+ type: 'number',
379
+ optional: true,
380
+ description: 'Number of instances',
381
+ },
382
+ memory: {
383
+ type: 'string',
384
+ optional: true,
385
+ description: 'Memory allocation',
386
+ },
387
+ cpu: {
388
+ type: 'string',
389
+ optional: true,
390
+ description: 'CPU allocation',
391
+ },
392
+ // Build
393
+ buildId: {
394
+ type: 'string',
395
+ optional: true,
396
+ description: 'Build ID',
397
+ },
398
+ buildDurationMs: {
399
+ type: 'number',
400
+ optional: true,
401
+ description: 'Build duration',
402
+ },
403
+ artifactSize: {
404
+ type: 'number',
405
+ optional: true,
406
+ description: 'Artifact size in bytes',
407
+ },
408
+ // Dates
409
+ createdAt: {
410
+ type: 'date',
411
+ optional: true,
412
+ description: 'Creation date',
413
+ },
414
+ deployedAt: {
415
+ type: 'date',
416
+ optional: true,
417
+ description: 'Deployment date',
418
+ },
419
+ expiresAt: {
420
+ type: 'date',
421
+ optional: true,
422
+ description: 'Expiration date (for previews)',
423
+ },
424
+ // Status
425
+ status: {
426
+ type: 'string',
427
+ description: 'Deployment status',
428
+ examples: ['queued', 'building', 'deploying', 'ready', 'failed', 'cancelled', 'expired'],
429
+ },
430
+ isProduction: {
431
+ type: 'boolean',
432
+ optional: true,
433
+ description: 'Is production deployment',
434
+ },
435
+ },
436
+ relationships: {
437
+ product: {
438
+ type: 'DigitalProduct',
439
+ description: 'Product deployed',
440
+ },
441
+ release: {
442
+ type: 'Release',
443
+ required: false,
444
+ description: 'Release deployed',
445
+ },
446
+ environmentRef: {
447
+ type: 'Environment',
448
+ required: false,
449
+ description: 'Target environment',
450
+ },
451
+ },
452
+ actions: [
453
+ 'create',
454
+ 'build',
455
+ 'deploy',
456
+ 'promote',
457
+ 'rollback',
458
+ 'scale',
459
+ 'pause',
460
+ 'resume',
461
+ 'terminate',
462
+ ],
463
+ events: [
464
+ 'created',
465
+ 'built',
466
+ 'deployed',
467
+ 'promoted',
468
+ 'rolledBack',
469
+ 'scaled',
470
+ 'paused',
471
+ 'resumed',
472
+ 'terminated',
473
+ ],
474
+ };
475
+ // =============================================================================
476
+ // Environment
477
+ // =============================================================================
478
+ /**
479
+ * Environment entity
480
+ *
481
+ * Deployment environment.
482
+ */
483
+ export const Environment = {
484
+ singular: 'environment',
485
+ plural: 'environments',
486
+ description: 'A deployment environment',
487
+ properties: {
488
+ // Identity
489
+ name: {
490
+ type: 'string',
491
+ description: 'Environment name',
492
+ },
493
+ slug: {
494
+ type: 'string',
495
+ optional: true,
496
+ description: 'URL-friendly identifier',
497
+ },
498
+ description: {
499
+ type: 'string',
500
+ optional: true,
501
+ description: 'Environment description',
502
+ },
503
+ // Type
504
+ type: {
505
+ type: 'string',
506
+ description: 'Environment type',
507
+ examples: ['production', 'staging', 'preview', 'development', 'testing', 'demo'],
508
+ },
509
+ tier: {
510
+ type: 'string',
511
+ optional: true,
512
+ description: 'Environment tier',
513
+ examples: ['production', 'non-production'],
514
+ },
515
+ // Configuration
516
+ config: {
517
+ type: 'json',
518
+ optional: true,
519
+ description: 'Environment configuration',
520
+ },
521
+ variables: {
522
+ type: 'json',
523
+ optional: true,
524
+ description: 'Environment variables',
525
+ },
526
+ secrets: {
527
+ type: 'string',
528
+ array: true,
529
+ optional: true,
530
+ description: 'Secret names (not values)',
531
+ },
532
+ // Access
533
+ url: {
534
+ type: 'string',
535
+ optional: true,
536
+ description: 'Environment URL',
537
+ },
538
+ protected: {
539
+ type: 'boolean',
540
+ optional: true,
541
+ description: 'Requires authentication',
542
+ },
543
+ allowedIPs: {
544
+ type: 'string',
545
+ array: true,
546
+ optional: true,
547
+ description: 'Allowed IP addresses',
548
+ },
549
+ // Promotion
550
+ promotesTo: {
551
+ type: 'string',
552
+ optional: true,
553
+ description: 'Environment to promote to',
554
+ },
555
+ promotesFrom: {
556
+ type: 'string',
557
+ optional: true,
558
+ description: 'Environment promoted from',
559
+ },
560
+ autoPromote: {
561
+ type: 'boolean',
562
+ optional: true,
563
+ description: 'Auto-promote on success',
564
+ },
565
+ // Resources
566
+ resourceQuota: {
567
+ type: 'json',
568
+ optional: true,
569
+ description: 'Resource quotas',
570
+ },
571
+ scaling: {
572
+ type: 'json',
573
+ optional: true,
574
+ description: 'Scaling configuration',
575
+ },
576
+ // Status
577
+ status: {
578
+ type: 'string',
579
+ description: 'Environment status',
580
+ examples: ['active', 'inactive', 'maintenance', 'deprecated'],
581
+ },
582
+ healthStatus: {
583
+ type: 'string',
584
+ optional: true,
585
+ description: 'Health status',
586
+ examples: ['healthy', 'degraded', 'unhealthy', 'unknown'],
587
+ },
588
+ },
589
+ relationships: {
590
+ product: {
591
+ type: 'DigitalProduct',
592
+ description: 'Parent product',
593
+ },
594
+ deployments: {
595
+ type: 'Deployment[]',
596
+ description: 'Environment deployments',
597
+ },
598
+ currentDeployment: {
599
+ type: 'Deployment',
600
+ required: false,
601
+ description: 'Current active deployment',
602
+ },
603
+ },
604
+ actions: [
605
+ 'create',
606
+ 'update',
607
+ 'configure',
608
+ 'activate',
609
+ 'deactivate',
610
+ 'promote',
611
+ 'lock',
612
+ 'unlock',
613
+ ],
614
+ events: [
615
+ 'created',
616
+ 'updated',
617
+ 'configured',
618
+ 'activated',
619
+ 'deactivated',
620
+ 'promoted',
621
+ 'locked',
622
+ 'unlocked',
623
+ ],
624
+ };
625
+ // =============================================================================
626
+ // Feature
627
+ // =============================================================================
628
+ /**
629
+ * Feature entity
630
+ *
631
+ * Product feature.
632
+ */
633
+ export const Feature = {
634
+ singular: 'feature',
635
+ plural: 'features',
636
+ description: 'A product feature or capability',
637
+ properties: {
638
+ // Identity
639
+ name: {
640
+ type: 'string',
641
+ description: 'Feature name',
642
+ },
643
+ slug: {
644
+ type: 'string',
645
+ optional: true,
646
+ description: 'URL-friendly identifier',
647
+ },
648
+ description: {
649
+ type: 'string',
650
+ optional: true,
651
+ description: 'Feature description',
652
+ },
653
+ // Classification
654
+ type: {
655
+ type: 'string',
656
+ description: 'Feature type',
657
+ examples: ['core', 'premium', 'addon', 'beta', 'experimental', 'deprecated'],
658
+ },
659
+ category: {
660
+ type: 'string',
661
+ optional: true,
662
+ description: 'Feature category',
663
+ },
664
+ // Value
665
+ benefit: {
666
+ type: 'string',
667
+ optional: true,
668
+ description: 'User benefit',
669
+ },
670
+ valueProposition: {
671
+ type: 'string',
672
+ optional: true,
673
+ description: 'Value proposition',
674
+ },
675
+ // Feature Flag
676
+ flagKey: {
677
+ type: 'string',
678
+ optional: true,
679
+ description: 'Feature flag key',
680
+ },
681
+ defaultEnabled: {
682
+ type: 'boolean',
683
+ optional: true,
684
+ description: 'Enabled by default',
685
+ },
686
+ rolloutPercentage: {
687
+ type: 'number',
688
+ optional: true,
689
+ description: 'Rollout percentage (0-100)',
690
+ },
691
+ // Availability
692
+ availability: {
693
+ type: 'string',
694
+ optional: true,
695
+ description: 'Availability',
696
+ examples: ['all', 'paid', 'enterprise', 'beta', 'internal'],
697
+ },
698
+ requiredPlan: {
699
+ type: 'string',
700
+ optional: true,
701
+ description: 'Minimum required plan',
702
+ },
703
+ addOnPrice: {
704
+ type: 'number',
705
+ optional: true,
706
+ description: 'Add-on price if separate',
707
+ },
708
+ // Dependencies
709
+ dependsOn: {
710
+ type: 'string',
711
+ array: true,
712
+ optional: true,
713
+ description: 'Dependent features',
714
+ },
715
+ conflictsWith: {
716
+ type: 'string',
717
+ array: true,
718
+ optional: true,
719
+ description: 'Conflicting features',
720
+ },
721
+ // Lifecycle
722
+ introducedIn: {
723
+ type: 'string',
724
+ optional: true,
725
+ description: 'Version introduced',
726
+ },
727
+ deprecatedIn: {
728
+ type: 'string',
729
+ optional: true,
730
+ description: 'Version deprecated',
731
+ },
732
+ removedIn: {
733
+ type: 'string',
734
+ optional: true,
735
+ description: 'Version removed',
736
+ },
737
+ // Metrics
738
+ adoptionRate: {
739
+ type: 'number',
740
+ optional: true,
741
+ description: 'Adoption rate (0-1)',
742
+ },
743
+ usageCount: {
744
+ type: 'number',
745
+ optional: true,
746
+ description: 'Total usage count',
747
+ },
748
+ // Status
749
+ status: {
750
+ type: 'string',
751
+ description: 'Feature status',
752
+ examples: ['planned', 'development', 'beta', 'ga', 'deprecated', 'removed'],
753
+ },
754
+ },
755
+ relationships: {
756
+ product: {
757
+ type: 'DigitalProduct',
758
+ description: 'Parent product',
759
+ },
760
+ dependentFeatures: {
761
+ type: 'Feature[]',
762
+ description: 'Features that depend on this',
763
+ },
764
+ roadmapItem: {
765
+ type: 'RoadmapItem',
766
+ required: false,
767
+ description: 'Associated roadmap item',
768
+ },
769
+ },
770
+ actions: [
771
+ 'create',
772
+ 'update',
773
+ 'enable',
774
+ 'disable',
775
+ 'rollout',
776
+ 'deprecate',
777
+ 'remove',
778
+ ],
779
+ events: [
780
+ 'created',
781
+ 'updated',
782
+ 'enabled',
783
+ 'disabled',
784
+ 'rolledOut',
785
+ 'deprecated',
786
+ 'removed',
787
+ ],
788
+ };
789
+ // =============================================================================
790
+ // Exports
791
+ // =============================================================================
792
+ export const LifecycleEntities = {
793
+ Version,
794
+ Release,
795
+ Deployment,
796
+ Environment,
797
+ Feature,
798
+ };
799
+ export const LifecycleCategories = {
800
+ versioning: ['Version', 'Release'],
801
+ deployment: ['Deployment', 'Environment'],
802
+ features: ['Feature'],
803
+ };
804
+ //# sourceMappingURL=lifecycle.js.map