create-frootjs 1.0.6 → 1.0.7

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.
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Database & ORM Add-on for create-frootjs
3
+ * Injects Drizzle ORM or Prisma into generated projects with SQLite starters.
4
+ */
5
+ export type DatabaseOption = 'none' | 'drizzle' | 'prisma';
6
+ export interface PackageJsonLike {
7
+ scripts?: Record<string, string>;
8
+ dependencies?: Record<string, string>;
9
+ devDependencies?: Record<string, string>;
10
+ [key: string]: unknown;
11
+ }
12
+ export declare function applyDatabaseAddon(files: Record<string, string>, dbOption: DatabaseOption): void;
13
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/addons/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,QAAQ,EAAE,cAAc,GACvB,IAAI,CAuFN"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Database & ORM Add-on for create-frootjs
3
+ * Injects Drizzle ORM or Prisma into generated projects with SQLite starters.
4
+ */
5
+ export function applyDatabaseAddon(files, dbOption) {
6
+ if (dbOption === 'none')
7
+ return;
8
+ const pkgJsonStr = files['package.json'];
9
+ if (!pkgJsonStr)
10
+ return;
11
+ const pkg = JSON.parse(pkgJsonStr);
12
+ pkg.scripts = pkg.scripts || {};
13
+ pkg.dependencies = pkg.dependencies || {};
14
+ pkg.devDependencies = pkg.devDependencies || {};
15
+ if (dbOption === 'drizzle') {
16
+ pkg.dependencies['drizzle-orm'] = '^0.39.0';
17
+ pkg.dependencies['better-sqlite3'] = '^11.8.0';
18
+ pkg.devDependencies['@types/better-sqlite3'] = '^7.6.12';
19
+ pkg.devDependencies['drizzle-kit'] = '^0.30.0';
20
+ pkg.scripts['db:push'] = 'drizzle-kit push';
21
+ pkg.scripts['db:studio'] = 'drizzle-kit studio';
22
+ files['drizzle.config.ts'] = `import { defineConfig } from 'drizzle-kit';
23
+
24
+ export default defineConfig({
25
+ schema: './src/db/schema.ts',
26
+ out: './drizzle',
27
+ dialect: 'sqlite',
28
+ dbCredentials: {
29
+ url: 'sqlite.db',
30
+ },
31
+ });
32
+ `;
33
+ files['src/db/schema.ts'] = `import { sqliteTable, text } from 'drizzle-orm/sqlite-core';
34
+
35
+ export const users = sqliteTable('users', {
36
+ id: text('id').primaryKey(),
37
+ name: text('name').notNull(),
38
+ email: text('email').notNull().unique(),
39
+ createdAt: text('created_at').notNull().$defaultFn(() => new Date().toISOString()),
40
+ });
41
+
42
+ export type User = typeof users.$inferSelect;
43
+ export type NewUser = typeof users.$inferInsert;
44
+ `;
45
+ files['src/db/index.ts'] = `import Database from 'better-sqlite3';
46
+ import { drizzle } from 'drizzle-orm/better-sqlite3';
47
+ import * as schema from './schema.js';
48
+
49
+ const sqlite = new Database('sqlite.db');
50
+ export const db = drizzle(sqlite, { schema });
51
+ export * from './schema.js';
52
+ `;
53
+ }
54
+ else if (dbOption === 'prisma') {
55
+ pkg.dependencies['@prisma/client'] = '^6.4.0';
56
+ pkg.devDependencies['prisma'] = '^6.4.0';
57
+ pkg.scripts['db:push'] = 'prisma db push';
58
+ pkg.scripts['db:studio'] = 'prisma studio';
59
+ pkg.scripts['db:generate'] = 'prisma generate';
60
+ files['prisma/schema.prisma'] = `datasource db {
61
+ provider = "sqlite"
62
+ url = "file:./dev.db"
63
+ }
64
+
65
+ generator client {
66
+ provider = "prisma-client-js"
67
+ }
68
+
69
+ model User {
70
+ id String @id @default(cuid())
71
+ name String
72
+ email String @unique
73
+ createdAt DateTime @default(now())
74
+ }
75
+ `;
76
+ files['src/db/index.ts'] = `import { PrismaClient } from '@prisma/client';
77
+
78
+ export const prisma = new PrismaClient();
79
+ export * from '@prisma/client';
80
+ `;
81
+ }
82
+ // Update package.json
83
+ files['package.json'] = JSON.stringify(pkg, null, 2) + '\n';
84
+ }
85
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/addons/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,UAAU,kBAAkB,CAChC,KAA6B,EAC7B,QAAwB;IAExB,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO;IAEhC,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,GAAG,GAAoB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpD,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAChC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAC1C,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IAEhD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QAC5C,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;QAC/C,GAAG,CAAC,eAAe,CAAC,uBAAuB,CAAC,GAAG,SAAS,CAAC;QACzD,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QAE/C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,oBAAoB,CAAC;QAEhD,KAAK,CAAC,mBAAmB,CAAC,GAAG;;;;;;;;;;CAUhC,CAAC;QAEE,KAAK,CAAC,kBAAkB,CAAC,GAAG;;;;;;;;;;;CAW/B,CAAC;QAEE,KAAK,CAAC,iBAAiB,CAAC,GAAG;;;;;;;CAO9B,CAAC;IACA,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;QAC9C,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;QAEzC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC;QAC1C,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC;QAC3C,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;QAE/C,KAAK,CAAC,sBAAsB,CAAC,GAAG;;;;;;;;;;;;;;;CAenC,CAAC;QAEE,KAAK,CAAC,iBAAiB,CAAC,GAAG;;;;CAI9B,CAAC;IACA,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Docker & Containerization Add-on for create-frootjs
3
+ * Generates production-ready multi-stage Dockerfile, docker-compose.yml, and .dockerignore.
4
+ */
5
+ export interface DockerAddonConfig {
6
+ projectName: string;
7
+ pkgManager: 'pnpm' | 'npm' | 'yarn' | 'bun';
8
+ entryPoint: 'dist/server.js' | 'dist/index.js';
9
+ port?: number;
10
+ }
11
+ export declare function applyDockerAddon(files: Record<string, string>, config: DockerAddonConfig): void;
12
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/addons/docker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IAC5C,UAAU,EAAE,gBAAgB,GAAG,eAAe,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAiEN"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Docker & Containerization Add-on for create-frootjs
3
+ * Generates production-ready multi-stage Dockerfile, docker-compose.yml, and .dockerignore.
4
+ */
5
+ export function applyDockerAddon(files, config) {
6
+ const { projectName, pkgManager, entryPoint, port = 3000 } = config;
7
+ // 1. .dockerignore
8
+ files['.dockerignore'] = `node_modules/
9
+ dist/
10
+ .git/
11
+ .gitignore
12
+ .env
13
+ .env.local
14
+ *.log
15
+ .pnpm-store/
16
+ npm-debug.log*
17
+ yarn-debug.log*
18
+ yarn-error.log*
19
+ `;
20
+ // 2. Multi-stage Dockerfile
21
+ files['Dockerfile'] = `# Stage 1: Build & bundle
22
+ FROM node:22-alpine AS builder
23
+ WORKDIR /app
24
+
25
+ # Enable Corepack for pnpm/yarn
26
+ RUN corepack enable
27
+
28
+ COPY package*.json ./
29
+ ${pkgManager === 'pnpm' ? 'COPY pnpm-lock.yaml ./\nRUN pnpm install --frozen-lockfile' : ''}${pkgManager === 'npm' ? 'COPY package-lock.json* ./\nRUN npm ci' : ''}${pkgManager === 'yarn' ? 'COPY yarn.lock* ./\nRUN yarn install --frozen-lockfile' : ''}${pkgManager === 'bun' ? 'RUN npm install -g bun && bun install' : ''}
30
+
31
+ COPY tsconfig.json ./
32
+ COPY src/ ./src/
33
+ ${files['drizzle.config.ts'] ? 'COPY drizzle.config.ts ./\n' : ''}${files['prisma/schema.prisma'] ? 'COPY prisma/ ./prisma/\nRUN npx prisma generate\n' : ''}
34
+ RUN ${pkgManager === 'bun' ? 'bun' : 'npm'} run build
35
+
36
+ # Stage 2: Lean Production Runtime
37
+ FROM node:22-alpine AS runner
38
+ WORKDIR /app
39
+
40
+ ENV NODE_ENV=production
41
+ ENV PORT=${port}
42
+
43
+ # Run as non-root user
44
+ USER node
45
+
46
+ COPY --from=builder --chown=node:node /app/package*.json ./
47
+ COPY --from=builder --chown=node:node /app/node_modules/ ./node_modules/
48
+ COPY --from=builder --chown=node:node /app/dist/ ./dist/
49
+
50
+ EXPOSE ${port}
51
+
52
+ CMD ["node", "${entryPoint}"]
53
+ `;
54
+ // 3. docker-compose.yml
55
+ files['docker-compose.yml'] = `services:
56
+ ${projectName}:
57
+ build:
58
+ context: .
59
+ dockerfile: Dockerfile
60
+ ports:
61
+ - "${port}:${port}"
62
+ environment:
63
+ - NODE_ENV=production
64
+ - PORT=${port}
65
+ restart: unless-stopped
66
+ `;
67
+ }
68
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/addons/docker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,UAAU,gBAAgB,CAC9B,KAA6B,EAC7B,MAAyB;IAEzB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAEpE,mBAAmB;IACnB,KAAK,CAAC,eAAe,CAAC,GAAG;;;;;;;;;;;CAW1B,CAAC;IAEA,4BAA4B;IAC5B,KAAK,CAAC,YAAY,CAAC,GAAG;;;;;;;;EAQtB,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE;;;;EAI9T,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,EAAE;MACtJ,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;;;;;;;WAO/B,IAAI;;;;;;;;;SASN,IAAI;;gBAEG,UAAU;CACzB,CAAC;IAEA,wBAAwB;IACxB,KAAK,CAAC,oBAAoB,CAAC,GAAG;IAC5B,WAAW;;;;;WAKJ,IAAI,IAAI,IAAI;;;eAGR,IAAI;;CAElB,CAAC;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Linter & Code Formatter Add-on for create-frootjs
3
+ * Injects Biome (Rust-based ultra-fast linter) or ESLint + Prettier into generated projects.
4
+ */
5
+ export type LinterOption = 'none' | 'biome' | 'eslint';
6
+ export declare function applyLinterAddon(files: Record<string, string>, linter: LinterOption): void;
7
+ //# sourceMappingURL=linter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/addons/linter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AASvD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,EAAE,YAAY,GACnB,IAAI,CA8EN"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Linter & Code Formatter Add-on for create-frootjs
3
+ * Injects Biome (Rust-based ultra-fast linter) or ESLint + Prettier into generated projects.
4
+ */
5
+ export function applyLinterAddon(files, linter) {
6
+ if (linter === 'none')
7
+ return;
8
+ const pkgJsonStr = files['package.json'];
9
+ if (!pkgJsonStr)
10
+ return;
11
+ const pkg = JSON.parse(pkgJsonStr);
12
+ pkg.scripts = pkg.scripts || {};
13
+ pkg.devDependencies = pkg.devDependencies || {};
14
+ if (linter === 'biome') {
15
+ pkg.devDependencies['@biomejs/biome'] = '^1.9.4';
16
+ pkg.scripts['lint'] = 'biome lint src/';
17
+ pkg.scripts['format'] = 'biome format --write src/';
18
+ pkg.scripts['check'] = 'biome check src/';
19
+ files['biome.json'] = `{
20
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
21
+ "vcs": {
22
+ "enabled": true,
23
+ "clientKind": "git",
24
+ "useIgnoreFile": true
25
+ },
26
+ "files": {
27
+ "ignoreUnknown": false,
28
+ "ignore": ["node_modules", "dist"]
29
+ },
30
+ "formatter": {
31
+ "enabled": true,
32
+ "indentStyle": "space",
33
+ "indentWidth": 2,
34
+ "lineWidth": 100
35
+ },
36
+ "linter": {
37
+ "enabled": true,
38
+ "rules": {
39
+ "recommended": true
40
+ }
41
+ },
42
+ "javascript": {
43
+ "formatter": {
44
+ "quoteStyle": "single",
45
+ "semicolons": "always"
46
+ }
47
+ }
48
+ }
49
+ `;
50
+ }
51
+ else if (linter === 'eslint') {
52
+ pkg.devDependencies['eslint'] = '^9.21.0';
53
+ pkg.devDependencies['@eslint/js'] = '^9.21.0';
54
+ pkg.devDependencies['typescript-eslint'] = '^8.25.0';
55
+ pkg.devDependencies['prettier'] = '^3.5.0';
56
+ pkg.scripts['lint'] = 'eslint src/';
57
+ pkg.scripts['format'] = 'prettier --write src/';
58
+ files['eslint.config.js'] = `import js from '@eslint/js';
59
+ import tseslint from 'typescript-eslint';
60
+
61
+ export default tseslint.config(
62
+ js.configs.recommended,
63
+ ...tseslint.configs.recommended,
64
+ {
65
+ ignores: ['dist/**', 'node_modules/**'],
66
+ }
67
+ );
68
+ `;
69
+ files['.prettierrc'] = `{
70
+ "semi": true,
71
+ "singleQuote": true,
72
+ "tabWidth": 2,
73
+ "trailingComma": "es5"
74
+ }
75
+ `;
76
+ }
77
+ files['package.json'] = JSON.stringify(pkg, null, 2) + '\n';
78
+ }
79
+ //# sourceMappingURL=linter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/addons/linter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,UAAU,gBAAgB,CAC9B,KAA6B,EAC7B,MAAoB;IAEpB,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO;IAE9B,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,GAAG,GAAoB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpD,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAChC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IAEhD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;QACjD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,iBAAiB,CAAC;QACxC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,2BAA2B,CAAC;QACpD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC;QAE1C,KAAK,CAAC,YAAY,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BzB,CAAC;IACA,CAAC;SAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;QAC1C,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;QAC9C,GAAG,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;QACrD,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QAE3C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;QACpC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,uBAAuB,CAAC;QAEhD,KAAK,CAAC,kBAAkB,CAAC,GAAG;;;;;;;;;;CAU/B,CAAC;QAEE,KAAK,CAAC,aAAa,CAAC,GAAG;;;;;;CAM1B,CAAC;IACA,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Testing Framework Add-on for create-frootjs
3
+ * Injects Vitest or Node:test suite into generated Froot projects.
4
+ */
5
+ export type TestingOption = 'none' | 'vitest' | 'node';
6
+ export interface TestingAddonOptions {
7
+ projectName: string;
8
+ }
9
+ export declare function applyTestingAddon(files: Record<string, string>, testing: TestingOption, options: TestingAddonOptions): void;
10
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/addons/testing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AASD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,mBAAmB,GAC3B,IAAI,CA4DN"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Testing Framework Add-on for create-frootjs
3
+ * Injects Vitest or Node:test suite into generated Froot projects.
4
+ */
5
+ export function applyTestingAddon(files, testing, options) {
6
+ if (testing === 'none')
7
+ return;
8
+ const pkgJsonStr = files['package.json'];
9
+ if (!pkgJsonStr)
10
+ return;
11
+ const pkg = JSON.parse(pkgJsonStr);
12
+ pkg.scripts = pkg.scripts || {};
13
+ pkg.devDependencies = pkg.devDependencies || {};
14
+ // Resolve where app is exported
15
+ let appImport = '../src/index.js';
16
+ if (files['src/app.ts']) {
17
+ appImport = '../src/app.js';
18
+ }
19
+ else if (files['src/server.ts']) {
20
+ appImport = '../src/server.js';
21
+ }
22
+ if (testing === 'vitest') {
23
+ pkg.devDependencies['vitest'] = '^3.0.0';
24
+ pkg.scripts['test'] = 'vitest run';
25
+ pkg.scripts['test:watch'] = 'vitest';
26
+ files['vitest.config.ts'] = `import { defineConfig } from 'vitest/config';
27
+
28
+ export default defineConfig({
29
+ test: {
30
+ environment: 'node',
31
+ globals: true,
32
+ },
33
+ });
34
+ `;
35
+ files['tests/app.test.ts'] = `import { describe, it, expect } from 'vitest';
36
+ import { app } from '${appImport}';
37
+
38
+ describe('${options.projectName} HTTP tests', () => {
39
+ it('responds with status 200 on GET /', async () => {
40
+ const res = await app.fetch(new Request('http://localhost/'));
41
+ expect(res.status).toBe(200);
42
+ });
43
+ });
44
+ `;
45
+ }
46
+ else if (testing === 'node') {
47
+ pkg.scripts['test'] = 'node --test tests/*.test.ts';
48
+ files['tests/app.test.ts'] = `import { describe, it } from 'node:test';
49
+ import assert from 'node:assert/strict';
50
+ import { app } from '${appImport}';
51
+
52
+ describe('${options.projectName} HTTP tests', () => {
53
+ it('responds with status 200 on GET /', async () => {
54
+ const res = await app.fetch(new Request('http://localhost/'));
55
+ assert.equal(res.status, 200);
56
+ });
57
+ });
58
+ `;
59
+ }
60
+ files['package.json'] = JSON.stringify(pkg, null, 2) + '\n';
61
+ }
62
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/addons/testing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,UAAU,iBAAiB,CAC/B,KAA6B,EAC7B,OAAsB,EACtB,OAA4B;IAE5B,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO;IAE/B,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,GAAG,GAAoB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpD,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAChC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IAEhD,gCAAgC;IAChC,IAAI,SAAS,GAAG,iBAAiB,CAAC;IAClC,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACxB,SAAS,GAAG,eAAe,CAAC;IAC9B,CAAC;SAAM,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QAClC,SAAS,GAAG,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;QACzC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;QAErC,KAAK,CAAC,kBAAkB,CAAC,GAAG;;;;;;;;CAQ/B,CAAC;QAEE,KAAK,CAAC,mBAAmB,CAAC,GAAG;uBACV,SAAS;;YAEpB,OAAO,CAAC,WAAW;;;;;;CAM9B,CAAC;IACA,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,6BAA6B,CAAC;QAEpD,KAAK,CAAC,mBAAmB,CAAC,GAAG;;uBAEV,SAAS;;YAEpB,OAAO,CAAC,WAAW;;;;;;CAM9B,CAAC;IACA,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9D,CAAC"}
@@ -3,6 +3,9 @@
3
3
  * Writes template files to disk, initializes git, and executes dependency installation with animated spinners.
4
4
  */
5
5
  import { TemplateDefinition } from './templates/index.js';
6
+ import { DatabaseOption } from './addons/database.js';
7
+ import { LinterOption } from './addons/linter.js';
8
+ import { TestingOption } from './addons/testing.js';
6
9
  export interface ScaffoldOptions {
7
10
  targetDir: string;
8
11
  projectName: string;
@@ -10,6 +13,10 @@ export interface ScaffoldOptions {
10
13
  pkgManager: 'pnpm' | 'npm' | 'yarn' | 'bun';
11
14
  gitInit: boolean;
12
15
  installDeps: boolean;
16
+ database?: DatabaseOption;
17
+ docker?: boolean;
18
+ linter?: LinterOption;
19
+ testing?: TestingOption;
13
20
  }
14
21
  export interface ScaffoldResult {
15
22
  targetDir: string;
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAwDvF"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAsB,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAIvE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA0EvF"}
package/dist/generator.js CHANGED
@@ -7,14 +7,31 @@ import * as path from 'node:path';
7
7
  import { exec } from 'node:child_process';
8
8
  import { promisify } from 'node:util';
9
9
  import { c, Spinner } from './ui.js';
10
+ import { applyDatabaseAddon } from './addons/database.js';
11
+ import { applyDockerAddon } from './addons/docker.js';
12
+ import { applyLinterAddon } from './addons/linter.js';
13
+ import { applyTestingAddon } from './addons/testing.js';
10
14
  const execAsync = promisify(exec);
11
15
  export async function scaffoldProject(options) {
12
- const { targetDir, projectName, template, pkgManager, gitInit, installDeps } = options;
16
+ const { targetDir, projectName, template, pkgManager, gitInit, installDeps, database, docker, linter, testing } = options;
13
17
  // 1. Ensure target directory exists
14
18
  await fs.mkdir(targetDir, { recursive: true });
15
19
  // 2. Generate files map from template
16
20
  const writeSpinner = new Spinner(`Scaffolding ${template.name} template`).start();
17
21
  const files = template.generate(projectName);
22
+ if (database && database !== 'none') {
23
+ applyDatabaseAddon(files, database);
24
+ }
25
+ if (docker) {
26
+ const entryPoint = template.id === 'minimal' ? 'dist/index.js' : 'dist/server.js';
27
+ applyDockerAddon(files, { projectName, pkgManager, entryPoint });
28
+ }
29
+ if (linter && linter !== 'none') {
30
+ applyLinterAddon(files, linter);
31
+ }
32
+ if (testing && testing !== 'none') {
33
+ applyTestingAddon(files, testing, { projectName });
34
+ }
18
35
  const fileKeys = Object.keys(files);
19
36
  // 3. Write each file to destination
20
37
  for (const relativePath of fileKeys) {
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import * as fs from 'node:fs';
8
8
  import { printBanner, printStep, printError, printNextSteps, promptText, promptSelect, promptConfirm, c, } from './ui.js';
9
9
  import { TEMPLATES, TEMPLATE_LIST, getTemplate } from './templates/index.js';
10
10
  import { scaffoldProject } from './generator.js';
11
- const VERSION = '1.0.6';
11
+ const VERSION = '1.0.7';
12
12
  function parseCliArgs(argv) {
13
13
  const args = {};
14
14
  const raw = argv.slice(2);
@@ -35,6 +35,33 @@ function parseCliArgs(argv) {
35
35
  else if (item === '--no-install') {
36
36
  args.install = false;
37
37
  }
38
+ else if (item === '--docker') {
39
+ args.docker = true;
40
+ }
41
+ else if (item === '--no-docker') {
42
+ args.docker = false;
43
+ }
44
+ else if (item === '--biome') {
45
+ args.linter = 'biome';
46
+ }
47
+ else if (item === '--eslint') {
48
+ args.linter = 'eslint';
49
+ }
50
+ else if (item === '--linter') {
51
+ args.linter = raw[++i];
52
+ }
53
+ else if (item.startsWith('--linter=')) {
54
+ args.linter = item.split('=')[1];
55
+ }
56
+ else if (item === '--vitest') {
57
+ args.testing = 'vitest';
58
+ }
59
+ else if (item === '--test' || item === '--testing') {
60
+ args.testing = raw[++i];
61
+ }
62
+ else if (item.startsWith('--testing=') || item.startsWith('--test=')) {
63
+ args.testing = item.split('=')[1];
64
+ }
38
65
  else if (item === '--template' || item === '-t') {
39
66
  args.template = raw[++i];
40
67
  }
@@ -47,6 +74,12 @@ function parseCliArgs(argv) {
47
74
  else if (item.startsWith('--pm=')) {
48
75
  args.pkgManager = item.split('=')[1];
49
76
  }
77
+ else if (item === '--db' || item === '--database') {
78
+ args.db = raw[++i];
79
+ }
80
+ else if (item.startsWith('--db=')) {
81
+ args.db = item.split('=')[1];
82
+ }
50
83
  else if (!item.startsWith('-') && !args.targetDir) {
51
84
  args.targetDir = item;
52
85
  }
@@ -69,6 +102,10 @@ function printUsage() {
69
102
  • fullstack Server-rendered JSX views
70
103
  • minimal Lean single-file starter
71
104
  --pm <manager> Package manager: pnpm | npm | yarn | bun
105
+ --db <orm> Database ORM: none | drizzle | prisma
106
+ --linter <tool> Linter & formatter: none | biome | eslint
107
+ --test <tool> Testing framework: none | vitest | node
108
+ --docker / --no-docker Generate Docker setup
72
109
  --git / --no-git Initialize a git repository
73
110
  --install / --no-install Automatically install dependencies
74
111
  -y, --yes Accept all defaults non-interactively
@@ -106,7 +143,7 @@ async function main() {
106
143
  targetDir = 'froot-app';
107
144
  }
108
145
  else {
109
- printStep(1, 4, 'Directory');
146
+ printStep(1, 7, 'Directory');
110
147
  targetDir = await promptText('Project directory:', 'my-froot-app', (input) => {
111
148
  if (!input.trim())
112
149
  return 'Project name cannot be empty';
@@ -121,7 +158,7 @@ async function main() {
121
158
  if (fs.existsSync(resolvedTarget)) {
122
159
  const existingFiles = fs.readdirSync(resolvedTarget);
123
160
  if (existingFiles.length > 0 && !args.yes) {
124
- printStep(1, 4, 'Directory warning');
161
+ printStep(1, 7, 'Directory warning');
125
162
  const proceed = await promptConfirm(`Directory "${targetDir}" is not empty. Continue?`, false);
126
163
  console.log();
127
164
  if (!proceed) {
@@ -142,7 +179,7 @@ async function main() {
142
179
  selectedTemplate = TEMPLATES['mvc'];
143
180
  }
144
181
  else {
145
- printStep(2, 4, 'Template');
182
+ printStep(2, 7, 'Template');
146
183
  const choice = await promptSelect('Select a template:', TEMPLATE_LIST.map((t) => ({
147
184
  value: t.id,
148
185
  label: t.name,
@@ -152,11 +189,44 @@ async function main() {
152
189
  console.log();
153
190
  }
154
191
  }
155
- // 3. Package Manager Selection
192
+ // 3. Database ORM Selection
193
+ let dbOption = args.db || 'none';
194
+ if (!args.db && !args.yes) {
195
+ printStep(3, 7, 'Database');
196
+ dbOption = await promptSelect('Include database ORM?', [
197
+ { value: 'none', label: 'None', hint: 'In-memory / no database' },
198
+ { value: 'drizzle', label: 'Drizzle', hint: 'Drizzle ORM & SQLite' },
199
+ { value: 'prisma', label: 'Prisma', hint: 'Prisma & SQLite starter' },
200
+ ]);
201
+ console.log();
202
+ }
203
+ // 4. Linter & Formatter Selection
204
+ let linterOption = args.linter || 'none';
205
+ if (!args.linter && !args.yes) {
206
+ printStep(4, 7, 'Linter & Formatter');
207
+ linterOption = await promptSelect('Code quality tooling:', [
208
+ { value: 'none', label: 'None', hint: 'No linter config' },
209
+ { value: 'biome', label: 'Biome', hint: 'Fast Rust linter & formatter' },
210
+ { value: 'eslint', label: 'ESLint', hint: 'ESLint 9 & Prettier' },
211
+ ]);
212
+ console.log();
213
+ }
214
+ // 5. Testing Framework Selection
215
+ let testingOption = args.testing || 'none';
216
+ if (!args.testing && !args.yes) {
217
+ printStep(5, 7, 'Testing');
218
+ testingOption = await promptSelect('Testing framework:', [
219
+ { value: 'vitest', label: 'Vitest', hint: 'Fast modern unit test runner' },
220
+ { value: 'node', label: 'Node:test', hint: 'Native Node.js test runner' },
221
+ { value: 'none', label: 'None', hint: 'No testing setup' },
222
+ ]);
223
+ console.log();
224
+ }
225
+ // 6. Package Manager Selection
156
226
  const detectedPm = detectCurrentPackageManager();
157
227
  let pkgManager = args.pkgManager || detectedPm;
158
228
  if (!args.pkgManager && !args.yes) {
159
- printStep(3, 4, 'Package manager');
229
+ printStep(6, 7, 'Package manager');
160
230
  pkgManager = await promptSelect('Select package manager:', [
161
231
  { value: 'pnpm', label: 'pnpm', hint: 'Fast, disk-efficient' },
162
232
  { value: 'npm', label: 'npm', hint: 'Standard' },
@@ -165,14 +235,18 @@ async function main() {
165
235
  ]);
166
236
  console.log();
167
237
  }
168
- // 4. Git Initialization & Install Preferences
238
+ // 7. Git, Docker & Install Preferences
169
239
  let gitInit = args.git;
240
+ let docker = args.docker;
170
241
  let installDeps = args.install;
171
242
  if (!args.yes) {
172
- printStep(4, 4, 'Preferences');
243
+ printStep(7, 7, 'Preferences');
173
244
  if (gitInit === undefined) {
174
245
  gitInit = await promptConfirm('Initialize git repository?', true);
175
246
  }
247
+ if (docker === undefined) {
248
+ docker = await promptConfirm('Include Docker container setup?', false);
249
+ }
176
250
  if (installDeps === undefined) {
177
251
  installDeps = await promptConfirm(`Install dependencies with ${pkgManager}?`, true);
178
252
  }
@@ -181,10 +255,12 @@ async function main() {
181
255
  else {
182
256
  if (gitInit === undefined)
183
257
  gitInit = true;
258
+ if (docker === undefined)
259
+ docker = false;
184
260
  if (installDeps === undefined)
185
261
  installDeps = true;
186
262
  }
187
- // 5. Scaffold Project
263
+ // 8. Scaffold Project
188
264
  const startTime = performance.now();
189
265
  try {
190
266
  const result = await scaffoldProject({
@@ -194,6 +270,10 @@ async function main() {
194
270
  pkgManager,
195
271
  gitInit: Boolean(gitInit),
196
272
  installDeps: Boolean(installDeps),
273
+ database: dbOption,
274
+ docker: Boolean(docker),
275
+ linter: linterOption,
276
+ testing: testingOption,
197
277
  });
198
278
  const durationMs = Math.round(performance.now() - startTime);
199
279
  // 6. Print stylized next steps card
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"modular.d.ts","sourceRoot":"","sources":["../../src/templates/modular.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAsD,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,eAAe,EAAE,kBAyT7B,CAAC"}
1
+ {"version":3,"file":"modular.d.ts","sourceRoot":"","sources":["../../src/templates/modular.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAsD,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,eAAe,EAAE,kBAgU7B,CAAC"}
@@ -279,7 +279,14 @@ app.route('/api', authModule);
279
279
  app.route('/api', usersModule);
280
280
  app.route('/api', productsModule);
281
281
 
282
- // Health check
282
+ // Root & Health check
283
+ app.get('/', (c) => {
284
+ return c.json({
285
+ message: 'Welcome to Froot Modular API',
286
+ health: '/health',
287
+ });
288
+ });
289
+
283
290
  app.get('/health', (c) => {
284
291
  return c.json({
285
292
  status: 'ok',
@@ -1 +1 @@
1
- {"version":3,"file":"modular.js","sourceRoot":"","sources":["../../src/templates/modular.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAuC,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,8BAA8B;IAC3C,QAAQ,EAAE,CAAC,WAAmB,EAAmB,EAAE;QACjD,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;oBACP,GAAG,EAAE,yBAAyB;oBAC9B,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,qBAAqB;oBAC5B,IAAI,EAAE,6BAA6B;iBACpC;gBACD,YAAY,EAAE;oBACZ,OAAO,EAAE,QAAQ;iBAClB;gBACD,eAAe,EAAE;oBACf,aAAa,EAAE,UAAU;oBACzB,GAAG,EAAE,SAAS;oBACd,UAAU,EAAE,QAAQ;iBACrB;aACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;YAER,eAAe,EAAE,eAAe;YAChC,YAAY,EAAE,gBAAgB;YAE9B,WAAW,EAAE,KAAK,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ClC;YAEK,iCAAiC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BxC;YAEK,oCAAoC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;CAyB3C;YAEK,kCAAkC,EAAE;;;;;;;;;;;;;;;;;CAiBzC;YAEK,iCAAiC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;CAyBxC;YAEK,kCAAkC,EAAE;;;;;;CAMzC;YAEK,oCAAoC,EAAE;;;;;;;;;;;;;;;;;CAiB3C;YAEK,mCAAmC,EAAE;;;;;;;;;;;;;;;;;;;;CAoB1C;YAEK,wCAAwC,EAAE;;;;;;CAM/C;YAEK,0CAA0C,EAAE;;;;;;;;;;;;;;;;;CAiBjD;YAEK,yCAAyC,EAAE;;;;;;;;;;;;;;;;;CAiBhD;YAEK,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BnB;YAEK,eAAe,EAAE;;;;;;;CAOtB;SACI,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"modular.js","sourceRoot":"","sources":["../../src/templates/modular.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAuC,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,8BAA8B;IAC3C,QAAQ,EAAE,CAAC,WAAmB,EAAmB,EAAE;QACjD,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;oBACP,GAAG,EAAE,yBAAyB;oBAC9B,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,qBAAqB;oBAC5B,IAAI,EAAE,6BAA6B;iBACpC;gBACD,YAAY,EAAE;oBACZ,OAAO,EAAE,QAAQ;iBAClB;gBACD,eAAe,EAAE;oBACf,aAAa,EAAE,UAAU;oBACzB,GAAG,EAAE,SAAS;oBACd,UAAU,EAAE,QAAQ;iBACrB;aACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI;YAER,eAAe,EAAE,eAAe;YAChC,YAAY,EAAE,gBAAgB;YAE9B,WAAW,EAAE,KAAK,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ClC;YAEK,iCAAiC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BxC;YAEK,oCAAoC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;CAyB3C;YAEK,kCAAkC,EAAE;;;;;;;;;;;;;;;;;CAiBzC;YAEK,iCAAiC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;CAyBxC;YAEK,kCAAkC,EAAE;;;;;;CAMzC;YAEK,oCAAoC,EAAE;;;;;;;;;;;;;;;;;CAiB3C;YAEK,mCAAmC,EAAE;;;;;;;;;;;;;;;;;;;;CAoB1C;YAEK,wCAAwC,EAAE;;;;;;CAM/C;YAEK,0CAA0C,EAAE;;;;;;;;;;;;;;;;;CAiBjD;YAEK,yCAAyC,EAAE;;;;;;;;;;;;;;;;;CAiBhD;YAEK,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCnB;YAEK,eAAe,EAAE;;;;;;;CAOtB;SACI,CAAC;IACJ,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-frootjs",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Interactive CLI generator for scaffolding high-performance Froot applications",
5
5
  "type": "module",
6
6
  "bin": {