@vegamo/loom 0.1.8 → 0.1.9
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 +17 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -2
- package/dist/index.js.map +1 -1
- package/dist/shared/update.d.ts +9 -0
- package/dist/shared/update.d.ts.map +1 -0
- package/dist/shared/update.js +231 -0
- package/dist/shared/update.js.map +1 -0
- package/dist/shared/version.d.ts +1 -0
- package/dist/shared/version.d.ts.map +1 -1
- package/dist/shared/version.js +26 -10
- package/dist/shared/version.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,6 +18,7 @@ AI-powered JSON Schema document generator with TUI, web viewer and mock server
|
|
|
18
18
|
- **⚡ Mock Server** - Dynamic mock API server that generates realistic test data based on JSON Schema
|
|
19
19
|
- **🖥️ In-Chat Service Control** - Start/stop/restart mock server and web viewer directly inside TUI (`/mock`, `/view`)
|
|
20
20
|
- **🗂️ Manifest Indexing** - Built-in manifest rebuild command for dependency/index consistency (`loom manifest rebuild`)
|
|
21
|
+
- **⬆️ Auto Update Prompt** - On startup, Loom checks npm for a newer version and can upgrade automatically after confirmation
|
|
21
22
|
- **🔧 TypeScript First** - Fully typed with modern TypeScript architecture
|
|
22
23
|
|
|
23
24
|
## 📦 Installation
|
|
@@ -130,6 +131,15 @@ loom serve
|
|
|
130
131
|
# - Mock API: http://localhost:3000/mock/...
|
|
131
132
|
```
|
|
132
133
|
|
|
134
|
+
### 5. Upgrade Loom
|
|
135
|
+
```bash
|
|
136
|
+
# Manually trigger upgrade
|
|
137
|
+
loom upgrade
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
> Loom also checks npm for updates when you run commands.
|
|
141
|
+
> If a newer version is found, you can confirm and let Loom auto-upgrade.
|
|
142
|
+
|
|
133
143
|
## 📖 Usage Guide
|
|
134
144
|
|
|
135
145
|
### `loom chat`
|
|
@@ -227,6 +237,13 @@ Options:
|
|
|
227
237
|
-h, --help Display help
|
|
228
238
|
```
|
|
229
239
|
|
|
240
|
+
### `loom upgrade`
|
|
241
|
+
Upgrade loom to the latest npm version.
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
loom upgrade
|
|
245
|
+
```
|
|
246
|
+
|
|
230
247
|
## 📝 JSON Schema Format
|
|
231
248
|
|
|
232
249
|
Loom uses a custom JSON Schema format optimized for API documentation:
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
|
package/dist/index.js
CHANGED
|
@@ -7,19 +7,31 @@
|
|
|
7
7
|
* loom view [--port] — Web 文档查看器
|
|
8
8
|
* loom mock [--port] — Mock 服务
|
|
9
9
|
* loom serve [--port] — 文档查看 + Mock 合一
|
|
10
|
+
* loom upgrade — 从 npm 升级 loom
|
|
10
11
|
* loom manifest rebuild — 重建 docs manifest 索引
|
|
11
12
|
*/
|
|
12
13
|
import { Command } from 'commander';
|
|
13
14
|
import { loadConfig, getOutDir } from './shared/config.js';
|
|
14
15
|
import { ensureChatConfig } from './shared/config-wizard.js';
|
|
15
16
|
import { logger } from './shared/logger.js';
|
|
16
|
-
import {
|
|
17
|
+
import { checkForUpdatesAndPromptUpgrade, upgradeLoomPackage } from './shared/update.js';
|
|
18
|
+
import { getPackageName, getPackageVersion } from './shared/version.js';
|
|
17
19
|
const program = new Command();
|
|
18
20
|
const VERSION = getPackageVersion();
|
|
21
|
+
const PACKAGE_NAME = getPackageName();
|
|
19
22
|
program
|
|
20
23
|
.name('loom')
|
|
21
24
|
.description('AI-powered JSON Schema document generator')
|
|
22
25
|
.version(VERSION);
|
|
26
|
+
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
27
|
+
if (actionCommand.name() === 'upgrade') {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
await checkForUpdatesAndPromptUpgrade({
|
|
31
|
+
packageName: PACKAGE_NAME,
|
|
32
|
+
currentVersion: VERSION,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
23
35
|
// ============================================================
|
|
24
36
|
// loom chat
|
|
25
37
|
// ============================================================
|
|
@@ -102,5 +114,21 @@ manifestCommand
|
|
|
102
114
|
logger.info(`Indexed ${manifest.endpointIndex.length} endpoints, ` +
|
|
103
115
|
`${manifest.entities.length} entities, ${manifest.references.length} references.`);
|
|
104
116
|
});
|
|
105
|
-
|
|
117
|
+
// ============================================================
|
|
118
|
+
// loom upgrade
|
|
119
|
+
// ============================================================
|
|
120
|
+
program
|
|
121
|
+
.command('upgrade')
|
|
122
|
+
.alias('update')
|
|
123
|
+
.description('Upgrade loom to latest version from npm')
|
|
124
|
+
.action(async () => {
|
|
125
|
+
const upgraded = await upgradeLoomPackage(PACKAGE_NAME);
|
|
126
|
+
if (upgraded) {
|
|
127
|
+
logger.success('升级完成,请重新运行 loom。');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
logger.error(`自动升级失败,请手动执行: npm install -g ${PACKAGE_NAME}@latest`);
|
|
131
|
+
process.exitCode = 1;
|
|
132
|
+
});
|
|
133
|
+
await program.parseAsync(process.argv);
|
|
106
134
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type UpdatePromptOptions = {
|
|
2
|
+
packageName: string;
|
|
3
|
+
currentVersion: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function compareVersions(leftVersion: string, rightVersion: string): number;
|
|
6
|
+
export declare function upgradeLoomPackage(packageName: string): Promise<boolean>;
|
|
7
|
+
export declare function checkForUpdatesAndPromptUpgrade(options: UpdatePromptOptions): Promise<void>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/shared/update.ts"],"names":[],"mappings":"AAmBA,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAyDF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAwBjF;AAuGD,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAa9E;AAED,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEjG"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import readline from 'node:readline/promises';
|
|
5
|
+
import { execFile, spawn } from 'node:child_process';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const UPDATE_CHECK_INTERVAL_MS = 12 * 60 * 60 * 1000;
|
|
10
|
+
const UPDATE_STATE_PATH = path.join(os.homedir(), '.loom', 'update-check.json');
|
|
11
|
+
const UPDATE_TIMEOUT_MS = 5000;
|
|
12
|
+
function parseVersion(version) {
|
|
13
|
+
const [stablePart, prereleasePart = ''] = version.trim().split('-', 2);
|
|
14
|
+
const stable = stablePart
|
|
15
|
+
.split('.')
|
|
16
|
+
.map((part) => Number.parseInt(part, 10))
|
|
17
|
+
.map((num) => (Number.isNaN(num) ? 0 : num));
|
|
18
|
+
const prerelease = prereleasePart === '' ? [] : prereleasePart.split('.');
|
|
19
|
+
return { stable, prerelease };
|
|
20
|
+
}
|
|
21
|
+
function comparePrerelease(left, right) {
|
|
22
|
+
const length = Math.max(left.length, right.length);
|
|
23
|
+
for (let i = 0; i < length; i += 1) {
|
|
24
|
+
const l = left[i];
|
|
25
|
+
const r = right[i];
|
|
26
|
+
if (l === undefined && r === undefined) {
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
if (l === undefined) {
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
if (r === undefined) {
|
|
33
|
+
return 1;
|
|
34
|
+
}
|
|
35
|
+
const leftNum = Number.parseInt(l, 10);
|
|
36
|
+
const rightNum = Number.parseInt(r, 10);
|
|
37
|
+
const leftIsNum = /^[0-9]+$/.test(l);
|
|
38
|
+
const rightIsNum = /^[0-9]+$/.test(r);
|
|
39
|
+
if (leftIsNum && rightIsNum) {
|
|
40
|
+
if (leftNum !== rightNum) {
|
|
41
|
+
return leftNum > rightNum ? 1 : -1;
|
|
42
|
+
}
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (leftIsNum && !rightIsNum) {
|
|
46
|
+
return -1;
|
|
47
|
+
}
|
|
48
|
+
if (!leftIsNum && rightIsNum) {
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
if (l !== r) {
|
|
52
|
+
return l > r ? 1 : -1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
export function compareVersions(leftVersion, rightVersion) {
|
|
58
|
+
const left = parseVersion(leftVersion);
|
|
59
|
+
const right = parseVersion(rightVersion);
|
|
60
|
+
const stableLength = Math.max(left.stable.length, right.stable.length, 3);
|
|
61
|
+
for (let i = 0; i < stableLength; i += 1) {
|
|
62
|
+
const l = left.stable[i] ?? 0;
|
|
63
|
+
const r = right.stable[i] ?? 0;
|
|
64
|
+
if (l !== r) {
|
|
65
|
+
return l > r ? 1 : -1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (left.prerelease.length === 0 && right.prerelease.length === 0) {
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
if (left.prerelease.length === 0) {
|
|
72
|
+
return 1;
|
|
73
|
+
}
|
|
74
|
+
if (right.prerelease.length === 0) {
|
|
75
|
+
return -1;
|
|
76
|
+
}
|
|
77
|
+
return comparePrerelease(left.prerelease, right.prerelease);
|
|
78
|
+
}
|
|
79
|
+
function readUpdateState() {
|
|
80
|
+
try {
|
|
81
|
+
const content = fs.readFileSync(UPDATE_STATE_PATH, 'utf8');
|
|
82
|
+
const parsed = JSON.parse(content);
|
|
83
|
+
if (typeof parsed.lastCheckedAt === 'number' &&
|
|
84
|
+
Number.isFinite(parsed.lastCheckedAt) &&
|
|
85
|
+
typeof parsed.latestVersion === 'string' &&
|
|
86
|
+
parsed.latestVersion.trim() !== '') {
|
|
87
|
+
return {
|
|
88
|
+
lastCheckedAt: parsed.lastCheckedAt,
|
|
89
|
+
latestVersion: parsed.latestVersion,
|
|
90
|
+
skippedVersion: typeof parsed.skippedVersion === 'string' && parsed.skippedVersion.trim() !== ''
|
|
91
|
+
? parsed.skippedVersion
|
|
92
|
+
: undefined,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Ignore cache parsing failures.
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
function writeUpdateState(state) {
|
|
102
|
+
try {
|
|
103
|
+
fs.mkdirSync(path.dirname(UPDATE_STATE_PATH), { recursive: true });
|
|
104
|
+
fs.writeFileSync(UPDATE_STATE_PATH, JSON.stringify(state), 'utf8');
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Ignore cache write failures.
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function shouldSkipUpdateCheck() {
|
|
111
|
+
return Boolean(process.env.CI || process.env.LOOM_DISABLE_UPDATE_CHECK);
|
|
112
|
+
}
|
|
113
|
+
function normalizeNpmVersionOutput(stdout) {
|
|
114
|
+
const trimmed = stdout.trim();
|
|
115
|
+
if (trimmed === '') {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
if (trimmed.startsWith('"') || trimmed.startsWith("'")) {
|
|
119
|
+
try {
|
|
120
|
+
const parsed = JSON.parse(trimmed);
|
|
121
|
+
if (typeof parsed === 'string' && parsed.trim() !== '') {
|
|
122
|
+
return parsed.trim();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return trimmed;
|
|
130
|
+
}
|
|
131
|
+
async function fetchLatestVersionFromNpm(packageName) {
|
|
132
|
+
try {
|
|
133
|
+
const { stdout } = await execFileAsync('npm', ['view', packageName, 'version', '--json'], { timeout: UPDATE_TIMEOUT_MS });
|
|
134
|
+
return normalizeNpmVersionOutput(stdout);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function shouldPromptUpgrade() {
|
|
141
|
+
return Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
142
|
+
}
|
|
143
|
+
async function askUpgradeDecision(latestVersion) {
|
|
144
|
+
const rl = readline.createInterface({
|
|
145
|
+
input: process.stdin,
|
|
146
|
+
output: process.stdout,
|
|
147
|
+
});
|
|
148
|
+
try {
|
|
149
|
+
logger.info(`检测到新版本 ${latestVersion},请选择: [1] 立即升级 [2] 忽略此版本 [3] 下次再说`);
|
|
150
|
+
const answer = (await rl.question('请输入选项 (1/2/3,默认 1): ')).trim().toLowerCase();
|
|
151
|
+
if (answer === '' || answer === '1' || answer === 'y' || answer === 'yes') {
|
|
152
|
+
return 'upgrade';
|
|
153
|
+
}
|
|
154
|
+
if (answer === '2' || answer === 'i' || answer === 'ignore') {
|
|
155
|
+
return 'skip-version';
|
|
156
|
+
}
|
|
157
|
+
return 'later';
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
rl.close();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export async function upgradeLoomPackage(packageName) {
|
|
164
|
+
const installTarget = `${packageName}@latest`;
|
|
165
|
+
logger.info(`正在执行升级: npm install -g ${installTarget}`);
|
|
166
|
+
return new Promise((resolve) => {
|
|
167
|
+
const child = spawn('npm', ['install', '-g', installTarget], {
|
|
168
|
+
stdio: 'inherit',
|
|
169
|
+
shell: process.platform === 'win32',
|
|
170
|
+
});
|
|
171
|
+
child.once('error', () => resolve(false));
|
|
172
|
+
child.once('exit', (code) => resolve(code === 0));
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
export async function checkForUpdatesAndPromptUpgrade(options) {
|
|
176
|
+
if (shouldSkipUpdateCheck()) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const now = Date.now();
|
|
180
|
+
const state = readUpdateState();
|
|
181
|
+
const canUseCache = state !== null && now - state.lastCheckedAt < UPDATE_CHECK_INTERVAL_MS && state.latestVersion !== '';
|
|
182
|
+
let latestVersion = null;
|
|
183
|
+
if (canUseCache) {
|
|
184
|
+
latestVersion = state.latestVersion;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
latestVersion = await fetchLatestVersionFromNpm(options.packageName);
|
|
188
|
+
if (latestVersion) {
|
|
189
|
+
const skippedVersion = state?.skippedVersion && compareVersions(latestVersion, state.skippedVersion) <= 0
|
|
190
|
+
? state.skippedVersion
|
|
191
|
+
: undefined;
|
|
192
|
+
writeUpdateState({
|
|
193
|
+
lastCheckedAt: now,
|
|
194
|
+
latestVersion,
|
|
195
|
+
skippedVersion,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (!latestVersion || compareVersions(latestVersion, options.currentVersion) <= 0) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (state?.skippedVersion && compareVersions(latestVersion, state.skippedVersion) <= 0) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
logger.warn(`发现 loom 新版本: ${options.currentVersion} -> ${latestVersion}`);
|
|
206
|
+
if (!shouldPromptUpgrade()) {
|
|
207
|
+
logger.info(`请手动执行: npm install -g ${options.packageName}@latest`);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const decision = await askUpgradeDecision(latestVersion);
|
|
211
|
+
if (decision === 'skip-version') {
|
|
212
|
+
writeUpdateState({
|
|
213
|
+
lastCheckedAt: now,
|
|
214
|
+
latestVersion,
|
|
215
|
+
skippedVersion: latestVersion,
|
|
216
|
+
});
|
|
217
|
+
logger.info(`已忽略版本 ${latestVersion},可稍后执行: npm install -g ${options.packageName}@latest`);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (decision === 'later') {
|
|
221
|
+
logger.info(`本次不升级,可稍后执行: npm install -g ${options.packageName}@latest`);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const upgraded = await upgradeLoomPackage(options.packageName);
|
|
225
|
+
if (upgraded) {
|
|
226
|
+
logger.success('升级完成,请重新运行 loom。');
|
|
227
|
+
process.exit(0);
|
|
228
|
+
}
|
|
229
|
+
logger.error(`自动升级失败,请手动执行: npm install -g ${options.packageName}@latest`);
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/shared/update.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"AAwBA,wBAAgB,iBAAiB,IAAI,MAAM,CAa1C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAavC"}
|
package/dist/shared/version.js
CHANGED
|
@@ -4,22 +4,38 @@ import { fileURLToPath } from 'node:url';
|
|
|
4
4
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
5
5
|
const packageJsonPath = path.resolve(__dirname, '..', '..', 'package.json');
|
|
6
6
|
let cachedVersion = null;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return cachedVersion;
|
|
10
|
-
}
|
|
7
|
+
let cachedPackageName = null;
|
|
8
|
+
function readPackageMeta() {
|
|
11
9
|
try {
|
|
12
10
|
const content = fs.readFileSync(packageJsonPath, 'utf8');
|
|
13
|
-
|
|
14
|
-
if (typeof parsed.version === 'string' && parsed.version.trim() !== '') {
|
|
15
|
-
cachedVersion = parsed.version;
|
|
16
|
-
return cachedVersion;
|
|
17
|
-
}
|
|
11
|
+
return JSON.parse(content);
|
|
18
12
|
}
|
|
19
13
|
catch {
|
|
20
|
-
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function getPackageVersion() {
|
|
18
|
+
if (cachedVersion) {
|
|
19
|
+
return cachedVersion;
|
|
20
|
+
}
|
|
21
|
+
const meta = readPackageMeta();
|
|
22
|
+
if (meta && typeof meta.version === 'string' && meta.version.trim() !== '') {
|
|
23
|
+
cachedVersion = meta.version;
|
|
24
|
+
return cachedVersion;
|
|
21
25
|
}
|
|
22
26
|
cachedVersion = '0.0.0';
|
|
23
27
|
return cachedVersion;
|
|
24
28
|
}
|
|
29
|
+
export function getPackageName() {
|
|
30
|
+
if (cachedPackageName) {
|
|
31
|
+
return cachedPackageName;
|
|
32
|
+
}
|
|
33
|
+
const meta = readPackageMeta();
|
|
34
|
+
if (meta && typeof meta.name === 'string' && meta.name.trim() !== '') {
|
|
35
|
+
cachedPackageName = meta.name;
|
|
36
|
+
return cachedPackageName;
|
|
37
|
+
}
|
|
38
|
+
cachedPackageName = 'loom';
|
|
39
|
+
return cachedPackageName;
|
|
40
|
+
}
|
|
25
41
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAE5E,IAAI,aAAa,GAAkB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAE5E,IAAI,aAAa,GAAkB,IAAI,CAAC;AACxC,IAAI,iBAAiB,GAAkB,IAAI,CAAC;AAO5C,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3E,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,aAAa,GAAG,OAAO,CAAC;IACxB,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrE,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,iBAAiB,GAAG,MAAM,CAAC;IAC3B,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|