@reckona/create-mreact-app 0.0.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tatsuo Kaniwa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # @reckona/create-mreact-app
2
+
3
+ Project scaffolder for mreact app-router applications.
4
+
5
+ ```bash
6
+ npx @reckona/create-mreact-app my-app --template app-router
7
+ ```
8
+
9
+ Generated apps include an explicit `vite.config.ts` with the mreact router
10
+ plugin. The default route directory is `app`.
11
+
12
+ ## Templates
13
+
14
+ - `basic`
15
+ - `app-router`
16
+ - `app-router-tailwind`
17
+ - `cloudflare`
18
+
19
+ ## Options
20
+
21
+ ```bash
22
+ npx @reckona/create-mreact-app my-app --template app-router-tailwind --pm pnpm
23
+ ```
24
+
25
+ Supported package managers are `pnpm`, `npm`, and `bun`.
26
+
27
+ Deployment scaffolds:
28
+
29
+ ```bash
30
+ npx @reckona/create-mreact-app my-app --deploy container
31
+ npx @reckona/create-mreact-app my-app --deploy aws-lambda
32
+ ```
33
+
34
+ `--deploy container` adds a generic Node 24 container image for Cloud Run, AWS
35
+ App Runner, and similar platforms. `--deploy aws-lambda` adds a Lambda handler
36
+ for API Gateway HTTP API v2 and Lambda Function URL payload format 2.0.
37
+
38
+ Use `--src-dir` to generate a larger-app layout:
39
+
40
+ ```bash
41
+ npx @reckona/create-mreact-app my-app --template app-router --src-dir
42
+ ```
43
+
44
+ That creates `src/app` for routes, `src/lib` for shared application code, and
45
+ root-level `public` for static assets.
@@ -0,0 +1,10 @@
1
+ import { type CreateMreactAppDeployTarget, type CreateMreactAppPackageManager, type CreateMreactAppTemplate } from "./index.js";
2
+ export interface CreateMreactAppCliOptions {
3
+ deploy?: CreateMreactAppDeployTarget | undefined;
4
+ directory: string;
5
+ packageManager: CreateMreactAppPackageManager;
6
+ srcDir: boolean;
7
+ template: CreateMreactAppTemplate;
8
+ }
9
+ export declare function parseCreateMreactAppCliArgs(args: readonly string[]): CreateMreactAppCliOptions;
10
+ //# sourceMappingURL=cli-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,6BAA6B,CAAC;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,yBAAyB,CA8E9F"}
@@ -0,0 +1,95 @@
1
+ import { createMreactAppTemplates, } from "./index.js";
2
+ export function parseCreateMreactAppCliArgs(args) {
3
+ const directories = [];
4
+ let template = "app-router";
5
+ let packageManager = "pnpm";
6
+ let deploy;
7
+ let srcDir = false;
8
+ for (let index = 0; index < args.length; index += 1) {
9
+ const arg = args[index];
10
+ if (arg === "--") {
11
+ directories.push(...args.slice(index + 1));
12
+ break;
13
+ }
14
+ if (arg === "--template") {
15
+ template = parseTemplate(readOptionValue(args, index, "template"));
16
+ index += 1;
17
+ continue;
18
+ }
19
+ if (arg?.startsWith("--template=")) {
20
+ template = parseTemplate(arg.slice("--template=".length));
21
+ continue;
22
+ }
23
+ if (arg === "--pm" || arg === "--package-manager") {
24
+ packageManager = parsePackageManager(readOptionValue(args, index, "package manager"));
25
+ index += 1;
26
+ continue;
27
+ }
28
+ if (arg?.startsWith("--pm=")) {
29
+ packageManager = parsePackageManager(arg.slice("--pm=".length));
30
+ continue;
31
+ }
32
+ if (arg?.startsWith("--package-manager=")) {
33
+ packageManager = parsePackageManager(arg.slice("--package-manager=".length));
34
+ continue;
35
+ }
36
+ if (arg === "--deploy") {
37
+ deploy = parseDeployTarget(readOptionValue(args, index, "deploy target"));
38
+ index += 1;
39
+ continue;
40
+ }
41
+ if (arg?.startsWith("--deploy=")) {
42
+ deploy = parseDeployTarget(arg.slice("--deploy=".length));
43
+ continue;
44
+ }
45
+ if (arg === "--src-dir") {
46
+ srcDir = true;
47
+ continue;
48
+ }
49
+ if (arg?.startsWith("-")) {
50
+ throw new Error(`Unknown option ${arg}.`);
51
+ }
52
+ if (arg !== undefined) {
53
+ directories.push(arg);
54
+ }
55
+ }
56
+ if (directories.length > 1) {
57
+ throw new Error(`Expected one target directory, received ${directories.length}.`);
58
+ }
59
+ return {
60
+ deploy,
61
+ directory: directories[0] ?? "mreact-app",
62
+ packageManager,
63
+ srcDir,
64
+ template,
65
+ };
66
+ }
67
+ function readOptionValue(args, index, name) {
68
+ const value = args[index + 1];
69
+ if (value === undefined || value.startsWith("-")) {
70
+ throw new Error(`Missing value for ${name}.`);
71
+ }
72
+ return value;
73
+ }
74
+ function parseTemplate(value) {
75
+ if (value === "basic" ||
76
+ value === "app-router" ||
77
+ value === "app-router-tailwind" ||
78
+ value === "cloudflare") {
79
+ return value;
80
+ }
81
+ throw new Error(`Unknown template ${JSON.stringify(value)}. Available templates: ${createMreactAppTemplates.join(", ")}`);
82
+ }
83
+ function parsePackageManager(value) {
84
+ if (value === "pnpm" || value === "npm" || value === "bun") {
85
+ return value;
86
+ }
87
+ throw new Error(`Unknown package manager ${JSON.stringify(value)}. Use pnpm, npm, or bun.`);
88
+ }
89
+ function parseDeployTarget(value) {
90
+ if (value === "aws-lambda" || value === "container") {
91
+ return value;
92
+ }
93
+ throw new Error(`Unknown deploy target ${JSON.stringify(value)}. Use aws-lambda or container.`);
94
+ }
95
+ //# sourceMappingURL=cli-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAIzB,MAAM,YAAY,CAAC;AAUpB,MAAM,UAAU,2BAA2B,CAAC,IAAuB;IACjE,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,QAAQ,GAA4B,YAAY,CAAC;IACrD,IAAI,cAAc,GAAkC,MAAM,CAAC;IAC3D,IAAI,MAA+C,CAAC;IACpD,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM;QACR,CAAC;QAED,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;YACnE,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;YAClD,cAAc,GAAG,mBAAmB,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;YACtF,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAChE,SAAS;QACX,CAAC;QAED,IAAI,GAAG,EAAE,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC1C,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7E,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACvB,MAAM,GAAG,iBAAiB,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;YAC1E,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QAED,IAAI,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,OAAO;QACL,MAAM;QACN,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,YAAY;QACzC,cAAc;QACd,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAuB,EAAE,KAAa,EAAE,IAAY;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAE9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,IACE,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,YAAY;QACtB,KAAK,KAAK,qBAAqB;QAC/B,KAAK,KAAK,YAAY,EACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,0BAA0B,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzG,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAyB;IAClD,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAClG,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import { parseCreateMreactAppCliArgs } from "./cli-args.js";
4
+ import { createMreactApp } from "./index.js";
5
+ try {
6
+ const options = parseCreateMreactAppCliArgs(process.argv.slice(2));
7
+ const result = await createMreactApp({
8
+ deploy: options.deploy,
9
+ directory: resolve(options.directory),
10
+ name: options.directory,
11
+ packageManager: options.packageManager,
12
+ srcDir: options.srcDir,
13
+ template: options.template,
14
+ });
15
+ console.log(`Created ${result.template} mreact app in ${result.directory}`);
16
+ console.log(`Next: cd ${options.directory}`);
17
+ }
18
+ catch (error) {
19
+ console.error(error instanceof Error ? error.message : String(error));
20
+ process.exitCode = 1;
21
+ }
22
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,2BAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QACrC,IAAI,EAAE,OAAO,CAAC,SAAS;QACvB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,QAAQ,kBAAkB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/C,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type CreateMreactAppTemplate = "basic" | "app-router" | "app-router-tailwind" | "cloudflare";
2
+ export type CreateMreactAppPackageManager = "pnpm" | "npm" | "bun";
3
+ export type CreateMreactAppDeployTarget = "aws-lambda" | "container";
4
+ export interface CreateMreactAppOptions {
5
+ deploy?: CreateMreactAppDeployTarget | undefined;
6
+ directory: string;
7
+ name?: string | undefined;
8
+ packageManager?: CreateMreactAppPackageManager | undefined;
9
+ srcDir?: boolean | undefined;
10
+ template?: CreateMreactAppTemplate | undefined;
11
+ }
12
+ export interface CreateMreactAppResult {
13
+ deploy?: CreateMreactAppDeployTarget | undefined;
14
+ directory: string;
15
+ files: string[];
16
+ packageManager: CreateMreactAppPackageManager;
17
+ template: CreateMreactAppTemplate;
18
+ }
19
+ export declare function createMreactApp(options: CreateMreactAppOptions): Promise<CreateMreactAppResult>;
20
+ export declare const createMreactAppTemplates: readonly ["basic", "app-router", "app-router-tailwind", "cloudflare"];
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,YAAY,GAAG,qBAAqB,GAAG,YAAY,CAAC;AAEpG,MAAM,MAAM,6BAA6B,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACnE,MAAM,MAAM,2BAA2B,GAAG,YAAY,GAAG,WAAW,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;IAC3D,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,6BAA6B,CAAC;IAC9C,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AAwBD,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA2BhC;AAED,eAAO,MAAM,wBAAwB,uEAKkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,566 @@
1
+ import { mkdir, readdir, writeFile } from "node:fs/promises";
2
+ import { basename, dirname, join } from "node:path";
3
+ const internalPackageVersions = {
4
+ "@reckona/mreact": "^0.0.1",
5
+ "@reckona/mreact-reactive-core": "^0.0.1",
6
+ "@reckona/mreact-router": "^0.0.1",
7
+ };
8
+ const typescriptVersion = "^6.0.3";
9
+ const tailwindVersion = "^4.3.0";
10
+ const tailwindCliVersion = "^4.3.0";
11
+ const concurrentlyVersion = "^9.2.0";
12
+ const esbuildVersion = "^0.28.0";
13
+ const viteVersion = "^8.0.11";
14
+ const wranglerVersion = "^4.15.2";
15
+ export async function createMreactApp(options) {
16
+ const template = options.template ?? "app-router";
17
+ const packageManager = options.packageManager ?? "pnpm";
18
+ const name = sanitizePackageName(options.name ?? basename(options.directory) ?? "mreact-app");
19
+ const definition = templateDefinition(template, name, packageManager, options.srcDir === true, options.deploy);
20
+ await assertDirectoryWritable(options.directory);
21
+ const files = [];
22
+ for (const file of definition.files) {
23
+ await writeProjectFile(options.directory, file);
24
+ files.push(file.path);
25
+ }
26
+ return {
27
+ directory: options.directory,
28
+ ...(options.deploy === undefined ? {} : { deploy: options.deploy }),
29
+ files,
30
+ packageManager,
31
+ template,
32
+ };
33
+ }
34
+ export const createMreactAppTemplates = [
35
+ "basic",
36
+ "app-router",
37
+ "app-router-tailwind",
38
+ "cloudflare",
39
+ ];
40
+ function templateDefinition(template, name, packageManager, srcDir, deploy) {
41
+ if (template === "basic" || template === "app-router") {
42
+ return appRouterTemplate(name, packageManager, {
43
+ cloudflare: false,
44
+ deploy,
45
+ srcDir,
46
+ tailwind: false,
47
+ });
48
+ }
49
+ if (template === "app-router-tailwind") {
50
+ return appRouterTemplate(name, packageManager, {
51
+ cloudflare: false,
52
+ deploy,
53
+ srcDir,
54
+ tailwind: true,
55
+ });
56
+ }
57
+ return appRouterTemplate(name, packageManager, { cloudflare: true, deploy, srcDir, tailwind: false });
58
+ }
59
+ function appRouterTemplate(name, packageManager, options) {
60
+ const paths = templatePaths(options.srcDir);
61
+ const files = [
62
+ {
63
+ path: "package.json",
64
+ content: json({
65
+ name,
66
+ private: true,
67
+ type: "module",
68
+ scripts: packageScripts(packageManager, options),
69
+ dependencies: {
70
+ "@reckona/mreact": internalPackageVersions["@reckona/mreact"],
71
+ "@reckona/mreact-reactive-core": internalPackageVersions["@reckona/mreact-reactive-core"],
72
+ "@reckona/mreact-router": internalPackageVersions["@reckona/mreact-router"],
73
+ },
74
+ devDependencies: {
75
+ typescript: typescriptVersion,
76
+ vite: viteVersion,
77
+ ...(options.tailwind
78
+ ? {
79
+ "@tailwindcss/cli": tailwindCliVersion,
80
+ concurrently: concurrentlyVersion,
81
+ tailwindcss: tailwindVersion,
82
+ }
83
+ : {}),
84
+ ...(options.deploy === "aws-lambda" ? { esbuild: esbuildVersion } : {}),
85
+ ...(options.cloudflare ? { wrangler: wranglerVersion } : {}),
86
+ },
87
+ }),
88
+ },
89
+ {
90
+ path: "tsconfig.json",
91
+ content: json({
92
+ compilerOptions: {
93
+ target: "ES2022",
94
+ lib: ["ES2022", "DOM"],
95
+ module: "NodeNext",
96
+ moduleResolution: "NodeNext",
97
+ strict: true,
98
+ jsx: "react-jsx",
99
+ jsxImportSource: "@reckona/mreact",
100
+ skipLibCheck: true,
101
+ },
102
+ include: options.srcDir ? ["src", "vite.config.ts"] : ["app", "src", "vite.config.ts"],
103
+ }),
104
+ },
105
+ {
106
+ path: "vite.config.ts",
107
+ content: viteConfigSource(paths),
108
+ },
109
+ {
110
+ path: `${paths.routesDir}/layout.tsx`,
111
+ content: options.tailwind ? tailwindLayoutSource : layoutSource,
112
+ },
113
+ {
114
+ path: `${paths.routesDir}/page.tsx`,
115
+ content: pageSourceForTemplate(options),
116
+ },
117
+ {
118
+ path: ".gitignore",
119
+ content: "node_modules\n.mreact\ndist\n.env\n",
120
+ },
121
+ {
122
+ path: "README.md",
123
+ content: readmeSource(name, packageManager, options),
124
+ },
125
+ ];
126
+ if (options.tailwind) {
127
+ files.push({
128
+ path: `${paths.routesDir}/globals.css`,
129
+ content: tailwindCssSource,
130
+ });
131
+ }
132
+ if (options.srcDir) {
133
+ files.push({
134
+ path: "src/lib/app-info.ts",
135
+ content: appInfoSource,
136
+ });
137
+ }
138
+ if (options.cloudflare) {
139
+ files.push({
140
+ path: "src/worker.ts",
141
+ content: cloudflareWorkerSource,
142
+ }, {
143
+ path: "wrangler.toml",
144
+ content: wranglerSource(name),
145
+ });
146
+ }
147
+ if (options.deploy === "container") {
148
+ files.push({
149
+ path: "Dockerfile",
150
+ content: dockerfileSource(packageManager),
151
+ }, {
152
+ path: ".dockerignore",
153
+ content: dockerignoreSource,
154
+ }, {
155
+ path: "docs/deploy/container.md",
156
+ content: containerDeployReadmeSource(packageManager),
157
+ });
158
+ }
159
+ if (options.deploy === "aws-lambda") {
160
+ files.push({
161
+ path: "src/lambda.ts",
162
+ content: awsLambdaHandlerSource,
163
+ }, {
164
+ path: "docs/deploy/aws-lambda.md",
165
+ content: awsLambdaDeployReadmeSource(packageManager),
166
+ });
167
+ }
168
+ return { files };
169
+ }
170
+ function pageSourceForTemplate(options) {
171
+ if (options.cloudflare)
172
+ return cloudflarePageSource;
173
+ if (options.srcDir)
174
+ return srcDirPageSource;
175
+ if (options.tailwind)
176
+ return tailwindPageSource;
177
+ return pageSource;
178
+ }
179
+ function templatePaths(srcDir) {
180
+ return srcDir
181
+ ? { routesDir: "src/app", sourceDir: "src" }
182
+ : { routesDir: "app", sourceDir: "app" };
183
+ }
184
+ function viteConfigSource(paths) {
185
+ return `import { defineConfig } from "vite";
186
+ import { mreactRouter } from "@reckona/mreact-router/vite";
187
+
188
+ export default defineConfig({
189
+ plugins: [
190
+ mreactRouter({
191
+ routesDir: "${paths.routesDir}",
192
+ publicDir: "public",
193
+ allowedSourceDirs: ["${paths.sourceDir}"],
194
+ }),
195
+ ],
196
+ });
197
+ `;
198
+ }
199
+ function packageScripts(packageManager, options) {
200
+ const run = packageManager === "npm" ? "npm run" : `${packageManager} run`;
201
+ const paths = templatePaths(options.srcDir);
202
+ const scripts = {
203
+ dev: "vite",
204
+ build: "mreact-router build",
205
+ start: "mreact-router start .mreact",
206
+ };
207
+ if (options.tailwind) {
208
+ scripts["prepare:css"] = "node -e \"require('node:fs').mkdirSync('public',{recursive:true})\"";
209
+ scripts["dev:css"] =
210
+ `tailwindcss -i ./${paths.routesDir}/globals.css -o ./public/styles.css --watch`;
211
+ scripts["build:css"] =
212
+ `tailwindcss -i ./${paths.routesDir}/globals.css -o ./public/styles.css --minify`;
213
+ scripts.dev = `${run} prepare:css && concurrently "${run} dev:css" "${run} dev:router"`;
214
+ scripts["dev:router"] = "vite";
215
+ scripts.build = `${run} prepare:css && ${run} build:css && mreact-router build`;
216
+ }
217
+ if (options.cloudflare) {
218
+ scripts.deploy = "wrangler deploy";
219
+ scripts.dev = "wrangler dev";
220
+ scripts.preview = "wrangler dev";
221
+ scripts.build = "mreact-router build";
222
+ }
223
+ if (options.deploy === "aws-lambda") {
224
+ scripts["build:lambda"] =
225
+ "esbuild src/lambda.ts --bundle --platform=node --target=node24 --format=esm --packages=external --outfile=dist/lambda.mjs";
226
+ }
227
+ return scripts;
228
+ }
229
+ async function assertDirectoryWritable(directory) {
230
+ await mkdir(directory, { recursive: true });
231
+ const entries = await readdir(directory);
232
+ if (entries.length > 0) {
233
+ throw new Error(`Target directory is not empty: ${directory}`);
234
+ }
235
+ }
236
+ async function writeProjectFile(root, file) {
237
+ const path = join(root, file.path);
238
+ await mkdir(dirname(path), { recursive: true });
239
+ await writeFile(path, file.content);
240
+ }
241
+ function sanitizePackageName(name) {
242
+ return (name
243
+ .trim()
244
+ .toLowerCase()
245
+ .replace(/[^a-z0-9._-]+/g, "-")
246
+ .replace(/^-+|-+$/g, "") || "mreact-app");
247
+ }
248
+ function json(value) {
249
+ return `${JSON.stringify(value, null, 2)}\n`;
250
+ }
251
+ const layoutSource = `export default function Layout() {
252
+ return (
253
+ <html lang="en">
254
+ <head>
255
+ <meta charset="utf-8" />
256
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
257
+ <title>mreact app</title>
258
+ </head>
259
+ <body>
260
+ <Slot />
261
+ </body>
262
+ </html>
263
+ );
264
+ }
265
+ `;
266
+ const tailwindLayoutSource = `export default function Layout() {
267
+ return (
268
+ <html lang="en">
269
+ <head>
270
+ <meta charset="utf-8" />
271
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
272
+ <link rel="stylesheet" href="/styles.css" />
273
+ <title>mreact app</title>
274
+ </head>
275
+ <body class="bg-slate-950 text-slate-100">
276
+ <Slot />
277
+ </body>
278
+ </html>
279
+ );
280
+ }
281
+ `;
282
+ const pageSource = `export const metadata = {
283
+ title: "Home",
284
+ };
285
+
286
+ export default function Page() {
287
+ return <main>Hello from mreact</main>;
288
+ }
289
+ `;
290
+ const srcDirPageSource = `import { appTitle } from "../lib/app-info";
291
+
292
+ export const metadata = {
293
+ title: "Home",
294
+ };
295
+
296
+ export default function Page() {
297
+ return <main>{appTitle}</main>;
298
+ }
299
+ `;
300
+ const appInfoSource = `export const appTitle = "Hello from mreact";
301
+ `;
302
+ const cloudflarePageSource = `export const metadata = {
303
+ title: "Home",
304
+ };
305
+
306
+ export const prerender = true;
307
+
308
+ export default function Page() {
309
+ return <main>Hello from mreact on Cloudflare</main>;
310
+ }
311
+ `;
312
+ const tailwindPageSource = `export const metadata = {
313
+ title: "Home",
314
+ };
315
+
316
+ export default function Page() {
317
+ return (
318
+ <main class="mx-auto flex min-h-screen max-w-3xl flex-col justify-center gap-4 px-6">
319
+ <p class="text-sm uppercase tracking-wide text-cyan-300">mreact</p>
320
+ <h1 class="text-4xl font-semibold">Hello from mreact</h1>
321
+ <p class="text-slate-300">
322
+ This page is rendered by the app router and styled with Tailwind.
323
+ </p>
324
+ </main>
325
+ );
326
+ }
327
+ `;
328
+ const tailwindCssSource = `@import "tailwindcss";
329
+ `;
330
+ const cloudflareWorkerSource = `import {
331
+ createCloudflareBuiltRequestHandler,
332
+ createCloudflareRouteModuleRenderer,
333
+ createCloudflareStaticAssetLoader,
334
+ } from "@reckona/mreact-router/adapters/cloudflare";
335
+ import clientManifest from "../.mreact/client/manifest.json" with { type: "json" };
336
+ import serverManifest from "../.mreact/server/manifest.json" with { type: "json" };
337
+
338
+ interface Env {
339
+ ASSETS: {
340
+ fetch(request: Request): Response | Promise<Response>;
341
+ };
342
+ }
343
+
344
+ const routeModules = {
345
+ // Register dynamic route modules by built manifest file key.
346
+ // Example:
347
+ // "users/$id/page.tsx": () => import("./routes/users-id.js"),
348
+ };
349
+
350
+ const renderRouteModule = createCloudflareRouteModuleRenderer<Env>({
351
+ modules: routeModules,
352
+ });
353
+
354
+ const handler = createCloudflareBuiltRequestHandler<Env>({
355
+ assets: createCloudflareStaticAssetLoader({
356
+ binding: (env) => env.ASSETS,
357
+ clientManifest,
358
+ }),
359
+ clientManifest,
360
+ renderRoute(request, context) {
361
+ return renderRouteModule(request, context);
362
+ },
363
+ serverManifest,
364
+ });
365
+
366
+ export default {
367
+ fetch(request: Request, env: Env, context: ExecutionContext): Promise<Response> {
368
+ return handler.fetch(request, env, context);
369
+ },
370
+ };
371
+ `;
372
+ const awsLambdaHandlerSource = `import { createAwsLambdaRequestHandler } from "@reckona/mreact-router/adapters/aws-lambda";
373
+
374
+ export const handler = createAwsLambdaRequestHandler({
375
+ outDir: new URL("../.mreact", import.meta.url).pathname,
376
+ });
377
+ `;
378
+ function wranglerSource(name) {
379
+ return `name = "${name}"
380
+ main = "src/worker.ts"
381
+ compatibility_date = "2026-05-15"
382
+
383
+ [assets]
384
+ directory = ".mreact/client"
385
+ binding = "ASSETS"
386
+ `;
387
+ }
388
+ function dockerfileSource(packageManager) {
389
+ const installCommand = packageManager === "pnpm"
390
+ ? "pnpm install --frozen-lockfile || pnpm install"
391
+ : packageManager === "npm"
392
+ ? "npm install"
393
+ : "bun install";
394
+ const buildCommand = packageManager === "npm" ? "npm run build" : `${packageManager} run build`;
395
+ const startCommand = packageManager === "npm"
396
+ ? `CMD ["npm", "start"]`
397
+ : packageManager === "bun"
398
+ ? `CMD ["bun", "run", "start"]`
399
+ : `CMD ["pnpm", "start"]`;
400
+ const enablePackageManager = packageManager === "pnpm"
401
+ ? "RUN corepack enable\n"
402
+ : packageManager === "bun"
403
+ ? "RUN npm install -g bun\n"
404
+ : "";
405
+ return `FROM node:24-bookworm-slim AS deps
406
+ WORKDIR /app
407
+ ${enablePackageManager}COPY . .
408
+ RUN ${installCommand}
409
+
410
+ FROM node:24-bookworm-slim AS build
411
+ WORKDIR /app
412
+ ${enablePackageManager}COPY --from=deps /app ./
413
+ RUN ${buildCommand}
414
+
415
+ FROM node:24-bookworm-slim AS runner
416
+ WORKDIR /app
417
+ ENV NODE_ENV=production
418
+ ENV PORT=8080
419
+ ${enablePackageManager}COPY --from=build /app/package.json ./package.json
420
+ COPY --from=build /app/node_modules ./node_modules
421
+ COPY --from=build /app/.mreact ./.mreact
422
+ EXPOSE 8080
423
+ ${startCommand}
424
+ `;
425
+ }
426
+ const dockerignoreSource = `node_modules
427
+ .mreact
428
+ dist
429
+ .git
430
+ .gitignore
431
+ .env
432
+ .env.*
433
+ npm-debug.log*
434
+ pnpm-debug.log*
435
+ yarn-debug.log*
436
+ yarn-error.log*
437
+ `;
438
+ function containerDeployReadmeSource(packageManager) {
439
+ const run = packageManager === "npm" ? "npm run" : `${packageManager} run`;
440
+ return `# Container deployment
441
+
442
+ This project includes a generic container image for platforms such as Cloud Run,
443
+ AWS App Runner, Fly.io, Render, and other services that run an HTTP server from
444
+ a container.
445
+
446
+ ## Local build
447
+
448
+ \`\`\`bash
449
+ ${run} build
450
+ docker build -t mreact-app .
451
+ docker run --rm -p 8080:8080 -e PORT=8080 mreact-app
452
+ \`\`\`
453
+
454
+ The server reads \`PORT\` and defaults to the value provided by the platform.
455
+ The Dockerfile uses Node 24 LTS and runs \`${run} start\`.
456
+
457
+ ## Cloud Run
458
+
459
+ Cloud Run injects \`PORT\` automatically. The Dockerfile sets \`PORT=8080\` for
460
+ local runs, which matches Cloud Run's common default. Build and deploy the image
461
+ with your preferred Google Cloud workflow, then route HTTP traffic to the
462
+ container.
463
+
464
+ ## AWS App Runner
465
+
466
+ AWS App Runner can use the same image. Configure the service port as \`8080\`
467
+ or set \`PORT\` to the value you choose for the service. Use a simple HTTP
468
+ health check path such as \`/\`.
469
+
470
+ ## CDN assets
471
+
472
+ \`.mreact/client\` contains both hashed client route assets and copied public
473
+ assets under \`.mreact/client/public\`. To serve them from a CDN, upload that
474
+ directory to your static origin and configure the router:
475
+
476
+ \`\`\`ts
477
+ mreactRouter({
478
+ routesDir: "src/app",
479
+ publicDir: "public",
480
+ allowedSourceDirs: ["src"],
481
+ assetBaseUrl: "https://cdn.example.com/_mreact/client/",
482
+ publicAssetBaseUrl: "https://cdn.example.com/",
483
+ });
484
+ \`\`\`
485
+
486
+ Hashed route assets can use a long immutable cache. \`manifest.json\` and
487
+ non-fingerprinted public assets should use a shorter cache or revalidation.
488
+ `;
489
+ }
490
+ function awsLambdaDeployReadmeSource(packageManager) {
491
+ const run = packageManager === "npm" ? "npm run" : `${packageManager} run`;
492
+ return `# AWS Lambda deployment
493
+
494
+ This project includes a Lambda handler at \`src/lambda.ts\` for API Gateway
495
+ HTTP API v2 and Lambda Function URL events.
496
+
497
+ ## Build
498
+
499
+ \`\`\`bash
500
+ ${run} build
501
+ ${run} build:lambda
502
+ \`\`\`
503
+
504
+ \`dist/lambda.mjs\` exports \`handler\`. Package that file together with
505
+ \`.mreact\`, \`package.json\`, and production \`node_modules\`.
506
+
507
+ ## Runtime shape
508
+
509
+ - Use API Gateway HTTP API v2 or Lambda Function URL payload format 2.0.
510
+ - Use a Node.js Lambda runtime that supports Web \`Request\` and \`Response\`.
511
+ - The adapter returns the Lambda proxy response shape with \`cookies\`,
512
+ \`headers\`, \`statusCode\`, \`body\`, and \`isBase64Encoded\`.
513
+ - Binary responses are base64 encoded automatically.
514
+
515
+ ## Streaming SSR
516
+
517
+ API Gateway and Lambda Function URL proxy responses are buffered. mreact still
518
+ renders through the same server pipeline, but Streaming SSR is materialized into
519
+ one Lambda response body. Use the container adapter when true response streaming
520
+ is required.
521
+
522
+ ## Static assets
523
+
524
+ Lambda can serve \`.mreact/client\`, but it is usually better to move static
525
+ assets to S3 + CloudFront. Upload \`.mreact/client\` to your static origin and
526
+ configure the router:
527
+
528
+ \`\`\`ts
529
+ mreactRouter({
530
+ routesDir: "src/app",
531
+ publicDir: "public",
532
+ allowedSourceDirs: ["src"],
533
+ assetBaseUrl: "https://cdn.example.com/_mreact/client/",
534
+ publicAssetBaseUrl: "https://cdn.example.com/",
535
+ });
536
+ \`\`\`
537
+
538
+ Hashed route assets can use a long immutable cache. \`manifest.json\` and
539
+ non-fingerprinted public assets should use a shorter cache or revalidation.
540
+ `;
541
+ }
542
+ function readmeSource(name, packageManager, options) {
543
+ const run = packageManager === "npm" ? "npm run" : `${packageManager} run`;
544
+ const tailwindNote = options.tailwind
545
+ ? "\nTailwind CSS v4 is configured in `app/globals.css`.\n"
546
+ : "";
547
+ const cloudflareNote = options.cloudflare
548
+ ? "\nCloudflare Workers entrypoint lives in `src/worker.ts`. Run `pnpm build` before `wrangler deploy`.\n"
549
+ : "";
550
+ const deployNote = options.deploy === "container"
551
+ ? "\nContainer deploy files are included. See `docs/deploy/container.md`.\n"
552
+ : options.deploy === "aws-lambda"
553
+ ? "\nAWS Lambda deploy files are included. See `docs/deploy/aws-lambda.md`.\n"
554
+ : "";
555
+ return `# ${name}
556
+
557
+ mreact app-router project generated by \`@reckona/create-mreact-app\`.
558
+
559
+ ## Scripts
560
+
561
+ - \`${run} dev\`
562
+ - \`${run} build\`
563
+ - \`${run} start\`
564
+ ${tailwindNote}${cloudflareNote}${deployNote}`;
565
+ }
566
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@reckona/create-mreact-app",
3
+ "version": "0.0.1",
4
+ "description": "Project scaffolder for mreact app-router applications.",
5
+ "keywords": [
6
+ "cli",
7
+ "create",
8
+ "jsx",
9
+ "mreact",
10
+ "scaffold",
11
+ "typescript"
12
+ ],
13
+ "homepage": "https://github.com/t-k/mreact/tree/main/packages/create-mreact-app#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/t-k/mreact/issues"
16
+ },
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/t-k/mreact.git",
21
+ "directory": "packages/create-mreact-app"
22
+ },
23
+ "bin": {
24
+ "create-mreact-app": "./dist/cli.js"
25
+ },
26
+ "files": [
27
+ "dist/**/*.js",
28
+ "dist/**/*.js.map",
29
+ "dist/**/*.d.ts",
30
+ "dist/**/*.d.ts.map"
31
+ ],
32
+ "type": "module",
33
+ "sideEffects": false,
34
+ "types": "./dist/index.d.ts",
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "default": "./dist/index.js"
39
+ }
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ }
44
+ }