@adep/cli 0.1.12 → 0.1.14
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 +2 -2
- package/dist/index.js +56 -25
- package/dist/vite.js +11 -9
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -235,8 +235,8 @@ adep serve --db sqlite --db-file var/local.sqlite # 指定库文件
|
|
|
235
235
|
- 绑定非回环地址时给出对外暴露警告(它不带生产级加固)。
|
|
236
236
|
|
|
237
237
|
- 数据库两档模式(`--db`):
|
|
238
|
-
- `
|
|
239
|
-
- `
|
|
238
|
+
- `sqlite`(缺省):**真实 SQLite 库文件**,驱动按运行时分派(Bun → `bun:sqlite`,Node ≥ 22.5 → `node:sqlite`)。`--schema` 的每条语句都真实执行,**失败即停**(视图 / 唯一索引 / 触发器等 sim 做不到的能力全可用)。运行时不支持(Bun / Node < 22.5)或打开库文件失败时**自动降级 `sim` 并告警**,不拒绝启动;
|
|
239
|
+
- `sim`:内置模拟引擎,库是 JSON 文件 `.adep/sim/db.json`。`--schema` 只支持 DDL 子集,其余语句跳过并告警。
|
|
240
240
|
- 模式名写错(旗标或环境变量)一律拒绝启动,不静默换库;启动横幅与根路径 `/` 会回显 `db.mode` / `db.file` / `db.driver`。
|
|
241
241
|
|
|
242
242
|
### `adep publish`
|
package/dist/index.js
CHANGED
|
@@ -54,7 +54,8 @@ async function loadCredentials(paths) {
|
|
|
54
54
|
return {
|
|
55
55
|
server: parsed["server"],
|
|
56
56
|
email: parsed["email"],
|
|
57
|
-
encodedToken: parsed["encodedToken"]
|
|
57
|
+
encodedToken: parsed["encodedToken"],
|
|
58
|
+
...typeof parsed["cookieName"] === "string" ? { cookieName: parsed["cookieName"] } : {}
|
|
58
59
|
};
|
|
59
60
|
} catch {
|
|
60
61
|
return null;
|
|
@@ -69,6 +70,10 @@ function encodeToken(token) {
|
|
|
69
70
|
function decodeToken(encoded) {
|
|
70
71
|
return Buffer.from(encoded, "base64").toString("utf8");
|
|
71
72
|
}
|
|
73
|
+
function sessionCookieHeader(credentials) {
|
|
74
|
+
const name = credentials.cookieName ?? (credentials.server.startsWith("https://") ? "__Secure-better-auth.session_token" : "better-auth.session_token");
|
|
75
|
+
return `${name}=${decodeToken(credentials.encodedToken)}`;
|
|
76
|
+
}
|
|
72
77
|
var init_credentials = __esm({
|
|
73
78
|
"packages/cli/src/credentials.ts"() {
|
|
74
79
|
"use strict";
|
|
@@ -149,7 +154,7 @@ var init_net = __esm({
|
|
|
149
154
|
// packages/cli/src/auth.ts
|
|
150
155
|
function sessionCookieOf(setCookie) {
|
|
151
156
|
const line = setCookie.find(
|
|
152
|
-
(entry) =>
|
|
157
|
+
(entry) => !/max-age=0/i.test(entry) && /^(?:__Secure-)?better-auth\.session_token=/.test(entry)
|
|
153
158
|
);
|
|
154
159
|
if (line === void 0) {
|
|
155
160
|
throw new CliError("LOGIN_FAILED", "\u767B\u5F55\u6210\u529F\u4F46\u672A\u8FD4\u56DE\u4F1A\u8BDD token\uFF0C\u8BF7\u68C0\u67E5\u5E73\u53F0\u7248\u672C");
|
|
@@ -176,11 +181,14 @@ async function login(paths, input) {
|
|
|
176
181
|
throw new CliError("LOGIN_FAILED", "\u767B\u5F55\u5931\u8D25\uFF1A\u90AE\u7BB1\u6216\u5BC6\u7801\u4E0D\u6B63\u786E\uFF08\u6216\u8BE5\u8D26\u53F7\u672A\u6CE8\u518C\uFF09");
|
|
177
182
|
}
|
|
178
183
|
const cookie = sessionCookieOf(response.headers.getSetCookie());
|
|
179
|
-
const
|
|
184
|
+
const eq = cookie.indexOf("=");
|
|
185
|
+
const cookieName = cookie.slice(0, eq);
|
|
186
|
+
const token = cookie.slice(eq + 1);
|
|
180
187
|
await saveCredentials(paths, {
|
|
181
188
|
server,
|
|
182
189
|
email: input.email,
|
|
183
|
-
encodedToken: encodeToken(token)
|
|
190
|
+
encodedToken: encodeToken(token),
|
|
191
|
+
cookieName
|
|
184
192
|
});
|
|
185
193
|
return { email: input.email };
|
|
186
194
|
}
|
|
@@ -191,7 +199,7 @@ async function whoami(paths) {
|
|
|
191
199
|
throw new CliError("NOT_LOGGED_IN", "\u672A\u767B\u5F55\uFF1A\u8BF7\u5148\u6267\u884C adep login");
|
|
192
200
|
}
|
|
193
201
|
const response = await fetch(`${credentials.server}/api/auth/get-session`, {
|
|
194
|
-
headers: { cookie:
|
|
202
|
+
headers: { cookie: sessionCookieHeader(credentials) }
|
|
195
203
|
});
|
|
196
204
|
if (response.status !== 200) {
|
|
197
205
|
throw new CliError("SESSION_EXPIRED", "\u4F1A\u8BDD\u5DF2\u5931\u6548\uFF1A\u8BF7\u91CD\u65B0\u6267\u884C adep login");
|
|
@@ -209,7 +217,7 @@ async function logout(paths) {
|
|
|
209
217
|
try {
|
|
210
218
|
await fetch(`${credentials.server}/api/auth/sign-out`, {
|
|
211
219
|
method: "POST",
|
|
212
|
-
headers: { cookie:
|
|
220
|
+
headers: { cookie: sessionCookieHeader(credentials) }
|
|
213
221
|
});
|
|
214
222
|
} catch {
|
|
215
223
|
}
|
|
@@ -1683,6 +1691,10 @@ function toNumber(raw) {
|
|
|
1683
1691
|
const n = Number(t);
|
|
1684
1692
|
return Number.isNaN(n) ? null : n;
|
|
1685
1693
|
}
|
|
1694
|
+
function arithmeticOperand(v) {
|
|
1695
|
+
const n = Number(v);
|
|
1696
|
+
return Number.isFinite(n) ? n : 0;
|
|
1697
|
+
}
|
|
1686
1698
|
function stripQuotes(raw) {
|
|
1687
1699
|
const t = raw.trim();
|
|
1688
1700
|
if (/^'.*'$/.test(t)) return t.slice(1, -1);
|
|
@@ -1837,10 +1849,6 @@ function resolveSetValue(value, existing, row) {
|
|
|
1837
1849
|
return value;
|
|
1838
1850
|
}
|
|
1839
1851
|
function evalArithmetic(src, existing, row) {
|
|
1840
|
-
const num = (v) => {
|
|
1841
|
-
const n2 = Number(v);
|
|
1842
|
-
return Number.isFinite(n2) ? n2 : 0;
|
|
1843
|
-
};
|
|
1844
1852
|
let i = 0;
|
|
1845
1853
|
const n = src.length;
|
|
1846
1854
|
const skip = () => {
|
|
@@ -1885,7 +1893,7 @@ function evalArithmetic(src, existing, row) {
|
|
|
1885
1893
|
const id = parseIdent();
|
|
1886
1894
|
if (id !== null) {
|
|
1887
1895
|
const v = id.excluded ? row[id.col] : existing[id.col];
|
|
1888
|
-
return
|
|
1896
|
+
return arithmeticOperand(v);
|
|
1889
1897
|
}
|
|
1890
1898
|
return 0;
|
|
1891
1899
|
};
|
|
@@ -2035,6 +2043,9 @@ function parseSelectItem(raw) {
|
|
|
2035
2043
|
const plain = unqualifyColumn(ident(name));
|
|
2036
2044
|
return { name: plain, qualified, alias: as === null ? plain : ident(as[1] ?? ""), star: false };
|
|
2037
2045
|
}
|
|
2046
|
+
function projectValueOf(row, item) {
|
|
2047
|
+
return item.qualified !== "" && row[item.qualified] !== void 0 ? row[item.qualified] : row[item.name];
|
|
2048
|
+
}
|
|
2038
2049
|
function project(rows, selectRaw) {
|
|
2039
2050
|
if (/^count\s*\(\s*\*/i.test(selectRaw) || /^count\s*\(\s*1\)/i.test(selectRaw)) {
|
|
2040
2051
|
const alias = selectRaw.match(/\bAS\s+([A-Za-z_][A-Za-z0-9_]*)/i)?.[1] ?? "n";
|
|
@@ -2046,20 +2057,19 @@ function project(rows, selectRaw) {
|
|
|
2046
2057
|
}
|
|
2047
2058
|
if (selectRaw.trim() === "*") return rows;
|
|
2048
2059
|
const items = selectRaw.split(",").map(parseSelectItem);
|
|
2049
|
-
const valueOf = (row, item) => item.qualified !== "" && row[item.qualified] !== void 0 ? row[item.qualified] : row[item.name];
|
|
2050
2060
|
if (items.some((item) => item.star)) {
|
|
2051
2061
|
return rows.map((row) => {
|
|
2052
2062
|
const out = { ...row };
|
|
2053
2063
|
for (const item of items) {
|
|
2054
2064
|
if (item.star) continue;
|
|
2055
|
-
out[item.alias] =
|
|
2065
|
+
out[item.alias] = projectValueOf(row, item);
|
|
2056
2066
|
}
|
|
2057
2067
|
return out;
|
|
2058
2068
|
});
|
|
2059
2069
|
}
|
|
2060
2070
|
return rows.map((row) => {
|
|
2061
2071
|
const out = {};
|
|
2062
|
-
for (const item of items) out[item.alias] =
|
|
2072
|
+
for (const item of items) out[item.alias] = projectValueOf(row, item);
|
|
2063
2073
|
return out;
|
|
2064
2074
|
});
|
|
2065
2075
|
}
|
|
@@ -2581,7 +2591,7 @@ var init_driver = __esm({
|
|
|
2581
2591
|
function compress(h, block, w) {
|
|
2582
2592
|
for (let i = 0; i < 16; i += 1) {
|
|
2583
2593
|
const j = i * 4;
|
|
2584
|
-
w[i] =
|
|
2594
|
+
w[i] = block[j] << 24 | block[j + 1] << 16 | block[j + 2] << 8 | block[j + 3];
|
|
2585
2595
|
}
|
|
2586
2596
|
for (let i = 16; i < 64; i += 1) {
|
|
2587
2597
|
const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ w[i - 15] >>> 3;
|
|
@@ -5159,7 +5169,7 @@ async function createClient(paths) {
|
|
|
5159
5169
|
throw new CliError("NOT_LOGGED_IN", "\u672A\u767B\u5F55\uFF1A\u8BF7\u5148\u6267\u884C adep login");
|
|
5160
5170
|
}
|
|
5161
5171
|
const server = credentials.server;
|
|
5162
|
-
const cookie =
|
|
5172
|
+
const cookie = sessionCookieHeader(credentials);
|
|
5163
5173
|
const request = async (path, init = {}, fallbackCode = "API_REQUEST_FAILED") => {
|
|
5164
5174
|
const method = init.method ?? (init.body === void 0 ? "GET" : "POST");
|
|
5165
5175
|
let response;
|
|
@@ -5495,7 +5505,7 @@ var init_db_mode = __esm({
|
|
|
5495
5505
|
"packages/cli/src/serve/db-mode.ts"() {
|
|
5496
5506
|
"use strict";
|
|
5497
5507
|
SERVE_DB_MODES = ["sim", "sqlite"];
|
|
5498
|
-
DEFAULT_SERVE_DB_MODE = "
|
|
5508
|
+
DEFAULT_SERVE_DB_MODE = "sqlite";
|
|
5499
5509
|
DEFAULT_SQLITE_DB_FILE = ".adep/data/project.sqlite";
|
|
5500
5510
|
}
|
|
5501
5511
|
});
|
|
@@ -5521,9 +5531,12 @@ function detectSqliteRuntime(versions = process.versions) {
|
|
|
5521
5531
|
function sqliteModuleName(runtime) {
|
|
5522
5532
|
return runtime === "bun" ? "bun:sqlite" : "node:sqlite";
|
|
5523
5533
|
}
|
|
5524
|
-
function
|
|
5534
|
+
function sqliteUnavailableReason(versions = process.versions) {
|
|
5525
5535
|
const current = isBun(versions) ? `Bun ${versions["bun"] ?? ""}`.trim() : `Node ${versions["node"] ?? "\u672A\u77E5"}`;
|
|
5526
|
-
return
|
|
5536
|
+
return `\u5F53\u524D\u8FD0\u884C\u65F6 ${current} \u4E0D\u63D0\u4F9B SQLite \u5185\u5EFA\u6A21\u5757\uFF08\u9700\u8981 Bun \u6216 Node \u2265 ${NODE_SQLITE_MIN.major}.${NODE_SQLITE_MIN.minor}\uFF09`;
|
|
5537
|
+
}
|
|
5538
|
+
function sqliteRuntimeRequirementMessage(versions = process.versions) {
|
|
5539
|
+
return `--db sqlite \u9700\u8981 Bun\uFF08\u5185\u7F6E bun:sqlite\uFF09\u6216 Node \u2265 ${NODE_SQLITE_MIN.major}.${NODE_SQLITE_MIN.minor}\uFF08\u5185\u7F6E node:sqlite\uFF09\uFF1B${sqliteUnavailableReason(versions)}\u3002\u8BF7\u6539\u7528 \`--db sim\`\uFF08\u5185\u7F6E\u6A21\u62DF\u5F15\u64CE\uFF0C\u65E0\u9700\u989D\u5916\u8FD0\u884C\u65F6\uFF09\uFF0C\u6216\u5347\u7EA7 Node / \u7528 Bun \u8FD0\u884C\u3002`;
|
|
5527
5540
|
}
|
|
5528
5541
|
async function openSqliteProjectDriver(file, options = {}) {
|
|
5529
5542
|
const runtime = options.runtime ?? detectSqliteRuntime();
|
|
@@ -5629,8 +5642,8 @@ async function startServeServer(options) {
|
|
|
5629
5642
|
cwd,
|
|
5630
5643
|
options.staticDir ?? envString("ADEP_SERVE_STATIC_DIR") ?? "public"
|
|
5631
5644
|
);
|
|
5632
|
-
|
|
5633
|
-
|
|
5645
|
+
let dbMode = resolveServeDbMode(options.db);
|
|
5646
|
+
let sqliteFile = dbMode === "sqlite" ? resolveServeDbFile(cwd, options.dbFile) : null;
|
|
5634
5647
|
const config = await loadConfig(cwd);
|
|
5635
5648
|
const functionsDir = join14(cwd, config.functionsDir);
|
|
5636
5649
|
const bearerUser = bearerUserResolverFromEnv();
|
|
@@ -5651,9 +5664,27 @@ async function startServeServer(options) {
|
|
|
5651
5664
|
let sqliteDriver = null;
|
|
5652
5665
|
if (sqliteFile !== null) {
|
|
5653
5666
|
const runtimeName = detectSqliteRuntime();
|
|
5654
|
-
if (runtimeName === null)
|
|
5655
|
-
|
|
5656
|
-
|
|
5667
|
+
if (runtimeName === null) {
|
|
5668
|
+
log(
|
|
5669
|
+
`[serve] \u8B66\u544A\uFF1A${sqliteUnavailableReason()}\uFF0C\u5DF2\u81EA\u52A8\u964D\u7EA7\u4E3A sim \u6A21\u5F0F\uFF08\u5185\u7F6E\u6A21\u62DF\u5F15\u64CE\uFF0C\u5E93 ${displayPath(cwd, join14(simDir(cwd), "db.json"))}\uFF09\u3002\u5982\u9700\u771F\u5B9E SQLite\uFF0C\u8BF7\u7528 Bun \u6216\u5347\u7EA7 Node \u540E\u91CD\u8BD5\u3002`
|
|
5670
|
+
);
|
|
5671
|
+
dbMode = "sim";
|
|
5672
|
+
sqliteFile = null;
|
|
5673
|
+
} else {
|
|
5674
|
+
sqliteModule = sqliteModuleName(runtimeName);
|
|
5675
|
+
try {
|
|
5676
|
+
sqliteDriver = await openSqliteProjectDriver(sqliteFile, { runtime: runtimeName });
|
|
5677
|
+
} catch (error) {
|
|
5678
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
5679
|
+
log(
|
|
5680
|
+
`[serve] \u8B66\u544A\uFF1A\u6253\u5F00 SQLite \u5E93\u5931\u8D25\uFF08${detail}\uFF09\uFF0C\u5DF2\u81EA\u52A8\u964D\u7EA7\u4E3A sim \u6A21\u5F0F\uFF08\u5185\u7F6E\u6A21\u62DF\u5F15\u64CE\uFF0C\u5E93 ${displayPath(cwd, join14(simDir(cwd), "db.json"))}\uFF09\u3002`
|
|
5681
|
+
);
|
|
5682
|
+
sqliteModule = null;
|
|
5683
|
+
sqliteDriver = null;
|
|
5684
|
+
sqliteFile = null;
|
|
5685
|
+
dbMode = "sim";
|
|
5686
|
+
}
|
|
5687
|
+
}
|
|
5657
5688
|
}
|
|
5658
5689
|
const runtime = await createSimRuntime({
|
|
5659
5690
|
cwd,
|
|
@@ -12255,7 +12286,7 @@ function registerDevServers(program2, ctx) {
|
|
|
12255
12286
|
"\u6570\u636E\u5E93\u7ED3\u6784\u6587\u4EF6\uFF1A\u542F\u52A8\u65F6\u5BF9\u672C\u5730\u5E93\u9010\u6761\u5E94\u7528\uFF08\u5EFA\u8868\u8BED\u53E5\u5EFA\u8BAE IF NOT EXISTS\uFF0C\u5E42\u7B49\u53EF\u91CD\u590D\u542F\u52A8\uFF09"
|
|
12256
12287
|
).option(
|
|
12257
12288
|
"--db <mode>",
|
|
12258
|
-
"\u6570\u636E\u5E93\u6A21\u5F0F\
|
|
12289
|
+
"\u6570\u636E\u5E93\u6A21\u5F0F\uFF1Asqlite\uFF08\u7F3A\u7701\uFF0C\u771F\u5B9E SQLite \u5E93\u6587\u4EF6\uFF0C\u9700 Bun \u6216 Node \u2265 22.5\uFF1B\u8FD0\u884C\u65F6\u4E0D\u652F\u6301\u6216\u6253\u5F00\u5931\u8D25\u65F6\u81EA\u52A8\u964D\u7EA7 sim\uFF09| sim\uFF08\u5185\u7F6E\u6A21\u62DF\u5F15\u64CE + .adep/sim/db.json\uFF09"
|
|
12259
12290
|
).option(
|
|
12260
12291
|
"--db-file <path>",
|
|
12261
12292
|
"sqlite \u6A21\u5F0F\u7684\u5E93\u6587\u4EF6\uFF08\u7F3A\u7701\u53D6 ADEP_SERVE_DB_FILE\uFF0C\u518D\u7F3A\u7701 .adep/data/project.sqlite\uFF09"
|
package/dist/vite.js
CHANGED
|
@@ -1134,6 +1134,10 @@ function toNumber(raw) {
|
|
|
1134
1134
|
const n = Number(t);
|
|
1135
1135
|
return Number.isNaN(n) ? null : n;
|
|
1136
1136
|
}
|
|
1137
|
+
function arithmeticOperand(v) {
|
|
1138
|
+
const n = Number(v);
|
|
1139
|
+
return Number.isFinite(n) ? n : 0;
|
|
1140
|
+
}
|
|
1137
1141
|
function stripQuotes(raw) {
|
|
1138
1142
|
const t = raw.trim();
|
|
1139
1143
|
if (/^'.*'$/.test(t)) return t.slice(1, -1);
|
|
@@ -1303,10 +1307,6 @@ function resolveSetValue(value, existing, row) {
|
|
|
1303
1307
|
return value;
|
|
1304
1308
|
}
|
|
1305
1309
|
function evalArithmetic(src, existing, row) {
|
|
1306
|
-
const num = (v) => {
|
|
1307
|
-
const n2 = Number(v);
|
|
1308
|
-
return Number.isFinite(n2) ? n2 : 0;
|
|
1309
|
-
};
|
|
1310
1310
|
let i = 0;
|
|
1311
1311
|
const n = src.length;
|
|
1312
1312
|
const skip = () => {
|
|
@@ -1351,7 +1351,7 @@ function evalArithmetic(src, existing, row) {
|
|
|
1351
1351
|
const id = parseIdent();
|
|
1352
1352
|
if (id !== null) {
|
|
1353
1353
|
const v = id.excluded ? row[id.col] : existing[id.col];
|
|
1354
|
-
return
|
|
1354
|
+
return arithmeticOperand(v);
|
|
1355
1355
|
}
|
|
1356
1356
|
return 0;
|
|
1357
1357
|
};
|
|
@@ -1781,6 +1781,9 @@ function parseSelectItem(raw) {
|
|
|
1781
1781
|
const plain = unqualifyColumn(ident(name));
|
|
1782
1782
|
return { name: plain, qualified, alias: as === null ? plain : ident(as[1] ?? ""), star: false };
|
|
1783
1783
|
}
|
|
1784
|
+
function projectValueOf(row, item) {
|
|
1785
|
+
return item.qualified !== "" && row[item.qualified] !== void 0 ? row[item.qualified] : row[item.name];
|
|
1786
|
+
}
|
|
1784
1787
|
function project(rows, selectRaw) {
|
|
1785
1788
|
if (/^count\s*\(\s*\*/i.test(selectRaw) || /^count\s*\(\s*1\)/i.test(selectRaw)) {
|
|
1786
1789
|
const alias = selectRaw.match(/\bAS\s+([A-Za-z_][A-Za-z0-9_]*)/i)?.[1] ?? "n";
|
|
@@ -1792,20 +1795,19 @@ function project(rows, selectRaw) {
|
|
|
1792
1795
|
}
|
|
1793
1796
|
if (selectRaw.trim() === "*") return rows;
|
|
1794
1797
|
const items = selectRaw.split(",").map(parseSelectItem);
|
|
1795
|
-
const valueOf = (row, item) => item.qualified !== "" && row[item.qualified] !== void 0 ? row[item.qualified] : row[item.name];
|
|
1796
1798
|
if (items.some((item) => item.star)) {
|
|
1797
1799
|
return rows.map((row) => {
|
|
1798
1800
|
const out = { ...row };
|
|
1799
1801
|
for (const item of items) {
|
|
1800
1802
|
if (item.star) continue;
|
|
1801
|
-
out[item.alias] =
|
|
1803
|
+
out[item.alias] = projectValueOf(row, item);
|
|
1802
1804
|
}
|
|
1803
1805
|
return out;
|
|
1804
1806
|
});
|
|
1805
1807
|
}
|
|
1806
1808
|
return rows.map((row) => {
|
|
1807
1809
|
const out = {};
|
|
1808
|
-
for (const item of items) out[item.alias] =
|
|
1810
|
+
for (const item of items) out[item.alias] = projectValueOf(row, item);
|
|
1809
1811
|
return out;
|
|
1810
1812
|
});
|
|
1811
1813
|
}
|
|
@@ -2058,7 +2060,7 @@ var rotr = (x, n) => x >>> n | x << 32 - n;
|
|
|
2058
2060
|
function compress(h, block, w) {
|
|
2059
2061
|
for (let i = 0; i < 16; i += 1) {
|
|
2060
2062
|
const j = i * 4;
|
|
2061
|
-
w[i] =
|
|
2063
|
+
w[i] = block[j] << 24 | block[j + 1] << 16 | block[j + 2] << 8 | block[j + 3];
|
|
2062
2064
|
}
|
|
2063
2065
|
for (let i = 16; i < 64; i += 1) {
|
|
2064
2066
|
const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ w[i - 15] >>> 3;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adep/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "`adep` 命令行工具包位:登录 / 初始化 / 本地调试 / 部署 / 数据库维护 / 云存储 / 静态托管 / 微前端组件(widget),实现见任务单 CLI-001 ~ CLI-003 与 FE-002;子路径 `@adep/cli/vite` 提供云函数 vite 插件(CLI-014)",
|
|
6
6
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@adep/types": "0.2.3",
|
|
28
|
-
"@adep/runtime": "0.2.
|
|
28
|
+
"@adep/runtime": "0.2.6"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
31
|
"test": "vitest run",
|