create-sonamu 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/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
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
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: package.json에서 catalog 패키지 추출
69
- function extractCatalogPackages(packageJsonPath) {
70
- var packages = new Set();
71
- if (!fs.existsSync(packageJsonPath))
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
- var content = fs.readFileSync(workspacePath, "utf-8");
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, workspaceRoot, parentWorkspacePath, rootPkgPath, pkg, apiPkgPath, webPkgPath, apiPackages, webPackages, allCatalogPackages, parentCatalog, catalogEntries, _b, _c, pkgName, version, workspaceContent, isPnpm, pnpmOption, result_2, error_1, isDatabase, dockerOption, result_3, useDbDefaults, answers, error_2, env, initSqlPath, initSql;
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
- workspaceRoot = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
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
- apiPkgPath = path.join(templateRoot, "packages", "api", "package.json");
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 = Array.from(allCatalogPackages).sort(); _b < _c.length; _b++) {
245
+ for (_b = 0, _c = Object.keys(parentCatalog).sort(); _b < _c.length; _b++) {
330
246
  pkgName = _c[_b];
331
- version = parentCatalog[pkgName];
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.8",
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": {
@@ -39,7 +39,7 @@
39
39
  "knex": "^3.1.0",
40
40
  "pg": "^8.16.3",
41
41
  "radashi": "^12.2.0",
42
- "sonamu": "^0.8.6",
42
+ "sonamu": "^0.8.7",
43
43
  "zod": "^4.3.6"
44
44
  },
45
45
  "devDependencies": {