@digital-gravy/etch-public-api 0.10.0 → 0.11.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 +30 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +107 -2
- package/dist/index.d.ts +107 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -254,6 +254,35 @@ etch.blocks.setAttribute(svgBlockId, 'src', '/icons/logo.svg');
|
|
|
254
254
|
etch.blocks.setAttribute(svgBlockId, 'stripColors', 'true');
|
|
255
255
|
```
|
|
256
256
|
|
|
257
|
+
### Data sources
|
|
258
|
+
|
|
259
|
+
`etch.dataSources` is the `dataSources` capability's model of dynamic data, and
|
|
260
|
+
supersedes `etch.loops`. A source is defined once for the project under a `key`
|
|
261
|
+
and read anywhere an expression is accepted, through `data('key')`. The
|
|
262
|
+
namespace is **optional** — a runtime without the capability omits it.
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
if (etch.environment?.capabilities.dataSources === true) {
|
|
266
|
+
const sources = etch.dataSources!;
|
|
267
|
+
|
|
268
|
+
await sources.createAsync({
|
|
269
|
+
key: 'courses',
|
|
270
|
+
name: 'Courses',
|
|
271
|
+
type: 'api',
|
|
272
|
+
metadata: { url: 'https://example.com/courses.json' }
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
// See the real shape before authoring paths against it
|
|
276
|
+
const value = await sources.resolveAsync('courses');
|
|
277
|
+
|
|
278
|
+
// A loop block points its target at the expression — there is no loop id
|
|
279
|
+
etch.blocks.update(loopBlockId, { target: "data('courses')" });
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Reads (`list`, `get`, `findDataSource`) are synchronous; writes persist to the
|
|
284
|
+
backend immediately and do not wait for `saveAsync()`.
|
|
285
|
+
|
|
257
286
|
### Skills
|
|
258
287
|
|
|
259
288
|
`etch.skills` exposes the bundled, read-only authoring guides Etch ships (e.g.
|
|
@@ -317,6 +346,7 @@ is imported.
|
|
|
317
346
|
- **Stylesheets** — `EtchStylesheetsApi`, `StylesheetSummary`, `StylesheetInput`, `StylesheetPatch`
|
|
318
347
|
- **Components** — `EtchComponentsApi`, `PublicComponentSummary`, `PublicComponentJson`, `ComponentPatch`, `ComponentProperty`, …
|
|
319
348
|
- **Loops** — `EtchLoopsApi`, `EtchLoop`, `EtchLoopConfig`, `BlockLoopBinding`, …
|
|
349
|
+
- **Data sources** — `EtchDataSourcesApi`, `EtchDataSource`, `EtchDataSourceType`, `EtchDataSourcePatch`
|
|
320
350
|
- **Navigation** — `EtchNavigationApi`, `NavigationPlace`, `PostSummary`, `TemplateSummary`
|
|
321
351
|
- **Fields** — `EtchFieldsApi`, `CustomField`, `CustomFieldGroup`, …
|
|
322
352
|
- **Skills** — `EtchSkillsApi`, `SkillSummary`, `SkillDetail`
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/client.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/client.ts"],"names":[],"mappings":";;;AA0BO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EAGvC,WAAA,CAAY,MAAwB,OAAA,EAAiB;AACpD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACb;AACD;AAGO,SAAS,eAAe,KAAA,EAAuC;AACrE,EAAA,OACC,KAAA,YAAiB,YAAA,IAChB,KAAA,EAAiB,IAAA,KAAS,cAAA;AAE7B;;;AClCO,IAAM,gBAAA,GAAmB;;;ACIhC,SAAS,QAAA,GAA6B;AACrC,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,OAAO,KAAA,CAAM,IAAA;AACd;AAMO,SAAS,eAAA,GAA2B;AAC1C,EAAA,OAAO,UAAS,KAAM,MAAA;AACvB;AAGA,SAAS,QAAQ,OAAA,EAAgC;AAChD,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AACtC,EAAA,OAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,IAAA;AACnC;AAOA,SAAS,kBAAA,CAAmB,WAAmB,OAAA,EAAuB;AACrE,EAAA,MAAM,IAAA,GAAO,QAAQ,SAAS,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAQ,OAAO,CAAA;AAC5B,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,IAAQ,SAAS,IAAA,EAAM;AACrD,EAAA,OAAA,CAAQ,IAAA;AAAA,IACP,CAAA,qDAAA,EAAwD,SAAS,CAAA,wBAAA,EAC9C,OAAO,CAAA,sBAAA;AAAA,GAC3B;AACD;AAsBO,SAAS,OAAA,CAAQ,OAAA,GAA0B,EAAC,EAAS;AAC3D,EAAA,MAAM,OAAO,QAAA,EAAS;AACtB,EAAA,IAAI,CAAC,IAAA,EAAM;AACV,IAAA,MAAM,IAAI,YAAA;AAAA,MACT,eAAA;AAAA,MACA;AAAA,KAED;AAAA,EACD;AAEA,EAAA,IAAI,OAAO,IAAA,CAAK,OAAA,KAAY,UAAA,EAAY;AACvC,IAAA,OAAO,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,QAAQ,UAAA,EAAY;AACvB,IAAA,kBAAA;AAAA,MACC,OAAA,CAAQ,UAAA;AAAA,MACR,KAAK,UAAA,IAAc;AAAA,KACpB;AAAA,EACD;AACA,EAAA,OAAO,IAAA;AACR","file":"index.cjs","sourcesContent":["/**\n * Error codes thrown by the public `window.etch` API.\n *\n * The API throws typed errors (rather than returning sentinels) so that AI\n * assistants and plugin authors can `try`/`catch` and react to a precise cause.\n *\n * The union ends with `(string & {})` so that codes added by newer Etch\n * runtimes still type-check as `EtchApiErrorCode` while keeping autocomplete for\n * the known values.\n */\nexport type EtchApiErrorCode =\n\t| 'BLOCK_NOT_FOUND'\n\t| 'WRONG_BLOCK_TYPE'\n\t| 'READONLY'\n\t| 'INVALID_ARGUMENT'\n\t| 'LOOP_NOT_FOUND'\n\t| 'DATA_SOURCE_NOT_FOUND'\n\t| 'STYLE_NOT_FOUND'\n\t| 'STYLESHEET_NOT_FOUND'\n\t| 'COMPONENT_NOT_FOUND'\n\t| 'POST_NOT_FOUND'\n\t| 'OPERATION_FAILED'\n\t| 'NOT_AVAILABLE'\n\t| (string & {});\n\n/** Error thrown by the public Etch API (and by this client). */\nexport class EtchApiError extends Error {\n\treadonly code: EtchApiErrorCode;\n\n\tconstructor(code: EtchApiErrorCode, message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'EtchApiError';\n\t\tthis.code = code;\n\t}\n}\n\n/** Narrow an unknown caught value to an {@link EtchApiError}. */\nexport function isEtchApiError(value: unknown): value is EtchApiError {\n\treturn (\n\t\tvalue instanceof EtchApiError ||\n\t\t(value as Error)?.name === 'EtchApiError'\n\t);\n}\n","/**\n * Version of the Etch scripting **contract** this package targets, independent\n * of the Etch product version and of this package's own npm version.\n *\n * `0.x` signals the surface is **experimental** and may change without a major\n * bump until it stabilizes. It matches the value returned by the runtime's\n * {@link Etch.apiVersion} getter on `window.etch`.\n */\nexport const ETCH_API_VERSION = '0.x';\n","import type { ConnectOptions, Etch } from './contract';\nimport { EtchApiError } from './errors';\nimport { ETCH_API_VERSION } from './version';\n\ndeclare global {\n\tinterface Window {\n\t\t/** The Etch scripting API, present once the builder has loaded. */\n\t\tetch?: Etch;\n\t}\n}\n\n/** Read `window.etch` from whatever global object exists, or `undefined`. */\nfunction readEtch(): Etch | undefined {\n\tconst scope = globalThis as { etch?: Etch };\n\treturn scope.etch;\n}\n\n/**\n * Whether the Etch scripting API is present on the page. Use this to guard code\n * that should no-op when not running inside the builder.\n */\nexport function isEtchAvailable(): boolean {\n\treturn readEtch() !== undefined;\n}\n\n/** The major version number of a semver-ish string, or `null` if unparseable. */\nfunction majorOf(version: string): number | null {\n\tconst match = /^\\D*(\\d+)/.exec(version);\n\treturn match ? Number(match[1]) : null;\n}\n\n/**\n * Best-effort compatibility check for `0.x` runtimes that have no native\n * `connect()`. Warns (does not throw) when the requested major differs from the\n * runtime's, so experimental consumers aren't hard-blocked.\n */\nfunction warnIfIncompatible(requested: string, runtime: string): void {\n\tconst want = majorOf(requested);\n\tconst have = majorOf(runtime);\n\tif (want === null || have === null || want === have) return;\n\tconsole.warn(\n\t\t`[@digital-gravy/etch-public-api] Requested Etch API v${requested} but the ` +\n\t\t\t`page provides v${runtime}. Behavior may differ.`\n\t);\n}\n\n/**\n * Acquire the Etch scripting API from the page.\n *\n * The runtime lives on `window.etch` (injected by the builder); this returns it\n * typed. When the page exposes a future stable runtime with a native\n * `connect()`, version negotiation is delegated to it. On today's `0.x`\n * runtime, the global is returned directly after a best-effort version check.\n *\n * @throws {EtchApiError} `NOT_AVAILABLE` when the builder is not present.\n *\n * @example\n * ```ts\n * import { getEtch } from '@etchwp/public-api';\n *\n * const etch = getEtch();\n * const ids = etch.blocks.find({ type: 'text' });\n * etch.blocks.setText(ids[0], 'Hello');\n * await etch.saveAsync();\n * ```\n */\nexport function getEtch(options: ConnectOptions = {}): Etch {\n\tconst etch = readEtch();\n\tif (!etch) {\n\t\tthrow new EtchApiError(\n\t\t\t'NOT_AVAILABLE',\n\t\t\t'window.etch is not available. The Etch builder is not loaded on this page, ' +\n\t\t\t\t'or getEtch() ran before it finished initializing.'\n\t\t);\n\t}\n\n\tif (typeof etch.connect === 'function') {\n\t\treturn etch.connect(options);\n\t}\n\n\tif (options.apiVersion) {\n\t\twarnIfIncompatible(\n\t\t\toptions.apiVersion,\n\t\t\tetch.apiVersion ?? ETCH_API_VERSION\n\t\t);\n\t}\n\treturn etch;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -747,6 +747,101 @@ interface EtchEnvironment {
|
|
|
747
747
|
readonly blockTypes: readonly string[];
|
|
748
748
|
}
|
|
749
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Project data sources and the `etch.dataSources` API surface.
|
|
752
|
+
*
|
|
753
|
+
* Data sources are the `dataSources` capability's model of dynamic data, and
|
|
754
|
+
* they supersede {@link EtchLoopsApi | loops}: a named, typed source is defined
|
|
755
|
+
* once for the project and read anywhere an expression is accepted, through
|
|
756
|
+
* `data('key')`. A loop block points its `target` at one of those expressions
|
|
757
|
+
* rather than binding to a loop id.
|
|
758
|
+
*
|
|
759
|
+
* Check `etch.environment.capabilities.dataSources === true` before using this
|
|
760
|
+
* namespace — a runtime without it omits the whole thing.
|
|
761
|
+
*/
|
|
762
|
+
/**
|
|
763
|
+
* A source type. The three built-ins are listed; the registry behind the
|
|
764
|
+
* runtime is open, so a host may serve types this contract has never heard of.
|
|
765
|
+
*/
|
|
766
|
+
type EtchDataSourceType = 'json' | 'api' | 'js' | (string & {});
|
|
767
|
+
/**
|
|
768
|
+
* A project data source, identified by its `key` — the name `data('key')`
|
|
769
|
+
* calls it by.
|
|
770
|
+
*/
|
|
771
|
+
interface EtchDataSource {
|
|
772
|
+
/**
|
|
773
|
+
* Stable identifier used in expressions: `data('products')`. Unique within
|
|
774
|
+
* the project, and part of every authored expression that reads the source,
|
|
775
|
+
* so renaming one breaks those expressions.
|
|
776
|
+
*/
|
|
777
|
+
key: string;
|
|
778
|
+
/** Display name shown in the data manager. */
|
|
779
|
+
name: string;
|
|
780
|
+
/** Which kind of source this is; decides how `metadata` is read. */
|
|
781
|
+
type: EtchDataSourceType;
|
|
782
|
+
/**
|
|
783
|
+
* Type-specific configuration. The built-in types read:
|
|
784
|
+
*
|
|
785
|
+
* - `json` — `{ data: unknown }`, the payload served verbatim.
|
|
786
|
+
* - `api` — `{ url: string; method?: string; headers?: [string, string][] }`,
|
|
787
|
+
* fetched and parsed as JSON. A non-OK response fails the source.
|
|
788
|
+
* - `js` — `{ code: string }`, a function body run in a sandbox. Arguments
|
|
789
|
+
* passed by the expression (`data('rows', 5)`) arrive as `args`.
|
|
790
|
+
*/
|
|
791
|
+
metadata: Record<string, unknown>;
|
|
792
|
+
}
|
|
793
|
+
/** Fields of an {@link EtchDataSource} that `updateAsync` can change. */
|
|
794
|
+
type EtchDataSourcePatch = Partial<EtchDataSource>;
|
|
795
|
+
/**
|
|
796
|
+
* Project data sources: definitions, and resolving one to its value.
|
|
797
|
+
*
|
|
798
|
+
* Reads are synchronous — the project's sources are loaded before `window.etch`
|
|
799
|
+
* exists. Writes persist to the backend immediately (they do not wait for
|
|
800
|
+
* {@link Etch.saveAsync}) and drop any value already resolved from the source,
|
|
801
|
+
* so the canvas re-reads it.
|
|
802
|
+
*/
|
|
803
|
+
interface EtchDataSourcesApi {
|
|
804
|
+
/** Every data source defined for this project. */
|
|
805
|
+
list(): EtchDataSource[];
|
|
806
|
+
/**
|
|
807
|
+
* One data source by key.
|
|
808
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
809
|
+
*/
|
|
810
|
+
get(key: string): EtchDataSource;
|
|
811
|
+
/**
|
|
812
|
+
* Fuzzy-search data sources by `name` or `key`, ranked best-first. Returns
|
|
813
|
+
* an empty array for a blank query or when nothing matches.
|
|
814
|
+
*/
|
|
815
|
+
findDataSource(query: string): EtchDataSource[];
|
|
816
|
+
/**
|
|
817
|
+
* Define a new data source.
|
|
818
|
+
* @throws {EtchApiError} `INVALID_ARGUMENT` on a malformed source, or when
|
|
819
|
+
* the key is already taken.
|
|
820
|
+
*/
|
|
821
|
+
createAsync(source: EtchDataSource): Promise<EtchDataSource>;
|
|
822
|
+
/**
|
|
823
|
+
* Change an existing data source. Only the fields present are applied.
|
|
824
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
825
|
+
*/
|
|
826
|
+
updateAsync(key: string, patch: EtchDataSourcePatch): Promise<EtchDataSource>;
|
|
827
|
+
/**
|
|
828
|
+
* Delete a data source. Expressions still naming it resolve to `undefined`.
|
|
829
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
830
|
+
*/
|
|
831
|
+
deleteAsync(key: string): Promise<void>;
|
|
832
|
+
/**
|
|
833
|
+
* Resolve a data source to its value, exactly as `data('key', ...args)`
|
|
834
|
+
* would on the canvas — read this before authoring the property paths that
|
|
835
|
+
* depend on its shape.
|
|
836
|
+
*
|
|
837
|
+
* A source that fails resolves to `undefined` rather than rejecting, which
|
|
838
|
+
* is what the render sees too.
|
|
839
|
+
*
|
|
840
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
841
|
+
*/
|
|
842
|
+
resolveAsync(key: string, ...args: unknown[]): Promise<unknown>;
|
|
843
|
+
}
|
|
844
|
+
|
|
750
845
|
/**
|
|
751
846
|
* Global style (CSS rule) shapes and the `etch.styles` API surface.
|
|
752
847
|
*/
|
|
@@ -1546,6 +1641,16 @@ interface Etch {
|
|
|
1546
1641
|
blocks: EtchBlocksApi;
|
|
1547
1642
|
/** Loop definitions and binding loops to blocks. */
|
|
1548
1643
|
loops: EtchLoopsApi;
|
|
1644
|
+
/**
|
|
1645
|
+
* Project data sources — the `dataSources` capability's model of dynamic
|
|
1646
|
+
* data, which supersedes {@link loops}.
|
|
1647
|
+
*
|
|
1648
|
+
* Optional: a runtime that does not back the capability omits the namespace
|
|
1649
|
+
* entirely rather than stubbing it, so check
|
|
1650
|
+
* `environment.capabilities.dataSources === true` (or the presence of this
|
|
1651
|
+
* property) before calling it.
|
|
1652
|
+
*/
|
|
1653
|
+
dataSources?: EtchDataSourcesApi;
|
|
1549
1654
|
/** Global style (CSS) definitions and CSS variables. */
|
|
1550
1655
|
styles: EtchStylesApi;
|
|
1551
1656
|
/** Global stylesheets and `@custom-media` definitions. */
|
|
@@ -1650,7 +1755,7 @@ declare function getEtch(options?: ConnectOptions): Etch;
|
|
|
1650
1755
|
* runtimes still type-check as `EtchApiErrorCode` while keeping autocomplete for
|
|
1651
1756
|
* the known values.
|
|
1652
1757
|
*/
|
|
1653
|
-
type EtchApiErrorCode = 'BLOCK_NOT_FOUND' | 'WRONG_BLOCK_TYPE' | 'READONLY' | 'INVALID_ARGUMENT' | 'LOOP_NOT_FOUND' | 'STYLE_NOT_FOUND' | 'STYLESHEET_NOT_FOUND' | 'COMPONENT_NOT_FOUND' | 'POST_NOT_FOUND' | 'OPERATION_FAILED' | 'NOT_AVAILABLE' | (string & {});
|
|
1758
|
+
type EtchApiErrorCode = 'BLOCK_NOT_FOUND' | 'WRONG_BLOCK_TYPE' | 'READONLY' | 'INVALID_ARGUMENT' | 'LOOP_NOT_FOUND' | 'DATA_SOURCE_NOT_FOUND' | 'STYLE_NOT_FOUND' | 'STYLESHEET_NOT_FOUND' | 'COMPONENT_NOT_FOUND' | 'POST_NOT_FOUND' | 'OPERATION_FAILED' | 'NOT_AVAILABLE' | (string & {});
|
|
1654
1759
|
/** Error thrown by the public Etch API (and by this client). */
|
|
1655
1760
|
declare class EtchApiError extends Error {
|
|
1656
1761
|
readonly code: EtchApiErrorCode;
|
|
@@ -1669,4 +1774,4 @@ declare function isEtchApiError(value: unknown): value is EtchApiError;
|
|
|
1669
1774
|
*/
|
|
1670
1775
|
declare const ETCH_API_VERSION = "0.x";
|
|
1671
1776
|
|
|
1672
|
-
export { type ArrayComponentProperty, type BlockLoopBinding, type BlockPatch, type BooleanComponentProperty, type BooleanParam, type BridgeConnectOptions, type ClassComponentProperty, type ColorScheme, type ComponentPatch, type ComponentProperty, type ComponentPropertyBase, type ConditionComponentProperty, type ConnectOptions, type CopyObject, type CustomField, type CustomFieldAssignment, type CustomFieldGroup, type CustomFieldType, ETCH_API_VERSION, type Etch, type EtchAiApi, EtchApiError, type EtchApiErrorCode, type EtchBlockCommon, type EtchBlockContext, type EtchBlockJson, type EtchBlockOptions, type EtchBlockScript, type EtchBlockType, type EtchBlockTypeName, type EtchBlocksApi, type EtchBridgeConnection, type EtchCapabilities, type EtchCapability, type EtchComponentBlockJson, type EtchComponentsApi, type EtchConditionBlockJson, type EtchDynamicElementBlockJson, type EtchDynamicImageBlockJson, type EtchElementBlockJson, type EtchEnvironment, type EtchFieldsApi, type EtchHistoryApi, type EtchHtmlAttributes, type EtchLoop, type EtchLoopBlockJson, type EtchLoopConfig, type EtchLoopObj, type EtchLoopsApi, type EtchNavigationApi, type EtchPassthroughBlockJson, type EtchPostContentBlockJson, type EtchProduct, type EtchRawHtmlBlockJson, type EtchRenderBlockJson, type EtchSkillsApi, type EtchSlotContentBlockJson, type EtchSlotPlaceholderBlockJson, type EtchStylesApi, type EtchStylesheetsApi, type EtchSvgBlockJson, type EtchTextBlockJson, type EtchUiApi, type ExternalAiState, type FindBlocksPredicate, type GroupComponentProperty, type GutenbergBlock, type LoopParamRef, type MetaQueryItem, type NavigationPlace, type NumberComponentProperty, type NumericParam, type ObjectComponentProperty, type PostCustomFieldGroupEntry, type PostCustomFieldValueEntry, type PostCustomFieldValueResponse, type PostCustomFieldValuesResponse, type PostSummary, type PublicBlockJson, type PublicComponentJson, type PublicComponentSummary, type RepeaterComponentProperty, type ResolvedCustomField, type SelectOptionsString, type SkillDetail, type SkillSummary, type StringComponentProperty, type StyleListFilter, type StylePatch, type StyleSelectorType, type StyleSummary, type StylesheetInput, type StylesheetPatch, type StylesheetSummary, type StylesheetType, type TaxQueryItem, type TemplateSummary, type WpQueryArgs, type WpTermsArgs, type WpUsersArgs, getEtch, isEtchApiError, isEtchAvailable };
|
|
1777
|
+
export { type ArrayComponentProperty, type BlockLoopBinding, type BlockPatch, type BooleanComponentProperty, type BooleanParam, type BridgeConnectOptions, type ClassComponentProperty, type ColorScheme, type ComponentPatch, type ComponentProperty, type ComponentPropertyBase, type ConditionComponentProperty, type ConnectOptions, type CopyObject, type CustomField, type CustomFieldAssignment, type CustomFieldGroup, type CustomFieldType, ETCH_API_VERSION, type Etch, type EtchAiApi, EtchApiError, type EtchApiErrorCode, type EtchBlockCommon, type EtchBlockContext, type EtchBlockJson, type EtchBlockOptions, type EtchBlockScript, type EtchBlockType, type EtchBlockTypeName, type EtchBlocksApi, type EtchBridgeConnection, type EtchCapabilities, type EtchCapability, type EtchComponentBlockJson, type EtchComponentsApi, type EtchConditionBlockJson, type EtchDataSource, type EtchDataSourcePatch, type EtchDataSourceType, type EtchDataSourcesApi, type EtchDynamicElementBlockJson, type EtchDynamicImageBlockJson, type EtchElementBlockJson, type EtchEnvironment, type EtchFieldsApi, type EtchHistoryApi, type EtchHtmlAttributes, type EtchLoop, type EtchLoopBlockJson, type EtchLoopConfig, type EtchLoopObj, type EtchLoopsApi, type EtchNavigationApi, type EtchPassthroughBlockJson, type EtchPostContentBlockJson, type EtchProduct, type EtchRawHtmlBlockJson, type EtchRenderBlockJson, type EtchSkillsApi, type EtchSlotContentBlockJson, type EtchSlotPlaceholderBlockJson, type EtchStylesApi, type EtchStylesheetsApi, type EtchSvgBlockJson, type EtchTextBlockJson, type EtchUiApi, type ExternalAiState, type FindBlocksPredicate, type GroupComponentProperty, type GutenbergBlock, type LoopParamRef, type MetaQueryItem, type NavigationPlace, type NumberComponentProperty, type NumericParam, type ObjectComponentProperty, type PostCustomFieldGroupEntry, type PostCustomFieldValueEntry, type PostCustomFieldValueResponse, type PostCustomFieldValuesResponse, type PostSummary, type PublicBlockJson, type PublicComponentJson, type PublicComponentSummary, type RepeaterComponentProperty, type ResolvedCustomField, type SelectOptionsString, type SkillDetail, type SkillSummary, type StringComponentProperty, type StyleListFilter, type StylePatch, type StyleSelectorType, type StyleSummary, type StylesheetInput, type StylesheetPatch, type StylesheetSummary, type StylesheetType, type TaxQueryItem, type TemplateSummary, type WpQueryArgs, type WpTermsArgs, type WpUsersArgs, getEtch, isEtchApiError, isEtchAvailable };
|
package/dist/index.d.ts
CHANGED
|
@@ -747,6 +747,101 @@ interface EtchEnvironment {
|
|
|
747
747
|
readonly blockTypes: readonly string[];
|
|
748
748
|
}
|
|
749
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Project data sources and the `etch.dataSources` API surface.
|
|
752
|
+
*
|
|
753
|
+
* Data sources are the `dataSources` capability's model of dynamic data, and
|
|
754
|
+
* they supersede {@link EtchLoopsApi | loops}: a named, typed source is defined
|
|
755
|
+
* once for the project and read anywhere an expression is accepted, through
|
|
756
|
+
* `data('key')`. A loop block points its `target` at one of those expressions
|
|
757
|
+
* rather than binding to a loop id.
|
|
758
|
+
*
|
|
759
|
+
* Check `etch.environment.capabilities.dataSources === true` before using this
|
|
760
|
+
* namespace — a runtime without it omits the whole thing.
|
|
761
|
+
*/
|
|
762
|
+
/**
|
|
763
|
+
* A source type. The three built-ins are listed; the registry behind the
|
|
764
|
+
* runtime is open, so a host may serve types this contract has never heard of.
|
|
765
|
+
*/
|
|
766
|
+
type EtchDataSourceType = 'json' | 'api' | 'js' | (string & {});
|
|
767
|
+
/**
|
|
768
|
+
* A project data source, identified by its `key` — the name `data('key')`
|
|
769
|
+
* calls it by.
|
|
770
|
+
*/
|
|
771
|
+
interface EtchDataSource {
|
|
772
|
+
/**
|
|
773
|
+
* Stable identifier used in expressions: `data('products')`. Unique within
|
|
774
|
+
* the project, and part of every authored expression that reads the source,
|
|
775
|
+
* so renaming one breaks those expressions.
|
|
776
|
+
*/
|
|
777
|
+
key: string;
|
|
778
|
+
/** Display name shown in the data manager. */
|
|
779
|
+
name: string;
|
|
780
|
+
/** Which kind of source this is; decides how `metadata` is read. */
|
|
781
|
+
type: EtchDataSourceType;
|
|
782
|
+
/**
|
|
783
|
+
* Type-specific configuration. The built-in types read:
|
|
784
|
+
*
|
|
785
|
+
* - `json` — `{ data: unknown }`, the payload served verbatim.
|
|
786
|
+
* - `api` — `{ url: string; method?: string; headers?: [string, string][] }`,
|
|
787
|
+
* fetched and parsed as JSON. A non-OK response fails the source.
|
|
788
|
+
* - `js` — `{ code: string }`, a function body run in a sandbox. Arguments
|
|
789
|
+
* passed by the expression (`data('rows', 5)`) arrive as `args`.
|
|
790
|
+
*/
|
|
791
|
+
metadata: Record<string, unknown>;
|
|
792
|
+
}
|
|
793
|
+
/** Fields of an {@link EtchDataSource} that `updateAsync` can change. */
|
|
794
|
+
type EtchDataSourcePatch = Partial<EtchDataSource>;
|
|
795
|
+
/**
|
|
796
|
+
* Project data sources: definitions, and resolving one to its value.
|
|
797
|
+
*
|
|
798
|
+
* Reads are synchronous — the project's sources are loaded before `window.etch`
|
|
799
|
+
* exists. Writes persist to the backend immediately (they do not wait for
|
|
800
|
+
* {@link Etch.saveAsync}) and drop any value already resolved from the source,
|
|
801
|
+
* so the canvas re-reads it.
|
|
802
|
+
*/
|
|
803
|
+
interface EtchDataSourcesApi {
|
|
804
|
+
/** Every data source defined for this project. */
|
|
805
|
+
list(): EtchDataSource[];
|
|
806
|
+
/**
|
|
807
|
+
* One data source by key.
|
|
808
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
809
|
+
*/
|
|
810
|
+
get(key: string): EtchDataSource;
|
|
811
|
+
/**
|
|
812
|
+
* Fuzzy-search data sources by `name` or `key`, ranked best-first. Returns
|
|
813
|
+
* an empty array for a blank query or when nothing matches.
|
|
814
|
+
*/
|
|
815
|
+
findDataSource(query: string): EtchDataSource[];
|
|
816
|
+
/**
|
|
817
|
+
* Define a new data source.
|
|
818
|
+
* @throws {EtchApiError} `INVALID_ARGUMENT` on a malformed source, or when
|
|
819
|
+
* the key is already taken.
|
|
820
|
+
*/
|
|
821
|
+
createAsync(source: EtchDataSource): Promise<EtchDataSource>;
|
|
822
|
+
/**
|
|
823
|
+
* Change an existing data source. Only the fields present are applied.
|
|
824
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
825
|
+
*/
|
|
826
|
+
updateAsync(key: string, patch: EtchDataSourcePatch): Promise<EtchDataSource>;
|
|
827
|
+
/**
|
|
828
|
+
* Delete a data source. Expressions still naming it resolve to `undefined`.
|
|
829
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
830
|
+
*/
|
|
831
|
+
deleteAsync(key: string): Promise<void>;
|
|
832
|
+
/**
|
|
833
|
+
* Resolve a data source to its value, exactly as `data('key', ...args)`
|
|
834
|
+
* would on the canvas — read this before authoring the property paths that
|
|
835
|
+
* depend on its shape.
|
|
836
|
+
*
|
|
837
|
+
* A source that fails resolves to `undefined` rather than rejecting, which
|
|
838
|
+
* is what the render sees too.
|
|
839
|
+
*
|
|
840
|
+
* @throws {EtchApiError} `DATA_SOURCE_NOT_FOUND`
|
|
841
|
+
*/
|
|
842
|
+
resolveAsync(key: string, ...args: unknown[]): Promise<unknown>;
|
|
843
|
+
}
|
|
844
|
+
|
|
750
845
|
/**
|
|
751
846
|
* Global style (CSS rule) shapes and the `etch.styles` API surface.
|
|
752
847
|
*/
|
|
@@ -1546,6 +1641,16 @@ interface Etch {
|
|
|
1546
1641
|
blocks: EtchBlocksApi;
|
|
1547
1642
|
/** Loop definitions and binding loops to blocks. */
|
|
1548
1643
|
loops: EtchLoopsApi;
|
|
1644
|
+
/**
|
|
1645
|
+
* Project data sources — the `dataSources` capability's model of dynamic
|
|
1646
|
+
* data, which supersedes {@link loops}.
|
|
1647
|
+
*
|
|
1648
|
+
* Optional: a runtime that does not back the capability omits the namespace
|
|
1649
|
+
* entirely rather than stubbing it, so check
|
|
1650
|
+
* `environment.capabilities.dataSources === true` (or the presence of this
|
|
1651
|
+
* property) before calling it.
|
|
1652
|
+
*/
|
|
1653
|
+
dataSources?: EtchDataSourcesApi;
|
|
1549
1654
|
/** Global style (CSS) definitions and CSS variables. */
|
|
1550
1655
|
styles: EtchStylesApi;
|
|
1551
1656
|
/** Global stylesheets and `@custom-media` definitions. */
|
|
@@ -1650,7 +1755,7 @@ declare function getEtch(options?: ConnectOptions): Etch;
|
|
|
1650
1755
|
* runtimes still type-check as `EtchApiErrorCode` while keeping autocomplete for
|
|
1651
1756
|
* the known values.
|
|
1652
1757
|
*/
|
|
1653
|
-
type EtchApiErrorCode = 'BLOCK_NOT_FOUND' | 'WRONG_BLOCK_TYPE' | 'READONLY' | 'INVALID_ARGUMENT' | 'LOOP_NOT_FOUND' | 'STYLE_NOT_FOUND' | 'STYLESHEET_NOT_FOUND' | 'COMPONENT_NOT_FOUND' | 'POST_NOT_FOUND' | 'OPERATION_FAILED' | 'NOT_AVAILABLE' | (string & {});
|
|
1758
|
+
type EtchApiErrorCode = 'BLOCK_NOT_FOUND' | 'WRONG_BLOCK_TYPE' | 'READONLY' | 'INVALID_ARGUMENT' | 'LOOP_NOT_FOUND' | 'DATA_SOURCE_NOT_FOUND' | 'STYLE_NOT_FOUND' | 'STYLESHEET_NOT_FOUND' | 'COMPONENT_NOT_FOUND' | 'POST_NOT_FOUND' | 'OPERATION_FAILED' | 'NOT_AVAILABLE' | (string & {});
|
|
1654
1759
|
/** Error thrown by the public Etch API (and by this client). */
|
|
1655
1760
|
declare class EtchApiError extends Error {
|
|
1656
1761
|
readonly code: EtchApiErrorCode;
|
|
@@ -1669,4 +1774,4 @@ declare function isEtchApiError(value: unknown): value is EtchApiError;
|
|
|
1669
1774
|
*/
|
|
1670
1775
|
declare const ETCH_API_VERSION = "0.x";
|
|
1671
1776
|
|
|
1672
|
-
export { type ArrayComponentProperty, type BlockLoopBinding, type BlockPatch, type BooleanComponentProperty, type BooleanParam, type BridgeConnectOptions, type ClassComponentProperty, type ColorScheme, type ComponentPatch, type ComponentProperty, type ComponentPropertyBase, type ConditionComponentProperty, type ConnectOptions, type CopyObject, type CustomField, type CustomFieldAssignment, type CustomFieldGroup, type CustomFieldType, ETCH_API_VERSION, type Etch, type EtchAiApi, EtchApiError, type EtchApiErrorCode, type EtchBlockCommon, type EtchBlockContext, type EtchBlockJson, type EtchBlockOptions, type EtchBlockScript, type EtchBlockType, type EtchBlockTypeName, type EtchBlocksApi, type EtchBridgeConnection, type EtchCapabilities, type EtchCapability, type EtchComponentBlockJson, type EtchComponentsApi, type EtchConditionBlockJson, type EtchDynamicElementBlockJson, type EtchDynamicImageBlockJson, type EtchElementBlockJson, type EtchEnvironment, type EtchFieldsApi, type EtchHistoryApi, type EtchHtmlAttributes, type EtchLoop, type EtchLoopBlockJson, type EtchLoopConfig, type EtchLoopObj, type EtchLoopsApi, type EtchNavigationApi, type EtchPassthroughBlockJson, type EtchPostContentBlockJson, type EtchProduct, type EtchRawHtmlBlockJson, type EtchRenderBlockJson, type EtchSkillsApi, type EtchSlotContentBlockJson, type EtchSlotPlaceholderBlockJson, type EtchStylesApi, type EtchStylesheetsApi, type EtchSvgBlockJson, type EtchTextBlockJson, type EtchUiApi, type ExternalAiState, type FindBlocksPredicate, type GroupComponentProperty, type GutenbergBlock, type LoopParamRef, type MetaQueryItem, type NavigationPlace, type NumberComponentProperty, type NumericParam, type ObjectComponentProperty, type PostCustomFieldGroupEntry, type PostCustomFieldValueEntry, type PostCustomFieldValueResponse, type PostCustomFieldValuesResponse, type PostSummary, type PublicBlockJson, type PublicComponentJson, type PublicComponentSummary, type RepeaterComponentProperty, type ResolvedCustomField, type SelectOptionsString, type SkillDetail, type SkillSummary, type StringComponentProperty, type StyleListFilter, type StylePatch, type StyleSelectorType, type StyleSummary, type StylesheetInput, type StylesheetPatch, type StylesheetSummary, type StylesheetType, type TaxQueryItem, type TemplateSummary, type WpQueryArgs, type WpTermsArgs, type WpUsersArgs, getEtch, isEtchApiError, isEtchAvailable };
|
|
1777
|
+
export { type ArrayComponentProperty, type BlockLoopBinding, type BlockPatch, type BooleanComponentProperty, type BooleanParam, type BridgeConnectOptions, type ClassComponentProperty, type ColorScheme, type ComponentPatch, type ComponentProperty, type ComponentPropertyBase, type ConditionComponentProperty, type ConnectOptions, type CopyObject, type CustomField, type CustomFieldAssignment, type CustomFieldGroup, type CustomFieldType, ETCH_API_VERSION, type Etch, type EtchAiApi, EtchApiError, type EtchApiErrorCode, type EtchBlockCommon, type EtchBlockContext, type EtchBlockJson, type EtchBlockOptions, type EtchBlockScript, type EtchBlockType, type EtchBlockTypeName, type EtchBlocksApi, type EtchBridgeConnection, type EtchCapabilities, type EtchCapability, type EtchComponentBlockJson, type EtchComponentsApi, type EtchConditionBlockJson, type EtchDataSource, type EtchDataSourcePatch, type EtchDataSourceType, type EtchDataSourcesApi, type EtchDynamicElementBlockJson, type EtchDynamicImageBlockJson, type EtchElementBlockJson, type EtchEnvironment, type EtchFieldsApi, type EtchHistoryApi, type EtchHtmlAttributes, type EtchLoop, type EtchLoopBlockJson, type EtchLoopConfig, type EtchLoopObj, type EtchLoopsApi, type EtchNavigationApi, type EtchPassthroughBlockJson, type EtchPostContentBlockJson, type EtchProduct, type EtchRawHtmlBlockJson, type EtchRenderBlockJson, type EtchSkillsApi, type EtchSlotContentBlockJson, type EtchSlotPlaceholderBlockJson, type EtchStylesApi, type EtchStylesheetsApi, type EtchSvgBlockJson, type EtchTextBlockJson, type EtchUiApi, type ExternalAiState, type FindBlocksPredicate, type GroupComponentProperty, type GutenbergBlock, type LoopParamRef, type MetaQueryItem, type NavigationPlace, type NumberComponentProperty, type NumericParam, type ObjectComponentProperty, type PostCustomFieldGroupEntry, type PostCustomFieldValueEntry, type PostCustomFieldValueResponse, type PostCustomFieldValuesResponse, type PostSummary, type PublicBlockJson, type PublicComponentJson, type PublicComponentSummary, type RepeaterComponentProperty, type ResolvedCustomField, type SelectOptionsString, type SkillDetail, type SkillSummary, type StringComponentProperty, type StyleListFilter, type StylePatch, type StyleSelectorType, type StyleSummary, type StylesheetInput, type StylesheetPatch, type StylesheetSummary, type StylesheetType, type TaxQueryItem, type TemplateSummary, type WpQueryArgs, type WpTermsArgs, type WpUsersArgs, getEtch, isEtchApiError, isEtchAvailable };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/client.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/client.ts"],"names":[],"mappings":";AA0BO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EAGvC,WAAA,CAAY,MAAwB,OAAA,EAAiB;AACpD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACb;AACD;AAGO,SAAS,eAAe,KAAA,EAAuC;AACrE,EAAA,OACC,KAAA,YAAiB,YAAA,IAChB,KAAA,EAAiB,IAAA,KAAS,cAAA;AAE7B;;;AClCO,IAAM,gBAAA,GAAmB;;;ACIhC,SAAS,QAAA,GAA6B;AACrC,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,OAAO,KAAA,CAAM,IAAA;AACd;AAMO,SAAS,eAAA,GAA2B;AAC1C,EAAA,OAAO,UAAS,KAAM,MAAA;AACvB;AAGA,SAAS,QAAQ,OAAA,EAAgC;AAChD,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AACtC,EAAA,OAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,IAAA;AACnC;AAOA,SAAS,kBAAA,CAAmB,WAAmB,OAAA,EAAuB;AACrE,EAAA,MAAM,IAAA,GAAO,QAAQ,SAAS,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAQ,OAAO,CAAA;AAC5B,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,IAAQ,SAAS,IAAA,EAAM;AACrD,EAAA,OAAA,CAAQ,IAAA;AAAA,IACP,CAAA,qDAAA,EAAwD,SAAS,CAAA,wBAAA,EAC9C,OAAO,CAAA,sBAAA;AAAA,GAC3B;AACD;AAsBO,SAAS,OAAA,CAAQ,OAAA,GAA0B,EAAC,EAAS;AAC3D,EAAA,MAAM,OAAO,QAAA,EAAS;AACtB,EAAA,IAAI,CAAC,IAAA,EAAM;AACV,IAAA,MAAM,IAAI,YAAA;AAAA,MACT,eAAA;AAAA,MACA;AAAA,KAED;AAAA,EACD;AAEA,EAAA,IAAI,OAAO,IAAA,CAAK,OAAA,KAAY,UAAA,EAAY;AACvC,IAAA,OAAO,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,QAAQ,UAAA,EAAY;AACvB,IAAA,kBAAA;AAAA,MACC,OAAA,CAAQ,UAAA;AAAA,MACR,KAAK,UAAA,IAAc;AAAA,KACpB;AAAA,EACD;AACA,EAAA,OAAO,IAAA;AACR","file":"index.js","sourcesContent":["/**\n * Error codes thrown by the public `window.etch` API.\n *\n * The API throws typed errors (rather than returning sentinels) so that AI\n * assistants and plugin authors can `try`/`catch` and react to a precise cause.\n *\n * The union ends with `(string & {})` so that codes added by newer Etch\n * runtimes still type-check as `EtchApiErrorCode` while keeping autocomplete for\n * the known values.\n */\nexport type EtchApiErrorCode =\n\t| 'BLOCK_NOT_FOUND'\n\t| 'WRONG_BLOCK_TYPE'\n\t| 'READONLY'\n\t| 'INVALID_ARGUMENT'\n\t| 'LOOP_NOT_FOUND'\n\t| 'DATA_SOURCE_NOT_FOUND'\n\t| 'STYLE_NOT_FOUND'\n\t| 'STYLESHEET_NOT_FOUND'\n\t| 'COMPONENT_NOT_FOUND'\n\t| 'POST_NOT_FOUND'\n\t| 'OPERATION_FAILED'\n\t| 'NOT_AVAILABLE'\n\t| (string & {});\n\n/** Error thrown by the public Etch API (and by this client). */\nexport class EtchApiError extends Error {\n\treadonly code: EtchApiErrorCode;\n\n\tconstructor(code: EtchApiErrorCode, message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'EtchApiError';\n\t\tthis.code = code;\n\t}\n}\n\n/** Narrow an unknown caught value to an {@link EtchApiError}. */\nexport function isEtchApiError(value: unknown): value is EtchApiError {\n\treturn (\n\t\tvalue instanceof EtchApiError ||\n\t\t(value as Error)?.name === 'EtchApiError'\n\t);\n}\n","/**\n * Version of the Etch scripting **contract** this package targets, independent\n * of the Etch product version and of this package's own npm version.\n *\n * `0.x` signals the surface is **experimental** and may change without a major\n * bump until it stabilizes. It matches the value returned by the runtime's\n * {@link Etch.apiVersion} getter on `window.etch`.\n */\nexport const ETCH_API_VERSION = '0.x';\n","import type { ConnectOptions, Etch } from './contract';\nimport { EtchApiError } from './errors';\nimport { ETCH_API_VERSION } from './version';\n\ndeclare global {\n\tinterface Window {\n\t\t/** The Etch scripting API, present once the builder has loaded. */\n\t\tetch?: Etch;\n\t}\n}\n\n/** Read `window.etch` from whatever global object exists, or `undefined`. */\nfunction readEtch(): Etch | undefined {\n\tconst scope = globalThis as { etch?: Etch };\n\treturn scope.etch;\n}\n\n/**\n * Whether the Etch scripting API is present on the page. Use this to guard code\n * that should no-op when not running inside the builder.\n */\nexport function isEtchAvailable(): boolean {\n\treturn readEtch() !== undefined;\n}\n\n/** The major version number of a semver-ish string, or `null` if unparseable. */\nfunction majorOf(version: string): number | null {\n\tconst match = /^\\D*(\\d+)/.exec(version);\n\treturn match ? Number(match[1]) : null;\n}\n\n/**\n * Best-effort compatibility check for `0.x` runtimes that have no native\n * `connect()`. Warns (does not throw) when the requested major differs from the\n * runtime's, so experimental consumers aren't hard-blocked.\n */\nfunction warnIfIncompatible(requested: string, runtime: string): void {\n\tconst want = majorOf(requested);\n\tconst have = majorOf(runtime);\n\tif (want === null || have === null || want === have) return;\n\tconsole.warn(\n\t\t`[@digital-gravy/etch-public-api] Requested Etch API v${requested} but the ` +\n\t\t\t`page provides v${runtime}. Behavior may differ.`\n\t);\n}\n\n/**\n * Acquire the Etch scripting API from the page.\n *\n * The runtime lives on `window.etch` (injected by the builder); this returns it\n * typed. When the page exposes a future stable runtime with a native\n * `connect()`, version negotiation is delegated to it. On today's `0.x`\n * runtime, the global is returned directly after a best-effort version check.\n *\n * @throws {EtchApiError} `NOT_AVAILABLE` when the builder is not present.\n *\n * @example\n * ```ts\n * import { getEtch } from '@etchwp/public-api';\n *\n * const etch = getEtch();\n * const ids = etch.blocks.find({ type: 'text' });\n * etch.blocks.setText(ids[0], 'Hello');\n * await etch.saveAsync();\n * ```\n */\nexport function getEtch(options: ConnectOptions = {}): Etch {\n\tconst etch = readEtch();\n\tif (!etch) {\n\t\tthrow new EtchApiError(\n\t\t\t'NOT_AVAILABLE',\n\t\t\t'window.etch is not available. The Etch builder is not loaded on this page, ' +\n\t\t\t\t'or getEtch() ran before it finished initializing.'\n\t\t);\n\t}\n\n\tif (typeof etch.connect === 'function') {\n\t\treturn etch.connect(options);\n\t}\n\n\tif (options.apiVersion) {\n\t\twarnIfIncompatible(\n\t\t\toptions.apiVersion,\n\t\t\tetch.apiVersion ?? ETCH_API_VERSION\n\t\t);\n\t}\n\treturn etch;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digital-gravy/etch-public-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "MIT-licensed typed client and contract for the Etch builder scripting API (window.etch). Etch itself is a separate proprietary product governed by its own commercial terms.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|