@contractspec/example.lifecycle-cli 0.0.0-canary-20260113170453
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$colon$bundle.log +25 -0
- package/.turbo/turbo-build.log +26 -0
- package/CHANGELOG.md +378 -0
- package/LICENSE +21 -0
- package/README.md +15 -0
- package/demo.ts +14 -0
- package/dist/demo.d.ts +5 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +49 -0
- package/dist/demo.js.map +1 -0
- package/dist/docs/index.d.ts +1 -0
- package/dist/docs/index.js +1 -0
- package/dist/docs/lifecycle-cli.docblock.d.ts +1 -0
- package/dist/docs/lifecycle-cli.docblock.js +33 -0
- package/dist/docs/lifecycle-cli.docblock.js.map +1 -0
- package/dist/example.d.ts +7 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +45 -0
- package/dist/example.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +5 -0
- package/example.ts +1 -0
- package/package.json +59 -0
- package/src/demo.ts +69 -0
- package/src/docs/index.ts +1 -0
- package/src/docs/lifecycle-cli.docblock.ts +28 -0
- package/src/example.ts +32 -0
- package/src/index.ts +3 -0
- package/tsconfig.json +11 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/tsdown.config.js +6 -0
package/example.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './src/example';
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@contractspec/example.lifecycle-cli",
|
|
3
|
+
"version": "0.0.0-canary-20260113170453",
|
|
4
|
+
"description": "Lifecycle CLI demo (example): run lifecycle assessment without an HTTP server.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js",
|
|
9
|
+
"./demo": "./dist/demo.js",
|
|
10
|
+
"./docs": "./dist/docs/index.js",
|
|
11
|
+
"./docs/lifecycle-cli.docblock": "./dist/docs/lifecycle-cli.docblock.js",
|
|
12
|
+
"./example": "./dist/example.js",
|
|
13
|
+
"./*": "./*"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
|
|
17
|
+
"publish:pkg:canary": "bun publish:pkg --tag canary",
|
|
18
|
+
"build": "bun build:types && bun build:bundle",
|
|
19
|
+
"build:bundle": "tsdown",
|
|
20
|
+
"build:types": "tsc --noEmit",
|
|
21
|
+
"dev": "bun build:bundle --watch",
|
|
22
|
+
"clean": "rimraf dist .turbo",
|
|
23
|
+
"lint": "bun lint:fix",
|
|
24
|
+
"lint:fix": "eslint src --fix",
|
|
25
|
+
"lint:check": "eslint src",
|
|
26
|
+
"test": "bun test"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@contractspec/bundle.lifecycle-managed": "0.0.0-canary-20260113170453",
|
|
30
|
+
"@contractspec/lib.lifecycle": "0.0.0-canary-20260113170453",
|
|
31
|
+
"@contractspec/lib.contracts": "0.0.0-canary-20260113170453",
|
|
32
|
+
"@contractspec/lib.logger": "0.0.0-canary-20260113170453"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@contractspec/tool.tsdown": "0.0.0-canary-20260113170453",
|
|
36
|
+
"@contractspec/tool.typescript": "0.0.0-canary-20260113170453",
|
|
37
|
+
"tsdown": "^0.19.0",
|
|
38
|
+
"typescript": "^5.9.3"
|
|
39
|
+
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public",
|
|
42
|
+
"exports": {
|
|
43
|
+
".": "./dist/index.js",
|
|
44
|
+
"./demo": "./dist/demo.js",
|
|
45
|
+
"./docs": "./dist/docs/index.js",
|
|
46
|
+
"./docs/lifecycle-cli.docblock": "./dist/docs/lifecycle-cli.docblock.js",
|
|
47
|
+
"./example": "./dist/example.js",
|
|
48
|
+
"./*": "./*"
|
|
49
|
+
},
|
|
50
|
+
"registry": "https://registry.npmjs.org/"
|
|
51
|
+
},
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "https://github.com/lssm-tech/contractspec.git",
|
|
56
|
+
"directory": "packages/examples/lifecycle-cli"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://contractspec.io"
|
|
59
|
+
}
|
package/src/demo.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createLifecycleHandlers,
|
|
3
|
+
LifecycleAssessmentService,
|
|
4
|
+
} from '@contractspec/bundle.lifecycle-managed';
|
|
5
|
+
import {
|
|
6
|
+
CapitalPhase,
|
|
7
|
+
CompanyPhase,
|
|
8
|
+
ProductPhase,
|
|
9
|
+
} from '@contractspec/lib.lifecycle';
|
|
10
|
+
import { Logger, LogLevel } from '@contractspec/lib.logger';
|
|
11
|
+
import type { LoggerConfig } from '@contractspec/lib.logger/types';
|
|
12
|
+
|
|
13
|
+
const logger = new Logger({
|
|
14
|
+
level: process.env.NODE_ENV === 'production' ? LogLevel.INFO : LogLevel.DEBUG,
|
|
15
|
+
environment:
|
|
16
|
+
(process.env.NODE_ENV as LoggerConfig['environment']) || 'development',
|
|
17
|
+
enableColors: process.env.NODE_ENV !== 'production',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export async function runLifecycleCliDemo(): Promise<void> {
|
|
21
|
+
const service = new LifecycleAssessmentService({
|
|
22
|
+
collector: {
|
|
23
|
+
analyticsAdapter: {
|
|
24
|
+
async fetch() {
|
|
25
|
+
return {
|
|
26
|
+
metrics: {
|
|
27
|
+
activeUsers: 32,
|
|
28
|
+
weeklyActiveUsers: 27,
|
|
29
|
+
retentionRate: 0.36,
|
|
30
|
+
monthlyRecurringRevenue: 1800,
|
|
31
|
+
customerCount: 22,
|
|
32
|
+
teamSize: 6,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
questionnaireAdapter: {
|
|
38
|
+
async fetch() {
|
|
39
|
+
return {
|
|
40
|
+
axes: {
|
|
41
|
+
product: ProductPhase.Mvp,
|
|
42
|
+
company: CompanyPhase.TinyTeam,
|
|
43
|
+
capital: CapitalPhase.Seed,
|
|
44
|
+
},
|
|
45
|
+
answers: {
|
|
46
|
+
interviewCount: 28,
|
|
47
|
+
primaryPain: 'Manual onboarding takes 3 hours per customer.',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const handlers = createLifecycleHandlers(service);
|
|
56
|
+
|
|
57
|
+
const response = await handlers.runAssessment({
|
|
58
|
+
body: {
|
|
59
|
+
tenantId: 'demo-tenant',
|
|
60
|
+
completedMilestones: ['stage0-problem-statement'],
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
logger.info('Lifecycle assessment computed', {
|
|
65
|
+
assessment: response.body.assessment,
|
|
66
|
+
topRecommendation: response.body.recommendation.actions[0],
|
|
67
|
+
libraries: response.body.libraries,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './lifecycle-cli.docblock';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DocBlock } from '@contractspec/lib.contracts/docs';
|
|
2
|
+
import { registerDocBlocks } from '@contractspec/lib.contracts/docs';
|
|
3
|
+
|
|
4
|
+
const blocks: DocBlock[] = [
|
|
5
|
+
{
|
|
6
|
+
id: 'docs.examples.lifecycle-cli',
|
|
7
|
+
title: 'Lifecycle CLI (demo)',
|
|
8
|
+
summary:
|
|
9
|
+
'Run a lifecycle assessment from a CLI using the lifecycle-managed bundle (no HTTP server required).',
|
|
10
|
+
kind: 'reference',
|
|
11
|
+
visibility: 'public',
|
|
12
|
+
route: '/docs/examples/lifecycle-cli',
|
|
13
|
+
tags: ['lifecycle', 'cli', 'example'],
|
|
14
|
+
body: `## What this example shows\n- How to call \`LifecycleAssessmentService\` from a Node/Bun script.\n- How to wire mock analytics + questionnaire adapters.\n\n## Run\n- Use the exported function \`runLifecycleCliDemo()\` (or call it from your own CLI wrapper).\n\n## Notes\n- Keep outputs structured; avoid \`console.log\` in production paths.\n- This example is deterministic (fixed inputs → stable output).`,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: 'docs.examples.lifecycle-cli.usage',
|
|
18
|
+
title: 'Lifecycle CLI — Usage',
|
|
19
|
+
summary: 'How to run and tweak the lifecycle assessment demo.',
|
|
20
|
+
kind: 'usage',
|
|
21
|
+
visibility: 'public',
|
|
22
|
+
route: '/docs/examples/lifecycle-cli/usage',
|
|
23
|
+
tags: ['lifecycle', 'cli', 'usage'],
|
|
24
|
+
body: `## Usage\n1) Call \`runLifecycleCliDemo()\`.\n2) Adjust the mock metrics/answers to explore stage outcomes.\n\n## Guardrails\n- Avoid PII in logs.\n- Keep adapters explicit and deterministic for reproducible demos.`,
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
registerDocBlocks(blocks);
|
package/src/example.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineExample } from '@contractspec/lib.contracts';
|
|
2
|
+
|
|
3
|
+
const example = defineExample({
|
|
4
|
+
meta: {
|
|
5
|
+
key: 'lifecycle-cli',
|
|
6
|
+
version: '1.0.0',
|
|
7
|
+
title: 'Lifecycle CLI',
|
|
8
|
+
description:
|
|
9
|
+
'Tiny script showing how to run the lifecycle managed service from a CLI (no HTTP server required).',
|
|
10
|
+
kind: 'script',
|
|
11
|
+
visibility: 'public',
|
|
12
|
+
stability: 'experimental',
|
|
13
|
+
owners: ['@platform.core'],
|
|
14
|
+
tags: ['lifecycle', 'cli', 'demo'],
|
|
15
|
+
},
|
|
16
|
+
docs: {
|
|
17
|
+
rootDocId: 'docs.examples.lifecycle-cli',
|
|
18
|
+
usageDocId: 'docs.examples.lifecycle-cli.usage',
|
|
19
|
+
},
|
|
20
|
+
entrypoints: {
|
|
21
|
+
packageName: '@contractspec/example.lifecycle-cli',
|
|
22
|
+
docs: './docs',
|
|
23
|
+
},
|
|
24
|
+
surfaces: {
|
|
25
|
+
templates: true,
|
|
26
|
+
sandbox: { enabled: true, modes: ['markdown'] },
|
|
27
|
+
studio: { enabled: true, installable: true },
|
|
28
|
+
mcp: { enabled: true },
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export default example;
|
package/src/index.ts
ADDED