From d0ce7f1f89e770afda63a54d0992b0e33e1ae427 Mon Sep 17 00:00:00 2001
From: Tom Pereira
Date: Tue, 24 Dec 2024 17:31:32 +0000
Subject: [PATCH 01/10] change initial commit message in changelogs (#3)
---
docs/CHANGELOG.md | 2 +-
packages/features/docs/CHANGELOG.md | 2 +-
packages/react-pointcuts/docs/CHANGELOG.md | 2 +-
packages/ssr/docs/CHANGELOG.md | 2 +-
packages/webpack/docs/CHANGELOG.md | 3 +--
5 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index fe59d05..6f9d606 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -233,4 +233,4 @@ This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
### Added
-- Initial version, copying code from PLP.
+- Initial commit.
diff --git a/packages/features/docs/CHANGELOG.md b/packages/features/docs/CHANGELOG.md
index be37a9f..abc3dd8 100644
--- a/packages/features/docs/CHANGELOG.md
+++ b/packages/features/docs/CHANGELOG.md
@@ -93,4 +93,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
-- Initial version, copying code from PLP
+- Initial commit.
diff --git a/packages/react-pointcuts/docs/CHANGELOG.md b/packages/react-pointcuts/docs/CHANGELOG.md
index 10c985a..932854d 100644
--- a/packages/react-pointcuts/docs/CHANGELOG.md
+++ b/packages/react-pointcuts/docs/CHANGELOG.md
@@ -103,4 +103,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
-- Initial version, copying code from PLP
+- Initial commit.
diff --git a/packages/ssr/docs/CHANGELOG.md b/packages/ssr/docs/CHANGELOG.md
index f7b0824..75ca4ea 100644
--- a/packages/ssr/docs/CHANGELOG.md
+++ b/packages/ssr/docs/CHANGELOG.md
@@ -83,4 +83,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
-- Initial version, copying code from PLP
+- Initial commit.
diff --git a/packages/webpack/docs/CHANGELOG.md b/packages/webpack/docs/CHANGELOG.md
index ae2c30c..5102394 100644
--- a/packages/webpack/docs/CHANGELOG.md
+++ b/packages/webpack/docs/CHANGELOG.md
@@ -103,5 +103,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
-- Initial version, copying code from PLP
-- Added unit tests around the plugin itself, not originally developed in PLP
+- Initial commit
From 27e436a05e74b57ec5de78cb88fe09594c55c70e Mon Sep 17 00:00:00 2001
From: Tom Pereira <10725179+TomStrepsil@users.noreply.github.com>
Date: Thu, 30 Jan 2025 15:30:26 +0000
Subject: [PATCH 02/10] [#18] Fix JSDoc module names (#19)
* rename to proper module namespace
* update docs links
* update versions
* web toggle point in readme title
* fixup changelog from revised 0.x range
* 2.0.0 -> 0.5.0 in oss version scheme
* fix broken link syntax in CHANGELOG
* consistent quoting
* more version history issues
* fixup module name in jsdoc
* add web
remove sdkInstanceProvider
* remove SDKInstanceProvider
* fixup jsdoc dedupe
* tweak
* clarity re: ssr package
* casing etc
---
docs/CHANGELOG.md | 17 +++++++++-----
docs/README.md | 2 +-
docs/dedupeExternalJsdocPlugin.js | 10 ++++-----
package-lock.json | 12 +++++-----
package.json | 2 +-
packages/features/docs/CHANGELOG.md | 10 +++++++--
packages/features/docs/README.md | 2 +-
packages/features/package.json | 2 +-
packages/features/src/global.js | 14 ++++++------
packages/features/src/global/store.js | 10 ++++-----
.../features/src/nodeRequestScoped/store.js | 10 ++++-----
packages/features/src/reactContext/store.js | 10 ++++-----
.../src/ssrBackedReactContext/store.js | 12 +++++-----
packages/react-pointcuts/docs/CHANGELOG.md | 8 ++++++-
packages/react-pointcuts/docs/README.md | 2 +-
packages/react-pointcuts/package.json | 2 +-
packages/react-pointcuts/src/external.js | 11 ----------
.../src/getCodeSelectionPlugins.js | 2 +-
packages/react-pointcuts/src/index.js | 2 +-
.../src/withTogglePointFactory/index.js | 8 +++----
.../src/withToggledHookFactory/index.js | 8 +++----
packages/ssr/docs/CHANGELOG.md | 8 ++++++-
packages/ssr/docs/README.md | 2 +-
packages/ssr/package.json | 2 +-
packages/ssr/src/external.js | 11 ----------
packages/ssr/src/index.js | 4 ++--
.../ssr/src/serializationFactory/index.js | 22 +++++++++----------
packages/ssr/src/withJsonIsomorphism/index.js | 2 +-
packages/webpack/docs/CHANGELOG.md | 6 +++++
packages/webpack/docs/README.md | 2 +-
packages/webpack/package.json | 2 +-
packages/webpack/src/index.js | 2 +-
.../src/plugins/togglePointInjection/index.js | 2 +-
33 files changed, 115 insertions(+), 106 deletions(-)
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index 6f9d606..532c7d8 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -14,6 +14,13 @@ N.B. See changelogs for individual packages, where most change will occur:
This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
+## [0.10.2] - 2024-12-26
+
+### Fixed
+
+- "Toggle Point" to "Web Toggle Point" in title of `README.md`
+- fixed the dedupe external JSDoc plugin, after move to type imports
+
## [0.10.1] - 2024-12-24
### Fixed
@@ -73,7 +80,7 @@ This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
### Fixed
-- Removed old `yarn.lock` left over from 1.0.3 update.
+- Removed old `yarn.lock` left over from 0.4.3 update.
## Added
@@ -85,7 +92,7 @@ This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
- Moved to v4 of [`upload-artifact`](https://github.com/actions/upload-artifact) and [`download-artifact`](https://github.com/actions/download-artifact) actions
- Changed nature of pre-release packages to `beta` from `alpha` (better matching the reality of how these pre-releases are used)
-- Fixed up contribution guide since version 2.0.0 added the proposed update checks
+- Fixed up contribution guide since version 0.5.0 added the proposed update checks
- Updated to JSDoc 4, issue with factories resolved
### Changed
@@ -127,7 +134,7 @@ This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
### Fixed
-- Fixup documentation left fallow from package split (2.0.0)
+- Fixup documentation left fallow from package split (0.5.0)
- Upgrade serialize-javascript to 6.0.2 to avoid [`SNYK-JS-SERIALIZEJAVASCRIPT-614760`](https://security.snyk.io/vuln/SNYK-JS-SERIALIZEJAVASCRIPT-6147607)
- snyk ignore [`SNYK-JS-INFLIGHT-6095116`](https://security.snyk.io/vuln/SNYK-JS-INFLIGHT-6095116)
- move to use asos runner groups
@@ -157,7 +164,7 @@ This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
### Changed
- Split the "app" package into separate "ssr", "features" and "react-pointcuts" packages.
-- Move to explicit rather than wildcard workspaces, to enable reification of the repo when publishing (waiting on [https://github.com/Roaders/workspace-version/issues/3](an issue to resolve))
+- Move to explicit rather than wildcard workspaces, to enable reification of the repo when publishing (waiting on [an issue to resolve](https://github.com/Roaders/workspace-version/issues/3))
- Updated the `dedupeExternalJsdocPlugin` to de-duplicate members of external namespaces, rather than just the namespaces themselves (to ensure we don't duplicate React, HostApplication etc. in the html documentation)
- Updated packages for snyk vulnerabilities, populated policy file
- Removed redundant export fields from workspace `package.json`
@@ -175,7 +182,7 @@ This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
### Added
-- Danger support, with checks for CHANGELOG.md updates and package-lock.json updates
+- Danger support, with checks for `CHANGELOG.md` updates and `package-lock.json` updates
### Fixed
diff --git a/docs/README.md b/docs/README.md
index 116c4fd..e6e59fa 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,5 +1,5 @@
-
Toggle Point
+ Web Toggle Point
A library providing a means to toggle or branch web application code.
diff --git a/docs/dedupeExternalJsdocPlugin.js b/docs/dedupeExternalJsdocPlugin.js
index e339a52..56ee304 100644
--- a/docs/dedupeExternalJsdocPlugin.js
+++ b/docs/dedupeExternalJsdocPlugin.js
@@ -18,15 +18,15 @@ exports.defineTags = function (dictionary) {
.synonym("external");
};
-const seenExternals = new Map();
+const seen = new Map();
exports.handlers = {
jsdocCommentFound: function (e) {
if (e.filename.endsWith("external.js")) {
- const match = e.comment.match(/external:(\S+)/);
+ const match = e.comment.match(/(?:[\s\S]*@typedef \{.+\} (?.+))?[\s\S]+external:(?\S+)/);
if (match) {
- const [external] = match;
- if (!seenExternals.has(external)) {
- seenExternals.set(external, true);
+ const symbol = match.groups.typedef || match.groups.external;
+ if (!seen.has(symbol)) {
+ seen.set(symbol, true);
} else {
e.comment = "/**/";
}
diff --git a/package-lock.json b/package-lock.json
index e3b0abd..71ede54 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@asos/web-toggle-point",
- "version": "0.10.1",
+ "version": "0.10.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@asos/web-toggle-point",
- "version": "0.10.1",
+ "version": "0.10.2",
"license": "MIT",
"workspaces": [
"packages/features",
@@ -20346,7 +20346,7 @@
},
"packages/features": {
"name": "@asos/web-toggle-point-features",
- "version": "0.3.0",
+ "version": "0.3.1",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0"
@@ -20403,7 +20403,7 @@
},
"packages/react-pointcuts": {
"name": "@asos/web-toggle-point-react-pointcuts",
- "version": "0.4.0",
+ "version": "0.4.2",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0"
@@ -20441,7 +20441,7 @@
},
"packages/ssr": {
"name": "@asos/web-toggle-point-ssr",
- "version": "0.2.0",
+ "version": "0.2.1",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
@@ -20477,7 +20477,7 @@
},
"packages/webpack": {
"name": "@asos/web-toggle-point-webpack",
- "version": "0.7.2",
+ "version": "0.7.3",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
diff --git a/package.json b/package.json
index 5c5e40e..d72f35a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@asos/web-toggle-point",
- "version": "0.10.1",
+ "version": "0.10.2",
"repository": "git@github.com:asos/web-toggle-point.git",
"homepage": "https://asos.github.io/web-toggle-point/",
"license": "MIT",
diff --git a/packages/features/docs/CHANGELOG.md b/packages/features/docs/CHANGELOG.md
index abc3dd8..fa7b6a2 100644
--- a/packages/features/docs/CHANGELOG.md
+++ b/packages/features/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.3.1] - 2024-12-26
+
+### Fixed
+
+- updated some errant JSDoc namespaces
+
## [0.3.0] - 2024-11-28
### Changed
@@ -32,7 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- updated to latest `@testing-library/react` to remove errant warning about import of `act`
- updated to `react@18.3.1`, set minimum required react to `17`
- - technically a breaking change, but `jsx-runtime` already introduced in [version 1.0.0](#100---2023-09-12)... so was already broken, oops.
+ - technically a breaking change, but `jsx-runtime` already introduced in [version 0.1.0](#010---2023-09-12)... so was already broken, oops.
- renamed commonJs exports to have `.cjs` extension to prevent `[ERR_REQUIRE_ESM]` errors in consumers that aren't `"type": "module"`
## [0.2.2] - 2024-12-26
@@ -61,7 +67,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
-- Fixup documentation left fallow from package split (0.1.0)
+- Fixup documentation left fallow from package split ([version 0.1.0](#010---2023-09-12))
## [0.1.1] - 2023-11-16
diff --git a/packages/features/docs/README.md b/packages/features/docs/README.md
index 0353466..fd7cdef 100644
--- a/packages/features/docs/README.md
+++ b/packages/features/docs/README.md
@@ -8,7 +8,7 @@ A store should be chosen based on the requirement for global or partitioned stat
## Usage
-See: [JSDoc output](https://asos.github.io/web-toggle-point/module-asos-web-toggle-point-features.html)
+See: [JSDoc output](https://asos.github.io/web-toggle-point/module-web-toggle-point-features.html)
> [!WARNING]
> ### Use with React 17
diff --git a/packages/features/package.json b/packages/features/package.json
index 36abbcf..e38f533 100644
--- a/packages/features/package.json
+++ b/packages/features/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-features",
"description": "toggle point features code",
- "version": "0.3.0",
+ "version": "0.3.1",
"license": "MIT",
"type": "module",
"main": "./lib/main.es5.cjs",
diff --git a/packages/features/src/global.js b/packages/features/src/global.js
index abf4590..bd618e8 100644
--- a/packages/features/src/global.js
+++ b/packages/features/src/global.js
@@ -2,21 +2,21 @@ import "./external";
/**
* Application code for holding feature toggle state
- * @module toggle-point-features
+ * @module web-toggle-point-features
*/
/**
* Interface for feature toggle stores
*
* @interface FeaturesStore
- * @memberof module:toggle-point-features
+ * @memberof module:web-toggle-point-features
*/
/**
* Method to return the value of the feature toggle store.
* For {@link https://reactjs.org/docs/context.html|React context}-backed feature stores, this should be called following {@link https://react.dev/warnings/invalid-hook-call-warning|the rules of hooks}
*
* @function
- * @memberof module:toggle-point-features
+ * @memberof module:web-toggle-point-features
* @name FeaturesStore#getFeatures
*/
@@ -24,13 +24,13 @@ import "./external";
* Interface for singleton value-based feature toggle stores
*
* @interface SingletonFeaturesStore
- * @memberof module:toggle-point-features
+ * @memberof module:web-toggle-point-features
*/
/**
* Method to set a value to the feature toggle store.
*
* @function
- * @memberof module:toggle-point-features
+ * @memberof module:web-toggle-point-features
* @name SingletonFeaturesStore#useValue
* @param {object} params parameters
* @param {object} params.value A value to store, used to drive feature toggles.
@@ -40,13 +40,13 @@ import "./external";
* Interface for {@link https://reactjs.org/docs/context.html|React context}-based feature toggle stores
*
* @interface ContextFeaturesStore
- * @memberof module:toggle-point-features
+ * @memberof module:web-toggle-point-features
*/
/**
* Method to create a React context provider, linked to the features store.
*
* @function
- * @memberof module:toggle-point-features
+ * @memberof module:web-toggle-point-features
* @name ContextFeaturesStore#providerFactory
* @returns {external:React.Component} A react context provider that accepts a `value` prop, representing the feature toggle state.
*/
diff --git a/packages/features/src/global/store.js b/packages/features/src/global/store.js
index 7722bd3..2a0c8da 100644
--- a/packages/features/src/global/store.js
+++ b/packages/features/src/global/store.js
@@ -8,16 +8,16 @@ const storeMap = new WeakMap();
* A thin wrapper around a singleton, used as an extension point for future plugins.
* Consider {@link https://github.com/christophehurpeau/deep-freeze-es6|deep freezing} the value to prevent accidental mutation, if this is intended to be static.
* For reactive decisions, consider implementing something that allows for reactivity e.g. a {@link https://github.com/pmndrs/valtio|valtio/vanilla} proxy, and subscribe appropriately in a toggle point.
- * @memberof module:toggle-point-features
- * @returns {module:toggle-point-features.globalFeaturesStore} A store for features, held globally in the application.
+ * @memberof module:web-toggle-point-features
+ * @returns {module:web-toggle-point-features.globalFeaturesStore} A store for features, held globally in the application.
*/
const globalFeaturesStoreFactory = () => {
const identifier = Symbol();
/**
* @name globalFeaturesStore
- * @memberof module:toggle-point-features
- * @implements module:toggle-point-features.FeaturesStore
- * @implements module:toggle-point-features.SingletonFeaturesStore
+ * @memberof module:web-toggle-point-features
+ * @implements module:web-toggle-point-features.FeaturesStore
+ * @implements module:web-toggle-point-features.SingletonFeaturesStore
*/
return {
useValue: ({ value }) => {
diff --git a/packages/features/src/nodeRequestScoped/store.js b/packages/features/src/nodeRequestScoped/store.js
index 0092fb4..c2232df 100644
--- a/packages/features/src/nodeRequestScoped/store.js
+++ b/packages/features/src/nodeRequestScoped/store.js
@@ -4,17 +4,17 @@ import { AsyncLocalStorage } from "async_hooks";
* A factory function used to create a store for features, held in request-scoped global value.
* Should only be used server-side, for anything user or request specific.
* A thin wrapper around node {@link https://nodejs.org/api/async_context.html#class-asynclocalstorage|AsyncLocalStorage}, used as an extension point for future plugins.
- * @memberof module:toggle-point-features
- * @returns {module:toggle-point-features.requestScopedFeaturesStore} A store for features, scoped for the current request.
+ * @memberof module:web-toggle-point-features
+ * @returns {module:web-toggle-point-features.requestScopedFeaturesStore} A store for features, scoped for the current request.
*/
const requestScopedFeaturesStoreFactory = () => {
const store = new AsyncLocalStorage();
/**
* @name requestScopedFeaturesStore
- * @memberof module:toggle-point-features
- * @implements module:toggle-point-features.FeaturesStore
- * @implements module:toggle-point-features.SingletonFeaturesStore
+ * @memberof module:web-toggle-point-features
+ * @implements module:web-toggle-point-features.FeaturesStore
+ * @implements module:web-toggle-point-features.SingletonFeaturesStore
*/
return {
useValue: ({ value, scopeCallBack }) => {
diff --git a/packages/features/src/reactContext/store.js b/packages/features/src/reactContext/store.js
index db64c55..6ef45cb 100644
--- a/packages/features/src/reactContext/store.js
+++ b/packages/features/src/reactContext/store.js
@@ -4,17 +4,17 @@ import PropTypes from "prop-types";
/**
* A factory function used to create a store for features, held in a {@link https://reactjs.org/docs/context.html|React context}.
* A thin wrapper around a context, used as an extension point for future plugins.
- * @memberof module:toggle-point-features
- * @returns {module:toggle-point-features.reactContextFeaturesStore} A store for features, held within a {@link https://reactjs.org/docs/context.html|React context}.
+ * @memberof module:web-toggle-point-features
+ * @returns {module:web-toggle-point-features.reactContextFeaturesStore} A store for features, held within a {@link https://reactjs.org/docs/context.html|React context}.
*/
const reactContextFeaturesStoreFactory = ({ name }) => {
const context = createContext();
/**
* @name reactContextFeaturesStore
- * @memberof module:toggle-point-features
- * @implements module:toggle-point-features.FeaturesStore
- * @implements module:toggle-point-features.ContextFeaturesStore
+ * @memberof module:web-toggle-point-features
+ * @implements module:web-toggle-point-features.FeaturesStore
+ * @implements module:web-toggle-point-features.ContextFeaturesStore
*/
return {
providerFactory: () => {
diff --git a/packages/features/src/ssrBackedReactContext/store.js b/packages/features/src/ssrBackedReactContext/store.js
index ea91d06..44b624f 100644
--- a/packages/features/src/ssrBackedReactContext/store.js
+++ b/packages/features/src/ssrBackedReactContext/store.js
@@ -3,9 +3,9 @@ import reactContextFeaturesStoreFactory from "../reactContext/store";
/**
* A factory function used to create a store for features, held in a {@link https://reactjs.org/docs/context.html|React context}, backed by server-side rendering.
- * A wrapper around a {@link module:toggle-point-features.reactContextFeaturesStore|reactContextFeaturesStore}, with server-side rendering supplied by the {@link module:toggle-point-ssr|toggle-point-ssr} package.
- * @memberof module:toggle-point-features
- * @returns {module:toggle-point-features.ssrBackedReactContextFeaturesStore} A store for features, held within a {@link https://reactjs.org/docs/context.html|React context}.
+ * A wrapper around a {@link module:web-toggle-point-features.reactContextFeaturesStore|reactContextFeaturesStore}, with server-side rendering supplied by the {@link module:web-toggle-point-ssr|toggle-point-ssr} package.
+ * @memberof module:web-toggle-point-features
+ * @returns {module:web-toggle-point-features.ssrBackedReactContextFeaturesStore} A store for features, held within a {@link https://reactjs.org/docs/context.html|React context}.
*/
const ssrBackedReactContextFeaturesStoreFactory = ({
namespace = "toggles",
@@ -18,9 +18,9 @@ const ssrBackedReactContextFeaturesStoreFactory = ({
/**
* @name ssrBackedReactContextFeaturesStore
- * @memberof module:toggle-point-features
- * @implements module:toggle-point-features.FeaturesStore
- * @implements module:toggle-point-features.ContextFeaturesStore
+ * @memberof module:web-toggle-point-features
+ * @implements module:web-toggle-point-features.FeaturesStore
+ * @implements module:web-toggle-point-features.ContextFeaturesStore
*/
return {
providerFactory: () => {
diff --git a/packages/react-pointcuts/docs/CHANGELOG.md b/packages/react-pointcuts/docs/CHANGELOG.md
index 932854d..cd6be4f 100644
--- a/packages/react-pointcuts/docs/CHANGELOG.md
+++ b/packages/react-pointcuts/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.4.2] - 2024-12-26
+
+### Fixed
+
+- updated some errant JSDoc namespaces
+
## [0.4.1] - 2024-12-17
### Removed
@@ -33,7 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- a `Map` of features (de-coupling from a webpack-specific data structure)
- a [javascript module](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules), rather than its `default` export (preparing for support of named exports)
- updated to `react@18.3.1`, set minimum required react to `17`
- - technically a breaking change, but `jsx-runtime` already introduced in [version 1.0.0](#100---2023-09-05)... so was already broken, oops.
+ - technically a breaking change, but `jsx-runtime` already introduced in [version 0.1.0](#010---2023-09-05)... so was already broken, oops.
- moved package to `"type": "module"` and renamed commonJs exports to have `.cjs` extension to prevent `[ERR_REQUIRE_ESM]` errors in consumers that aren't `"type": "module"`
### Fixed
diff --git a/packages/react-pointcuts/docs/README.md b/packages/react-pointcuts/docs/README.md
index 8fb4694..92347dc 100644
--- a/packages/react-pointcuts/docs/README.md
+++ b/packages/react-pointcuts/docs/README.md
@@ -18,7 +18,7 @@ Both accept plugins, currently supporting a hook called during code activation (
## Usage
-See: [JSDoc output](https://asos.github.io/web-toggle-point/module-asos-web-toggle-point-react-pointcuts.html)
+See: [JSDoc output](https://asos.github.io/web-toggle-point/module-web-toggle-point-react-pointcuts.html)
> [!WARNING]
> ### Use with React 17
diff --git a/packages/react-pointcuts/package.json b/packages/react-pointcuts/package.json
index 62282e7..7ade338 100644
--- a/packages/react-pointcuts/package.json
+++ b/packages/react-pointcuts/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-react-pointcuts",
"description": "react pointcut code",
- "version": "0.4.0",
+ "version": "0.4.2",
"license": "MIT",
"type": "module",
"main": "./lib/main.es5.cjs",
diff --git a/packages/react-pointcuts/src/external.js b/packages/react-pointcuts/src/external.js
index ef62d00..d3834a4 100644
--- a/packages/react-pointcuts/src/external.js
+++ b/packages/react-pointcuts/src/external.js
@@ -2,17 +2,6 @@
* Code expected in the host application
* @external HostApplication
*/
-/**
- * A factory for SDKs; should return an instance of asos-web-features when called with "features"
- * @callback external:HostApplication.sdkInstanceProvider
- * @async
- * @type {Function}
- * @param {string} sdkName Name of the SDK to access; will be passed "features"
- * @returns {external:asos-web-features}
- * @see SiteChrome SDK interface {@link https://asoscom.atlassian.net/wiki/spaces/WEB/pages/593592455/SCP+-+Interface+Definition#SDK-Instances|SDK Instances}
- * @example
- * const sdkInstance = await sdkInstanceProvider("features");
- */
/**
* A delegate passed to log an error
* @callback external:HostApplication.logError
diff --git a/packages/react-pointcuts/src/getCodeSelectionPlugins.js b/packages/react-pointcuts/src/getCodeSelectionPlugins.js
index 7dde7b2..4aa9b83 100644
--- a/packages/react-pointcuts/src/getCodeSelectionPlugins.js
+++ b/packages/react-pointcuts/src/getCodeSelectionPlugins.js
@@ -1,6 +1,6 @@
/**
* A plugin for the point cuts package
- * @typedef {object} module:toggle-point-react-pointcuts~plugin
+ * @typedef {object} module:web-toggle-point-react-pointcuts~plugin
* @property {string} name plugin name, used as a prefix when creating {@link https://legacy.reactjs.org/docs/higher-order-components.html|React Higher-Order-Components} when toggling
* @property {Function} onCodeSelected hook to be called when a code selection is made
*/
diff --git a/packages/react-pointcuts/src/index.js b/packages/react-pointcuts/src/index.js
index fc91576..b31c5df 100644
--- a/packages/react-pointcuts/src/index.js
+++ b/packages/react-pointcuts/src/index.js
@@ -4,6 +4,6 @@ import "./external";
/**
* Application code for creating a React {@link https://en.wikipedia.org/wiki/Pointcut|pointcut}.
- * @module toggle-point-react-pointcuts
+ * @module web-toggle-point-react-pointcuts
*/
export { withTogglePointFactory, withToggledHookFactory };
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/index.js b/packages/react-pointcuts/src/withTogglePointFactory/index.js
index cd8e6f0..ecd92a2 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/index.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/index.js
@@ -7,17 +7,17 @@ import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
{}
/**
* A factory function used to create a withTogglePoint React Higher-Order-Component.
- * @memberof module:toggle-point-react-pointcuts
+ * @memberof module:web-toggle-point-react-pointcuts
* @inner
* @function
* @param {object} params parameters
* @param {function} params.getActiveFeatures a method to get active features. Called honouring the rules of hooks.
* @param {external:HostApplication.logError} params.logError a method that logs errors
* @param {string} [params.variantKey=bucket] A key use to identify a variant from the features data structure. Remaining members of the feature will be passed to the variant as props.
- * @param {Array} [params.plugins] plugins to be used when toggling
+ * @param {Array} [params.plugins] plugins to be used when toggling
* Will be used when a toggled component throws an error that can be caught by an {@link https://reactjs.org/docs/error-boundaries.html|ErrorBoundary}.
* When errors are caught, the control/base code will be used as the fallback component.
- * @returns {module:toggle-point-react-pointcuts.withTogglePoint} withTogglePoint React Higher-Order-Component.
+ * @returns {module:web-toggle-point-react-pointcuts.withTogglePoint} withTogglePoint React Higher-Order-Component.
* @example
* const withTogglePoint = withTogglePointFactory({
* getActiveFeatures,
@@ -37,7 +37,7 @@ const withTogglePointFactory = ({
/**
* A React Higher-Order-Component that wraps a base / control component and swaps in a variant when deemed appropriate by a context
* @function withTogglePoint
- * @memberof module:toggle-point-react-pointcuts
+ * @memberof module:web-toggle-point-react-pointcuts
* @param {ReactComponentModuleNamespaceObject} controlModule The control / base module
* @param {external:React.Component} controlModule.default The control react component
* @param {Map} featuresMap A map of features and their variants, with features as top-level keys and variants as nested keys with modules as the values.
diff --git a/packages/react-pointcuts/src/withToggledHookFactory/index.js b/packages/react-pointcuts/src/withToggledHookFactory/index.js
index 61baeb7..13c7413 100644
--- a/packages/react-pointcuts/src/withToggledHookFactory/index.js
+++ b/packages/react-pointcuts/src/withToggledHookFactory/index.js
@@ -6,13 +6,13 @@ import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
{}
/**
* A factory function used to create a withToggledHook React hook, wrapping an existing hook/function.
- * @memberof module:toggle-point-react-pointcuts
+ * @memberof module:web-toggle-point-react-pointcuts
* @inner
* @function
* @param {object} params parameters
* @param {function} params.getActiveFeatures a method to get active features, which is called honouring the rules of hooks.
- * @param {Array} [params.plugins] plugins to be used when toggling
- * @returns {module:toggle-point-react-pointcuts.withToggledHook} withToggledHook hook function, use to wrap a function (either a hook itself, or a function that must be called wherever a hook can...).
+ * @param {Array} [params.plugins] plugins to be used when toggling
+ * @returns {module:web-toggle-point-react-pointcuts.withToggledHook} withToggledHook hook function, use to wrap a function (either a hook itself, or a function that must be called wherever a hook can...).
* @example
* const getActiveFeatures = () => useContext(myContext);
* const withToggledHook = withToggledHookFactory({
@@ -28,7 +28,7 @@ const withToggledHookFactory = ({ getActiveFeatures, plugins = [] }) => {
/**
* A React hook that wraps a base / control function or hook and swaps in a variant when deemed appropriate by a context
* @function withToggledHook
- * @memberof module:toggle-point-react-pointcuts
+ * @memberof module:web-toggle-point-react-pointcuts
* @param {ReactHookModuleNamespaceObject} controlModule The control / base module
* @param {(external:React.Hook|function)} controlModule.default The control react hook or function.
* @param {Map} featuresMap A map of features and their variants, with features as top-level keys and variants as nested keys with modules as the values.
diff --git a/packages/ssr/docs/CHANGELOG.md b/packages/ssr/docs/CHANGELOG.md
index 75ca4ea..31ed972 100644
--- a/packages/ssr/docs/CHANGELOG.md
+++ b/packages/ssr/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.2.1] - 2024-12-26
+
+### Fixed
+
+- updated some errant JSDoc namespaces
+
## [0.2.0] - 2024-12-17
### Removed
@@ -50,7 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- updated to latest `@testing-library/react` to remove errant warning about import of `act`
- updated to `react@18.3.1`, set minimum required react to `17`
- - technically a breaking change, but `jsx-runtime` already introduced in [version 1.0.0](#100---2023-09-05)... so was already broken, oops.
+ - technically a breaking change, but `jsx-runtime` already introduced in [version 0.1.0](#010---2023-09-05)... so was already broken, oops.
- renamed commonJs exports to have `.cjs` extension to prevent `[ERR_REQUIRE_ESM]` errors in consumers that aren't `"type": "module"`
## [0.1.2] - 2024-12-06
diff --git a/packages/ssr/docs/README.md b/packages/ssr/docs/README.md
index 78845c2..54873d8 100644
--- a/packages/ssr/docs/README.md
+++ b/packages/ssr/docs/README.md
@@ -28,7 +28,7 @@ For the browser:
## Usage
-See: [JSDoc output](https://asos.github.io/web-toggle-point/module-asos-web-toggle-point-ssr.html)
+See: [JSDoc output](https://asos.github.io/web-toggle-point/module-web-toggle-point-ssr.html)
> [!WARNING]
> ### Use with React 17
diff --git a/packages/ssr/package.json b/packages/ssr/package.json
index 2a6578d..10b2ff7 100644
--- a/packages/ssr/package.json
+++ b/packages/ssr/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-ssr",
"description": "toggle point server side rendering code",
- "version": "0.2.0",
+ "version": "0.2.1",
"license": "MIT",
"type": "module",
"main": "./lib/main.es5.cjs",
diff --git a/packages/ssr/src/external.js b/packages/ssr/src/external.js
index 3603746..68c0153 100644
--- a/packages/ssr/src/external.js
+++ b/packages/ssr/src/external.js
@@ -2,17 +2,6 @@
* Code expected in the host application
* @external HostApplication
*/
-/**
- * A factory for SDKs; should return an instance of asos-web-features when called with "features"
- * @callback external:HostApplication.sdkInstanceProvider
- * @async
- * @type {Function}
- * @param {string} sdkName Name of the SDK to access; will be passed "features"
- * @returns {external:asos-web-features}
- * @see SiteChrome SDK interface {@link https://asoscom.atlassian.net/wiki/spaces/WEB/pages/593592455/SCP+-+Interface+Definition#SDK-Instances|SDK Instances}
- * @example
- * const sdkInstance = await sdkInstanceProvider("features");
- */
/**
* A delegate passed to log a warning
* @callback external:HostApplication.logWarning
diff --git a/packages/ssr/src/index.js b/packages/ssr/src/index.js
index cbba6c8..e4d6750 100644
--- a/packages/ssr/src/index.js
+++ b/packages/ssr/src/index.js
@@ -3,7 +3,7 @@ import withJsonIsomorphism from "./withJsonIsomorphism";
import "./external";
/**
- * Server Side Rendering code for Isomorphic React applications
- * @module asos-web-toggle-point-ssr
+ * Server Side Rendering code for isomorphic / universal applications
+ * @module web-toggle-point-ssr
*/
export { withJsonIsomorphism, serializationFactory };
diff --git a/packages/ssr/src/serializationFactory/index.js b/packages/ssr/src/serializationFactory/index.js
index 53ab300..c3e6794 100644
--- a/packages/ssr/src/serializationFactory/index.js
+++ b/packages/ssr/src/serializationFactory/index.js
@@ -5,16 +5,16 @@ import parse from "html-react-parser";
{}
/**
* A factory for creating a serialization object that has methods for serializing and deserializing JSON data in server-rendered web applications.
- * @memberof module:asos-web-toggle-point-ssr
+ * @memberof module:web-toggle-point-ssr
* @inner
* @function
- * @memberof module:asos-web-toggle-point-ssr
+ * @memberof module:web-toggle-point-ssr
* @inner
* @function
* @param {object} params parameters
* @param {string} params.id The id attribute of the backing application/json script.
* @param {external:HostApplication.logWarning} params.logWarning A method that logs warnings; will be used when malformed JSON is found in the backing store when deserialize on the client, which should only be possible if processed in a system downstream from the origin.
- * @returns {module:asos-web-toggle-point-ssr.serialization} Some serialization / deserialization methods
+ * @returns {module:web-toggle-point-ssr.serialization} Some serialization / deserialization methods
* @example
* const logWarning = (warning) => console.log(warning);
* const id = "app_features";
@@ -23,33 +23,33 @@ import parse from "html-react-parser";
const serializationFactory = ({ id, logWarning }) =>
/**
* @typedef {function} getScriptMarkup
- * @memberof module:asos-web-toggle-point-ssr
+ * @memberof module:web-toggle-point-ssr
* @param {object} params parameters
* @param {object} params.content The JSON content to be serialized.
*/
/**
* @typedef {function} getScriptReactElement
- * @memberof module:asos-web-toggle-point-ssr
+ * @memberof module:web-toggle-point-ssr
* @param {object} params parameters
* @param {object} params.content The JSON content to be serialized.
*/
/**
* @typedef {function} getJSONFromScript
- * @memberof module:asos-web-toggle-point-ssr
+ * @memberof module:web-toggle-point-ssr
* @returns {object} The JSON content of the script element.
*/
/**
* An object containing methods for serializing and deserializing JSON data in server-rendered web applications.
* @typedef {object} serialization
- * @memberof module:asos-web-toggle-point-ssr
- * @property {module:asos-web-toggle-point-ssr.getScriptMarkup} getScriptMarkup Gets a string containing markup for a type="application/json" script element with the specified content.
- * @property {module:asos-web-toggle-point-ssr.getScriptReactElement} getScriptReactElement - Gets a React element for a type="application/json" script element with the specified content.
- * @property {module:asos-web-toggle-point-ssr.getJSONFromScript} getJSONFromScript - Returns the JSON content of the script element.
+ * @memberof module:web-toggle-point-ssr
+ * @property {module:web-toggle-point-ssr.getScriptMarkup} getScriptMarkup Gets a string containing markup for a type="application/json" script element with the specified content.
+ * @property {module:web-toggle-point-ssr.getScriptReactElement} getScriptReactElement - Gets a React element for a type="application/json" script element with the specified content.
+ * @property {module:web-toggle-point-ssr.getJSONFromScript} getJSONFromScript - Returns the JSON content of the script element.
*/
({
/**
- * @memberof module:asos-web-toggle-point-ssr.serialization
+ * @memberof module:web-toggle-point-ssr.serialization
* @param {object} content The JSON content to be serialized.
* @returns {string} A string containing markup for a type="application/json" script element with the specified content.
*/
diff --git a/packages/ssr/src/withJsonIsomorphism/index.js b/packages/ssr/src/withJsonIsomorphism/index.js
index b68c691..8559f37 100644
--- a/packages/ssr/src/withJsonIsomorphism/index.js
+++ b/packages/ssr/src/withJsonIsomorphism/index.js
@@ -8,7 +8,7 @@ import { useState, useEffect } from "react";
* which are then realised into a prop when first hydrating on the client. It will be reactive to subsequent non-`undefined` prop values,
* for that prop.
* The package "browser" export includes the code to read the script, omitted from the "import" / "require" export (server package).
- * @memberof module:asos-web-toggle-point-ssr
+ * @memberof module:web-toggle-point-ssr
* @inner
* @function
* @param {external:React.Component} WrappedComponent The React component that will receive the props.
diff --git a/packages/webpack/docs/CHANGELOG.md b/packages/webpack/docs/CHANGELOG.md
index 5102394..9467746 100644
--- a/packages/webpack/docs/CHANGELOG.md
+++ b/packages/webpack/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.7.3] - 2024-12-26
+
+### Fixed
+
+- updated some errant JSDoc namespaces
+
## [0.7.2] - 2024-12-17
### Removed
diff --git a/packages/webpack/docs/README.md b/packages/webpack/docs/README.md
index 823c534..f4c7b1d 100644
--- a/packages/webpack/docs/README.md
+++ b/packages/webpack/docs/README.md
@@ -20,7 +20,7 @@ The join points are configured using a [glob](https://en.wikipedia.org/wiki/Glob
### Configuration
-See [JSDoc output](https://asos.github.io/web-toggle-point/module-asos-web-toggle-point-webpack.html)
+See [JSDoc output](https://asos.github.io/web-toggle-point/module-web-toggle-point-webpack.html)
Different code paths may have different toggling needs, and may want a toggle point applied in differing ways. Independent point cuts should be configured for each different:
diff --git a/packages/webpack/package.json b/packages/webpack/package.json
index 38fbc45..ec17f81 100644
--- a/packages/webpack/package.json
+++ b/packages/webpack/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-webpack",
"description": "toggle point webpack plugin",
- "version": "0.7.2",
+ "version": "0.7.3",
"license": "MIT",
"type": "module",
"main": "./lib/main.cjs",
diff --git a/packages/webpack/src/index.js b/packages/webpack/src/index.js
index a99fcdc..a11c1e9 100644
--- a/packages/webpack/src/index.js
+++ b/packages/webpack/src/index.js
@@ -2,6 +2,6 @@ import "./external.js";
/**
* Webpack code for injecting toggle points
- * @module toggle-point-webpack
+ * @module web-toggle-point-webpack
*/
export { TogglePointInjection } from "./plugins";
diff --git a/packages/webpack/src/plugins/togglePointInjection/index.js b/packages/webpack/src/plugins/togglePointInjection/index.js
index df98970..0148828 100644
--- a/packages/webpack/src/plugins/togglePointInjection/index.js
+++ b/packages/webpack/src/plugins/togglePointInjection/index.js
@@ -9,7 +9,7 @@ import schema from "./schema.json";
/**
* Toggle Point Injection Plugin
- * @memberof module:toggle-point-webpack
+ * @memberof module:web-toggle-point-webpack
* @inner
*/
class TogglePointInjection {
From 1f0cb29d36b158f19c1301eba2c122c0810c146b Mon Sep 17 00:00:00 2001
From: Tom Pereira <10725179+TomStrepsil@users.noreply.github.com>
Date: Thu, 6 Mar 2025 12:18:52 +0000
Subject: [PATCH 03/10] [26] Fix public/scoped package publishing (#27)
* update workflows
* version
* typo
* update chromium linux snaps
* versions for serve update
* package.json repository field
* update root package.lock
* bugs & directories/doc fields
* fix changelog
---------
Co-authored-by: Tom Pereira
---
.github/actions/publish/publish.sh | 2 +-
.github/workflows/release.yaml | 2 ++
docs/CHANGELOG.md | 6 ++++++
examples/serve/docs/CHANGELOG.md | 7 +++++++
examples/serve/package.json | 2 +-
.../-screenshots-control-chromium-linux.png | Bin 1515 -> 1281 bytes
...enshots-st-patricks-day-chromium-linux.png | Bin 3354 -> 3079 bytes
package-lock.json | 14 +++++++-------
package.json | 2 +-
packages/features/docs/CHANGELOG.md | 6 ++++++
packages/features/package.json | 13 ++++++++++++-
packages/react-pointcuts/docs/CHANGELOG.md | 6 ++++++
packages/react-pointcuts/package.json | 13 ++++++++++++-
packages/ssr/docs/CHANGELOG.md | 6 ++++++
packages/ssr/package.json | 13 ++++++++++++-
packages/webpack/docs/CHANGELOG.md | 6 ++++++
packages/webpack/package.json | 13 ++++++++++++-
17 files changed, 97 insertions(+), 14 deletions(-)
diff --git a/.github/actions/publish/publish.sh b/.github/actions/publish/publish.sh
index cd06cdf..cd8920a 100755
--- a/.github/actions/publish/publish.sh
+++ b/.github/actions/publish/publish.sh
@@ -1,2 +1,2 @@
TAG=$([ "$PRE_RELEASE" == "true" ] && echo "--tag=pre-release ")
-npm publish $TAG--workspace=$WORKSPACE 2> publish_stderr_digest.log
+npm publish --access public $TAG--workspace=$WORKSPACE 2> publish_stderr_digest.log
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index eb97d40..ef7b596 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -219,3 +219,5 @@ jobs:
name: ${{ matrix.package.name }}
version: ${{ steps.newVersion.outputs.version }}
is-pre-release: ${{ env.IS_PRE_RELEASE }}
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index 532c7d8..42e9399 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -14,6 +14,12 @@ N.B. See changelogs for individual packages, where most change will occur:
This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
+## [0.10.3] - 2025-02-27
+
+### Fixed
+
+- GHA pipelines for publishing to public/scoped NPM repository
+
## [0.10.2] - 2024-12-26
### Fixed
diff --git a/examples/serve/docs/CHANGELOG.md b/examples/serve/docs/CHANGELOG.md
index 126a3c8..9f2b321 100644
--- a/examples/serve/docs/CHANGELOG.md
+++ b/examples/serve/docs/CHANGELOG.md
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.2.3] - 2025-02-27
+
+### Changed
+
+- updated some linux playwright snapshots
+ - no code changes, so this must be a change in linux chromium. Assets look identical to eye, so presumably need to relax the fuzziness.
+
## [0.2.2] - 2024-12-17
### Removed
diff --git a/examples/serve/package.json b/examples/serve/package.json
index 945644b..20a3f5d 100644
--- a/examples/serve/package.json
+++ b/examples/serve/package.json
@@ -1,6 +1,6 @@
{
"name": "web-toggle-point-serve-example",
- "version": "0.2.0",
+ "version": "0.2.3",
"type": "module",
"private": true,
"scripts": {
diff --git a/examples/serve/src/fixtures/event/playwright.spec.ts-snapshots/-screenshots-control-chromium-linux.png b/examples/serve/src/fixtures/event/playwright.spec.ts-snapshots/-screenshots-control-chromium-linux.png
index 6615aa1a81dce531b97b8f2d111a015ab6a08e19..f1aa0ebed6c0d579a89a296353976c95a38abd46 100644
GIT binary patch
delta 1249
zcmV<71RneA3xNudFn)my&Yb+>UG`%YU6`?^f*U%c*q61R@!uK()RUrEOE
zp4{I7pq}kA#OdlH001CSx2CS*gd+OMdUO6JcDvo8#RP%DFF
zbljMgS+zGGRDX&b%W_hAuu78Epe%8P0w+~Qo8*RjZM2FWr8wAZIz_%RPfjND3a|Ep
zy8&lqR_!fjjgr6?3Y<`C&i1ESHigqcg~swc>zA#25mHW(O@Xs@$!N|Nog!D6-x6oi
zFeIKWu$*Kx=fTaAuKMzf6d9BRyWMUVj10cOtCh}Vv44q@vywk12G5r|^G%c_AInii
z;-uy>IYwuBwJ{H(D45kGRwxI98%o2Ih&efQQObVUE^7qWsS+H
z&}d??>fmryE^55g`8ujsTlXWRCjF)Yw}dTR4}ZFY{yb)wXMf`jQD5at2ZMSO^
zPnnZHjbqUdfsT(0DK;iS`qZVm4!o(0NgIQ3c+VIEAZqfdP>3L;^y-y39Gh~>0{{Sk
zEq}*r$(P%=BiyeLe_MfnZV4-1y+z%6>sV=NpU!|`4ke}c<)IYmhkEG#{^dEuT7B#Q
z4fn@uA_8zN{rM3-b25j=7YnVs9-GXC4}?$Jm<080k7{7*V$wzcgm;Y{02t;x?sX{u
z07S;VPU+1mKuUzPq~B72+IFh2k6<44<$s|R*_3<(vD+o}>GpgPBE(Qik*uJ#?Vf#Q
z<2&|NRK!Pz+Jh7Yt=%<)J^^ufSw)%+HVJa3u4lX0G|`g*Q(++7yFvK0QLd1NbR#p_G1RU3>dv2NG=FOXT?%bg|^jDJRdhu{3
z003sQxvsA6>VMU%008iKy!Q6?l9G}$XU=4F!Zd#oD2nR!`ttJf-Q8U@hRw~*_V#v>
zNW|fAsNF;K*-2`3Y`gpzG!-o%VZ*OBh4Gj%Xo;)E*2!dcqNr}Z`
zSzTQ<8jUO#%j5B&D7v$=)6~?|)zuY=LK9u2d?0^X84y=@bfuo12?>_@hUU8XFs#p21yNs@#znGCn*=jX4luM=Lxfqy{Y)TvWgyQQV&?%lfthqxKYSCN_mafN;G
z-~nMicDwz;g$o=G2e)AP6YfhwDaaRM#sD91ai!1^=?Wy`8+zi4!LZ3JNS1%f!TlR;x`iAqiPoS$JSh
zPEH0_K{Yn6uyMoZ=H@mwHe&7R?0-uJl*FELrKP3A!^43<06~zKFJDeiPv5w4Ln4t>
zRaITPcFpVcuC1+&jEp>f{J5*DE6LQw#l@E{UD9YYU%!4027|M+vllO3G#CuY`{;DK
zTeof%78VKwf+Q1WoOFur6&ow;z`#Ikcv)H5*|TSBYiqxK`xXj?j7DQoQGZb=6iRbn
zGN2@O$9eVYl}sk%a=BbCx1yrLVzFTMt*xz&jt;R{oSmI5lgU1Q{D@zXKoI=#;|JC@
z8jTed75I=+sl+Z*csQHQmPjP{2hnIqe0)A1004u7g9)9ZCxfDBV`JmPhYtzYw^#@l
z;k_~>QY16DxJI9zHa0fe+S)`S5u42}FE9V}=@X@WA(0{-B^mTT_h_g>
n|6oZ&8T!!BP=-DuSX(O1u+tD@
zm(@Y&RzWYTjGbEFVzVc&FX_s;vjXnY_%H#E5Z-uU{D#rR%+{;Xea-wCU_j%VA`
zwo`Gv%X6t;alM<3=C={vL^@H>)T4UdyYv0CdqO3DL&)EX`nYrFqq&{9MPawq+AY-B
zESuig_dv9#cc5>mI)8rYmc3Um@8$a2apg_sQl??PJAV@Zd~{IY*iPAJ+9U
zu7}85^pU~G-m6aB!}rHHetxlb_L6_8wlF}ph#Nn*`rTMDReWZ&24HaCUbDDIreNNr
zq5tbMuYU(ypWKrW+6noi1m=vV(-R&*5?V2}^5flLLj=l$r{Y~PsKi78yfCcY=3v?(
zs>@EgDeQI%>A3TKj-Laf;UXJ9Ti7Wa*hoIUz9+m`Ti|=5+xj>EUx0l(zEhd|WhBxw
zK!*Bz<4t|}u3Kw-lJ(s(1pp!pXG;5R`GlMn?|+sd&z~+99G8VeR?=F`vptUxN&rel
z+WziLrDQlRs;)CNHiaEzJncYGl}sYOs*OrHUZi&i9Wg-w7^N%y#~debjGIoC5vu4)
zIw^Kk0qqcV8=Q1g*zFWjPb3o77I{PgZ0_xU|AU`=dh1{QyYpA!;z9(tcf+T)fBe%w
z{C~yQYxMwi#Q1xkRQ{u>FCmfKl6(5xEHIYNCmc1Kk!1?dkxYRIQp+&>>0*AoWXIFR
zJ+e1lwi%Iz6p;X-S9VI4$An>B7q2u!zCDr8+otU^5J4G9XB4$bl2@`E(!>+eW7GPZ
z8UU0{<TM5?1xRkg@Cd
z=7g1PI0$h80P|gsh|5c=Neo@&Cv+{lSe&$3Oid~Ri2~e>h2)#Bs`^_@-D?=b)IO0)
z9V?m#%EggZwRDq2b(`(w=%%pS*|mGc{_gQ#K6n4%1_0aoH}^z(rrCTye@|uZSAU@5}Ai?bkBpm?BoKu~~e6uVwC$N$3<_)KXJS
z-DegRnfRsDQQZ;>)vZlN2%~9ahTtLQ#0h)#cL4#tDq;%D;`$E&Jd(
zf~3o=ls|Jii0(M7myIDaapVt2H$VG7Pi2~p6s)-1rkpl3cXwWLGRC>700W=>l#$<`
zlu4_A#V+yVPaDZ%W^|73+9DC(KFP>n%~uZirIF>;>?Ea^kC9#f=_FJFfPWRVBZtQN
zpZHO#n20q?B6Hg(s%en7%=YaO_A0w}i}l5~&W>*S*b<4+NKd`KcqyEHXVzIe!J{MLwFds*U^<^rMHq
zH-*IGwv#UBV&a{ivFw@Gq
za>@JFdq00P;h#FB7IJp$N9zhdtdx53>Cri|@5{FRHLLth=S^j0LE01M40u_Tmy}Tz
z5__M2Ue%cAvZhHSZ4=cZ$oAR(P=&opYv*_;7JIx6eSG8V`QU>G)^FO_H+11QTy$L!
z>G3wK;}_~Rf8i2<>VL%rg!gT~=QFK+va0J;96y#Y^c1S4Wd5;Z=bq6DzLm-ePQj{y
z-
zW}e7eAOOJ0k8YzhWWcgvwUuRDk)wv~xt3RQdCichYc@9~lz#%?wbbs$oF{6-Qf9^x
z1qq?e0K^)L41&;SA)$oQ7^NIo$oxJ#bxtxT{LmM+r~cb}j*HYU1dZ7Q>j`)M-FI7fV}3DJNFJLF5PkGt
z(j@?hB{Irqi^op}?-ufIE>raZh=SZmBO#Omv$L)j0vux@2w9?t5DM^=(rYVYKu}}=
z!^+@Wr>U4LB~%IkZrO2(Aj>z+Ks$;xod0yFa}V1WwAjB2Y}KTX&G=g_*ptDqBM5(<^+wBSvCgA!wP?T
z%$;^1D*zDM`I1qlN#hZfwMZh`B&ua<+GV>Hx-0C}Tf3cGzPOQmqF%29k-^v}AKv!u
zFMZ;>y?@dET77|V8y?;H&oc{)?=4(v7)PT$y?e3qvwR%Oti<
zltbxxE=yFX*r4{aY74C)MJ&NYWF)jCm=!KVC^Uxzh*?(sRkSar56r*swQvNl!H0y|*B;80kU2Ze~
zB?N)%dw>K0%&~p&Lz+rj#^85@pLjwa%$}UFO~=JYX3T1wf?cNxTW7l&2m`KK|fsV7npUE(`nS-?eMNIR4d#9{BRZ+kd|T
zU~ay0YUY*d{Dp0s)FJv%G_p!@dXq-_HKQ~$6)gS04-6=}nm1&L00`aUtI704*{^{P
zDBA99ZjUMe%(u%Gk8zSJu5iHOd6r%AJm!OH`f#^SU>vh-`9ebP?094e%o$JWmgRGz
zB4u;hiYJ@PY@Ui2zB%sEp>$z?LVo~r%6j62&EjeEV7i$s&^>EQSn-te`mTHp9~PKzl_p(KMH`kV;5r4HCK9XfgstT2qn5;ug>KzpA)UD}
zp8u~W4}bB+jq8Peeq#q7*06@V5FHCUn$2cAxZkG!``%}j@4xX4u7{U|-|xV~8rE#=KC!$$(03H$#6xPes0BF2(|00000NkvXXu0mjf
DQGgC^
delta 3339
zcmV+m4fOJd7@8W8Fn-0yzBd+#^j+yT++_0Wet^r2@!&AUxQD1R;ONgw*~_F;Bn59&Zj}_CYeRQ3cNTqk7eVNWCV7)R%N_ybZTr&e=wV`aduvzM`jGs=py96l
zm`-*~YZi@4Q-42e{?l|LBAKYDuBh-uVM$|2i>ie@S<+ZS=!x$7^UuSv;$ssJO$-%;
z-mSa)c0Ium?5Dz?@HCwL9XtJI`rCD;x6#AIHfd|8(J94>DlWqlL#Z}&7pYoAo~P6P
zx}AozO)+(?>e|vXOUV>rQCKW0OC%H7&};x8%p)vkPJfOmM*i8D;5A{^u~|NLJ|i4Q
zylr1#{DARkm(zUv`6dS?zinSE4+|!C*M)So{MT#3?~+jSbz!lM~vdDX~%g{K#09-G;$Y+ezv!W57H
zUikUe&wnQ$pCoj|mgp_R9EO>~v7%bBs4O2lpEvI8Yv5+>1^`nAP3i4{OcBbmMl6`v
zCKXcNV*yT+0bp94@>caeKc|nlbbBUBC{p@Qg6U<2QhUnty_`PtK|c)x44OoUNSi)ZVdY+G}(g
zFRm92qnT)=xS{yudmlX}L1eW7XNm
zYk#yl4Fcd~C@Am(9#J}VH;xPpK
z(C0%2&M@xAjpsKG+&kcE?YcT_b>WM`dTD*QN4Pc3T1}`kOERCld@_E(_z>3+13$Yo
zTTmpZmQ-^Y-06d-FY;f6BCmfT?8pps34h#_zv)`lwGB}l0ASVmRX3mC%$$|!Yw!D7
zvt>{xncX@qA)K}|t|UqXYtA-go2firUAbALkJLKzzv
zgY5=m+kaK3xYn;K8$(dNUN6^(Yg-=cbozp7fmS8tQJJc6Z%GULeXp|k5{_3@eUF$ZJF-d(k%I!qAud)eupmC&V0#iQFF<{7dk#{|w`&^XsH_
zZ8_wsvF498GltBNuYZvXrV94o-5;G1ttQk)e6WZ)@
z`XXRYz`2TZQTwB=&%b`6J|zB(}zsYxSz2$Z*78K0syE8)#m}9FZN#y
z0OJOX%PGrQ61ZeZ;1a_op6vcrw^Rdwhpor=e}0dnID#M;g2j5rDm03Ao)}?jlKRVE!5$zB?x_^a$>*wQbul2
zM>~%OfPZLy^v3*+QT?NKP2L3nYC@e`o;$*EM1R}%ukXg0fi8iWC7HKg+=}y!qheGe
zWHq4%0B@c*9e=fek?$K({iDb=l1*i6by@^LevJ9Cqb#M3rENJFf+@91!_*9uwWZq{
zcev;JWR+%-d_#AEe0L=$*cQRA!Ga>e1JMKWP=BdaF8qCAf7|{k5h+H3NXlZ0P!>@e
zL$JH7=XcZ0e1_Pl<(L~4T
zL9RgzoMFV_p6lal@7pe9Ib}Iy`=QipUhDK9)Q#k-!czWTBkT0khb=Txw34RHAm3b1C
zBw<*>?4h$ASPrlC#|SfqACqz^#ofj|%p=S=naAX1&B`)#_SJ+s#4RMmEkr054tE$%
z#i+Ml+**HSeWkdP!{Bs`tEa7JTYruYbaIXSnfMubRiRasH52(wxeK2c4;<>pk(g01&hKu|H=8qxr+n$1lrJSm=xyGxTBK>P9nc&
zbQZ*J3AH79%iQ5}Ev|MiC3d&}*N(*2KN9>sCXe-+0{}90E~KXpMsi#aRJv28|94>mBh`)t?kv$g4lDRxW7SfTz
zb!tMH7`)kxdr2s?irUs%1VQYX_J(bq0a~3_5Bk?et`EHpp;&mj{C_l`%a7(qBYyk$FIYD25Qpi=qH)Zy(1$*}gD^X>v6Pe)Gsfex
zoF&ReL4Goh(tI4pm|>w0eRv09c4C|PL;?UUp?=a(=*b&F@8o^14}JJM!o0-(AFhOd
V$k~JKp#T5?07*qoL
Date: Thu, 6 Mar 2025 14:23:30 +0000
Subject: [PATCH 04/10] fix registry url etc (#34)
Co-authored-by: Tom Pereira
---
.github/actions/publish/action.yaml | 2 ++
docs/CHANGELOG.md | 6 ++++++
package.json | 2 +-
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/.github/actions/publish/action.yaml b/.github/actions/publish/action.yaml
index bb3659c..2106e92 100644
--- a/.github/actions/publish/action.yaml
+++ b/.github/actions/publish/action.yaml
@@ -21,6 +21,8 @@ runs:
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
+ registry-url: https://registry.npmjs.org/
+ always-auth: true
cache: npm
- name: Install
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index 42e9399..bfcd51b 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -14,6 +14,12 @@ N.B. See changelogs for individual packages, where most change will occur:
This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
+## [0.10.4] - 2025-03-06
+
+### Fixed
+
+- Ensured that the registry is explicitly set, to ensure that [`@actions/setup-node`](https://github.com/actions/setup-node) honours the `NODE_AUTH_TOKEN`
+
## [0.10.3] - 2025-02-27
### Fixed
diff --git a/package.json b/package.json
index a2992c6..540f361 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@asos/web-toggle-point",
- "version": "0.10.3",
+ "version": "0.10.4",
"repository": "git@github.com:asos/web-toggle-point.git",
"homepage": "https://asos.github.io/web-toggle-point/",
"license": "MIT",
From bbb31adc6d7a659b62d3504ea018247279d1383c Mon Sep 17 00:00:00 2001
From: TomStrepsil <10725179+TomStrepsil@users.noreply.github.com>
Date: Sun, 6 Jul 2025 20:30:53 +0100
Subject: [PATCH 05/10] logError -> onVariantError
---
examples/express/docs/CHANGELOG.md | 6 +++
examples/express/package.json | 2 +-
.../express/src/routes/config/togglePoint.js | 6 ++-
examples/next/docs/CHANGELOG.md | 6 +++
examples/next/package.json | 2 +-
.../fixtures/experiments/withTogglePoint.ts | 2 +-
packages/react-pointcuts/docs/CHANGELOG.md | 6 +++
packages/react-pointcuts/package.json | 2 +-
packages/react-pointcuts/src/external.js | 11 -----
.../src/getCodeSelectionPlugins.test.js | 18 --------
...ctionPlugins.js => getHooksFromPlugins.js} | 7 +--
.../src/getHooksFromPlugins.test.js | 18 ++++++++
.../getComponent/index.js | 26 +++++++----
.../getComponent/index.test.js | 43 ++++++++++++++++---
...Plugins.js => withCodeSelectionPlugins.js} | 10 +++--
...st.js => withCodeSelectionPlugins.test.js} | 18 +++++---
.../getComponent/withErrorBoundary.js | 4 +-
.../getComponent/withErrorBoundary.test.js | 14 +++---
.../src/withTogglePointFactory/index.js | 26 ++++++-----
.../src/withTogglePointFactory/index.test.js | 33 ++++++++++----
.../src/withToggledHookFactory/index.js | 7 +--
.../src/withToggledHookFactory/index.test.js | 9 ++--
22 files changed, 180 insertions(+), 96 deletions(-)
delete mode 100644 packages/react-pointcuts/src/getCodeSelectionPlugins.test.js
rename packages/react-pointcuts/src/{getCodeSelectionPlugins.js => getHooksFromPlugins.js} (63%)
create mode 100644 packages/react-pointcuts/src/getHooksFromPlugins.test.js
rename packages/react-pointcuts/src/withTogglePointFactory/getComponent/{withPlugins.js => withCodeSelectionPlugins.js} (71%)
rename packages/react-pointcuts/src/withTogglePointFactory/getComponent/{withPlugins.test.js => withCodeSelectionPlugins.test.js} (80%)
diff --git a/examples/express/docs/CHANGELOG.md b/examples/express/docs/CHANGELOG.md
index 6ac4195..8191b06 100644
--- a/examples/express/docs/CHANGELOG.md
+++ b/examples/express/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.2.4] - 2025-07-06
+
+### Changed
+
+- move to use new `onVariantError` plugin hook over `logError` to consume [0.5.0](../../../packages/react-pointcuts/docs/CHANGELOG.md#040---2025-07-06) of `react-pointcuts` package.
+
## [0.2.3] - 2024-12-24
### Changed
diff --git a/examples/express/package.json b/examples/express/package.json
index 995407b..75ecd27 100644
--- a/examples/express/package.json
+++ b/examples/express/package.json
@@ -1,6 +1,6 @@
{
"name": "web-toggle-point-express-example",
- "version": "0.2.3",
+ "version": "0.2.4",
"type": "module",
"engines": {
"node": ">=20.6.0"
diff --git a/examples/express/src/routes/config/togglePoint.js b/examples/express/src/routes/config/togglePoint.js
index abdcd3b..03ae609 100644
--- a/examples/express/src/routes/config/togglePoint.js
+++ b/examples/express/src/routes/config/togglePoint.js
@@ -6,7 +6,11 @@ const { getFeatures: getActiveFeatures } = featuresStore;
const withTogglePoint = withTogglePointFactory({
getActiveFeatures,
variantKey: "size",
- logError: console.log
+ plugins: [
+ {
+ onVariantError: console.log
+ }
+ ]
});
export default withTogglePoint;
diff --git a/examples/next/docs/CHANGELOG.md b/examples/next/docs/CHANGELOG.md
index 8f4e287..c28d206 100644
--- a/examples/next/docs/CHANGELOG.md
+++ b/examples/next/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.2.3] - 2025-07-06
+
+### Changed
+
+- move to use new `onVariantError` plugin hook over `logError` to consume [0.5.0](../../../packages/react-pointcuts/docs/CHANGELOG.md#040---2025-07-06) of `react-pointcuts` package.
+
## [0.2.2] - 2024-12-24
### Fixed
diff --git a/examples/next/package.json b/examples/next/package.json
index b7478e4..60a4744 100644
--- a/examples/next/package.json
+++ b/examples/next/package.json
@@ -1,6 +1,6 @@
{
"name": "web-toggle-point-next-example",
- "version": "0.2.2",
+ "version": "0.2.3",
"private": true,
"type": "module",
"scripts": {
diff --git a/examples/next/src/app/fixtures/experiments/withTogglePoint.ts b/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
index 89f046e..91a5a44 100644
--- a/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
+++ b/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
@@ -8,9 +8,9 @@ const getActiveFeatures = () => getFeatures().decisions;
const withTogglePoint = withTogglePointFactory({
getActiveFeatures,
- logError: console.log,
plugins: [
{
+ onVariantError: console.log,
onCodeSelected: ({ matchedFeatures }) => {
if (matchedFeatures?.length) {
const [[feature]] = matchedFeatures;
diff --git a/packages/react-pointcuts/docs/CHANGELOG.md b/packages/react-pointcuts/docs/CHANGELOG.md
index d8cb61a..4c72300 100644
--- a/packages/react-pointcuts/docs/CHANGELOG.md
+++ b/packages/react-pointcuts/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.5.0] - 2025-07-06
+
+### Changed
+
+- Removed `logError` parameter of the `withTogglePointFactory`, replacing with calling of `onVariantError` hook of supplied plugins
+
## [0.4.3] - 2025-03-03
### Changed
diff --git a/packages/react-pointcuts/package.json b/packages/react-pointcuts/package.json
index f6ed552..4ca68f8 100644
--- a/packages/react-pointcuts/package.json
+++ b/packages/react-pointcuts/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-react-pointcuts",
"description": "react pointcut code",
- "version": "0.4.3",
+ "version": "0.5.0",
"license": "MIT",
"type": "module",
"main": "./lib/main.es5.cjs",
diff --git a/packages/react-pointcuts/src/external.js b/packages/react-pointcuts/src/external.js
index d3834a4..a4b7ede 100644
--- a/packages/react-pointcuts/src/external.js
+++ b/packages/react-pointcuts/src/external.js
@@ -1,14 +1,3 @@
-/**
- * Code expected in the host application
- * @external HostApplication
- */
-/**
- * A delegate passed to log an error
- * @callback external:HostApplication.logError
- * @type {Function}
- * @param {string} message A message to log as an error
- */
-
/**
* React UI library
* @external React
diff --git a/packages/react-pointcuts/src/getCodeSelectionPlugins.test.js b/packages/react-pointcuts/src/getCodeSelectionPlugins.test.js
deleted file mode 100644
index fd09d0c..0000000
--- a/packages/react-pointcuts/src/getCodeSelectionPlugins.test.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import getCodeSelectionPlugins from "./getCodeSelectionPlugins";
-
-describe("getCodeSelectionPlugins", () => {
- let result;
- const plugins = [
- { onSomeOtherThing: () => {} },
- { onCodeSelected: jest.fn() },
- { onCodeSelected: jest.fn(), onSomeOtherThing: () => {} }
- ];
-
- beforeEach(() => {
- result = getCodeSelectionPlugins(plugins);
- });
-
- it("should return all plugins that have a binding to the 'onCodeSelected' hook", () => {
- expect(result).toEqual(plugins.slice(1));
- });
-});
diff --git a/packages/react-pointcuts/src/getCodeSelectionPlugins.js b/packages/react-pointcuts/src/getHooksFromPlugins.js
similarity index 63%
rename from packages/react-pointcuts/src/getCodeSelectionPlugins.js
rename to packages/react-pointcuts/src/getHooksFromPlugins.js
index 4aa9b83..06a5452 100644
--- a/packages/react-pointcuts/src/getCodeSelectionPlugins.js
+++ b/packages/react-pointcuts/src/getHooksFromPlugins.js
@@ -3,9 +3,10 @@
* @typedef {object} module:web-toggle-point-react-pointcuts~plugin
* @property {string} name plugin name, used as a prefix when creating {@link https://legacy.reactjs.org/docs/higher-order-components.html|React Higher-Order-Components} when toggling
* @property {Function} onCodeSelected hook to be called when a code selection is made
+ * @property {Function} onVariantError hook to be called when a variant throws an error
*/
-const getCodeSelectionPlugins = (plugins) =>
- plugins.filter(({ onCodeSelected }) => !!onCodeSelected);
+const getHooksFromPlugins = (plugins, hook) =>
+ plugins.filter(({ [hook]: usedHook }) => !!usedHook);
-export default getCodeSelectionPlugins;
+export default getHooksFromPlugins;
diff --git a/packages/react-pointcuts/src/getHooksFromPlugins.test.js b/packages/react-pointcuts/src/getHooksFromPlugins.test.js
new file mode 100644
index 0000000..f51c38b
--- /dev/null
+++ b/packages/react-pointcuts/src/getHooksFromPlugins.test.js
@@ -0,0 +1,18 @@
+import getHooksFromPlugins from "./getHooksFromPlugins";
+
+describe("getHooksFromPlugins", () => {
+ let result;
+ const plugins = [
+ { onSomeOtherThing: () => {} },
+ { onSomeThing: jest.fn() },
+ { onSomeThing: jest.fn(), onSomeOtherThing: () => {} }
+ ];
+
+ beforeEach(() => {
+ result = getHooksFromPlugins(plugins, "onSomeThing");
+ });
+
+ it("should return all plugins that have a binding to the supplied hook", () => {
+ expect(result).toEqual(plugins.slice(1));
+ });
+});
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.js b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.js
index 592d6d9..113a4da 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.js
@@ -1,11 +1,11 @@
-import withPlugins from "./withPlugins";
+import withCodeSelectionPlugins from "./withCodeSelectionPlugins";
import withErrorBoundary from "./withErrorBoundary";
import { forwardRef } from "react";
const getControlOrVariant = ({
matchedFeatures,
matchedVariant,
- logError,
+ onVariantError,
control
}) => {
if (!matchedFeatures.length) {
@@ -27,7 +27,7 @@ const getControlOrVariant = ({
Component = withErrorBoundary({
Variant,
- logError,
+ onVariantError,
fallback: control
});
}
@@ -35,13 +35,23 @@ const getControlOrVariant = ({
};
const getComponent = (params) => {
- let Component = getControlOrVariant(params);
+ const onVariantError = (error) => {
+ params.variantErrorPlugins.forEach(({ onVariantError }) => {
+ Promise.resolve().then(() => {
+ try {
+ onVariantError(error);
+ } catch {} // eslint-disable-line no-empty
+ });
+ });
+ };
+
+ let Component = getControlOrVariant({ ...params, onVariantError });
- const { plugins, ...rest } = params;
- if (plugins) {
- Component = withPlugins({
+ const { codeSelectionPlugins, ...rest } = params;
+ if (codeSelectionPlugins) {
+ Component = withCodeSelectionPlugins({
Component,
- plugins,
+ codeSelectionPlugins,
...rest
});
}
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.test.js b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.test.js
index 401ad62..41ebf64 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.test.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/index.test.js
@@ -1,11 +1,11 @@
import getComponent from "./index";
import withErrorBoundary from "./withErrorBoundary";
-import withPlugins from "./withPlugins";
+import withCodeSelectionPlugins from "./withCodeSelectionPlugins";
import { render, screen } from "@testing-library/react";
import { createRef, forwardRef } from "react";
jest.mock("./withErrorBoundary", () => jest.fn());
-jest.mock("./withPlugins", () => jest.fn());
+jest.mock("./withCodeSelectionPlugins", () => jest.fn());
const mockVariantComponent = "test-variant-component";
const MockVariantComponent = forwardRef(
@@ -19,11 +19,18 @@ describe("getComponent", () => {
beforeEach(() => {
jest.clearAllMocks();
params = {
- logError: Symbol("test-error-logger"),
control: () => Symbol("test-base-component"),
- plugins: Symbol("test-plugins")
+ codeSelectionPlugins: Symbol("test-code-selection-plugins"),
+ variantErrorPlugins: [
+ {
+ onVariantError: jest.fn(() => {
+ throw "this errors";
+ })
+ },
+ { onVariantError: jest.fn() }
+ ]
};
- withPlugins.mockImplementation(({ Component }) => {
+ withCodeSelectionPlugins.mockImplementation(({ Component }) => {
Component[pluginMarker] = true;
return Component;
});
@@ -32,7 +39,7 @@ describe("getComponent", () => {
const makeCommonAssertions = () => {
it("should run plugins on the the matched features, passing the params that were passed to the component, in-case the plugins need them", () => {
const { plugins, ...rest } = params;
- expect(withPlugins).toHaveBeenCalledWith({
+ expect(withCodeSelectionPlugins).toHaveBeenCalledWith({
Component: result,
plugins,
...rest
@@ -110,7 +117,7 @@ describe("getComponent", () => {
it("should wrap the variant with an error boundary, to ensure errors in the variant result in falling back to the base/default component", () => {
const { control: Component } = params;
expect(withErrorBoundary).toHaveBeenCalledWith({
- logError: params.logError,
+ onVariantError: expect.any(Function),
Variant: expect.anything(),
fallback: Component
});
@@ -141,6 +148,28 @@ describe("getComponent", () => {
);
});
});
+
+ describe("when the variant throws an error, thus the error boundary calls the passed onVariantError method", () => {
+ const mockError = Symbol("test-error");
+ const syncMethod = jest.fn();
+
+ beforeEach(() => {
+ const [[{ onVariantError }]] = withErrorBoundary.mock.calls;
+ onVariantError(mockError);
+ syncMethod();
+ });
+
+ it("should call the onVariantError callbacks with the error, with the callbacks not holding up execution of the main thread and errors thrown not affecting subsequent callbacks", () => {
+ const [
+ { onVariantError: plugin1Callback },
+ { onVariantError: plugin2Callback }
+ ] = params.variantErrorPlugins;
+ expect(plugin1Callback).toHaveBeenCalledWith(mockError);
+ expect(plugin2Callback).toHaveBeenCalledWith(mockError);
+ expect(syncMethod).toHaveBeenCalledBefore(plugin1Callback);
+ expect(syncMethod).toHaveBeenCalledBefore(plugin2Callback);
+ });
+ });
});
});
});
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withPlugins.js b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withCodeSelectionPlugins.js
similarity index 71%
rename from packages/react-pointcuts/src/withTogglePointFactory/getComponent/withPlugins.js
rename to packages/react-pointcuts/src/withTogglePointFactory/getComponent/withCodeSelectionPlugins.js
index 9d951d8..1ccf6a0 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withPlugins.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withCodeSelectionPlugins.js
@@ -14,8 +14,12 @@ const wrap = ({ Component, useHook, name }, rest) => {
return WithTogglePointPlugin;
};
-const withPlugins = ({ Component, plugins, ...rest }) => {
- for (const { onCodeSelected: useHook, name } of plugins) {
+const withCodeSelectionPlugins = ({
+ Component,
+ codeSelectionPlugins,
+ ...rest
+}) => {
+ for (const { onCodeSelected: useHook, name } of codeSelectionPlugins) {
Component = wrap(
{
Component,
@@ -29,4 +33,4 @@ const withPlugins = ({ Component, plugins, ...rest }) => {
return Component;
};
-export default withPlugins;
+export default withCodeSelectionPlugins;
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withPlugins.test.js b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withCodeSelectionPlugins.test.js
similarity index 80%
rename from packages/react-pointcuts/src/withTogglePointFactory/getComponent/withPlugins.test.js
rename to packages/react-pointcuts/src/withTogglePointFactory/getComponent/withCodeSelectionPlugins.test.js
index 5238386..92426b7 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withPlugins.test.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withCodeSelectionPlugins.test.js
@@ -1,9 +1,9 @@
import { render } from "@testing-library/react";
-import withPlugins from "./withPlugins";
+import withCodeSelectionPlugins from "./withCodeSelectionPlugins";
import { forwardRef } from "react";
-describe("withPlugins", () => {
- const plugins = [
+describe("withCodeSelectionPlugins", () => {
+ const codeSelectionPlugins = [
{ name: "Plugin1", onCodeSelected: jest.fn() },
{ name: "Plugin2", onCodeSelected: jest.fn(), onSomeOtherThing: () => {} }
];
@@ -19,7 +19,7 @@ describe("withPlugins", () => {
const makeCommonAssertions = () => {
it("should execute the 'onCodeSelected' hooks of all plugins, in reverse order (since first plugin applies closest to the wrapped component), passing the props passed to withPlugins", () => {
let lastPlugin;
- plugins.forEach((plugin) => {
+ codeSelectionPlugins.forEach((plugin) => {
expect(plugin.onCodeSelected).toHaveBeenCalledTimes(1);
expect(plugin.onCodeSelected).toHaveBeenCalledWith(rest);
if (lastPlugin) {
@@ -48,13 +48,17 @@ describe("withPlugins", () => {
TestComponent.displayName = displayName;
TestComponent.name = name;
- Wrapped = withPlugins({ Component: TestComponent, plugins, ...rest });
+ Wrapped = withCodeSelectionPlugins({
+ Component: TestComponent,
+ codeSelectionPlugins,
+ ...rest
+ });
render();
});
- it("should have a display name that wraps the component in the plugins, in order", () => {
+ it("should have a display name that wraps the component in the code selection plugins, in order", () => {
expect(Wrapped.displayName).toBe(
- `With${plugins[1].name}(With${plugins[0].name}(${expectedDisplayName}))`
+ `With${codeSelectionPlugins[1].name}(With${codeSelectionPlugins[0].name}(${expectedDisplayName}))`
);
});
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.js b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.js
index 35a60af..468696d 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.js
@@ -2,7 +2,7 @@ import { Component, forwardRef, createContext } from "react";
const ForwardedRefContext = createContext();
-const withErrorBoundary = ({ Variant, fallback, logError }) => {
+const withErrorBoundary = ({ Variant, onVariantError, fallback }) => {
class TogglePointErrorBoundary extends Component {
constructor(props) {
super(props);
@@ -15,7 +15,7 @@ const withErrorBoundary = ({ Variant, fallback, logError }) => {
componentDidCatch(error) {
error.message = `Variant errored, rendering fallback: ${error.message}`;
- logError(error);
+ onVariantError(error);
}
static contextType = ForwardedRefContext;
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.test.js b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.test.js
index f1ffe6b..f61e204 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.test.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/getComponent/withErrorBoundary.test.js
@@ -3,7 +3,7 @@ import withErrorBoundary from "./withErrorBoundary";
import { render, screen } from "@testing-library/react";
import { createRef, forwardRef } from "react";
-const mockLogError = jest.fn();
+const mockOnVariantError = jest.fn();
describe("withErrorBoundary", () => {
const inboundProps = { "test-prop": Symbol("test-value") };
@@ -34,7 +34,7 @@ describe("withErrorBoundary", () => {
Boundaried = withErrorBoundary({
Variant: MockVariant,
fallback: MockFallback,
- logError: mockLogError
+ onVariantError: mockOnVariantError
});
render();
});
@@ -47,8 +47,8 @@ describe("withErrorBoundary", () => {
expect(screen.queryByTestId(mockFallback)).not.toBeInTheDocument();
});
- it("should not log anything", () => {
- expect(mockLogError).not.toHaveBeenCalled();
+ it("should not call the onVariantError callback", () => {
+ expect(mockOnVariantError).not.toHaveBeenCalled();
});
});
@@ -58,7 +58,7 @@ describe("withErrorBoundary", () => {
const Boundaried = withErrorBoundary({
Variant: MockErrorVariant,
fallback: MockFallback,
- logError: mockLogError
+ onVariantError: mockOnVariantError
});
render();
});
@@ -75,8 +75,8 @@ describe("withErrorBoundary", () => {
expect(screen.queryByTestId(mockVariant)).not.toBeInTheDocument();
});
- it("should log an error indicating that the fallback has been rendered", () => {
- expect(mockLogError).toHaveBeenCalledWith(mockError);
+ it("should call the onVariantError callback, indicating that the fallback has been rendered", () => {
+ expect(mockOnVariantError).toHaveBeenCalledWith(mockError);
});
it("should update the message on the error to include that the variant has errored", () => {
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/index.js b/packages/react-pointcuts/src/withTogglePointFactory/index.js
index ecd92a2..6535764 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/index.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/index.js
@@ -1,7 +1,7 @@
import { useMemo, forwardRef } from "react";
import getComponent from "./getComponent";
import useCodeMatches from "../useCodeMatches";
-import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
+import getHooksFromPlugins from "../getHooksFromPlugins";
// eslint-disable-next-line prettier/prettier, no-empty -- https://github.com/babel/babel/issues/15156
{}
@@ -12,27 +12,33 @@ import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
* @function
* @param {object} params parameters
* @param {function} params.getActiveFeatures a method to get active features. Called honouring the rules of hooks.
- * @param {external:HostApplication.logError} params.logError a method that logs errors
* @param {string} [params.variantKey=bucket] A key use to identify a variant from the features data structure. Remaining members of the feature will be passed to the variant as props.
- * @param {Array} [params.plugins] plugins to be used when toggling
- * Will be used when a toggled component throws an error that can be caught by an {@link https://reactjs.org/docs/error-boundaries.html|ErrorBoundary}.
+ * @param {Array} [params.plugins] plugins to be used when toggling.
+ * Any plugins that include a 'onVariantError' hook will be called when a toggled component throws an error that can be caught by an {@link https://reactjs.org/docs/error-boundaries.html|ErrorBoundary}.
* When errors are caught, the control/base code will be used as the fallback component.
* @returns {module:web-toggle-point-react-pointcuts.withTogglePoint} withTogglePoint React Higher-Order-Component.
* @example
* const withTogglePoint = withTogglePointFactory({
* getActiveFeatures,
- * plugins: [plugin1, plugin2, plugin3],
- * logError: (error) => window.NREUM?.noticeError(error)
+ * plugins: [
+ * somePlugin,
+ * {
+ * onCodeSelected: ({ matchedFeatures }) => { console.log("matched: " + JSON.stringify(matchedFeatures)) }); },
+ * },
+ * {
+ * onVariantError: console.error
+ * }
+ * ]
* });
* export default withTogglePoint(MyReactComponent);
*/
const withTogglePointFactory = ({
getActiveFeatures,
- logError,
variantKey = "bucket",
plugins = []
}) => {
- const codeSelectionPlugins = getCodeSelectionPlugins(plugins);
+ const codeSelectionPlugins = getHooksFromPlugins(plugins, "onCodeSelected");
+ const variantErrorPlugins = getHooksFromPlugins(plugins, "onVariantError");
/**
* A React Higher-Order-Component that wraps a base / control component and swaps in a variant when deemed appropriate by a context
@@ -58,9 +64,9 @@ const withTogglePointFactory = ({
getComponent({
matchedFeatures,
matchedVariant,
- logError,
control,
- plugins: codeSelectionPlugins
+ codeSelectionPlugins,
+ variantErrorPlugins
}),
[matchedFeatures, matchedVariant]
);
diff --git a/packages/react-pointcuts/src/withTogglePointFactory/index.test.js b/packages/react-pointcuts/src/withTogglePointFactory/index.test.js
index 462939d..5d26cc3 100644
--- a/packages/react-pointcuts/src/withTogglePointFactory/index.test.js
+++ b/packages/react-pointcuts/src/withTogglePointFactory/index.test.js
@@ -2,14 +2,21 @@ import withTogglePointFactory from ".";
import { render, screen } from "@testing-library/react";
import useCodeMatches from "../useCodeMatches";
import getComponent from "./getComponent";
-import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
+import getHooksFromPlugins from "../getHooksFromPlugins";
import { createRef, forwardRef } from "react";
const mockMatches = {};
jest.mock("../useCodeMatches", () => jest.fn(() => mockMatches));
-const mockCodeSelectionPlugins = Symbol("test-code-selection-plugins");
-jest.mock("../getCodeSelectionPlugins", () =>
- jest.fn(() => mockCodeSelectionPlugins)
+const mockCodeSelectionPlugins = Symbol("test-plugins");
+const mockVariantErrorPlugins = Symbol("test-plugins");
+jest.mock("../getHooksFromPlugins", () =>
+ jest.fn(
+ (_, type) =>
+ ({
+ onCodeSelected: mockCodeSelectionPlugins,
+ onVariantError: mockVariantErrorPlugins
+ })[type]
+ )
);
const mockVariedComponent = "test-component";
const MockVariedComponent = forwardRef(
@@ -22,7 +29,6 @@ describe("withTogglePointFactory", () => {
let rerender;
const featuresMap = Symbol("test-features-map");
const inboundProps = { "test-prop": Symbol("test-value") };
- const logError = Symbol("test-log-error");
const mockPlugins = [Symbol("test-plugin1"), Symbol("test-plugin2")];
const mockActiveFeatures = Symbol("test-active-features");
const getActiveFeatures = jest.fn(() => mockActiveFeatures);
@@ -43,7 +49,6 @@ describe("withTogglePointFactory", () => {
jest.clearAllMocks();
const withTogglePoint = withTogglePointFactory({
getActiveFeatures,
- logError,
variantKey: inputVariantKey,
plugins: mockPlugins
});
@@ -51,7 +56,17 @@ describe("withTogglePointFactory", () => {
});
it("should get code selection plugins", () => {
- expect(getCodeSelectionPlugins).toHaveBeenCalledWith(mockPlugins);
+ expect(getHooksFromPlugins).toHaveBeenCalledWith(
+ mockPlugins,
+ "onCodeSelected"
+ );
+ });
+
+ it("should get variant errored plugins", () => {
+ expect(getHooksFromPlugins).toHaveBeenCalledWith(
+ mockPlugins,
+ "onVariantError"
+ );
});
const makeRenderedAssertions = () => {
@@ -79,9 +94,9 @@ describe("withTogglePointFactory", () => {
expect(getComponent).toHaveBeenCalledWith({
matchedFeatures,
matchedVariant,
- logError,
control: mockComponent,
- plugins: mockCodeSelectionPlugins
+ codeSelectionPlugins: mockCodeSelectionPlugins,
+ variantErrorPlugins: mockVariantErrorPlugins
});
});
};
diff --git a/packages/react-pointcuts/src/withToggledHookFactory/index.js b/packages/react-pointcuts/src/withToggledHookFactory/index.js
index 13c7413..3a1b028 100644
--- a/packages/react-pointcuts/src/withToggledHookFactory/index.js
+++ b/packages/react-pointcuts/src/withToggledHookFactory/index.js
@@ -1,6 +1,6 @@
import useCodeMatches from "../useCodeMatches";
import pluginsHookFactory from "./pluginsHookFactory";
-import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
+import getHooksFromPlugins from "../getHooksFromPlugins";
// eslint-disable-next-line prettier/prettier, no-empty -- https://github.com/babel/babel/issues/15156
{}
@@ -22,8 +22,9 @@ import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
* export default withToggledHook(useMyHook);
*/
const withToggledHookFactory = ({ getActiveFeatures, plugins = [] }) => {
- const codeSelectionPlugins = getCodeSelectionPlugins(plugins);
- const useCodeSelectionPlugins = pluginsHookFactory(codeSelectionPlugins);
+ const useCodeSelectionPlugins = pluginsHookFactory(
+ getHooksFromPlugins(plugins, "onCodeSelected")
+ );
/**
* A React hook that wraps a base / control function or hook and swaps in a variant when deemed appropriate by a context
diff --git a/packages/react-pointcuts/src/withToggledHookFactory/index.test.js b/packages/react-pointcuts/src/withToggledHookFactory/index.test.js
index 8ad4b9e..3d66ddf 100644
--- a/packages/react-pointcuts/src/withToggledHookFactory/index.test.js
+++ b/packages/react-pointcuts/src/withToggledHookFactory/index.test.js
@@ -1,5 +1,5 @@
import withToggledHookFactory from ".";
-import getCodeSelectionPlugins from "../getCodeSelectionPlugins";
+import getHooksFromPlugins from "../getHooksFromPlugins";
import pluginsHookFactory from "./pluginsHookFactory";
import { renderHook } from "@testing-library/react";
import useCodeMatches from "../useCodeMatches";
@@ -7,7 +7,7 @@ import useCodeMatches from "../useCodeMatches";
const mockMatches = { matchedFeatures: Symbol("test-matched-features") };
jest.mock("../useCodeMatches", () => jest.fn(() => mockMatches));
const mockCodeSelectionPlugins = Symbol("test-code-selection-plugins");
-jest.mock("../getCodeSelectionPlugins", () =>
+jest.mock("../getHooksFromPlugins", () =>
jest.fn(() => mockCodeSelectionPlugins)
);
jest.mock("./pluginsHookFactory", () => jest.fn());
@@ -33,7 +33,10 @@ describe("withToggledHookFactory", () => {
});
it("should get code selection plugins", () => {
- expect(getCodeSelectionPlugins).toHaveBeenCalledWith(mockPlugins);
+ expect(getHooksFromPlugins).toHaveBeenCalledWith(
+ mockPlugins,
+ "onCodeSelected"
+ );
});
it("should create a code selection hook based on the appropriate plugins", () => {
From adfe206e74ba539a12750ab1bf109dc08df74ac3 Mon Sep 17 00:00:00 2001
From: TomStrepsil <10725179+TomStrepsil@users.noreply.github.com>
Date: Mon, 14 Jul 2025 10:54:49 +0100
Subject: [PATCH 06/10] console.error, not log
---
.../next/src/app/fixtures/experiments/withTogglePoint.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/examples/next/src/app/fixtures/experiments/withTogglePoint.ts b/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
index 91a5a44..de81029 100644
--- a/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
+++ b/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
@@ -10,7 +10,7 @@ const withTogglePoint = withTogglePointFactory({
getActiveFeatures,
plugins: [
{
- onVariantError: console.log,
+ onVariantError: console.error,
onCodeSelected: ({ matchedFeatures }) => {
if (matchedFeatures?.length) {
const [[feature]] = matchedFeatures;
@@ -18,9 +18,9 @@ const withTogglePoint = withTogglePointFactory({
`activated ${feature} with audience ${getFeatures().audience}`
);
}
- }
- }
- ]
+ },
+ },
+ ],
});
export default withTogglePoint;
From 40e02a481c3133c200fb786b3d2881fadbb09043 Mon Sep 17 00:00:00 2001
From: TomStrepsil <10725179+TomStrepsil@users.noreply.github.com>
Date: Mon, 14 Jul 2025 10:56:07 +0100
Subject: [PATCH 07/10] console.log -> console.error, lint
---
examples/express/src/routes/config/togglePoint.js | 2 +-
.../next/src/app/fixtures/experiments/withTogglePoint.ts | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/examples/express/src/routes/config/togglePoint.js b/examples/express/src/routes/config/togglePoint.js
index 03ae609..1ae5186 100644
--- a/examples/express/src/routes/config/togglePoint.js
+++ b/examples/express/src/routes/config/togglePoint.js
@@ -8,7 +8,7 @@ const withTogglePoint = withTogglePointFactory({
variantKey: "size",
plugins: [
{
- onVariantError: console.log
+ onVariantError: console.error
}
]
});
diff --git a/examples/next/src/app/fixtures/experiments/withTogglePoint.ts b/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
index de81029..8e24104 100644
--- a/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
+++ b/examples/next/src/app/fixtures/experiments/withTogglePoint.ts
@@ -18,9 +18,9 @@ const withTogglePoint = withTogglePointFactory({
`activated ${feature} with audience ${getFeatures().audience}`
);
}
- },
- },
- ],
+ }
+ }
+ ]
});
export default withTogglePoint;
From 0a2cafe7c03281465a92f23a4e36a993e2b10213 Mon Sep 17 00:00:00 2001
From: TomStrepsil <10725179+TomStrepsil@users.noreply.github.com>
Date: Tue, 30 Sep 2025 20:05:42 +0100
Subject: [PATCH 08/10] scout: fixup npmjs.com relative links
---
docs/CHANGELOG.md | 4 +++
package-lock.json | 30 ++++++++++++++++------
packages/eslint.config.mjs | 6 +++++
packages/features/docs/CHANGELOG.md | 6 +++++
packages/features/package.json | 7 ++---
packages/prepare-publish.mjs | 22 ++++++++++++++++
packages/react-pointcuts/docs/CHANGELOG.md | 4 +++
packages/react-pointcuts/package.json | 5 ++--
packages/ssr/docs/CHANGELOG.md | 6 +++++
packages/ssr/package.json | 7 ++---
packages/webpack/docs/CHANGELOG.md | 6 +++++
packages/webpack/package.json | 7 ++---
12 files changed, 91 insertions(+), 19 deletions(-)
create mode 100644 packages/prepare-publish.mjs
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index 81c3fa2..846396a 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -20,6 +20,10 @@ This log covers the [monorepo](https://en.wikipedia.org/wiki/Monorepo).
- a `build:examples` script, for easy re-building of all examples
+### Fixed
+
+- added a `prepare-publish.mjs` script to prepare packages for npm publishing (moving `README.md` and `LICENSE` files into package roots), replacing the prior `shx` based solution, and adding [`transform-markdown-links`](https://github.com/gakimball/transform-markdown-links) to fix relative paths that otherwise incorrectly link on [npmjs.com](https://www.npmjs.com/)
+
## [0.11.0] - 2025-09-29
### Changed
diff --git a/package-lock.json b/package-lock.json
index 6cafc5a..678d3f0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@asos/web-toggle-point",
- "version": "0.11.0",
+ "version": "0.12.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@asos/web-toggle-point",
- "version": "0.11.0",
+ "version": "0.12.0",
"license": "MIT",
"workspaces": [
"packages/features",
@@ -18641,6 +18641,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/transform-markdown-links": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/transform-markdown-links/-/transform-markdown-links-2.1.0.tgz",
+ "integrity": "sha512-7HWQwQ9US+tJSMMzi1aP+KA3QwfjDs8sB4H5GBMRHFNBMQVdgoF6VfIFy2nJR/UHRTkYoGFwWh2pe+QIwSvfOA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/tree-dump": {
"version": "1.0.2",
"dev": true,
@@ -20113,7 +20123,7 @@
},
"packages/features": {
"name": "@asos/web-toggle-point-features",
- "version": "0.4.1",
+ "version": "0.4.2",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0"
@@ -20141,7 +20151,8 @@
"react": "^18.3.1",
"rimraf": "^6.0.1",
"rollup-plugin-auto-external": "^2.0.0",
- "shx": "^0.4.0"
+ "shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0"
},
"peerDependencies": {
"@asos/web-toggle-point-ssr": "file:../ssr",
@@ -20188,7 +20199,8 @@
"react": "^18.3.1",
"rimraf": "^6.0.1",
"rollup-plugin-auto-external": "^2.0.0",
- "shx": "^0.4.0"
+ "shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0"
},
"peerDependencies": {
"@asos/web-toggle-point-features": "file:../features",
@@ -20199,7 +20211,7 @@
},
"packages/ssr": {
"name": "@asos/web-toggle-point-ssr",
- "version": "0.2.5",
+ "version": "0.2.6",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
@@ -20226,7 +20238,8 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"rollup-plugin-auto-external": "^2.0.0",
- "shx": "^0.4.0"
+ "shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0"
},
"peerDependencies": {
"prop-types": "^15.7.2",
@@ -20236,7 +20249,7 @@
},
"packages/webpack": {
"name": "@asos/web-toggle-point-webpack",
- "version": "0.8.2",
+ "version": "0.8.3",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
@@ -20259,6 +20272,7 @@
"rollup-plugin-copy": "^3.5.0",
"schema-utils": "^4.2.0",
"shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0",
"webpack": "^5.88.2",
"webpack-cli": "^4.10.0",
"webpack-test-utils": "^2.1.0"
diff --git a/packages/eslint.config.mjs b/packages/eslint.config.mjs
index 732691f..53fd75f 100644
--- a/packages/eslint.config.mjs
+++ b/packages/eslint.config.mjs
@@ -17,6 +17,12 @@ export default [
globals: globals.node
}
},
+ {
+ files: ["prepare-publish.mjs"],
+ languageOptions: {
+ globals: globals.node
+ }
+ },
{
files: ["src/**/*.test.*", "build/**/*.js", "**/rollup.mjs"],
ignores: ["**/*.snap"],
diff --git a/packages/features/docs/CHANGELOG.md b/packages/features/docs/CHANGELOG.md
index 97c4079..b4c1cc5 100644
--- a/packages/features/docs/CHANGELOG.md
+++ b/packages/features/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.4.2] - 2025-09-30
+
+### Fixed
+
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+
## [0.4.1] - 2025-09-29
### Fixed
diff --git a/packages/features/package.json b/packages/features/package.json
index f21156a..a2c55b3 100644
--- a/packages/features/package.json
+++ b/packages/features/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-features",
"description": "toggle point features code, used to store toggle state",
- "version": "0.4.1",
+ "version": "0.4.2",
"license": "MIT",
"type": "module",
"main": "./lib/global.js",
@@ -43,7 +43,7 @@
"build": "npm run clean && npm run build:browser && npm run build:server && npm run build:eslint-import-backfill",
"build:browser": "cross-env BABEL_ENV=browser rollup -c build/rollup.mjs --config_isBrowser true",
"build:server": "rollup -c build/rollup.mjs --config_isBrowser false",
- "prepublishOnly": "shx cp docs/README.md ../../LICENSE . && npm run build",
+ "prepublishOnly": "node ../prepare-publish.mjs && npm run build",
"postpublish": "shx rm ./README.md LICENSE",
"build:eslint-import-backfill": "rollup -c build/eslint-import-backfill.rollup.mjs",
"clean": "rimraf ./lib",
@@ -80,7 +80,8 @@
"react": "^18.3.1",
"rimraf": "^6.0.1",
"rollup-plugin-auto-external": "^2.0.0",
- "shx": "^0.4.0"
+ "shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0"
},
"peerDependencies": {
"@asos/web-toggle-point-ssr": "file:../ssr",
diff --git a/packages/prepare-publish.mjs b/packages/prepare-publish.mjs
new file mode 100644
index 0000000..264a7eb
--- /dev/null
+++ b/packages/prepare-publish.mjs
@@ -0,0 +1,22 @@
+import transformLinks from "transform-markdown-links";
+import { copyFile, readFile, writeFile } from "node:fs/promises";
+import { join } from "node:path";
+
+(async function prePublish() {
+ const packageDirectory = process.cwd();
+ const sourceReadme = join(packageDirectory, "./docs/README.md");
+ const targetReadme = join(packageDirectory, "README.md");
+ await copyFile(sourceReadme, targetReadme);
+ const sourceLicense = join(packageDirectory, "../../LICENSE");
+ const targetLicense = join(packageDirectory, "LICENSE");
+ await copyFile(sourceLicense, targetLicense);
+ const readmeContent = await readFile(targetReadme, "utf8");
+
+ const transformedContent = transformLinks(readmeContent, (link) => {
+ if (link.startsWith("../")) {
+ return link.replace(/^\.\.\//, "");
+ }
+ });
+
+ await writeFile(targetReadme, transformedContent, "utf8");
+})();
diff --git a/packages/react-pointcuts/docs/CHANGELOG.md b/packages/react-pointcuts/docs/CHANGELOG.md
index f2e89f3..51abdab 100644
--- a/packages/react-pointcuts/docs/CHANGELOG.md
+++ b/packages/react-pointcuts/docs/CHANGELOG.md
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Removed `logError` parameter of the `withTogglePointFactory`, replacing with calling of `onVariantError` hook of supplied plugins
+### Fixed
+
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+
## [0.4.8] - 2025-09-29
### Fixed
diff --git a/packages/react-pointcuts/package.json b/packages/react-pointcuts/package.json
index 0a632f5..b331adb 100644
--- a/packages/react-pointcuts/package.json
+++ b/packages/react-pointcuts/package.json
@@ -37,7 +37,7 @@
"build": "npm run clean && npm run build:browser && npm run build:server",
"build:browser": "cross-env BABEL_ENV=browser rollup -c build/rollup.mjs --config_isClient true",
"build:server": "rollup -c build/rollup.mjs --config_isClient false",
- "prepublishOnly": "shx cp docs/README.md ../../LICENSE . && npm run build",
+ "prepublishOnly": "node ../prepare-publish.mjs && npm run build",
"postpublish": "shx rm ./README.md LICENSE",
"clean": "rimraf ./lib",
"docs": "rimraf ./docs/**/*.html && jsdoc -c ../jsdoc.conf.js",
@@ -69,7 +69,8 @@
"react": "^18.3.1",
"rimraf": "^6.0.1",
"rollup-plugin-auto-external": "^2.0.0",
- "shx": "^0.4.0"
+ "shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0"
},
"peerDependencies": {
"@asos/web-toggle-point-features": "file:../features",
diff --git a/packages/ssr/docs/CHANGELOG.md b/packages/ssr/docs/CHANGELOG.md
index 40aee00..a698c52 100644
--- a/packages/ssr/docs/CHANGELOG.md
+++ b/packages/ssr/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.2.6] - 2025-09-30
+
+### Fixed
+
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+
## [0.2.5] - 2025-09-29
### Fixed
diff --git a/packages/ssr/package.json b/packages/ssr/package.json
index 4e11262..2d4ef2e 100644
--- a/packages/ssr/package.json
+++ b/packages/ssr/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-ssr",
"description": "toggle point server side rendering code",
- "version": "0.2.5",
+ "version": "0.2.6",
"license": "MIT",
"type": "module",
"main": "./lib/main.es5.cjs",
@@ -39,7 +39,7 @@
"build": "npm run clean && npm run build:browser && npm run build:server",
"build:browser": "cross-env BABEL_ENV=browser rollup -c build/rollup.mjs --config_isClient true",
"build:server": "rollup -c build/rollup.mjs --config_isClient false",
- "prepublishOnly": "shx cp docs/README.md ../../LICENSE . && npm run build",
+ "prepublishOnly": "node ../prepare-publish.mjs && npm run build",
"postpublish": "shx rm ./README.md LICENSE",
"clean": "rimraf ./lib",
"docs": "rimraf ./docs/**/*.html && jsdoc -c ../jsdoc.conf.js",
@@ -72,7 +72,8 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"rollup-plugin-auto-external": "^2.0.0",
- "shx": "^0.4.0"
+ "shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0"
},
"peerDependencies": {
"prop-types": "^15.7.2",
diff --git a/packages/webpack/docs/CHANGELOG.md b/packages/webpack/docs/CHANGELOG.md
index 4df9b5b..73dab3b 100644
--- a/packages/webpack/docs/CHANGELOG.md
+++ b/packages/webpack/docs/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.8.3] - 2025-09-30
+
+### Fixed
+
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+
## [0.8.2] - 2025-09-29
### Fixed
diff --git a/packages/webpack/package.json b/packages/webpack/package.json
index 3ef4631..548ff8d 100644
--- a/packages/webpack/package.json
+++ b/packages/webpack/package.json
@@ -1,7 +1,7 @@
{
"name": "@asos/web-toggle-point-webpack",
"description": "toggle point webpack plugin",
- "version": "0.8.2",
+ "version": "0.8.3",
"license": "MIT",
"type": "module",
"main": "./lib/main.cjs",
@@ -33,7 +33,7 @@
},
"scripts": {
"build": "npm run clean && rollup -c build/rollup.mjs",
- "prepublishOnly": "shx cp docs/README.md ../../LICENSE . && npm run build",
+ "prepublishOnly": "node ../prepare-publish.mjs && npm run build",
"postpublish": "shx rm ./README.md LICENSE",
"clean": "rimraf ./lib",
"docs": "rimraf ./docs/**/*.html && jsdoc -c ../jsdoc.conf.js",
@@ -64,7 +64,8 @@
"webpack": "^5.88.2",
"webpack-cli": "^4.10.0",
"webpack-test-utils": "^2.1.0",
- "shx": "^0.4.0"
+ "shx": "^0.4.0",
+ "transform-markdown-links": "^2.1.0"
},
"peerDependencies": {
"webpack": ">=5.70",
From 14add24a176170d6a560faa7266b960316465d8c Mon Sep 17 00:00:00 2001
From: TomStrepsil <10725179+TomStrepsil@users.noreply.github.com>
Date: Tue, 30 Sep 2025 20:09:56 +0100
Subject: [PATCH 09/10] clarify where bug introduced
---
packages/features/docs/CHANGELOG.md | 2 +-
packages/react-pointcuts/docs/CHANGELOG.md | 2 +-
packages/ssr/docs/CHANGELOG.md | 2 +-
packages/webpack/docs/CHANGELOG.md | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/packages/features/docs/CHANGELOG.md b/packages/features/docs/CHANGELOG.md
index b4c1cc5..5700eaf 100644
--- a/packages/features/docs/CHANGELOG.md
+++ b/packages/features/docs/CHANGELOG.md
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
-- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/) that were moved as part of [0.4.1](#041---2025-09-29)
## [0.4.1] - 2025-09-29
diff --git a/packages/react-pointcuts/docs/CHANGELOG.md b/packages/react-pointcuts/docs/CHANGELOG.md
index 51abdab..d6c3303 100644
--- a/packages/react-pointcuts/docs/CHANGELOG.md
+++ b/packages/react-pointcuts/docs/CHANGELOG.md
@@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
-- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/) that were moved as part of [0.4.7](#047---2025-09-29)
## [0.4.8] - 2025-09-29
diff --git a/packages/ssr/docs/CHANGELOG.md b/packages/ssr/docs/CHANGELOG.md
index a698c52..a6dc120 100644
--- a/packages/ssr/docs/CHANGELOG.md
+++ b/packages/ssr/docs/CHANGELOG.md
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
-- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/) that were moved as part of [0.2.5](#025---2025-09-29)
## [0.2.5] - 2025-09-29
diff --git a/packages/webpack/docs/CHANGELOG.md b/packages/webpack/docs/CHANGELOG.md
index 73dab3b..7be0917 100644
--- a/packages/webpack/docs/CHANGELOG.md
+++ b/packages/webpack/docs/CHANGELOG.md
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
-- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/)
+- Used the `prepare-publish.mjs` script provided by repo root version [0.12.0](../../../docs/CHANGELOG.md#0120---2025-09-30) to fix relative links in `README.md` on [npmjs.com](https://www.npmjs.com/) that were moved as part of [0.8.1](#081---2025-07-14)
## [0.8.2] - 2025-09-29
From e8c9594692a88eb6a8b152b8cc09ad29003fb67c Mon Sep 17 00:00:00 2001
From: TomStrepsil <10725179+TomStrepsil@users.noreply.github.com>
Date: Tue, 30 Sep 2025 20:16:57 +0100
Subject: [PATCH 10/10] clean up script
---
packages/prepare-publish.mjs | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/packages/prepare-publish.mjs b/packages/prepare-publish.mjs
index 264a7eb..9a153b3 100644
--- a/packages/prepare-publish.mjs
+++ b/packages/prepare-publish.mjs
@@ -2,21 +2,22 @@ import transformLinks from "transform-markdown-links";
import { copyFile, readFile, writeFile } from "node:fs/promises";
import { join } from "node:path";
+const encoding = "utf8";
+
(async function prePublish() {
const packageDirectory = process.cwd();
- const sourceReadme = join(packageDirectory, "./docs/README.md");
- const targetReadme = join(packageDirectory, "README.md");
- await copyFile(sourceReadme, targetReadme);
+
const sourceLicense = join(packageDirectory, "../../LICENSE");
const targetLicense = join(packageDirectory, "LICENSE");
await copyFile(sourceLicense, targetLicense);
- const readmeContent = await readFile(targetReadme, "utf8");
+ const sourceReadme = join(packageDirectory, "./docs/README.md");
+ const targetReadme = join(packageDirectory, "README.md");
+ const readmeContent = await readFile(sourceReadme, encoding);
const transformedContent = transformLinks(readmeContent, (link) => {
if (link.startsWith("../")) {
return link.replace(/^\.\.\//, "");
}
});
-
- await writeFile(targetReadme, transformedContent, "utf8");
+ await writeFile(targetReadme, transformedContent, encoding);
})();