creative-upload-extension-updater 0.1.2 → 0.1.4
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/README.md +3 -5
- package/bin/creative-upload-extension-updater.js +45 -7
- package/lib/updater.js +3 -6
- package/package.json +4 -1
- package/scripts/postinstall.js +7 -0
package/README.md
CHANGED
|
@@ -9,10 +9,9 @@ npm install -g @ttam/creative-upload-extension-updater
|
|
|
9
9
|
creative-upload-extension-updater install
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
The command downloads and verifies the first release, then prints the fixed extension directory. In Chrome, enable Developer mode once and choose **Load unpacked** for that directory.
|
|
12
|
+
`npm install` 完成后会提示运行 `creative-upload-updater install`;安装 npm 包本身不会自动下载插件或修改 Chrome。
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
安装成功后,CLI 会输出扩展目录,并引导依次打开 `chrome://extensions`、开启开发者模式、点击「加载已解压的扩展程序」。在 macOS 文件选择器中按 `Command + Shift + G`,粘贴输出的目录即可直接打开。
|
|
16
15
|
|
|
17
16
|
## Operations
|
|
18
17
|
|
|
@@ -21,12 +20,11 @@ creative-upload-extension-updater diagnose
|
|
|
21
20
|
creative-upload-extension-updater update
|
|
22
21
|
creative-upload-extension-updater rollback
|
|
23
22
|
creative-upload-updater uninstall
|
|
24
|
-
creative-upload-updater uninstall --purge
|
|
25
23
|
```
|
|
26
24
|
|
|
27
25
|
`update` immediately checks the Registry and applies a newer verified release when available. On macOS it then opens a controlled extension URL so the running extension calls `chrome.runtime.reload()` automatically; pass `--no-reload` to only replace files. `rollback` restores the previous verified extension directory. Chrome must then reload the extension once.
|
|
28
26
|
|
|
29
|
-
`uninstall` removes the Native Messaging registration
|
|
27
|
+
`uninstall` removes the Native Messaging registration, updater configuration, downloaded extension, and rollback files. It still requires manually removing the loaded extension in `chrome://extensions`; uninstall the CLI itself with `npm uninstall -g creative-upload-extension-updater`.
|
|
30
28
|
|
|
31
29
|
## Security
|
|
32
30
|
|
|
@@ -4,6 +4,19 @@ const path = require('node:path');
|
|
|
4
4
|
const { diagnose, install, requestChromeReload, rollback, uninstall, update, TRANSITION_HTTP_REGISTRY_ORIGIN } = require('../lib/updater');
|
|
5
5
|
|
|
6
6
|
const packageVersion = require('../package.json').version;
|
|
7
|
+
const printJson = (value) => process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
8
|
+
const printResult = (args, value, lines) => {
|
|
9
|
+
if (args.json === true) return printJson(value);
|
|
10
|
+
process.stdout.write(`${lines.join('\n')}\n`);
|
|
11
|
+
};
|
|
12
|
+
const printInstallGuide = (extensionDirectory) => {
|
|
13
|
+
process.stdout.write('\n安装完成。请在 Chrome 完成一次加载:\n\n');
|
|
14
|
+
process.stdout.write(' 1. 打开 chrome://extensions\n');
|
|
15
|
+
process.stdout.write(' 2. 开启右上角「开发者模式」\n');
|
|
16
|
+
process.stdout.write(' 3. 点击「加载已解压的扩展程序」\n');
|
|
17
|
+
process.stdout.write(` 4. 在文件选择器中按 Command + Shift + G,粘贴并打开:${extensionDirectory}\n\n`);
|
|
18
|
+
process.stdout.write('后续发布新版本后,扩展会定时检查更新;也可手动运行 creative-upload-updater update。\n');
|
|
19
|
+
};
|
|
7
20
|
const usage = `用法:creative-upload-updater <命令> [选项]
|
|
8
21
|
|
|
9
22
|
命令:
|
|
@@ -11,11 +24,12 @@ const usage = `用法:creative-upload-updater <命令> [选项]
|
|
|
11
24
|
update [--no-reload] 下载并应用最新插件版本
|
|
12
25
|
diagnose 输出本机安装诊断
|
|
13
26
|
rollback 回滚到上一插件版本
|
|
14
|
-
uninstall
|
|
27
|
+
uninstall 移除更新器注册、插件文件与历史版本
|
|
15
28
|
|
|
16
29
|
选项:
|
|
17
30
|
--help, -h 显示帮助
|
|
18
|
-
--version, -v
|
|
31
|
+
--version, -v 显示版本
|
|
32
|
+
--json 以 JSON 输出命令结果`;
|
|
19
33
|
|
|
20
34
|
const parseArguments = (values) =>
|
|
21
35
|
values.reduce((result, value, index) => {
|
|
@@ -49,20 +63,44 @@ const main = async () => {
|
|
|
49
63
|
allowInsecure: args['allow-insecure'] === true,
|
|
50
64
|
hostPath: path.resolve(__dirname, 'native-host.js'),
|
|
51
65
|
});
|
|
52
|
-
|
|
66
|
+
printResult(args, result, [
|
|
67
|
+
'插件更新器安装完成。',
|
|
68
|
+
`已安装插件版本:${result.targetVersion ?? result.currentVersion}`,
|
|
69
|
+
`扩展目录:${result.extensionDirectory}`,
|
|
70
|
+
]);
|
|
71
|
+
printInstallGuide(result.extensionDirectory);
|
|
53
72
|
return;
|
|
54
73
|
}
|
|
55
|
-
if (command === 'diagnose')
|
|
74
|
+
if (command === 'diagnose') {
|
|
75
|
+
const result = diagnose();
|
|
76
|
+
return printResult(args, result, [
|
|
77
|
+
'更新器诊断结果:',
|
|
78
|
+
`扩展目录:${result.extensionDirectory}`,
|
|
79
|
+
`扩展文件:${result.extensionLoaded ? '已找到' : '未找到'}`,
|
|
80
|
+
`Native Messaging:${result.nativeHostRegistered ? '已注册' : '未注册'}`,
|
|
81
|
+
`更新源:${result.registryUrl}`,
|
|
82
|
+
`扩展 ID:${result.extensionId}`,
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
56
85
|
if (command === 'update') {
|
|
57
86
|
const result = await update();
|
|
58
87
|
if (result.status === 'updated' && args['no-reload'] !== true) {
|
|
59
88
|
const diagnostic = diagnose();
|
|
60
89
|
Object.assign(result, { chromeReload: requestChromeReload(diagnostic.extensionId) });
|
|
61
90
|
}
|
|
62
|
-
|
|
91
|
+
const changed = result.status === 'updated';
|
|
92
|
+
return printResult(args, result, changed
|
|
93
|
+
? [`更新完成:${result.currentVersion} → ${result.targetVersion}`, 'Chrome 将自动重新加载扩展;如未生效,请在 chrome://extensions 手动重新加载。']
|
|
94
|
+
: [`已是最新版本:${result.currentVersion}`]);
|
|
95
|
+
}
|
|
96
|
+
if (command === 'rollback') {
|
|
97
|
+
const result = rollback();
|
|
98
|
+
return printResult(args, result, ['已回滚到上一插件版本。', `扩展目录:${result.extensionDirectory}`, '请在 chrome://extensions 手动重新加载扩展。']);
|
|
99
|
+
}
|
|
100
|
+
if (command === 'uninstall') {
|
|
101
|
+
const result = uninstall();
|
|
102
|
+
return printResult(args, result, ['卸载完成。', '已删除更新器注册、插件文件与历史版本。', '请在 chrome://extensions 手动移除已加载的扩展。']);
|
|
63
103
|
}
|
|
64
|
-
if (command === 'rollback') return process.stdout.write(`${JSON.stringify(rollback(), null, 2)}\n`);
|
|
65
|
-
if (command === 'uninstall') return process.stdout.write(`${JSON.stringify(uninstall({ purge: args.purge === true }), null, 2)}\n`);
|
|
66
104
|
throw new Error(`未知命令:${command}\n\n${usage}`);
|
|
67
105
|
};
|
|
68
106
|
|
package/lib/updater.js
CHANGED
|
@@ -163,17 +163,14 @@ const install = async ({ registryUrl = TRANSITION_HTTP_REGISTRY_ORIGIN, extensio
|
|
|
163
163
|
fs.writeFileSync(nativeHostManifestPath, `${JSON.stringify({ name: HOST_NAME, description: 'Creative Upload Extension Updater', path: launcherPath, type: 'stdio', allowed_origins: [`chrome-extension://${extensionId}/`] }, null, 2)}\n`, { mode: 0o600 });
|
|
164
164
|
return { ...update, extensionDirectory, extensionId };
|
|
165
165
|
};
|
|
166
|
-
const uninstall = (
|
|
166
|
+
const uninstall = () => {
|
|
167
167
|
const nativeHostRegistered = fs.existsSync(nativeHostManifestPath);
|
|
168
168
|
fs.rmSync(nativeHostManifestPath, { force: true });
|
|
169
|
-
fs.rmSync(
|
|
170
|
-
fs.rmSync(nativeHostLauncherPath, { force: true });
|
|
171
|
-
if (purge) fs.rmSync(baseDirectory, { recursive: true, force: true });
|
|
169
|
+
fs.rmSync(baseDirectory, { recursive: true, force: true });
|
|
172
170
|
return {
|
|
173
171
|
nativeHostRemoved: nativeHostRegistered,
|
|
174
172
|
extensionDirectory,
|
|
175
|
-
|
|
176
|
-
purged: purge,
|
|
173
|
+
extensionRemoved: !fs.existsSync(extensionDirectory),
|
|
177
174
|
chromeAction: '请在 chrome://extensions 手动移除已加载的扩展。',
|
|
178
175
|
};
|
|
179
176
|
};
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "creative-upload-extension-updater",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Native Messaging updater for the Creative Upload unpacked Chrome extension.",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"postinstall": "node scripts/postinstall.js"
|
|
8
|
+
},
|
|
6
9
|
"bin": {
|
|
7
10
|
"creative-upload-updater": "bin/creative-upload-extension-updater.js"
|
|
8
11
|
},
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const packageInfo = require('../package.json');
|
|
4
|
+
|
|
5
|
+
process.stdout.write(`\nCreative Upload Extension Updater v${packageInfo.version} 已安装。\n`);
|
|
6
|
+
process.stdout.write('下一步运行:creative-upload-updater install\n');
|
|
7
|
+
process.stdout.write('该命令会下载已验证的插件版本,并引导你在 Chrome 中加载扩展。\n\n');
|