@earlyseo/blog 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +111 -0
- package/README.md +10 -16
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -9
- package/dist/client.js.map +1 -1
- package/dist/next/blog-post-page.d.ts +1 -1
- package/dist/next/blog-post-page.d.ts.map +1 -1
- package/dist/react/blog-list.d.ts.map +1 -1
- package/dist/react/blog-list.js +1 -1
- package/dist/react/blog-list.js.map +1 -1
- package/dist/react/blog-post.d.ts.map +1 -1
- package/dist/react/blog-post.js +1 -1
- package/dist/react/blog-post.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -8
- package/dist/types.js.map +1 -1
- package/package.json +3 -2
- package/src/cli/init.mjs +8 -5
package/LICENSE
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
EarlySEO SaaS Commercial License (Version 1.0)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 EarlySEO
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
DEFINITIONS
|
|
7
|
+
"Software" means the source code, object code, binaries, documentation, data
|
|
8
|
+
files, and any updates or modifications provided by EarlySEO.
|
|
9
|
+
|
|
10
|
+
"Licensee" means you or the entity on whose behalf you accept this License.
|
|
11
|
+
|
|
12
|
+
"Free Trial Period" means the initial period specified in your account
|
|
13
|
+
(typically 14 days), during which you may use the Software at no charge for
|
|
14
|
+
evaluation purposes.
|
|
15
|
+
|
|
16
|
+
"Commercial Use" means use of the Software for business purposes, whether or
|
|
17
|
+
not you receive compensation. This includes use as part of a SaaS offering,
|
|
18
|
+
API service, commercial product, or any revenue-generating application.
|
|
19
|
+
|
|
20
|
+
GRANT OF LICENSE
|
|
21
|
+
Subject to the terms and conditions of this License, EarlySEO grants you a
|
|
22
|
+
limited, non-exclusive, non-transferable license to:
|
|
23
|
+
|
|
24
|
+
1. Use and run the Software for Commercial Use.
|
|
25
|
+
2. Integrate the Software into your products and services.
|
|
26
|
+
3. Use the Software during the Free Trial Period at no cost.
|
|
27
|
+
4. Continue using the Software after the Free Trial Period, subject to
|
|
28
|
+
payment of applicable subscription fees.
|
|
29
|
+
|
|
30
|
+
FREE TRIAL TERMS
|
|
31
|
+
- The Free Trial Period begins upon first access and expires at the end of
|
|
32
|
+
the specified trial duration.
|
|
33
|
+
- During the Free Trial Period, you may use the Software without charge for
|
|
34
|
+
commercial evaluation.
|
|
35
|
+
- At the end of the Free Trial Period, you must subscribe to a paid plan to
|
|
36
|
+
continue using the Software. No data will be deleted during or immediately
|
|
37
|
+
after the Free Trial Period, but access may be restricted until a valid
|
|
38
|
+
subscription is active.
|
|
39
|
+
- One Free Trial Period per entity is permitted unless otherwise agreed in
|
|
40
|
+
writing.
|
|
41
|
+
|
|
42
|
+
PERMITTED USES
|
|
43
|
+
- Integrate and use the Software in your SaaS platform or products.
|
|
44
|
+
- Make internal copies for backup and archival purposes.
|
|
45
|
+
- Use the Software to provide services to your end customers.
|
|
46
|
+
- Sublicense the Software to your end-users under the restrictions in this
|
|
47
|
+
License, provided they are bound by the same restrictions.
|
|
48
|
+
|
|
49
|
+
PROHIBITED USES
|
|
50
|
+
- You may not reverse engineer, decompile, disassemble, or attempt to derive
|
|
51
|
+
the source code of the Software, except to the extent required by applicable
|
|
52
|
+
law.
|
|
53
|
+
- You may not remove, obscure, or alter any copyright, patent, trademark,
|
|
54
|
+
license notices, or other proprietary notices in the Software.
|
|
55
|
+
- You may not redistribute the Software's source code as a standalone product
|
|
56
|
+
or service.
|
|
57
|
+
- You may not use the Software to develop competing products or services
|
|
58
|
+
without a separate written agreement.
|
|
59
|
+
- You may not rent, lease, sell, sublicense, or distribute the Software
|
|
60
|
+
separately without authorization.
|
|
61
|
+
|
|
62
|
+
USAGE RESTRICTIONS
|
|
63
|
+
- The Software is licensed as-is for your business needs. Usage limits,
|
|
64
|
+
query rates, and feature tiers are defined in your subscription plan.
|
|
65
|
+
- Exceeding defined usage limits may result in service suspension.
|
|
66
|
+
|
|
67
|
+
INTELLECTUAL PROPERTY
|
|
68
|
+
EarlySEO retains all ownership, title, and intellectual property rights in
|
|
69
|
+
the Software. You acquire no ownership rights, only a limited license to use.
|
|
70
|
+
Trademarks, logos, and brand names are the exclusive property of EarlySEO.
|
|
71
|
+
|
|
72
|
+
FEES AND PAYMENT
|
|
73
|
+
Subscription fees are due according to your selected plan. Failure to pay may
|
|
74
|
+
result in suspension or termination of service. You are responsible for all
|
|
75
|
+
applicable taxes.
|
|
76
|
+
|
|
77
|
+
TERMINATION
|
|
78
|
+
- This License remains in effect until terminated.
|
|
79
|
+
- EarlySEO may terminate this License immediately if you violate any material
|
|
80
|
+
term of this License.
|
|
81
|
+
- Upon termination, you must cease use of the Software and delete all copies
|
|
82
|
+
in your possession.
|
|
83
|
+
- Sections on Intellectual Property, Limitation of Liability, and Indemnity
|
|
84
|
+
survive termination.
|
|
85
|
+
|
|
86
|
+
DISCLAIMER OF WARRANTIES
|
|
87
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
88
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
89
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
|
90
|
+
|
|
91
|
+
LIMITATION OF LIABILITY
|
|
92
|
+
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL EARLYSEO
|
|
93
|
+
BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE
|
|
94
|
+
DAMAGES, OR LOSS OF PROFITS, DATA, OR REVENUE, REGARDLESS OF THE FORM OF
|
|
95
|
+
ACTION OR ON ANY THEORY OF LIABILITY, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
96
|
+
SUCH DAMAGES.
|
|
97
|
+
|
|
98
|
+
INDEMNIFICATION
|
|
99
|
+
You agree to indemnify, defend, and hold harmless EarlySEO from any third-party
|
|
100
|
+
claims arising from your use of the Software or violation of this License.
|
|
101
|
+
|
|
102
|
+
GOVERNING LAW
|
|
103
|
+
This License shall be governed by and construed under the laws of the
|
|
104
|
+
jurisdiction in which EarlySEO is incorporated, without regard to conflict of
|
|
105
|
+
law principles.
|
|
106
|
+
|
|
107
|
+
CONTACT & SUPPORT
|
|
108
|
+
For licensing inquiries, support, or to modify your plan:
|
|
109
|
+
Email: team@earlyseo.com
|
|
110
|
+
Website: https://earlyseo.com
|
|
111
|
+
Documentation: https://docs.earlyseo.com
|
package/README.md
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Drop-in blog integration for **React** & **Next.js** — powered by [EarlySEO](https://earlyseo.com).
|
|
4
4
|
|
|
5
|
-
Articles are
|
|
5
|
+
Articles are authored in the EarlySEO dashboard and rendered on your site. No database, no webhooks, no storage config — just add your **site ID** and go.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
- **Paginated** — Pre-built paginated
|
|
9
|
+
- **Zero infrastructure** — Articles are managed by EarlySEO. Nothing to host or maintain.
|
|
10
|
+
- **Paginated** — Pre-built paginated data. No DB queries per visitor.
|
|
11
11
|
- **Next.js App Router** — Drop-in server components for `/blog` and `/blog/[slug]`
|
|
12
12
|
- **React hooks** — `useArticles()` and `useArticle(slug)` for custom UIs
|
|
13
13
|
- **Full SEO** — Open Graph, Twitter cards, meta descriptions, canonical URLs
|
|
@@ -75,24 +75,18 @@ export default createBlogPostPage({ siteId });
|
|
|
75
75
|
export const generateMetadata = createBlogPostMetadata({ siteId, siteName: "My Site" });
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
That's it! Articles published from EarlySEO automatically appear on your blog
|
|
78
|
+
That's it! Articles published from EarlySEO automatically appear on your blog.
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
|
82
82
|
## How It Works
|
|
83
83
|
|
|
84
|
-
When you publish an article in [EarlySEO](https://earlyseo.com),
|
|
84
|
+
When you publish an article in [EarlySEO](https://earlyseo.com), it becomes instantly available to your site via the SDK.
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
media.earlyseo.com/site/{siteId}/manifest.json → Total pages, version
|
|
88
|
-
media.earlyseo.com/site/{siteId}/articles/page-1.json → Paginated article list
|
|
89
|
-
media.earlyseo.com/site/{siteId}/article/my-slug.json → Full article content
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Your site reads from these JSON files — **no database, no API calls, no webhook handlers**.
|
|
86
|
+
The SDK fetches article data at request time — **no database, no API keys, no webhook handlers**.
|
|
93
87
|
|
|
94
|
-
Only the affected
|
|
95
|
-
- The individual article
|
|
88
|
+
Only the affected data is updated on each publish:
|
|
89
|
+
- The individual article
|
|
96
90
|
- The paginated list pages
|
|
97
91
|
- The manifest
|
|
98
92
|
|
|
@@ -182,7 +176,7 @@ Override the default card in the blog list:
|
|
|
182
176
|
|
|
183
177
|
---
|
|
184
178
|
|
|
185
|
-
##
|
|
179
|
+
## Client
|
|
186
180
|
|
|
187
181
|
Use `EarlySeoClient` directly for full control:
|
|
188
182
|
|
|
@@ -301,4 +295,4 @@ interface Article {
|
|
|
301
295
|
|
|
302
296
|
## License
|
|
303
297
|
|
|
304
|
-
|
|
298
|
+
Proprietary — see [LICENSE](./LICENSE) for details.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,OAAO,EACb,MAAM,SAAS,CAAC;AAEjB,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAAc;gBAEnB,MAAM,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,WAAW;IAQ3D,gCAAgC;IAChC,WAAW,IAAI,MAAM;IAIrB,wDAAwD;IACxD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIjC,2CAA2C;IAC3C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOhC,oDAAoD;IAC9C,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAI7C,4EAA4E;IACtE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAKhE,2DAA2D;IACrD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAMzC,SAAS;CAcxB"}
|
package/dist/client.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
// @earlyseo/blog —
|
|
2
|
+
// @earlyseo/blog — Client
|
|
3
3
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
// Thin read-only client that fetches pre-built
|
|
5
|
-
// All writes happen server-side in our worker — users never write.
|
|
6
|
-
//
|
|
7
|
-
// CDN layout:
|
|
8
|
-
// /site/{siteId}/manifest.json → Manifest
|
|
9
|
-
// /site/{siteId}/articles/page-{n}.json → ArticleListPage
|
|
10
|
-
// /site/{siteId}/article/{slug}.json → Article
|
|
4
|
+
// Thin read-only client that fetches pre-built article data from EarlySEO.
|
|
11
5
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
12
6
|
import { DEFAULT_CDN_BASE_URL, } from "./types";
|
|
13
7
|
export class EarlySeoClient {
|
|
@@ -57,7 +51,7 @@ export class EarlySeoClient {
|
|
|
57
51
|
if (res.status === 404)
|
|
58
52
|
return null;
|
|
59
53
|
if (!res.ok) {
|
|
60
|
-
throw new Error(`EarlySEO
|
|
54
|
+
throw new Error(`EarlySEO fetch error: ${res.status} ${res.statusText} for ${url}`);
|
|
61
55
|
}
|
|
62
56
|
return res.json();
|
|
63
57
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;AAEhF,OAAO,EACL,oBAAoB,GAKrB,MAAM,SAAS,CAAC;AAEjB,MAAM,OAAO,cAAc;IAMzB,YAAY,MAAsB,EAAE,SAAuB;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,oBAAoB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,0EAA0E;IAE1E,gCAAgC;IAChC,WAAW;QACT,OAAO,GAAG,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,MAAM,gBAAgB,CAAC;IAC7D,CAAC;IAED,wDAAwD;IACxD,WAAW,CAAC,IAAY;QACtB,OAAO,GAAG,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,MAAM,kBAAkB,IAAI,OAAO,CAAC;IAC1E,CAAC;IAED,2CAA2C;IAC3C,UAAU,CAAC,IAAY;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QAClD,OAAO,GAAG,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,MAAM,YAAY,IAAI,OAAO,CAAC;IACpE,CAAC;IAED,0EAA0E;IAE1E,oDAAoD;IACpD,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,SAAS,CAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAkB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,0EAA0E;IAElE,KAAK,CAAC,SAAS,CAAI,GAAW;QACpC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,GAAG,IAAI,CAAC,SAAS;YACjB,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,GAAG,CAAE,IAAI,CAAC,SAAS,CAAC,OAAkC,IAAI,EAAE,CAAC;aAC9D;SACF,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,QAAQ,GAAG,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -31,7 +31,7 @@ export declare function createBlogPostPage(options: BlogPostPageOptions): ({ par
|
|
|
31
31
|
params: Promise<{
|
|
32
32
|
slug: string;
|
|
33
33
|
}>;
|
|
34
|
-
}) => Promise<string | number |
|
|
34
|
+
}) => Promise<string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined>;
|
|
35
35
|
/**
|
|
36
36
|
* Creates a generateMetadata function for the /blog/[slug] page.
|
|
37
37
|
* Provides full SEO metadata including Open Graph and Twitter cards.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-post-page.d.ts","sourceRoot":"","sources":["../../src/next/blog-post-page.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,KAAK,KAAK,CAAC,SAAS,CAAC;CACvB;AAcD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,IAY1B,aAEhC;IACD,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnC,
|
|
1
|
+
{"version":3,"file":"blog-post-page.d.ts","sourceRoot":"","sources":["../../src/next/blog-post-page.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,KAAK,KAAK,CAAC,SAAS,CAAC;CACvB;AAcD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,IAY1B,aAEhC;IACD,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnC,iIAuEF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB,IAIwC,aAEpC;IACD,MAAM,EAAE,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnC,sCAqCF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;;;;;;;;;GAmBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-list.d.ts","sourceRoot":"","sources":["../../src/react/blog-list.tsx"],"names":[],"mappings":"AAMA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC;IACvE,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,SAAS,CAAC;IAC9B,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,SAAS,CAAC;CACjC;AA8CD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EACvB,WAAe,EACf,KAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,GACd,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"blog-list.d.ts","sourceRoot":"","sources":["../../src/react/blog-list.tsx"],"names":[],"mappings":"AAMA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC;IACvE,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,SAAS,CAAC;IAC9B,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,SAAS,CAAC;CACjC;AA8CD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EACvB,WAAe,EACf,KAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,GACd,EAAE,aAAa,2CA+Ef"}
|
package/dist/react/blog-list.js
CHANGED
|
@@ -36,7 +36,7 @@ export function BlogList({ initialPage = 1, title = "Blog", className, renderCar
|
|
|
36
36
|
const { basePath } = useEarlySeoContext();
|
|
37
37
|
const { articles, page, totalPages, totalArticles, loading, error, goToPage } = useArticles(initialPage);
|
|
38
38
|
if (loading) {
|
|
39
|
-
return renderLoading ? (_jsx(_Fragment, { children: renderLoading() })) : (_jsx("div", { className: `earlyseo-blog ${className ?? ""}`, children:
|
|
39
|
+
return renderLoading ? (_jsx(_Fragment, { children: renderLoading() })) : (_jsx("div", { className: `earlyseo-blog ${className ?? ""}`, children: _jsxs("div", { className: "earlyseo-blog-empty", style: { display: "flex", flexDirection: "column", alignItems: "center", gap: "12px", padding: "48px 0" }, children: [_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 180 180", fill: "none", style: { animation: "earlyseo-breathe 2.4s cubic-bezier(0.4,0,0.6,1) infinite" }, children: [_jsx("style", { children: `@keyframes earlyseo-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}` }), _jsx("path", { fill: "#EF7C23", d: "M42.364693,133.329758 C41.392796,134.861298 40.597309,136.087784 39.675198,137.509476 C33.533985,121.271591 44.838245,98.811195 62.395020,92.310585 C67.031685,90.593796 72.016808,89.676010 76.918999,88.847237 C88.108727,86.955429 98.445839,83.149803 107.422386,75.957596 C107.678101,76.525269 108.007172,76.954903 107.913162,77.089890 C100.002281,88.449753 97.564629,101.706169 94.278038,114.787346 C88.952194,135.985077 68.215446,147.503052 46.864868,141.367554 C53.176380,126.928833 63.449196,115.961571 75.452477,106.233643 C61.156437,111.084023 50.663979,120.578728 42.364693,133.329758z" }), _jsx("path", { fill: "#EF7C23", d: "M116.639435,62.615288 C110.973541,67.279480 105.671196,71.838364 100.109711,76.055496 C97.151794,78.298409 94.108269,80.078476 89.699669,78.911568 C86.029152,77.940033 81.897018,78.712494 77.969337,78.712494 C77.750496,78.231323 77.531647,77.750153 77.312798,77.268982 C81.188507,72.838776 84.882919,68.227379 89.034821,64.073219 C90.559677,62.547531 93.301308,61.093159 95.255005,61.353573 C101.337776,62.164345 104.368469,58.520615 107.978180,54.716625 C117.535645,44.644783 129.390427,39.418297 143.822952,39.063076 C144.191711,49.553711 141.633926,58.827564 136.400238,67.362144 C134.669617,70.184265 132.694412,72.956390 130.369064,75.291283 C126.507401,79.168808 123.169449,82.654823 123.350258,89.053139 C123.444588,92.391479 120.251602,96.258804 117.687996,99.121048 C114.765625,102.383835 110.890556,104.793320 107.120766,107.821716 C104.641510,95.934128 105.392586,85.618385 113.725861,76.535202 C119.217499,70.549385 123.832985,63.755325 128.772217,57.270947 C129.742523,55.997116 130.398621,54.483955 131.199631,53.081173 C130.860519,52.718716 130.521408,52.356262 130.182297,51.993805 C125.753273,55.451832 121.324257,58.909855 116.639435,62.615288z" })] }), _jsx("span", { style: { fontSize: "0.85rem", opacity: 0.6 }, children: "Loading articles\u2026" })] }) }));
|
|
40
40
|
}
|
|
41
41
|
if (error) {
|
|
42
42
|
return (_jsx("div", { className: `earlyseo-blog ${className ?? ""}`, children: _jsx("div", { className: "earlyseo-blog-empty", children: "Failed to load articles." }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-list.js","sourceRoot":"","sources":["../../src/react/blog-list.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,gFAAgF;AAChF,0CAA0C;AAC1C,gFAAgF;AAChF,oEAAoE;AAEpE,OAAO,KAAyB,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAkB7C,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAC/C,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAkD;IACxF,MAAM,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3C,OAAO,CACL,kBAAS,SAAS,EAAC,oBAAoB,YACrC,aAAG,IAAI,EAAE,IAAI,aACV,OAAO,CAAC,QAAQ,IAAI,CACnB,cACE,SAAS,EAAC,0BAA0B,EACpC,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,EACtC,OAAO,EAAC,MAAM,GACd,CACH,EACD,eAAK,SAAS,EAAC,yBAAyB,aACtC,aAAI,SAAS,EAAC,0BAA0B,YAAE,OAAO,CAAC,KAAK,GAAM,EAC5D,OAAO,CAAC,eAAe,IAAI,CAC1B,YAAG,SAAS,EAAC,yBAAyB,YAAE,OAAO,CAAC,eAAe,GAAK,CACrE,EACD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,YAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAQ,EACxE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACrC,eAAgB,SAAS,EAAC,mBAAmB,YAC1C,GAAG,IADK,GAAG,CAEP,CACR,CAAC,IACE,IACF,IACJ,GACI,CACX,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,WAAW,GAAG,CAAC,EACf,KAAK,GAAG,MAAM,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,GACC;IACd,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAC1C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAC3E,WAAW,CAAC,WAAW,CAAC,CAAC;IAE3B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,aAAa,CAAC,CAAC,CAAC,CACrB,4BAAG,aAAa,EAAE,GAAI,CACvB,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,iBAAiB,SAAS,IAAI,EAAE,EAAE,YAChD,
|
|
1
|
+
{"version":3,"file":"blog-list.js","sourceRoot":"","sources":["../../src/react/blog-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-post.d.ts","sourceRoot":"","sources":["../../src/react/blog-post.tsx"],"names":[],"mappings":"AAMA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC5B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC;IAChD,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,SAAS,CAAC;IACjC,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,SAAS,CAAC;IAChC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,QAAmB,EACnB,aAAa,EACb,cAAc,EACd,aAAa,EACb,QAAQ,EACR,QAA2B,GAC5B,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"blog-post.d.ts","sourceRoot":"","sources":["../../src/react/blog-post.tsx"],"names":[],"mappings":"AAMA,OAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC5B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC;IAChD,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,SAAS,CAAC;IACjC,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,SAAS,CAAC;IAChC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,QAAmB,EACnB,aAAa,EACb,cAAc,EACd,aAAa,EACb,QAAQ,EACR,QAA2B,GAC5B,EAAE,aAAa,2CA2Ef"}
|
package/dist/react/blog-post.js
CHANGED
|
@@ -27,7 +27,7 @@ export function BlogPost({ slug, className, htmlMode = "styled", renderArticle,
|
|
|
27
27
|
const { basePath } = useEarlySeoContext();
|
|
28
28
|
const { article, loading, error } = useArticle(slug);
|
|
29
29
|
if (loading) {
|
|
30
|
-
return renderLoading ? (_jsx(_Fragment, { children: renderLoading() })) : (_jsx("div", { className: `earlyseo-blog-post ${className ?? ""}`, children:
|
|
30
|
+
return renderLoading ? (_jsx(_Fragment, { children: renderLoading() })) : (_jsx("div", { className: `earlyseo-blog-post ${className ?? ""}`, children: _jsxs("div", { className: "earlyseo-blog-empty", style: { display: "flex", flexDirection: "column", alignItems: "center", gap: "12px", padding: "48px 0" }, children: [_jsxs("svg", { width: "48", height: "48", viewBox: "0 0 180 180", fill: "none", style: { animation: "earlyseo-breathe 2.4s cubic-bezier(0.4,0,0.6,1) infinite" }, children: [_jsx("style", { children: `@keyframes earlyseo-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}` }), _jsx("path", { fill: "#EF7C23", d: "M42.364693,133.329758 C41.392796,134.861298 40.597309,136.087784 39.675198,137.509476 C33.533985,121.271591 44.838245,98.811195 62.395020,92.310585 C67.031685,90.593796 72.016808,89.676010 76.918999,88.847237 C88.108727,86.955429 98.445839,83.149803 107.422386,75.957596 C107.678101,76.525269 108.007172,76.954903 107.913162,77.089890 C100.002281,88.449753 97.564629,101.706169 94.278038,114.787346 C88.952194,135.985077 68.215446,147.503052 46.864868,141.367554 C53.176380,126.928833 63.449196,115.961571 75.452477,106.233643 C61.156437,111.084023 50.663979,120.578728 42.364693,133.329758z" }), _jsx("path", { fill: "#EF7C23", d: "M116.639435,62.615288 C110.973541,67.279480 105.671196,71.838364 100.109711,76.055496 C97.151794,78.298409 94.108269,80.078476 89.699669,78.911568 C86.029152,77.940033 81.897018,78.712494 77.969337,78.712494 C77.750496,78.231323 77.531647,77.750153 77.312798,77.268982 C81.188507,72.838776 84.882919,68.227379 89.034821,64.073219 C90.559677,62.547531 93.301308,61.093159 95.255005,61.353573 C101.337776,62.164345 104.368469,58.520615 107.978180,54.716625 C117.535645,44.644783 129.390427,39.418297 143.822952,39.063076 C144.191711,49.553711 141.633926,58.827564 136.400238,67.362144 C134.669617,70.184265 132.694412,72.956390 130.369064,75.291283 C126.507401,79.168808 123.169449,82.654823 123.350258,89.053139 C123.444588,92.391479 120.251602,96.258804 117.687996,99.121048 C114.765625,102.383835 110.890556,104.793320 107.120766,107.821716 C104.641510,95.934128 105.392586,85.618385 113.725861,76.535202 C119.217499,70.549385 123.832985,63.755325 128.772217,57.270947 C129.742523,55.997116 130.398621,54.483955 131.199631,53.081173 C130.860519,52.718716 130.521408,52.356262 130.182297,51.993805 C125.753273,55.451832 121.324257,58.909855 116.639435,62.615288z" })] }), _jsx("span", { style: { fontSize: "0.85rem", opacity: 0.6 }, children: "Loading article\u2026" })] }) }));
|
|
31
31
|
}
|
|
32
32
|
if (error || !article) {
|
|
33
33
|
return renderNotFound ? (_jsx(_Fragment, { children: renderNotFound() })) : (_jsx("div", { className: `earlyseo-blog-post ${className ?? ""}`, children: _jsxs("div", { className: "earlyseo-blog-empty", children: [_jsx("p", { children: "Article not found." }), _jsx("a", { href: backHref ?? basePath, children: backText })] }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-post.js","sourceRoot":"","sources":["../../src/react/blog-post.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAOb,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA0B3C,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAC/C,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,QAAQ,GAAG,QAAQ,EACnB,aAAa,EACb,cAAc,EACd,aAAa,EACb,QAAQ,EACR,QAAQ,GAAG,gBAAgB,GACb;IACd,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAC1C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,aAAa,CAAC,CAAC,CAAC,CACrB,4BAAG,aAAa,EAAE,GAAI,CACvB,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,sBAAsB,SAAS,IAAI,EAAE,EAAE,YACrD,
|
|
1
|
+
{"version":3,"file":"blog-post.js","sourceRoot":"","sources":["../../src/react/blog-post.tsx"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Top-level
|
|
1
|
+
/** Top-level site manifest */
|
|
2
2
|
export interface Manifest {
|
|
3
3
|
/** Schema version for future migrations */
|
|
4
4
|
schemaVersion: 1;
|
|
@@ -32,7 +32,7 @@ export interface ArticleListItem {
|
|
|
32
32
|
/** Article tags */
|
|
33
33
|
tags: string[];
|
|
34
34
|
}
|
|
35
|
-
/** Paginated list page
|
|
35
|
+
/** Paginated list page */
|
|
36
36
|
export interface ArticleListPage {
|
|
37
37
|
/** Page number (1-indexed) */
|
|
38
38
|
page: number;
|
|
@@ -45,7 +45,7 @@ export interface ArticleListPage {
|
|
|
45
45
|
/** Articles on this page (newest first) */
|
|
46
46
|
articles: ArticleListItem[];
|
|
47
47
|
}
|
|
48
|
-
/** Full article JSON
|
|
48
|
+
/** Full article JSON */
|
|
49
49
|
export interface Article {
|
|
50
50
|
/** Unique article ID (from EarlySEO) */
|
|
51
51
|
id: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,8BAA8B;AAC9B,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,aAAa,EAAE,CAAC,CAAC;IACjB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,0BAA0B;AAC1B,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,wBAAwB;AACxB,MAAM,WAAW,OAAO;IACtB,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,+BAA+B,CAAC"}
|
package/dist/types.js
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
2
|
// @earlyseo/blog — Core Types
|
|
3
3
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
-
// CDN JSON schema for the paginated, versioned article system.
|
|
5
|
-
//
|
|
6
|
-
// CDN layout:
|
|
7
|
-
// /site/{siteId}/manifest.json
|
|
8
|
-
// /site/{siteId}/articles/page-1.json
|
|
9
|
-
// /site/{siteId}/articles/page-2.json
|
|
10
|
-
// /site/{siteId}/article/{slug}.json
|
|
11
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
12
4
|
/** Default CDN base URL — the EarlySEO public R2 bucket. */
|
|
13
5
|
export const DEFAULT_CDN_BASE_URL = "https://media.earlyseo.com";
|
|
14
6
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAwGhF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,4BAA4B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@earlyseo/blog",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Drop-in blog integration for React & Next.js — powered by EarlySEO. Articles are served from EarlySEO's CDN. Just add your site ID and render.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"files": [
|
|
35
35
|
"dist",
|
|
36
36
|
"src/cli",
|
|
37
|
+
"LICENSE",
|
|
37
38
|
"README.md"
|
|
38
39
|
],
|
|
39
40
|
"keywords": [
|
|
@@ -47,7 +48,7 @@
|
|
|
47
48
|
"blog-engine",
|
|
48
49
|
"cdn"
|
|
49
50
|
],
|
|
50
|
-
"license": "
|
|
51
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
51
52
|
"peerDependencies": {
|
|
52
53
|
"react": ">=18.0.0",
|
|
53
54
|
"react-dom": ">=18.0.0",
|
package/src/cli/init.mjs
CHANGED
|
@@ -28,11 +28,14 @@ function fileExists(relativePath) {
|
|
|
28
28
|
return fs.existsSync(path.join(cwd, relativePath));
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
function writeFileSafe(relativePath, content) {
|
|
31
|
+
async function writeFileSafe(relativePath, content) {
|
|
32
32
|
const fullPath = path.join(cwd, relativePath);
|
|
33
33
|
if (fs.existsSync(fullPath)) {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const answer = await ask(` ⚠ ${relativePath} already exists. Overwrite? (y/N) `);
|
|
35
|
+
if (answer.toLowerCase() !== "y") {
|
|
36
|
+
console.log(` ⏭ Skipped ${relativePath}`);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
36
39
|
}
|
|
37
40
|
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
38
41
|
fs.writeFileSync(fullPath, content, "utf-8");
|
|
@@ -149,8 +152,8 @@ async function main() {
|
|
|
149
152
|
const listPagePath = `${blogDir}/page.tsx`;
|
|
150
153
|
const postPagePath = `${blogDir}/[slug]/page.tsx`;
|
|
151
154
|
|
|
152
|
-
writeFileSafe(listPagePath, blogListPage(siteId));
|
|
153
|
-
writeFileSafe(postPagePath, blogPostPage(siteId));
|
|
155
|
+
await writeFileSafe(listPagePath, blogListPage(siteId));
|
|
156
|
+
await writeFileSafe(postPagePath, blogPostPage(siteId));
|
|
154
157
|
|
|
155
158
|
// 6. Add EARLYSEO_SITE_ID to .env.local
|
|
156
159
|
const envPath = path.join(cwd, ".env.local");
|