@devflow-tools/plugin-docker 0.12.6 → 0.13.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.
@@ -0,0 +1,3 @@
1
+ import type { AnalysisResult } from './types.js';
2
+ export declare function dockerize(projectRoot: string): AnalysisResult;
3
+ //# sourceMappingURL=dockerize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockerize.d.ts","sourceRoot":"","sources":["../../src/analyzers/dockerize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAsE7D"}
@@ -0,0 +1,70 @@
1
+ import { readFileSync } from 'fs';
2
+ import { existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ export function dockerize(projectRoot) {
5
+ const hasDockerfile = existsSync(join(projectRoot, 'Dockerfile'));
6
+ const hasCompose = existsSync(join(projectRoot, 'docker-compose.yml'))
7
+ || existsSync(join(projectRoot, 'docker-compose.yaml'));
8
+ const hasDockerignore = existsSync(join(projectRoot, '.dockerignore'));
9
+ // Detect project type
10
+ let packageJson = {};
11
+ try {
12
+ packageJson = JSON.parse(readFileSync(join(projectRoot, 'package.json'), 'utf-8'));
13
+ }
14
+ catch { }
15
+ const isNode = !!packageJson.name;
16
+ const hasBuild = !!packageJson.scripts?.build;
17
+ const startCmd = packageJson.scripts?.start || 'node dist/index.js';
18
+ const port = process.env.PORT || '3000';
19
+ const dockerfile = `FROM node:20-alpine AS builder
20
+ WORKDIR /app
21
+ COPY package*.json ./
22
+ RUN npm ci --only=production
23
+ COPY . .
24
+ ${hasBuild ? 'RUN npm run build' : ''}
25
+
26
+ FROM node:20-alpine
27
+ WORKDIR /app
28
+ COPY --from=builder /app/node_modules ./node_modules
29
+ COPY --from=builder /app/${hasBuild ? 'dist' : '.'} ./
30
+ ${hasBuild ? 'COPY --from=builder /app/package*.json ./' : ''}
31
+ EXPOSE ${port}
32
+ CMD ["node", "${startCmd.replace('node ', '')}"]
33
+ `;
34
+ const compose = `version: '3.8'
35
+ services:
36
+ app:
37
+ build: .
38
+ ports:
39
+ - "${port}:${port}"
40
+ environment:
41
+ - NODE_ENV=production
42
+ restart: unless-stopped
43
+ `;
44
+ const dockerignore = `node_modules
45
+ dist
46
+ .git
47
+ .env
48
+ *.md
49
+ .DS_Store
50
+ `;
51
+ return {
52
+ success: true,
53
+ summary: hasDockerfile ? '项目已有 Dockerfile,生成优化建议' : '生成 Dockerfile + Compose + .dockerignore',
54
+ data: {
55
+ existing: { dockerfile: hasDockerfile, compose: hasCompose, dockerignore: hasDockerignore },
56
+ generated: {
57
+ dockerfile: hasDockerfile ? undefined : dockerfile,
58
+ compose: hasCompose ? undefined : compose,
59
+ dockerignore: hasDockerignore ? undefined : dockerignore,
60
+ },
61
+ },
62
+ findings: hasDockerfile ? [{
63
+ severity: 'info',
64
+ category: 'docker-existing',
65
+ title: '已有 Docker 配置',
66
+ description: '项目已配置 Docker,建议检查是否为多阶段构建',
67
+ }] : [],
68
+ };
69
+ }
70
+ //# sourceMappingURL=dockerize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockerize.js","sourceRoot":"","sources":["../../src/analyzers/dockerize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;WACjE,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IAEvE,sBAAsB;IACtB,IAAI,WAAW,GAAQ,EAAE,CAAC;IAC1B,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;IAClC,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;IAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,oBAAoB,CAAC;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;IAExC,MAAM,UAAU,GAAG;;;;;EAKnB,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;;;;;2BAKV,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;EAChD,QAAQ,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,EAAE;SACpD,IAAI;gBACG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;CAC5C,CAAC;IAEA,MAAM,OAAO,GAAG;;;;;WAKP,IAAI,IAAI,IAAI;;;;CAItB,CAAC;IAEA,MAAM,YAAY,GAAG;;;;;;CAMtB,CAAC;IAEA,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,yCAAyC;QAC7F,IAAI,EAAE;YACJ,QAAQ,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE;YAC3F,SAAS,EAAE;gBACT,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;gBAClD,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gBACzC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;aACzD;SACF;QACD,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;gBACzB,QAAQ,EAAE,MAAe;gBACzB,QAAQ,EAAE,iBAAiB;gBAC3B,KAAK,EAAE,cAAc;gBACrB,WAAW,EAAE,2BAA2B;aACzC,CAAC,CAAC,CAAC,CAAC,EAAE;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface AnalysisResult {
2
+ success: boolean;
3
+ summary: string;
4
+ findings?: Finding[];
5
+ metrics?: Record<string, number | string>;
6
+ data?: unknown;
7
+ error?: string;
8
+ }
9
+ export interface Finding {
10
+ severity: 'critical' | 'warning' | 'info' | 'suggestion';
11
+ category: string;
12
+ title: string;
13
+ description: string;
14
+ file?: string;
15
+ line?: number;
16
+ suggestion?: string;
17
+ codeSnippet?: string;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analyzers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { DevFlowPlugin } from "@devflow-tools/sdk";
2
+ export declare const dockerPlugin: DevFlowPlugin;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYxD,eAAO,MAAM,YAAY,EAAE,aAs/C1B,CAAC"}