@bstage-sdk/cli 0.8.2 → 0.8.3
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/MIGRATION.md
CHANGED
|
@@ -51,6 +51,42 @@
|
|
|
51
51
|
|
|
52
52
|
---
|
|
53
53
|
|
|
54
|
+
## → cli 0.8.3 · ai-toolkit 0.8.3
|
|
55
|
+
|
|
56
|
+
### sandbox 포털 기본 주소가 공개 주소로 바뀌었다 — `자동`
|
|
57
|
+
|
|
58
|
+
**영향**
|
|
59
|
+
|
|
60
|
+
- sandbox 포털에 로그인·배포하는 모든 프로젝트. 할 일은 없다.
|
|
61
|
+
- 사외(파트너) 환경에서 `bstage login`이 `ENOTFOUND`로 실패하던 문제가 풀린다.
|
|
62
|
+
|
|
63
|
+
**변경 내용**
|
|
64
|
+
|
|
65
|
+
- sandbox 포털 기본 주소: 예전 사내망 전용 주소(사설 IP) → `bstage-portal.sandstage.in`(공개).
|
|
66
|
+
- 옛 주소로 저장된 `.bstage/project.json`·로그인 토큰·`BSTAGE_PORTAL_URL`·`--portal` 값은 새 주소로 바꿔 읽는다. 다시 `bstage link`·`bstage login` 하지 않아도 된다. 토큰 파일은 다음 로그인 때 새 주소 키로 합쳐진다.
|
|
67
|
+
- 스킴 없이 준 포털 주소(예: `BSTAGE_PORTAL_URL=bstage-portal.sandstage.in`)는 https로 본다. 예전에는 `Invalid URL`로 실패했다.
|
|
68
|
+
|
|
69
|
+
**적용**
|
|
70
|
+
|
|
71
|
+
1. (자동) CLI를 올리면 된다. 옛 버전에서 사외 로그인이 필요하면 `npx bstage login --portal https://bstage-portal.sandstage.in` 또는 `BSTAGE_PORTAL_URL=https://bstage-portal.sandstage.in`(스킴 포함)을 쓴다.
|
|
72
|
+
|
|
73
|
+
### 템플릿 `name`은 폴더명과 같을 필요가 없다(문서 정정) — `자동`
|
|
74
|
+
|
|
75
|
+
**영향**
|
|
76
|
+
|
|
77
|
+
- 코드·빌드 동작은 바뀌지 않는다. 문서만 바로잡았다.
|
|
78
|
+
- `AGENTS.md`와 `bstage-template` 스킬이 "`createTemplate`의 `name`은 폴더명과 동일해야 한다"고 안내했지만, 빌드는 그런 검사를 하지 않는다. 이 문구를 따라 페이지 폴더명을 `name`에 맞추느라 배포 경로가 의도와 달라질 수 있었다(예: `/todos`로 내보내려던 페이지가 `/garen-todos`로 나감).
|
|
79
|
+
|
|
80
|
+
**변경 내용**
|
|
81
|
+
|
|
82
|
+
- `name`은 Custom Element 태그명이다. 소문자로 시작하고 하이픈을 1개 이상 넣고 소문자·숫자·하이픈만 쓴다. 레포 안에서 템플릿마다 달라야 한다(`bstage build`가 검사).
|
|
83
|
+
- 배포 경로(페이지)와 슬롯 자리는 폴더 위치가 정한다(`src/pages/{경로}/`). 그래서 `name`은 폴더명과 같을 필요가 없다. 예: 폴더 `src/pages/todos` + `name: 'garen-todos'`.
|
|
84
|
+
- **AGENTS.md 관리 영역 v16**: 위 내용으로 템플릿 작성 절을 고쳤다. `bstage-template` 스킬도 같은 내용으로 고쳤다.
|
|
85
|
+
|
|
86
|
+
**적용**
|
|
87
|
+
|
|
88
|
+
1. (자동) `npx @bstage-sdk/cli@latest ai update` — 스킬·`AGENTS.md` 관리 영역을 v16으로 갱신한다.
|
|
89
|
+
|
|
54
90
|
## → cli 0.7.0
|
|
55
91
|
|
|
56
92
|
### 페이지 배치를 CLI로 만든다 — `bstage placement create` — `자동` · `선택`
|
|
@@ -67,7 +67,10 @@ var TRANSLATION_CDN_BASE_KEY = "static/i18n";
|
|
|
67
67
|
var TRANSLATION_CDN_BUCKET_PREFIX = "cdn.bstage.in/";
|
|
68
68
|
var PORTAL_HOSTS = {
|
|
69
69
|
real: "portal.bstage.in",
|
|
70
|
-
sandbox: "bstage-portal.
|
|
70
|
+
sandbox: "bstage-portal.sandstage.in"
|
|
71
|
+
};
|
|
72
|
+
var LEGACY_PORTAL_HOSTS = {
|
|
73
|
+
"bstage-portal.sandbox.bstage.systems": "bstage-portal.sandstage.in"
|
|
71
74
|
};
|
|
72
75
|
var PORTAL_HOST_ENV_KEY = "VITE_BSTAGE_PORTAL_HOST";
|
|
73
76
|
function getAuthHost(mode, phase, tenantId) {
|
|
@@ -2129,6 +2132,7 @@ export {
|
|
|
2129
2132
|
TRANSLATION_CDN_BASE_KEY,
|
|
2130
2133
|
TRANSLATION_CDN_BUCKET_PREFIX,
|
|
2131
2134
|
PORTAL_HOSTS,
|
|
2135
|
+
LEGACY_PORTAL_HOSTS,
|
|
2132
2136
|
PORTAL_HOST_ENV_KEY,
|
|
2133
2137
|
resolveProjectTarget,
|
|
2134
2138
|
appKeyEnvDefine,
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
APP_KEY_VAR,
|
|
4
4
|
DEFAULT_TRANSLATION_TIER,
|
|
5
5
|
LEGACY_APP_KEY_VAR,
|
|
6
|
+
LEGACY_PORTAL_HOSTS,
|
|
6
7
|
LOGIN_PATH,
|
|
7
8
|
PORTAL_HOSTS,
|
|
8
9
|
PORTAL_HOST_ENV_KEY,
|
|
@@ -16,7 +17,7 @@ import {
|
|
|
16
17
|
isPublicPhase,
|
|
17
18
|
resolvePhase,
|
|
18
19
|
resolveProjectTarget
|
|
19
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-MSXSJHUT.js";
|
|
20
21
|
|
|
21
22
|
// src/index.ts
|
|
22
23
|
import { readFileSync as readFileSync5 } from "fs";
|
|
@@ -2211,7 +2212,10 @@ import { dirname as dirname5, join as join7 } from "path";
|
|
|
2211
2212
|
import { loadEnv as loadEnv2 } from "vite";
|
|
2212
2213
|
var LOCAL_HOSTS = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
2213
2214
|
function normalizePortalUrl(url) {
|
|
2214
|
-
const
|
|
2215
|
+
const raw = url.trim();
|
|
2216
|
+
const u = new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(raw) ? raw : `https://${raw}`);
|
|
2217
|
+
const current = LEGACY_PORTAL_HOSTS[u.hostname];
|
|
2218
|
+
if (current) u.hostname = current;
|
|
2215
2219
|
if (u.protocol !== "https:" && !(u.protocol === "http:" && LOCAL_HOSTS.has(u.hostname))) {
|
|
2216
2220
|
fail(
|
|
2217
2221
|
ExitCode.PRECONDITION,
|
|
@@ -2345,14 +2349,32 @@ function sanitize(tokens) {
|
|
|
2345
2349
|
});
|
|
2346
2350
|
return Object.fromEntries(buckets.filter(([, bucket]) => Object.keys(bucket).length > 0));
|
|
2347
2351
|
}
|
|
2352
|
+
function canonicalPortalKey(portal) {
|
|
2353
|
+
try {
|
|
2354
|
+
return normalizePortalUrl(portal);
|
|
2355
|
+
} catch {
|
|
2356
|
+
return portal;
|
|
2357
|
+
}
|
|
2358
|
+
}
|
|
2359
|
+
function mergeByCanonicalPortal(tokens) {
|
|
2360
|
+
return Object.entries(tokens).reduce((acc, [portal, bucket]) => {
|
|
2361
|
+
const key = canonicalPortalKey(portal);
|
|
2362
|
+
const existing = acc[key] ?? {};
|
|
2363
|
+
const merged = key === portal ? { ...existing, ...bucket } : { ...bucket, ...existing };
|
|
2364
|
+
return { ...acc, [key]: merged };
|
|
2365
|
+
}, {});
|
|
2366
|
+
}
|
|
2348
2367
|
function migrate(raw) {
|
|
2349
2368
|
if (!raw || typeof raw !== "object") return { version: 2, tokens: {} };
|
|
2350
2369
|
const obj = raw;
|
|
2351
2370
|
if (obj.version === 2 && obj.tokens && typeof obj.tokens === "object") {
|
|
2352
|
-
return {
|
|
2371
|
+
return {
|
|
2372
|
+
version: 2,
|
|
2373
|
+
tokens: mergeByCanonicalPortal(sanitize(obj.tokens))
|
|
2374
|
+
};
|
|
2353
2375
|
}
|
|
2354
2376
|
const tokens = Object.entries(obj).filter(([, v]) => isEntry(v)).map(([portal, v]) => [portal, { [UNKNOWN_ORG]: v }]);
|
|
2355
|
-
return { version: 2, tokens: Object.fromEntries(tokens) };
|
|
2377
|
+
return { version: 2, tokens: mergeByCanonicalPortal(Object.fromEntries(tokens)) };
|
|
2356
2378
|
}
|
|
2357
2379
|
async function readCredentialFile(env2) {
|
|
2358
2380
|
try {
|
package/dist/vite/preset.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bstage-sdk/cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "bstage SDK CLI — build b.stage templates",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
"liquidjs": "^10.24.0",
|
|
33
33
|
"picocolors": "^1.1.1",
|
|
34
34
|
"vite": "^7.0.0",
|
|
35
|
-
"@bstage-sdk/ai-toolkit": "0.8.
|
|
36
|
-
"@bstage-sdk/core": "0.8.
|
|
35
|
+
"@bstage-sdk/ai-toolkit": "0.8.3",
|
|
36
|
+
"@bstage-sdk/core": "0.8.3"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^25.5.0",
|
|
40
40
|
"tsup": "^8.0.0",
|
|
41
41
|
"typescript": "^5.5.0",
|
|
42
|
-
"@bstage-sdk/design": "0.8.
|
|
42
|
+
"@bstage-sdk/design": "0.8.3"
|
|
43
43
|
},
|
|
44
44
|
"license": "MIT",
|
|
45
45
|
"scripts": {
|