@no-mess/client 0.3.0 → 0.5.0
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/README.md +154 -148
- package/dist/client.d.ts +7 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +15 -2
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/live-edit.d.ts.map +1 -1
- package/dist/live-edit.js +22 -0
- package/dist/live-edit.js.map +1 -1
- package/dist/react/index.d.ts +3 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/no-mess-field.d.ts +10 -0
- package/dist/react/no-mess-field.d.ts.map +1 -0
- package/dist/react/no-mess-field.js +7 -0
- package/dist/react/no-mess-field.js.map +1 -0
- package/dist/react/no-mess-provider.d.ts +21 -0
- package/dist/react/no-mess-provider.d.ts.map +1 -0
- package/dist/react/no-mess-provider.js +295 -0
- package/dist/react/no-mess-provider.js.map +1 -0
- package/dist/schema/define-content-type.d.ts +14 -4
- package/dist/schema/define-content-type.d.ts.map +1 -1
- package/dist/schema/define-content-type.js +87 -20
- package/dist/schema/define-content-type.js.map +1 -1
- package/dist/schema/define-schema.d.ts +6 -3
- package/dist/schema/define-schema.d.ts.map +1 -1
- package/dist/schema/define-schema.js +20 -2
- package/dist/schema/define-schema.js.map +1 -1
- package/dist/schema/field-builders.d.ts +47 -17
- package/dist/schema/field-builders.d.ts.map +1 -1
- package/dist/schema/field-builders.js +26 -0
- package/dist/schema/field-builders.js.map +1 -1
- package/dist/schema/index.d.ts +6 -5
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +3 -2
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/parse-schema.d.ts +1 -2
- package/dist/schema/parse-schema.d.ts.map +1 -1
- package/dist/schema/parse-schema.js +503 -275
- package/dist/schema/parse-schema.js.map +1 -1
- package/dist/schema/schema-types.d.ts +53 -14
- package/dist/schema/schema-types.d.ts.map +1 -1
- package/dist/schema/schema-types.js +10 -3
- package/dist/schema/schema-types.js.map +1 -1
- package/dist/schema/serialize-schema.d.ts.map +1 -1
- package/dist/schema/serialize-schema.js +125 -22
- package/dist/schema/serialize-schema.js.map +1 -1
- package/dist/schema/tree-utils.d.ts +18 -0
- package/dist/schema/tree-utils.d.ts.map +1 -0
- package/dist/schema/tree-utils.js +191 -0
- package/dist/schema/tree-utils.js.map +1 -0
- package/dist/types.d.ts +33 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,89 +10,166 @@ npm install @no-mess/client
|
|
|
10
10
|
bun add @no-mess/client
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Schema Builder
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Use `@no-mess/client/schema` to define route-bound templates, reusable
|
|
16
|
+
fragments, and recursive fields:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import {
|
|
20
|
+
defineFragment,
|
|
21
|
+
defineSchema,
|
|
22
|
+
defineTemplate,
|
|
23
|
+
field,
|
|
24
|
+
} from "@no-mess/client/schema";
|
|
25
|
+
|
|
26
|
+
const imageWithAlt = defineFragment("image-with-alt", {
|
|
27
|
+
name: "Image With Alt",
|
|
28
|
+
fields: {
|
|
29
|
+
image: field.image({ required: true }),
|
|
30
|
+
alt: field.text(),
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const homePage = defineTemplate("home-page", {
|
|
35
|
+
name: "Home Page",
|
|
36
|
+
mode: "singleton",
|
|
37
|
+
route: "/",
|
|
38
|
+
fields: {
|
|
39
|
+
hero: field.object({
|
|
40
|
+
fields: {
|
|
41
|
+
headline: field.text({ required: true }),
|
|
42
|
+
slides: field.array({
|
|
43
|
+
of: field.fragment(imageWithAlt),
|
|
44
|
+
minItems: 1,
|
|
45
|
+
}),
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export default defineSchema({
|
|
52
|
+
contentTypes: [imageWithAlt, homePage],
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`defineContentType()` remains available as a compatibility alias for template
|
|
57
|
+
definitions, but new code should prefer `defineTemplate()` and
|
|
58
|
+
`defineFragment()`.
|
|
59
|
+
|
|
60
|
+
## Fetch Content
|
|
16
61
|
|
|
17
62
|
```ts
|
|
18
63
|
import { createNoMessClient } from "@no-mess/client";
|
|
19
64
|
|
|
20
65
|
const client = createNoMessClient({
|
|
21
|
-
apiKey:
|
|
66
|
+
apiKey: process.env.NO_MESS_API_KEY!,
|
|
22
67
|
});
|
|
23
68
|
|
|
24
|
-
// Get all entries of a content type
|
|
25
69
|
const posts = await client.getEntries("blog-post");
|
|
26
|
-
|
|
27
|
-
// Get a single entry by slug
|
|
28
70
|
const post = await client.getEntry("blog-post", "hello-world");
|
|
29
71
|
```
|
|
30
72
|
|
|
31
|
-
|
|
73
|
+
## Preview-Only Route
|
|
74
|
+
|
|
75
|
+
Use this when you want a dedicated `/no-mess-preview` page.
|
|
32
76
|
|
|
33
77
|
```tsx
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
78
|
+
"use client";
|
|
79
|
+
|
|
80
|
+
import { NoMessPreview } from "@no-mess/client/react";
|
|
81
|
+
|
|
82
|
+
export default function PreviewPage() {
|
|
83
|
+
return (
|
|
84
|
+
<NoMessPreview apiKey={process.env.NEXT_PUBLIC_NO_MESS_PUBLISHABLE_KEY!}>
|
|
85
|
+
{({ entry, error, isLoading }) => {
|
|
86
|
+
if (isLoading) return <p>Loading preview...</p>;
|
|
87
|
+
if (error) return <p>{error.message}</p>;
|
|
88
|
+
if (!entry) return null;
|
|
89
|
+
|
|
90
|
+
return <h1>{entry.title}</h1>;
|
|
91
|
+
}}
|
|
92
|
+
</NoMessPreview>
|
|
93
|
+
);
|
|
50
94
|
}
|
|
51
95
|
```
|
|
52
96
|
|
|
53
|
-
|
|
97
|
+
## Route-Aware Preview and Live Edit
|
|
54
98
|
|
|
55
|
-
|
|
99
|
+
This is the recommended integration path. It lets the dashboard open real site
|
|
100
|
+
routes, apply unsaved iframe-only edits before publish, and store reported
|
|
101
|
+
delivery URLs per entry.
|
|
56
102
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
103
|
+
### 1. Wrap the route tree
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
"use client";
|
|
107
|
+
|
|
108
|
+
import { NoMessLiveRouteProvider } from "@no-mess/client/react";
|
|
109
|
+
|
|
110
|
+
export default function SiteLayout({
|
|
111
|
+
children,
|
|
112
|
+
}: {
|
|
113
|
+
children: React.ReactNode;
|
|
114
|
+
}) {
|
|
115
|
+
return (
|
|
116
|
+
<NoMessLiveRouteProvider
|
|
117
|
+
apiKey={process.env.NEXT_PUBLIC_NO_MESS_PUBLISHABLE_KEY!}
|
|
118
|
+
>
|
|
119
|
+
{children}
|
|
120
|
+
</NoMessLiveRouteProvider>
|
|
121
|
+
);
|
|
70
122
|
}
|
|
71
123
|
```
|
|
72
124
|
|
|
73
|
-
###
|
|
125
|
+
### 2. Bind the rendered entry
|
|
74
126
|
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
127
|
+
```tsx
|
|
128
|
+
"use client";
|
|
129
|
+
|
|
130
|
+
import {
|
|
131
|
+
NoMessField,
|
|
132
|
+
useNoMessEditableEntry,
|
|
133
|
+
} from "@no-mess/client/react";
|
|
134
|
+
|
|
135
|
+
export function BlogArticle({ entry }) {
|
|
136
|
+
const editableEntry = useNoMessEditableEntry(entry);
|
|
137
|
+
|
|
138
|
+
return (
|
|
139
|
+
<article>
|
|
140
|
+
<NoMessField as="h1" name="title">
|
|
141
|
+
{editableEntry.title}
|
|
142
|
+
</NoMessField>
|
|
143
|
+
<NoMessField as="div" name="body">
|
|
144
|
+
{editableEntry.body}
|
|
145
|
+
</NoMessField>
|
|
146
|
+
</article>
|
|
147
|
+
);
|
|
148
|
+
}
|
|
80
149
|
```
|
|
81
150
|
|
|
82
|
-
|
|
151
|
+
`useNoMessEditableEntry()` automatically:
|
|
152
|
+
- swaps in draft content for the active iframe session
|
|
153
|
+
- applies unsaved field overrides from Live Edit
|
|
154
|
+
- reports the current URL for route-aware reopening
|
|
155
|
+
- emits the entry-bound signal used by dashboard warnings
|
|
156
|
+
|
|
157
|
+
## Manual Route Reporting
|
|
158
|
+
|
|
159
|
+
If you need custom reporting logic, call the client method directly:
|
|
83
160
|
|
|
84
161
|
```ts
|
|
162
|
+
import { createNoMessClient } from "@no-mess/client";
|
|
163
|
+
|
|
85
164
|
const client = createNoMessClient({
|
|
86
|
-
apiKey:
|
|
87
|
-
apiUrl: "https://...", // Optional — defaults to https://api.nomess.xyz
|
|
88
|
-
logger: (event) => {}, // Optional — structured diagnostics hook
|
|
165
|
+
apiKey: process.env.NEXT_PUBLIC_NO_MESS_PUBLISHABLE_KEY!,
|
|
89
166
|
});
|
|
90
|
-
```
|
|
91
167
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
168
|
+
await client.reportLiveEditRoute({
|
|
169
|
+
entryId: "entry_123",
|
|
170
|
+
url: window.location.href,
|
|
171
|
+
});
|
|
172
|
+
```
|
|
96
173
|
|
|
97
174
|
## API Reference
|
|
98
175
|
|
|
@@ -100,113 +177,42 @@ const client = createNoMessClient({
|
|
|
100
177
|
|
|
101
178
|
| Method | Description |
|
|
102
179
|
|--------|-------------|
|
|
103
|
-
| `client.getSchemas()` | List all
|
|
180
|
+
| `client.getSchemas()` | List all template and fragment schemas |
|
|
104
181
|
| `client.getSchema(typeSlug)` | Get a single schema by slug |
|
|
105
|
-
| `client.getEntries(contentType)` | Fetch all published entries of a
|
|
182
|
+
| `client.getEntries(contentType)` | Fetch all published entries of a template |
|
|
106
183
|
| `client.getEntry(contentType, slug)` | Get a single entry by slug |
|
|
107
184
|
|
|
108
|
-
###
|
|
109
|
-
|
|
110
|
-
| Method | Description |
|
|
111
|
-
|--------|-------------|
|
|
112
|
-
| `client.getProducts()` | List all synced Shopify products |
|
|
113
|
-
| `client.getProduct(handle)` | Get a product by handle |
|
|
114
|
-
| `client.getCollections()` | List all synced Shopify collections |
|
|
115
|
-
| `client.getCollection(handle)` | Get a collection by handle |
|
|
116
|
-
|
|
117
|
-
### Preview
|
|
185
|
+
### Preview / Live Edit
|
|
118
186
|
|
|
119
187
|
| Method | Description |
|
|
120
188
|
|--------|-------------|
|
|
121
|
-
| `client.exchangePreviewSession(session)` | Exchange a preview session token
|
|
189
|
+
| `client.exchangePreviewSession(session)` | Exchange a preview session token for draft content |
|
|
190
|
+
| `client.reportLiveEditRoute({ entryId, url? })` | Report the current delivery URL for route-aware Live Edit |
|
|
122
191
|
|
|
123
|
-
### React
|
|
192
|
+
### React (`@no-mess/client/react`)
|
|
124
193
|
|
|
125
|
-
|
|
|
126
|
-
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
194
|
+
| API | Description |
|
|
195
|
+
|-----|-------------|
|
|
196
|
+
| `NoMessPreview` | Preview-only route wrapper |
|
|
197
|
+
| `useNoMessPreview(config)` | Hook alternative for preview-only pages |
|
|
198
|
+
| `NoMessLiveRouteProvider` | Route-aware provider for real site routes |
|
|
199
|
+
| `useNoMessEditableEntry(entry, options?)` | Returns the active draft entry and reports the route |
|
|
200
|
+
| `NoMessField` | Convenience component for `data-no-mess-field` annotations |
|
|
201
|
+
| `useNoMessField(fieldName)` | Read a single field override from provider context |
|
|
129
202
|
|
|
130
|
-
##
|
|
203
|
+
## Migration
|
|
131
204
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
```ts
|
|
135
|
-
import { defineSchema, defineContentType, field } from "@no-mess/client/schema";
|
|
136
|
-
|
|
137
|
-
export default defineSchema({
|
|
138
|
-
contentTypes: [
|
|
139
|
-
defineContentType("blog-post", {
|
|
140
|
-
name: "Blog Post",
|
|
141
|
-
description: "Articles for the blog",
|
|
142
|
-
fields: {
|
|
143
|
-
title: field.text({ required: true }),
|
|
144
|
-
body: field.textarea({ required: true }),
|
|
145
|
-
heroImage: field.image(),
|
|
146
|
-
publishedAt: field.datetime(),
|
|
147
|
-
featured: field.boolean(),
|
|
148
|
-
externalUrl: field.url(),
|
|
149
|
-
category: field.select({
|
|
150
|
-
choices: [
|
|
151
|
-
{ label: "Tech", value: "tech" },
|
|
152
|
-
{ label: "Design", value: "design" },
|
|
153
|
-
],
|
|
154
|
-
}),
|
|
155
|
-
relatedProduct: field.shopifyProduct(),
|
|
156
|
-
featuredCollection: field.shopifyCollection(),
|
|
157
|
-
},
|
|
158
|
-
}),
|
|
159
|
-
],
|
|
160
|
-
});
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Field Types
|
|
164
|
-
|
|
165
|
-
| Builder | Type | Description |
|
|
166
|
-
|---------|------|-------------|
|
|
167
|
-
| `field.text()` | `text` | Plain text input |
|
|
168
|
-
| `field.textarea()` | `textarea` | Multi-line text |
|
|
169
|
-
| `field.number()` | `number` | Numeric value |
|
|
170
|
-
| `field.boolean()` | `boolean` | True/false toggle |
|
|
171
|
-
| `field.datetime()` | `datetime` | Date/time picker |
|
|
172
|
-
| `field.url()` | `url` | URL field |
|
|
173
|
-
| `field.image()` | `image` | Image upload |
|
|
174
|
-
| `field.select(opts)` | `select` | Dropdown with choices (requires `choices` array) |
|
|
175
|
-
| `field.shopifyProduct()` | `shopifyProduct` | Shopify product reference |
|
|
176
|
-
| `field.shopifyCollection()` | `shopifyCollection` | Shopify collection reference |
|
|
177
|
-
|
|
178
|
-
### Field Options
|
|
179
|
-
|
|
180
|
-
All field builders accept an options object:
|
|
181
|
-
|
|
182
|
-
```ts
|
|
183
|
-
field.text({
|
|
184
|
-
required: true, // Whether the field is required (default: false)
|
|
185
|
-
description: "...", // Help text shown in the dashboard
|
|
186
|
-
})
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
The `select` builder additionally requires a `choices` array:
|
|
190
|
-
|
|
191
|
-
```ts
|
|
192
|
-
field.select({
|
|
193
|
-
required: true,
|
|
194
|
-
choices: [
|
|
195
|
-
{ label: "Draft", value: "draft" },
|
|
196
|
-
{ label: "Published", value: "published" },
|
|
197
|
-
],
|
|
198
|
-
})
|
|
199
|
-
```
|
|
205
|
+
If you already use `useNoMessPreview()` and `useNoMessLiveEdit()` on
|
|
206
|
+
`/no-mess-preview`:
|
|
200
207
|
|
|
201
|
-
|
|
208
|
+
1. Keep the existing preview route in place.
|
|
209
|
+
2. Add `NoMessLiveRouteProvider` to the real route tree.
|
|
210
|
+
3. Replace direct entry rendering with `useNoMessEditableEntry(entry)` on the
|
|
211
|
+
routes you want Live Edit to open.
|
|
212
|
+
4. Add `data-no-mess-field` annotations or `NoMessField` wrappers.
|
|
202
213
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
| `defineSchema({ contentTypes })` | Define a complete schema with content types |
|
|
206
|
-
| `defineContentType(slug, options)` | Define a single content type |
|
|
207
|
-
| `parseSchemaSource(source)` | Parse a schema.ts source string into a schema definition |
|
|
208
|
-
| `generateSchemaSource(schema)` | Generate schema.ts source from a schema definition |
|
|
209
|
-
| `generateContentTypeSource(contentType)` | Generate source for a single content type |
|
|
214
|
+
If you do nothing, the legacy preview route keeps working. You only miss the
|
|
215
|
+
route-aware Live Edit workflow.
|
|
210
216
|
|
|
211
217
|
## License
|
|
212
218
|
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GetEntryOptions, NoMessClientConfig, NoMessEntry, PreviewExchangeResult, PreviewSessionAuth, SchemaGetResponse, SchemaListResponse, ShopifyCollection, ShopifyProduct } from "./types.js";
|
|
1
|
+
import type { GetEntryOptions, NoMessClientConfig, NoMessEntry, PreviewExchangeResult, PreviewSessionAuth, ReportLiveEditRouteOptions, SchemaGetResponse, SchemaListResponse, ShopifyCollection, ShopifyProduct } from "./types.js";
|
|
2
2
|
export declare class NoMessClient {
|
|
3
3
|
private apiUrl;
|
|
4
4
|
private apiKey;
|
|
@@ -45,6 +45,12 @@ export declare class NoMessClient {
|
|
|
45
45
|
* Computes an HMAC-SHA256 proof and sends it to the server for verification.
|
|
46
46
|
*/
|
|
47
47
|
exchangePreviewSession(session: PreviewSessionAuth): Promise<PreviewExchangeResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Report that an entry is rendered on the current site URL for route-aware live edit.
|
|
50
|
+
*/
|
|
51
|
+
reportLiveEditRoute(options: ReportLiveEditRouteOptions): Promise<{
|
|
52
|
+
ok: boolean;
|
|
53
|
+
}>;
|
|
48
54
|
/**
|
|
49
55
|
* Compute HMAC-SHA256 proof for preview session authentication.
|
|
50
56
|
* Uses Web Crypto API (works in browsers, Node.js 18+, Deno, Bun, edge runtimes).
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,WAAW,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,WAAW,EAEX,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACf,MAAM,YAAY,CAAC;AAWpB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAqC;gBAEvC,MAAM,EAAE,kBAAkB;IAyBtC,OAAO,CAAC,YAAY;YAyBN,gBAAgB;YA6BhB,OAAO;IAoGrB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAQ/C;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ7D;;OAEG;IACG,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAClD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,EAAE,CAAC;IAQf;;;OAGG;IACG,QAAQ,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAChD,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,CAAC,CAAC;IAiBb;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQ9C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQzD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAQpD;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ/D;;;OAGG;IACG,sBAAsB,CAC1B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,qBAAqB,CAAC;IAoBjC;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IAS3B;;;OAGG;YACW,YAAY;IA8F1B,OAAO,CAAC,QAAQ;CAmBjB"}
|
package/dist/client.js
CHANGED
|
@@ -100,7 +100,7 @@ export class NoMessClient {
|
|
|
100
100
|
const text = await this.readResponseText(response, operation, method, requestUrl);
|
|
101
101
|
if (!response.ok) {
|
|
102
102
|
const parsed = text.trim() ? safeParseJsonText(text) : null;
|
|
103
|
-
const parsedBody = parsed
|
|
103
|
+
const parsedBody = parsed?.ok && parsed.value && typeof parsed.value === "object"
|
|
104
104
|
? parsed.value
|
|
105
105
|
: null;
|
|
106
106
|
const message = typeof parsedBody?.error === "string" && parsedBody.error.trim()
|
|
@@ -245,12 +245,25 @@ export class NoMessClient {
|
|
|
245
245
|
},
|
|
246
246
|
});
|
|
247
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* Report that an entry is rendered on the current site URL for route-aware live edit.
|
|
250
|
+
*/
|
|
251
|
+
async reportLiveEditRoute(options) {
|
|
252
|
+
return this.request({
|
|
253
|
+
method: "POST",
|
|
254
|
+
path: "/api/live-edit/routes/report",
|
|
255
|
+
operation: "reportLiveEditRoute",
|
|
256
|
+
body: options,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
248
259
|
/**
|
|
249
260
|
* Compute HMAC-SHA256 proof for preview session authentication.
|
|
250
261
|
* Uses Web Crypto API (works in browsers, Node.js 18+, Deno, Bun, edge runtimes).
|
|
251
262
|
*/
|
|
252
263
|
async computeProof(sessionSecret, sessionId, timestamp) {
|
|
253
|
-
if (!sessionSecret ||
|
|
264
|
+
if (!sessionSecret ||
|
|
265
|
+
sessionSecret.length % 2 !== 0 ||
|
|
266
|
+
!/^[0-9a-fA-F]+$/.test(sessionSecret)) {
|
|
254
267
|
const error = createNoMessCryptoError("Preview session secret must be a valid hex string", {
|
|
255
268
|
kind: "crypto",
|
|
256
269
|
code: "invalid_session_secret",
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAczD,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { NoMessClient } from "./client.js";
|
|
2
2
|
export { createLiveEditHandler } from "./live-edit.js";
|
|
3
|
-
export type { ContentTypeSchema, GetEntryOptions, LiveEditConfig, LiveEditHandle, NoMessClientConfig, NoMessEntry, NoMessErrorCode, NoMessErrorKind, NoMessErrorOptions, NoMessLogEvent, NoMessLogLevel,
|
|
3
|
+
export type { ContentTypeSchema, GetEntryOptions, LiveEditConfig, LiveEditHandle, NoMessClientConfig, NoMessEntry, NoMessErrorCode, NoMessErrorKind, NoMessErrorOptions, NoMessLiveRouteProviderProps, NoMessLogEvent, NoMessLogger, NoMessLogLevel, NoMessProviderProps, PreviewExchangeResult, PreviewHandlerConfig, PreviewSessionAuth, ReportLiveEditRouteOptions, SchemaGetResponse, SchemaListResponse, ShopifyCollection, ShopifyProduct, UseNoMessEditableEntryOptions, UseNoMessLiveEditConfig, UseNoMessLiveEditResult, UseNoMessPreviewConfig, UseNoMessPreviewResult, UseNoMessPreviewStatus, } from "./types.js";
|
|
4
4
|
export { DEFAULT_ADMIN_ORIGIN, DEFAULT_API_URL, isPublishableKey, isSecretKey, NoMessError, } from "./types.js";
|
|
5
5
|
import { NoMessClient } from "./client.js";
|
|
6
6
|
import type { NoMessClientConfig, PreviewHandlerConfig } from "./types.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,4BAA4B,EAC5B,cAAc,EACd,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,KAAK,EACV,kBAAkB,EAGlB,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAE3E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG;IAClE,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAwQA"}
|
package/dist/index.js
CHANGED
|
@@ -126,7 +126,11 @@ export function createPreviewHandler(config) {
|
|
|
126
126
|
}), origin, { reason, requestId, phase: "onEntry" });
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
|
-
postToParent({ type: "no-mess:preview-loaded" }, origin, {
|
|
129
|
+
postToParent({ type: "no-mess:preview-loaded" }, origin, {
|
|
130
|
+
reason,
|
|
131
|
+
requestId,
|
|
132
|
+
phase: "loaded",
|
|
133
|
+
});
|
|
130
134
|
}
|
|
131
135
|
catch (error) {
|
|
132
136
|
if (disposed ||
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/live-edit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-edit.d.ts","sourceRoot":"","sources":["../src/live-edit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"live-edit.d.ts","sourceRoot":"","sources":["../src/live-edit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4FjE;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAma5E"}
|
package/dist/live-edit.js
CHANGED
|
@@ -13,6 +13,9 @@ const OVERLAY_CSS = `
|
|
|
13
13
|
height: 100%;
|
|
14
14
|
z-index: 2147483646;
|
|
15
15
|
}
|
|
16
|
+
#${OVERLAY_CONTAINER_ID}[data-select-mode="false"] {
|
|
17
|
+
opacity: 0;
|
|
18
|
+
}
|
|
16
19
|
.no-mess-overlay {
|
|
17
20
|
position: absolute;
|
|
18
21
|
border: 2px solid oklch(0.623 0.214 259.1);
|
|
@@ -85,6 +88,7 @@ export function createLiveEditHandler(config) {
|
|
|
85
88
|
let mutationObserver = null;
|
|
86
89
|
let scrollListener = null;
|
|
87
90
|
let rafId = null;
|
|
91
|
+
let selectModeEnabled = true;
|
|
88
92
|
const emitLog = (level, message, context, error) => {
|
|
89
93
|
logger({
|
|
90
94
|
level,
|
|
@@ -145,8 +149,15 @@ export function createLiveEditHandler(config) {
|
|
|
145
149
|
function createContainer() {
|
|
146
150
|
container = document.createElement("div");
|
|
147
151
|
container.id = OVERLAY_CONTAINER_ID;
|
|
152
|
+
container.dataset.selectMode = String(selectModeEnabled);
|
|
148
153
|
document.body.appendChild(container);
|
|
149
154
|
}
|
|
155
|
+
function applySelectMode(enabled) {
|
|
156
|
+
selectModeEnabled = enabled;
|
|
157
|
+
if (container) {
|
|
158
|
+
container.dataset.selectMode = String(enabled);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
150
161
|
function getFieldElements() {
|
|
151
162
|
const map = new Map();
|
|
152
163
|
const elements = document.querySelectorAll(`[${FIELD_ATTR}]`);
|
|
@@ -245,6 +256,7 @@ export function createLiveEditHandler(config) {
|
|
|
245
256
|
try {
|
|
246
257
|
injectStyles();
|
|
247
258
|
createContainer();
|
|
259
|
+
applySelectMode(selectModeEnabled);
|
|
248
260
|
if (typeof ResizeObserver !== "undefined") {
|
|
249
261
|
resizeObserver = new ResizeObserver(() => {
|
|
250
262
|
try {
|
|
@@ -299,6 +311,7 @@ export function createLiveEditHandler(config) {
|
|
|
299
311
|
if (!active)
|
|
300
312
|
return;
|
|
301
313
|
active = false;
|
|
314
|
+
selectModeEnabled = true;
|
|
302
315
|
try {
|
|
303
316
|
if (rafId !== null) {
|
|
304
317
|
cancelAnimationFrame(rafId);
|
|
@@ -374,6 +387,15 @@ export function createLiveEditHandler(config) {
|
|
|
374
387
|
case "no-mess:live-edit-exit":
|
|
375
388
|
exitLiveEdit();
|
|
376
389
|
break;
|
|
390
|
+
case "no-mess:select-mode":
|
|
391
|
+
if (typeof data.enabled !== "boolean") {
|
|
392
|
+
emitLog("debug", "Ignored malformed live edit select mode message", {
|
|
393
|
+
type: data.type,
|
|
394
|
+
});
|
|
395
|
+
break;
|
|
396
|
+
}
|
|
397
|
+
applySelectMode(data.enabled);
|
|
398
|
+
break;
|
|
377
399
|
case "no-mess:field-updated":
|
|
378
400
|
if (!active)
|
|
379
401
|
break;
|