create-sonamu 0.1.7 → 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/catalog.json +210 -0
- package/index.js +11 -98
- package/package.json +2 -1
- package/template/src/packages/api/package.json +1 -1
- package/template/src/packages/web/src/entry-client.tsx +18 -14
package/catalog.json
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@adonisjs/ace": "^13.3.0",
|
|
3
|
+
"@adonisjs/tsconfig": "^1.4.1",
|
|
4
|
+
"@ai-sdk/anthropic": "^3.0.0",
|
|
5
|
+
"@ai-sdk/openai": "^3.0.0",
|
|
6
|
+
"@ai-sdk/provider": "^3.0.0",
|
|
7
|
+
"@ai-sdk/provider-utils": "^4.0.0",
|
|
8
|
+
"@ai-sdk/react": "^2.0.104",
|
|
9
|
+
"@aws-sdk/client-ecr-public": "^3.958.0",
|
|
10
|
+
"@aws-sdk/client-s3": "^3.958.0",
|
|
11
|
+
"@aws-sdk/ecr-public": "^3.958.0",
|
|
12
|
+
"@aws-sdk/lib-storage": "^3.971.0",
|
|
13
|
+
"@aws-sdk/s3-request-presigner": "^3.958.0",
|
|
14
|
+
"@better-auth/passkey": "^1.4.18",
|
|
15
|
+
"@better-auth/sso": "^1.4.18",
|
|
16
|
+
"@biomejs/biome": "^2.3.13",
|
|
17
|
+
"@biomejs/js-api": "^4.0.0",
|
|
18
|
+
"@biomejs/wasm-nodejs": "^2.3.7",
|
|
19
|
+
"@changesets/cli": "^2.29.4",
|
|
20
|
+
"@dagrejs/dagre": "^1.1.8",
|
|
21
|
+
"@dnd-kit/core": "^4.0.3",
|
|
22
|
+
"@dnd-kit/sortable": "^5.1.0",
|
|
23
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
24
|
+
"@faker-js/faker": "^9.2.0",
|
|
25
|
+
"@fastify/compress": "^7.0.3",
|
|
26
|
+
"@fastify/cors": "^8.1.0",
|
|
27
|
+
"@fastify/formbody": "^7.1.0",
|
|
28
|
+
"@fastify/middie": "^8.3.0",
|
|
29
|
+
"@fastify/multipart": "^8",
|
|
30
|
+
"@fastify/passport": "^2.2.0",
|
|
31
|
+
"@fastify/static": "^7",
|
|
32
|
+
"@hookform/resolvers": "^5.2.2",
|
|
33
|
+
"@iconify-json/lucide": "^1.2.82",
|
|
34
|
+
"@iconify-json/mdi": "^1.2.3",
|
|
35
|
+
"@iconify/json": "^2.2.421",
|
|
36
|
+
"@iconify/react": "^6.0.2",
|
|
37
|
+
"@japa/assert": "^4.1.1",
|
|
38
|
+
"@japa/file-system": "^2.3.2",
|
|
39
|
+
"@japa/runner": "^4.4.0",
|
|
40
|
+
"@japa/snapshot": "^2.0.9",
|
|
41
|
+
"@julr/tooling-configs": "^4.0.0",
|
|
42
|
+
"@loaderkit/resolve": "^1.0.4",
|
|
43
|
+
"@logtape/fastify": "2.0.0",
|
|
44
|
+
"@logtape/logtape": "2.0.0",
|
|
45
|
+
"@logtape/pretty": "2.0.0",
|
|
46
|
+
"@logtape/redaction": "2.0.0",
|
|
47
|
+
"@radix-ui/react-accordion": "^1.2.12",
|
|
48
|
+
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
49
|
+
"@radix-ui/react-aspect-ratio": "^1.1.8",
|
|
50
|
+
"@radix-ui/react-avatar": "^1.1.11",
|
|
51
|
+
"@radix-ui/react-checkbox": "^1.3.3",
|
|
52
|
+
"@radix-ui/react-collapsible": "^1.1.12",
|
|
53
|
+
"@radix-ui/react-context-menu": "^2.2.16",
|
|
54
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
55
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
56
|
+
"@radix-ui/react-hover-card": "^1.1.15",
|
|
57
|
+
"@radix-ui/react-label": "^2.1.8",
|
|
58
|
+
"@radix-ui/react-menubar": "^1.1.16",
|
|
59
|
+
"@radix-ui/react-navigation-menu": "^1.2.14",
|
|
60
|
+
"@radix-ui/react-popover": "^1.1.15",
|
|
61
|
+
"@radix-ui/react-progress": "^1.1.8",
|
|
62
|
+
"@radix-ui/react-radio-group": "^1.3.8",
|
|
63
|
+
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
64
|
+
"@radix-ui/react-select": "^2.2.6",
|
|
65
|
+
"@radix-ui/react-separator": "^1.1.8",
|
|
66
|
+
"@radix-ui/react-slider": "^1.3.6",
|
|
67
|
+
"@radix-ui/react-slot": "^1.1.1",
|
|
68
|
+
"@radix-ui/react-switch": "^1.2.6",
|
|
69
|
+
"@radix-ui/react-tabs": "^1.1.13",
|
|
70
|
+
"@radix-ui/react-toast": "^1.2.15",
|
|
71
|
+
"@radix-ui/react-toggle": "^1.1.10",
|
|
72
|
+
"@radix-ui/react-toggle-group": "^1.1.11",
|
|
73
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
74
|
+
"@sheetkit/node": "^0.5.0",
|
|
75
|
+
"@svgr/core": "^8.1.0",
|
|
76
|
+
"@svgr/plugin-jsx": "^8.1.0",
|
|
77
|
+
"@svgr/plugin-svgo": "^8.1.0",
|
|
78
|
+
"@swc/cli": "^0.7.8",
|
|
79
|
+
"@swc/core": "^1.13.5",
|
|
80
|
+
"@tailwindcss/postcss": "^4.0.0",
|
|
81
|
+
"@tailwindcss/vite": "^4.1.17",
|
|
82
|
+
"@tanstack/react-query": "^5.90.12",
|
|
83
|
+
"@tanstack/react-query-devtools": "^5.91.1",
|
|
84
|
+
"@tanstack/react-router": "1.143.11",
|
|
85
|
+
"@tanstack/react-router-devtools": "1.143.11",
|
|
86
|
+
"@tanstack/router-plugin": "1.143.11",
|
|
87
|
+
"@types/bcrypt": "^6",
|
|
88
|
+
"@types/fs-extra": "^11.0.4",
|
|
89
|
+
"@types/inflection": "^2.0.0",
|
|
90
|
+
"@types/lodash-es": "^4.17.12",
|
|
91
|
+
"@types/luxon": "^3.0.3",
|
|
92
|
+
"@types/mime-types": "^3.0.1",
|
|
93
|
+
"@types/node": "25.0.7",
|
|
94
|
+
"@types/pg": "^8.15.6",
|
|
95
|
+
"@types/picomatch": "^4.0.0",
|
|
96
|
+
"@types/prompts": "^2.0.14",
|
|
97
|
+
"@types/prop-types": "^15.7.15",
|
|
98
|
+
"@types/qs": "^6.14.0",
|
|
99
|
+
"@types/react": "^19.2.7",
|
|
100
|
+
"@types/react-dom": "^19.2.3",
|
|
101
|
+
"@types/react-syntax-highlighter": "^15.5.13",
|
|
102
|
+
"@types/supertest": "^6.0.3",
|
|
103
|
+
"@typescript/native-preview": "^7.0.0-dev.20251225.1",
|
|
104
|
+
"@vitejs/plugin-react": "4.7.0",
|
|
105
|
+
"@vitejs/plugin-react-swc": "^4.1.3",
|
|
106
|
+
"@vitest/coverage-v8": "^4.0.12",
|
|
107
|
+
"@xyflow/react": "^12.9.3",
|
|
108
|
+
"ai": "^6.0.1",
|
|
109
|
+
"autoprefixer": "^10.4.20",
|
|
110
|
+
"axios": "^1.13.2",
|
|
111
|
+
"bcrypt": "^6.0.0",
|
|
112
|
+
"bentocache": "^1.5.0",
|
|
113
|
+
"better-auth": "^1.4.18",
|
|
114
|
+
"c12": "^3.3.2",
|
|
115
|
+
"c8": "^10.1.3",
|
|
116
|
+
"chalk": "^4.1.2",
|
|
117
|
+
"chokidar": "^4.0.3",
|
|
118
|
+
"class-variance-authority": "^0.7.1",
|
|
119
|
+
"classnames": "^2.3.2",
|
|
120
|
+
"clsx": "^2.1.1",
|
|
121
|
+
"cmdk": "^1.1.1",
|
|
122
|
+
"corepack": "^0.34.1",
|
|
123
|
+
"date-fns": "^4.1.0",
|
|
124
|
+
"date-fns-tz": "^3.2.0",
|
|
125
|
+
"debug": "^4.3.7",
|
|
126
|
+
"del-cli": "^6.0.0",
|
|
127
|
+
"desm": "^1.3.1",
|
|
128
|
+
"dotenv": "^16",
|
|
129
|
+
"embla-carousel-react": "^8.6.0",
|
|
130
|
+
"esbuild": "^0.27.0",
|
|
131
|
+
"eventsource": "^4.1.0",
|
|
132
|
+
"execa": "^8.0.1",
|
|
133
|
+
"fast-deep-equal": "^3.1.3",
|
|
134
|
+
"fast-glob": "^3.3.3",
|
|
135
|
+
"fastify": "^4",
|
|
136
|
+
"fastify-file-upload": "^4.0.0",
|
|
137
|
+
"fastify-qs": "^4.0.0",
|
|
138
|
+
"fastify-sse-v2": "^4.2.1",
|
|
139
|
+
"flydrive": "^1.3.0",
|
|
140
|
+
"fs-extra": "^11.3.0",
|
|
141
|
+
"inflection": "^3.0.2",
|
|
142
|
+
"input-otp": "^1.4.2",
|
|
143
|
+
"ioredis": "^5.8.2",
|
|
144
|
+
"jotai": "^2.14.0",
|
|
145
|
+
"json5": "^2.2.3",
|
|
146
|
+
"knex": "^3.1.0",
|
|
147
|
+
"lodash-es": "^4.17.21",
|
|
148
|
+
"lucide-react": "^0.462.0",
|
|
149
|
+
"luxon": "^3.0.3",
|
|
150
|
+
"mime-types": "^3.0.1",
|
|
151
|
+
"minimatch": "^10.0.3",
|
|
152
|
+
"minimist": "^1.2.8",
|
|
153
|
+
"next-themes": "^0.4.6",
|
|
154
|
+
"node-cron": "^4.2.1",
|
|
155
|
+
"node-sql-parser": "^5.2.0",
|
|
156
|
+
"nodemon": "^3.1.10",
|
|
157
|
+
"npm-run-all": "^4.1.5",
|
|
158
|
+
"p-event": "^6.0.1",
|
|
159
|
+
"p-timeout": "^6.1.4",
|
|
160
|
+
"parse-imports": "^2.2.1",
|
|
161
|
+
"pg": "^8.16.3",
|
|
162
|
+
"pg-native": "^3.5.2",
|
|
163
|
+
"pgvector": "^0.2.1",
|
|
164
|
+
"picomatch": "^4.0.2",
|
|
165
|
+
"postcss": "^8.4.49",
|
|
166
|
+
"prompts": "^2.4.2",
|
|
167
|
+
"prop-types": "^15.8.1",
|
|
168
|
+
"qs": "^6.14.1",
|
|
169
|
+
"radashi": "^12.2.0",
|
|
170
|
+
"react": "^19.2.3",
|
|
171
|
+
"react-day-picker": "^8.10.1",
|
|
172
|
+
"react-dom": "^19.2.3",
|
|
173
|
+
"react-draggable": "^4.5.0",
|
|
174
|
+
"react-hook-form": "^7.66.1",
|
|
175
|
+
"react-markdown": "^9.0.1",
|
|
176
|
+
"react-resizable-panels": "^3.0.6",
|
|
177
|
+
"react-router-dom": "^6.30.2",
|
|
178
|
+
"react-semantic-ui-datepickers": "^2.17.1",
|
|
179
|
+
"react-syntax-highlighter": "^15.5.0",
|
|
180
|
+
"read-package-up": "^11.0.0",
|
|
181
|
+
"rou3": "^0.7.10",
|
|
182
|
+
"sass": "^1.92.1",
|
|
183
|
+
"scss": "^0.2.4",
|
|
184
|
+
"semantic-ui-css": "^2.5.0",
|
|
185
|
+
"semantic-ui-react": "^2.1.3",
|
|
186
|
+
"sharp": "^0.34.5",
|
|
187
|
+
"sonner": "^2.0.7",
|
|
188
|
+
"supertest": "^7.1.1",
|
|
189
|
+
"supports-color": "^10.2.2",
|
|
190
|
+
"swr": "^2.3.7",
|
|
191
|
+
"tailwind-merge": "^3.4.0",
|
|
192
|
+
"tailwindcss": "^4.0.0",
|
|
193
|
+
"ts-node": "^10.9.2",
|
|
194
|
+
"tsdown": "^0.12.5",
|
|
195
|
+
"tsicli": "^1.0.5",
|
|
196
|
+
"tsup": "^8.1.0",
|
|
197
|
+
"tsx": "^4.20.6",
|
|
198
|
+
"typescript": "^5.9.3",
|
|
199
|
+
"unplugin-icons": "0.20.2",
|
|
200
|
+
"uuid": "^13.0.0",
|
|
201
|
+
"vaul": "^1.1.2",
|
|
202
|
+
"vite": "7.3.0",
|
|
203
|
+
"vite-plugin-dts": "4.5.4",
|
|
204
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
205
|
+
"vitest": "^4.0.10",
|
|
206
|
+
"voyageai": "^0.0.8",
|
|
207
|
+
"xlsx": "^0.18.5",
|
|
208
|
+
"zod": "^4.3.6",
|
|
209
|
+
"zx": "^8.8.5"
|
|
210
|
+
}
|
package/index.js
CHANGED
|
@@ -45,16 +45,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
45
45
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
|
|
49
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
50
|
-
if (ar || !(i in from)) {
|
|
51
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
52
|
-
ar[i] = from[i];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
56
|
-
};
|
|
57
|
-
import { execSync, spawn } from "node:child_process";
|
|
48
|
+
import { spawn } from "node:child_process";
|
|
58
49
|
import * as fs from "node:fs";
|
|
59
50
|
import * as path from "node:path";
|
|
60
51
|
import { fileURLToPath } from "node:url";
|
|
@@ -65,69 +56,16 @@ import prompts from "prompts";
|
|
|
65
56
|
// 생성된 파일/디렉토리 전역에서 추적하기 위한 변수
|
|
66
57
|
var createdTargetRoot = null;
|
|
67
58
|
var isCleaningUp = false;
|
|
68
|
-
// Helper:
|
|
69
|
-
function
|
|
70
|
-
var
|
|
71
|
-
if (!fs.existsSync(
|
|
72
|
-
return packages;
|
|
73
|
-
var pkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
74
|
-
var allDeps = __assign(__assign({}, pkg.dependencies), pkg.devDependencies);
|
|
75
|
-
for (var _i = 0, _a = Object.entries(allDeps); _i < _a.length; _i++) {
|
|
76
|
-
var _b = _a[_i], name_1 = _b[0], version = _b[1];
|
|
77
|
-
if (version === "catalog:") {
|
|
78
|
-
packages.add(name_1);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return packages;
|
|
82
|
-
}
|
|
83
|
-
// Helper: pnpm-workspace.yaml에서 catalog 파싱
|
|
84
|
-
function parseCatalogFromWorkspace(workspacePath) {
|
|
85
|
-
if (!fs.existsSync(workspacePath))
|
|
59
|
+
// Helper: catalog.json에서 catalog 파싱
|
|
60
|
+
function loadCatalogJson() {
|
|
61
|
+
var catalogPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "catalog.json");
|
|
62
|
+
if (!fs.existsSync(catalogPath))
|
|
86
63
|
return {};
|
|
87
|
-
|
|
88
|
-
var catalog = {};
|
|
89
|
-
var lines = content.split("\n");
|
|
90
|
-
var inCatalog = false;
|
|
91
|
-
for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) {
|
|
92
|
-
var line = lines_1[_i];
|
|
93
|
-
if (line.trim() === "catalog:") {
|
|
94
|
-
inCatalog = true;
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (inCatalog) {
|
|
98
|
-
// catalog 섹션이 끝나면 중단
|
|
99
|
-
if (line && !line.startsWith(" ") && !line.startsWith("\t")) {
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
// 패키지 파싱: " package-name: version"
|
|
103
|
-
var match = line.match(/^\s+["']?([^"':]+)["']?:\s*(.+)$/);
|
|
104
|
-
if (match) {
|
|
105
|
-
var name_2 = match[1], version = match[2];
|
|
106
|
-
catalog[name_2.trim()] = version.trim();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return catalog;
|
|
111
|
-
}
|
|
112
|
-
// Helper: workspace 패키지의 실제 버전 가져오기
|
|
113
|
-
function getWorkspacePackageVersion(packageName, workspaceRoot) {
|
|
114
|
-
var packagePath = path.join(workspaceRoot, "modules", packageName, "package.json");
|
|
115
|
-
if (fs.existsSync(packagePath)) {
|
|
116
|
-
var pkg = JSON.parse(fs.readFileSync(packagePath, "utf-8"));
|
|
117
|
-
return "^".concat(pkg.version);
|
|
118
|
-
}
|
|
119
|
-
// fallback: npm에서 최신 버전 가져오기
|
|
120
|
-
try {
|
|
121
|
-
var result = execSync("npm view ".concat(packageName, " version"), { encoding: "utf-8" });
|
|
122
|
-
return "^".concat(result.trim());
|
|
123
|
-
}
|
|
124
|
-
catch (_a) {
|
|
125
|
-
return "workspace:^";
|
|
126
|
-
}
|
|
64
|
+
return JSON.parse(fs.readFileSync(catalogPath, "utf-8"));
|
|
127
65
|
}
|
|
128
66
|
function init() {
|
|
129
67
|
return __awaiter(this, void 0, void 0, function () {
|
|
130
|
-
var shutdownHandler, argv, argProjectName, useDefaults, parseYesNo, result, e_1, targetDir, targetRoot, overwrite, result_1, templateRoot, copy, write, files, _i, _a, file,
|
|
68
|
+
var shutdownHandler, argv, argProjectName, useDefaults, parseYesNo, result, e_1, targetDir, targetRoot, overwrite, result_1, templateRoot, copy, write, files, _i, _a, file, rootPkgPath, pkg, parentCatalog, catalogEntries, _b, _c, pkgName, workspaceContent, isPnpm, pnpmOption, result_2, error_1, isDatabase, dockerOption, result_3, useDbDefaults, answers, error_2, env, initSqlPath, initSql;
|
|
131
69
|
var _d;
|
|
132
70
|
return __generator(this, function (_e) {
|
|
133
71
|
switch (_e.label) {
|
|
@@ -285,33 +223,16 @@ function init() {
|
|
|
285
223
|
file = _a[_i];
|
|
286
224
|
write(file);
|
|
287
225
|
}
|
|
288
|
-
|
|
226
|
+
// 2. Copy package.json and modify name
|
|
289
227
|
["packages/api", "packages/web"].forEach(function (dir) {
|
|
290
228
|
var pkgPath = path.join(templateRoot, dir, "package.json");
|
|
291
229
|
if (fs.existsSync(pkgPath)) {
|
|
292
230
|
var pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
293
|
-
// Extract just "api" or "web" from "packages/api"
|
|
294
231
|
var pkgType = dir.split("/")[1];
|
|
295
232
|
pkg.name = "".concat(targetDir, "-").concat(pkgType);
|
|
296
|
-
// Replace workspace:^ with actual versions
|
|
297
|
-
var replaceDeps = function (deps) {
|
|
298
|
-
if (!deps)
|
|
299
|
-
return;
|
|
300
|
-
for (var _i = 0, _a = Object.entries(deps); _i < _a.length; _i++) {
|
|
301
|
-
var _b = _a[_i], name_3 = _b[0], version = _b[1];
|
|
302
|
-
if (version === "workspace:^") {
|
|
303
|
-
// Extract package name from scoped package (e.g., @sonamu-kit/react-sui -> react-sui)
|
|
304
|
-
var pkgName = name_3.includes("/") ? name_3.split("/")[1] : name_3;
|
|
305
|
-
deps[name_3] = getWorkspacePackageVersion(pkgName, workspaceRoot);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
replaceDeps(pkg.dependencies);
|
|
310
|
-
replaceDeps(pkg.devDependencies);
|
|
311
233
|
fs.writeFileSync(path.join(targetRoot, dir, "package.json"), JSON.stringify(pkg, null, 2));
|
|
312
234
|
}
|
|
313
235
|
});
|
|
314
|
-
parentWorkspacePath = path.join(workspaceRoot, "pnpm-workspace.yaml");
|
|
315
236
|
rootPkgPath = path.join(templateRoot, "package.json");
|
|
316
237
|
if (fs.existsSync(rootPkgPath)) {
|
|
317
238
|
pkg = JSON.parse(fs.readFileSync(rootPkgPath, "utf-8"));
|
|
@@ -319,19 +240,11 @@ function init() {
|
|
|
319
240
|
fs.writeFileSync(path.join(targetRoot, "package.json"), JSON.stringify(pkg, null, 2));
|
|
320
241
|
console.log("".concat(chalk.green("CREATE"), " ").concat(path.join(targetRoot, "package.json")));
|
|
321
242
|
}
|
|
322
|
-
|
|
323
|
-
webPkgPath = path.join(templateRoot, "packages", "web", "package.json");
|
|
324
|
-
apiPackages = extractCatalogPackages(apiPkgPath);
|
|
325
|
-
webPackages = extractCatalogPackages(webPkgPath);
|
|
326
|
-
allCatalogPackages = new Set(__spreadArray(__spreadArray([], Array.from(apiPackages), true), Array.from(webPackages), true));
|
|
327
|
-
parentCatalog = parseCatalogFromWorkspace(parentWorkspacePath);
|
|
243
|
+
parentCatalog = loadCatalogJson();
|
|
328
244
|
catalogEntries = [];
|
|
329
|
-
for (_b = 0, _c =
|
|
245
|
+
for (_b = 0, _c = Object.keys(parentCatalog).sort(); _b < _c.length; _b++) {
|
|
330
246
|
pkgName = _c[_b];
|
|
331
|
-
|
|
332
|
-
if (version) {
|
|
333
|
-
catalogEntries.push(" \"".concat(pkgName, "\": ").concat(version));
|
|
334
|
-
}
|
|
247
|
+
catalogEntries.push(" \"".concat(pkgName, "\": ").concat(parentCatalog[pkgName]));
|
|
335
248
|
}
|
|
336
249
|
workspaceContent = "packages:\n - packages/api\n - packages/web\n\ncatalog:\n".concat(catalogEntries.join("\n"), "\n\nonlyBuiltDependencies:\n - \"@parcel/watcher\"\n - \"@swc/core\"\n - bcrypt\n - esbuild\n - libpq\n - sharp\n - sodium-native\n - unrs-resolver\n\noverrides:\n axios@<0.30.0: \">=0.30.0\"\n axios@<0.30.2: \">=0.30.2\"\n axios@>=0.8.1 <0.28.0: \">=0.28.0\"\n mdast-util-to-hast@>=13.0.0 <13.2.1: \">=13.2.1\"\n prismjs@<1.30.0: \">=1.30.0\"\n");
|
|
337
250
|
fs.writeFileSync(path.join(targetRoot, "pnpm-workspace.yaml"), workspaceContent);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-sonamu",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "Create a new Sonamu project",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sonamu",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"files": [
|
|
19
19
|
"index.js",
|
|
20
|
+
"catalog.json",
|
|
20
21
|
"template"
|
|
21
22
|
],
|
|
22
23
|
"engines": {
|
|
@@ -51,23 +51,27 @@ declare module "@tanstack/react-router" {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
await
|
|
54
|
+
// async IIFE로 감싸서 top-level await 제거
|
|
55
|
+
// (top-level await가 있으면 Vite 빌드 시 코드 스플릿 청크가 메인 엔트리를 import하면서 순환 의존성 데드락 발생)
|
|
56
|
+
(async () => {
|
|
57
|
+
await router.load();
|
|
55
58
|
|
|
56
|
-
// SSR/CSR 모두 document 전체에 렌더링
|
|
57
|
-
if (document.documentElement.innerHTML && dehydratedState) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
// SSR/CSR 모두 document 전체에 렌더링
|
|
60
|
+
if (document.documentElement.innerHTML && dehydratedState) {
|
|
61
|
+
// SSR 페이지
|
|
62
|
+
if (ssrConfig?.disableHydrate) {
|
|
63
|
+
// disableHydrate: document 전체 새로 렌더링
|
|
64
|
+
console.log("[Sonamu] Hydration disabled, rendering as CSR");
|
|
65
|
+
ReactDOM.createRoot(document).render(<RouterProvider router={router} />);
|
|
66
|
+
} else {
|
|
67
|
+
// 정상 hydration: document 전체 hydrate
|
|
68
|
+
ReactDOM.hydrateRoot(document, <RouterProvider router={router} />);
|
|
69
|
+
}
|
|
63
70
|
} else {
|
|
64
|
-
//
|
|
65
|
-
ReactDOM.
|
|
71
|
+
// Pure CSR 페이지: document 전체 렌더링
|
|
72
|
+
ReactDOM.createRoot(document).render(<RouterProvider router={router} />);
|
|
66
73
|
}
|
|
67
|
-
}
|
|
68
|
-
// Pure CSR 페이지: document 전체 렌더링
|
|
69
|
-
ReactDOM.createRoot(document).render(<RouterProvider router={router} />);
|
|
70
|
-
}
|
|
74
|
+
})();
|
|
71
75
|
|
|
72
76
|
// Chrome Extension용 Devtools
|
|
73
77
|
declare global {
|