@bleedingdev/modern-js-create 3.2.0-ultramodern.99 → 3.4.0-ultramodern.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.
Files changed (179) hide show
  1. package/README.md +281 -106
  2. package/bin/run.js +1 -0
  3. package/dist/cjs/create-package-root.cjs +63 -0
  4. package/dist/cjs/index.cjs +658 -0
  5. package/dist/cjs/locale/en.cjs +101 -0
  6. package/dist/cjs/locale/index.cjs +50 -0
  7. package/dist/cjs/locale/zh.cjs +101 -0
  8. package/dist/cjs/ultramodern-package-source.cjs +135 -0
  9. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +603 -0
  10. package/dist/cjs/ultramodern-workspace/app-files.cjs +223 -0
  11. package/dist/cjs/ultramodern-workspace/codesmith.cjs +134 -0
  12. package/dist/cjs/ultramodern-workspace/contracts.cjs +837 -0
  13. package/dist/cjs/ultramodern-workspace/demo-components.cjs +422 -0
  14. package/dist/cjs/ultramodern-workspace/descriptors.cjs +222 -0
  15. package/dist/cjs/ultramodern-workspace/effect-api.cjs +952 -0
  16. package/dist/cjs/ultramodern-workspace/fs-io.cjs +191 -0
  17. package/dist/cjs/ultramodern-workspace/generation-result.cjs +158 -0
  18. package/dist/cjs/ultramodern-workspace/index.cjs +51 -0
  19. package/dist/cjs/ultramodern-workspace/locales.cjs +173 -0
  20. package/dist/cjs/ultramodern-workspace/module-federation.cjs +487 -0
  21. package/dist/cjs/ultramodern-workspace/naming.cjs +161 -0
  22. package/dist/cjs/ultramodern-workspace/overlays.cjs +120 -0
  23. package/dist/cjs/ultramodern-workspace/package-json.cjs +406 -0
  24. package/dist/cjs/ultramodern-workspace/package-source.cjs +59 -0
  25. package/dist/cjs/ultramodern-workspace/policy.cjs +248 -0
  26. package/dist/cjs/ultramodern-workspace/public-api.cjs +47 -0
  27. package/dist/cjs/ultramodern-workspace/public-surface.cjs +268 -0
  28. package/dist/cjs/ultramodern-workspace/routes.cjs +375 -0
  29. package/dist/cjs/ultramodern-workspace/types.cjs +61 -0
  30. package/dist/cjs/ultramodern-workspace/versions.cjs +161 -0
  31. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +154 -0
  32. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +197 -0
  33. package/dist/esm/create-package-root.js +14 -0
  34. package/dist/esm/index.js +621 -0
  35. package/dist/esm/locale/en.js +63 -0
  36. package/dist/esm/locale/index.js +9 -0
  37. package/dist/esm/locale/zh.js +63 -0
  38. package/dist/esm/ultramodern-package-source.js +63 -0
  39. package/dist/esm/ultramodern-workspace/add-vertical.js +511 -0
  40. package/dist/esm/ultramodern-workspace/app-files.js +149 -0
  41. package/dist/esm/ultramodern-workspace/codesmith.js +86 -0
  42. package/dist/esm/ultramodern-workspace/contracts.js +742 -0
  43. package/dist/esm/ultramodern-workspace/demo-components.js +363 -0
  44. package/dist/esm/ultramodern-workspace/descriptors.js +133 -0
  45. package/dist/esm/ultramodern-workspace/effect-api.js +854 -0
  46. package/dist/esm/ultramodern-workspace/fs-io.js +90 -0
  47. package/dist/esm/ultramodern-workspace/generation-result.js +102 -0
  48. package/dist/esm/ultramodern-workspace/index.js +3 -0
  49. package/dist/esm/ultramodern-workspace/locales.js +122 -0
  50. package/dist/esm/ultramodern-workspace/module-federation.js +415 -0
  51. package/dist/esm/ultramodern-workspace/naming.js +71 -0
  52. package/dist/esm/ultramodern-workspace/overlays.js +79 -0
  53. package/dist/esm/ultramodern-workspace/package-json.js +338 -0
  54. package/dist/esm/ultramodern-workspace/package-source.js +21 -0
  55. package/dist/esm/ultramodern-workspace/policy.js +183 -0
  56. package/dist/esm/ultramodern-workspace/public-api.js +2 -0
  57. package/dist/esm/ultramodern-workspace/public-surface.js +183 -0
  58. package/dist/esm/ultramodern-workspace/routes.js +280 -0
  59. package/dist/esm/ultramodern-workspace/types.js +16 -0
  60. package/dist/esm/ultramodern-workspace/versions.js +36 -0
  61. package/dist/esm/ultramodern-workspace/workspace-scripts.js +92 -0
  62. package/dist/esm/ultramodern-workspace/write-workspace.js +143 -0
  63. package/dist/esm-node/create-package-root.js +15 -0
  64. package/dist/esm-node/index.js +622 -0
  65. package/dist/esm-node/locale/en.js +64 -0
  66. package/dist/esm-node/locale/index.js +10 -0
  67. package/dist/esm-node/locale/zh.js +64 -0
  68. package/dist/esm-node/ultramodern-package-source.js +64 -0
  69. package/dist/esm-node/ultramodern-workspace/add-vertical.js +512 -0
  70. package/dist/esm-node/ultramodern-workspace/app-files.js +150 -0
  71. package/dist/esm-node/ultramodern-workspace/codesmith.js +87 -0
  72. package/dist/esm-node/ultramodern-workspace/contracts.js +743 -0
  73. package/dist/esm-node/ultramodern-workspace/demo-components.js +364 -0
  74. package/dist/esm-node/ultramodern-workspace/descriptors.js +134 -0
  75. package/dist/esm-node/ultramodern-workspace/effect-api.js +855 -0
  76. package/dist/esm-node/ultramodern-workspace/fs-io.js +91 -0
  77. package/dist/esm-node/ultramodern-workspace/generation-result.js +103 -0
  78. package/dist/esm-node/ultramodern-workspace/index.js +4 -0
  79. package/dist/esm-node/ultramodern-workspace/locales.js +123 -0
  80. package/dist/esm-node/ultramodern-workspace/module-federation.js +416 -0
  81. package/dist/esm-node/ultramodern-workspace/naming.js +72 -0
  82. package/dist/esm-node/ultramodern-workspace/overlays.js +80 -0
  83. package/dist/esm-node/ultramodern-workspace/package-json.js +339 -0
  84. package/dist/esm-node/ultramodern-workspace/package-source.js +22 -0
  85. package/dist/esm-node/ultramodern-workspace/policy.js +184 -0
  86. package/dist/esm-node/ultramodern-workspace/public-api.js +3 -0
  87. package/dist/esm-node/ultramodern-workspace/public-surface.js +184 -0
  88. package/dist/esm-node/ultramodern-workspace/routes.js +281 -0
  89. package/dist/esm-node/ultramodern-workspace/types.js +17 -0
  90. package/dist/esm-node/ultramodern-workspace/versions.js +37 -0
  91. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +93 -0
  92. package/dist/esm-node/ultramodern-workspace/write-workspace.js +144 -0
  93. package/dist/types/create-package-root.d.ts +1 -0
  94. package/dist/types/locale/en.d.ts +12 -8
  95. package/dist/types/locale/index.d.ts +125 -2
  96. package/dist/types/locale/zh.d.ts +12 -8
  97. package/dist/types/ultramodern-package-source.d.ts +28 -0
  98. package/dist/types/ultramodern-workspace/add-vertical.d.ts +36 -0
  99. package/dist/types/ultramodern-workspace/app-files.d.ts +14 -0
  100. package/dist/types/ultramodern-workspace/codesmith.d.ts +53 -0
  101. package/dist/types/ultramodern-workspace/contracts.d.ts +21 -0
  102. package/dist/types/ultramodern-workspace/demo-components.d.ts +9 -0
  103. package/dist/types/ultramodern-workspace/descriptors.d.ts +39 -0
  104. package/dist/types/ultramodern-workspace/effect-api.d.ts +73 -0
  105. package/dist/types/ultramodern-workspace/fs-io.d.ts +18 -0
  106. package/dist/types/ultramodern-workspace/generation-result.d.ts +14 -0
  107. package/dist/types/ultramodern-workspace/index.d.ts +4 -0
  108. package/dist/types/ultramodern-workspace/locales.d.ts +183 -0
  109. package/dist/types/ultramodern-workspace/module-federation.d.ts +16 -0
  110. package/dist/types/ultramodern-workspace/naming.d.ts +16 -0
  111. package/dist/types/ultramodern-workspace/overlays.d.ts +6 -0
  112. package/dist/types/ultramodern-workspace/package-json.d.ts +12 -0
  113. package/dist/types/ultramodern-workspace/package-source.d.ts +2 -0
  114. package/dist/types/ultramodern-workspace/policy.d.ts +60 -0
  115. package/dist/types/ultramodern-workspace/public-api.d.ts +3 -0
  116. package/dist/types/ultramodern-workspace/public-surface.d.ts +37 -0
  117. package/dist/types/ultramodern-workspace/routes.d.ts +25 -0
  118. package/dist/types/ultramodern-workspace/types.d.ts +197 -0
  119. package/dist/types/ultramodern-workspace/versions.d.ts +40 -0
  120. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +10 -0
  121. package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -0
  122. package/package.json +58 -15
  123. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +23 -10
  124. package/template-workspace/.mise.toml.handlebars +1 -0
  125. package/template-workspace/{AGENTS.md → AGENTS.md.handlebars} +20 -9
  126. package/template-workspace/README.md.handlebars +85 -14
  127. package/template-workspace/lefthook.yml +18 -4
  128. package/template-workspace/pnpm-workspace.yaml.handlebars +45 -0
  129. package/template-workspace/scripts/bootstrap-agent-skills.mjs +69 -75
  130. package/template-workspace/scripts/setup-agent-reference-repos.mjs +8 -6
  131. package/templates/app/shell-frame.tsx +49 -0
  132. package/templates/app/ultramodern-route-head.tsx.handlebars +142 -0
  133. package/templates/packages/shared-contracts-index.ts +466 -0
  134. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +69 -0
  135. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mjs +9 -0
  136. package/templates/workspace-scripts/generate-public-surface-assets.mjs +529 -0
  137. package/templates/workspace-scripts/proof-cloudflare-version.mjs +125 -0
  138. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +851 -0
  139. package/templates/workspace-scripts/ultramodern-performance-readiness.config.mjs +7 -0
  140. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +223 -0
  141. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +986 -0
  142. package/dist/index.js +0 -6625
  143. package/dist/types/ultramodern-workspace.d.ts +0 -31
  144. package/template/.agents/skills-lock.json +0 -34
  145. package/template/.browserslistrc +0 -4
  146. package/template/.codex/hooks.json +0 -16
  147. package/template/.github/renovate.json +0 -53
  148. package/template/.github/workflows/ultramodern-gates.yml.handlebars +0 -54
  149. package/template/.gitignore.handlebars +0 -30
  150. package/template/.mise.toml.handlebars +0 -2
  151. package/template/.nvmrc +0 -2
  152. package/template/AGENTS.md +0 -23
  153. package/template/README.md +0 -105
  154. package/template/api/effect/index.ts.handlebars +0 -34
  155. package/template/api/lambda/hello.ts.handlebars +0 -6
  156. package/template/config/public/locales/cs/translation.json +0 -39
  157. package/template/config/public/locales/en/translation.json +0 -39
  158. package/template/lefthook.yml +0 -10
  159. package/template/modern.config.ts.handlebars +0 -71
  160. package/template/oxfmt.config.ts +0 -15
  161. package/template/oxlint.config.ts +0 -19
  162. package/template/package.json.handlebars +0 -66
  163. package/template/pnpm-workspace.yaml +0 -29
  164. package/template/postcss.config.mjs.handlebars +0 -6
  165. package/template/rstest.config.mts +0 -5
  166. package/template/scripts/bootstrap-agent-skills.mjs +0 -228
  167. package/template/scripts/check-i18n-strings.mjs +0 -94
  168. package/template/scripts/validate-ultramodern.mjs.handlebars +0 -538
  169. package/template/shared/effect/api.ts.handlebars +0 -17
  170. package/template/src/modern-app-env.d.ts +0 -3
  171. package/template/src/modern.runtime.ts.handlebars +0 -23
  172. package/template/src/routes/[lang]/page.tsx.handlebars +0 -211
  173. package/template/src/routes/index.css.handlebars +0 -129
  174. package/template/src/routes/layout.tsx.handlebars +0 -10
  175. package/template/tailwind.config.ts.handlebars +0 -10
  176. package/template/tests/tsconfig.json +0 -7
  177. package/template/tests/ultramodern.contract.test.ts.handlebars +0 -78
  178. package/template/tsconfig.json +0 -120
  179. package/template-workspace/pnpm-workspace.yaml +0 -35
@@ -1,211 +0,0 @@
1
- import { Helmet } from '@modern-js/runtime/head';
2
- import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
3
- import { useLocation } from '{{routerRuntimeImport}}';
4
- {{#if useEffectBff}}import effectBff from '@api/effect/index';
5
- import { Effect } from '@modern-js/plugin-bff/effect-client';
6
- import { useEffect, useState } from 'react';
7
- {{/if}}
8
- import { useTranslation } from 'react-i18next';
9
-
10
- {{#if useEffectBff}}type GreetingResponse = Awaited<ReturnType<typeof effectBff.client.greetings.hello>>;
11
-
12
- {{/if}}
13
- const fallbackLanguage = 'en';
14
- const supportedLanguages = ['en', 'cs'] as const;
15
- type SupportedLanguage = (typeof supportedLanguages)[number];
16
-
17
- const isSupportedLanguage = (value: string): value is SupportedLanguage =>
18
- supportedLanguages.includes(value as SupportedLanguage);
19
-
20
- const stripLanguagePrefix = (pathname: string) => {
21
- const segments = pathname.split('/').filter(Boolean);
22
- if (segments.length > 0 && isSupportedLanguage(segments[0] ?? '')) {
23
- segments.shift();
24
- }
25
- return `/${segments.join('/')}`;
26
- };
27
-
28
- const localizedPath = (pathname: string, language: SupportedLanguage) => {
29
- const pathWithoutLanguage = stripLanguagePrefix(pathname);
30
- return pathWithoutLanguage === '/' ? `/${language}` : `/${language}${pathWithoutLanguage}`;
31
- };
32
-
33
- const absoluteUrl = (pathname: string) => {
34
- const origin = ULTRAMODERN_SITE_URL.replace(/\/+$/u, '');
35
- return `${origin}${pathname}`;
36
- };
37
-
38
- const locationSuffix = (location: { hash?: unknown; search?: unknown; searchStr?: unknown }) => {
39
- const { hash, search, searchStr } = location;
40
- let locationSearch = '';
41
- if (typeof searchStr === 'string') {
42
- locationSearch = searchStr;
43
- } else if (typeof search === 'string') {
44
- locationSearch = search;
45
- }
46
- const locationHash = typeof hash === 'string' ? hash : '';
47
- return `${locationSearch}${locationHash}`;
48
- };
49
-
50
- const Index = () => {
51
- const { t } = useTranslation();
52
- const { language } = useModernI18n();
53
- const location = useLocation();
54
- const currentLanguage = isSupportedLanguage(language) ? language : fallbackLanguage;
55
- const canonicalPath = localizedPath(location.pathname, currentLanguage);
56
- const suffix = locationSuffix(location);
57
- const languageOptions = supportedLanguages.map((code) => ({
58
- code,
59
- href: `${localizedPath(location.pathname, code)}${suffix}`,
60
- label: t(`home.language.${code}`),
61
- }));
62
- {{#if useEffectBff}} const [effectMessage, setEffectMessage] = useState('loading...');
63
-
64
- useEffect(() => {
65
- let mounted = true;
66
- Effect.runFork(
67
- Effect.promise(() => effectBff.client.greetings.hello({})).pipe(
68
- Effect.tap((data: GreetingResponse) =>
69
- Effect.sync(() => {
70
- if (mounted) {
71
- setEffectMessage(data.message);
72
- }
73
- }),
74
- ),
75
- ),
76
- );
77
- return () => {
78
- mounted = false;
79
- };
80
- }, []);
81
- {{/if}}
82
- return (
83
- <div className="container-box">
84
- <Helmet>
85
- <link
86
- rel="icon"
87
- type="image/x-icon"
88
- href="https://lf3-static.bytednsdoc.com/obj/eden-cn/uhbfnupenuhf/favicon.ico"
89
- />
90
- <link rel="canonical" href={absoluteUrl(canonicalPath)} />
91
- {supportedLanguages.map((code) => (
92
- <link
93
- href={absoluteUrl(localizedPath(location.pathname, code))}
94
- hrefLang={code}
95
- key={code}
96
- rel="alternate"
97
- />
98
- ))}
99
- <link
100
- href={absoluteUrl(localizedPath(location.pathname, fallbackLanguage))}
101
- hrefLang="x-default"
102
- rel="alternate"
103
- />
104
- </Helmet>
105
- <main>
106
- <nav className="language-switcher" aria-label={t('home.language.switcher')}>
107
- {languageOptions.map((option) => (
108
- <a
109
- aria-current={currentLanguage === option.code ? 'page' : undefined}
110
- href={option.href}
111
- key={option.code}
112
- >
113
- {option.label}
114
- </a>
115
- ))}
116
- </nav>
117
- <div className="title">
118
- {t('home.title')}
119
- <img
120
- alt={t('home.logoAlt')}
121
- className="logo"
122
- src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/modern-js-logo.svg"
123
- />
124
- <p className="name">{t('home.name')}</p>
125
- </div>
126
- <p className="description{{#if enableTailwind}} text-emerald-700 font-semibold{{/if}}">
127
- {t('home.description.intro')}{' '}
128
- <code className="code">presetUltramodern(...)</code>{' '}
129
- {t('home.description.afterPreset')}{' '}
130
- <code className="code">modern.config.ts</code>{' '}
131
- {t('home.description.afterConfig')}{' '}
132
- <code className="code">pnpm run ultramodern:check</code>{' '}
133
- {t('home.description.end')}
134
- </p>
135
- {{#if useEffectBff}}
136
- <p className="description effect-message{{#if enableTailwind}} text-emerald-700 font-semibold{{/if}}">
137
- {t('home.bff.response')} <code className="code">{effectMessage}</code>
138
- </p>
139
- {{/if}}
140
- <div className="grid">
141
- <a
142
- href="https://bleedingdev.github.io/ultramodern.js/guides/get-started/ultramodern.html"
143
- target="_blank"
144
- rel="noopener noreferrer"
145
- className="card"
146
- >
147
- <h2>
148
- {t('home.cards.guide.title')}
149
- <img
150
- alt=""
151
- className="arrow-right"
152
- src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg"
153
- />
154
- </h2>
155
- <p>{t('home.cards.guide.body')}</p>
156
- </a>
157
- <a
158
- href="https://bleedingdev.github.io/ultramodern.js/configure/app/usage.html"
159
- target="_blank"
160
- className="card"
161
- rel="noreferrer"
162
- >
163
- <h2>
164
- {t('home.cards.config.title')}
165
- <img
166
- alt=""
167
- className="arrow-right"
168
- src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg"
169
- />
170
- </h2>
171
- <p>{t('home.cards.config.body')}</p>
172
- </a>
173
- <a
174
- href="https://github.com/BleedingDev/ultramodern.js/blob/main-ultramodern/packages/toolkit/create/template/.github/workflows/ultramodern-gates.yml.handlebars"
175
- target="_blank"
176
- className="card"
177
- rel="noreferrer"
178
- >
179
- <h2>
180
- {t('home.cards.gates.title')}
181
- <img
182
- alt=""
183
- className="arrow-right"
184
- src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg"
185
- />
186
- </h2>
187
- <p>{t('home.cards.gates.body')}</p>
188
- </a>
189
- <a
190
- href="https://bleedingdev.github.io/ultramodern.js/configure/app/bff/effect.html"
191
- target="_blank"
192
- rel="noopener noreferrer"
193
- className="card"
194
- >
195
- <h2>
196
- {t('home.cards.bff.title')}
197
- <img
198
- alt=""
199
- className="arrow-right"
200
- src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/arrow-right.svg"
201
- />
202
- </h2>
203
- <p>{t('home.cards.bff.body')}</p>
204
- </a>
205
- </div>
206
- </main>
207
- </div>
208
- );
209
- };
210
-
211
- export default Index;
@@ -1,129 +0,0 @@
1
- {{#if enableTailwind}}@import 'tailwindcss';
2
-
3
- {{/if}}html,
4
- body {
5
- padding: 0;
6
- margin: 0;
7
- font-family:
8
- PingFang SC,
9
- Hiragino Sans GB,
10
- Microsoft YaHei,
11
- Arial,
12
- sans-serif;
13
- background: linear-gradient(to bottom, transparent, #fff) #eceeef;
14
- }
15
-
16
- p {
17
- margin: 0;
18
- }
19
-
20
- * {
21
- -webkit-font-smoothing: antialiased;
22
- -moz-osx-font-smoothing: grayscale;
23
- box-sizing: border-box;
24
- }
25
-
26
- .container-box {
27
- min-height: 100vh;
28
- max-width: 100%;
29
- display: flex;
30
- flex-direction: column;
31
- justify-content: center;
32
- align-items: center;
33
- padding-top: 10px;
34
- }
35
-
36
- main {
37
- flex: 1;
38
- display: flex;
39
- flex-direction: column;
40
- justify-content: center;
41
- align-items: center;
42
- }
43
-
44
- .title {
45
- display: flex;
46
- margin: 4rem 0 4rem;
47
- align-items: center;
48
- font-size: 4rem;
49
- font-weight: 600;
50
- }
51
-
52
- .logo {
53
- width: 6rem;
54
- margin: 7px 0 0 1rem;
55
- }
56
-
57
- .name {
58
- color: #4ecaff;
59
- }
60
-
61
- .description {
62
- text-align: center;
63
- line-height: 1.5;
64
- font-size: 1.3rem;
65
- color: #1b3a42;
66
- margin-bottom: 5rem;
67
- }
68
-
69
- .code {
70
- background: #fafafa;
71
- border-radius: 12px;
72
- padding: 0.6rem 0.9rem;
73
- font-size: 1.05rem;
74
- font-family:
75
- Menlo,
76
- Monaco,
77
- Lucida Console,
78
- Liberation Mono,
79
- DejaVu Sans Mono,
80
- Bitstream Vera Sans Mono,
81
- Courier New,
82
- monospace;
83
- }
84
-
85
- .container-box .grid {
86
- display: flex;
87
- align-items: center;
88
- justify-content: center;
89
- width: 1100px;
90
- margin-top: 3rem;
91
- }
92
-
93
- .card {
94
- padding: 1.5rem;
95
- display: flex;
96
- flex-direction: column;
97
- justify-content: center;
98
- height: 100px;
99
- color: inherit;
100
- text-decoration: none;
101
- transition: 0.15s ease;
102
- width: 45%;
103
- }
104
-
105
- .card:hover,
106
- .card:focus {
107
- transform: scale(1.05);
108
- }
109
-
110
- .card h2 {
111
- display: flex;
112
- align-items: center;
113
- font-size: 1.5rem;
114
- margin: 0;
115
- padding: 0;
116
- }
117
-
118
- .card p {
119
- opacity: 0.6;
120
- font-size: 0.9rem;
121
- line-height: 1.5;
122
- margin-top: 1rem;
123
- }
124
-
125
- .arrow-right {
126
- width: 1.3rem;
127
- margin-left: 0.5rem;
128
- margin-top: 3px;
129
- }
@@ -1,10 +0,0 @@
1
- import { Outlet } from '{{routerRuntimeImport}}';
2
- import './index.css';
3
-
4
- export default function Layout() {
5
- return (
6
- <div>
7
- <Outlet />
8
- </div>
9
- );
10
- }
@@ -1,10 +0,0 @@
1
- {{#if enableTailwind}}import type { Config } from 'tailwindcss';
2
-
3
- export default {
4
- content: ['./src/**/*.{js,ts,jsx,tsx}'],
5
- plugins: [],
6
- theme: {
7
- extend: {},
8
- },
9
- } satisfies Config;
10
- {{/if}}
@@ -1,7 +0,0 @@
1
- {
2
- "extends": "../tsconfig.json",
3
- "compilerOptions": {
4
- "types": ["@rstest/core/globals"]
5
- },
6
- "include": ["./"]
7
- }
@@ -1,78 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { describe, expect, test } from '@rstest/core';
4
-
5
- const root = process.cwd();
6
- const readText = (relativePath: string) =>
7
- fs.readFileSync(path.join(root, relativePath), 'utf-8');
8
- const readJson = <T>(relativePath: string): T =>
9
- JSON.parse(readText(relativePath)) as T;
10
-
11
- describe('generated UltraModern contract', () => {
12
- test('keeps localized route metadata and Rstest wiring', () => {
13
- expect(fs.existsSync(path.join(root, 'src/routes/[lang]/page.tsx'))).toBe(
14
- true,
15
- );
16
- expect(fs.existsSync(path.join(root, 'src/routes/page.tsx'))).toBe(false);
17
- expect(fs.existsSync(path.join(root, 'src/routes/layout.tsx'))).toBe(true);
18
- {{#if enableTailwind}}
19
- expect(fs.existsSync(path.join(root, 'postcss.config.mjs'))).toBe(true);
20
- expect(fs.existsSync(path.join(root, 'tailwind.config.ts'))).toBe(true);
21
- {{/if}}
22
- {{#unless enableTailwind}}
23
- expect(fs.existsSync(path.join(root, 'postcss.config.mjs'))).toBe(false);
24
- expect(fs.existsSync(path.join(root, 'tailwind.config.ts'))).toBe(false);
25
- {{/unless}}
26
- });
27
-
28
- test('retains package-source metadata for generated Modern.js packages', () => {
29
- const packageJson = readJson<{
30
- dependencies?: Record<string, string>;
31
- devDependencies?: Record<string, string>;
32
- modernjs?: {
33
- packageSource?: {
34
- config?: string;
35
- };
36
- preset?: string;
37
- };
38
- }>('package.json');
39
- const packageSource = readJson<{
40
- modernPackages?: {
41
- packages?: string[];
42
- specifier?: string;
43
- };
44
- strategy?: string;
45
- }>('.modernjs/ultramodern-package-source.json');
46
-
47
- expect(packageJson.modernjs?.preset).toBe('presetUltramodern');
48
- expect(packageJson.modernjs?.packageSource?.config).toBe(
49
- './.modernjs/ultramodern-package-source.json',
50
- );
51
- expect(packageSource.strategy).toMatch(/^(workspace|install)$/u);
52
- expect(packageSource.modernPackages?.packages).toContain(
53
- '@modern-js/runtime',
54
- );
55
- expect(packageSource.modernPackages?.packages).toContain(
56
- '@modern-js/app-tools',
57
- );
58
- expect(packageSource.modernPackages?.packages).toContain(
59
- '@modern-js/adapter-rstest',
60
- );
61
- expect(packageSource.modernPackages?.specifier).toBeTruthy();
62
- expect(
63
- packageJson.devDependencies?.['@modern-js/adapter-rstest'],
64
- ).toBeTruthy();
65
- {{#if enableTailwind}}
66
- expect(packageJson.devDependencies?.tailwindcss).toBe('^4.3.0');
67
- expect(packageJson.devDependencies?.['@tailwindcss/postcss']).toBe(
68
- '^4.3.0',
69
- );
70
- {{/if}}
71
- {{#unless enableTailwind}}
72
- expect(packageJson.devDependencies?.tailwindcss).toBeUndefined();
73
- expect(
74
- packageJson.devDependencies?.['@tailwindcss/postcss'],
75
- ).toBeUndefined();
76
- {{/unless}}
77
- });
78
- });
@@ -1,120 +0,0 @@
1
- {
2
- "extends": "@modern-js/tsconfig/base",
3
- "compilerOptions": {
4
- "declaration": false,
5
- "jsx": "preserve",
6
- "target": "ESNext",
7
- "lib": ["ESNext", "DOM", "DOM.Iterable"],
8
- "module": "preserve",
9
- "moduleResolution": "Bundler",
10
- "moduleDetection": "force",
11
- "isolatedModules": true,
12
- "verbatimModuleSyntax": true,
13
- "noEmit": true,
14
- "allowJs": true,
15
- "resolveJsonModule": true,
16
- "esModuleInterop": true,
17
- "skipLibCheck": true,
18
- "strict": true,
19
- "noUncheckedIndexedAccess": true,
20
- "exactOptionalPropertyTypes": true,
21
- "noImplicitOverride": true,
22
- "noFallthroughCasesInSwitch": true,
23
- "noPropertyAccessFromIndexSignature": true,
24
- "noImplicitReturns": true,
25
- "paths": {
26
- "@/*": ["./src/*"],
27
- "@api/*": ["./api/*"],
28
- "@shared/*": ["./shared/*"]
29
- },
30
- "rootDir": ".",
31
- "plugins": [
32
- {
33
- "name": "@effect/language-service",
34
- "diagnostics": true,
35
- "includeSuggestionsInTsc": true,
36
- "ignoreEffectSuggestionsInTscExitCode": false,
37
- "ignoreEffectWarningsInTscExitCode": false,
38
- "ignoreEffectErrorsInTscExitCode": false,
39
- "skipDisabledOptimization": true,
40
- "diagnosticSeverity": {
41
- "anyUnknownInErrorContext": "error",
42
- "classSelfMismatch": "error",
43
- "duplicatePackage": "error",
44
- "effectFnImplicitAny": "error",
45
- "floatingEffect": "error",
46
- "genericEffectServices": "error",
47
- "missingEffectContext": "error",
48
- "missingEffectError": "error",
49
- "missingLayerContext": "error",
50
- "missingReturnYieldStar": "error",
51
- "missingStarInYieldEffectGen": "error",
52
- "nonObjectEffectServiceType": "error",
53
- "outdatedApi": "error",
54
- "overriddenSchemaConstructor": "error",
55
- "catchUnfailableEffect": "error",
56
- "effectFnIife": "error",
57
- "effectGenUsesAdapter": "error",
58
- "effectInFailure": "error",
59
- "effectInVoidSuccess": "error",
60
- "globalErrorInEffectCatch": "error",
61
- "globalErrorInEffectFailure": "error",
62
- "layerMergeAllWithDependencies": "error",
63
- "lazyPromiseInEffectSync": "error",
64
- "leakingRequirements": "error",
65
- "multipleEffectProvide": "error",
66
- "returnEffectInGen": "error",
67
- "runEffectInsideEffect": "error",
68
- "schemaSyncInEffect": "error",
69
- "scopeInLayerEffect": "error",
70
- "strictEffectProvide": "error",
71
- "tryCatchInEffectGen": "error",
72
- "unknownInEffectCatch": "error",
73
- "asyncFunction": "error",
74
- "cryptoRandomUUID": "error",
75
- "cryptoRandomUUIDInEffect": "error",
76
- "extendsNativeError": "error",
77
- "globalConsole": "error",
78
- "globalConsoleInEffect": "error",
79
- "globalDate": "error",
80
- "globalDateInEffect": "error",
81
- "globalFetch": "error",
82
- "globalFetchInEffect": "error",
83
- "globalRandom": "error",
84
- "globalRandomInEffect": "error",
85
- "globalTimers": "error",
86
- "globalTimersInEffect": "error",
87
- "instanceOfSchema": "error",
88
- "newPromise": "error",
89
- "nodeBuiltinImport": "error",
90
- "preferSchemaOverJson": "error",
91
- "processEnv": "error",
92
- "processEnvInEffect": "error",
93
- "unsafeEffectTypeAssertion": "error",
94
- "catchAllToMapError": "error",
95
- "deterministicKeys": "error",
96
- "effectDoNotation": "error",
97
- "effectFnOpportunity": "error",
98
- "effectMapFlatten": "error",
99
- "effectMapVoid": "error",
100
- "effectSucceedWithVoid": "error",
101
- "missedPipeableOpportunity": "error",
102
- "missingEffectServiceDependency": "error",
103
- "nestedEffectGenYield": "error",
104
- "redundantSchemaTagIdentifier": "error",
105
- "schemaStructWithTag": "error",
106
- "schemaUnionOfLiterals": "error",
107
- "serviceNotAsClass": "error",
108
- "strictBooleanExpressions": "error",
109
- "unnecessaryArrowBlock": "error",
110
- "unnecessaryEffectGen": "error",
111
- "unnecessaryFailYieldableError": "error",
112
- "unnecessaryPipe": "error",
113
- "unnecessaryPipeChain": "error"
114
- }
115
- }
116
- ]
117
- },
118
- "include": ["src", "api", "shared", "config", "modern.config.ts"],
119
- "exclude": ["**/node_modules"]
120
- }
@@ -1,35 +0,0 @@
1
- packages:
2
- - apps/*
3
- - verticals/*
4
- - packages/*
5
-
6
- minimumReleaseAge: 1440
7
- minimumReleaseAgeStrict: true
8
- minimumReleaseAgeIgnoreMissingTime: false
9
- minimumReleaseAgeExclude:
10
- - '@bleedingdev/modern-js-*'
11
- trustPolicy: no-downgrade
12
- trustPolicyIgnoreAfter: 1440
13
- blockExoticSubdeps: true
14
- engineStrict: true
15
- pmOnFail: error
16
- verifyDepsBeforeRun: error
17
- strictDepBuilds: true
18
-
19
- peerDependencyRules:
20
- allowedVersions:
21
- react: '>=19.0.0'
22
- typescript: '>=6.0.0'
23
-
24
- overrides:
25
- '@tanstack/react-router': 1.170.11
26
- node-fetch: '^3.3.2'
27
-
28
- allowBuilds:
29
- '@swc/core': true
30
- core-js: true
31
- esbuild: true
32
- lefthook: true
33
- msgpackr-extract: true
34
- sharp: true
35
- workerd: true