@lastbrain/app 0.1.25 → 0.1.26
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/app-shell/(public)/page.d.ts.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/layouts/AdminLayoutWithSidebar.d.ts +8 -0
- package/dist/layouts/AdminLayoutWithSidebar.d.ts.map +1 -0
- package/dist/layouts/AdminLayoutWithSidebar.js +9 -0
- package/dist/layouts/AuthLayoutWithSidebar.d.ts +8 -0
- package/dist/layouts/AuthLayoutWithSidebar.d.ts.map +1 -0
- package/dist/layouts/AuthLayoutWithSidebar.js +9 -0
- package/dist/scripts/db-init.js +1 -1
- package/dist/scripts/dev-sync.js +21 -10
- package/dist/scripts/init-app.d.ts.map +1 -1
- package/dist/scripts/init-app.js +114 -12
- package/dist/scripts/module-add.d.ts.map +1 -1
- package/dist/scripts/module-add.js +19 -6
- package/dist/scripts/module-build.d.ts.map +1 -1
- package/dist/scripts/module-build.js +285 -30
- package/dist/scripts/module-create.d.ts.map +1 -1
- package/dist/scripts/module-create.js +25 -15
- package/dist/scripts/module-remove.d.ts.map +1 -1
- package/dist/scripts/module-remove.js +24 -11
- package/dist/scripts/script-runner.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/templates/DefaultDoc.js +1 -7
- package/dist/templates/components/AppAside.d.ts +6 -0
- package/dist/templates/components/AppAside.d.ts.map +1 -0
- package/dist/templates/components/AppAside.js +9 -0
- package/dist/templates/layouts/admin-layout.d.ts +4 -0
- package/dist/templates/layouts/admin-layout.d.ts.map +1 -0
- package/dist/templates/layouts/admin-layout.js +6 -0
- package/dist/templates/layouts/auth-layout.d.ts +4 -0
- package/dist/templates/layouts/auth-layout.d.ts.map +1 -0
- package/dist/templates/layouts/auth-layout.js +6 -0
- package/package.json +2 -1
- package/src/app-shell/(public)/page.tsx +6 -2
- package/src/auth/useAuthSession.ts +1 -1
- package/src/cli.ts +1 -1
- package/src/index.ts +6 -0
- package/src/layouts/AdminLayoutWithSidebar.tsx +35 -0
- package/src/layouts/AppProviders.tsx +1 -1
- package/src/layouts/AuthLayoutWithSidebar.tsx +35 -0
- package/src/scripts/db-init.ts +12 -7
- package/src/scripts/db-migrations-sync.ts +3 -3
- package/src/scripts/dev-sync.ts +49 -18
- package/src/scripts/init-app.ts +235 -65
- package/src/scripts/module-add.ts +50 -22
- package/src/scripts/module-build.ts +393 -88
- package/src/scripts/module-create.ts +85 -49
- package/src/scripts/module-remove.ts +116 -57
- package/src/scripts/readme-build.ts +2 -2
- package/src/scripts/script-runner.ts +3 -3
- package/src/templates/AuthGuidePage.tsx +1 -1
- package/src/templates/DefaultDoc.tsx +7 -7
package/src/scripts/dev-sync.ts
CHANGED
|
@@ -17,18 +17,24 @@ const scriptsToEnsure = {
|
|
|
17
17
|
"build:modules": "pnpm --filter @lastbrain/app module:build",
|
|
18
18
|
"db:migrations:sync": "pnpm --filter @lastbrain/app db:migrations:sync",
|
|
19
19
|
"db:init": "pnpm --filter @lastbrain/app db:init",
|
|
20
|
-
"readme:create": "pnpm --filter @lastbrain/app readme:create"
|
|
20
|
+
"readme:create": "pnpm --filter @lastbrain/app readme:create",
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
const dependenciesToEnsure = {
|
|
24
24
|
"@lastbrain/app": "workspace:*",
|
|
25
25
|
"@lastbrain/core": "workspace:*",
|
|
26
|
-
"@lastbrain/ui": "workspace:*"
|
|
26
|
+
"@lastbrain/ui": "workspace:*",
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
const gitignoreTemplate = path.join(
|
|
29
|
+
const gitignoreTemplate = path.join(
|
|
30
|
+
projectRoot,
|
|
31
|
+
"packages/app/src/templates/gitignore/.gitignore",
|
|
32
|
+
);
|
|
30
33
|
const consumerGitignore = path.join(projectRoot, "apps/web/.gitignore");
|
|
31
|
-
const envTemplate = path.join(
|
|
34
|
+
const envTemplate = path.join(
|
|
35
|
+
projectRoot,
|
|
36
|
+
"packages/app/src/templates/env.example/.env.example",
|
|
37
|
+
);
|
|
32
38
|
const consumerEnvExample = path.join(projectRoot, "apps/web/.env.example");
|
|
33
39
|
const consumerEnvLocal = path.join(projectRoot, "apps/web/.env.local");
|
|
34
40
|
|
|
@@ -37,7 +43,9 @@ function ensureDirectory(dir: string) {
|
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
function normalizeContent(data: string) {
|
|
40
|
-
const trimmed = data.startsWith(GENERATED_HEADER)
|
|
46
|
+
const trimmed = data.startsWith(GENERATED_HEADER)
|
|
47
|
+
? data.slice(GENERATED_HEADER.length)
|
|
48
|
+
: data;
|
|
41
49
|
const sanitized = trimmed.trimStart();
|
|
42
50
|
return `${GENERATED_HEADER}\n${sanitized}`;
|
|
43
51
|
}
|
|
@@ -64,7 +72,10 @@ function copyDirectory(srcDir: string, destDir: string) {
|
|
|
64
72
|
ensureDirectory(destDir);
|
|
65
73
|
const entries = fs.readdirSync(srcDir, { withFileTypes: true });
|
|
66
74
|
for (const entry of entries) {
|
|
67
|
-
copyDirectory(
|
|
75
|
+
copyDirectory(
|
|
76
|
+
path.join(srcDir, entry.name),
|
|
77
|
+
path.join(destDir, entry.name),
|
|
78
|
+
);
|
|
68
79
|
}
|
|
69
80
|
} else if (stats.isFile()) {
|
|
70
81
|
syncFile(srcDir, destDir);
|
|
@@ -98,7 +109,7 @@ function syncAppShell() {
|
|
|
98
109
|
function cleanupStaleGroupFiles() {
|
|
99
110
|
const staleFiles = [
|
|
100
111
|
path.join(destAppShell, "(auth)", "page.tsx"),
|
|
101
|
-
path.join(destAppShell, "(admin)", "page.tsx")
|
|
112
|
+
path.join(destAppShell, "(admin)", "page.tsx"),
|
|
102
113
|
];
|
|
103
114
|
|
|
104
115
|
staleFiles.forEach((file) => {
|
|
@@ -109,7 +120,7 @@ function cleanupStaleGroupFiles() {
|
|
|
109
120
|
|
|
110
121
|
const staleDirs = [
|
|
111
122
|
path.join(destAppShell, "(auth)", "dashboard"),
|
|
112
|
-
path.join(destAppShell, "(admin)", "dashboard")
|
|
123
|
+
path.join(destAppShell, "(admin)", "dashboard"),
|
|
113
124
|
];
|
|
114
125
|
|
|
115
126
|
staleDirs.forEach((dir) => {
|
|
@@ -119,7 +130,10 @@ function cleanupStaleGroupFiles() {
|
|
|
119
130
|
});
|
|
120
131
|
}
|
|
121
132
|
|
|
122
|
-
function mergeScripts(
|
|
133
|
+
function mergeScripts(
|
|
134
|
+
base: Record<string, string>,
|
|
135
|
+
additions: Record<string, string>,
|
|
136
|
+
) {
|
|
123
137
|
return { ...base, ...additions };
|
|
124
138
|
}
|
|
125
139
|
|
|
@@ -129,15 +143,20 @@ function syncPackageJson() {
|
|
|
129
143
|
name: "web",
|
|
130
144
|
private: true,
|
|
131
145
|
version: "0.1.0",
|
|
132
|
-
type: "module"
|
|
146
|
+
type: "module",
|
|
133
147
|
};
|
|
134
148
|
|
|
135
|
-
const pkg = fs.existsSync(webPackage)
|
|
149
|
+
const pkg = fs.existsSync(webPackage)
|
|
150
|
+
? JSON.parse(fs.readFileSync(webPackage, "utf-8"))
|
|
151
|
+
: defaultPkg;
|
|
136
152
|
pkg.scripts = mergeScripts(pkg.scripts ?? {}, scriptsToEnsure);
|
|
137
153
|
pkg.dependencies = { ...(pkg.dependencies ?? {}), ...dependenciesToEnsure };
|
|
138
154
|
|
|
139
155
|
fs.writeFileSync(webPackage, JSON.stringify(pkg, null, 2) + "\n");
|
|
140
|
-
return {
|
|
156
|
+
return {
|
|
157
|
+
scripts: Object.keys(scriptsToEnsure),
|
|
158
|
+
dependencies: Object.keys(dependenciesToEnsure),
|
|
159
|
+
};
|
|
141
160
|
}
|
|
142
161
|
|
|
143
162
|
function syncEnvExample() {
|
|
@@ -147,7 +166,9 @@ function syncEnvExample() {
|
|
|
147
166
|
|
|
148
167
|
const shouldOverwrite =
|
|
149
168
|
!fs.existsSync(consumerEnvExample) ||
|
|
150
|
-
fs
|
|
169
|
+
fs
|
|
170
|
+
.readFileSync(consumerEnvExample, "utf-8")
|
|
171
|
+
.includes("GENERATED BY LASTBRAIN");
|
|
151
172
|
|
|
152
173
|
if (!shouldOverwrite) {
|
|
153
174
|
return null;
|
|
@@ -177,7 +198,9 @@ function syncGitignore() {
|
|
|
177
198
|
|
|
178
199
|
const shouldOverwrite =
|
|
179
200
|
!fs.existsSync(consumerGitignore) ||
|
|
180
|
-
fs
|
|
201
|
+
fs
|
|
202
|
+
.readFileSync(consumerGitignore, "utf-8")
|
|
203
|
+
.includes("GENERATED BY LASTBRAIN");
|
|
181
204
|
|
|
182
205
|
if (!shouldOverwrite) {
|
|
183
206
|
return null;
|
|
@@ -199,19 +222,27 @@ function main() {
|
|
|
199
222
|
|
|
200
223
|
console.log("✅ apps/web synced with @lastbrain/app");
|
|
201
224
|
console.log(`Copied or updated files (${copiedFiles.length}):`);
|
|
202
|
-
copiedFiles.forEach((file) =>
|
|
225
|
+
copiedFiles.forEach((file) =>
|
|
226
|
+
console.log(` • ${path.relative(projectRoot, file)}`),
|
|
227
|
+
);
|
|
203
228
|
console.log("Scripts ensured in apps/web/package.json:");
|
|
204
229
|
changes.scripts.forEach((script) => console.log(` • ${script}`));
|
|
205
230
|
console.log("Dependencies ensured in apps/web/package.json:");
|
|
206
231
|
changes.dependencies.forEach((dep) => console.log(` • ${dep}`));
|
|
207
232
|
if (gitignoreSynced) {
|
|
208
|
-
console.log(
|
|
233
|
+
console.log(
|
|
234
|
+
`.gitignore ensured at ${path.relative(projectRoot, gitignoreSynced)}`,
|
|
235
|
+
);
|
|
209
236
|
}
|
|
210
237
|
if (envExampleSynced) {
|
|
211
|
-
console.log(
|
|
238
|
+
console.log(
|
|
239
|
+
`.env.example ensured at ${path.relative(projectRoot, envExampleSynced)}`,
|
|
240
|
+
);
|
|
212
241
|
}
|
|
213
242
|
if (envLocalCreated) {
|
|
214
|
-
console.log(
|
|
243
|
+
console.log(
|
|
244
|
+
`.env.local ensured at ${path.relative(projectRoot, envLocalCreated)}`,
|
|
245
|
+
);
|
|
215
246
|
}
|
|
216
247
|
}
|
|
217
248
|
|