toiljs 0.0.15 → 0.0.16

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.
Files changed (217) hide show
  1. package/.babelrc +13 -13
  2. package/.gitattributes +2 -2
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -38
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +90 -90
  5. package/.github/ISSUE_TEMPLATE/config.yml +8 -8
  6. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
  7. package/.github/PULL_REQUEST_TEMPLATE.md +43 -43
  8. package/.github/changelog-config.json +45 -45
  9. package/.github/dependabot.yml +27 -27
  10. package/.github/workflows/ci.yml +191 -191
  11. package/.prettierrc.json +11 -11
  12. package/.vscode/settings.json +9 -9
  13. package/CHANGELOG.md +5 -5
  14. package/LICENSE +187 -187
  15. package/README.md +339 -315
  16. package/as-pect.asconfig.json +34 -34
  17. package/as-pect.config.js +65 -65
  18. package/assets/logo.svg +36 -36
  19. package/build/backend/.tsbuildinfo +1 -1
  20. package/build/cli/.tsbuildinfo +1 -1
  21. package/build/cli/index.js +0 -0
  22. package/build/client/.tsbuildinfo +1 -1
  23. package/build/client/dev/devtools.d.ts +6 -0
  24. package/build/client/dev/devtools.js +442 -0
  25. package/build/client/dev/error-overlay.d.ts +9 -0
  26. package/build/client/dev/error-overlay.js +19 -4
  27. package/build/client/navigation/prefetch.d.ts +1 -0
  28. package/build/client/navigation/prefetch.js +35 -0
  29. package/build/client/routing/Router.js +1 -1
  30. package/build/client/routing/hooks.js +6 -2
  31. package/build/client/routing/loader.d.ts +23 -0
  32. package/build/client/routing/loader.js +53 -7
  33. package/build/client/routing/mount.js +4 -3
  34. package/build/compiler/.tsbuildinfo +1 -1
  35. package/build/compiler/config.d.ts +16 -0
  36. package/build/compiler/config.js +7 -0
  37. package/build/compiler/docs.js +16 -16
  38. package/build/compiler/index.d.ts +2 -2
  39. package/build/compiler/index.js +1 -1
  40. package/build/compiler/plugin.js +156 -0
  41. package/build/compiler/prerender.d.ts +1 -0
  42. package/build/compiler/prerender.js +1 -1
  43. package/build/compiler/seo.d.ts +1 -1
  44. package/build/compiler/seo.js +5 -4
  45. package/build/compiler/ssg.js +32 -1
  46. package/build/io/.tsbuildinfo +1 -1
  47. package/build/logger/.tsbuildinfo +1 -1
  48. package/build/shared/.tsbuildinfo +1 -1
  49. package/eslint.config.js +48 -48
  50. package/examples/basic/client/404.tsx +11 -11
  51. package/examples/basic/client/components/.gitkeep +1 -1
  52. package/examples/basic/client/global-error.tsx +13 -13
  53. package/examples/basic/client/layout.tsx +25 -25
  54. package/examples/basic/client/public/images/.gitkeep +1 -1
  55. package/examples/basic/client/public/images/logo.svg +36 -36
  56. package/examples/basic/client/public/robots.txt +2 -2
  57. package/examples/basic/client/routes/docs/[...slug].tsx +12 -12
  58. package/examples/basic/client/routes/features/error/error.tsx +16 -16
  59. package/examples/basic/client/routes/features/template/b.tsx +14 -14
  60. package/examples/basic/client/routes/files/[[...slug]].tsx +21 -21
  61. package/examples/basic/client/routes/gallery/layout.tsx +13 -13
  62. package/examples/basic/client/routes/io.tsx +24 -24
  63. package/examples/basic/client/routes/loader-demo/loading.tsx +13 -13
  64. package/examples/basic/client/routes/search.tsx +61 -61
  65. package/examples/basic/client/toil.tsx +5 -5
  66. package/package.json +155 -148
  67. package/presets/eslint.js +88 -88
  68. package/presets/no-uint8array-tostring.js +200 -200
  69. package/presets/prettier.json +18 -18
  70. package/presets/tsconfig.json +37 -37
  71. package/src/backend/index.ts +160 -160
  72. package/src/cli/proc.ts +50 -50
  73. package/src/cli/updates.ts +69 -69
  74. package/src/cli/validate.ts +31 -31
  75. package/src/client/channel/channel.ts +146 -146
  76. package/src/client/components/Form.tsx +65 -65
  77. package/src/client/components/Script.tsx +113 -113
  78. package/src/client/components/Slot.tsx +21 -21
  79. package/src/client/dev/devtools.tsx +973 -0
  80. package/src/client/dev/error-overlay.tsx +30 -4
  81. package/src/client/head/head.ts +167 -167
  82. package/src/client/head/metadata.ts +112 -112
  83. package/src/client/index.ts +89 -89
  84. package/src/client/navigation/NavLink.tsx +86 -86
  85. package/src/client/navigation/navigation.ts +235 -235
  86. package/src/client/navigation/prefetch.ts +169 -130
  87. package/src/client/navigation/scroll.ts +53 -53
  88. package/src/client/routing/Router.tsx +8 -2
  89. package/src/client/routing/action.ts +122 -122
  90. package/src/client/routing/error-boundary.tsx +43 -43
  91. package/src/client/routing/hooks.ts +21 -6
  92. package/src/client/routing/loader.ts +325 -235
  93. package/src/client/routing/match.ts +47 -47
  94. package/src/client/routing/mount.tsx +54 -52
  95. package/src/client/routing/params-context.ts +10 -10
  96. package/src/client/routing/slot-context.ts +7 -7
  97. package/src/client/search/search.ts +189 -189
  98. package/src/client/search/use-page-search.ts +73 -73
  99. package/src/client/types.ts +73 -73
  100. package/src/compiler/config.ts +219 -182
  101. package/src/compiler/docs.ts +228 -228
  102. package/src/compiler/generate.ts +394 -394
  103. package/src/compiler/index.ts +64 -57
  104. package/src/compiler/pages.ts +70 -70
  105. package/src/compiler/plugin.ts +170 -2
  106. package/src/compiler/prerender.ts +156 -156
  107. package/src/compiler/seo.ts +397 -390
  108. package/src/compiler/ssg.ts +162 -126
  109. package/src/io/BinaryReader.ts +340 -340
  110. package/src/io/BinaryWriter.ts +385 -385
  111. package/src/io/FastMap.ts +127 -127
  112. package/src/io/index.ts +11 -11
  113. package/src/io/lengths.ts +14 -14
  114. package/src/io/types.ts +18 -18
  115. package/src/logger/index.ts +22 -22
  116. package/src/server/index.ts +10 -10
  117. package/src/server/main.ts +13 -13
  118. package/src/server/tsconfig.json +4 -4
  119. package/src/shared/index.ts +10 -10
  120. package/std/client/index.d.ts +15 -15
  121. package/std/client/package.json +3 -3
  122. package/test/assembly/example.spec.ts +7 -7
  123. package/test/channel.test.ts +21 -21
  124. package/test/dom/Link.test.tsx +47 -47
  125. package/test/dom/NavLink.test.tsx +37 -37
  126. package/test/dom/error-overlay.test.tsx +44 -44
  127. package/test/dom/loader.test.tsx +121 -121
  128. package/test/dom/navigation.test.ts +59 -59
  129. package/test/dom/revalidate.test.tsx +38 -38
  130. package/test/dom/route-head.test.tsx +78 -78
  131. package/test/dom/router-loading.test.tsx +44 -44
  132. package/test/dom/scroll.test.ts +56 -56
  133. package/test/dom/use-metadata.test.tsx +58 -58
  134. package/test/io.test.ts +93 -93
  135. package/test/navlink.test.ts +28 -28
  136. package/test/placeholder.test.ts +9 -9
  137. package/test/routes.test.ts +76 -76
  138. package/test/seo.test.ts +175 -164
  139. package/test/slot-layouts.test.ts +69 -69
  140. package/test/ssg.test.ts +36 -36
  141. package/test/update.test.ts +44 -44
  142. package/test/validate.test.ts +42 -42
  143. package/toil-routes.d.ts +7 -0
  144. package/toilconfig.json +30 -30
  145. package/tsconfig.backend.json +13 -13
  146. package/tsconfig.base.json +35 -35
  147. package/tsconfig.cli.json +13 -13
  148. package/tsconfig.client.json +14 -14
  149. package/tsconfig.compiler.json +13 -13
  150. package/tsconfig.io.json +12 -12
  151. package/tsconfig.json +22 -22
  152. package/tsconfig.logger.json +12 -12
  153. package/tsconfig.server.json +10 -10
  154. package/tsconfig.shared.json +12 -12
  155. package/vitest.config.ts +26 -26
  156. package/.idea/codeStyles/Project.xml +0 -54
  157. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  158. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  159. package/.idea/modules.xml +0 -8
  160. package/.idea/prettier.xml +0 -7
  161. package/.idea/toiljs.iml +0 -8
  162. package/.idea/vcs.xml +0 -6
  163. package/.toil/entry.tsx +0 -9
  164. package/.toil/index.html +0 -12
  165. package/.toil/routes.ts +0 -9
  166. package/build/cli/configure.d.ts +0 -16
  167. package/build/cli/configure.js +0 -272
  168. package/build/cli/create.d.ts +0 -16
  169. package/build/cli/create.js +0 -420
  170. package/build/cli/diagnostics.d.ts +0 -55
  171. package/build/cli/diagnostics.js +0 -333
  172. package/build/cli/doctor.d.ts +0 -6
  173. package/build/cli/doctor.js +0 -249
  174. package/build/cli/features.d.ts +0 -25
  175. package/build/cli/features.js +0 -107
  176. package/build/cli/index.d.ts +0 -2
  177. package/build/cli/proc.d.ts +0 -6
  178. package/build/cli/proc.js +0 -31
  179. package/build/cli/ui.d.ts +0 -9
  180. package/build/cli/ui.js +0 -75
  181. package/build/cli/update.d.ts +0 -7
  182. package/build/cli/update.js +0 -117
  183. package/build/cli/updates.d.ts +0 -10
  184. package/build/cli/updates.js +0 -45
  185. package/build/cli/validate.d.ts +0 -4
  186. package/build/cli/validate.js +0 -19
  187. package/build/client/Link.d.ts +0 -8
  188. package/build/client/Link.js +0 -44
  189. package/build/client/NavLink.d.ts +0 -14
  190. package/build/client/NavLink.js +0 -37
  191. package/build/client/Router.d.ts +0 -7
  192. package/build/client/Router.js +0 -55
  193. package/build/client/channel.d.ts +0 -23
  194. package/build/client/channel.js +0 -94
  195. package/build/client/error-boundary.d.ts +0 -16
  196. package/build/client/error-boundary.js +0 -19
  197. package/build/client/head.d.ts +0 -26
  198. package/build/client/head.js +0 -87
  199. package/build/client/hooks.d.ts +0 -17
  200. package/build/client/hooks.js +0 -48
  201. package/build/client/lazy.d.ts +0 -16
  202. package/build/client/lazy.js +0 -53
  203. package/build/client/match.d.ts +0 -2
  204. package/build/client/match.js +0 -32
  205. package/build/client/mount.d.ts +0 -2
  206. package/build/client/mount.js +0 -13
  207. package/build/client/navigation.d.ts +0 -13
  208. package/build/client/navigation.js +0 -97
  209. package/build/client/params-context.d.ts +0 -2
  210. package/build/client/params-context.js +0 -2
  211. package/build/client/prefetch.d.ts +0 -11
  212. package/build/client/prefetch.js +0 -100
  213. package/build/client/runtime.d.ts +0 -31
  214. package/build/client/runtime.js +0 -112
  215. package/build/client/scroll.d.ts +0 -8
  216. package/build/client/scroll.js +0 -36
  217. package/toil-env.d.ts +0 -16
package/.toil/entry.tsx DELETED
@@ -1,9 +0,0 @@
1
- // AUTO-GENERATED by toil — do not edit.
2
- import { mount } from 'toiljs/client';
3
- import { BinaryWriter, BinaryReader, FastMap, FastSet } from 'toiljs/io';
4
- import { routes, layout, notFound } from './routes';
5
-
6
- // Expose toiljs IO as native globals (typed via ./toil-env.d.ts).
7
- Object.assign(globalThis, { BinaryWriter, BinaryReader, FastMap, FastSet });
8
-
9
- mount(routes, layout, notFound);
package/.toil/index.html DELETED
@@ -1,12 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>Toil App</title>
7
- </head>
8
- <body>
9
- <div id="root"></div>
10
- <script type="module" src="./entry.tsx"></script>
11
- </body>
12
- </html>
package/.toil/routes.ts DELETED
@@ -1,9 +0,0 @@
1
- // AUTO-GENERATED by toil — do not edit.
2
- import type { RouteDef, LayoutLoader, NotFoundLoader } from 'toiljs/client';
3
-
4
- export const routes: RouteDef[] = [
5
-
6
- ];
7
-
8
- export const layout: LayoutLoader = null;
9
- export const notFound: NotFoundLoader = null;
@@ -1,16 +0,0 @@
1
- import { type Preprocessor, type StyleFeatures } from './features.js';
2
- export interface ConfigureOptions {
3
- readonly root?: string;
4
- readonly cwd: string;
5
- readonly preprocessor?: Preprocessor;
6
- readonly tailwind?: boolean;
7
- readonly images?: boolean;
8
- readonly install?: boolean;
9
- }
10
- interface PackageJson {
11
- dependencies?: Record<string, string>;
12
- devDependencies?: Record<string, string>;
13
- }
14
- export declare function applyConfigure(clientDir: string, pkgPath: string, pkg: PackageJson, from: StyleFeatures, to: StyleFeatures): Promise<void>;
15
- export declare function runConfigure(opts: ConfigureOptions): Promise<void>;
16
- export {};
@@ -1,272 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { cancel, confirm, intro, isCancel, note, outro, select, spinner } from '@clack/prompts';
4
- import { loadConfig } from 'toiljs/compiler';
5
- import pc from 'picocolors';
6
- import { defaultConfigSource, detectPreprocessor, detectTailwind, packageDiff, PKG_VERSION, preprocessorForExt, PREPROCESSORS, setConfigImages, setStyleImports, styleEntry, TAILWIND_CSS, TAILWIND_ENTRY, } from './features.js';
7
- import { run } from './proc.js';
8
- import { accent, dim } from './ui.js';
9
- const CONFIG_FILES = [
10
- 'toil.config.ts',
11
- 'toil.config.mts',
12
- 'toil.config.js',
13
- 'toil.config.mjs',
14
- 'toiljs.config.ts',
15
- 'toiljs.config.mts',
16
- 'toiljs.config.js',
17
- 'toiljs.config.mjs',
18
- ];
19
- async function readConfigFile(root) {
20
- for (const name of CONFIG_FILES) {
21
- const p = path.join(root, name);
22
- try {
23
- return { path: p, source: await fs.readFile(p, 'utf8') };
24
- }
25
- catch { }
26
- }
27
- return null;
28
- }
29
- async function writeImagesFlag(root, enabled) {
30
- const existing = await readConfigFile(root);
31
- if (!existing) {
32
- await fs.writeFile(path.join(root, 'toil.config.ts'), defaultConfigSource(enabled), 'utf8');
33
- return true;
34
- }
35
- const next = setConfigImages(existing.source, enabled);
36
- if (next === null)
37
- return false;
38
- await fs.writeFile(existing.path, next, 'utf8');
39
- return true;
40
- }
41
- async function resolveImages(root) {
42
- try {
43
- return (await loadConfig({ root })).images;
44
- }
45
- catch {
46
- return true;
47
- }
48
- }
49
- async function resolveClientDir(root) {
50
- try {
51
- const cfg = await loadConfig({ root });
52
- return cfg.clientAbsDir;
53
- }
54
- catch {
55
- return path.join(root, 'client');
56
- }
57
- }
58
- const PREPROCESSOR_LABEL = {
59
- css: 'Plain CSS',
60
- sass: 'Sass (SCSS)',
61
- less: 'Less',
62
- stylus: 'Stylus',
63
- };
64
- function bail(value) {
65
- if (isCancel(value)) {
66
- cancel('Configuration cancelled.');
67
- process.exit(0);
68
- }
69
- }
70
- async function detectStylesheet(clientDir) {
71
- for (const p of PREPROCESSORS) {
72
- try {
73
- await fs.access(path.join(clientDir, styleEntry(p)));
74
- return p;
75
- }
76
- catch { }
77
- }
78
- try {
79
- await fs.access(path.join(clientDir, 'styles/main.sass'));
80
- return preprocessorForExt('sass');
81
- }
82
- catch {
83
- return null;
84
- }
85
- }
86
- async function findMainStylesheet(clientDir) {
87
- for (const ext of ['css', 'scss', 'sass', 'less', 'styl']) {
88
- const p = path.join(clientDir, 'styles', `main.${ext}`);
89
- try {
90
- await fs.access(p);
91
- return p;
92
- }
93
- catch { }
94
- }
95
- return null;
96
- }
97
- async function detectPackageManager(root) {
98
- const lock = [
99
- ['pnpm-lock.yaml', 'pnpm'],
100
- ['yarn.lock', 'yarn'],
101
- ['bun.lockb', 'bun'],
102
- ];
103
- for (const [file, pm] of lock) {
104
- try {
105
- await fs.access(path.join(root, file));
106
- return pm;
107
- }
108
- catch { }
109
- }
110
- return 'npm';
111
- }
112
- async function applyStyleFiles(clientDir, from, to) {
113
- if (from.preprocessor !== to.preprocessor) {
114
- const newPath = path.join(clientDir, styleEntry(to.preprocessor));
115
- await fs.mkdir(path.dirname(newPath), { recursive: true });
116
- const existing = await findMainStylesheet(clientDir);
117
- if (existing && path.resolve(existing) !== path.resolve(newPath)) {
118
- await fs.rename(existing, newPath);
119
- }
120
- else if (!existing) {
121
- await fs.writeFile(newPath, '', 'utf8');
122
- }
123
- }
124
- const tailwindPath = path.join(clientDir, TAILWIND_ENTRY);
125
- if (to.tailwind && !from.tailwind) {
126
- await fs.mkdir(path.dirname(tailwindPath), { recursive: true });
127
- await fs.writeFile(tailwindPath, TAILWIND_CSS, 'utf8');
128
- }
129
- else if (!to.tailwind && from.tailwind) {
130
- await fs.rm(tailwindPath, { force: true });
131
- }
132
- for (const entry of ['toil.tsx', 'toil.jsx']) {
133
- const entryPath = path.join(clientDir, entry);
134
- try {
135
- const source = await fs.readFile(entryPath, 'utf8');
136
- await fs.writeFile(entryPath, setStyleImports(source, to), 'utf8');
137
- return;
138
- }
139
- catch { }
140
- }
141
- }
142
- export async function applyConfigure(clientDir, pkgPath, pkg, from, to) {
143
- await applyStyleFiles(clientDir, from, to);
144
- await applyPackages(pkgPath, pkg, from, to);
145
- }
146
- async function applyPackages(pkgPath, pkg, from, to) {
147
- const { add, remove } = packageDiff(from, to);
148
- const dev = { ...pkg.devDependencies };
149
- const deps = { ...pkg.dependencies };
150
- for (const name of add)
151
- dev[name] = PKG_VERSION[name] ?? 'latest';
152
- for (const name of remove) {
153
- delete dev[name];
154
- delete deps[name];
155
- }
156
- const sortedDev = Object.fromEntries(Object.entries(dev).sort(([a], [b]) => a.localeCompare(b)));
157
- const next = { ...pkg, devDependencies: sortedDev };
158
- if (Object.keys(deps).length)
159
- next.dependencies = deps;
160
- else
161
- delete next.dependencies;
162
- await fs.writeFile(pkgPath, JSON.stringify(next, null, 4) + '\n', 'utf8');
163
- }
164
- function describe(from, to) {
165
- const lines = [];
166
- if (from.preprocessor !== to.preprocessor) {
167
- lines.push(`preprocessor: ${PREPROCESSOR_LABEL[from.preprocessor]} → ${PREPROCESSOR_LABEL[to.preprocessor]}`);
168
- }
169
- if (from.tailwind !== to.tailwind) {
170
- lines.push(`Tailwind: ${from.tailwind ? 'on' : 'off'} → ${to.tailwind ? 'on' : 'off'}`);
171
- }
172
- const { add, remove } = packageDiff(from, to);
173
- if (add.length)
174
- lines.push(`+ ${add.join(', ')}`);
175
- if (remove.length)
176
- lines.push(`- ${remove.join(', ')}`);
177
- return lines.map((l) => dim(' ') + l).join('\n');
178
- }
179
- export async function runConfigure(opts) {
180
- intro(accent(' toiljs configure '));
181
- const root = path.resolve(opts.root ?? opts.cwd);
182
- const pkgPath = path.join(root, 'package.json');
183
- let pkg;
184
- try {
185
- pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'));
186
- }
187
- catch {
188
- cancel(`No package.json in ${pc.cyan(root)}, run this inside a toiljs project.`);
189
- process.exit(1);
190
- }
191
- const clientAbsDir = await resolveClientDir(root);
192
- const deps = { ...pkg.dependencies, ...pkg.devDependencies };
193
- const current = {
194
- preprocessor: (await detectStylesheet(clientAbsDir)) ?? detectPreprocessor(deps),
195
- tailwind: detectTailwind(deps),
196
- };
197
- const currentImages = await resolveImages(root);
198
- const nonInteractive = opts.preprocessor !== undefined || opts.tailwind !== undefined || opts.images !== undefined;
199
- let target;
200
- let targetImages;
201
- if (nonInteractive) {
202
- target = {
203
- preprocessor: opts.preprocessor ?? current.preprocessor,
204
- tailwind: opts.tailwind ?? current.tailwind,
205
- };
206
- targetImages = opts.images ?? currentImages;
207
- }
208
- else {
209
- const ppChoice = await select({
210
- message: 'CSS preprocessor',
211
- options: PREPROCESSORS.map((value) => ({ value, label: PREPROCESSOR_LABEL[value] })),
212
- initialValue: current.preprocessor,
213
- });
214
- bail(ppChoice);
215
- const twChoice = await confirm({
216
- message: 'Use Tailwind CSS?',
217
- initialValue: current.tailwind,
218
- });
219
- bail(twChoice);
220
- const imChoice = await confirm({
221
- message: 'Optimize images at build time?',
222
- initialValue: currentImages,
223
- });
224
- bail(imChoice);
225
- target = { preprocessor: ppChoice, tailwind: twChoice };
226
- targetImages = imChoice;
227
- }
228
- const styleChanged = target.preprocessor !== current.preprocessor || target.tailwind !== current.tailwind;
229
- const imagesChanged = targetImages !== currentImages;
230
- if (!styleChanged && !imagesChanged) {
231
- outro('No changes, your setup is already up to date.');
232
- return;
233
- }
234
- const s = spinner();
235
- s.start('Updating project files');
236
- if (styleChanged)
237
- await applyConfigure(clientAbsDir, pkgPath, pkg, current, target);
238
- let imagesWarning = '';
239
- if (imagesChanged && !(await writeImagesFlag(root, targetImages))) {
240
- imagesWarning = pc.yellow(' Could not edit toil.config automatically, set `client.images` by hand.');
241
- }
242
- s.stop('Updated project files');
243
- if (styleChanged) {
244
- const pm = await detectPackageManager(root);
245
- if (opts.install === false) {
246
- note(`${pc.cyan(`${pm} install`)} to sync the dependency changes.`, 'Next step');
247
- }
248
- else {
249
- const i = spinner();
250
- i.start(`Syncing dependencies with ${pm}`);
251
- try {
252
- await run(pm, ['install'], root);
253
- i.stop('Dependencies synced');
254
- }
255
- catch {
256
- i.stop(pc.yellow(`Could not run \`${pm} install\`, run it yourself to finish`));
257
- }
258
- }
259
- }
260
- const summary = [
261
- styleChanged ? describe(current, target) : '',
262
- imagesChanged
263
- ? dim(' ') +
264
- `image optimization: ${currentImages ? 'on' : 'off'} → ${targetImages ? 'on' : 'off'}`
265
- : '',
266
- imagesWarning,
267
- ]
268
- .filter(Boolean)
269
- .join('\n');
270
- note(summary, 'Updated');
271
- outro(`Reconfigured, restart \`${accent('toiljs dev')}\` to pick up the changes.`);
272
- }
@@ -1,16 +0,0 @@
1
- import { type Preprocessor } from './features.js';
2
- export type Template = 'app' | 'minimal';
3
- export interface CreateOptions {
4
- readonly name?: string;
5
- readonly template?: Template;
6
- readonly preprocessor?: Preprocessor;
7
- readonly tailwind?: boolean;
8
- readonly ai?: boolean;
9
- readonly images?: boolean;
10
- readonly install?: boolean;
11
- readonly git?: boolean;
12
- readonly pm?: string;
13
- readonly yes?: boolean;
14
- readonly cwd: string;
15
- }
16
- export declare function runCreate(opts: CreateOptions): Promise<void>;