@ysk-kit/cli 1.0.0
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/LICENSE +21 -0
- package/dist/add-capability.d.ts +4 -0
- package/dist/add-capability.d.ts.map +1 -0
- package/dist/add-capability.js +104 -0
- package/dist/add-capability.js.map +1 -0
- package/dist/add-module.d.ts +5 -0
- package/dist/add-module.d.ts.map +1 -0
- package/dist/add-module.js +210 -0
- package/dist/add-module.js.map +1 -0
- package/dist/agent-stubs.d.ts +3 -0
- package/dist/agent-stubs.d.ts.map +1 -0
- package/dist/agent-stubs.js +25 -0
- package/dist/agent-stubs.js.map +1 -0
- package/dist/apply-capability.d.ts +3 -0
- package/dist/apply-capability.d.ts.map +1 -0
- package/dist/apply-capability.js +189 -0
- package/dist/apply-capability.js.map +1 -0
- package/dist/capability-catalog.d.ts +25 -0
- package/dist/capability-catalog.d.ts.map +1 -0
- package/dist/capability-catalog.js +123 -0
- package/dist/capability-catalog.js.map +1 -0
- package/dist/capability-patches.d.ts +40 -0
- package/dist/capability-patches.d.ts.map +1 -0
- package/dist/capability-patches.js +616 -0
- package/dist/capability-patches.js.map +1 -0
- package/dist/check-agent.d.ts +9 -0
- package/dist/check-agent.d.ts.map +1 -0
- package/dist/check-agent.js +85 -0
- package/dist/check-agent.js.map +1 -0
- package/dist/generate-openapi.d.ts +2 -0
- package/dist/generate-openapi.d.ts.map +1 -0
- package/dist/generate-openapi.js +52 -0
- package/dist/generate-openapi.js.map +1 -0
- package/dist/help.d.ts +2 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +54 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/merge-prisma.d.ts +15 -0
- package/dist/merge-prisma.d.ts.map +1 -0
- package/dist/merge-prisma.js +90 -0
- package/dist/merge-prisma.js.map +1 -0
- package/dist/patch-text.d.ts +17 -0
- package/dist/patch-text.d.ts.map +1 -0
- package/dist/patch-text.js +72 -0
- package/dist/patch-text.js.map +1 -0
- package/dist/upgrade.d.ts +16 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +110 -0
- package/dist/upgrade.js.map +1 -0
- package/package.json +41 -0
- package/templates/agent/skills/add-capability/SKILL.md +8 -0
- package/templates/agent/skills/add-module/SKILL.md +8 -0
- package/templates/agent/skills/envelope-api/SKILL.md +8 -0
- package/templates/agent/skills/fix-layers/SKILL.md +8 -0
- package/templates/agent/skills/new-product/SKILL.md +8 -0
- package/templates/agent/skills/verify-change/SKILL.md +8 -0
- package/templates/agent/ysk-kit.mdc +6 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/application/billing-service.ts +140 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/domain/billing-port.ts +23 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/domain/subscription-repository.ts +22 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/infra/billing-router.ts +85 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/infra/billing.app.test.ts +273 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/infra/log-billing.ts +31 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/infra/memory-subscription-repository.ts +27 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/infra/prisma-subscription-repository.ts +52 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/infra/stripe-billing.test.ts +127 -0
- package/templates/capabilities/billing/apps/api/src/modules/billing/infra/stripe-billing.ts +160 -0
- package/templates/capabilities/billing/apps/web/src/features/orgs/billing-page.tsx +183 -0
- package/templates/capabilities/billing/packages/contracts/src/api/billing.ts +85 -0
- package/templates/capabilities/billing/packages/contracts/src/dto/billing.ts +59 -0
- package/templates/capabilities/billing/packages/sdk/src/resources/billing.ts +38 -0
- package/templates/capabilities/billing/packages/web-sdk/src/billing-hooks.ts +56 -0
- package/templates/capabilities/llm/apps/api/src/modules/llm/application/llm-service.ts +48 -0
- package/templates/capabilities/llm/apps/api/src/modules/llm/domain/usage-repository.ts +10 -0
- package/templates/capabilities/llm/apps/api/src/modules/llm/infra/llm-router.ts +88 -0
- package/templates/capabilities/llm/apps/api/src/modules/llm/infra/llm.app.test.ts +89 -0
- package/templates/capabilities/llm/apps/api/src/modules/llm/infra/memory-usage-repository.ts +13 -0
- package/templates/capabilities/llm/apps/api/src/modules/llm/infra/prisma-usage-repository.ts +17 -0
- package/templates/capabilities/llm/apps/web/src/features/llm/llm-page.tsx +53 -0
- package/templates/capabilities/llm/packages/contracts/src/api/llm.ts +26 -0
- package/templates/capabilities/llm/packages/contracts/src/dto/llm.ts +33 -0
- package/templates/capabilities/llm/packages/sdk/src/resources/llm.ts +68 -0
- package/templates/capabilities/llm/packages/web-sdk/src/llm-hooks.ts +12 -0
- package/templates/capabilities/push/apps/api/src/modules/devices/application/device-service.ts +42 -0
- package/templates/capabilities/push/apps/api/src/modules/devices/domain/device-repository.ts +22 -0
- package/templates/capabilities/push/apps/api/src/modules/devices/infra/device-router.ts +42 -0
- package/templates/capabilities/push/apps/api/src/modules/devices/infra/device.app.test.ts +34 -0
- package/templates/capabilities/push/apps/api/src/modules/devices/infra/memory-device-repository.ts +33 -0
- package/templates/capabilities/push/apps/api/src/modules/devices/infra/prisma-device-repository.ts +42 -0
- package/templates/capabilities/push/apps/mobile/src/adapters/push.ts +21 -0
- package/templates/capabilities/push/packages/contracts/src/api/devices.ts +33 -0
- package/templates/capabilities/push/packages/contracts/src/dto/device.ts +18 -0
- package/templates/capabilities/push/packages/sdk/src/resources/devices.ts +10 -0
- package/templates/capabilities/team/apps/api/src/modules/organizations/application/organization-service.ts +272 -0
- package/templates/capabilities/team/apps/api/src/modules/organizations/domain/organization-repository.ts +58 -0
- package/templates/capabilities/team/apps/api/src/modules/organizations/infra/memory-organization-repository.ts +141 -0
- package/templates/capabilities/team/apps/api/src/modules/organizations/infra/organization-router.ts +130 -0
- package/templates/capabilities/team/apps/api/src/modules/organizations/infra/organization.app.test.ts +213 -0
- package/templates/capabilities/team/apps/api/src/modules/organizations/infra/prisma-organization-repository.ts +142 -0
- package/templates/capabilities/team/apps/mobile/src/screens/invite-screen.tsx +40 -0
- package/templates/capabilities/team/apps/mobile/src/screens/org-detail-screen.tsx +154 -0
- package/templates/capabilities/team/apps/mobile/src/screens/orgs-screen.tsx +53 -0
- package/templates/capabilities/team/apps/web/src/features/orgs/invite-page.tsx +77 -0
- package/templates/capabilities/team/apps/web/src/features/orgs/org-detail-page.tsx +138 -0
- package/templates/capabilities/team/apps/web/src/features/orgs/orgs-page.tsx +73 -0
- package/templates/capabilities/team/packages/contracts/src/api/organizations.ts +154 -0
- package/templates/capabilities/team/packages/contracts/src/dto/organization.ts +58 -0
- package/templates/capabilities/team/packages/sdk/src/resources/organizations.ts +53 -0
- package/templates/capabilities/team/packages/web-sdk/src/organizations-hooks.ts +80 -0
- package/templates/module/api.ts.tmpl +32 -0
- package/templates/module/application-service.ts.tmpl +9 -0
- package/templates/module/domain-repository.ts.tmpl +15 -0
- package/templates/module/dto.ts.tmpl +21 -0
- package/templates/module/memory-repository.ts.tmpl +36 -0
- package/templates/module/model.prisma.tmpl +8 -0
- package/templates/module/prisma-repository.ts.tmpl +38 -0
- package/templates/module/router.ts.tmpl +32 -0
- package/templates/module/sdk-resource.ts.tmpl +17 -0
- package/templates/module/service.test.ts.tmpl +33 -0
- package/templates/module/web-hooks.ts.tmpl +24 -0
- package/templates/module/web-page.tsx.tmpl +69 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type AgentFinding = {
|
|
2
|
+
rule: 'no-ts-enum' | 'clients-no-prisma' | 'clients-no-raw-fetch';
|
|
3
|
+
file: string;
|
|
4
|
+
line: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const RAW_FETCH_ALLOWLIST: Set<string>;
|
|
7
|
+
export declare const checkAgent: (productRoot: string) => AgentFinding[];
|
|
8
|
+
export declare const formatAgentFindings: (findings: AgentFinding[]) => string;
|
|
9
|
+
//# sourceMappingURL=check-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-agent.d.ts","sourceRoot":"","sources":["../src/check-agent.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,YAAY,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAgBF,eAAO,MAAM,mBAAmB,aAA8D,CAAC;AAyC/F,eAAO,MAAM,UAAU,GAAI,aAAa,MAAM,KAAG,YAAY,EA+B5D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,UAAU,YAAY,EAAE,KAAG,MAI9D,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import { join, relative, sep } from 'node:path';
|
|
3
|
+
const SKIP_DIRS = new Set([
|
|
4
|
+
'node_modules',
|
|
5
|
+
'dist',
|
|
6
|
+
'generated',
|
|
7
|
+
'coverage',
|
|
8
|
+
'.git',
|
|
9
|
+
'.turbo',
|
|
10
|
+
'.expo',
|
|
11
|
+
]);
|
|
12
|
+
const SCAN_ROOTS = ['apps', 'packages', 'modules'];
|
|
13
|
+
const CLIENT_PREFIXES = ['apps/web/', 'apps/admin/', 'apps/mobile/', 'apps/desktop/'];
|
|
14
|
+
export const RAW_FETCH_ALLOWLIST = new Set(['apps/admin/src/features/queues/queues-page.tsx']);
|
|
15
|
+
const ENUM_RE = /\b(?:const\s+)?enum\s+[A-Za-z_][\w]*\s*\{/;
|
|
16
|
+
const PRISMA_RE = /@prisma\/client|@ysk-kit\/db-prisma|apps\/api\/src\/generated|generated\/prisma/;
|
|
17
|
+
const FETCH_RE = /\bfetch\s*\(/;
|
|
18
|
+
const toPosix = (rel) => rel.split(sep).join('/');
|
|
19
|
+
const isSourceFile = (name) => {
|
|
20
|
+
if (name.endsWith('.d.ts'))
|
|
21
|
+
return false;
|
|
22
|
+
if (name.endsWith('.test.ts') || name.endsWith('.test.tsx'))
|
|
23
|
+
return false;
|
|
24
|
+
return name.endsWith('.ts') || name.endsWith('.tsx');
|
|
25
|
+
};
|
|
26
|
+
const isCommentLine = (line) => {
|
|
27
|
+
const trimmed = line.trim();
|
|
28
|
+
return (trimmed.startsWith('//') ||
|
|
29
|
+
trimmed.startsWith('*') ||
|
|
30
|
+
trimmed.startsWith('/*') ||
|
|
31
|
+
trimmed.startsWith('*/'));
|
|
32
|
+
};
|
|
33
|
+
const isClientFile = (rel) => CLIENT_PREFIXES.some((prefix) => rel.startsWith(prefix));
|
|
34
|
+
const walk = (dir, files) => {
|
|
35
|
+
if (!existsSync(dir))
|
|
36
|
+
return;
|
|
37
|
+
for (const entry of readdirSync(dir)) {
|
|
38
|
+
if (SKIP_DIRS.has(entry))
|
|
39
|
+
continue;
|
|
40
|
+
const path = join(dir, entry);
|
|
41
|
+
const stat = statSync(path);
|
|
42
|
+
if (stat.isDirectory()) {
|
|
43
|
+
walk(path, files);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (isSourceFile(entry))
|
|
47
|
+
files.push(path);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
export const checkAgent = (productRoot) => {
|
|
51
|
+
const files = [];
|
|
52
|
+
for (const root of SCAN_ROOTS) {
|
|
53
|
+
walk(join(productRoot, root), files);
|
|
54
|
+
}
|
|
55
|
+
const findings = [];
|
|
56
|
+
for (const abs of files) {
|
|
57
|
+
const file = toPosix(relative(productRoot, abs));
|
|
58
|
+
const client = isClientFile(file);
|
|
59
|
+
const lines = readFileSync(abs, 'utf8').split(/\r?\n/);
|
|
60
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
61
|
+
const line = lines[i] ?? '';
|
|
62
|
+
if (isCommentLine(line))
|
|
63
|
+
continue;
|
|
64
|
+
const at = i + 1;
|
|
65
|
+
if (ENUM_RE.test(line)) {
|
|
66
|
+
findings.push({ rule: 'no-ts-enum', file, line: at });
|
|
67
|
+
}
|
|
68
|
+
if (client && PRISMA_RE.test(line)) {
|
|
69
|
+
findings.push({ rule: 'clients-no-prisma', file, line: at });
|
|
70
|
+
}
|
|
71
|
+
if (client && FETCH_RE.test(line) && !RAW_FETCH_ALLOWLIST.has(file)) {
|
|
72
|
+
findings.push({ rule: 'clients-no-raw-fetch', file, line: at });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
findings.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line || a.rule.localeCompare(b.rule));
|
|
77
|
+
return findings;
|
|
78
|
+
};
|
|
79
|
+
export const formatAgentFindings = (findings) => {
|
|
80
|
+
if (findings.length === 0)
|
|
81
|
+
return 'ysk check agent: ok';
|
|
82
|
+
const width = Math.max(...findings.map((item) => item.rule.length));
|
|
83
|
+
return findings.map((item) => `${item.rule.padEnd(width)} ${item.file}:${item.line}`).join('\n');
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=check-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-agent.js","sourceRoot":"","sources":["../src/check-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-openapi.d.ts","sourceRoot":"","sources":["../src/generate-openapi.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAM9C,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { buildOpenApiDocument } from '@ysk-kit/api-http';
|
|
4
|
+
import { appContract } from '@ysk-kit/contracts';
|
|
5
|
+
export const generateOpenApi = (root) => {
|
|
6
|
+
const spec = buildOpenApiDocument(appContract);
|
|
7
|
+
const out = join(root, 'docs/openapi.yaml');
|
|
8
|
+
mkdirSync(dirname(out), { recursive: true });
|
|
9
|
+
writeFileSync(out, stringifyYaml(spec));
|
|
10
|
+
return out;
|
|
11
|
+
};
|
|
12
|
+
const stringifyYaml = (value, indent = 0) => {
|
|
13
|
+
const pad = ' '.repeat(indent);
|
|
14
|
+
if (value === null || value === undefined)
|
|
15
|
+
return 'null';
|
|
16
|
+
if (typeof value === 'string')
|
|
17
|
+
return JSON.stringify(value);
|
|
18
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
19
|
+
return String(value);
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
if (value.length === 0)
|
|
22
|
+
return '[]';
|
|
23
|
+
return value
|
|
24
|
+
.map((item) => {
|
|
25
|
+
if (item && typeof item === 'object') {
|
|
26
|
+
const body = stringifyYaml(item, indent + 1);
|
|
27
|
+
return `${pad}- ${body.trimStart()}`;
|
|
28
|
+
}
|
|
29
|
+
return `${pad}- ${stringifyYaml(item)}`;
|
|
30
|
+
})
|
|
31
|
+
.join('\n');
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === 'object') {
|
|
34
|
+
const entries = Object.entries(value);
|
|
35
|
+
if (entries.length === 0)
|
|
36
|
+
return '{}';
|
|
37
|
+
return entries
|
|
38
|
+
.map(([k, v]) => {
|
|
39
|
+
const nested = stringifyYaml(v, indent + 1);
|
|
40
|
+
if (v && typeof v === 'object' && !Array.isArray(v)) {
|
|
41
|
+
return `${pad}${k}:\n${nested}`;
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(v) && v.length > 0 && typeof v[0] === 'object') {
|
|
44
|
+
return `${pad}${k}:\n${nested}`;
|
|
45
|
+
}
|
|
46
|
+
return `${pad}${k}: ${nested}`;
|
|
47
|
+
})
|
|
48
|
+
.join('\n');
|
|
49
|
+
}
|
|
50
|
+
return JSON.stringify(value);
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=generate-openapi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-openapi.js","sourceRoot":"","sources":["../src/generate-openapi.ts"],"names":[],"mappings":"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"}
|
package/dist/help.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAmDhB,CAAC"}
|
package/dist/help.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { CAPABILITIES } from './add-capability';
|
|
2
|
+
export const HELP = `ysk — generator for YSK Kit products
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
pnpm ysk add module <kebab-name> [--prisma] [--web] [--no-web]
|
|
6
|
+
pnpm ysk add <capability>
|
|
7
|
+
pnpm ysk generate openapi
|
|
8
|
+
pnpm ysk upgrade [--dry-run]
|
|
9
|
+
pnpm ysk check agent
|
|
10
|
+
|
|
11
|
+
Commands:
|
|
12
|
+
add module <name>
|
|
13
|
+
Scaffold one hexagonal HTTP slice: contract, DTO, memory + Prisma
|
|
14
|
+
repositories, Express + Fastify handlers, SDK resource, web-sdk hooks,
|
|
15
|
+
optional Vite page, and a memory-repo service test.
|
|
16
|
+
--prisma Merge a title/body/authorId Prisma model (off by default)
|
|
17
|
+
--web Write apps/web page (on by default)
|
|
18
|
+
--no-web Skip the Vite page
|
|
19
|
+
Name must be kebab-case (booking, inventory-item). Path is /v1/<name>.
|
|
20
|
+
|
|
21
|
+
add <capability>
|
|
22
|
+
Merge a catalogued platform capability into the product root.
|
|
23
|
+
Capabilities: ${CAPABILITIES.join(', ')}
|
|
24
|
+
Alias: org → team
|
|
25
|
+
billing requires team (Organization model) first.
|
|
26
|
+
llm, team, billing, and push copy source trees when the product does
|
|
27
|
+
not already wire them. A second run is a no-op.
|
|
28
|
+
|
|
29
|
+
generate openapi
|
|
30
|
+
Write docs/openapi.yaml from the ts-rest app contract.
|
|
31
|
+
|
|
32
|
+
upgrade [--dry-run]
|
|
33
|
+
Copy allowlisted guardrail files from this kit checkout into the
|
|
34
|
+
product root (YSK_ROOT). Overwrites AGENTS.md, skills, TypeScript
|
|
35
|
+
and Biome config, and dependency-cruiser. Workspace products also
|
|
36
|
+
receive generated Cursor/Grok skill wrappers (gitignored). Does
|
|
37
|
+
not touch apps, modules, product README, .env, or Prisma.
|
|
38
|
+
--dry-run List will copy / skip without writing
|
|
39
|
+
|
|
40
|
+
check agent
|
|
41
|
+
Scan the product root for typical broken patches: TypeScript enum,
|
|
42
|
+
Prisma imports in web/admin/mobile/desktop, and raw fetch in those
|
|
43
|
+
apps. Prints rule id + file:line. Exit 1 when anything matches.
|
|
44
|
+
|
|
45
|
+
Environment:
|
|
46
|
+
YSK_ROOT Product root to patch (default: this repository)
|
|
47
|
+
|
|
48
|
+
After add module / add capability:
|
|
49
|
+
pnpm db:migrate && pnpm gen:openapi && pnpm layers && pnpm typecheck && pnpm test && pnpm ysk check agent
|
|
50
|
+
|
|
51
|
+
Manual: docs/cli/ysk.md
|
|
52
|
+
Chinese: docs/cli/ysk.zh.md
|
|
53
|
+
`;
|
|
54
|
+
//# sourceMappingURL=help.js.map
|
package/dist/help.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;sBAqBE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B5C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { dirname, resolve } from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { addCapability } from './add-capability';
|
|
4
|
+
import { addModule } from './add-module';
|
|
5
|
+
import { checkAgent, formatAgentFindings } from './check-agent';
|
|
6
|
+
import { generateOpenApi } from './generate-openapi';
|
|
7
|
+
import { HELP } from './help';
|
|
8
|
+
import { upgrade } from './upgrade';
|
|
9
|
+
const args = process.argv.slice(2);
|
|
10
|
+
const kitRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../..');
|
|
11
|
+
const root = resolve(process.env.YSK_ROOT ?? kitRoot);
|
|
12
|
+
const help = () => {
|
|
13
|
+
console.log(HELP);
|
|
14
|
+
};
|
|
15
|
+
try {
|
|
16
|
+
if (args[0] === 'add' && args[1] && args[1] !== 'module') {
|
|
17
|
+
const logs = addCapability(args[1], root);
|
|
18
|
+
for (const line of logs)
|
|
19
|
+
console.log(line);
|
|
20
|
+
process.exit(0);
|
|
21
|
+
}
|
|
22
|
+
if (args[0] === 'add' && args[1] === 'module' && args[2]) {
|
|
23
|
+
const name = args[2];
|
|
24
|
+
const logs = addModule(root, name, {
|
|
25
|
+
prisma: args.includes('--prisma'),
|
|
26
|
+
web: args.includes('--web') || !args.includes('--no-web'),
|
|
27
|
+
});
|
|
28
|
+
for (const line of logs)
|
|
29
|
+
console.log(line);
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
if (args[0] === 'generate' && args[1] === 'openapi') {
|
|
33
|
+
const out = generateOpenApi(root);
|
|
34
|
+
console.log(`wrote ${out}`);
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
if (args[0] === 'check' && args[1] === 'agent') {
|
|
38
|
+
const findings = checkAgent(root);
|
|
39
|
+
console.log(formatAgentFindings(findings));
|
|
40
|
+
process.exit(findings.length === 0 ? 0 : 1);
|
|
41
|
+
}
|
|
42
|
+
if (args[0] === 'upgrade') {
|
|
43
|
+
const logs = upgrade({
|
|
44
|
+
productRoot: root,
|
|
45
|
+
kitRoot,
|
|
46
|
+
dryRun: args.includes('--dry-run'),
|
|
47
|
+
});
|
|
48
|
+
for (const line of logs)
|
|
49
|
+
console.log(line);
|
|
50
|
+
process.exit(0);
|
|
51
|
+
}
|
|
52
|
+
help();
|
|
53
|
+
process.exit(args.length === 0 ? 0 : 1);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error(error instanceof Error ? error.message : error);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type PrismaBlock = {
|
|
2
|
+
name: string;
|
|
3
|
+
block: string;
|
|
4
|
+
};
|
|
5
|
+
export type PrismaMergeOpts = {
|
|
6
|
+
userFields?: string[];
|
|
7
|
+
organizationFields?: string[];
|
|
8
|
+
};
|
|
9
|
+
export declare const extractEnums: (fragment: string) => PrismaBlock[];
|
|
10
|
+
export declare const extractModels: (fragment: string) => PrismaBlock[];
|
|
11
|
+
export declare const mergePrisma: (schema: string, fragment: string, opts?: PrismaMergeOpts) => {
|
|
12
|
+
schema: string;
|
|
13
|
+
actions: string[];
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=merge-prisma.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-prisma.d.ts","sourceRoot":"","sources":["../src/merge-prisma.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,KAAG,WAAW,EAS1D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,WAAW,EAS3D,CAAC;AA0CF,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,OAAM,eAAoB,KACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAuCrC,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
export const extractEnums = (fragment) => {
|
|
2
|
+
const blocks = [];
|
|
3
|
+
const re = /enum\s+(\w+)\s*\{[^}]*\}/g;
|
|
4
|
+
let match = re.exec(fragment);
|
|
5
|
+
while (match) {
|
|
6
|
+
blocks.push({ name: match[1] ?? '', block: match[0].trim() });
|
|
7
|
+
match = re.exec(fragment);
|
|
8
|
+
}
|
|
9
|
+
return blocks;
|
|
10
|
+
};
|
|
11
|
+
export const extractModels = (fragment) => {
|
|
12
|
+
const blocks = [];
|
|
13
|
+
const re = /model\s+(\w+)\s*\{[\s\S]*?\n\}/g;
|
|
14
|
+
let match = re.exec(fragment);
|
|
15
|
+
while (match) {
|
|
16
|
+
blocks.push({ name: match[1] ?? '', block: match[0].trim() });
|
|
17
|
+
match = re.exec(fragment);
|
|
18
|
+
}
|
|
19
|
+
return blocks;
|
|
20
|
+
};
|
|
21
|
+
const hasEnum = (schema, name) => new RegExp(`enum\\s+${name}\\s*\\{`).test(schema);
|
|
22
|
+
const hasModel = (schema, name) => new RegExp(`model\\s+${name}\\s*\\{`).test(schema);
|
|
23
|
+
const ensureModelFields = (schema, model, fields, actions) => {
|
|
24
|
+
if (fields.length === 0)
|
|
25
|
+
return schema;
|
|
26
|
+
const header = schema.match(new RegExp(`model\\s+${model}\\s*\\{`));
|
|
27
|
+
if (!header || header.index === undefined) {
|
|
28
|
+
actions.push(`skipped ${model} fields (no model ${model})`);
|
|
29
|
+
return schema;
|
|
30
|
+
}
|
|
31
|
+
const start = header.index + header[0].length;
|
|
32
|
+
const end = schema.indexOf('\n}', start);
|
|
33
|
+
if (end < 0) {
|
|
34
|
+
actions.push(`skipped ${model} fields (unterminated model ${model})`);
|
|
35
|
+
return schema;
|
|
36
|
+
}
|
|
37
|
+
const body = schema.slice(start, end);
|
|
38
|
+
const extra = [];
|
|
39
|
+
for (const field of fields) {
|
|
40
|
+
const name = field.trim().split(/\s+/)[0];
|
|
41
|
+
if (!name)
|
|
42
|
+
continue;
|
|
43
|
+
if (body.includes(name)) {
|
|
44
|
+
actions.push(`skipped field ${model}.${name}`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
extra.push(` ${field.trim()}`);
|
|
48
|
+
actions.push(`added field ${model}.${name}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (extra.length === 0)
|
|
52
|
+
return schema;
|
|
53
|
+
return `${schema.slice(0, end)}\n${extra.join('\n')}${schema.slice(end)}`;
|
|
54
|
+
};
|
|
55
|
+
export const mergePrisma = (schema, fragment, opts = {}) => {
|
|
56
|
+
const actions = [];
|
|
57
|
+
let next = schema;
|
|
58
|
+
for (const item of extractEnums(fragment)) {
|
|
59
|
+
if (hasEnum(next, item.name)) {
|
|
60
|
+
actions.push(`skipped enum ${item.name}`);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const firstModel = next.search(/model\s+\w+/);
|
|
64
|
+
const at = firstModel >= 0 ? firstModel : next.length;
|
|
65
|
+
const prefix = next.slice(0, at);
|
|
66
|
+
const pad = prefix.endsWith('\n\n') || prefix.length === 0 ? '' : '\n';
|
|
67
|
+
next = `${prefix}${pad}${item.block}\n\n${next.slice(at)}`;
|
|
68
|
+
actions.push(`added enum ${item.name}`);
|
|
69
|
+
}
|
|
70
|
+
next = ensureModelFields(next, 'User', opts.userFields ?? [], actions);
|
|
71
|
+
next = ensureModelFields(next, 'Organization', opts.organizationFields ?? [], actions);
|
|
72
|
+
for (const item of extractModels(fragment)) {
|
|
73
|
+
if (item.name === 'User') {
|
|
74
|
+
actions.push('skipped model User');
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (hasModel(next, item.name)) {
|
|
78
|
+
actions.push(`skipped model ${item.name}`);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const pad = next.endsWith('\n') ? '' : '\n';
|
|
82
|
+
next = `${next}${pad}\n${item.block}\n`;
|
|
83
|
+
actions.push(`added model ${item.name}`);
|
|
84
|
+
}
|
|
85
|
+
if (/provider\s*=\s*"sqlite"/.test(next)) {
|
|
86
|
+
next = next.replace(/\s+@db\.[A-Za-z0-9(),]+/g, '');
|
|
87
|
+
}
|
|
88
|
+
return { schema: next, actions };
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=merge-prisma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-prisma.js","sourceRoot":"","sources":["../src/merge-prisma.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const ensureEnvKey: (source: string, key: string) => {
|
|
2
|
+
source: string;
|
|
3
|
+
added: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare const ensureJsonDep: (json: string, name: string, spec: string) => {
|
|
6
|
+
source: string;
|
|
7
|
+
added: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const insertAfterLastImport: (source: string, statement: string) => string;
|
|
10
|
+
export declare const EXPRESS_ERROR_HANDLER = " app.use(errorHandler);";
|
|
11
|
+
export declare const EXPRESS_RETURN_APP = " return app;";
|
|
12
|
+
/** Express only maps `next(error)` for routers registered before `errorHandler`. */
|
|
13
|
+
export declare const expressRouteInsertBefore: (source: string) => string;
|
|
14
|
+
export declare const ensureMarkerBlock: (source: string, name: string, body: string, insertBefore?: string) => string;
|
|
15
|
+
export declare const insertBeforeMatch: (source: string, match: string, insert: string) => string;
|
|
16
|
+
export declare const ensureNamedImport: (source: string, moduleName: string, names: string[]) => string;
|
|
17
|
+
//# sourceMappingURL=patch-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-text.d.ts","sourceRoot":"","sources":["../src/patch-text.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,KAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAK1F,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,MAAM,MAAM,KACX;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAMlC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,MAYzE,CAAC;AAEF,eAAO,MAAM,qBAAqB,6BAA6B,CAAC;AAChE,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,MAC2B,CAAC;AAEtF,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,eAAe,MAAM,KACpB,MASF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MAKjF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,YAAY,MAAM,EAAE,OAAO,MAAM,EAAE,KAAG,MAiBvF,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export const ensureEnvKey = (source, key) => {
|
|
2
|
+
const re = new RegExp(`^${key}=`, 'm');
|
|
3
|
+
if (re.test(source))
|
|
4
|
+
return { source, added: false };
|
|
5
|
+
const next = source.endsWith('\n') || source.length === 0 ? source : `${source}\n`;
|
|
6
|
+
return { source: `${next}${key}=\n`, added: true };
|
|
7
|
+
};
|
|
8
|
+
export const ensureJsonDep = (json, name, spec) => {
|
|
9
|
+
const pkg = JSON.parse(json);
|
|
10
|
+
pkg.dependencies ??= {};
|
|
11
|
+
if (pkg.dependencies[name])
|
|
12
|
+
return { source: json, added: false };
|
|
13
|
+
pkg.dependencies[name] = spec;
|
|
14
|
+
return { source: `${JSON.stringify(pkg, null, 2)}\n`, added: true };
|
|
15
|
+
};
|
|
16
|
+
export const insertAfterLastImport = (source, statement) => {
|
|
17
|
+
if (source.includes(statement.trim()))
|
|
18
|
+
return source;
|
|
19
|
+
const lines = source.split('\n');
|
|
20
|
+
let lastImport = -1;
|
|
21
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
22
|
+
if (lines[i]?.startsWith('import '))
|
|
23
|
+
lastImport = i;
|
|
24
|
+
}
|
|
25
|
+
if (lastImport < 0) {
|
|
26
|
+
return `${statement}\n${source}`;
|
|
27
|
+
}
|
|
28
|
+
lines.splice(lastImport + 1, 0, statement);
|
|
29
|
+
return lines.join('\n');
|
|
30
|
+
};
|
|
31
|
+
export const EXPRESS_ERROR_HANDLER = ' app.use(errorHandler);';
|
|
32
|
+
export const EXPRESS_RETURN_APP = ' return app;';
|
|
33
|
+
/** Express only maps `next(error)` for routers registered before `errorHandler`. */
|
|
34
|
+
export const expressRouteInsertBefore = (source) => source.includes(EXPRESS_ERROR_HANDLER) ? EXPRESS_ERROR_HANDLER : EXPRESS_RETURN_APP;
|
|
35
|
+
export const ensureMarkerBlock = (source, name, body, insertBefore) => {
|
|
36
|
+
const start = `// --- ysk-add:${name} ---`;
|
|
37
|
+
if (source.includes(start))
|
|
38
|
+
return source;
|
|
39
|
+
const block = `${start}\n${body}\n// --- ysk-add:${name}:end ---`;
|
|
40
|
+
if (insertBefore && source.includes(insertBefore)) {
|
|
41
|
+
return source.replace(insertBefore, `${block}\n${insertBefore}`);
|
|
42
|
+
}
|
|
43
|
+
const next = source.endsWith('\n') ? source : `${source}\n`;
|
|
44
|
+
return `${next}${block}\n`;
|
|
45
|
+
};
|
|
46
|
+
export const insertBeforeMatch = (source, match, insert) => {
|
|
47
|
+
if (source.includes(insert.trim()))
|
|
48
|
+
return source;
|
|
49
|
+
const index = source.indexOf(match);
|
|
50
|
+
if (index < 0)
|
|
51
|
+
return source;
|
|
52
|
+
return `${source.slice(0, index)}${insert}${source.slice(index)}`;
|
|
53
|
+
};
|
|
54
|
+
export const ensureNamedImport = (source, moduleName, names) => {
|
|
55
|
+
const escaped = moduleName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
56
|
+
const re = new RegExp(`import\\s+(type\\s+)?\\{([^}]*)\\}\\s+from\\s+['"]${escaped}['"]`);
|
|
57
|
+
const match = re.exec(source);
|
|
58
|
+
if (!match || match.index === undefined) {
|
|
59
|
+
return insertAfterLastImport(source, `import { ${names.join(', ')} } from '${moduleName}';`);
|
|
60
|
+
}
|
|
61
|
+
const existing = (match[2] ?? '')
|
|
62
|
+
.split(',')
|
|
63
|
+
.map((item) => item.trim())
|
|
64
|
+
.filter(Boolean);
|
|
65
|
+
const hasName = (name) => existing.some((item) => item === name || item === `type ${name}` || item.endsWith(` ${name}`));
|
|
66
|
+
const missing = names.filter((name) => !hasName(name));
|
|
67
|
+
if (missing.length === 0)
|
|
68
|
+
return source;
|
|
69
|
+
const rebuilt = `import ${match[1] ?? ''}{ ${[...existing, ...missing].join(', ')} } from '${moduleName}'`;
|
|
70
|
+
return `${source.slice(0, match.index)}${rebuilt}${source.slice(match.index + match[0].length)}`;
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=patch-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-text.js","sourceRoot":"","sources":["../src/patch-text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const UPGRADE_PATHS: readonly ["AGENTS.md", "AGENTS.zh.md", "CLAUDE.md", ".dependency-cruiser.cjs", "packages/typescript-config", "packages/biome-config", "docs/skills"];
|
|
2
|
+
export type YskKitMarker = {
|
|
3
|
+
kit: string;
|
|
4
|
+
version: string;
|
|
5
|
+
flavor: string;
|
|
6
|
+
preset: string;
|
|
7
|
+
db: string;
|
|
8
|
+
};
|
|
9
|
+
export type UpgradeOptions = {
|
|
10
|
+
productRoot: string;
|
|
11
|
+
kitRoot: string;
|
|
12
|
+
dryRun: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare const readKitVersion: (kitRoot: string) => string;
|
|
15
|
+
export declare const upgrade: (opts: UpgradeOptions) => string[];
|
|
16
|
+
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa,sJAQhB,CAAC;AAIX,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,MAMhD,CAAC;AA2CF,eAAO,MAAM,OAAO,GAAI,MAAM,cAAc,KAAG,MAAM,EAsDpD,CAAC"}
|