alinea 1.4.0 → 1.4.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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "_id": "2zMfvzyGJk5gAIRxlYhGAkY87JU",
2
+ "_id": "2zil0YV61xzyQmyCaOVzzBR5pwk",
3
3
  "_type": "Page",
4
4
  "_index": "a0",
5
5
  "_seeded": "welcome.json",
@@ -0,0 +1,8 @@
1
+ import {createHandler} from 'alinea/next'
2
+ import {cms} from '@/cms'
3
+
4
+ // This handler will respond to API request of the dashboard
5
+ const handler = createHandler({cms})
6
+
7
+ export const GET = handler
8
+ export const POST = handler
@@ -0,0 +1,47 @@
1
+ import {Config, Field} from 'alinea'
2
+ import {createCMS} from 'alinea/next'
3
+
4
+ // Create types for your CMS schema
5
+ const Page = Config.type('Page', {
6
+ fields: {
7
+ title: Field.text('Title'),
8
+ path: Field.path('Path')
9
+ }
10
+ })
11
+
12
+ export const cms = createCMS({
13
+ // List out available types in your schema
14
+ schema: {
15
+ Page
16
+ },
17
+
18
+ // Define the content structure of your CMS
19
+ workspaces: {
20
+ main: Config.workspace('Example', {
21
+ source: 'content',
22
+ mediaDir: 'public/media',
23
+ roots: {
24
+ pages: Config.root('Example site', {
25
+ contains: ['Page']
26
+ }),
27
+ media: Config.media()
28
+ }
29
+ })
30
+ },
31
+
32
+ baseUrl: {
33
+ // Point to your local website
34
+ development: 'http://localhost:3000',
35
+ // The production URL of your website
36
+ production: process.env.VERCEL_URL ?? 'https://example.com'
37
+ },
38
+
39
+ // Enable live previews after adding <cms.previews widget /> to your layout
40
+ // preview: true,
41
+
42
+ // The handler route URL
43
+ handlerUrl: '/api/cms',
44
+
45
+ // The admin dashboard will be bundled in this static file
46
+ dashboardFile: 'admin.html'
47
+ })
package/dist/LICENSES.md CHANGED
@@ -28,11 +28,11 @@ SOFTWARE.
28
28
 
29
29
  ===
30
30
 
31
- # lib0@0.2.88 (MIT)
31
+ # react-query@3.39.3 (MIT)
32
32
 
33
- The MIT License (MIT)
33
+ MIT License
34
34
 
35
- Copyright (c) 2019 Kevin Jahns <kevin.jahns@protonmail.com>.
35
+ Copyright (c) 2019 Tanner Linsley
36
36
 
37
37
  Permission is hereby granted, free of charge, to any person obtaining a copy
38
38
  of this software and associated documentation files (the "Software"), to deal
@@ -55,11 +55,11 @@ SOFTWARE.
55
55
 
56
56
  ===
57
57
 
58
- # @headlessui/react@2.2.0 (MIT)
58
+ # lib0@0.2.88 (MIT)
59
59
 
60
- MIT License
60
+ The MIT License (MIT)
61
61
 
62
- Copyright (c) 2020 Tailwind Labs
62
+ Copyright (c) 2019 Kevin Jahns <kevin.jahns@protonmail.com>.
63
63
 
64
64
  Permission is hereby granted, free of charge, to any person obtaining a copy
65
65
  of this software and associated documentation files (the "Software"), to deal
@@ -79,13 +79,14 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
79
79
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
80
80
  SOFTWARE.
81
81
 
82
+
82
83
  ===
83
84
 
84
- # react-query@3.39.3 (MIT)
85
+ # @headlessui/react@2.2.0 (MIT)
85
86
 
86
87
  MIT License
87
88
 
88
- Copyright (c) 2019 Tanner Linsley
89
+ Copyright (c) 2020 Tailwind Labs
89
90
 
90
91
  Permission is hereby granted, free of charge, to any person obtaining a copy
91
92
  of this software and associated documentation files (the "Software"), to deal
@@ -105,7 +106,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
105
106
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
106
107
  SOFTWARE.
107
108
 
108
-
109
109
  ===
110
110
 
111
111
  # htmlparser2@9.1.0 (MIT)
@@ -131,24 +131,33 @@ IN THE SOFTWARE.
131
131
 
132
132
  ===
133
133
 
134
- # domhandler@5.0.3 (BSD-2-Clause)
134
+ # @popperjs/core@2.11.8 (MIT)
135
135
 
136
- Copyright (c) Felix Böhm
137
- All rights reserved.
136
+ The MIT License (MIT)
138
137
 
139
- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
138
+ Copyright (c) 2019 Federico Zivolo
140
139
 
141
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
140
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
141
+ this software and associated documentation files (the "Software"), to deal in
142
+ the Software without restriction, including without limitation the rights to
143
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
144
+ the Software, and to permit persons to whom the Software is furnished to do so,
145
+ subject to the following conditions:
142
146
 
143
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
147
+ The above copyright notice and this permission notice shall be included in all
148
+ copies or substantial portions of the Software.
144
149
 
145
- THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS,
146
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
150
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
151
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
152
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
153
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
154
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
155
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
147
156
 
148
157
 
149
158
  ===
150
159
 
151
- # entities@4.5.0 (BSD-2-Clause)
160
+ # domutils@3.1.0 (BSD-2-Clause)
152
161
 
153
162
  Copyright (c) Felix Böhm
154
163
  All rights reserved.
@@ -165,7 +174,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
165
174
 
166
175
  ===
167
176
 
168
- # domutils@3.1.0 (BSD-2-Clause)
177
+ # domhandler@5.0.3 (BSD-2-Clause)
169
178
 
170
179
  Copyright (c) Felix Böhm
171
180
  All rights reserved.
@@ -182,55 +191,19 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
182
191
 
183
192
  ===
184
193
 
185
- # @popperjs/core@2.11.8 (MIT)
186
-
187
- The MIT License (MIT)
188
-
189
- Copyright (c) 2019 Federico Zivolo
190
-
191
- Permission is hereby granted, free of charge, to any person obtaining a copy of
192
- this software and associated documentation files (the "Software"), to deal in
193
- the Software without restriction, including without limitation the rights to
194
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
195
- the Software, and to permit persons to whom the Software is furnished to do so,
196
- subject to the following conditions:
197
-
198
- The above copyright notice and this permission notice shall be included in all
199
- copies or substantial portions of the Software.
200
-
201
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
202
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
203
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
204
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
205
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
206
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
207
-
208
-
209
- ===
210
-
211
- # prop-types@15.8.1 (MIT)
194
+ # entities@4.5.0 (BSD-2-Clause)
212
195
 
213
- MIT License
196
+ Copyright (c) Felix Böhm
197
+ All rights reserved.
214
198
 
215
- Copyright (c) 2013-present, Facebook, Inc.
199
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
216
200
 
217
- Permission is hereby granted, free of charge, to any person obtaining a copy
218
- of this software and associated documentation files (the "Software"), to deal
219
- in the Software without restriction, including without limitation the rights
220
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
221
- copies of the Software, and to permit persons to whom the Software is
222
- furnished to do so, subject to the following conditions:
201
+ Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
223
202
 
224
- The above copyright notice and this permission notice shall be included in all
225
- copies or substantial portions of the Software.
203
+ Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
226
204
 
227
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
228
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
229
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
230
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
231
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
232
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
233
- SOFTWARE.
205
+ THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS,
206
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
234
207
 
235
208
 
236
209
  ===
@@ -442,28 +415,11 @@ SOFTWARE.
442
415
 
443
416
  ===
444
417
 
445
- # dom-serializer@2.0.0 (MIT)
446
-
447
- License
448
-
449
- (The MIT License)
450
-
451
- Copyright (c) 2014 The cheeriojs contributors
452
-
453
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
454
-
455
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
456
-
457
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
458
-
459
-
460
- ===
461
-
462
- # react-is@16.13.1 (MIT)
418
+ # prop-types@15.8.1 (MIT)
463
419
 
464
420
  MIT License
465
421
 
466
- Copyright (c) Facebook, Inc. and its affiliates.
422
+ Copyright (c) 2013-present, Facebook, Inc.
467
423
 
468
424
  Permission is hereby granted, free of charge, to any person obtaining a copy
469
425
  of this software and associated documentation files (the "Software"), to deal
@@ -486,23 +442,28 @@ SOFTWARE.
486
442
 
487
443
  ===
488
444
 
489
- # @headless-tree/core@0.0.15 (MIT)
445
+ # dom-serializer@2.0.0 (MIT)
490
446
 
491
- MIT
447
+ License
492
448
 
493
- ===
449
+ (The MIT License)
494
450
 
495
- # @headless-tree/react@0.0.15 (MIT)
451
+ Copyright (c) 2014 The cheeriojs contributors
452
+
453
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
454
+
455
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
456
+
457
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
496
458
 
497
- MIT
498
459
 
499
460
  ===
500
461
 
501
- # y-prosemirror@1.2.15 (MIT)
462
+ # react-is@16.13.1 (MIT)
502
463
 
503
- The MIT License (MIT)
464
+ MIT License
504
465
 
505
- Copyright (c) 2019 Kevin Jahns <kevin.jahns@protonmail.com>.
466
+ Copyright (c) Facebook, Inc. and its affiliates.
506
467
 
507
468
  Permission is hereby granted, free of charge, to any person obtaining a copy
508
469
  of this software and associated documentation files (the "Software"), to deal
@@ -523,6 +484,18 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
523
484
  SOFTWARE.
524
485
 
525
486
 
487
+ ===
488
+
489
+ # @headless-tree/react@0.0.15 (MIT)
490
+
491
+ MIT
492
+
493
+ ===
494
+
495
+ # @headless-tree/core@0.0.15 (MIT)
496
+
497
+ MIT
498
+
526
499
  ===
527
500
 
528
501
  # @babel/runtime@7.25.4 (MIT)
@@ -553,7 +526,34 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
553
526
 
554
527
  ===
555
528
 
556
- # @react-aria/interactions@3.23.0 (Apache-2.0)
529
+ # y-prosemirror@1.2.15 (MIT)
530
+
531
+ The MIT License (MIT)
532
+
533
+ Copyright (c) 2019 Kevin Jahns <kevin.jahns@protonmail.com>.
534
+
535
+ Permission is hereby granted, free of charge, to any person obtaining a copy
536
+ of this software and associated documentation files (the "Software"), to deal
537
+ in the Software without restriction, including without limitation the rights
538
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
539
+ copies of the Software, and to permit persons to whom the Software is
540
+ furnished to do so, subject to the following conditions:
541
+
542
+ The above copyright notice and this permission notice shall be included in all
543
+ copies or substantial portions of the Software.
544
+
545
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
546
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
547
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
548
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
549
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
550
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
551
+ SOFTWARE.
552
+
553
+
554
+ ===
555
+
556
+ # @react-aria/focus@3.19.1 (Apache-2.0)
557
557
 
558
558
  Apache License
559
559
  Version 2.0, January 2004
@@ -760,7 +760,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
760
760
 
761
761
  ===
762
762
 
763
- # @react-aria/focus@3.19.1 (Apache-2.0)
763
+ # @react-aria/interactions@3.23.0 (Apache-2.0)
764
764
 
765
765
  Apache License
766
766
  Version 2.0, January 2004
@@ -2,7 +2,7 @@
2
2
  var package_default = {
3
3
  bin: "./dist/cli.js",
4
4
  name: "alinea",
5
- version: "1.4.0",
5
+ version: "1.4.2",
6
6
  description: "Headless git-based CMS",
7
7
  repository: {
8
8
  type: "git",
@@ -39,7 +39,8 @@ var package_default = {
39
39
  ],
40
40
  dependencies: {
41
41
  "@alinea/iso": "^0.3.3",
42
- esbuild: "^0.25.4"
42
+ esbuild: "^0.25.4",
43
+ next: "^15.3.5"
43
44
  },
44
45
  peerDependencies: {
45
46
  react: "*",
@@ -50,7 +50,8 @@ var package_default = {
50
50
  ],
51
51
  dependencies: {
52
52
  "@alinea/iso": "^0.3.3",
53
- esbuild: "^0.25.4"
53
+ esbuild: "^0.25.4",
54
+ next: "^15.3.5"
54
55
  },
55
56
  peerDependencies: {
56
57
  react: "*",
@@ -59,7 +60,7 @@ var package_default = {
59
60
  devDependencies: {
60
61
  "@alinea/styler": "^1.0.3",
61
62
  "@alinea/suite": "^0.6.2",
62
- "@biomejs/biome": "^1.9.4",
63
+ "@biomejs/biome": "^2.0.0",
63
64
  "@esbx/reporter": "^0.0.20",
64
65
  "@esbx/workspaces": "^0.0.20",
65
66
  "@ladle/react": "^4.1.2",
package/dist/cli/Init.js CHANGED
@@ -60,18 +60,32 @@ async function init(options) {
60
60
  pkg = pkg.replace('"build": "', '"build": "alinea build -- ');
61
61
  await fs.writeFile(path.join(cwd, "package.json"), pkg);
62
62
  try {
63
- const isNext = JSON.parse(pkg).dependencies?.next;
64
- if (isNext) options.next = true;
63
+ const isNext2 = JSON.parse(pkg).dependencies?.next;
64
+ if (isNext2) options.next = true;
65
65
  } catch {
66
66
  }
67
67
  }
68
- const configFileContents = options.next ? configFile.replaceAll("alinea/core", "alinea/next") : configFile;
68
+ const isNext = options.next ?? false;
69
+ const configFileContents = isNext ? configFile.replaceAll("alinea/core", "alinea/next") : configFile;
69
70
  const hasSrcDir = await fs.access(path.join(cwd, "src")).then(
70
71
  () => true,
71
72
  () => false
72
73
  );
73
- const configFileLocation = path.join(cwd, hasSrcDir ? "src/cms.ts" : "cms.ts");
74
+ const installInto = hasSrcDir ? path.join(cwd, "src") : cwd;
75
+ const configFileLocation = path.join(installInto, "cms.ts");
74
76
  await fs.writeFile(configFileLocation, configFileContents);
77
+ if (isNext) {
78
+ const handlerFile = await fs.readFile(
79
+ path.join(__dirname, "static/init/next-handler.js"),
80
+ "utf-8"
81
+ );
82
+ const routeLocation = path.join(
83
+ installInto,
84
+ "app/(alinea)/api/cms/route.ts"
85
+ );
86
+ await fs.mkdir(path.dirname(routeLocation), { recursive: true });
87
+ await fs.writeFile(routeLocation, handlerFile);
88
+ }
75
89
  const command = `${runner} alinea dev`;
76
90
  if (!quiet)
77
91
  console.info(
package/dist/cli/Serve.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "../chunks/chunk-OO7VJEA4.js";
3
+ } from "../chunks/chunk-MFIAKJZR.js";
4
4
  import "../chunks/chunk-NZLE2WMY.js";
5
5
 
6
6
  // src/cli/Serve.ts
package/dist/cli/bin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "../chunks/chunk-OO7VJEA4.js";
3
+ } from "../chunks/chunk-MFIAKJZR.js";
4
4
  import "../chunks/chunk-NZLE2WMY.js";
5
5
 
6
6
  // node_modules/mri/lib/index.mjs
@@ -222,18 +222,22 @@ var lib_default2 = (e, t2) => new o(e, t2);
222
222
 
223
223
  // src/cli/bin.ts
224
224
  import { ensureEnv } from "./util/EnsureEnv.js";
225
+ import { ensureLibs } from "./util/EnsureLibs.js";
225
226
  import { ensureNode } from "./util/EnsureNode.js";
226
- import { ensureReact } from "./util/EnsureReact.js";
227
227
  import { forwardCommand } from "./util/ForwardCommand.js";
228
228
  var prog = lib_default2("alinea");
229
- prog.version(package_default.version).command("init").describe("Copy a sample config file to the current directory").option("--next", "Configure for Next.js").action(async (args) => {
229
+ var libs = {
230
+ react: "18.0.0",
231
+ "react-dom": "18.0.0"
232
+ };
233
+ prog.version(package_default.version).command("init").describe("Initialize a new Alinea project in the current directory").action(async (args) => {
230
234
  ensureNode();
231
- ensureReact();
235
+ ensureLibs(libs);
232
236
  const { init } = await import("./Init.js");
233
237
  return init(args);
234
238
  }).command("dev").alias("serve").describe("Start a development dashboard").option("-c, --config", "Config file location").option("-d, --dir", "Root directory of the project").option("-p, --port", "Port to listen on").option("-b, --base", "Base URL for previews").option("--production", "Use production backend").option("--dev", "Watch alinea sources").action(async (args) => {
235
239
  ensureNode();
236
- ensureReact();
240
+ ensureLibs(libs);
237
241
  ensureEnv(args.dir);
238
242
  process.env.NODE_ENV = args.production ? "production" : "development";
239
243
  const { serve } = await import("./Serve.js");
@@ -251,7 +255,7 @@ prog.version(package_default.version).command("init").describe("Copy a sample co
251
255
  "Any missing or incorrect properties will be overwritten by their default"
252
256
  ).action(async (args) => {
253
257
  ensureNode();
254
- ensureReact();
258
+ ensureLibs(libs);
255
259
  ensureEnv(args.dir);
256
260
  process.env.NODE_ENV = "production";
257
261
  if (args.fix) {
@@ -1,35 +1,47 @@
1
- import {Config, Field} from 'alinea'
2
- import {createCMS} from 'alinea/core'
3
-
4
- const Page = Config.type('Page', {
5
- fields: {
6
- title: Field.text('Title'),
7
- path: Field.path('Path')
8
- }
9
- })
10
-
11
- export const cms = createCMS({
12
- schema: {
13
- Page
14
- },
15
- workspaces: {
16
- main: Config.workspace('Example', {
17
- source: 'content',
18
- mediaDir: 'public',
19
- roots: {
20
- pages: Config.root('Example site', {
21
- contains: ['Page'],
22
- children: {
23
- welcome: Config.page({
24
- type: Page,
25
- fields: {
26
- title: 'Welcome'
27
- }
28
- })
29
- }
30
- }),
31
- media: Config.media()
32
- }
33
- })
34
- }
35
- })
1
+ import {Config, Field} from 'alinea'
2
+ import {createCMS} from 'alinea/core'
3
+
4
+ // Create types for your CMS schema
5
+ const Page = Config.type('Page', {
6
+ fields: {
7
+ title: Field.text('Title'),
8
+ path: Field.path('Path')
9
+ }
10
+ })
11
+
12
+ export const cms = createCMS({
13
+ // List out available types in your schema
14
+ schema: {
15
+ Page
16
+ },
17
+
18
+ // Define the content structure of your CMS
19
+ workspaces: {
20
+ main: Config.workspace('Example', {
21
+ source: 'content',
22
+ mediaDir: 'public/media',
23
+ roots: {
24
+ pages: Config.root('Example site', {
25
+ contains: ['Page']
26
+ }),
27
+ media: Config.media()
28
+ }
29
+ })
30
+ },
31
+
32
+ baseUrl: {
33
+ // Point to your local website
34
+ development: 'http://localhost:3000',
35
+ // The production URL of your website
36
+ production: process.env.VERCEL_URL ?? 'https://example.com'
37
+ },
38
+
39
+ // Enable live previews after adding <cms.previews widget /> to your layout
40
+ // preview: true,
41
+
42
+ // The handler route URL
43
+ handlerUrl: '/api/cms',
44
+
45
+ // The admin dashboard will be bundled in this static file
46
+ dashboardFile: 'admin.html'
47
+ })
@@ -0,0 +1,8 @@
1
+ import {createHandler} from 'alinea/next'
2
+ import {cms} from '@/cms'
3
+
4
+ // This handler will respond to API request of the dashboard
5
+ const handler = createHandler({cms})
6
+
7
+ export const GET = handler
8
+ export const POST = handler
@@ -0,0 +1 @@
1
+ export declare function ensureLibs(libs: Record<string, string>): void;
@@ -3,15 +3,16 @@ import {
3
3
  } from "../../chunks/chunk-5RKITIG5.js";
4
4
  import "../../chunks/chunk-NZLE2WMY.js";
5
5
 
6
- // src/cli/util/EnsureReact.ts
7
- import { outcome } from "alinea/core/Outcome";
6
+ // src/cli/util/EnsureLibs.ts
8
7
  import fs from "node:fs";
9
8
  import { createRequire } from "node:module";
10
9
  import path from "node:path";
10
+ import { outcome } from "alinea/core/Outcome";
11
+ import { reportFatal } from "./Report.js";
11
12
  var require2 = createRequire(import.meta.url);
12
- function ensureReact() {
13
+ function ensureLibs(libs) {
13
14
  function fail(message) {
14
- console.error(message);
15
+ reportFatal(message);
15
16
  process.exit(1);
16
17
  }
17
18
  function ensurePackage(pkg, minVersion) {
@@ -35,9 +36,12 @@ You can install it with: npm i ${pkg}`
35
36
  `
36
37
  );
37
38
  }
39
+ for (const [pkg, minVersion] of Object.entries(libs)) {
40
+ ensurePackage(pkg, minVersion);
41
+ }
38
42
  ensurePackage("react", "18.0.0");
39
43
  ensurePackage("react-dom", "18.0.0");
40
44
  }
41
45
  export {
42
- ensureReact
46
+ ensureLibs
43
47
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "../chunks/chunk-OO7VJEA4.js";
3
+ } from "../chunks/chunk-MFIAKJZR.js";
4
4
  import {
5
5
  PLazy
6
6
  } from "../chunks/chunk-IKINPSS5.js";
@@ -39,7 +39,7 @@ function CloudAuthView({ setSession }) {
39
39
  /* @__PURE__ */ jsxs(Typo.P, { children: [
40
40
  "Alinea requires a",
41
41
  " ",
42
- /* @__PURE__ */ jsx(Typo.Link, { href: "https://alinea.sh/docs/deploy", target: "_blank", children: "handler" }),
42
+ /* @__PURE__ */ jsx(Typo.Link, { href: "https://alineacms.com/docs/deploy", target: "_blank", children: "handler" }),
43
43
  " ",
44
44
  "to continue."
45
45
  ] })
@@ -81,7 +81,7 @@ function CloudAuthView({ setSession }) {
81
81
  /* @__PURE__ */ jsx(
82
82
  Typo.Link,
83
83
  {
84
- href: "https://alinea.sh/docs/deploy",
84
+ href: "https://alineacms.com/docs/deploy",
85
85
  target: "_blank",
86
86
  children: /* @__PURE__ */ jsx("span", { children: "fully configure a custom backend" })
87
87
  }
@@ -2,14 +2,15 @@ import type { Expand, UnionOfValues } from 'alinea/core/util/Types';
2
2
  import type { EntryFields } from './EntryFields.js';
3
3
  import type { Expr } from './Expr.js';
4
4
  import type { Field } from './Field.js';
5
- import type { Type } from './Type.js';
5
+ import type { InferProjection } from './Graph.js';
6
6
  import type { ListRow } from './shape/ListShape.js';
7
+ import type { Type } from './Type.js';
7
8
  type QueryList<T> = Expand<UnionOfValues<{
8
9
  [K in keyof T]: {
9
10
  _type: K;
10
11
  } & Type.Infer<T[K]>;
11
12
  }>>;
12
- export type InferQueryValue<T> = T extends Array<Type<infer X>> ? InferQueryValue<X> : T extends Type<infer Fields> ? Type.Infer<Fields> : T extends Expr<infer QueryValue> ? QueryValue : T extends Record<string, Type> ? QueryList<T> : never;
13
+ export type InferQueryValue<T> = T extends Array<Type<infer X>> ? InferQueryValue<X> : T extends Type<infer Fields> ? Type.Infer<Fields> : T extends Expr<infer QueryValue> ? QueryValue : T extends Record<string, Type> ? QueryList<T> : InferProjection<T>;
13
14
  type StoredList<T> = Expand<UnionOfValues<{
14
15
  [K in keyof T]: {
15
16
  _type: K;
@@ -4,6 +4,7 @@ import {
4
4
  import "../../chunks/chunk-NZLE2WMY.js";
5
5
 
6
6
  // src/core/source/GithubSource.ts
7
+ import * as paths from "alinea/core/util/Paths";
7
8
  import { HttpError } from "../HttpError.js";
8
9
  import { ReadonlyTree } from "./Tree.js";
9
10
  import { assert } from "./Utils.js";
@@ -16,9 +17,7 @@ var GithubSource = class {
16
17
  }
17
18
  get contentLocation() {
18
19
  const { contentDir, rootDir } = this.#options;
19
- if (contentDir.startsWith("/")) return contentDir.slice(1);
20
- if (rootDir.endsWith("/")) return rootDir + contentDir;
21
- return `${rootDir}/${contentDir}`;
20
+ return paths.join(rootDir, contentDir);
22
21
  }
23
22
  async getTree() {
24
23
  const current = this.#current;
@@ -9,7 +9,7 @@ function Welcome() {
9
9
  /* @__PURE__ */ jsx(
10
10
  Typo.Link,
11
11
  {
12
- href: "https://alinea.sh/docs/configuration/intro",
12
+ href: "https://alineacms.com/docs/configuration/intro",
13
13
  target: "_blank",
14
14
  children: "Learn how to configure"
15
15
  }
@@ -1297,7 +1297,8 @@ function EntryTree({ selectedId, expanded = [] }) {
1297
1297
  const customClickBehavior = useMemo(() => {
1298
1298
  return {
1299
1299
  itemInstance: {
1300
- getProps: ({ item }) => ({
1300
+ getProps: ({ item, prev }) => ({
1301
+ ...prev?.(),
1301
1302
  onClick: (e) => {
1302
1303
  if (item.isSelected() && item.isFolder() && item.isExpanded()) {
1303
1304
  item.collapse();
@@ -1324,6 +1325,9 @@ function EntryTree({ selectedId, expanded = [] }) {
1324
1325
  dataLoader: treeProvider,
1325
1326
  getItemName: (item) => selectedEntry(locale, item.getItemData()).title,
1326
1327
  isItemFolder: (item) => Boolean(item.getItemData().isFolder),
1328
+ onPrimaryAction: (item) => {
1329
+ navigate(nav.entry({ id: item.getId() }));
1330
+ },
1327
1331
  initialState: {
1328
1332
  expandedItems: [...expanded].concat(selectedId ?? [])
1329
1333
  },
@@ -1,9 +1,9 @@
1
1
  import type { FieldOptions, WithoutLabel } from 'alinea/core/Field';
2
- import type { EdgeQuery, GraphQuery, IncludeGuard, SelectionGuard, TypeGuard } from 'alinea/core/Graph';
3
- import type { Picker } from 'alinea/core/Picker';
4
- import { Reference } from 'alinea/core/Reference';
5
2
  import { ListField } from 'alinea/core/field/ListField';
6
3
  import { UnionField } from 'alinea/core/field/UnionField';
4
+ import type { EdgeEntries, EdgeEntry, GraphQuery, IncludeGuard, SelectionGuard, TypeGuard } from 'alinea/core/Graph';
5
+ import type { Picker } from 'alinea/core/Picker';
6
+ import { Reference } from 'alinea/core/Reference';
7
7
  import { ListRow } from 'alinea/core/shape/ListShape';
8
8
  import type { ReactNode } from 'react';
9
9
  /** Optional settings to configure a link field */
@@ -20,18 +20,18 @@ export interface LinkOptions<Value> extends LinkFieldOptions<Value> {
20
20
  pickers: Record<string, Picker<any, any>>;
21
21
  }
22
22
  export declare class LinkField<StoredValue extends Reference, QueryValue> extends UnionField<StoredValue, QueryValue, LinkOptions<StoredValue>> {
23
- first<Selection extends SelectionGuard = undefined, const Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query: GraphQuery<Selection, Type, Include>): EdgeQuery<Selection, Type, Include> & {
23
+ first<Selection extends SelectionGuard = undefined, const Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query: GraphQuery<Selection, Type, Include>): GraphQuery<Selection, Type, Include> & EdgeEntry & {
24
24
  first: true;
25
25
  };
26
26
  }
27
27
  export declare function createLink<StoredValue extends Reference, QueryValue>(label: string, options: WithoutLabel<LinkOptions<StoredValue>>): LinkField<StoredValue, QueryValue>;
28
28
  /** Internal representation of a link field */
29
29
  export declare class LinksField<StoredValue extends ListRow, QueryValue> extends ListField<StoredValue, QueryValue, LinkOptions<Array<StoredValue>>> {
30
- find<Selection extends SelectionGuard = undefined, Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query: GraphQuery<Selection, Type, Include>): EdgeQuery<Selection, Type, Include>;
31
- first<Selection extends SelectionGuard = undefined, const Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query?: GraphQuery<Selection, Type, Include>): EdgeQuery<Selection, Type, Include> & {
30
+ find<Selection extends SelectionGuard = undefined, Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query: GraphQuery<Selection, Type, Include>): GraphQuery<Selection, Type, Include> & EdgeEntries;
31
+ first<Selection extends SelectionGuard = undefined, const Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query?: GraphQuery<Selection, Type, Include>): GraphQuery<Selection, Type, Include> & EdgeEntries & {
32
32
  first: true;
33
33
  };
34
- count<Selection extends SelectionGuard = undefined, const Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query?: GraphQuery<Selection, Type, Include>): EdgeQuery<Selection, Type, Include> & {
34
+ count<Selection extends SelectionGuard = undefined, const Type extends TypeGuard = undefined, Include extends IncludeGuard = undefined>(query?: GraphQuery<Selection, Type, Include>): GraphQuery<Selection, Type, Include> & EdgeEntries & {
35
35
  count: true;
36
36
  };
37
37
  }
@@ -1,9 +1,9 @@
1
1
  import "../../chunks/chunk-NZLE2WMY.js";
2
2
 
3
3
  // src/field/link/LinkField.ts
4
- import { Reference } from "alinea/core/Reference";
5
4
  import { ListField } from "alinea/core/field/ListField";
6
5
  import { UnionField } from "alinea/core/field/UnionField";
6
+ import { Reference } from "alinea/core/Reference";
7
7
  import { ListRow } from "alinea/core/shape/ListShape";
8
8
  import { entries, fromEntries } from "alinea/core/util/Objects";
9
9
  import { viewKeys } from "alinea/dashboard/editor/ViewKeys";
package/dist/test/cms.js CHANGED
@@ -26,7 +26,7 @@ var cms = createCMS({
26
26
  schema,
27
27
  workspaces: { demo },
28
28
  baseUrl: {
29
- production: process.env.VERCEL_URL ?? "alinea.sh",
29
+ production: process.env.VERCEL_URL ?? "alineacms.com",
30
30
  development: "http://localhost:3000"
31
31
  },
32
32
  handlerUrl: "/api/cms",
@@ -0,0 +1,2 @@
1
+ import type { SVGProps } from 'react';
2
+ export declare function IcRoundAccountTree(props: SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import "../../chunks/chunk-NZLE2WMY.js";
2
+
3
+ // src/ui/icons/IcRoundAccountTree.tsx
4
+ import { jsx } from "react/jsx-runtime";
5
+ function IcRoundAccountTree(props) {
6
+ return /* @__PURE__ */ jsx(
7
+ "svg",
8
+ {
9
+ xmlns: "http://www.w3.org/2000/svg",
10
+ width: "1em",
11
+ height: "1em",
12
+ viewBox: "0 0 24 24",
13
+ ...props,
14
+ children: /* @__PURE__ */ jsx(
15
+ "path",
16
+ {
17
+ fill: "currentColor",
18
+ d: "M17 11h3a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2h-3a2 2 0 0 0-2 2v1H9.01V5a2 2 0 0 0-2-2H4c-1.1 0-2 .9-2 2v4a2 2 0 0 0 2 2h3a2 2 0 0 0 2-2V8h2v7.01c0 1.65 1.34 2.99 2.99 2.99H15v1a2 2 0 0 0 2 2h3a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-3a2 2 0 0 0-2 2v1h-1.01c-.54 0-.99-.45-.99-.99V8h2v1c0 1.1.9 2 2 2"
19
+ }
20
+ )
21
+ }
22
+ );
23
+ }
24
+ export {
25
+ IcRoundAccountTree
26
+ };
@@ -0,0 +1,2 @@
1
+ import type { SVGProps } from 'react';
2
+ export declare function IcRoundChevronRight(props: SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import "../../chunks/chunk-NZLE2WMY.js";
2
+
3
+ // src/ui/icons/IcRoundChevronRight.tsx
4
+ import { jsx } from "react/jsx-runtime";
5
+ function IcRoundChevronRight(props) {
6
+ return /* @__PURE__ */ jsx(
7
+ "svg",
8
+ {
9
+ xmlns: "http://www.w3.org/2000/svg",
10
+ width: "1em",
11
+ height: "1em",
12
+ viewBox: "0 0 24 24",
13
+ ...props,
14
+ children: /* @__PURE__ */ jsx(
15
+ "path",
16
+ {
17
+ fill: "currentColor",
18
+ d: "M9.29 6.71a.996.996 0 0 0 0 1.41L13.17 12l-3.88 3.88a.996.996 0 1 0 1.41 1.41l4.59-4.59a.996.996 0 0 0 0-1.41L10.7 6.7c-.38-.38-1.02-.38-1.41.01"
19
+ }
20
+ )
21
+ }
22
+ );
23
+ }
24
+ export {
25
+ IcRoundChevronRight
26
+ };
@@ -1,3 +1,2 @@
1
1
  import type { SVGProps } from 'react';
2
2
  export declare function MdiTwitterCircle(props: SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
3
- export default MdiTwitterCircle;
@@ -3,16 +3,24 @@ import "../../chunks/chunk-NZLE2WMY.js";
3
3
  // src/ui/icons/MdiTwitterCircle.tsx
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  function MdiTwitterCircle(props) {
6
- return /* @__PURE__ */ jsx("svg", { width: "1em", height: "1em", viewBox: "0 0 24 24", ...props, children: /* @__PURE__ */ jsx(
7
- "path",
6
+ return /* @__PURE__ */ jsx(
7
+ "svg",
8
8
  {
9
- d: "M17.71 9.33c.48-.4 1.04-.88 1.29-1.41c-.41.21-.9.34-1.44.41c.5-.36.91-.83 1.12-1.47c-.52.28-1.05.52-1.71.64c-1.55-1.87-5.26-.35-4.6 2.45c-2.61-.16-4.2-1.34-5.52-2.79c-.75 1.22-.1 3.07.79 3.58c-.46-.03-.81-.17-1.14-.33c.04 1.54.89 2.28 2.08 2.68c-.36.07-.76.09-1.14.03c.37 1.07 1.14 1.74 2.46 1.88c-.9.76-2.56 1.29-3.9 1.08c1.15.73 2.46 1.31 4.28 1.23c4.41-.2 7.36-3.36 7.43-7.98M12 2a10 10 0 0 1 10 10a10 10 0 0 1-10 10A10 10 0 0 1 2 12A10 10 0 0 1 12 2z",
10
- fill: "currentColor"
9
+ xmlns: "http://www.w3.org/2000/svg",
10
+ width: "0.88em",
11
+ height: "1em",
12
+ viewBox: "0 0 448 512",
13
+ ...props,
14
+ children: /* @__PURE__ */ jsx(
15
+ "path",
16
+ {
17
+ fill: "currentColor",
18
+ d: "M64 32C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zm297.1 84L257.3 234.6L379.4 396h-95.6L209 298.1L123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5l78.2-89.5zm-37.8 251.6L153.4 142.9h-28.3l171.8 224.7h26.3z"
19
+ }
20
+ )
11
21
  }
12
- ) });
22
+ );
13
23
  }
14
- var MdiTwitterCircle_default = MdiTwitterCircle;
15
24
  export {
16
- MdiTwitterCircle,
17
- MdiTwitterCircle_default as default
25
+ MdiTwitterCircle
18
26
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "bin": "./dist/cli.js",
3
3
  "name": "alinea",
4
- "version": "1.4.0",
4
+ "version": "1.4.2",
5
5
  "description": "Headless git-based CMS",
6
6
  "repository": {
7
7
  "type": "git",
@@ -38,7 +38,8 @@
38
38
  ],
39
39
  "dependencies": {
40
40
  "@alinea/iso": "^0.3.3",
41
- "esbuild": "^0.25.4"
41
+ "esbuild": "^0.25.4",
42
+ "next": "^15.3.5"
42
43
  },
43
44
  "peerDependencies": {
44
45
  "react": "*",
package/readme.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [![npm](https://img.shields.io/npm/v/alinea.svg)](https://npmjs.org/package/alinea)
2
2
  [![install size](https://packagephobia.com/badge?p=alinea)](https://packagephobia.com/result?p=alinea)
3
3
 
4
- # [![Alinea CMS logo](https://github.com/alineacms/alinea/raw/HEAD/apps/web/public/logo.svg)](https://alinea.sh)
4
+ # [![Alinea CMS logo](https://github.com/alineacms/alinea/raw/HEAD/apps/web/public/logo.svg)](https://alineacms.com)
5
5
 
6
6
  Alinea is a modern content management system.
7
7
 
@@ -29,7 +29,7 @@ Open the dashboard to have a look around
29
29
  npx alinea dev
30
30
  ```
31
31
 
32
- [Start configuring types and fields →](https://alinea.sh/docs/configuration)
32
+ [Start configuring types and fields →](https://alineacms.com/docs/configuration)
33
33
 
34
34
  ## Configure
35
35
 
@@ -50,7 +50,7 @@ const Blog = Config.document('Blog', {
50
50
  })
51
51
  ```
52
52
 
53
- [Type options and fields →](https://alinea.sh/docs/configuration)
53
+ [Type options and fields →](https://alineacms.com/docs/configuration)
54
54
 
55
55
  ## Query
56
56
 
@@ -76,18 +76,18 @@ console.log(
76
76
  )
77
77
  ```
78
78
 
79
- [See the full api →](https://alinea.sh/docs/content/query)
79
+ [See the full api →](https://alineacms.com/docs/content/query)
80
80
 
81
81
  Content is available during static site generation and when server side querying.
82
82
  Content is bundled with your code and can be queried with zero network overhead.
83
83
 
84
- [How alinea bundles content →](https://alinea.sh/docs/content)
84
+ [How alinea bundles content →](https://alineacms.com/docs/content)
85
85
 
86
86
  ## Deploy anywhere
87
87
 
88
88
  Alinea supports custom backends that can be hosted as a simple Node.js process or on serverless runtimes.
89
89
 
90
- [Setup your backend →](https://alinea.sh/docs/deploy)
90
+ [Setup your backend →](https://alineacms.com/docs/deploy)
91
91
 
92
92
  ## How to contribute to this project
93
93
 
package/dist/.init/cms.ts DELETED
@@ -1,35 +0,0 @@
1
- import {Config, Field} from 'alinea'
2
- import {createCMS} from 'alinea/next'
3
-
4
- const Page = Config.type('Page', {
5
- fields: {
6
- title: Field.text('Title'),
7
- path: Field.path('Path')
8
- }
9
- })
10
-
11
- export const cms = createCMS({
12
- schema: {
13
- Page
14
- },
15
- workspaces: {
16
- main: Config.workspace('Example', {
17
- source: 'content',
18
- mediaDir: 'public',
19
- roots: {
20
- pages: Config.root('Example site', {
21
- contains: ['Page'],
22
- children: {
23
- welcome: Config.page({
24
- type: Page,
25
- fields: {
26
- title: 'Welcome'
27
- }
28
- })
29
- }
30
- }),
31
- media: Config.media()
32
- }
33
- })
34
- }
35
- })
@@ -1 +0,0 @@
1
- export declare function ensureReact(): void;