@payload-onpage/core 0.2.1 → 0.3.1
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 +4 -0
- package/dist/autosave.d.ts +2 -2
- package/dist/autosave.d.ts.map +1 -1
- package/dist/autosave.js +2 -1
- package/dist/autosave.js.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -1
- package/dist/docref.d.ts +18 -3
- package/dist/docref.d.ts.map +1 -1
- package/dist/docref.js +13 -4
- package/dist/docref.js.map +1 -1
- package/dist/encode.d.ts +16 -4
- package/dist/encode.d.ts.map +1 -1
- package/dist/encode.js +42 -62
- package/dist/encode.js.map +1 -1
- package/dist/fields.d.ts +39 -8
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +111 -97
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +16 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -12
- package/dist/index.js.map +1 -1
- package/dist/path.d.ts +9 -1
- package/dist/path.d.ts.map +1 -1
- package/dist/path.js +27 -8
- package/dist/path.js.map +1 -1
- package/dist/payload.d.ts +5 -3
- package/dist/payload.d.ts.map +1 -1
- package/dist/payload.js +34 -23
- package/dist/payload.js.map +1 -1
- package/dist/ports.d.ts +43 -28
- package/dist/ports.d.ts.map +1 -1
- package/dist/ports.js +11 -1
- package/dist/ports.js.map +1 -1
- package/dist/schema.d.ts +71 -26
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +1 -6
- package/dist/schema.js.map +1 -1
- package/dist/seal.d.ts +17 -0
- package/dist/seal.d.ts.map +1 -1
- package/dist/seal.js +13 -0
- package/dist/seal.js.map +1 -1
- package/dist/session.d.ts +34 -18
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +20 -13
- package/dist/session.js.map +1 -1
- package/dist/stega.d.ts +6 -2
- package/dist/stega.d.ts.map +1 -1
- package/dist/stega.js +18 -13
- package/dist/stega.js.map +1 -1
- package/dist/util.d.ts +9 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +11 -0
- package/dist/util.js.map +1 -0
- package/package.json +14 -3
- package/src/autosave.ts +4 -3
- package/src/constants.ts +16 -0
- package/src/docref.ts +26 -6
- package/src/encode.ts +47 -55
- package/src/fields.ts +166 -98
- package/src/index.ts +125 -12
- package/src/path.ts +32 -10
- package/src/payload.ts +54 -26
- package/src/ports.ts +50 -22
- package/src/schema.ts +100 -17
- package/src/seal.ts +31 -0
- package/src/session.ts +67 -47
- package/src/stega.ts +25 -17
- package/src/util.ts +12 -0
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Framework-free building blocks: document refs, paths and field operations, the editor session (multi-document, undo, serialized publish/discard), autosave with stale-write detection, invisible field markers, sealing, and the **port interfaces** adapters implement.
|
|
4
4
|
|
|
5
|
+

|
|
6
|
+
|
|
5
7
|
```ts
|
|
6
8
|
import { EditorSession } from '@payload-onpage/core'
|
|
7
9
|
import { payloadRest } from '@payload-onpage/core/payload'
|
|
@@ -17,3 +19,5 @@ Entries: `@payload-onpage/core` (logic, ports), `@payload-onpage/core/payload` (
|
|
|
17
19
|
Part of [**payload-onpage**](https://github.com/jellologic/payload-onpage): on-page editing and draft previews for Payload CMS + Next.js. Start with the [getting started guide](https://github.com/jellologic/payload-onpage/blob/main/docs/getting-started.md).
|
|
18
20
|
|
|
19
21
|
MIT licensed.
|
|
22
|
+
|
|
23
|
+
See the **[tour](https://github.com/jellologic/payload-onpage/blob/main/docs/tour.md)** and **[getting started](https://github.com/jellologic/payload-onpage/blob/main/docs/getting-started.md)**.
|
package/dist/autosave.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ import type { SaveResult } from './ports.ts';
|
|
|
9
9
|
export type SaveStatus = 'idle' | 'pending' | 'saving' | 'saved' | 'error' | 'conflict';
|
|
10
10
|
export interface SaveState {
|
|
11
11
|
status: SaveStatus;
|
|
12
|
-
lastSavedAt?: number;
|
|
13
|
-
message?: string;
|
|
12
|
+
lastSavedAt?: number | undefined;
|
|
13
|
+
message?: string | undefined;
|
|
14
14
|
/** Increments with every successful save. */
|
|
15
15
|
seq: number;
|
|
16
16
|
}
|
package/dist/autosave.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autosave.d.ts","sourceRoot":"","sources":["../src/autosave.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"autosave.d.ts","sourceRoot":"","sources":["../src/autosave.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;AAEvF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IACpC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;IAClD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC;AAID,qBAAa,aAAa;IAWZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVjC,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2B;gBAEzB,IAAI,EAAE,eAAe;IAOlD,IAAI,OAAO,IAAI,SAAS,CAEvB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,OAAO,CAAC,QAAQ;IAKhB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOvC,OAAO,CAAC,GAAG;IAQX,kEAAkE;IAC5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuD5B,gGAAgG;IAChG,KAAK;IAQL,wDAAwD;IACxD,KAAK;IAML,0FAA0F;IAC1F,OAAO;CAIR"}
|
package/dist/autosave.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { errorText } from "./util.js";
|
|
1
2
|
const isTransient = (status) => !status || status === 429 || status >= 500;
|
|
2
3
|
export class AutosaveQueue {
|
|
3
4
|
opts;
|
|
@@ -66,7 +67,7 @@ export class AutosaveQueue {
|
|
|
66
67
|
result = await this.opts.send(patch);
|
|
67
68
|
}
|
|
68
69
|
catch (err) {
|
|
69
|
-
result = { ok: false, status: 0, message:
|
|
70
|
+
result = { ok: false, status: 0, message: errorText(err) };
|
|
70
71
|
}
|
|
71
72
|
this.inFlight = null;
|
|
72
73
|
if (result.ok) {
|
package/dist/autosave.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autosave.js","sourceRoot":"","sources":["../src/autosave.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autosave.js","sourceRoot":"","sources":["../src/autosave.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -4,6 +4,20 @@ export declare const DEFAULTS: {
|
|
|
4
4
|
readonly routePrefix: "/onpage";
|
|
5
5
|
readonly adminRoute: "/admin";
|
|
6
6
|
};
|
|
7
|
+
/** The plugin's endpoints, under `${apiRoute}${routePrefix}`. One list for the plugin and every client. */
|
|
8
|
+
export declare const ROUTES: {
|
|
9
|
+
readonly schema: "/schema";
|
|
10
|
+
readonly enter: "/enter";
|
|
11
|
+
readonly mode: "/mode";
|
|
12
|
+
readonly exit: "/exit";
|
|
13
|
+
readonly previewLink: "/preview-link";
|
|
14
|
+
readonly preview: "/preview";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The Payload request-context key that asks a read for auto-mapping markers.
|
|
18
|
+
* `onpageContext()` sets it; the plugin's afterRead hook reads it.
|
|
19
|
+
*/
|
|
20
|
+
export declare const CONTEXT_KEY = "onpage";
|
|
7
21
|
/** Cookies and headers used by the Next.js adapter and its proxy. */
|
|
8
22
|
export declare const COOKIE: {
|
|
9
23
|
/** Editor mode, bound to the signed-in session: `edit|view:<authCookie>:<hash>`. */
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,QAAQ;;;;CAIX,CAAA;AAEV,qEAAqE;AACrE,eAAO,MAAM,MAAM;IACjB,oFAAoF;;IAEpF,iGAAiG;;IAEjG,mCAAmC;;CAE3B,CAAA;AAEV,eAAO,MAAM,MAAM;IACjB,iFAAiF;;IAEjF,iEAAiE;;IAEjE,8DAA8D;;CAEtD,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,QAAQ;;;;CAIX,CAAA;AAEV,2GAA2G;AAC3G,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,WAAW,WAAW,CAAA;AAEnC,qEAAqE;AACrE,eAAO,MAAM,MAAM;IACjB,oFAAoF;;IAEpF,iGAAiG;;IAEjG,mCAAmC;;CAE3B,CAAA;AAEV,eAAO,MAAM,MAAM;IACjB,iFAAiF;;IAEjF,iEAAiE;;IAEjE,8DAA8D;;CAEtD,CAAA"}
|
package/dist/constants.js
CHANGED
|
@@ -4,6 +4,20 @@ export const DEFAULTS = {
|
|
|
4
4
|
routePrefix: '/onpage',
|
|
5
5
|
adminRoute: '/admin',
|
|
6
6
|
};
|
|
7
|
+
/** The plugin's endpoints, under `${apiRoute}${routePrefix}`. One list for the plugin and every client. */
|
|
8
|
+
export const ROUTES = {
|
|
9
|
+
schema: '/schema',
|
|
10
|
+
enter: '/enter',
|
|
11
|
+
mode: '/mode',
|
|
12
|
+
exit: '/exit',
|
|
13
|
+
previewLink: '/preview-link',
|
|
14
|
+
preview: '/preview',
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The Payload request-context key that asks a read for auto-mapping markers.
|
|
18
|
+
* `onpageContext()` sets it; the plugin's afterRead hook reads it.
|
|
19
|
+
*/
|
|
20
|
+
export const CONTEXT_KEY = 'onpage';
|
|
7
21
|
/** Cookies and headers used by the Next.js adapter and its proxy. */
|
|
8
22
|
export const COOKIE = {
|
|
9
23
|
/** Editor mode, bound to the signed-in session: `edit|view:<authCookie>:<hash>`. */
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,QAAQ;CACZ,CAAA;AAEV,qEAAqE;AACrE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,oFAAoF;IACpF,IAAI,EAAE,QAAQ;IACd,iGAAiG;IACjG,OAAO,EAAE,gBAAgB;IACzB,mCAAmC;IACnC,SAAS,EAAE,oBAAoB;CACvB,CAAA;AAEV,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,iFAAiF;IACjF,IAAI,EAAE,eAAe;IACrB,iEAAiE;IACjE,MAAM,EAAE,iBAAiB;IACzB,8DAA8D;IAC9D,iBAAiB,EAAE,8BAA8B;CACzC,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,QAAQ;CACZ,CAAA;AAEV,2GAA2G;AAC3G,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,eAAe;IAC5B,OAAO,EAAE,UAAU;CACX,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAA;AAEnC,qEAAqE;AACrE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,oFAAoF;IACpF,IAAI,EAAE,QAAQ;IACd,iGAAiG;IACjG,OAAO,EAAE,gBAAgB;IACzB,mCAAmC;IACnC,SAAS,EAAE,oBAAoB;CACvB,CAAA;AAEV,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,iFAAiF;IACjF,IAAI,EAAE,eAAe;IACrB,iEAAiE;IACjE,MAAM,EAAE,iBAAiB;IACzB,8DAA8D;IAC9D,iBAAiB,EAAE,8BAA8B;CACzC,CAAA"}
|
package/dist/docref.d.ts
CHANGED
|
@@ -11,9 +11,24 @@ export type DocRef = {
|
|
|
11
11
|
kind: 'global';
|
|
12
12
|
slug: string;
|
|
13
13
|
};
|
|
14
|
-
/**
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* A document's stable key: "c:<slug>:<id>" or "g:<slug>". A template-literal
|
|
16
|
+
* type, so a field path or slug can't be passed where a document key belongs.
|
|
17
|
+
*/
|
|
18
|
+
export type RefKey = `c:${string}:${string}` | `g:${string}`;
|
|
19
|
+
/** A field (or row/list) of one document: "<refKey>|<path>". */
|
|
20
|
+
export type TargetKey = `${RefKey}|${string}`;
|
|
21
|
+
export declare function refKey(ref: DocRef): RefKey;
|
|
22
|
+
/** Is this string a well-formed document key? */
|
|
23
|
+
export declare const isRefKey: (key: string) => key is RefKey;
|
|
16
24
|
export declare function parseRefKey(key: string): DocRef | null;
|
|
25
|
+
/**
|
|
26
|
+
* A collection ref from an id read as text (a key, a URL, an attribute). Only a
|
|
27
|
+
* canonical safe integer becomes a number: "007" and ids past 2^53 stay text,
|
|
28
|
+
* so the document they name is the one that's opened. Servers that know the
|
|
29
|
+
* collection's id type should decide instead (the plugin does).
|
|
30
|
+
*/
|
|
31
|
+
export declare function collectionRef(slug: string, id: string): DocRef;
|
|
17
32
|
/** Key for one field (or row/list) of one document: "<refKey>|<path>". */
|
|
18
|
-
export declare const targetKey: (ref: DocRef |
|
|
33
|
+
export declare const targetKey: (ref: DocRef | RefKey, path: string) => TargetKey;
|
|
19
34
|
//# sourceMappingURL=docref.d.ts.map
|
package/dist/docref.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docref.d.ts","sourceRoot":"","sources":["../src/docref.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAChB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9F,
|
|
1
|
+
{"version":3,"file":"docref.d.ts","sourceRoot":"","sources":["../src/docref.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAChB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9F;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,KAAK,MAAM,IAAI,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,CAAA;AAE5D,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAA;AAE7C,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,iDAAiD;AACjD,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,GAAG,IAAI,MAAmC,CAAA;AAEjF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYtD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,0EAA0E;AAC1E,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,GAAG,MAAM,EAAE,MAAM,MAAM,KAAG,SACL,CAAA"}
|
package/dist/docref.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
/** Stable string key: "c:<slug>:<id>" or "g:<slug>". */
|
|
2
1
|
export function refKey(ref) {
|
|
3
2
|
return ref.kind === 'global' ? `g:${ref.slug}` : `c:${ref.slug}:${ref.id}`;
|
|
4
3
|
}
|
|
4
|
+
/** Is this string a well-formed document key? */
|
|
5
|
+
export const isRefKey = (key) => parseRefKey(key) !== null;
|
|
5
6
|
export function parseRefKey(key) {
|
|
6
7
|
if (key.startsWith('g:')) {
|
|
7
8
|
const slug = key.slice(2);
|
|
@@ -12,12 +13,20 @@ export function parseRefKey(key) {
|
|
|
12
13
|
const i = rest.indexOf(':');
|
|
13
14
|
if (i <= 0 || i === rest.length - 1)
|
|
14
15
|
return null;
|
|
15
|
-
|
|
16
|
-
const raw = rest.slice(i + 1);
|
|
17
|
-
return { kind: 'collection', slug, id: /^\d+$/.test(raw) ? Number(raw) : raw };
|
|
16
|
+
return collectionRef(rest.slice(0, i), rest.slice(i + 1));
|
|
18
17
|
}
|
|
19
18
|
return null;
|
|
20
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* A collection ref from an id read as text (a key, a URL, an attribute). Only a
|
|
22
|
+
* canonical safe integer becomes a number: "007" and ids past 2^53 stay text,
|
|
23
|
+
* so the document they name is the one that's opened. Servers that know the
|
|
24
|
+
* collection's id type should decide instead (the plugin does).
|
|
25
|
+
*/
|
|
26
|
+
export function collectionRef(slug, id) {
|
|
27
|
+
const n = Number(id);
|
|
28
|
+
return { kind: 'collection', slug, id: Number.isSafeInteger(n) && String(n) === id ? n : id };
|
|
29
|
+
}
|
|
21
30
|
/** Key for one field (or row/list) of one document: "<refKey>|<path>". */
|
|
22
31
|
export const targetKey = (ref, path) => `${typeof ref === 'string' ? ref : refKey(ref)}|${path}`;
|
|
23
32
|
//# sourceMappingURL=docref.js.map
|
package/dist/docref.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docref.js","sourceRoot":"","sources":["../src/docref.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docref.js","sourceRoot":"","sources":["../src/docref.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,CAAA;AAC5E,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAiB,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;AAEjF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACzB,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/C,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QAChD,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,EAAU;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IACpB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAC/F,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAE,IAAY,EAAa,EAAE,CACzE,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA"}
|
package/dist/encode.d.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-mapping: tag a document's displayable strings with stega
|
|
3
|
+
* markers (see @payload-onpage/core stega) so the editor can find them on the
|
|
4
|
+
* page. The plugin runs it on reads that ask for it (`context.onpage`);
|
|
5
|
+
* client mode runs it on the editor state it renders.
|
|
6
|
+
*
|
|
7
|
+
* Tagged: text and textarea values, rich-text text nodes, and the `alt` of
|
|
8
|
+
* populated uploads (carrying the parent's upload-field path, so `<img alt>`
|
|
9
|
+
* maps an image). Never tagged: selects, numbers, dates, relationships, JSON,
|
|
10
|
+
* code, and any field whose name suggests machine use (url, slug, email…).
|
|
11
|
+
*/
|
|
12
|
+
import type { RefKey } from './docref.ts';
|
|
1
13
|
import type { SchemaField } from './schema.ts';
|
|
2
14
|
/**
|
|
3
15
|
* Does this field name suggest a machine value? Matches whole camelCase/snake
|
|
@@ -7,11 +19,11 @@ export declare function isMachineFieldName(name: string): boolean;
|
|
|
7
19
|
export type EncodeFilter = (args: {
|
|
8
20
|
field: SchemaField;
|
|
9
21
|
path: string;
|
|
10
|
-
ref:
|
|
22
|
+
ref: RefKey;
|
|
11
23
|
}) => boolean;
|
|
12
24
|
/** Return a copy of `doc` with markers on the given (editable) top-level fields. */
|
|
13
|
-
export declare function encodeDocument<T extends Record<string, unknown>>(doc: T, fields: SchemaField[], ref:
|
|
14
|
-
only?: string[];
|
|
15
|
-
filter?: EncodeFilter;
|
|
25
|
+
export declare function encodeDocument<T extends Record<string, unknown>>(doc: T, fields: SchemaField[], ref: RefKey, opts?: {
|
|
26
|
+
only?: string[] | undefined;
|
|
27
|
+
filter?: EncodeFilter | undefined;
|
|
16
28
|
}): T;
|
|
17
29
|
//# sourceMappingURL=encode.d.ts.map
|
package/dist/encode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA2B9C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIxD;AAKD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAA;AA6D/F,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,GAAG,EAAE,CAAC,EACN,MAAM,EAAE,WAAW,EAAE,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;CAAO,GAC5E,CAAC,CAIH"}
|
package/dist/encode.js
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-mapping: tag a document's displayable strings with stega
|
|
3
|
-
* markers (see @payload-onpage/core stega) so the editor can find them on the
|
|
4
|
-
* page. The plugin runs it on reads that ask for it (`context.onpage`);
|
|
5
|
-
* client mode runs it on the editor state it renders.
|
|
6
|
-
*
|
|
7
|
-
* Tagged: text and textarea values, rich-text text nodes, and the `alt` of
|
|
8
|
-
* populated uploads (carrying the parent's upload-field path, so `<img alt>`
|
|
9
|
-
* maps an image). Never tagged: selects, numbers, dates, relationships, JSON,
|
|
10
|
-
* code, and any field whose name suggests machine use (url, slug, email…).
|
|
11
|
-
*/
|
|
12
1
|
import { stegaEncode } from "./stega.js";
|
|
13
|
-
import {
|
|
2
|
+
import { mapFields } from "./fields.js";
|
|
14
3
|
import { mapLexical } from "./lexical.js";
|
|
4
|
+
import { assertNever } from "./util.js";
|
|
15
5
|
/** Name segments that mark a field as holding a machine value (never marked). */
|
|
16
6
|
const MACHINE_WORDS = new Set([
|
|
17
7
|
'url',
|
|
@@ -53,57 +43,47 @@ function encodeRichText(value, ctx, path) {
|
|
|
53
43
|
? { ...node, text: mark(node.text, ctx, path, 'richtext') }
|
|
54
44
|
: node);
|
|
55
45
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
function encodeFields(data, fields, prefix, ctx) {
|
|
94
|
-
if (!data || typeof data !== 'object' || Array.isArray(data))
|
|
95
|
-
return data;
|
|
96
|
-
const out = { ...data };
|
|
97
|
-
for (const f of fields) {
|
|
98
|
-
if (!(f.name in out))
|
|
99
|
-
continue;
|
|
100
|
-
out[f.name] = encodeValue(out[f.name], f, prefix ? `${prefix}.${f.name}` : f.name, ctx);
|
|
101
|
-
}
|
|
102
|
-
return out;
|
|
103
|
-
}
|
|
46
|
+
/** What each leaf field kind gets: text and rich text are marked, a populated upload's `alt` carries its path. */
|
|
47
|
+
const encoding = (ctx) => ({
|
|
48
|
+
leaf: (value, field, path) => {
|
|
49
|
+
switch (field.type) {
|
|
50
|
+
case 'text':
|
|
51
|
+
case 'textarea':
|
|
52
|
+
return typeof value === 'string' && value && allowed(field, path, ctx)
|
|
53
|
+
? mark(value, ctx, path, field.type)
|
|
54
|
+
: value;
|
|
55
|
+
case 'richText':
|
|
56
|
+
return allowed(field, path, ctx) ? encodeRichText(value, ctx, path) : value;
|
|
57
|
+
case 'upload':
|
|
58
|
+
if (!field.hasMany && value && typeof value === 'object' && !Array.isArray(value)) {
|
|
59
|
+
const media = value;
|
|
60
|
+
return {
|
|
61
|
+
...media,
|
|
62
|
+
alt: mark(typeof media.alt === 'string' ? media.alt : '', ctx, path, 'media'),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
// Machine values: never marked.
|
|
67
|
+
case 'email':
|
|
68
|
+
case 'code':
|
|
69
|
+
case 'json':
|
|
70
|
+
case 'checkbox':
|
|
71
|
+
case 'point':
|
|
72
|
+
case 'number':
|
|
73
|
+
case 'date':
|
|
74
|
+
case 'select':
|
|
75
|
+
case 'radio':
|
|
76
|
+
case 'relationship':
|
|
77
|
+
return value;
|
|
78
|
+
default:
|
|
79
|
+
return assertNever(field, 'field type');
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
});
|
|
104
83
|
/** Return a copy of `doc` with markers on the given (editable) top-level fields. */
|
|
105
84
|
export function encodeDocument(doc, fields, ref, opts = {}) {
|
|
106
|
-
const
|
|
107
|
-
|
|
85
|
+
const { only } = opts;
|
|
86
|
+
const scope = only ? fields.filter((f) => only.includes(f.name)) : fields;
|
|
87
|
+
return mapFields(doc, scope, encoding({ ref, filter: opts.filter }));
|
|
108
88
|
}
|
|
109
89
|
//# sourceMappingURL=encode.js.map
|
package/dist/encode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAe,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,SAAS,EAAqB,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvC,iFAAiF;AACjF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,OAAO;IACP,WAAW;IACX,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,KAAK;CACN,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,KAAK,CAAC,iCAAiC,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,yHAAyH;AACzH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;AASvE,MAAM,OAAO,GAAG,CAAC,KAAkB,EAAE,IAAY,EAAE,GAAQ,EAAE,EAAE,CAC7D,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/B,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAEjE,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAQ,EAAE,IAAY,EAAE,IAAoB,EAAE,EAAE,CAC3E,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AAElD,SAAS,cAAc,CAAC,KAAc,EAAE,GAAQ,EAAE,IAAY;IAC5D,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAChC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI;QAChE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE;QAC3D,CAAC,CAAC,IAAI,CACT,CAAA;AACH,CAAC;AAED,kHAAkH;AAClH,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAgB,EAAE,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACb,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC;oBACpE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;oBACpC,CAAC,CAAC,KAAK,CAAA;YACX,KAAK,UAAU;gBACb,OAAO,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YAC7E,KAAK,QAAQ;gBACX,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClF,MAAM,KAAK,GAAG,KAAgC,CAAA;oBAC9C,OAAO;wBACL,GAAG,KAAK;wBACR,GAAG,EAAE,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;qBAC9E,CAAA;gBACH,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,gCAAgC;YAChC,KAAK,OAAO,CAAC;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU,CAAC;YAChB,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO,CAAC;YACb,KAAK,cAAc;gBACjB,OAAO,KAAK,CAAA;YACd;gBACE,OAAO,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;CACF,CAAC,CAAA;AAEF,oFAAoF;AACpF,MAAM,UAAU,cAAc,CAC5B,GAAM,EACN,MAAqB,EACrB,GAAW,EACX,OAA2E,EAAE;IAE7E,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACzE,OAAO,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAM,CAAA;AAC3E,CAAC"}
|
package/dist/fields.d.ts
CHANGED
|
@@ -4,16 +4,40 @@
|
|
|
4
4
|
* for saving (populated relations back to ids).
|
|
5
5
|
*/
|
|
6
6
|
import { type PathSegment } from './path.ts';
|
|
7
|
-
import type { DocumentSchema, SchemaBlock, SchemaField } from './schema.ts';
|
|
7
|
+
import type { ArrayField, BlocksField, DocumentSchema, GroupField, ListField, SchemaBlock, SchemaField } from './schema.ts';
|
|
8
8
|
export interface FieldAtPath {
|
|
9
9
|
field: SchemaField;
|
|
10
10
|
/** The block whose fields contain this field, when inside a blocks row. */
|
|
11
|
-
block?: SchemaBlock;
|
|
11
|
+
block?: SchemaBlock | undefined;
|
|
12
12
|
/** Path of the nearest blocks row ("sections.3"), when inside one. */
|
|
13
|
-
blockPath?: string;
|
|
13
|
+
blockPath?: string | undefined;
|
|
14
14
|
}
|
|
15
|
+
type Data = Record<string, unknown>;
|
|
15
16
|
/** The block a blocks-field row uses (by its `blockType`). */
|
|
16
|
-
export declare const blockFor: (field:
|
|
17
|
+
export declare const blockFor: (field: BlocksField, row: unknown) => SchemaBlock | undefined;
|
|
18
|
+
/** The fields of one row of a list field: the block's fields, or the array's. */
|
|
19
|
+
export declare const rowFieldsOf: (field: ListField, row: unknown) => SchemaField[] | undefined;
|
|
20
|
+
/** A field that holds other fields' data. */
|
|
21
|
+
type Container = GroupField | ArrayField | BlocksField;
|
|
22
|
+
/** Any other field: its value is handled as one unit. */
|
|
23
|
+
export type LeafField = Exclude<SchemaField, Container>;
|
|
24
|
+
export interface FieldVisitor {
|
|
25
|
+
/** Every field that isn't a group, array or blocks field. Return the value unchanged to keep it. */
|
|
26
|
+
leaf: (value: unknown, field: LeafField, path: string) => unknown;
|
|
27
|
+
/** Each array/blocks row (a copy), before its fields are visited: e.g. give it a new id. */
|
|
28
|
+
row?: (row: Data, path: string) => Data;
|
|
29
|
+
/** A blocks row with an unknown `blockType`. Default: kept as is. */
|
|
30
|
+
unknownBlock?: (row: unknown) => unknown;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Rebuild document data field by field. Groups, array rows and block rows are
|
|
34
|
+
* walked here, once, for every schema-aware transform (cloning, normalizing for
|
|
35
|
+
* a save, encoding markers); `visit` only says what to do with leaf fields.
|
|
36
|
+
* Values of fields missing from `data` stay missing; untouched values are shared.
|
|
37
|
+
*/
|
|
38
|
+
export declare function mapFields(data: unknown, fields: SchemaField[], visit: FieldVisitor, prefix?: string): unknown;
|
|
39
|
+
/** One field's value (see `mapFields`). */
|
|
40
|
+
export declare function mapField(value: unknown, field: SchemaField, visit: FieldVisitor, path: string): unknown;
|
|
17
41
|
/** May the editor change this path? (Its top-level field must be editable.) */
|
|
18
42
|
export declare const isEditablePath: (schema: DocumentSchema, path: string) => boolean;
|
|
19
43
|
export interface RowInfo {
|
|
@@ -23,7 +47,7 @@ export interface RowInfo {
|
|
|
23
47
|
listPath: string;
|
|
24
48
|
index: number;
|
|
25
49
|
length: number;
|
|
26
|
-
listField:
|
|
50
|
+
listField: ListField;
|
|
27
51
|
/** Fields of this row: the block's fields, or the array's. */
|
|
28
52
|
rowFields: SchemaField[];
|
|
29
53
|
/** Singular label of one row ("Hero", "Feature"). */
|
|
@@ -39,9 +63,9 @@ export declare function resolveRow(schema: DocumentSchema, doc: unknown, path: s
|
|
|
39
63
|
*/
|
|
40
64
|
export declare function fieldAtPath(fields: SchemaField[], doc: unknown, path: string | PathSegment[]): FieldAtPath | null;
|
|
41
65
|
/** Defaults for a set of fields: static `defaultValue`s, nested groups, `minRows` rows. */
|
|
42
|
-
export declare function defaultsFor(fields: SchemaField[]):
|
|
43
|
-
export declare function newArrayRow(arrayField:
|
|
44
|
-
export declare function newBlockRow(block: SchemaBlock):
|
|
66
|
+
export declare function defaultsFor(fields: SchemaField[]): Data;
|
|
67
|
+
export declare function newArrayRow(arrayField: ArrayField): Data;
|
|
68
|
+
export declare function newBlockRow(block: SchemaBlock): Data;
|
|
45
69
|
/**
|
|
46
70
|
* Deep-clone a row (array item or block) giving it, and every nested row, a new
|
|
47
71
|
* id. Ids of related documents (uploads, relationships) are left alone, so a
|
|
@@ -50,6 +74,12 @@ export declare function newBlockRow(block: SchemaBlock): Record<string, unknown>
|
|
|
50
74
|
export declare function cloneRow(row: unknown, rowFields: SchemaField[]): unknown;
|
|
51
75
|
/** The id of a relationship value: a populated doc, `{ relationTo, value }`, or an id. */
|
|
52
76
|
export declare function relationId(v: unknown): string | number | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* A field value as a list: a hasMany value as its items, a single value as a
|
|
79
|
+
* one-item list, nothing as []. `item` keeps or converts each entry (return
|
|
80
|
+
* undefined to drop it).
|
|
81
|
+
*/
|
|
82
|
+
export declare function asList<T = unknown>(value: unknown, many: boolean | undefined, item?: (v: unknown) => T | undefined): T[];
|
|
53
83
|
/** A display title for a relationship value (`titleField` when known, else common title fields, else the id). */
|
|
54
84
|
export declare function relationTitle(v: unknown, titleField?: string): string;
|
|
55
85
|
/**
|
|
@@ -69,4 +99,5 @@ export declare function buildPatch(doc: Record<string, unknown>, keys: string[],
|
|
|
69
99
|
export declare function changedKeys(prev: Record<string, unknown>, next: Record<string, unknown>, keys: string[]): string[];
|
|
70
100
|
/** A scalar value as editable text: strings and numbers as-is; null, undefined and objects as ''. */
|
|
71
101
|
export declare function toText(value: unknown): string;
|
|
102
|
+
export {};
|
|
72
103
|
//# sourceMappingURL=fields.d.ts.map
|
package/dist/fields.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
|