@shuvi/platform-web 0.0.1-rc.34 → 1.0.0-rc.2

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 (238) hide show
  1. package/esm/shared/appTypes.d.ts +15 -0
  2. package/esm/shared/appTypes.js +1 -0
  3. package/esm/shared/configTypes.d.ts +14 -0
  4. package/esm/shared/configTypes.js +1 -0
  5. package/esm/shared/index.d.ts +5 -0
  6. package/esm/shared/index.js +5 -0
  7. package/esm/shared/renderTypes.d.ts +44 -0
  8. package/esm/shared/renderTypes.js +1 -0
  9. package/esm/shared/routeTypes.d.ts +47 -0
  10. package/esm/shared/routeTypes.js +1 -0
  11. package/esm/shared/serverTypes.d.ts +6 -0
  12. package/esm/shared/serverTypes.js +1 -0
  13. package/esm/shuvi-app/app/client.d.ts +2 -0
  14. package/esm/shuvi-app/app/client.js +125 -0
  15. package/esm/shuvi-app/app/server.d.ts +2 -0
  16. package/esm/shuvi-app/app/server.js +67 -0
  17. package/{shuvi-app → esm/shuvi-app}/dev/webpackHotDevClient.d.ts +0 -0
  18. package/{shuvi-app → esm/shuvi-app}/dev/webpackHotDevClient.js +2 -1
  19. package/esm/shuvi-app/entry/client/app.d.ts +2 -0
  20. package/esm/shuvi-app/entry/client/app.js +57 -0
  21. package/esm/shuvi-app/entry/client/index.d.ts +2 -0
  22. package/esm/shuvi-app/entry/client/index.js +12 -0
  23. package/{shuvi-app → esm/shuvi-app}/entry/client/run.dev.d.ts +0 -0
  24. package/{shuvi-app → esm/shuvi-app}/entry/client/run.dev.js +2 -2
  25. package/{shuvi-app → esm/shuvi-app}/entry/client/run.prod.d.ts +0 -0
  26. package/esm/shuvi-app/entry/client/run.prod.js +3 -0
  27. package/{shuvi-app → esm/shuvi-app}/entry/client/setup-env.d.ts +1 -1
  28. package/esm/shuvi-app/entry/client/setup-env.js +17 -0
  29. package/esm/shuvi-app/entry/server/index.d.ts +6 -0
  30. package/esm/shuvi-app/entry/server/index.js +7 -0
  31. package/esm/shuvi-app/react/AppComponent.d.ts +4 -0
  32. package/esm/shuvi-app/react/AppComponent.jsx +6 -0
  33. package/esm/shuvi-app/react/AppContainer.d.ts +6 -0
  34. package/esm/shuvi-app/react/AppContainer.jsx +23 -0
  35. package/esm/shuvi-app/react/Error.d.ts +5 -0
  36. package/esm/shuvi-app/react/Error.jsx +38 -0
  37. package/esm/shuvi-app/react/ErrorBoundary.d.ts +16 -0
  38. package/esm/shuvi-app/react/ErrorBoundary.jsx +25 -0
  39. package/esm/shuvi-app/react/ErrorPage.d.ts +5 -0
  40. package/esm/shuvi-app/react/ErrorPage.jsx +7 -0
  41. package/esm/shuvi-app/react/Link.d.ts +7 -0
  42. package/esm/shuvi-app/react/Link.jsx +115 -0
  43. package/esm/shuvi-app/react/applicationContext.d.ts +7 -0
  44. package/esm/shuvi-app/react/applicationContext.jsx +10 -0
  45. package/esm/shuvi-app/react/dynamic.d.ts +31 -0
  46. package/esm/shuvi-app/react/dynamic.jsx +62 -0
  47. package/esm/shuvi-app/react/getRoutes.d.ts +2 -0
  48. package/esm/shuvi-app/react/getRoutes.js +31 -0
  49. package/esm/shuvi-app/react/head/head-manager-context.d.ts +2 -0
  50. package/esm/shuvi-app/react/head/head-manager-context.js +2 -0
  51. package/esm/shuvi-app/react/head/head-manager.d.ts +10 -0
  52. package/esm/shuvi-app/react/head/head-manager.js +93 -0
  53. package/esm/shuvi-app/react/head/head.d.ts +33 -0
  54. package/esm/shuvi-app/react/head/head.jsx +178 -0
  55. package/esm/shuvi-app/react/head/index.d.ts +4 -0
  56. package/esm/shuvi-app/react/head/index.js +4 -0
  57. package/esm/shuvi-app/react/head/side-effect.d.ts +30 -0
  58. package/esm/shuvi-app/react/head/side-effect.jsx +44 -0
  59. package/esm/shuvi-app/react/head/types.d.ts +15 -0
  60. package/esm/shuvi-app/react/head/types.js +1 -0
  61. package/esm/shuvi-app/react/index.d.ts +4 -0
  62. package/esm/shuvi-app/react/index.js +4 -0
  63. package/esm/shuvi-app/react/loadRouteComponent.d.ts +4 -0
  64. package/esm/shuvi-app/react/loadRouteComponent.jsx +9 -0
  65. package/esm/shuvi-app/react/loadable/index.d.ts +2 -0
  66. package/esm/shuvi-app/react/loadable/index.js +2 -0
  67. package/esm/shuvi-app/react/loadable/loadable-context.d.ts +4 -0
  68. package/esm/shuvi-app/react/loadable/loadable-context.js +3 -0
  69. package/esm/shuvi-app/react/loadable/loadable.d.ts +30 -0
  70. package/esm/shuvi-app/react/loadable/loadable.js +277 -0
  71. package/esm/shuvi-app/react/redox-react/RedoxWrapper.d.ts +8 -0
  72. package/esm/shuvi-app/react/redox-react/RedoxWrapper.jsx +11 -0
  73. package/esm/shuvi-app/react/redox-react/runtime.d.ts +2 -0
  74. package/esm/shuvi-app/react/redox-react/runtime.js +16 -0
  75. package/esm/shuvi-app/react/shuvi-runtime-api.d.ts +5 -0
  76. package/esm/shuvi-app/react/shuvi-runtime-api.js +5 -0
  77. package/esm/shuvi-app/react/types.d.ts +14 -0
  78. package/esm/shuvi-app/react/types.js +1 -0
  79. package/esm/shuvi-app/react/useLoaderData.d.ts +2 -0
  80. package/esm/shuvi-app/react/useLoaderData.js +27 -0
  81. package/esm/shuvi-app/react/utils/getDisplayName.d.ts +2 -0
  82. package/esm/shuvi-app/react/utils/getDisplayName.js +3 -0
  83. package/esm/shuvi-app/react/utils/requestIdleCallback.d.ts +2 -0
  84. package/esm/shuvi-app/react/utils/requestIdleCallback.js +20 -0
  85. package/esm/shuvi-app/react/utils/useIntersection.d.ts +8 -0
  86. package/esm/shuvi-app/react/utils/useIntersection.jsx +91 -0
  87. package/esm/shuvi-app/react/view/ReactView.client.d.ts +5 -0
  88. package/esm/shuvi-app/react/view/ReactView.client.jsx +64 -0
  89. package/esm/shuvi-app/react/view/ReactView.server.d.ts +4 -0
  90. package/esm/shuvi-app/react/view/ReactView.server.jsx +109 -0
  91. package/esm/shuvi-app/react/view/clientView.d.ts +3 -0
  92. package/esm/shuvi-app/react/view/clientView.js +2 -0
  93. package/esm/shuvi-app/react/view/index.d.ts +2 -0
  94. package/esm/shuvi-app/react/view/index.js +7 -0
  95. package/esm/shuvi-app/react/view/render-action.d.ts +10 -0
  96. package/esm/shuvi-app/react/view/render-action.js +29 -0
  97. package/esm/shuvi-app/react/view/serverView.d.ts +3 -0
  98. package/esm/shuvi-app/react/view/serverView.js +2 -0
  99. package/esm/shuvi-app/react/view/transformRoutes.d.ts +2 -0
  100. package/esm/shuvi-app/react/view/transformRoutes.js +3 -0
  101. package/esm/shuvi-app/shuvi-runtime-index.d.ts +4 -0
  102. package/esm/shuvi-app/shuvi-runtime-index.js +2 -0
  103. package/esm/shuvi-app/shuvi-runtime-server.d.ts +6 -0
  104. package/esm/shuvi-app/shuvi-runtime-server.js +1 -0
  105. package/lib/node/features/custom-server/index.d.ts +4 -0
  106. package/lib/node/features/custom-server/index.js +9 -0
  107. package/lib/node/features/custom-server/server.d.ts +2 -0
  108. package/lib/node/features/custom-server/server.js +28 -0
  109. package/lib/node/features/filesystem-routes/api/apiRouteHandler.d.ts +51 -0
  110. package/lib/node/features/filesystem-routes/api/apiRouteHandler.js +237 -0
  111. package/lib/node/features/filesystem-routes/api/apiRoutes.d.ts +7 -0
  112. package/lib/node/features/filesystem-routes/api/apiRoutes.js +35 -0
  113. package/lib/node/features/filesystem-routes/api/index.d.ts +3 -0
  114. package/lib/node/features/filesystem-routes/api/index.js +7 -0
  115. package/lib/node/features/filesystem-routes/api/middleware.d.ts +2 -0
  116. package/lib/node/features/filesystem-routes/api/middleware.js +44 -0
  117. package/lib/node/features/filesystem-routes/hooks.d.ts +3 -0
  118. package/lib/node/features/filesystem-routes/hooks.js +6 -0
  119. package/lib/node/features/filesystem-routes/index.d.ts +20 -0
  120. package/lib/node/features/filesystem-routes/index.js +180 -0
  121. package/lib/node/features/filesystem-routes/middleware/index.d.ts +2 -0
  122. package/lib/node/features/filesystem-routes/middleware/index.js +7 -0
  123. package/lib/node/features/filesystem-routes/middleware/middleware.d.ts +2 -0
  124. package/lib/node/features/filesystem-routes/middleware/middleware.js +42 -0
  125. package/lib/node/features/filesystem-routes/middleware/routes.d.ts +9 -0
  126. package/lib/node/features/filesystem-routes/middleware/routes.js +34 -0
  127. package/lib/node/features/filesystem-routes/page/index.d.ts +2 -0
  128. package/lib/node/features/filesystem-routes/page/index.js +21 -0
  129. package/lib/node/features/filesystem-routes/page/routes.d.ts +8 -0
  130. package/lib/node/features/filesystem-routes/page/routes.js +83 -0
  131. package/lib/node/features/filesystem-routes/page/store.d.ts +3 -0
  132. package/lib/node/features/filesystem-routes/page/store.js +10 -0
  133. package/lib/node/features/html-render/index.d.ts +19 -0
  134. package/lib/node/features/html-render/index.js +28 -0
  135. package/lib/node/features/html-render/lib/generateFilesByRoutId.d.ts +3 -0
  136. package/lib/node/features/html-render/lib/generateFilesByRoutId.js +13 -0
  137. package/lib/node/features/html-render/lib/getPageMiddleware.d.ts +2 -0
  138. package/lib/node/features/html-render/lib/getPageMiddleware.js +56 -0
  139. package/lib/node/features/html-render/lib/index.d.ts +4 -0
  140. package/lib/node/features/html-render/lib/index.js +23 -0
  141. package/lib/node/features/html-render/lib/pageLoader.d.ts +1 -0
  142. package/lib/node/features/html-render/lib/pageLoader.js +42 -0
  143. package/lib/node/features/html-render/lib/renderToHTML.d.ts +6 -0
  144. package/lib/node/features/html-render/lib/renderToHTML.js +81 -0
  145. package/lib/node/features/html-render/lib/renderer/base.d.ts +17 -0
  146. package/lib/node/features/html-render/lib/renderer/base.js +70 -0
  147. package/lib/node/features/html-render/lib/renderer/htmlTag.d.ts +4 -0
  148. package/lib/node/features/html-render/lib/renderer/htmlTag.js +70 -0
  149. package/lib/node/features/html-render/lib/renderer/index.d.ts +15 -0
  150. package/lib/node/features/html-render/lib/renderer/index.js +48 -0
  151. package/lib/node/features/html-render/lib/renderer/spa.d.ts +5 -0
  152. package/lib/node/features/html-render/lib/renderer/spa.js +26 -0
  153. package/lib/node/features/html-render/lib/renderer/ssr.d.ts +5 -0
  154. package/lib/node/features/html-render/lib/renderer/ssr.js +70 -0
  155. package/lib/node/features/html-render/lib/renderer/types.d.ts +20 -0
  156. package/lib/node/features/html-render/lib/renderer/types.js +2 -0
  157. package/lib/node/features/html-render/lib/viewTemplate.d.ts +5 -0
  158. package/lib/node/features/html-render/lib/viewTemplate.js +37 -0
  159. package/lib/node/features/html-render/server.d.ts +2 -0
  160. package/lib/node/features/html-render/server.js +9 -0
  161. package/lib/node/features/html-render/serverHooks.d.ts +10 -0
  162. package/lib/node/features/html-render/serverHooks.js +13 -0
  163. package/lib/node/features/html-render/shuvi-app.d.ts +6 -0
  164. package/lib/node/features/html-render/shuvi-app.js +2 -0
  165. package/lib/node/features/index.d.ts +32 -0
  166. package/lib/node/features/index.js +25 -0
  167. package/lib/node/features/main/buildHtml.d.ts +8 -0
  168. package/lib/node/features/main/buildHtml.js +64 -0
  169. package/lib/node/features/main/generateResource.d.ts +3 -0
  170. package/lib/node/features/main/generateResource.js +56 -0
  171. package/lib/node/features/main/index.d.ts +3 -0
  172. package/lib/node/features/main/index.js +82 -0
  173. package/lib/node/features/middlewares.d.ts +4 -0
  174. package/lib/node/features/middlewares.js +23 -0
  175. package/lib/node/features/model/index.d.ts +21 -0
  176. package/lib/node/features/model/index.js +54 -0
  177. package/lib/node/features/model/runtime.d.ts +13 -0
  178. package/lib/node/features/model/runtime.js +47 -0
  179. package/lib/node/features/model/server.d.ts +3 -0
  180. package/lib/node/features/model/server.js +12 -0
  181. package/lib/node/features/model/shuvi-app.d.ts +6 -0
  182. package/lib/node/features/model/shuvi-app.js +2 -0
  183. package/lib/node/features/on-demand-compile-page/emptyComponent.d.ts +1 -0
  184. package/lib/node/features/on-demand-compile-page/emptyComponent.js +7 -0
  185. package/lib/node/features/on-demand-compile-page/index.d.ts +15 -0
  186. package/lib/node/features/on-demand-compile-page/index.js +36 -0
  187. package/lib/node/features/on-demand-compile-page/onDemandRouteManager.d.ts +11 -0
  188. package/lib/node/features/on-demand-compile-page/onDemandRouteManager.js +104 -0
  189. package/lib/node/index.d.ts +6 -0
  190. package/lib/node/index.js +38 -0
  191. package/lib/{paths.d.ts → node/paths.d.ts} +1 -2
  192. package/lib/node/paths.js +36 -0
  193. package/lib/node/shuvi-type-extensions-node.d.ts +42 -0
  194. package/lib/node/shuvi-type-extensions-node.js +3 -0
  195. package/lib/node/targets/react/bundler/index.d.ts +16 -0
  196. package/lib/node/targets/react/bundler/index.js +102 -0
  197. package/lib/node/targets/react/index.d.ts +32 -0
  198. package/lib/node/targets/react/index.js +28 -0
  199. package/lib/node/targets/react/redox-react/index.d.ts +18 -0
  200. package/lib/node/targets/react/redox-react/index.js +50 -0
  201. package/lib/shared/appTypes.d.ts +15 -0
  202. package/lib/shared/appTypes.js +2 -0
  203. package/lib/shared/configTypes.d.ts +14 -0
  204. package/lib/shared/configTypes.js +2 -0
  205. package/lib/shared/index.d.ts +5 -0
  206. package/lib/shared/index.js +21 -0
  207. package/lib/shared/renderTypes.d.ts +44 -0
  208. package/lib/shared/renderTypes.js +2 -0
  209. package/lib/shared/routeTypes.d.ts +47 -0
  210. package/lib/shared/routeTypes.js +2 -0
  211. package/lib/shared/serverTypes.d.ts +6 -0
  212. package/lib/shared/serverTypes.js +2 -0
  213. package/package.json +78 -15
  214. package/shuvi-type-extensions-node.d.ts +2 -0
  215. package/shuvi-type-extensions-runtime.d.ts +36 -0
  216. package/lib/index.d.ts +0 -3
  217. package/lib/index.js +0 -44
  218. package/lib/paths.js +0 -7
  219. package/shuvi-app/application/client/create-application-factory.d.ts +0 -3
  220. package/shuvi-app/application/client/create-application-factory.js +0 -70
  221. package/shuvi-app/application/client/create-application-history-browser.d.ts +0 -1
  222. package/shuvi-app/application/client/create-application-history-browser.js +0 -3
  223. package/shuvi-app/application/client/create-application-history-hash.d.ts +0 -1
  224. package/shuvi-app/application/client/create-application-history-hash.js +0 -3
  225. package/shuvi-app/application/client/create-application-history-memory.d.ts +0 -1
  226. package/shuvi-app/application/client/create-application-history-memory.js +0 -3
  227. package/shuvi-app/application/server/create-application-spa.d.ts +0 -2
  228. package/shuvi-app/application/server/create-application-spa.js +0 -8
  229. package/shuvi-app/application/server/create-application.d.ts +0 -2
  230. package/shuvi-app/application/server/create-application.js +0 -25
  231. package/shuvi-app/entry/client/index.d.ts +0 -1
  232. package/shuvi-app/entry/client/index.js +0 -11
  233. package/shuvi-app/entry/client/run.prod.js +0 -3
  234. package/shuvi-app/entry/client/setup-app.d.ts +0 -3
  235. package/shuvi-app/entry/client/setup-app.js +0 -38
  236. package/shuvi-app/entry/client/setup-env.js +0 -27
  237. package/shuvi-app/entry/server/index.d.ts +0 -6
  238. package/shuvi-app/entry/server/index.js +0 -7
@@ -0,0 +1,15 @@
1
+ import { IRequest, IRawPageRouteRecord, IAppData, IAppState } from '@shuvi/platform-shared/shared';
2
+ import { Application } from '@shuvi/platform-shared/shuvi-app/application';
3
+ export interface CreateAppServer {
4
+ (options: {
5
+ req: IRequest;
6
+ ssr: boolean;
7
+ }): Application;
8
+ }
9
+ export interface CreateAppClient {
10
+ (options: {
11
+ routes: IRawPageRouteRecord[];
12
+ appComponent: any;
13
+ appData: IAppData<any, IAppState>;
14
+ }): Application;
15
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import { IRouterHistoryMode, IPageRouteConfig, IMiddlewareRouteConfig, IApiRouteConfig } from '@shuvi/platform-shared/shared';
2
+ export interface IRouterConfig {
3
+ history: IRouterHistoryMode | 'auto';
4
+ }
5
+ export interface PlatformWebCustomConfig {
6
+ ssr: boolean;
7
+ router: IRouterConfig;
8
+ routes?: IPageRouteConfig[];
9
+ middlewareRoutes?: IMiddlewareRouteConfig[];
10
+ apiRoutes?: IApiRouteConfig[];
11
+ conventionRoutes: {
12
+ exclude?: string[];
13
+ };
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export * from './appTypes';
2
+ export * from './configTypes';
3
+ export * from './renderTypes';
4
+ export * from './routeTypes';
5
+ export * from './serverTypes';
@@ -0,0 +1,5 @@
1
+ export * from './appTypes';
2
+ export * from './configTypes';
3
+ export * from './renderTypes';
4
+ export * from './routeTypes';
5
+ export * from './serverTypes';
@@ -0,0 +1,44 @@
1
+ import { IManifest } from '@shuvi/toolpack/lib/webpack/types';
2
+ import { Response, IApplication, IRequest, IAppData } from '@shuvi/platform-shared/shared';
3
+ export declare type IRenderDocumentOptions = {
4
+ app: IApplication;
5
+ req?: IRequest;
6
+ };
7
+ export interface IRenderOptions extends IRenderDocumentOptions {
8
+ }
9
+ export interface IView<RenderOption extends IRenderOptions = any, RenderResult = void> {
10
+ renderApp(options: RenderOption): RenderResult;
11
+ }
12
+ export declare type IHtmlAttrs = {
13
+ textContent?: string;
14
+ } & {
15
+ [x: string]: string | number | undefined | boolean;
16
+ };
17
+ export interface IHtmlTag<TagNames = string> {
18
+ tagName: TagNames;
19
+ attrs: IHtmlAttrs;
20
+ innerHTML?: string;
21
+ }
22
+ export declare type IRenderAppServerResult<ExtraAppData = {}> = {
23
+ htmlAttrs?: IHtmlAttrs;
24
+ headBeginTags?: IHtmlTag[];
25
+ headEndTags?: IHtmlTag[];
26
+ mainBeginTags?: IHtmlTag[];
27
+ mainEndTags?: IHtmlTag[];
28
+ scriptBeginTags?: IHtmlTag[];
29
+ scriptEndTags?: IHtmlTag[];
30
+ appData?: ExtraAppData;
31
+ content?: string;
32
+ };
33
+ export interface IClientRendererOptions<ExtraAppData = {}> extends IRenderOptions {
34
+ appContainer: HTMLElement;
35
+ appData: IAppData<ExtraAppData>;
36
+ }
37
+ export interface IServerRendererOptions extends IRenderOptions {
38
+ manifest: IManifest;
39
+ getAssetPublicUrl(path: string): string;
40
+ }
41
+ export interface IViewClient<ExtraAppData = {}> extends IView<IClientRendererOptions<ExtraAppData>> {
42
+ }
43
+ export interface IViewServer<ExtraAppData = {}> extends IView<IServerRendererOptions, Promise<IRenderAppServerResult<ExtraAppData> | Response>> {
44
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ import { IURLParams, IURLQuery } from '@shuvi/platform-shared/shared';
2
+ import { IRequestHandlerWithNext } from '@shuvi/service';
3
+ import { IResponse, IRequest } from '@shuvi/service';
4
+ export interface IApiReq {
5
+ pathname: string;
6
+ query: IURLQuery;
7
+ params: IURLParams;
8
+ cookies: {
9
+ [key: string]: string;
10
+ };
11
+ body?: {
12
+ [key: string]: any;
13
+ };
14
+ }
15
+ export declare type IApiRequest = IRequest & IApiReq;
16
+ export declare type Send<T> = (body: T) => void;
17
+ export declare type IApiRes<T = any> = {
18
+ send: Send<T>;
19
+ json: Send<T>;
20
+ status: (statusCode: number) => IApiRes<T>;
21
+ redirect(url: string): IApiRes<T>;
22
+ redirect(status: number, url: string): IApiRes<T>;
23
+ };
24
+ export declare type IApiResponse<T = any> = IResponse & IApiRes<T>;
25
+ export declare type IApiRequestHandler<T = any> = (req: IApiRequest, res: IApiResponse<T>) => void | Promise<void>;
26
+ export interface IApiConfig {
27
+ api?: {
28
+ bodyParser?: {
29
+ sizeLimit: number | string;
30
+ } | boolean;
31
+ };
32
+ }
33
+ export interface IApiHandler {
34
+ default: IApiRequestHandler;
35
+ config?: IApiConfig;
36
+ }
37
+ export interface IMiddlewareConfig {
38
+ default: IRequestHandlerWithNext;
39
+ }
40
+ export declare type IApiRoutes = {
41
+ path: string;
42
+ api: IApiHandler;
43
+ }[];
44
+ export declare type IMiddlewareRoutes = {
45
+ path: string;
46
+ middleware: IMiddlewareConfig;
47
+ }[];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { ServerPluginConstructor } from '@shuvi/service';
2
+ export interface IServerModule {
3
+ getPageData?: ServerPluginConstructor['getPageData'];
4
+ handlePageRequest?: ServerPluginConstructor['handlePageRequest'];
5
+ modifyHtml?: ServerPluginConstructor['modifyHtml'];
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { CreateAppClient } from '../../shared';
2
+ export declare const createApp: CreateAppClient;
@@ -0,0 +1,125 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { getRoutes } from '@shuvi/app/core/platform';
11
+ import { runPreload, runLoaders, getRouteMatchesWithInvalidLoader, getLoaderManager, isRedirect, isResponse } from '@shuvi/platform-shared/shared';
12
+ import application from '@shuvi/platform-shared/shuvi-app/application';
13
+ import { createRouter, createBrowserHistory, createHashHistory } from '@shuvi/router';
14
+ import pageLoaders from '@shuvi/app/files/page-loaders';
15
+ import { historyMode } from '@shuvi/app/files/routerConfig';
16
+ import { SHUVI_ERROR } from '@shuvi/shared/lib/constants';
17
+ let app;
18
+ export const createApp = ({ routes, appData, appComponent }) => {
19
+ // app is a singleton in client side
20
+ if (app) {
21
+ return app;
22
+ }
23
+ const { loadersData = {}, appState, ssr } = appData;
24
+ let history;
25
+ if (historyMode === 'hash') {
26
+ history = createHashHistory();
27
+ }
28
+ else {
29
+ history = createBrowserHistory();
30
+ }
31
+ const router = createRouter({
32
+ history,
33
+ routes: getRoutes(routes)
34
+ });
35
+ app = application({
36
+ initialState: appState,
37
+ AppComponent: appComponent,
38
+ router
39
+ });
40
+ const hasHydrateData = Object.keys(loadersData).length > 0;
41
+ const loaderManager = getLoaderManager();
42
+ let shouldHydrate = ssr && hasHydrateData;
43
+ let hasServerError = app.error.hasError;
44
+ router.beforeResolve((to, from, next) => __awaiter(void 0, void 0, void 0, function* () {
45
+ if (shouldHydrate) {
46
+ shouldHydrate = false;
47
+ loaderManager.setDatas(loadersData);
48
+ return next();
49
+ }
50
+ if (hasServerError) {
51
+ hasServerError = false;
52
+ return next();
53
+ }
54
+ if (!to.matches.length) {
55
+ app.error.error(SHUVI_ERROR.PAGE_NOT_FOUND);
56
+ next();
57
+ return;
58
+ }
59
+ const matches = getRouteMatchesWithInvalidLoader(to, from, pageLoaders);
60
+ let isPreloadError = false;
61
+ try {
62
+ const loaderDatas = yield new Promise((resolve, reject) => {
63
+ let value;
64
+ let error;
65
+ let requireNum = 2;
66
+ let resolvedNum = 0;
67
+ const tryResolve = () => {
68
+ if (++resolvedNum === requireNum) {
69
+ if (error) {
70
+ reject(error);
71
+ }
72
+ else {
73
+ resolve(value);
74
+ }
75
+ }
76
+ };
77
+ // if preload has error, reject directly
78
+ runPreload(to)
79
+ .then(tryResolve)
80
+ .catch(err => {
81
+ isPreloadError = true;
82
+ reject(err);
83
+ });
84
+ runLoaders(matches, pageLoaders, {
85
+ isServer: false,
86
+ query: to.query,
87
+ getAppContext: () => app.context
88
+ })
89
+ .then(_value => {
90
+ value = _value;
91
+ tryResolve();
92
+ })
93
+ .catch(err => {
94
+ error = err;
95
+ tryResolve();
96
+ });
97
+ });
98
+ loaderManager.setDatas(loaderDatas);
99
+ }
100
+ catch (error) {
101
+ if (isRedirect(error)) {
102
+ next(error.headers.get('Location'));
103
+ return;
104
+ }
105
+ if (isResponse(error) && error.status >= 400 && error.status < 600) {
106
+ app.error.error({
107
+ code: error.status,
108
+ message: error.data
109
+ });
110
+ next();
111
+ return;
112
+ }
113
+ app.error.error({
114
+ code: SHUVI_ERROR.APP_ERROR.code,
115
+ message: error.message || isPreloadError ? 'Preload Error' : 'Loader Error'
116
+ });
117
+ next();
118
+ return;
119
+ }
120
+ next(() => {
121
+ app.error.clear();
122
+ });
123
+ }));
124
+ return app;
125
+ };
@@ -0,0 +1,2 @@
1
+ import { CreateAppServer } from '../../shared';
2
+ export declare const createApp: CreateAppServer;
@@ -0,0 +1,67 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import routes from '@shuvi/app/files/routes';
11
+ import { getRoutes, app as AppComponent } from '@shuvi/app/core/platform';
12
+ import { runLoaders, getRouteMatchesWithInvalidLoader, isResponse, isRedirect, getLoaderManager } from '@shuvi/platform-shared/shared';
13
+ import pageLoaders from '@shuvi/app/files/page-loaders';
14
+ import application from '@shuvi/platform-shared/shuvi-app/application';
15
+ import { createRouter, createMemoryHistory } from '@shuvi/router';
16
+ export const createApp = options => {
17
+ const { req, ssr } = options;
18
+ const history = createMemoryHistory({
19
+ initialEntries: [(req && req.url) || '/'],
20
+ initialIndex: 0
21
+ });
22
+ const router = createRouter({
23
+ history,
24
+ routes: getRoutes(routes)
25
+ });
26
+ let app;
27
+ const loaderManager = getLoaderManager();
28
+ if (ssr) {
29
+ router.beforeResolve((to, from, next) => __awaiter(void 0, void 0, void 0, function* () {
30
+ const matches = getRouteMatchesWithInvalidLoader(to, from, pageLoaders);
31
+ try {
32
+ const loaderResult = yield runLoaders(matches, pageLoaders, {
33
+ isServer: true,
34
+ req,
35
+ query: to.query,
36
+ getAppContext: () => app.context
37
+ });
38
+ loaderManager.setDatas(loaderResult);
39
+ }
40
+ catch (error) {
41
+ if (isRedirect(error)) {
42
+ next(error.headers.get('Location'));
43
+ return;
44
+ }
45
+ if (isResponse(error) && error.status >= 400 && error.status < 600) {
46
+ app.error.error({
47
+ code: error.status,
48
+ message: error.data
49
+ });
50
+ next();
51
+ return;
52
+ }
53
+ app.error.error({
54
+ message: error.message || 'Loader Error'
55
+ });
56
+ next();
57
+ return;
58
+ }
59
+ next();
60
+ }));
61
+ }
62
+ app = application({
63
+ AppComponent,
64
+ router
65
+ });
66
+ return app;
67
+ };
@@ -5,7 +5,8 @@ export default (options = {}) => {
5
5
  if (devClient) {
6
6
  return devClient;
7
7
  }
8
- devClient = connect(Object.assign(Object.assign({}, options), { launchEditorEndpoint: DEV_HOT_LAUNCH_EDITOR_ENDPOINT, path: DEV_HOT_MIDDLEWARE_PATH }));
8
+ devClient = connect(Object.assign(Object.assign({}, options), { launchEditorEndpoint: DEV_HOT_LAUNCH_EDITOR_ENDPOINT, path: DEV_HOT_MIDDLEWARE_PATH, location,
9
+ WebSocket }));
9
10
  devClient.subscribeToHmrEvent((event) => {
10
11
  // if (obj.action === "reloadPage") {
11
12
  // return window.location.reload();
@@ -0,0 +1,2 @@
1
+ declare const run: () => Promise<void>;
2
+ export { run };
@@ -0,0 +1,57 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { CLIENT_CONTAINER_ID } from '@shuvi/shared/lib/constants';
11
+ // renderer must be imported before application
12
+ // we need to init init renderer before import AppComponent
13
+ import { view, getRoutes, app as PlatformAppComponent } from '@shuvi/app/core/platform';
14
+ import routes from '@shuvi/app/files/routes';
15
+ import { getAppData } from '@shuvi/platform-shared/shared/helper/getAppData';
16
+ import { createApp } from '../../app/client';
17
+ const appData = getAppData();
18
+ const app = createApp({
19
+ appComponent: PlatformAppComponent,
20
+ routes,
21
+ appData
22
+ });
23
+ const render = () => {
24
+ const appContainer = document.getElementById(CLIENT_CONTAINER_ID);
25
+ view.renderApp({
26
+ app: app.getPublicAPI(),
27
+ appData,
28
+ appContainer
29
+ });
30
+ };
31
+ const run = () => __awaiter(void 0, void 0, void 0, function* () {
32
+ yield app.init();
33
+ render();
34
+ });
35
+ export { run };
36
+ if (module.hot) {
37
+ const handleHotUpdate = () => __awaiter(void 0, void 0, void 0, function* () {
38
+ const rerender = () => __awaiter(void 0, void 0, void 0, function* () {
39
+ app.router.replaceRoutes(getRoutes(routes));
40
+ yield app.updateComponents({
41
+ AppComponent: PlatformAppComponent
42
+ });
43
+ render();
44
+ });
45
+ // if we are in the midsf of route transition, don't render unit it's done
46
+ if (app.router._pending) {
47
+ const removelistener = app.router.afterEach(() => {
48
+ removelistener();
49
+ rerender();
50
+ });
51
+ }
52
+ else {
53
+ rerender();
54
+ }
55
+ });
56
+ module.hot.accept(['@shuvi/app/files/routes'], handleHotUpdate);
57
+ }
@@ -0,0 +1,2 @@
1
+ import './setup-env';
2
+ import '@shuvi/app/core/entry';
@@ -0,0 +1,12 @@
1
+ // shuvi built-in entry
2
+ // IMPORTANT: there files must be runned before any other codes
3
+ import './setup-env';
4
+ // user entry
5
+ import '@shuvi/app/core/entry';
6
+ // app starts here
7
+ if (process.env.NODE_ENV === 'development') {
8
+ require('./run.dev');
9
+ }
10
+ else {
11
+ require('./run.prod');
12
+ }
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  /// <reference lib="dom" />
11
11
  import { DEV_STYLE_HIDE_FOUC, DEV_STYLE_PREPARE } from '@shuvi/shared/lib/constants';
12
12
  import initWebpackHMR from '../../dev/webpackHotDevClient';
13
- import { app } from './setup-app';
13
+ import { run } from './app';
14
14
  function init() {
15
15
  return __awaiter(this, void 0, void 0, function* () {
16
16
  initWebpackHMR();
@@ -27,4 +27,4 @@ function init() {
27
27
  yield styleReady;
28
28
  });
29
29
  }
30
- init().then(() => app.run());
30
+ init().then(run);
@@ -0,0 +1,3 @@
1
+ /// <reference lib="dom" />
2
+ import { run } from './app';
3
+ run();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Following codes should be run beforen any other codes.
2
+ * Following codes should be run before any other codes.
3
3
  * Do not try to import any module from `@shuvi/app`.
4
4
  */
5
5
  export {};
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Following codes should be run before any other codes.
3
+ * Do not try to import any module from `@shuvi/app`.
4
+ */
5
+ import setRuntimeConfig from '@shuvi/app/core/setRuntimeConfig';
6
+ import runtimeConfig from '@shuvi/app/core/runtimeConfig';
7
+ import { getAppData } from '@shuvi/platform-shared/shared';
8
+ // === set runtime config ===
9
+ const appData = getAppData();
10
+ // build-time config for none-ssr
11
+ if (runtimeConfig) {
12
+ setRuntimeConfig(runtimeConfig);
13
+ }
14
+ // runtime config from server
15
+ if (appData.runtimeConfig) {
16
+ setRuntimeConfig(appData.runtimeConfig);
17
+ }
@@ -0,0 +1,6 @@
1
+ import * as application from '../../app/server';
2
+ import * as server from '@shuvi/app/user/server';
3
+ import { default as apiRoutes } from '@shuvi/app/files/apiRoutes';
4
+ import { default as middlewareRoutes } from '@shuvi/app/files/middlewareRoutes';
5
+ export { server, application, apiRoutes, middlewareRoutes };
6
+ export { view } from '@shuvi/app/core/platform';
@@ -0,0 +1,7 @@
1
+ // This is the shuvi server-side main module exports collection
2
+ import * as application from '../../app/server';
3
+ import * as server from '@shuvi/app/user/server';
4
+ import { default as apiRoutes } from '@shuvi/app/files/apiRoutes';
5
+ import { default as middlewareRoutes } from '@shuvi/app/files/middlewareRoutes';
6
+ export { server, application, apiRoutes, middlewareRoutes };
7
+ export { view } from '@shuvi/app/core/platform';
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ declare function App(): JSX.Element;
3
+ declare const _default: React.MemoExoticComponent<typeof App>;
4
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import { RouterView } from '@shuvi/router-react';
3
+ function App() {
4
+ return <RouterView />;
5
+ }
6
+ export default React.memo(App);
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import { IApplication } from '@shuvi/platform-shared/shared';
3
+ export default function AppContainer({ children, app }: {
4
+ app: IApplication;
5
+ children: React.ReactElement;
6
+ }): JSX.Element;
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ import { errorModel } from '@shuvi/platform-shared/shared';
3
+ import { createContainer } from '@shuvi/redox-react';
4
+ import { AppProvider } from './applicationContext';
5
+ import ErrorPage from './ErrorPage';
6
+ import { ErrorBoundary } from './ErrorBoundary';
7
+ const { Provider, useSharedModel } = createContainer();
8
+ function ErrorGuard({ children = null }) {
9
+ const [errorState] = useSharedModel(errorModel);
10
+ if (errorState.error !== undefined) {
11
+ return (<ErrorPage code={errorState.error.code} message={errorState.error.message}/>);
12
+ }
13
+ return <>{children}</>;
14
+ }
15
+ export default function AppContainer({ children, app }) {
16
+ return (<ErrorBoundary>
17
+ <AppProvider app={app}>
18
+ <Provider storeManager={app.storeManager}>
19
+ <ErrorGuard>{children}</ErrorGuard>
20
+ </Provider>
21
+ </AppProvider>
22
+ </ErrorBoundary>);
23
+ }
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export default function Error({ errorCode, errorDesc }: {
3
+ errorCode?: number;
4
+ errorDesc?: string;
5
+ }): JSX.Element;
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ import { Head } from './head';
3
+ const style = {
4
+ container: {
5
+ color: '#000',
6
+ background: '#fff',
7
+ fontFamily: '-apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", "Fira Sans", Avenir, "Helvetica Neue", "Lucida Grande", sans-serif',
8
+ height: '100vh',
9
+ display: 'flex',
10
+ flexDirection: 'column',
11
+ alignItems: 'center',
12
+ justifyContent: 'center'
13
+ },
14
+ error: { display: 'flex', alignItems: 'center', justifyContent: 'center' },
15
+ errorCode: {
16
+ fontSize: '24px',
17
+ fontWeight: 500
18
+ },
19
+ errorDesc: {
20
+ fontSize: '16px',
21
+ lineHeight: '1',
22
+ borderLeft: '1px solid rgba(0, 0, 0, 0.3)',
23
+ paddingLeft: '20px',
24
+ marginLeft: '20px'
25
+ }
26
+ };
27
+ export default function Error({ errorCode, errorDesc }) {
28
+ return (<div style={style.container}>
29
+ <Head>
30
+ <title>Page Error</title>
31
+ </Head>
32
+
33
+ <div style={style.error}>
34
+ <div style={style.errorCode}>{errorCode}</div>
35
+ <div style={style.errorDesc}>{errorDesc || 'Error'}</div>
36
+ </div>
37
+ </div>);
38
+ }
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import { PropsWithChildren } from 'react';
3
+ declare type ErrorBoundaryState = {
4
+ error: Error | null;
5
+ };
6
+ declare type ErrorInfo = {
7
+ componentStack?: string | null;
8
+ };
9
+ declare class ErrorBoundary extends React.PureComponent<PropsWithChildren<{}>, ErrorBoundaryState> {
10
+ state: {
11
+ error: null;
12
+ };
13
+ componentDidCatch(error: Error, errorInfo?: ErrorInfo): void;
14
+ render(): string | number | boolean | JSX.Element | React.ReactFragment | null | undefined;
15
+ }
16
+ export { ErrorBoundary };