@ptolemy2002/react-proxy-context 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +0 -6
  2. package/index.js +323 -9
  3. package/package.json +10 -10
package/README.md CHANGED
@@ -60,12 +60,6 @@ These should be installed in order to use the library, as npm does not automatic
60
60
  - @types/react-dom: ^18.3.0
61
61
  - react: ^18.3.1
62
62
  - react-dom: ^18.3.1
63
- - @types/is-callable: ^1.1.2
64
- - is-callable: ^1.2.7
65
- - nanoid: ^5.0.7
66
- - @ptolemy2002/react-mount-effects: ^1.1.4
67
- - @ptolemy2002/react-force-rerender: ^1.0.4
68
- - @ptolemy2002/js-utils: ^1.0.3
69
63
 
70
64
  ## Commands
71
65
  The following commands exist in the project:
package/index.js CHANGED
@@ -4,6 +4,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
7
10
  var __export = (target, all) => {
8
11
  for (var name in all)
9
12
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -26,6 +29,297 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
29
  ));
27
30
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
31
 
32
+ // node_modules/is-callable/index.js
33
+ var require_is_callable = __commonJS({
34
+ "node_modules/is-callable/index.js"(exports, module2) {
35
+ "use strict";
36
+ var fnToStr = Function.prototype.toString;
37
+ var reflectApply = typeof Reflect === "object" && Reflect !== null && Reflect.apply;
38
+ var badArrayLike;
39
+ var isCallableMarker;
40
+ if (typeof reflectApply === "function" && typeof Object.defineProperty === "function") {
41
+ try {
42
+ badArrayLike = Object.defineProperty({}, "length", {
43
+ get: function() {
44
+ throw isCallableMarker;
45
+ }
46
+ });
47
+ isCallableMarker = {};
48
+ reflectApply(function() {
49
+ throw 42;
50
+ }, null, badArrayLike);
51
+ } catch (_) {
52
+ if (_ !== isCallableMarker) {
53
+ reflectApply = null;
54
+ }
55
+ }
56
+ } else {
57
+ reflectApply = null;
58
+ }
59
+ var constructorRegex = /^\s*class\b/;
60
+ var isES6ClassFn = function isES6ClassFunction(value) {
61
+ try {
62
+ var fnStr = fnToStr.call(value);
63
+ return constructorRegex.test(fnStr);
64
+ } catch (e) {
65
+ return false;
66
+ }
67
+ };
68
+ var tryFunctionObject = function tryFunctionToStr(value) {
69
+ try {
70
+ if (isES6ClassFn(value)) {
71
+ return false;
72
+ }
73
+ fnToStr.call(value);
74
+ return true;
75
+ } catch (e) {
76
+ return false;
77
+ }
78
+ };
79
+ var toStr = Object.prototype.toString;
80
+ var objectClass = "[object Object]";
81
+ var fnClass = "[object Function]";
82
+ var genClass = "[object GeneratorFunction]";
83
+ var ddaClass = "[object HTMLAllCollection]";
84
+ var ddaClass2 = "[object HTML document.all class]";
85
+ var ddaClass3 = "[object HTMLCollection]";
86
+ var hasToStringTag = typeof Symbol === "function" && !!Symbol.toStringTag;
87
+ var isIE68 = !(0 in [,]);
88
+ var isDDA = function isDocumentDotAll() {
89
+ return false;
90
+ };
91
+ if (typeof document === "object") {
92
+ all = document.all;
93
+ if (toStr.call(all) === toStr.call(document.all)) {
94
+ isDDA = function isDocumentDotAll(value) {
95
+ if ((isIE68 || !value) && (typeof value === "undefined" || typeof value === "object")) {
96
+ try {
97
+ var str = toStr.call(value);
98
+ return (str === ddaClass || str === ddaClass2 || str === ddaClass3 || str === objectClass) && value("") == null;
99
+ } catch (e) {
100
+ }
101
+ }
102
+ return false;
103
+ };
104
+ }
105
+ }
106
+ var all;
107
+ module2.exports = reflectApply ? function isCallable2(value) {
108
+ if (isDDA(value)) {
109
+ return true;
110
+ }
111
+ if (!value) {
112
+ return false;
113
+ }
114
+ if (typeof value !== "function" && typeof value !== "object") {
115
+ return false;
116
+ }
117
+ try {
118
+ reflectApply(value, null, badArrayLike);
119
+ } catch (e) {
120
+ if (e !== isCallableMarker) {
121
+ return false;
122
+ }
123
+ }
124
+ return !isES6ClassFn(value) && tryFunctionObject(value);
125
+ } : function isCallable2(value) {
126
+ if (isDDA(value)) {
127
+ return true;
128
+ }
129
+ if (!value) {
130
+ return false;
131
+ }
132
+ if (typeof value !== "function" && typeof value !== "object") {
133
+ return false;
134
+ }
135
+ if (hasToStringTag) {
136
+ return tryFunctionObject(value);
137
+ }
138
+ if (isES6ClassFn(value)) {
139
+ return false;
140
+ }
141
+ var strClass = toStr.call(value);
142
+ if (strClass !== fnClass && strClass !== genClass && !/^\[object HTML/.test(strClass)) {
143
+ return false;
144
+ }
145
+ return tryFunctionObject(value);
146
+ };
147
+ }
148
+ });
149
+
150
+ // node_modules/@ptolemy2002/react-force-rerender/index.js
151
+ var require_react_force_rerender = __commonJS({
152
+ "node_modules/@ptolemy2002/react-force-rerender/index.js"(exports, module2) {
153
+ var __defProp2 = Object.defineProperty;
154
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
155
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
156
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
157
+ var __export2 = (target, all) => {
158
+ for (var name in all)
159
+ __defProp2(target, name, { get: all[name], enumerable: true });
160
+ };
161
+ var __copyProps2 = (to, from, except, desc) => {
162
+ if (from && typeof from === "object" || typeof from === "function") {
163
+ for (let key of __getOwnPropNames2(from))
164
+ if (!__hasOwnProp2.call(to, key) && key !== except)
165
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
166
+ }
167
+ return to;
168
+ };
169
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
170
+ var src_exports2 = {};
171
+ __export2(src_exports2, {
172
+ default: () => useForceRerender2
173
+ });
174
+ module2.exports = __toCommonJS2(src_exports2);
175
+ var import_react2 = require("react");
176
+ function useForceRerender2() {
177
+ const [, setTick] = (0, import_react2.useState)(0);
178
+ const update = (0, import_react2.useCallback)(() => {
179
+ setTimeout(() => {
180
+ setTick((tick) => tick + 1);
181
+ }, 0);
182
+ }, []);
183
+ return update;
184
+ }
185
+ }
186
+ });
187
+
188
+ // node_modules/@ptolemy2002/react-mount-effects/index.js
189
+ var require_react_mount_effects = __commonJS({
190
+ "node_modules/@ptolemy2002/react-mount-effects/index.js"(exports, module2) {
191
+ var __defProp2 = Object.defineProperty;
192
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
193
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
194
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
195
+ var __export2 = (target, all) => {
196
+ for (var name in all)
197
+ __defProp2(target, name, { get: all[name], enumerable: true });
198
+ };
199
+ var __copyProps2 = (to, from, except, desc) => {
200
+ if (from && typeof from === "object" || typeof from === "function") {
201
+ for (let key of __getOwnPropNames2(from))
202
+ if (!__hasOwnProp2.call(to, key) && key !== except)
203
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
204
+ }
205
+ return to;
206
+ };
207
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
208
+ var src_exports2 = {};
209
+ __export2(src_exports2, {
210
+ useMountEffect: () => useMountEffect2,
211
+ useUnmountEffect: () => useUnmountEffect2
212
+ });
213
+ module2.exports = __toCommonJS2(src_exports2);
214
+ var import_react2 = require("react");
215
+ function useMountEffect2(callback) {
216
+ (0, import_react2.useEffect)(() => {
217
+ callback();
218
+ }, []);
219
+ }
220
+ function useUnmountEffect2(callback) {
221
+ (0, import_react2.useEffect)(() => callback, []);
222
+ }
223
+ }
224
+ });
225
+
226
+ // node_modules/@ptolemy2002/js-utils/index.js
227
+ var require_js_utils = __commonJS({
228
+ "node_modules/@ptolemy2002/js-utils/index.js"(exports, module2) {
229
+ var __defProp2 = Object.defineProperty;
230
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
231
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
232
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
233
+ var __export2 = (target, all) => {
234
+ for (var name in all)
235
+ __defProp2(target, name, { get: all[name], enumerable: true });
236
+ };
237
+ var __copyProps2 = (to, from, except, desc) => {
238
+ if (from && typeof from === "object" || typeof from === "function") {
239
+ for (let key of __getOwnPropNames2(from))
240
+ if (!__hasOwnProp2.call(to, key) && key !== except)
241
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
242
+ }
243
+ return to;
244
+ };
245
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
246
+ var src_exports2 = {};
247
+ __export2(src_exports2, {
248
+ Callable: () => Callable,
249
+ ext_hasNestedProperty: () => ext_hasNestedProperty,
250
+ isNullOrUndefined: () => isNullOrUndefined2,
251
+ listInPlainEnglish: () => listInPlainEnglish,
252
+ loadExtension: () => loadExtension,
253
+ unloadExtension: () => unloadExtension
254
+ });
255
+ module2.exports = __toCommonJS2(src_exports2);
256
+ function ext_hasNestedProperty(prop = "") {
257
+ if (typeof prop === "string") prop = prop.split(".");
258
+ if (!Array.isArray(prop)) return this.hasOwnProperty(prop);
259
+ let obj = this;
260
+ for (let i = 0; i < prop.length; i++) {
261
+ const p = prop[i];
262
+ if (!obj?.hasOwnProperty(p)) return false;
263
+ obj = obj[p];
264
+ }
265
+ return true;
266
+ }
267
+ function loadExtension(name, func, base = Object) {
268
+ if (base.prototype.hasOwnProperty(name)) return;
269
+ Object.defineProperty(base.prototype, name, {
270
+ value: func,
271
+ enumerable: false,
272
+ writable: true,
273
+ configurable: true
274
+ });
275
+ }
276
+ function unloadExtension(name, base = Object) {
277
+ delete base.prototype[name];
278
+ }
279
+ function listInPlainEnglish(list, { max = void 0, conjunction = "and" } = {}) {
280
+ if (max === void 0) max = list.length;
281
+ if (list.length === 0) {
282
+ return "";
283
+ }
284
+ if (list.length === 1) {
285
+ return list[0];
286
+ }
287
+ if (list.length === 2) {
288
+ return `${list[0]} ${conjunction} ${list[1]}`;
289
+ }
290
+ list = list.map((v, i) => {
291
+ if (i === list.length - 1) return v;
292
+ if (v.endsWith(`"`)) {
293
+ return v.slice(0, -1) + `," `;
294
+ } else if (v.endsWith(`'`)) {
295
+ return v.slice(0, -1) + `,' `;
296
+ } else {
297
+ return v + ", ";
298
+ }
299
+ });
300
+ if (list.length > max) {
301
+ return `${list.slice(0, max).join("")}${conjunction} ${list.length - max} more`;
302
+ } else {
303
+ return `${list.slice(0, -1).join("")}${conjunction} ${list[list.length - 1]}`;
304
+ }
305
+ }
306
+ function isNullOrUndefined2(v) {
307
+ return v === null || v === void 0;
308
+ }
309
+ var Callable = class extends Function {
310
+ constructor() {
311
+ super("...args", "return this.__self__.__call__(...args)");
312
+ let self = this.bind(this);
313
+ this.__self__ = self;
314
+ return self;
315
+ }
316
+ // This should be overridden by the subclass
317
+ __call__() {
318
+ }
319
+ };
320
+ }
321
+ });
322
+
29
323
  // src/index.js
30
324
  var src_exports = {};
31
325
  __export(src_exports, {
@@ -35,11 +329,25 @@ __export(src_exports, {
35
329
  });
36
330
  module.exports = __toCommonJS(src_exports);
37
331
  var import_react = __toESM(require("react"));
38
- var import_nanoid = require("nanoid");
39
- var import_is_callable = __toESM(require("is-callable"));
40
- var import_react_force_rerender = __toESM(require("@ptolemy2002/react-force-rerender"));
41
- var import_react_mount_effects = require("@ptolemy2002/react-mount-effects");
42
- var import_js_utils = require("@ptolemy2002/js-utils");
332
+
333
+ // node_modules/nanoid/url-alphabet/index.js
334
+ var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
335
+
336
+ // node_modules/nanoid/index.browser.js
337
+ var nanoid = (size = 21) => {
338
+ let id = "";
339
+ let bytes = crypto.getRandomValues(new Uint8Array(size));
340
+ while (size--) {
341
+ id += urlAlphabet[bytes[size] & 63];
342
+ }
343
+ return id;
344
+ };
345
+
346
+ // src/index.js
347
+ var import_is_callable = __toESM(require_is_callable());
348
+ var import_react_force_rerender = __toESM(require_react_force_rerender());
349
+ var import_react_mount_effects = __toESM(require_react_mount_effects());
350
+ var import_js_utils = __toESM(require_js_utils());
43
351
  function createProxyContext(defaultValue, name) {
44
352
  if (typeof Proxy == "undefined") throw new Error("Proxy is not supported in this environment.");
45
353
  const context = (0, import_react.createContext)(defaultValue);
@@ -51,8 +359,9 @@ function ProxyContextProvider({ contextClass, children, value, onChange, proxyRe
51
359
  const objRef = (0, import_react.useRef)();
52
360
  const contextRef = (0, import_react.useRef)({});
53
361
  const subscribe = (0, import_react.useCallback)((callback, deps, listenReinit = true) => {
54
- const id = (0, import_nanoid.nanoid)();
362
+ const id = nanoid();
55
363
  changeSubscribers.current[id] = {
364
+ id,
56
365
  deps,
57
366
  callback,
58
367
  listenReinit
@@ -68,7 +377,7 @@ function ProxyContextProvider({ contextClass, children, value, onChange, proxyRe
68
377
  if (!(0, import_js_utils.isNullOrUndefined)(newObj)) {
69
378
  objRef.current = new Proxy(newObj, {
70
379
  get: function(target, prop) {
71
- const result = Reflect.get(target, prop, objRef.current);
380
+ const result = Reflect.get(target, prop, newObj);
72
381
  if ((0, import_is_callable.default)(result)) {
73
382
  return result.bind(objRef.current);
74
383
  } else {
@@ -77,7 +386,7 @@ function ProxyContextProvider({ contextClass, children, value, onChange, proxyRe
77
386
  },
78
387
  set: function(target, prop, value2) {
79
388
  const prevValue = target[prop];
80
- Reflect.set(target, prop, value2, objRef.current);
389
+ Reflect.set(target, prop, value2, newObj);
81
390
  value2 = target[prop];
82
391
  Object.values(changeSubscribers.current).forEach((subscriber) => {
83
392
  if (!subscriber.deps || subscriber.deps.includes(prop) && prevValue !== value2 || subscriber.deps.some((subProp) => (0, import_is_callable.default)(subProp) && subProp(prop, value2, prevValue, objRef.current))) {
@@ -85,12 +394,17 @@ function ProxyContextProvider({ contextClass, children, value, onChange, proxyRe
85
394
  }
86
395
  });
87
396
  if ((0, import_is_callable.default)(onChange)) onChange(prop, value2, prevValue);
397
+ Object.values(changeSubscribers.current).forEach((subscriber) => {
398
+ subscriber.callback(prop, value2, prevValue);
399
+ });
88
400
  return true;
89
401
  }
90
402
  });
91
403
  }
92
404
  Object.values(changeSubscribers.current).forEach((subscriber) => {
93
- if (subscriber.listenReinit) subscriber.callback(null, objRef.current, prevObj);
405
+ if (subscriber.listenReinit) {
406
+ subscriber.callback(null, objRef.current, prevObj);
407
+ }
94
408
  });
95
409
  proxyRef && (proxyRef.current = objRef.current);
96
410
  if ((0, import_is_callable.default)(onChange)) onChange(null, objRef.current, prevObj);
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@ptolemy2002/react-proxy-context",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "main": "index.js",
5
5
  "files": [
6
6
  "index.js"
7
7
  ],
8
8
  "scripts": {
9
- "build": "esbuild src/index.js --bundle --format=cjs --outfile=index.js --loader:.js=jsx --external:react --external:react-dom --external:@types/react --external:@types/react-dom --external:is-callable --external:nanoid --external:@ptolemy2002/react-mount-effects --external:@ptolemy2002/react-force-rerender --external:@ptolemy2002/js-utils",
9
+ "build": "esbuild src/index.js --bundle --format=cjs --outfile=index.js --loader:.js=jsx --external:react --external:react-dom",
10
10
  "postinstall": "npx typesync",
11
11
  "uninstall": "bash ./scripts/uninstall.sh",
12
12
  "reinstall": "bash ./scripts/reinstall.sh",
@@ -30,15 +30,15 @@
30
30
  "@types/react": "^18.3.3",
31
31
  "@types/react-dom": "^18.3.0",
32
32
  "react": "^18.3.1",
33
- "react-dom": "^18.3.1",
34
- "@types/is-callable": "^1.1.2",
35
- "is-callable": "^1.2.7",
36
- "nanoid": "^5.0.7",
37
- "@ptolemy2002/react-mount-effects": "^1.1.4",
38
- "@ptolemy2002/react-force-rerender": "^1.0.4",
39
- "@ptolemy2002/js-utils": "^1.0.3"
33
+ "react-dom": "^18.3.1"
40
34
  },
41
35
  "devDependencies": {
42
- "esbuild": "^0.23.0"
36
+ "@ptolemy2002/js-utils": "^1.0.3",
37
+ "@ptolemy2002/react-force-rerender": "^1.0.4",
38
+ "@ptolemy2002/react-mount-effects": "^1.1.4",
39
+ "@types/is-callable": "^1.1.2",
40
+ "esbuild": "^0.23.0",
41
+ "is-callable": "^1.2.7",
42
+ "nanoid": "^5.0.7"
43
43
  }
44
44
  }