@doquflow/cli 1.4.0 → 1.5.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/dist/commands/update.js +114 -0
- package/dist/index.js +11 -0
- package/package.json +2 -2
- package/ui-dist/assets/index-BbraE6z_.js +44 -0
- package/ui-dist/assets/index-D0CGf_HA.js +44 -0
- package/ui-dist/index.html +1 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.run = run;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const net = __importStar(require("net"));
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
40
|
+
const { version: currentVersion } = require('../../package.json');
|
|
41
|
+
const PKG = '@doquflow/cli';
|
|
42
|
+
const DEFAULT_PORT = 48821;
|
|
43
|
+
function fetchLatestVersion() {
|
|
44
|
+
try {
|
|
45
|
+
const out = (0, child_process_1.execSync)(`npm view ${PKG} version`, { stdio: ['ignore', 'pipe', 'pipe'] })
|
|
46
|
+
.toString()
|
|
47
|
+
.trim();
|
|
48
|
+
if (!/^\d+\.\d+\.\d+/.test(out))
|
|
49
|
+
throw new Error(`unexpected npm output: ${out}`);
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
throw new Error(`Could not fetch latest version from npm registry: ${e.message}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function compareSemver(a, b) {
|
|
57
|
+
const pa = a.split('.').map(n => parseInt(n, 10));
|
|
58
|
+
const pb = b.split('.').map(n => parseInt(n, 10));
|
|
59
|
+
for (let i = 0; i < 3; i++) {
|
|
60
|
+
if ((pa[i] ?? 0) > (pb[i] ?? 0))
|
|
61
|
+
return 1;
|
|
62
|
+
if ((pa[i] ?? 0) < (pb[i] ?? 0))
|
|
63
|
+
return -1;
|
|
64
|
+
}
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
function isPortInUse(port) {
|
|
68
|
+
return new Promise(resolve => {
|
|
69
|
+
const sock = net.createConnection({ port, host: '127.0.0.1' });
|
|
70
|
+
sock.once('connect', () => { sock.end(); resolve(true); });
|
|
71
|
+
sock.once('error', () => resolve(false));
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async function run(opts = {}) {
|
|
75
|
+
console.log(`DocuFlow update`);
|
|
76
|
+
console.log(` Current: ${currentVersion}`);
|
|
77
|
+
let latest;
|
|
78
|
+
try {
|
|
79
|
+
latest = fetchLatestVersion();
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
console.error(`✗ ${e.message}`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
console.log(` Latest: ${latest}`);
|
|
86
|
+
const cmp = compareSemver(latest, currentVersion);
|
|
87
|
+
if (opts.check) {
|
|
88
|
+
if (cmp > 0)
|
|
89
|
+
console.log(`\n→ Update available. Run \`docuflow update\` to install.`);
|
|
90
|
+
else
|
|
91
|
+
console.log(`\n✓ You are on the latest version.`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (cmp <= 0 && !opts.force) {
|
|
95
|
+
console.log(`\n✓ Already on the latest version. Use --force to reinstall.`);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
console.log(`\nInstalling ${PKG}@${latest} globally…`);
|
|
99
|
+
const result = (0, child_process_1.spawnSync)('npm', ['install', '-g', `${PKG}@latest`], { stdio: 'inherit' });
|
|
100
|
+
if (result.status !== 0) {
|
|
101
|
+
console.error(`✗ npm install failed (exit ${result.status}). Try with sudo if this is a permissions issue.`);
|
|
102
|
+
process.exit(result.status ?? 1);
|
|
103
|
+
}
|
|
104
|
+
console.log(`\n✓ Updated to ${latest}.`);
|
|
105
|
+
console.log(` This refreshed the CLI, bundled UI (ui-dist), and the @doquflow/server dependency.`);
|
|
106
|
+
const stale = await isPortInUse(DEFAULT_PORT);
|
|
107
|
+
if (stale) {
|
|
108
|
+
console.log('');
|
|
109
|
+
console.log(`⚠ A DocuFlow server is still running on port ${DEFAULT_PORT} — it is the OLD version.`);
|
|
110
|
+
console.log(` Stop and restart it to use the new code:`);
|
|
111
|
+
console.log(` lsof -ti:${DEFAULT_PORT} | xargs kill`);
|
|
112
|
+
console.log(` docuflow ui`);
|
|
113
|
+
}
|
|
114
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -123,6 +123,13 @@ else if (cmd === 'review') {
|
|
|
123
123
|
failOnCritical: hasFlag('--fail-on-critical'),
|
|
124
124
|
quiet: hasFlag('--quiet', '-q'),
|
|
125
125
|
}));
|
|
126
|
+
// ── update — reinstall latest @doquflow/cli globally ─────────────────────────
|
|
127
|
+
}
|
|
128
|
+
else if (cmd === 'update' || cmd === 'upgrade') {
|
|
129
|
+
Promise.resolve().then(() => __importStar(require('./commands/update'))).then(m => m.run({
|
|
130
|
+
check: hasFlag('--check'),
|
|
131
|
+
force: hasFlag('--force'),
|
|
132
|
+
}));
|
|
126
133
|
}
|
|
127
134
|
else {
|
|
128
135
|
console.log(`DocuFlow v${version}`);
|
|
@@ -164,6 +171,10 @@ else {
|
|
|
164
171
|
console.log(' review --ai Append Copilot AI review to deterministic findings');
|
|
165
172
|
console.log(' review --fail-on-critical Exit 1 if critical findings are detected');
|
|
166
173
|
console.log(' review --quiet Compact output for CI/scripting');
|
|
174
|
+
console.log(' update Reinstall latest @doquflow/cli globally (refreshes UI + server)');
|
|
175
|
+
console.log(' update --check Check whether a newer version is published (no install)');
|
|
176
|
+
console.log(' update --force Reinstall even when already on the latest version');
|
|
177
|
+
console.log(' upgrade Alias for "update"');
|
|
167
178
|
console.log('');
|
|
168
179
|
console.log('Options:');
|
|
169
180
|
console.log(' --version, -v Print version number');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doquflow/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "CLI for setting up Docuflow in your project",
|
|
5
5
|
"author": "Docuflow <hello@doquflows.dev>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"build": "tsc && node -e \"const fs=require('fs'),p=require('path'),src=p.join(process.cwd(),'../ui/dist'),dst=p.join(process.cwd(),'ui-dist');if(!fs.existsSync(src)){console.log('Warning: packages/ui/dist not found — run npm run build:ui first');process.exit(0)}fs.mkdirSync(dst,{recursive:true});fs.cpSync(src,dst,{recursive:true,force:true});console.log(' ✓ ui-dist synced from packages/ui/dist ('+(fs.readdirSync(dst).length)+' files at root)')\""
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@doquflow/server": "1.
|
|
34
|
+
"@doquflow/server": "1.5.0",
|
|
35
35
|
"cors": "^2.8.5",
|
|
36
36
|
"express": "^4.19.2"
|
|
37
37
|
},
|