@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 +21 -0
- package/README.md +45 -0
- package/dist/cli-args.d.ts +10 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +95 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +22 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +566 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
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"}
|
package/dist/cli-args.js
ADDED
|
@@ -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":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -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
|
package/dist/cli.js.map
ADDED
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|