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.
- package/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +9 -0
- package/README.md +535 -0
- package/dist/api.d.ts +99 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +129 -0
- package/dist/api.js.map +1 -0
- package/dist/app.d.ts +79 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +107 -0
- package/dist/app.js.map +1 -0
- package/dist/content.d.ts +58 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +78 -0
- package/dist/content.js.map +1 -0
- package/dist/data.d.ts +67 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +107 -0
- package/dist/data.js.map +1 -0
- package/dist/dataset.d.ts +32 -0
- package/dist/dataset.d.ts.map +1 -0
- package/dist/dataset.js +50 -0
- package/dist/dataset.js.map +1 -0
- package/dist/entities/ai.d.ts +53 -0
- package/dist/entities/ai.d.ts.map +1 -0
- package/dist/entities/ai.js +859 -0
- package/dist/entities/ai.js.map +1 -0
- package/dist/entities/content.d.ts +52 -0
- package/dist/entities/content.d.ts.map +1 -0
- package/dist/entities/content.js +784 -0
- package/dist/entities/content.js.map +1 -0
- package/dist/entities/index.d.ts +112 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +89 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/interfaces.d.ts +67 -0
- package/dist/entities/interfaces.d.ts.map +1 -0
- package/dist/entities/interfaces.js +930 -0
- package/dist/entities/interfaces.js.map +1 -0
- package/dist/entities/lifecycle.d.ts +51 -0
- package/dist/entities/lifecycle.d.ts.map +1 -0
- package/dist/entities/lifecycle.js +804 -0
- package/dist/entities/lifecycle.js.map +1 -0
- package/dist/entities/products.d.ts +53 -0
- package/dist/entities/products.d.ts.map +1 -0
- package/dist/entities/products.js +798 -0
- package/dist/entities/products.js.map +1 -0
- package/dist/entities/web.d.ts +44 -0
- package/dist/entities/web.d.ts.map +1 -0
- package/dist/entities/web.js +658 -0
- package/dist/entities/web.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +101 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +140 -0
- package/dist/mcp.js.map +1 -0
- package/dist/product.d.ts +37 -0
- package/dist/product.d.ts.map +1 -0
- package/dist/product.js +54 -0
- package/dist/product.js.map +1 -0
- package/dist/registry.d.ts +9 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +32 -0
- package/dist/registry.js.map +1 -0
- package/dist/sdk.d.ts +99 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +128 -0
- package/dist/sdk.js.map +1 -0
- package/dist/site.d.ts +85 -0
- package/dist/site.d.ts.map +1 -0
- package/dist/site.js +113 -0
- package/dist/site.js.map +1 -0
- package/dist/types.d.ts +528 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/example.ts +236 -0
- package/package.json +35 -0
- package/src/api.ts +140 -0
- package/src/app.ts +117 -0
- package/src/content.ts +82 -0
- package/src/data.ts +129 -0
- package/src/dataset.ts +53 -0
- package/src/entities/ai.ts +932 -0
- package/src/entities/content.ts +851 -0
- package/src/entities/index.ts +156 -0
- package/src/entities/interfaces.ts +1017 -0
- package/src/entities/lifecycle.ts +872 -0
- package/src/entities/products.ts +867 -0
- package/src/entities/web.ts +719 -0
- package/src/index.ts +55 -0
- package/src/mcp.ts +163 -0
- package/src/product.ts +59 -0
- package/src/registry.ts +41 -0
- package/src/sdk.ts +148 -0
- package/src/site.ts +127 -0
- package/src/types.ts +558 -0
- package/test/api.test.ts +247 -0
- package/test/app.test.ts +220 -0
- package/test/content.test.ts +171 -0
- package/test/data.test.ts +201 -0
- package/test/dataset.test.ts +181 -0
- package/test/mcp.test.ts +230 -0
- package/test/product.test.ts +200 -0
- package/test/sdk.test.ts +236 -0
- package/test/site.test.ts +245 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,784 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Entity Types (Nouns)
|
|
3
|
+
*
|
|
4
|
+
* Content and data products: ContentProduct, DataProduct, Dataset, Documentation, Template
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// ContentProduct
|
|
10
|
+
// =============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* ContentProduct entity
|
|
13
|
+
*
|
|
14
|
+
* Text/media content as a product.
|
|
15
|
+
*/
|
|
16
|
+
export const ContentProduct = {
|
|
17
|
+
singular: 'content-product',
|
|
18
|
+
plural: 'content-products',
|
|
19
|
+
description: 'A content-based digital product',
|
|
20
|
+
properties: {
|
|
21
|
+
// Identity
|
|
22
|
+
name: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
description: 'Content product name',
|
|
25
|
+
},
|
|
26
|
+
slug: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
optional: true,
|
|
29
|
+
description: 'URL-friendly identifier',
|
|
30
|
+
},
|
|
31
|
+
description: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
optional: true,
|
|
34
|
+
description: 'Product description',
|
|
35
|
+
},
|
|
36
|
+
// Classification
|
|
37
|
+
type: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'Content type',
|
|
40
|
+
examples: ['course', 'book', 'newsletter', 'podcast', 'video-series', 'documentation', 'blog'],
|
|
41
|
+
},
|
|
42
|
+
format: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
description: 'Primary format',
|
|
45
|
+
examples: ['text', 'video', 'audio', 'interactive', 'mixed'],
|
|
46
|
+
},
|
|
47
|
+
category: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
optional: true,
|
|
50
|
+
description: 'Content category',
|
|
51
|
+
},
|
|
52
|
+
// Structure
|
|
53
|
+
contentFormat: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
optional: true,
|
|
56
|
+
description: 'File format',
|
|
57
|
+
examples: ['markdown', 'mdx', 'html', 'json', 'yaml', 'pdf', 'epub'],
|
|
58
|
+
},
|
|
59
|
+
schema: {
|
|
60
|
+
type: 'json',
|
|
61
|
+
optional: true,
|
|
62
|
+
description: 'Content schema for structured content',
|
|
63
|
+
},
|
|
64
|
+
frontmatterSchema: {
|
|
65
|
+
type: 'json',
|
|
66
|
+
optional: true,
|
|
67
|
+
description: 'Frontmatter schema',
|
|
68
|
+
},
|
|
69
|
+
// Publishing
|
|
70
|
+
publishingModel: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
optional: true,
|
|
73
|
+
description: 'Publishing model',
|
|
74
|
+
examples: ['one-time', 'subscription', 'freemium', 'drip', 'cohort'],
|
|
75
|
+
},
|
|
76
|
+
updateFrequency: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
optional: true,
|
|
79
|
+
description: 'Update frequency',
|
|
80
|
+
examples: ['one-time', 'daily', 'weekly', 'monthly', 'on-demand'],
|
|
81
|
+
},
|
|
82
|
+
// Access
|
|
83
|
+
accessModel: {
|
|
84
|
+
type: 'string',
|
|
85
|
+
optional: true,
|
|
86
|
+
description: 'Access model',
|
|
87
|
+
examples: ['free', 'paid', 'subscription', 'gated', 'preview'],
|
|
88
|
+
},
|
|
89
|
+
previewPercent: {
|
|
90
|
+
type: 'number',
|
|
91
|
+
optional: true,
|
|
92
|
+
description: 'Percentage available for preview',
|
|
93
|
+
},
|
|
94
|
+
// Metrics
|
|
95
|
+
itemCount: {
|
|
96
|
+
type: 'number',
|
|
97
|
+
optional: true,
|
|
98
|
+
description: 'Number of content items',
|
|
99
|
+
},
|
|
100
|
+
totalDuration: {
|
|
101
|
+
type: 'number',
|
|
102
|
+
optional: true,
|
|
103
|
+
description: 'Total duration in minutes (for video/audio)',
|
|
104
|
+
},
|
|
105
|
+
wordCount: {
|
|
106
|
+
type: 'number',
|
|
107
|
+
optional: true,
|
|
108
|
+
description: 'Total word count',
|
|
109
|
+
},
|
|
110
|
+
// Status
|
|
111
|
+
status: {
|
|
112
|
+
type: 'string',
|
|
113
|
+
description: 'Product status',
|
|
114
|
+
examples: ['draft', 'production', 'published', 'archived'],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
relationships: {
|
|
118
|
+
product: {
|
|
119
|
+
type: 'DigitalProduct',
|
|
120
|
+
description: 'Parent product',
|
|
121
|
+
},
|
|
122
|
+
items: {
|
|
123
|
+
type: 'ContentItem[]',
|
|
124
|
+
description: 'Content items',
|
|
125
|
+
},
|
|
126
|
+
categories: {
|
|
127
|
+
type: 'Category[]',
|
|
128
|
+
description: 'Content categories',
|
|
129
|
+
},
|
|
130
|
+
authors: {
|
|
131
|
+
type: 'Author[]',
|
|
132
|
+
description: 'Content authors',
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
actions: [
|
|
136
|
+
'create',
|
|
137
|
+
'update',
|
|
138
|
+
'addItem',
|
|
139
|
+
'removeItem',
|
|
140
|
+
'publish',
|
|
141
|
+
'unpublish',
|
|
142
|
+
'archive',
|
|
143
|
+
],
|
|
144
|
+
events: [
|
|
145
|
+
'created',
|
|
146
|
+
'updated',
|
|
147
|
+
'itemAdded',
|
|
148
|
+
'itemRemoved',
|
|
149
|
+
'published',
|
|
150
|
+
'unpublished',
|
|
151
|
+
'archived',
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
// =============================================================================
|
|
155
|
+
// DataProduct
|
|
156
|
+
// =============================================================================
|
|
157
|
+
/**
|
|
158
|
+
* DataProduct entity
|
|
159
|
+
*
|
|
160
|
+
* Structured data as a product.
|
|
161
|
+
*/
|
|
162
|
+
export const DataProduct = {
|
|
163
|
+
singular: 'data-product',
|
|
164
|
+
plural: 'data-products',
|
|
165
|
+
description: 'A data-based digital product',
|
|
166
|
+
properties: {
|
|
167
|
+
// Identity
|
|
168
|
+
name: {
|
|
169
|
+
type: 'string',
|
|
170
|
+
description: 'Data product name',
|
|
171
|
+
},
|
|
172
|
+
slug: {
|
|
173
|
+
type: 'string',
|
|
174
|
+
optional: true,
|
|
175
|
+
description: 'URL-friendly identifier',
|
|
176
|
+
},
|
|
177
|
+
description: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
optional: true,
|
|
180
|
+
description: 'Product description',
|
|
181
|
+
},
|
|
182
|
+
// Classification
|
|
183
|
+
type: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
description: 'Data product type',
|
|
186
|
+
examples: ['raw', 'derived', 'aggregated', 'enriched', 'curated', 'synthetic'],
|
|
187
|
+
},
|
|
188
|
+
domain: {
|
|
189
|
+
type: 'string',
|
|
190
|
+
optional: true,
|
|
191
|
+
description: 'Data domain',
|
|
192
|
+
},
|
|
193
|
+
// Schema
|
|
194
|
+
schema: {
|
|
195
|
+
type: 'json',
|
|
196
|
+
description: 'Data schema',
|
|
197
|
+
},
|
|
198
|
+
format: {
|
|
199
|
+
type: 'string',
|
|
200
|
+
optional: true,
|
|
201
|
+
description: 'Data format',
|
|
202
|
+
examples: ['json', 'csv', 'parquet', 'avro', 'protobuf', 'arrow'],
|
|
203
|
+
},
|
|
204
|
+
// Storage
|
|
205
|
+
storageType: {
|
|
206
|
+
type: 'string',
|
|
207
|
+
optional: true,
|
|
208
|
+
description: 'Storage backend',
|
|
209
|
+
examples: ['postgres', 'mysql', 'mongo', 'clickhouse', 's3', 'bigquery', 'snowflake'],
|
|
210
|
+
},
|
|
211
|
+
sizeBytes: {
|
|
212
|
+
type: 'number',
|
|
213
|
+
optional: true,
|
|
214
|
+
description: 'Data size in bytes',
|
|
215
|
+
},
|
|
216
|
+
recordCount: {
|
|
217
|
+
type: 'number',
|
|
218
|
+
optional: true,
|
|
219
|
+
description: 'Number of records',
|
|
220
|
+
},
|
|
221
|
+
// Quality
|
|
222
|
+
qualityScore: {
|
|
223
|
+
type: 'number',
|
|
224
|
+
optional: true,
|
|
225
|
+
description: 'Data quality score (0-100)',
|
|
226
|
+
},
|
|
227
|
+
freshness: {
|
|
228
|
+
type: 'string',
|
|
229
|
+
optional: true,
|
|
230
|
+
description: 'Data freshness',
|
|
231
|
+
examples: ['realtime', 'hourly', 'daily', 'weekly', 'static'],
|
|
232
|
+
},
|
|
233
|
+
lastUpdatedAt: {
|
|
234
|
+
type: 'date',
|
|
235
|
+
optional: true,
|
|
236
|
+
description: 'Last data update',
|
|
237
|
+
},
|
|
238
|
+
// Access
|
|
239
|
+
accessMethod: {
|
|
240
|
+
type: 'string',
|
|
241
|
+
optional: true,
|
|
242
|
+
description: 'Access method',
|
|
243
|
+
examples: ['api', 'download', 'stream', 'query', 'embedded'],
|
|
244
|
+
},
|
|
245
|
+
apiEndpoint: {
|
|
246
|
+
type: 'string',
|
|
247
|
+
optional: true,
|
|
248
|
+
description: 'API endpoint for access',
|
|
249
|
+
},
|
|
250
|
+
// Governance
|
|
251
|
+
owner: {
|
|
252
|
+
type: 'string',
|
|
253
|
+
optional: true,
|
|
254
|
+
description: 'Data owner',
|
|
255
|
+
},
|
|
256
|
+
classification: {
|
|
257
|
+
type: 'string',
|
|
258
|
+
optional: true,
|
|
259
|
+
description: 'Data classification',
|
|
260
|
+
examples: ['public', 'internal', 'confidential', 'restricted', 'pii'],
|
|
261
|
+
},
|
|
262
|
+
retentionDays: {
|
|
263
|
+
type: 'number',
|
|
264
|
+
optional: true,
|
|
265
|
+
description: 'Data retention period in days',
|
|
266
|
+
},
|
|
267
|
+
// Status
|
|
268
|
+
status: {
|
|
269
|
+
type: 'string',
|
|
270
|
+
description: 'Product status',
|
|
271
|
+
examples: ['draft', 'active', 'deprecated', 'archived'],
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
relationships: {
|
|
275
|
+
product: {
|
|
276
|
+
type: 'DigitalProduct',
|
|
277
|
+
description: 'Parent product',
|
|
278
|
+
},
|
|
279
|
+
datasets: {
|
|
280
|
+
type: 'Dataset[]',
|
|
281
|
+
description: 'Associated datasets',
|
|
282
|
+
},
|
|
283
|
+
api: {
|
|
284
|
+
type: 'API',
|
|
285
|
+
required: false,
|
|
286
|
+
description: 'Access API',
|
|
287
|
+
},
|
|
288
|
+
lineage: {
|
|
289
|
+
type: 'DataProduct[]',
|
|
290
|
+
description: 'Source data products',
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
actions: [
|
|
294
|
+
'create',
|
|
295
|
+
'update',
|
|
296
|
+
'ingest',
|
|
297
|
+
'transform',
|
|
298
|
+
'publish',
|
|
299
|
+
'unpublish',
|
|
300
|
+
'deprecate',
|
|
301
|
+
'archive',
|
|
302
|
+
],
|
|
303
|
+
events: [
|
|
304
|
+
'created',
|
|
305
|
+
'updated',
|
|
306
|
+
'ingested',
|
|
307
|
+
'transformed',
|
|
308
|
+
'published',
|
|
309
|
+
'unpublished',
|
|
310
|
+
'deprecated',
|
|
311
|
+
'archived',
|
|
312
|
+
],
|
|
313
|
+
};
|
|
314
|
+
// =============================================================================
|
|
315
|
+
// Dataset
|
|
316
|
+
// =============================================================================
|
|
317
|
+
/**
|
|
318
|
+
* Dataset entity
|
|
319
|
+
*
|
|
320
|
+
* Curated data collection.
|
|
321
|
+
*/
|
|
322
|
+
export const Dataset = {
|
|
323
|
+
singular: 'dataset',
|
|
324
|
+
plural: 'datasets',
|
|
325
|
+
description: 'A curated collection of data',
|
|
326
|
+
properties: {
|
|
327
|
+
// Identity
|
|
328
|
+
name: {
|
|
329
|
+
type: 'string',
|
|
330
|
+
description: 'Dataset name',
|
|
331
|
+
},
|
|
332
|
+
slug: {
|
|
333
|
+
type: 'string',
|
|
334
|
+
optional: true,
|
|
335
|
+
description: 'URL-friendly identifier',
|
|
336
|
+
},
|
|
337
|
+
description: {
|
|
338
|
+
type: 'string',
|
|
339
|
+
optional: true,
|
|
340
|
+
description: 'Dataset description',
|
|
341
|
+
},
|
|
342
|
+
// Schema
|
|
343
|
+
schema: {
|
|
344
|
+
type: 'json',
|
|
345
|
+
description: 'Dataset schema',
|
|
346
|
+
},
|
|
347
|
+
format: {
|
|
348
|
+
type: 'string',
|
|
349
|
+
description: 'Data format',
|
|
350
|
+
examples: ['json', 'jsonl', 'csv', 'parquet', 'arrow', 'avro'],
|
|
351
|
+
},
|
|
352
|
+
// Size
|
|
353
|
+
recordCount: {
|
|
354
|
+
type: 'number',
|
|
355
|
+
optional: true,
|
|
356
|
+
description: 'Number of records',
|
|
357
|
+
},
|
|
358
|
+
sizeBytes: {
|
|
359
|
+
type: 'number',
|
|
360
|
+
optional: true,
|
|
361
|
+
description: 'Size in bytes',
|
|
362
|
+
},
|
|
363
|
+
columnCount: {
|
|
364
|
+
type: 'number',
|
|
365
|
+
optional: true,
|
|
366
|
+
description: 'Number of columns/fields',
|
|
367
|
+
},
|
|
368
|
+
// Source
|
|
369
|
+
source: {
|
|
370
|
+
type: 'string',
|
|
371
|
+
optional: true,
|
|
372
|
+
description: 'Data source',
|
|
373
|
+
},
|
|
374
|
+
sourceUrl: {
|
|
375
|
+
type: 'string',
|
|
376
|
+
optional: true,
|
|
377
|
+
description: 'Source URL',
|
|
378
|
+
},
|
|
379
|
+
collectionMethod: {
|
|
380
|
+
type: 'string',
|
|
381
|
+
optional: true,
|
|
382
|
+
description: 'How data was collected',
|
|
383
|
+
examples: ['scraped', 'api', 'manual', 'generated', 'aggregated'],
|
|
384
|
+
},
|
|
385
|
+
// Temporal
|
|
386
|
+
startDate: {
|
|
387
|
+
type: 'date',
|
|
388
|
+
optional: true,
|
|
389
|
+
description: 'Data start date',
|
|
390
|
+
},
|
|
391
|
+
endDate: {
|
|
392
|
+
type: 'date',
|
|
393
|
+
optional: true,
|
|
394
|
+
description: 'Data end date',
|
|
395
|
+
},
|
|
396
|
+
updateFrequency: {
|
|
397
|
+
type: 'string',
|
|
398
|
+
optional: true,
|
|
399
|
+
description: 'Update frequency',
|
|
400
|
+
examples: ['static', 'daily', 'weekly', 'monthly', 'realtime'],
|
|
401
|
+
},
|
|
402
|
+
// License
|
|
403
|
+
license: {
|
|
404
|
+
type: 'string',
|
|
405
|
+
optional: true,
|
|
406
|
+
description: 'Data license',
|
|
407
|
+
examples: ['mit', 'cc-by', 'cc-by-sa', 'cc0', 'proprietary', 'custom'],
|
|
408
|
+
},
|
|
409
|
+
usageRestrictions: {
|
|
410
|
+
type: 'string',
|
|
411
|
+
array: true,
|
|
412
|
+
optional: true,
|
|
413
|
+
description: 'Usage restrictions',
|
|
414
|
+
},
|
|
415
|
+
// Distribution
|
|
416
|
+
downloadUrl: {
|
|
417
|
+
type: 'string',
|
|
418
|
+
optional: true,
|
|
419
|
+
description: 'Download URL',
|
|
420
|
+
},
|
|
421
|
+
downloadFormats: {
|
|
422
|
+
type: 'string',
|
|
423
|
+
array: true,
|
|
424
|
+
optional: true,
|
|
425
|
+
description: 'Available download formats',
|
|
426
|
+
},
|
|
427
|
+
// Status
|
|
428
|
+
status: {
|
|
429
|
+
type: 'string',
|
|
430
|
+
description: 'Dataset status',
|
|
431
|
+
examples: ['draft', 'published', 'deprecated', 'archived'],
|
|
432
|
+
},
|
|
433
|
+
version: {
|
|
434
|
+
type: 'string',
|
|
435
|
+
optional: true,
|
|
436
|
+
description: 'Dataset version',
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
relationships: {
|
|
440
|
+
dataProduct: {
|
|
441
|
+
type: 'DataProduct',
|
|
442
|
+
required: false,
|
|
443
|
+
description: 'Parent data product',
|
|
444
|
+
},
|
|
445
|
+
versions: {
|
|
446
|
+
type: 'DatasetVersion[]',
|
|
447
|
+
description: 'Dataset versions',
|
|
448
|
+
},
|
|
449
|
+
},
|
|
450
|
+
actions: [
|
|
451
|
+
'create',
|
|
452
|
+
'update',
|
|
453
|
+
'addRecords',
|
|
454
|
+
'removeRecords',
|
|
455
|
+
'publish',
|
|
456
|
+
'version',
|
|
457
|
+
'deprecate',
|
|
458
|
+
'archive',
|
|
459
|
+
],
|
|
460
|
+
events: [
|
|
461
|
+
'created',
|
|
462
|
+
'updated',
|
|
463
|
+
'recordsAdded',
|
|
464
|
+
'recordsRemoved',
|
|
465
|
+
'published',
|
|
466
|
+
'versioned',
|
|
467
|
+
'deprecated',
|
|
468
|
+
'archived',
|
|
469
|
+
],
|
|
470
|
+
};
|
|
471
|
+
// =============================================================================
|
|
472
|
+
// Documentation
|
|
473
|
+
// =============================================================================
|
|
474
|
+
/**
|
|
475
|
+
* Documentation entity
|
|
476
|
+
*
|
|
477
|
+
* Technical documentation product.
|
|
478
|
+
*/
|
|
479
|
+
export const Documentation = {
|
|
480
|
+
singular: 'documentation',
|
|
481
|
+
plural: 'documentations',
|
|
482
|
+
description: 'Technical documentation for a product or API',
|
|
483
|
+
properties: {
|
|
484
|
+
// Identity
|
|
485
|
+
name: {
|
|
486
|
+
type: 'string',
|
|
487
|
+
description: 'Documentation name',
|
|
488
|
+
},
|
|
489
|
+
slug: {
|
|
490
|
+
type: 'string',
|
|
491
|
+
optional: true,
|
|
492
|
+
description: 'URL-friendly identifier',
|
|
493
|
+
},
|
|
494
|
+
description: {
|
|
495
|
+
type: 'string',
|
|
496
|
+
optional: true,
|
|
497
|
+
description: 'Documentation description',
|
|
498
|
+
},
|
|
499
|
+
// Classification
|
|
500
|
+
type: {
|
|
501
|
+
type: 'string',
|
|
502
|
+
description: 'Documentation type',
|
|
503
|
+
examples: ['api', 'guide', 'reference', 'tutorial', 'howto', 'explanation', 'changelog'],
|
|
504
|
+
},
|
|
505
|
+
audience: {
|
|
506
|
+
type: 'string',
|
|
507
|
+
optional: true,
|
|
508
|
+
description: 'Target audience',
|
|
509
|
+
examples: ['developers', 'users', 'admins', 'everyone'],
|
|
510
|
+
},
|
|
511
|
+
// Structure
|
|
512
|
+
format: {
|
|
513
|
+
type: 'string',
|
|
514
|
+
description: 'Content format',
|
|
515
|
+
examples: ['markdown', 'mdx', 'rst', 'html', 'openapi'],
|
|
516
|
+
},
|
|
517
|
+
generator: {
|
|
518
|
+
type: 'string',
|
|
519
|
+
optional: true,
|
|
520
|
+
description: 'Documentation generator',
|
|
521
|
+
examples: ['fumadocs', 'docusaurus', 'mintlify', 'readme', 'gitbook', 'custom'],
|
|
522
|
+
},
|
|
523
|
+
sourceDir: {
|
|
524
|
+
type: 'string',
|
|
525
|
+
optional: true,
|
|
526
|
+
description: 'Source content directory',
|
|
527
|
+
},
|
|
528
|
+
// Hosting
|
|
529
|
+
url: {
|
|
530
|
+
type: 'string',
|
|
531
|
+
optional: true,
|
|
532
|
+
description: 'Documentation URL',
|
|
533
|
+
},
|
|
534
|
+
customDomain: {
|
|
535
|
+
type: 'string',
|
|
536
|
+
optional: true,
|
|
537
|
+
description: 'Custom domain',
|
|
538
|
+
},
|
|
539
|
+
// Features
|
|
540
|
+
searchEnabled: {
|
|
541
|
+
type: 'boolean',
|
|
542
|
+
optional: true,
|
|
543
|
+
description: 'Search functionality enabled',
|
|
544
|
+
},
|
|
545
|
+
versioned: {
|
|
546
|
+
type: 'boolean',
|
|
547
|
+
optional: true,
|
|
548
|
+
description: 'Multi-version support',
|
|
549
|
+
},
|
|
550
|
+
i18n: {
|
|
551
|
+
type: 'boolean',
|
|
552
|
+
optional: true,
|
|
553
|
+
description: 'Internationalization support',
|
|
554
|
+
},
|
|
555
|
+
languages: {
|
|
556
|
+
type: 'string',
|
|
557
|
+
array: true,
|
|
558
|
+
optional: true,
|
|
559
|
+
description: 'Supported languages',
|
|
560
|
+
},
|
|
561
|
+
// Metrics
|
|
562
|
+
pageCount: {
|
|
563
|
+
type: 'number',
|
|
564
|
+
optional: true,
|
|
565
|
+
description: 'Number of pages',
|
|
566
|
+
},
|
|
567
|
+
lastUpdatedAt: {
|
|
568
|
+
type: 'date',
|
|
569
|
+
optional: true,
|
|
570
|
+
description: 'Last content update',
|
|
571
|
+
},
|
|
572
|
+
// Status
|
|
573
|
+
status: {
|
|
574
|
+
type: 'string',
|
|
575
|
+
description: 'Documentation status',
|
|
576
|
+
examples: ['draft', 'published', 'archived'],
|
|
577
|
+
},
|
|
578
|
+
version: {
|
|
579
|
+
type: 'string',
|
|
580
|
+
optional: true,
|
|
581
|
+
description: 'Documentation version',
|
|
582
|
+
},
|
|
583
|
+
},
|
|
584
|
+
relationships: {
|
|
585
|
+
product: {
|
|
586
|
+
type: 'DigitalProduct',
|
|
587
|
+
required: false,
|
|
588
|
+
description: 'Documented product',
|
|
589
|
+
},
|
|
590
|
+
api: {
|
|
591
|
+
type: 'API',
|
|
592
|
+
required: false,
|
|
593
|
+
description: 'Documented API',
|
|
594
|
+
},
|
|
595
|
+
pages: {
|
|
596
|
+
type: 'DocPage[]',
|
|
597
|
+
description: 'Documentation pages',
|
|
598
|
+
},
|
|
599
|
+
},
|
|
600
|
+
actions: [
|
|
601
|
+
'create',
|
|
602
|
+
'update',
|
|
603
|
+
'addPage',
|
|
604
|
+
'removePage',
|
|
605
|
+
'publish',
|
|
606
|
+
'version',
|
|
607
|
+
'archive',
|
|
608
|
+
],
|
|
609
|
+
events: [
|
|
610
|
+
'created',
|
|
611
|
+
'updated',
|
|
612
|
+
'pageAdded',
|
|
613
|
+
'pageRemoved',
|
|
614
|
+
'published',
|
|
615
|
+
'versioned',
|
|
616
|
+
'archived',
|
|
617
|
+
],
|
|
618
|
+
};
|
|
619
|
+
// =============================================================================
|
|
620
|
+
// Template
|
|
621
|
+
// =============================================================================
|
|
622
|
+
/**
|
|
623
|
+
* Template entity
|
|
624
|
+
*
|
|
625
|
+
* Reusable template or starter.
|
|
626
|
+
*/
|
|
627
|
+
export const Template = {
|
|
628
|
+
singular: 'template',
|
|
629
|
+
plural: 'templates',
|
|
630
|
+
description: 'A reusable template or starter project',
|
|
631
|
+
properties: {
|
|
632
|
+
// Identity
|
|
633
|
+
name: {
|
|
634
|
+
type: 'string',
|
|
635
|
+
description: 'Template name',
|
|
636
|
+
},
|
|
637
|
+
slug: {
|
|
638
|
+
type: 'string',
|
|
639
|
+
optional: true,
|
|
640
|
+
description: 'URL-friendly identifier',
|
|
641
|
+
},
|
|
642
|
+
description: {
|
|
643
|
+
type: 'string',
|
|
644
|
+
optional: true,
|
|
645
|
+
description: 'Template description',
|
|
646
|
+
},
|
|
647
|
+
// Classification
|
|
648
|
+
type: {
|
|
649
|
+
type: 'string',
|
|
650
|
+
description: 'Template type',
|
|
651
|
+
examples: ['starter', 'boilerplate', 'scaffold', 'example', 'demo'],
|
|
652
|
+
},
|
|
653
|
+
category: {
|
|
654
|
+
type: 'string',
|
|
655
|
+
optional: true,
|
|
656
|
+
description: 'Template category',
|
|
657
|
+
},
|
|
658
|
+
tags: {
|
|
659
|
+
type: 'string',
|
|
660
|
+
array: true,
|
|
661
|
+
optional: true,
|
|
662
|
+
description: 'Template tags',
|
|
663
|
+
},
|
|
664
|
+
// Technology
|
|
665
|
+
framework: {
|
|
666
|
+
type: 'string',
|
|
667
|
+
optional: true,
|
|
668
|
+
description: 'Primary framework',
|
|
669
|
+
},
|
|
670
|
+
language: {
|
|
671
|
+
type: 'string',
|
|
672
|
+
optional: true,
|
|
673
|
+
description: 'Primary language',
|
|
674
|
+
},
|
|
675
|
+
stack: {
|
|
676
|
+
type: 'string',
|
|
677
|
+
array: true,
|
|
678
|
+
optional: true,
|
|
679
|
+
description: 'Technology stack',
|
|
680
|
+
},
|
|
681
|
+
// Source
|
|
682
|
+
repositoryUrl: {
|
|
683
|
+
type: 'string',
|
|
684
|
+
optional: true,
|
|
685
|
+
description: 'Source repository URL',
|
|
686
|
+
},
|
|
687
|
+
branch: {
|
|
688
|
+
type: 'string',
|
|
689
|
+
optional: true,
|
|
690
|
+
description: 'Git branch',
|
|
691
|
+
},
|
|
692
|
+
// Installation
|
|
693
|
+
installCommand: {
|
|
694
|
+
type: 'string',
|
|
695
|
+
optional: true,
|
|
696
|
+
description: 'Installation command',
|
|
697
|
+
},
|
|
698
|
+
scaffoldTool: {
|
|
699
|
+
type: 'string',
|
|
700
|
+
optional: true,
|
|
701
|
+
description: 'Scaffolding tool',
|
|
702
|
+
examples: ['create-next-app', 'degit', 'tiged', 'custom'],
|
|
703
|
+
},
|
|
704
|
+
// Configuration
|
|
705
|
+
configurable: {
|
|
706
|
+
type: 'boolean',
|
|
707
|
+
optional: true,
|
|
708
|
+
description: 'Has configuration options',
|
|
709
|
+
},
|
|
710
|
+
configSchema: {
|
|
711
|
+
type: 'json',
|
|
712
|
+
optional: true,
|
|
713
|
+
description: 'Configuration schema',
|
|
714
|
+
},
|
|
715
|
+
// Metrics
|
|
716
|
+
useCount: {
|
|
717
|
+
type: 'number',
|
|
718
|
+
optional: true,
|
|
719
|
+
description: 'Number of uses/clones',
|
|
720
|
+
},
|
|
721
|
+
starCount: {
|
|
722
|
+
type: 'number',
|
|
723
|
+
optional: true,
|
|
724
|
+
description: 'GitHub stars',
|
|
725
|
+
},
|
|
726
|
+
// Status
|
|
727
|
+
status: {
|
|
728
|
+
type: 'string',
|
|
729
|
+
description: 'Template status',
|
|
730
|
+
examples: ['draft', 'published', 'deprecated', 'archived'],
|
|
731
|
+
},
|
|
732
|
+
version: {
|
|
733
|
+
type: 'string',
|
|
734
|
+
optional: true,
|
|
735
|
+
description: 'Template version',
|
|
736
|
+
},
|
|
737
|
+
},
|
|
738
|
+
relationships: {
|
|
739
|
+
product: {
|
|
740
|
+
type: 'DigitalProduct',
|
|
741
|
+
required: false,
|
|
742
|
+
description: 'Parent product',
|
|
743
|
+
},
|
|
744
|
+
examples: {
|
|
745
|
+
type: 'Example[]',
|
|
746
|
+
description: 'Usage examples',
|
|
747
|
+
},
|
|
748
|
+
},
|
|
749
|
+
actions: [
|
|
750
|
+
'create',
|
|
751
|
+
'update',
|
|
752
|
+
'publish',
|
|
753
|
+
'clone',
|
|
754
|
+
'fork',
|
|
755
|
+
'deprecate',
|
|
756
|
+
'archive',
|
|
757
|
+
],
|
|
758
|
+
events: [
|
|
759
|
+
'created',
|
|
760
|
+
'updated',
|
|
761
|
+
'published',
|
|
762
|
+
'cloned',
|
|
763
|
+
'forked',
|
|
764
|
+
'deprecated',
|
|
765
|
+
'archived',
|
|
766
|
+
],
|
|
767
|
+
};
|
|
768
|
+
// =============================================================================
|
|
769
|
+
// Exports
|
|
770
|
+
// =============================================================================
|
|
771
|
+
export const ContentEntities = {
|
|
772
|
+
ContentProduct,
|
|
773
|
+
DataProduct,
|
|
774
|
+
Dataset,
|
|
775
|
+
Documentation,
|
|
776
|
+
Template,
|
|
777
|
+
};
|
|
778
|
+
export const ContentCategories = {
|
|
779
|
+
content: ['ContentProduct'],
|
|
780
|
+
data: ['DataProduct', 'Dataset'],
|
|
781
|
+
docs: ['Documentation'],
|
|
782
|
+
templates: ['Template'],
|
|
783
|
+
};
|
|
784
|
+
//# sourceMappingURL=content.js.map
|