@nordcraft/ssr 1.0.4 → 1.0.5

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.
@@ -0,0 +1,28 @@
1
+ import type { RouteDeclaration } from '@nordcraft/core/dist/component/component.types';
2
+ import type { ProjectFiles, Route, ToddleProject } from '../ssr.types';
3
+ interface Routes {
4
+ pages: Record<string, {
5
+ name: string;
6
+ route: RouteDeclaration;
7
+ }>;
8
+ routes: Record<string, Route>;
9
+ }
10
+ type Files = Record<string, {
11
+ files: ProjectFiles & {
12
+ customCode: boolean;
13
+ };
14
+ }>;
15
+ export declare const splitRoutes: (json: {
16
+ files: ProjectFiles;
17
+ project: ToddleProject;
18
+ }) => {
19
+ project: {
20
+ project: ToddleProject;
21
+ config: ProjectFiles["config"];
22
+ };
23
+ routes: Routes;
24
+ files: Files;
25
+ styles: Record<string, string>;
26
+ code: Record<string, string>;
27
+ };
28
+ export {};
@@ -0,0 +1,75 @@
1
+ import { isPageComponent } from '@nordcraft/core/dist/component/isPageComponent';
2
+ import { createStylesheet } from '@nordcraft/core/dist/styling/style.css';
3
+ import { theme as defaultTheme } from '@nordcraft/core/dist/styling/theme.const';
4
+ import { takeIncludedComponents } from '../components/utils';
5
+ import { generateCustomCodeFile, hasCustomCode, takeReferencedFormulasAndActions, } from '../custom-code/codeRefs';
6
+ import { removeTestData } from '../rendering/testData';
7
+ export const splitRoutes = (json) => {
8
+ const filesMap = {};
9
+ const stylesMap = {};
10
+ const codeMap = {};
11
+ const { files } = json;
12
+ const routes = {
13
+ routes: { ...(files.routes ?? {}) },
14
+ pages: {},
15
+ };
16
+ Object.entries(files.components).forEach(([name, component]) => {
17
+ if (component) {
18
+ if (isPageComponent(component)) {
19
+ routes.pages[name] = {
20
+ name,
21
+ route: {
22
+ path: component.route.path,
23
+ query: component.route.query,
24
+ },
25
+ };
26
+ const components = takeIncludedComponents({
27
+ root: component,
28
+ projectComponents: files.components,
29
+ packages: files.packages,
30
+ includeRoot: true,
31
+ });
32
+ const theme = (files.themes
33
+ ? Object.values(files.themes)[0]
34
+ : files.config?.theme) ?? defaultTheme;
35
+ const styles = createStylesheet(component, components, theme, {
36
+ // The reset stylesheet is loaded separately
37
+ includeResetStyle: false,
38
+ // Font faces are created from a stylesheet referenced in the head
39
+ createFontFaces: false,
40
+ });
41
+ stylesMap[name] = styles;
42
+ let customCode = false;
43
+ if (hasCustomCode(component, files)) {
44
+ customCode = true;
45
+ const code = takeReferencedFormulasAndActions({
46
+ component,
47
+ files,
48
+ });
49
+ const output = generateCustomCodeFile({
50
+ code,
51
+ componentName: component.name,
52
+ projectId: 'toddle',
53
+ });
54
+ codeMap[name] = output;
55
+ }
56
+ filesMap[name] = {
57
+ files: {
58
+ customCode,
59
+ config: files.config,
60
+ themes: files.themes,
61
+ components: Object.fromEntries(components.map((c) => [c.name, removeTestData(c)])),
62
+ },
63
+ };
64
+ }
65
+ }
66
+ });
67
+ return {
68
+ routes,
69
+ files: filesMap,
70
+ styles: stylesMap,
71
+ code: codeMap,
72
+ project: { project: json.project, config: files.config },
73
+ };
74
+ };
75
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/utils/routes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -13,10 +13,10 @@
13
13
  "main": "dist/index.js",
14
14
  "types": "dist/index.d.ts",
15
15
  "dependencies": {
16
- "@nordcraft/core": "1.0.4",
17
- "@nordcraft/std-lib": "1.0.4",
16
+ "@nordcraft/core": "1.0.5",
17
+ "@nordcraft/std-lib": "1.0.5",
18
18
  "cookie": "1.0.2",
19
19
  "xss": "1.0.15"
20
20
  },
21
- "version": "1.0.4"
21
+ "version": "1.0.5"
22
22
  }
@@ -0,0 +1,102 @@
1
+ import type { RouteDeclaration } from '@nordcraft/core/dist/component/component.types'
2
+ import { isPageComponent } from '@nordcraft/core/dist/component/isPageComponent'
3
+ import { createStylesheet } from '@nordcraft/core/dist/styling/style.css'
4
+ import { theme as defaultTheme } from '@nordcraft/core/dist/styling/theme.const'
5
+ import { takeIncludedComponents } from '../components/utils'
6
+ import {
7
+ generateCustomCodeFile,
8
+ hasCustomCode,
9
+ takeReferencedFormulasAndActions,
10
+ } from '../custom-code/codeRefs'
11
+ import { removeTestData } from '../rendering/testData'
12
+ import type { ProjectFiles, Route, ToddleProject } from '../ssr.types'
13
+
14
+ interface Routes {
15
+ pages: Record<string, { name: string; route: RouteDeclaration }>
16
+ routes: Record<string, Route>
17
+ }
18
+
19
+ type Files = Record<string, { files: ProjectFiles & { customCode: boolean } }>
20
+
21
+ export const splitRoutes = (json: {
22
+ files: ProjectFiles
23
+ project: ToddleProject
24
+ }): {
25
+ project: { project: ToddleProject; config: ProjectFiles['config'] }
26
+ routes: Routes
27
+ files: Files
28
+ styles: Record<string, string>
29
+ code: Record<string, string>
30
+ } => {
31
+ const filesMap: Files = {}
32
+ const stylesMap: Record<string, string> = {}
33
+ const codeMap: Record<string, string> = {}
34
+ const { files } = json
35
+
36
+ const routes: Routes = {
37
+ routes: { ...(files.routes ?? {}) },
38
+ pages: {},
39
+ }
40
+ Object.entries(files.components).forEach(([name, component]) => {
41
+ if (component) {
42
+ if (isPageComponent(component)) {
43
+ routes.pages[name] = {
44
+ name,
45
+ route: {
46
+ path: component.route.path,
47
+ query: component.route.query,
48
+ },
49
+ }
50
+ const components = takeIncludedComponents({
51
+ root: component,
52
+ projectComponents: files.components,
53
+ packages: files.packages,
54
+ includeRoot: true,
55
+ })
56
+ const theme =
57
+ (files.themes
58
+ ? Object.values(files.themes)[0]
59
+ : files.config?.theme) ?? defaultTheme
60
+ const styles = createStylesheet(component, components, theme, {
61
+ // The reset stylesheet is loaded separately
62
+ includeResetStyle: false,
63
+ // Font faces are created from a stylesheet referenced in the head
64
+ createFontFaces: false,
65
+ })
66
+ stylesMap[name] = styles
67
+ let customCode = false
68
+ if (hasCustomCode(component, files)) {
69
+ customCode = true
70
+ const code = takeReferencedFormulasAndActions({
71
+ component,
72
+ files,
73
+ })
74
+ const output = generateCustomCodeFile({
75
+ code,
76
+ componentName: component.name,
77
+ projectId: 'toddle',
78
+ })
79
+ codeMap[name] = output
80
+ }
81
+ filesMap[name] = {
82
+ files: {
83
+ customCode,
84
+ config: files.config,
85
+ themes: files.themes,
86
+ components: Object.fromEntries(
87
+ components.map((c) => [c.name, removeTestData(c)]),
88
+ ),
89
+ },
90
+ }
91
+ }
92
+ }
93
+ })
94
+
95
+ return {
96
+ routes,
97
+ files: filesMap,
98
+ styles: stylesMap,
99
+ code: codeMap,
100
+ project: { project: json.project, config: files.config },
101
+ }
102
+ }