@bleedingdev/modern-js-create 3.2.0-ultramodern.11 → 3.2.0-ultramodern.111
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/README.md +158 -35
- package/bin/run.js +0 -0
- package/dist/cjs/index.cjs +1042 -0
- package/dist/cjs/locale/en.cjs +97 -0
- package/dist/cjs/locale/index.cjs +50 -0
- package/dist/cjs/locale/zh.cjs +97 -0
- package/dist/cjs/ultramodern-package-source.cjs +135 -0
- package/dist/cjs/ultramodern-workspace.cjs +5623 -0
- package/dist/esm/index.js +1004 -0
- package/dist/esm/locale/en.js +59 -0
- package/dist/esm/locale/index.js +9 -0
- package/dist/esm/locale/zh.js +59 -0
- package/dist/esm/ultramodern-package-source.js +63 -0
- package/dist/esm/ultramodern-workspace.js +5561 -0
- package/dist/esm-node/index.js +1005 -0
- package/dist/esm-node/locale/en.js +60 -0
- package/dist/esm-node/locale/index.js +10 -0
- package/dist/esm-node/locale/zh.js +60 -0
- package/dist/esm-node/ultramodern-package-source.js +64 -0
- package/dist/esm-node/ultramodern-workspace.js +5562 -0
- package/dist/types/locale/en.d.ts +3 -0
- package/dist/types/locale/index.d.ts +117 -2
- package/dist/types/locale/zh.d.ts +3 -0
- package/dist/types/ultramodern-package-source.d.ts +28 -0
- package/dist/types/ultramodern-workspace.d.ts +12 -2
- package/package.json +27 -11
- package/template/.codex/hooks.json +16 -0
- package/template/.github/renovate.json +53 -0
- package/template/.github/workflows/ultramodern-gates.yml.handlebars +34 -10
- package/template/.mise.toml.handlebars +2 -0
- package/template/AGENTS.md +9 -6
- package/template/README.md +66 -34
- package/template/api/effect/index.ts.handlebars +20 -9
- package/template/api/lambda/hello.ts.handlebars +5 -5
- package/template/config/favicon.svg +5 -0
- package/template/config/public/assets/ultramodern-logo.svg +6 -0
- package/template/config/public/locales/cs/translation.json +44 -0
- package/template/config/public/locales/en/translation.json +44 -0
- package/template/lefthook.yml +10 -0
- package/template/modern.config.ts.handlebars +35 -3
- package/template/oxfmt.config.ts +8 -1
- package/template/oxlint.config.ts +8 -1
- package/template/package.json.handlebars +37 -30
- package/template/pnpm-workspace.yaml +34 -0
- package/template/rstest.config.mts +5 -0
- package/template/scripts/bootstrap-agent-skills.mjs +148 -15
- package/template/scripts/check-i18n-strings.mjs +3 -0
- package/template/scripts/validate-ultramodern.mjs.handlebars +495 -3
- package/template/src/modern-app-env.d.ts +2 -0
- package/template/src/modern.runtime.ts.handlebars +17 -1
- package/template/src/routes/[lang]/page.tsx.handlebars +209 -0
- package/template/src/routes/index.css.handlebars +192 -55
- package/template/src/routes/layout.tsx.handlebars +2 -1
- package/template/tailwind.config.ts.handlebars +1 -1
- package/template/tests/tsconfig.json +7 -0
- package/template/tests/ultramodern.contract.test.ts.handlebars +163 -0
- package/template/tsconfig.json +2 -1
- package/template-workspace/.agents/agent-reference-repos.json +24 -0
- package/template-workspace/.agents/skills-lock.json +19 -0
- package/template-workspace/.codex/hooks.json +16 -0
- package/template-workspace/.github/renovate.json +29 -0
- package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +54 -0
- package/template-workspace/.gitignore.handlebars +5 -0
- package/template-workspace/.mise.toml.handlebars +2 -0
- package/template-workspace/AGENTS.md +36 -5
- package/template-workspace/README.md.handlebars +70 -11
- package/template-workspace/lefthook.yml +10 -0
- package/template-workspace/oxfmt.config.ts +1 -0
- package/template-workspace/oxlint.config.ts +1 -0
- package/template-workspace/pnpm-workspace.yaml +31 -8
- package/template-workspace/scripts/bootstrap-agent-skills.mjs +190 -21
- package/template-workspace/scripts/setup-agent-reference-repos.mjs +370 -0
- package/dist/index.js +0 -2474
- package/template/src/routes/page.tsx.handlebars +0 -136
- package/template-workspace/scripts/validate-ultramodern-workspace.mjs.handlebars +0 -405
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
const EN_LOCALE = {
|
|
3
|
+
prompt: {
|
|
4
|
+
projectName: 'Please enter project name: '
|
|
5
|
+
},
|
|
6
|
+
error: {
|
|
7
|
+
projectNameEmpty: 'Error: Project name cannot be empty',
|
|
8
|
+
directoryExists: 'Error: Directory "{projectName}" already exists and is not empty',
|
|
9
|
+
invalidRouter: 'Error: Unsupported router "{router}". Use "react-router" or "tanstack".',
|
|
10
|
+
invalidBffRuntime: 'Error: Unsupported BFF runtime "{runtime}". Use "hono" or "effect".',
|
|
11
|
+
createFailed: 'Error creating project:'
|
|
12
|
+
},
|
|
13
|
+
message: {
|
|
14
|
+
welcome: '🚀 Welcome to UltraModern.js',
|
|
15
|
+
success: '✨ Created successfully!',
|
|
16
|
+
nextSteps: '📋 Next steps:',
|
|
17
|
+
step1: 'cd {projectName}',
|
|
18
|
+
step2: 'pnpm install',
|
|
19
|
+
step3: 'pnpm dev'
|
|
20
|
+
},
|
|
21
|
+
help: {
|
|
22
|
+
title: '🚀 UltraModern.js Project Creator',
|
|
23
|
+
description: 'Create a new UltraModern.js app with TanStack Router and Effect BFF by default',
|
|
24
|
+
usage: '📖 Usage:',
|
|
25
|
+
usageExample: ' pnpm dlx @bleedingdev/modern-js-create [project-name] [options]',
|
|
26
|
+
options: '⚙️ Options:',
|
|
27
|
+
optionHelp: ' -h, --help Display this help message',
|
|
28
|
+
optionVersion: ' -v, --version Display version information',
|
|
29
|
+
optionLang: ' -l, --lang Set the language (zh or en)',
|
|
30
|
+
optionRouter: ' -r, --router Select router framework (tanstack default; react-router is compatibility mode)',
|
|
31
|
+
optionBff: ' --bff Keep Effect BFF enabled (default for UltraModern apps)',
|
|
32
|
+
optionBffRuntime: ' --bff-runtime Select BFF runtime (hono or effect)',
|
|
33
|
+
optionTailwind: ' --no-tailwind Disable default Tailwind CSS v4 scaffold',
|
|
34
|
+
optionWorkspace: ' --workspace Use workspace protocol for @modern-js dependencies (for local monorepo testing)',
|
|
35
|
+
optionUltramodernWorkspace: ' --ultramodern-workspace Generate an UltraModern SuperApp workspace (default is a full UltraModern single app)',
|
|
36
|
+
optionUltramodernPackageSource: ' --ultramodern-package-source Select UltraModern package source (workspace or install; BleedingDev defaults to install aliases)',
|
|
37
|
+
optionUltramodernPackageScope: ' --ultramodern-package-scope Publish scope for npm alias installs (for example bleedingdev)',
|
|
38
|
+
optionUltramodernPackageNamePrefix: ' --ultramodern-package-name-prefix Prefix for npm alias package names (default: modern-js-)',
|
|
39
|
+
optionVertical: ' --vertical Mutate the current existing UltraModern workspace and wire a MicroVertical named <project-name>',
|
|
40
|
+
optionSub: ' -s, --sub Mark as a subproject (package in monorepo)',
|
|
41
|
+
examples: '💡 Examples:',
|
|
42
|
+
example1: ' pnpm dlx @bleedingdev/modern-js-create my-app',
|
|
43
|
+
example2: ' pnpm dlx @bleedingdev/modern-js-create my-app --lang zh',
|
|
44
|
+
example3: ' pnpm dlx @bleedingdev/modern-js-create my-app --sub',
|
|
45
|
+
example4: ' pnpm dlx @bleedingdev/modern-js-create --help',
|
|
46
|
+
example5: ' pnpm dlx @bleedingdev/modern-js-create .',
|
|
47
|
+
example6: ' pnpm dlx @bleedingdev/modern-js-create my-app --router react-router --no-tailwind',
|
|
48
|
+
example7: ' pnpm dlx @bleedingdev/modern-js-create my-app --bff-runtime hono',
|
|
49
|
+
example8: ' pnpm dlx @bleedingdev/modern-js-create my-app --workspace',
|
|
50
|
+
example9: ' pnpm dlx @bleedingdev/modern-js-create my-super-app --ultramodern-workspace',
|
|
51
|
+
example10: ' pnpm dlx @bleedingdev/modern-js-create my-app --no-tailwind',
|
|
52
|
+
example11: ' pnpm dlx @bleedingdev/modern-js-create my-app --router react-router # compatibility mode',
|
|
53
|
+
example12: ' pnpm dlx @bleedingdev/modern-js-create catalog --vertical',
|
|
54
|
+
moreInfo: '📚 Learn more: https://modernjs.dev'
|
|
55
|
+
},
|
|
56
|
+
version: {
|
|
57
|
+
message: '@bleedingdev/modern-js-create version: {version}'
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
export { EN_LOCALE };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
import { I18n } from "@modern-js/i18n-utils";
|
|
3
|
+
import { EN_LOCALE } from "./en.js";
|
|
4
|
+
import { ZH_LOCALE } from "./zh.js";
|
|
5
|
+
const i18n = new I18n();
|
|
6
|
+
const localeKeys = i18n.init('en', {
|
|
7
|
+
zh: ZH_LOCALE,
|
|
8
|
+
en: EN_LOCALE
|
|
9
|
+
});
|
|
10
|
+
export { i18n, localeKeys };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
const ZH_LOCALE = {
|
|
3
|
+
prompt: {
|
|
4
|
+
projectName: '请输入项目名称: '
|
|
5
|
+
},
|
|
6
|
+
error: {
|
|
7
|
+
projectNameEmpty: '错误: 项目名称不能为空',
|
|
8
|
+
directoryExists: '错误: 目录 "{projectName}" 已存在且不为空',
|
|
9
|
+
invalidRouter: '错误: 不支持的路由器 "{router}",请使用 "react-router" 或 "tanstack"',
|
|
10
|
+
invalidBffRuntime: '错误: 不支持的 BFF 运行时 "{runtime}",请使用 "hono" 或 "effect"',
|
|
11
|
+
createFailed: '创建项目时出错:'
|
|
12
|
+
},
|
|
13
|
+
message: {
|
|
14
|
+
welcome: '🚀 欢迎使用 UltraModern.js',
|
|
15
|
+
success: '✨ 创建成功!',
|
|
16
|
+
nextSteps: '📋 下一步:',
|
|
17
|
+
step1: 'cd {projectName}',
|
|
18
|
+
step2: 'pnpm install',
|
|
19
|
+
step3: 'pnpm dev'
|
|
20
|
+
},
|
|
21
|
+
help: {
|
|
22
|
+
title: '🚀 UltraModern.js 项目创建工具',
|
|
23
|
+
description: '创建默认包含 TanStack Router 和 Effect BFF 的 UltraModern.js 应用',
|
|
24
|
+
usage: '📖 用法:',
|
|
25
|
+
usageExample: ' pnpm dlx @bleedingdev/modern-js-create [项目名称] [选项]',
|
|
26
|
+
options: '⚙️ 选项:',
|
|
27
|
+
optionHelp: ' -h, --help 显示帮助信息',
|
|
28
|
+
optionVersion: ' -v, --version 显示版本信息',
|
|
29
|
+
optionLang: ' -l, --lang 设置语言 (zh 或 en)',
|
|
30
|
+
optionRouter: ' -r, --router 选择路由框架(默认 tanstack;react-router 为兼容模式)',
|
|
31
|
+
optionBff: ' --bff 保持启用 Effect BFF(UltraModern 应用默认值)',
|
|
32
|
+
optionBffRuntime: ' --bff-runtime 选择 BFF 运行时(hono 或 effect)',
|
|
33
|
+
optionTailwind: ' --no-tailwind 禁用默认 Tailwind CSS v4 模板',
|
|
34
|
+
optionWorkspace: ' --workspace 对 @modern-js 依赖使用 workspace 协议(用于本地 monorepo 联调)',
|
|
35
|
+
optionUltramodernWorkspace: ' --ultramodern-workspace 生成 UltraModern SuperApp 工作区(默认创建完整 UltraModern 单应用)',
|
|
36
|
+
optionUltramodernPackageSource: ' --ultramodern-package-source 选择 UltraModern 依赖来源(workspace 或 install;BleedingDev 默认使用 install alias)',
|
|
37
|
+
optionUltramodernPackageScope: ' --ultramodern-package-scope npm alias 安装使用的发布 scope(例如 bleedingdev)',
|
|
38
|
+
optionUltramodernPackageNamePrefix: ' --ultramodern-package-name-prefix npm alias 包名前缀(默认:modern-js-)',
|
|
39
|
+
optionVertical: ' --vertical 修改当前已有的 UltraModern 工作区,并接入名为 <项目名称> 的 MicroVertical',
|
|
40
|
+
optionSub: ' -s, --sub 标记为子项目(monorepo 中的子包)',
|
|
41
|
+
examples: '💡 示例:',
|
|
42
|
+
example1: ' pnpm dlx @bleedingdev/modern-js-create my-app',
|
|
43
|
+
example2: ' pnpm dlx @bleedingdev/modern-js-create my-app --lang zh',
|
|
44
|
+
example3: ' pnpm dlx @bleedingdev/modern-js-create my-app --sub',
|
|
45
|
+
example4: ' pnpm dlx @bleedingdev/modern-js-create --help',
|
|
46
|
+
example5: ' pnpm dlx @bleedingdev/modern-js-create .',
|
|
47
|
+
example6: ' pnpm dlx @bleedingdev/modern-js-create my-app --router react-router --no-tailwind',
|
|
48
|
+
example7: ' pnpm dlx @bleedingdev/modern-js-create my-app --bff-runtime hono',
|
|
49
|
+
example8: ' pnpm dlx @bleedingdev/modern-js-create my-app --workspace',
|
|
50
|
+
example9: ' pnpm dlx @bleedingdev/modern-js-create my-super-app --ultramodern-workspace',
|
|
51
|
+
example10: ' pnpm dlx @bleedingdev/modern-js-create my-app --no-tailwind',
|
|
52
|
+
example11: ' pnpm dlx @bleedingdev/modern-js-create my-app --router react-router # 兼容模式',
|
|
53
|
+
example12: ' pnpm dlx @bleedingdev/modern-js-create catalog --vertical',
|
|
54
|
+
moreInfo: '📚 更多信息: https://modernjs.dev'
|
|
55
|
+
},
|
|
56
|
+
version: {
|
|
57
|
+
message: '@bleedingdev/modern-js-create 版本: {version}'
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
export { ZH_LOCALE };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
const WORKSPACE_PACKAGE_VERSION = 'workspace:*';
|
|
3
|
+
const BLEEDINGDEV_CREATE_PACKAGE = '@bleedingdev/modern-js-create';
|
|
4
|
+
const BLEEDINGDEV_PACKAGE_SCOPE = 'bleedingdev';
|
|
5
|
+
const BLEEDINGDEV_PACKAGE_NAME_PREFIX = 'modern-js-';
|
|
6
|
+
const BLEEDINGDEV_FRAMEWORK_VERSION_ENV = 'MODERN_CREATE_ULTRAMODERN_FRAMEWORK_VERSION';
|
|
7
|
+
const ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES = [
|
|
8
|
+
'@modern-js/create',
|
|
9
|
+
'@modern-js/code-tools',
|
|
10
|
+
'@modern-js/runtime',
|
|
11
|
+
'@modern-js/app-tools',
|
|
12
|
+
'@modern-js/tsconfig',
|
|
13
|
+
'@modern-js/plugin-i18n',
|
|
14
|
+
'@modern-js/plugin-tanstack',
|
|
15
|
+
'@modern-js/plugin-bff',
|
|
16
|
+
'@modern-js/adapter-rstest'
|
|
17
|
+
];
|
|
18
|
+
const ULTRAMODERN_WORKSPACE_MODERN_PACKAGES = [
|
|
19
|
+
'@modern-js/create',
|
|
20
|
+
'@modern-js/code-tools',
|
|
21
|
+
'@modern-js/app-tools',
|
|
22
|
+
'@modern-js/plugin-bff',
|
|
23
|
+
'@modern-js/plugin-i18n',
|
|
24
|
+
'@modern-js/plugin-tanstack',
|
|
25
|
+
'@modern-js/runtime'
|
|
26
|
+
];
|
|
27
|
+
function modernPackageVersion(packageSource) {
|
|
28
|
+
return 'install' === packageSource.strategy ? packageSource.modernPackageVersion : WORKSPACE_PACKAGE_VERSION;
|
|
29
|
+
}
|
|
30
|
+
function modernAliasPackageName(packageName, packageSource) {
|
|
31
|
+
if (!packageSource.aliasScope) return packageName;
|
|
32
|
+
const scope = packageSource.aliasScope.replace(/^@/, '');
|
|
33
|
+
const unscopedName = packageName.split('/').at(-1);
|
|
34
|
+
return `@${scope}/${packageSource.aliasPackageNamePrefix ?? ''}${unscopedName}`;
|
|
35
|
+
}
|
|
36
|
+
function modernPackageSpecifier(packageName, packageSource) {
|
|
37
|
+
if ('install' !== packageSource.strategy) return WORKSPACE_PACKAGE_VERSION;
|
|
38
|
+
if (!packageSource.aliasScope) return packageSource.modernPackageVersion;
|
|
39
|
+
return `npm:${modernAliasPackageName(packageName, packageSource)}@${packageSource.modernPackageVersion}`;
|
|
40
|
+
}
|
|
41
|
+
function modernPackageAliases(packageNames, packageSource) {
|
|
42
|
+
if (!packageSource.aliasScope) return;
|
|
43
|
+
return Object.fromEntries(packageNames.map((packageName)=>[
|
|
44
|
+
packageName,
|
|
45
|
+
modernAliasPackageName(packageName, packageSource)
|
|
46
|
+
]));
|
|
47
|
+
}
|
|
48
|
+
function createModernPackagesMetadata(packageNames, packageSource, options = {}) {
|
|
49
|
+
const includeAliases = options.includeAliases ?? Boolean(packageSource.aliasScope);
|
|
50
|
+
const aliases = includeAliases ? modernPackageAliases(packageNames, packageSource) : void 0;
|
|
51
|
+
return {
|
|
52
|
+
packages: [
|
|
53
|
+
...packageNames
|
|
54
|
+
],
|
|
55
|
+
specifier: modernPackageVersion(packageSource),
|
|
56
|
+
...packageSource.registry ? {
|
|
57
|
+
registry: packageSource.registry
|
|
58
|
+
} : {},
|
|
59
|
+
...aliases ? {
|
|
60
|
+
aliases
|
|
61
|
+
} : {}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, createModernPackagesMetadata, modernAliasPackageName, modernPackageAliases, modernPackageSpecifier, modernPackageVersion };
|