@cloudflare/util-cl1-compat-router 2.0.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/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @cloudflare/util-cl1-compat-router
2
+
3
+ ## 2.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - cc0e804d69: Use util-cl1-compat-router to decouple from react-router versions
package/dist/Link.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { RouterLinkProps } from './RouterContext';
3
+ export declare type LinkProps = RouterLinkProps;
4
+ export declare const Link: React.ForwardRefExoticComponent<{
5
+ to: string;
6
+ state?: any;
7
+ replace?: boolean | undefined;
8
+ } & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href"> & React.RefAttributes<HTMLAnchorElement>>;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { NavigateFunction } from './types';
3
+ /**
4
+ * Subset of react-router link props that are currently used in the component library
5
+ */
6
+ export declare type RouterLinkProps = {
7
+ to: string;
8
+ state?: any;
9
+ replace?: boolean;
10
+ } & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;
11
+ export declare type RouterLinkComponent = React.ComponentType<RouterLinkProps>;
12
+ export declare type RouterContextValue = {
13
+ navigate: NavigateFunction;
14
+ Link: RouterLinkComponent;
15
+ };
16
+ export declare const CL1CompatRouterContext: React.Context<RouterContextValue>;
17
+ export declare type CL1CompatRouterProviderProps = {
18
+ children: React.ReactNode;
19
+ navigate: NavigateFunction;
20
+ linkComponent: RouterLinkComponent;
21
+ };
22
+ export declare const CL1CompatRouterProvider: ({ children, navigate, linkComponent }: CL1CompatRouterProviderProps) => JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const useNavigate: () => import("./types").NavigateFunction;
@@ -0,0 +1,4 @@
1
+ export { CL1CompatRouterContext, CL1CompatRouterProvider } from './RouterContext';
2
+ export { Link } from './Link';
3
+ export { useNavigate } from './hooks';
4
+ export type { NavigateFunction } from './types';
@@ -0,0 +1,9 @@
1
+ export interface NavigateOptions {
2
+ replace?: boolean;
3
+ state?: any;
4
+ }
5
+ export declare type NavigateFunction = (to: string, options?: NavigateOptions) => void;
6
+ export declare type RouterLocation = {
7
+ pathname: string;
8
+ state?: any;
9
+ };
package/es/Link.js ADDED
@@ -0,0 +1,35 @@
1
+ var _excluded = ["to", "state", "replace", "onClick", "target", "rel"];
2
+
3
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+
5
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
6
+
7
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
8
+
9
+ import React, { useContext } from 'react';
10
+ import { CL1CompatRouterContext } from './RouterContext';
11
+ export var Link = /*#__PURE__*/React.forwardRef((_ref, ref) => {
12
+ var {
13
+ to,
14
+ state,
15
+ replace,
16
+ onClick,
17
+ target,
18
+ rel
19
+ } = _ref,
20
+ rest = _objectWithoutProperties(_ref, _excluded);
21
+
22
+ var {
23
+ Link: LinkComponent
24
+ } = useContext(CL1CompatRouterContext);
25
+ return /*#__PURE__*/React.createElement(LinkComponent, _extends({}, rest, {
26
+ to: to,
27
+ state: state,
28
+ replace: replace,
29
+ onClick: onClick,
30
+ target: target,
31
+ rel: rel // @ts-ignore ref typing differs across component implementations
32
+ ,
33
+ ref: ref
34
+ }));
35
+ });
@@ -0,0 +1,25 @@
1
+ import React, { createContext, useMemo } from 'react';
2
+
3
+ var MissingLink = () => {
4
+ throw new Error('Missing router Link implementation. Wrap your tree in <CL1CompatRouterProvider linkComponent={...} navigate={...}>.');
5
+ };
6
+
7
+ var defaultValue = {
8
+ navigate: () => undefined,
9
+ Link: MissingLink
10
+ };
11
+ export var CL1CompatRouterContext = /*#__PURE__*/createContext(defaultValue);
12
+ export var CL1CompatRouterProvider = _ref => {
13
+ var {
14
+ children,
15
+ navigate,
16
+ linkComponent
17
+ } = _ref;
18
+ var value = useMemo(() => ({
19
+ navigate,
20
+ Link: linkComponent
21
+ }), [navigate, linkComponent]);
22
+ return /*#__PURE__*/React.createElement(CL1CompatRouterContext.Provider, {
23
+ value: value
24
+ }, children);
25
+ };
package/es/hooks.js ADDED
@@ -0,0 +1,5 @@
1
+ import { useContext } from 'react';
2
+ import { CL1CompatRouterContext } from './RouterContext';
3
+ export var useNavigate = () => {
4
+ return useContext(CL1CompatRouterContext).navigate;
5
+ };
package/es/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { CL1CompatRouterContext, CL1CompatRouterProvider } from './RouterContext';
2
+ export { Link } from './Link';
3
+ export { useNavigate } from './hooks';
package/es/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/lib/Link.js ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.Link = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _RouterContext = require("./RouterContext");
13
+
14
+ var _excluded = ["to", "state", "replace", "onClick", "target", "rel"];
15
+
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+
20
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
21
+
22
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
23
+
24
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
25
+
26
+ var Link = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
27
+ var to = _ref.to,
28
+ state = _ref.state,
29
+ replace = _ref.replace,
30
+ onClick = _ref.onClick,
31
+ target = _ref.target,
32
+ rel = _ref.rel,
33
+ rest = _objectWithoutProperties(_ref, _excluded);
34
+
35
+ var _useContext = (0, _react.useContext)(_RouterContext.CL1CompatRouterContext),
36
+ LinkComponent = _useContext.Link;
37
+
38
+ return /*#__PURE__*/_react.default.createElement(LinkComponent, _extends({}, rest, {
39
+ to: to,
40
+ state: state,
41
+ replace: replace,
42
+ onClick: onClick,
43
+ target: target,
44
+ rel: rel // @ts-ignore ref typing differs across component implementations
45
+ ,
46
+ ref: ref
47
+ }));
48
+ });
49
+
50
+ exports.Link = Link;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.CL1CompatRouterProvider = exports.CL1CompatRouterContext = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+
16
+ var MissingLink = function MissingLink() {
17
+ throw new Error('Missing router Link implementation. Wrap your tree in <CL1CompatRouterProvider linkComponent={...} navigate={...}>.');
18
+ };
19
+
20
+ var defaultValue = {
21
+ navigate: function navigate() {
22
+ return undefined;
23
+ },
24
+ Link: MissingLink
25
+ };
26
+ var CL1CompatRouterContext = /*#__PURE__*/(0, _react.createContext)(defaultValue);
27
+ exports.CL1CompatRouterContext = CL1CompatRouterContext;
28
+
29
+ var CL1CompatRouterProvider = function CL1CompatRouterProvider(_ref) {
30
+ var children = _ref.children,
31
+ navigate = _ref.navigate,
32
+ linkComponent = _ref.linkComponent;
33
+ var value = (0, _react.useMemo)(function () {
34
+ return {
35
+ navigate: navigate,
36
+ Link: linkComponent
37
+ };
38
+ }, [navigate, linkComponent]);
39
+ return /*#__PURE__*/_react.default.createElement(CL1CompatRouterContext.Provider, {
40
+ value: value
41
+ }, children);
42
+ };
43
+
44
+ exports.CL1CompatRouterProvider = CL1CompatRouterProvider;
package/lib/hooks.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useNavigate = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _RouterContext = require("./RouterContext");
11
+
12
+ var useNavigate = function useNavigate() {
13
+ return (0, _react.useContext)(_RouterContext.CL1CompatRouterContext).navigate;
14
+ };
15
+
16
+ exports.useNavigate = useNavigate;
package/lib/index.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CL1CompatRouterContext", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _RouterContext.CL1CompatRouterContext;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "CL1CompatRouterProvider", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _RouterContext.CL1CompatRouterProvider;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "Link", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _Link.Link;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "useNavigate", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _hooks.useNavigate;
28
+ }
29
+ });
30
+
31
+ var _RouterContext = require("./RouterContext");
32
+
33
+ var _Link = require("./Link");
34
+
35
+ var _hooks = require("./hooks");
package/lib/types.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@cloudflare/util-cl1-compat-router",
3
+ "description": "Router-agnostic navigation context and Link component (RR6-shaped API)",
4
+ "version": "2.0.0",
5
+ "main": "lib/index.js",
6
+ "module": "es/index.js",
7
+ "author": "Frontend Team <frontend@cloudflare.com>",
8
+ "license": "BSD-3-Clause",
9
+ "publishConfig": {
10
+ "access": "public",
11
+ "main": "lib/index.js",
12
+ "module": "es/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ },
15
+ "peerDependencies": {
16
+ "react": "^16.0.0-0 || ^17.0.0-0"
17
+ },
18
+ "stratus": {
19
+ "srcDirectory": "./src",
20
+ "isStandAloneApp": false,
21
+ "autoGeneratedReadme": true
22
+ },
23
+ "types": "./dist/index.d.ts"
24
+ }
package/src/Link.tsx ADDED
@@ -0,0 +1,24 @@
1
+ import React, { useContext } from 'react';
2
+ import { CL1CompatRouterContext, RouterLinkProps } from './RouterContext';
3
+
4
+ export type LinkProps = RouterLinkProps;
5
+
6
+ export const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
7
+ ({ to, state, replace, onClick, target, rel, ...rest }, ref) => {
8
+ const { Link: LinkComponent } = useContext(CL1CompatRouterContext);
9
+
10
+ return (
11
+ <LinkComponent
12
+ {...rest}
13
+ to={to}
14
+ state={state}
15
+ replace={replace}
16
+ onClick={onClick}
17
+ target={target}
18
+ rel={rel}
19
+ // @ts-ignore ref typing differs across component implementations
20
+ ref={ref}
21
+ />
22
+ );
23
+ }
24
+ );
@@ -0,0 +1,58 @@
1
+ import React, { createContext, useMemo } from 'react';
2
+ import { NavigateFunction } from './types';
3
+
4
+ /**
5
+ * Subset of react-router link props that are currently used in the component library
6
+ */
7
+ export type RouterLinkProps = {
8
+ to: string;
9
+ state?: any;
10
+ replace?: boolean;
11
+ } & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;
12
+
13
+ export type RouterLinkComponent = React.ComponentType<RouterLinkProps>;
14
+
15
+ export type RouterContextValue = {
16
+ navigate: NavigateFunction;
17
+ Link: RouterLinkComponent;
18
+ };
19
+
20
+ const MissingLink: RouterLinkComponent = () => {
21
+ throw new Error(
22
+ 'Missing router Link implementation. Wrap your tree in <CL1CompatRouterProvider linkComponent={...} navigate={...}>.'
23
+ );
24
+ };
25
+
26
+ const defaultValue: RouterContextValue = {
27
+ navigate: () => undefined,
28
+ Link: MissingLink
29
+ };
30
+
31
+ export const CL1CompatRouterContext =
32
+ createContext<RouterContextValue>(defaultValue);
33
+
34
+ export type CL1CompatRouterProviderProps = {
35
+ children: React.ReactNode;
36
+ navigate: NavigateFunction;
37
+ linkComponent: RouterLinkComponent;
38
+ };
39
+
40
+ export const CL1CompatRouterProvider = ({
41
+ children,
42
+ navigate,
43
+ linkComponent
44
+ }: CL1CompatRouterProviderProps) => {
45
+ const value = useMemo<RouterContextValue>(
46
+ () => ({
47
+ navigate,
48
+ Link: linkComponent
49
+ }),
50
+ [navigate, linkComponent]
51
+ );
52
+
53
+ return (
54
+ <CL1CompatRouterContext.Provider value={value}>
55
+ {children}
56
+ </CL1CompatRouterContext.Provider>
57
+ );
58
+ };
package/src/hooks.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { useContext } from 'react';
2
+ import { CL1CompatRouterContext } from './RouterContext';
3
+
4
+ export const useNavigate = () => {
5
+ return useContext(CL1CompatRouterContext).navigate;
6
+ };
package/src/index.ts ADDED
@@ -0,0 +1,8 @@
1
+ export {
2
+ CL1CompatRouterContext,
3
+ CL1CompatRouterProvider
4
+ } from './RouterContext';
5
+ export { Link } from './Link';
6
+ export { useNavigate } from './hooks';
7
+
8
+ export type { NavigateFunction } from './types';
package/src/types.ts ADDED
@@ -0,0 +1,11 @@
1
+ export interface NavigateOptions {
2
+ replace?: boolean;
3
+ state?: any;
4
+ }
5
+
6
+ export type NavigateFunction = (to: string, options?: NavigateOptions) => void;
7
+
8
+ export type RouterLocation = {
9
+ pathname: string;
10
+ state?: any;
11
+ };