@wix/origami-runtime 0.19.2 → 0.19.4

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.
@@ -13,6 +13,11 @@ type CallD = {
13
13
  target: CtxData;
14
14
  args: unknown[];
15
15
  };
16
+ type CallbackD = {
17
+ [D]: 'callback';
18
+ target: unknown;
19
+ bound: unknown[];
20
+ };
16
21
  type FnD = {
17
22
  [D]: 'fn';
18
23
  ref: (...a: unknown[]) => unknown;
@@ -27,13 +32,15 @@ type AllD = {
27
32
  [D]: 'all';
28
33
  entries: unknown[];
29
34
  };
30
- export type Binding = CtxD | CallD | FnD | IsD | AllD;
35
+ export type Binding = CtxD | CallD | CallbackD | FnD | IsD | AllD;
31
36
  export declare const isBinding: (v: unknown) => v is Binding;
37
+ export declare const isCallback: (v: unknown) => boolean;
32
38
  type PathValue<M, P extends string> = M extends object ? P extends `${infer K}.${infer Rest}` ? K extends keyof M ? PathValue<M[K], Rest> : unknown : P extends keyof M ? M[P] : unknown : unknown;
33
39
  export declare const ctx: <M, P extends string>(path: P, opts: {
34
40
  from: ContextHook<M>;
35
41
  placeholder?: PathValue<NonNullable<M>, P>;
36
42
  }) => PathValue<NonNullable<M>, P>;
43
+ export declare const callback: <B extends unknown[], A extends unknown[], R>(target: (...args: [...B, ...A]) => R, ...bound: B) => ((...args: A) => R);
37
44
  export declare const fn: <T>(ref: (...a: never[]) => T, ...args: unknown[]) => T;
38
45
  export declare const is: <T>(binding: T, value: T) => boolean;
39
46
  export declare const all: (first: boolean, second: boolean, ...rest: boolean[]) => boolean;
package/dist/bindings.js CHANGED
@@ -2,6 +2,7 @@ import { isValidElement } from 'react';
2
2
  const D = Symbol('origami.binding');
3
3
  const RAW = Symbol('origami.raw');
4
4
  export const isBinding = (v) => (typeof v === 'object' || typeof v === 'function') && v !== null && D in v;
5
+ export const isCallback = (v) => isBinding(v) && v[D] === 'callback';
5
6
  const isRaw = (v) => typeof v === 'object' && v !== null && RAW in v;
6
7
  const unwrap = (v) => v !== null && typeof v === 'object' && typeof v.get === 'function'
7
8
  ? v.get()
@@ -26,6 +27,17 @@ export const ctx = (path, opts) => {
26
27
  // 4. Typed as the value it will resolve to, so call sites type-check against the real value.
27
28
  return binding;
28
29
  };
30
+ // The prop is handed a function, not a call's result: `callback(target, ...bound)` is
31
+ // `target.bind(null, ...bound)`. The target is an imported function, an uncalled ctx() (its method,
32
+ // read at render) or a member of the renderItem row. Anything else is rejected here, at authoring
33
+ // time: at render a fn(), a raw(), a called ctx() or another callback() can still yield a function.
34
+ // ctx() is the one binding that is itself a function, so typeof tells the targets apart.
35
+ export const callback = (target, ...bound) => {
36
+ if (typeof target !== 'function') {
37
+ throw new TypeError('callback() takes an imported function, a ctx() or a member of the renderItem row');
38
+ }
39
+ return { [D]: 'callback', target, bound };
40
+ };
29
41
  export const fn = (ref, ...args) => ({ [D]: 'fn', ref: ref, args });
30
42
  // `value`'s type is tied to `binding`'s (T), not a fixed union — a binding derived from a boolean
31
43
  // field must be compared to a boolean, one derived from an enum field to a member of that enum,
@@ -59,6 +71,14 @@ export const resolve = (v, hooks = new Map(), seen = new WeakSet()) => {
59
71
  const args = v.args.map(arg => resolve(arg, hooks, seen));
60
72
  return method(...args);
61
73
  }
74
+ // A ctx() target reads its hook now, at render; a non-function never reaches a handler.
75
+ if (v[D] === 'callback') {
76
+ const target = resolve(v.target, hooks, seen);
77
+ if (typeof target !== 'function')
78
+ throw new TypeError('callback() target resolved to no function');
79
+ const bound = v.bound.map(arg => resolve(arg, hooks, seen));
80
+ return (...args) => target(...bound, ...args);
81
+ }
62
82
  if (v[D] === 'fn')
63
83
  return v.ref(...v.args.map(a => resolve(a, hooks, seen)));
64
84
  // Every entry is read, not just up to the first false one, so the hooks they name run in
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { all, ctx, fn, is, raw, resolve, isBinding } from './bindings';
1
+ export { all, callback, ctx, fn, is, raw, resolve, isBinding } from './bindings';
2
2
  export type { Binding, ContextHook } from './bindings';
3
3
  export { Remove, Show } from './components';
4
4
  export { withOrigami } from './withOrigami';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { all, ctx, fn, is, raw, resolve, isBinding } from './bindings';
1
+ export { all, callback, ctx, fn, is, raw, resolve, isBinding } from './bindings';
2
2
  export { Remove, Show } from './components';
3
3
  export { withOrigami } from './withOrigami';
4
4
  export { withInteractions } from './withInteractions';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEhF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
@@ -1,2 +1,11 @@
1
1
  import React from 'react';
2
+ export declare const InteractionsDefinition: string & {
3
+ __api: {
4
+ hasInteractions: (key: string) => boolean;
5
+ };
6
+ __config: {};
7
+ isServiceDefinition?: boolean;
8
+ } & {
9
+ hasInteractions: (key: string) => boolean;
10
+ };
2
11
  export declare const withInteractions: (Component: any) => (props: any) => React.JSX.Element;
@@ -1,6 +1,16 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { InteractionsDefinition } from '@wix/site-service-interactions/definition';
2
+ // Restore once @wix/site-service-interactions' dependencies are on public npm, and delete the local
3
+ // InteractionsDefinition below:
4
+ // import { InteractionsDefinition } from '@wix/site-service-interactions/definition'
5
+ import { defineService } from '@wix/services-manager/helpers';
3
6
  import { useService } from '@wix/services-manager-react';
7
+ // The id @wix/site-service-interactions defines its service with; a definition is only its id. The service
8
+ // itself is bundled in @wix/origami-services, so a site doesn't install that package, whose dependencies
9
+ // aren't all on public npm (@wix/interact-experience-renderer@0.21.0, @wix/interact-experience@0.16.0,
10
+ // @wix/viewer-service-pages@1.0.18). A workaround until they are; then import InteractionsDefinition from
11
+ // '@wix/site-service-interactions/definition' again, make it a peer, list it in the generator's siteDependencies
12
+ // (packageJson.ts) and delete interactElement.d.ts.
13
+ export const InteractionsDefinition = defineService('@wix/site-service-interactions');
4
14
  // Copied from wix-next's @wix/builder-interactions, not imported from it: a component with
5
15
  // interactions renders inside an <interact-element> keyed by its comp path, else its id.
6
16
  export const withInteractions = Component => props => {
@@ -1 +1 @@
1
- {"version":3,"file":"withInteractions.js","sourceRoot":"","sources":["../src/withInteractions.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,2FAA2F;AAC3F,yFAAyF;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;IACjD,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAA;IAE9D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAA;IAE3C,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CACH,gDAAqC,GAAG,YACpC,KAAC,SAAS,OAAK,KAAK,GAAI,GACT,CACtB,CAAA;IACL,CAAC;IACD,OAAO,KAAC,SAAS,OAAK,KAAK,GAAI,CAAA;AACnC,CAAC,CAAA"}
1
+ {"version":3,"file":"withInteractions.js","sourceRoot":"","sources":["../src/withInteractions.tsx"],"names":[],"mappings":";AACA,oGAAoG;AACpG,gCAAgC;AAChC,qFAAqF;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,2GAA2G;AAC3G,yGAAyG;AACzG,uGAAuG;AACvG,0GAA0G;AAC1G,iHAAiH;AACjH,oDAAoD;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAC/C,gCAAgC,CACnC,CAAA;AAED,2FAA2F;AAC3F,yFAAyF;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;IACjD,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAA;IAE9D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAA;IAE3C,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CACH,gDAAqC,GAAG,YACpC,KAAC,SAAS,OAAK,KAAK,GAAI,GACT,CACtB,CAAA;IACL,CAAC;IACD,OAAO,KAAC,SAAS,OAAK,KAAK,GAAI,CAAA;AACnC,CAAC,CAAA"}
@@ -1,2 +1,8 @@
1
1
  import type { ComponentType, FunctionComponent } from 'react';
2
- export declare const withOrigami: <P extends object>(Component: ComponentType<P>) => FunctionComponent<P>;
2
+ type Authored<P> = P & {
3
+ bindings?: {
4
+ props?: Partial<P>;
5
+ };
6
+ };
7
+ export declare const withOrigami: <P extends object>(Component: ComponentType<P>) => FunctionComponent<Authored<P>>;
8
+ export {};
@@ -1,15 +1,18 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { isBinding, resolve } from './bindings';
2
+ import { isBinding, isCallback, resolve } from './bindings';
3
3
  import { useSvgSources } from './svg';
4
4
  // Resolve the authored props (reading the hooks they bind to), render the real component.
5
5
  export const withOrigami = (Component) => {
6
6
  const W = (props) => {
7
- for (const [k, v] of Object.entries(props)) {
8
- if (/^on[A-Z]/.test(k) && isBinding(v)) {
9
- throw new Error(`${k}: a callback has no spelling (ADR-0015); fn() would run at render`);
7
+ // A prop bound under `bindings={{props}}` is that prop, as if written as an attribute.
8
+ const { bindings, ...attributes } = props;
9
+ const authored = { ...attributes, ...bindings?.props };
10
+ for (const [k, v] of Object.entries(authored)) {
11
+ if (/^on[A-Z]/.test(k) && isBinding(v) && !isCallback(v)) {
12
+ throw new Error(`${k}: an onX prop binds only through callback(); fn() would run at render`);
10
13
  }
11
14
  }
12
- const resolved = useSvgSources(resolve(props));
15
+ const resolved = useSvgSources(resolve(authored));
13
16
  return _jsx(Component, { ...resolved });
14
17
  };
15
18
  W.displayName = `Origami(${Component.displayName ?? Component.name})`;
@@ -1 +1 @@
1
- {"version":3,"file":"withOrigami.js","sourceRoot":"","sources":["../src/withOrigami.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAmB,SAA2B,EAAwB,EAAE;IAC/F,MAAM,CAAC,GAAyB,CAAC,KAAQ,EAAE,EAAE;QACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACpE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;YAC5F,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAM,CAAC,CAAA;QACnD,OAAO,KAAC,SAAS,OAAK,QAAQ,GAAI,CAAA;IACtC,CAAC,CAAA;IACD,CAAC,CAAC,WAAW,GAAG,WAAW,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,GAAG,CAAA;IACrE,OAAO,CAAC,CAAA;AACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"withOrigami.js","sourceRoot":"","sources":["../src/withOrigami.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAIrC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAmB,SAA2B,EAAkC,EAAE;IACzG,MAAM,CAAC,GAAmC,CAAC,KAAkB,EAAE,EAAE;QAC7D,uFAAuF;QACvF,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAA;QACzC,MAAM,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAA;QACtD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAA;YAChG,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAM,CAAC,CAAA;QACtD,OAAO,KAAC,SAAS,OAAK,QAAQ,GAAI,CAAA;IACtC,CAAC,CAAA;IACD,CAAC,CAAC,WAAW,GAAG,WAAW,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,GAAG,CAAA;IACrE,OAAO,CAAC,CAAA;AACZ,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/origami-runtime",
3
- "version": "0.19.2",
3
+ "version": "0.19.4",
4
4
  "description": "React runtime for Origami-generated component wrappers: context bindings, providers, and className resolution",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,7 +20,6 @@
20
20
  "@types/react": "^18.3.1",
21
21
  "@wix/services-manager": "^1.0.7",
22
22
  "@wix/services-manager-react": "^1.0.8",
23
- "@wix/site-service-interactions": "^1.0.28",
24
23
  "jsdom": "^23.0.1",
25
24
  "react": "^18.3.1",
26
25
  "typescript": "^6.0.3",
@@ -29,7 +28,6 @@
29
28
  "peerDependencies": {
30
29
  "@wix/services-manager": "^1.0.7",
31
30
  "@wix/services-manager-react": "^1.0.8",
32
- "@wix/site-service-interactions": "^1.0.28",
33
31
  "react": "^18.3.1"
34
32
  },
35
33
  "publishUnscoped": false,
@@ -61,5 +59,5 @@
61
59
  }
62
60
  },
63
61
  "type": "module",
64
- "falconPackageHash": "ff4fcb08d2eb21bdfd748f51b326dd359dc90e3015702d9eecbd8660"
62
+ "falconPackageHash": "996d92c6ef801bdf5943a09116919e6cc46ba9e6af2fb03b87da879e"
65
63
  }