quidproquo-web-react 0.0.253 → 0.0.254
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/hooks/asmj/QpqRuntimeEffectCatcher.js +1 -1
- package/lib/commonjs/hooks/asmj/createQpqRuntimeDefinition.d.ts +6 -0
- package/lib/commonjs/hooks/asmj/createQpqRuntimeDefinition.js +18 -4
- package/lib/commonjs/hooks/asmj/useQpqRuntime.js +1 -1
- package/lib/commonjs/hooks/useQpq.js +12 -10
- package/lib/commonjs/index.d.ts +2 -0
- package/lib/commonjs/index.js +2 -0
- package/lib/commonjs/useFieldBinding/index.d.ts +1 -0
- package/lib/commonjs/useFieldBinding/index.js +17 -0
- package/lib/commonjs/useFieldBinding/useFieldBinding.d.ts +2 -0
- package/lib/commonjs/useFieldBinding/useFieldBinding.js +21 -0
- package/lib/commonjs/useSharedQueryParams/index.d.ts +2 -0
- package/lib/commonjs/useSharedQueryParams/index.js +18 -0
- package/lib/commonjs/useSharedQueryParams/logic/index.d.ts +4 -0
- package/lib/commonjs/useSharedQueryParams/logic/index.js +20 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/askSetParam.d.ts +2 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/askSetParam.js +10 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/askSyncParams.d.ts +2 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/askSyncParams.js +12 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/index.d.ts +2 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/index.js +18 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/sharedQueryParamsLogic.d.ts +4 -0
- package/lib/commonjs/useSharedQueryParams/logic/runtime/sharedQueryParamsLogic.js +7 -0
- package/lib/commonjs/useSharedQueryParams/logic/sharedQueryParamsActionCreator.d.ts +2 -0
- package/lib/commonjs/useSharedQueryParams/logic/sharedQueryParamsActionCreator.js +12 -0
- package/lib/commonjs/useSharedQueryParams/logic/sharedQueryParamsReducer.d.ts +3 -0
- package/lib/commonjs/useSharedQueryParams/logic/sharedQueryParamsReducer.js +13 -0
- package/lib/commonjs/useSharedQueryParams/logic/sharedQueryParamsTypes.d.ts +10 -0
- package/lib/commonjs/useSharedQueryParams/logic/sharedQueryParamsTypes.js +7 -0
- package/lib/commonjs/useSharedQueryParams/sharedQueryParamsRuntime.d.ts +3 -0
- package/lib/commonjs/useSharedQueryParams/sharedQueryParamsRuntime.js +7 -0
- package/lib/esm/hooks/asmj/QpqRuntimeEffectCatcher.js +2 -2
- package/lib/esm/hooks/asmj/createQpqRuntimeDefinition.d.ts +6 -0
- package/lib/esm/hooks/asmj/createQpqRuntimeDefinition.js +16 -4
- package/lib/esm/hooks/asmj/useQpqRuntime.js +1 -1
- package/lib/esm/hooks/useQpq.js +12 -10
- package/lib/esm/index.d.ts +2 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/useFieldBinding/index.d.ts +1 -0
- package/lib/esm/useFieldBinding/index.js +1 -0
- package/lib/esm/useFieldBinding/useFieldBinding.d.ts +2 -0
- package/lib/esm/useFieldBinding/useFieldBinding.js +17 -0
- package/lib/esm/useSharedQueryParams/index.d.ts +2 -0
- package/lib/esm/useSharedQueryParams/index.js +2 -0
- package/lib/esm/useSharedQueryParams/logic/index.d.ts +4 -0
- package/lib/esm/useSharedQueryParams/logic/index.js +4 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/askSetParam.d.ts +2 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/askSetParam.js +6 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/askSyncParams.d.ts +2 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/askSyncParams.js +8 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/index.d.ts +2 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/index.js +2 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/sharedQueryParamsLogic.d.ts +4 -0
- package/lib/esm/useSharedQueryParams/logic/runtime/sharedQueryParamsLogic.js +4 -0
- package/lib/esm/useSharedQueryParams/logic/sharedQueryParamsActionCreator.d.ts +2 -0
- package/lib/esm/useSharedQueryParams/logic/sharedQueryParamsActionCreator.js +8 -0
- package/lib/esm/useSharedQueryParams/logic/sharedQueryParamsReducer.d.ts +3 -0
- package/lib/esm/useSharedQueryParams/logic/sharedQueryParamsReducer.js +10 -0
- package/lib/esm/useSharedQueryParams/logic/sharedQueryParamsTypes.d.ts +10 -0
- package/lib/esm/useSharedQueryParams/logic/sharedQueryParamsTypes.js +4 -0
- package/lib/esm/useSharedQueryParams/sharedQueryParamsRuntime.d.ts +3 -0
- package/lib/esm/useSharedQueryParams/sharedQueryParamsRuntime.js +4 -0
- package/package.json +7 -7
|
@@ -10,7 +10,7 @@ const BubbleReducerDispatchContext = (0, react_1.createContext)((_action) => {
|
|
|
10
10
|
// NOOP
|
|
11
11
|
});
|
|
12
12
|
const useQpqRuntimeBubblingReducer = (runtimeDefinition, name) => {
|
|
13
|
-
const runtimeDefinitionInfo = runtimeDefinition(name);
|
|
13
|
+
const runtimeDefinitionInfo = (0, react_1.useMemo)(() => runtimeDefinition(name), [runtimeDefinition, name]);
|
|
14
14
|
const [state, setState, getState] = (0, _1.useQpqRuntimeState)(runtimeDefinition, name);
|
|
15
15
|
// Get the parent dispatch from the context
|
|
16
16
|
const parentDispatch = (0, react_1.useContext)(BubbleReducerDispatchContext);
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { atom } from 'jotai';
|
|
2
|
+
import { selectAtom } from 'jotai/utils';
|
|
2
3
|
import { QpqApi } from './QpqMappedApi';
|
|
3
4
|
import { QpqBubbleReducer } from './QpqRuntimeEffectCatcher';
|
|
4
5
|
type CustomJotaiReducerAtom<TState> = ReturnType<typeof atom<TState>>;
|
|
6
|
+
type CustomJotaiComputedAtom<TState, TSlice> = ReturnType<typeof selectAtom<TState, TSlice>>;
|
|
5
7
|
export type QpqAsmjState<TState, TAction, TApi extends QpqApi> = {
|
|
6
8
|
atom: CustomJotaiReducerAtom<TState>;
|
|
7
9
|
reducer: QpqBubbleReducer<TState, TAction>;
|
|
@@ -10,7 +12,11 @@ export type QpqAsmjState<TState, TAction, TApi extends QpqApi> = {
|
|
|
10
12
|
state: TState;
|
|
11
13
|
};
|
|
12
14
|
type AsmjStateGetter<TState, TAction, TApi extends QpqApi> = (name?: string) => QpqAsmjState<TState, TAction, TApi>;
|
|
15
|
+
type AsmjStateComputer<TState, TSlice> = (name?: string) => CustomJotaiComputedAtom<TState, TSlice>;
|
|
13
16
|
export type QpqRuntimeDefinition<TState, TAction, TApi extends QpqApi> = AsmjStateGetter<TState, TAction, TApi>;
|
|
17
|
+
export type QpqRuntimeComputed<TState, TSlice> = AsmjStateComputer<TState, TSlice>;
|
|
14
18
|
export declare function createQpqRuntimeDefinition<TState, TAction, TApi extends QpqApi>(api: TApi, initialState: TState, reducer?: QpqBubbleReducer<TState, TAction>): QpqRuntimeDefinition<TState, TAction, TApi>;
|
|
19
|
+
export declare function createQpqRuntimeComputed<TState, TAction, TApi extends QpqApi, TSlice>(atom: QpqRuntimeDefinition<TState, TAction, TApi>, compute: (state: TState) => TSlice): QpqRuntimeComputed<TState, TSlice>;
|
|
15
20
|
export declare function useQpqRuntimeState<TState, TAction, TApi extends QpqApi>(atom: QpqRuntimeDefinition<TState, TAction, TApi>, name?: string): [TState, (newState: TState) => void, () => TState];
|
|
21
|
+
export declare function useQpqRuntimeComputed<TState, TSlice>(computedAtom: QpqRuntimeComputed<TState, TSlice>, name?: string): TSlice;
|
|
16
22
|
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useQpqRuntimeState = exports.createQpqRuntimeDefinition = void 0;
|
|
3
|
+
exports.useQpqRuntimeComputed = exports.useQpqRuntimeState = exports.createQpqRuntimeComputed = exports.createQpqRuntimeDefinition = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const jotai_1 = require("jotai");
|
|
6
|
+
const utils_1 = require("jotai/utils");
|
|
6
7
|
function createQpqRuntimeDefinition(api, initialState, reducer = (s) => [s, false]) {
|
|
7
8
|
const namedAtoms = new Map();
|
|
8
9
|
const getCustomNamedAtom = (name) => {
|
|
9
10
|
const actualName = name ? name : '$$qpq-default$$';
|
|
10
11
|
if (!namedAtoms.has(actualName)) {
|
|
11
|
-
console.log('Creating Atom: ', actualName);
|
|
12
12
|
const winAtom = {
|
|
13
13
|
atom: (0, jotai_1.atom)(initialState),
|
|
14
14
|
reducer,
|
|
@@ -23,8 +23,16 @@ function createQpqRuntimeDefinition(api, initialState, reducer = (s) => [s, fals
|
|
|
23
23
|
return getCustomNamedAtom;
|
|
24
24
|
}
|
|
25
25
|
exports.createQpqRuntimeDefinition = createQpqRuntimeDefinition;
|
|
26
|
+
function createQpqRuntimeComputed(atom, compute) {
|
|
27
|
+
return (name) => {
|
|
28
|
+
const info = atom(name);
|
|
29
|
+
return (0, utils_1.selectAtom)(info.atom, compute);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
exports.createQpqRuntimeComputed = createQpqRuntimeComputed;
|
|
26
33
|
function useQpqRuntimeState(atom, name) {
|
|
27
|
-
const
|
|
34
|
+
const actualAtom = (0, react_1.useMemo)(() => atom(name).atom, [atom, name]);
|
|
35
|
+
const [state, setState] = (0, jotai_1.useAtom)(actualAtom);
|
|
28
36
|
const setStateWrapper = (0, react_1.useCallback)((newState) => {
|
|
29
37
|
const info = atom(name);
|
|
30
38
|
info.state = newState;
|
|
@@ -33,7 +41,13 @@ function useQpqRuntimeState(atom, name) {
|
|
|
33
41
|
const getState = (0, react_1.useCallback)(() => {
|
|
34
42
|
const state = atom(name).state;
|
|
35
43
|
return state;
|
|
36
|
-
}, [atom]);
|
|
44
|
+
}, [atom, name]);
|
|
37
45
|
return [state, setStateWrapper, getState];
|
|
38
46
|
}
|
|
39
47
|
exports.useQpqRuntimeState = useQpqRuntimeState;
|
|
48
|
+
function useQpqRuntimeComputed(computedAtom, name) {
|
|
49
|
+
const computedAtomValue = (0, react_1.useMemo)(() => computedAtom(name), [computedAtom, name]);
|
|
50
|
+
const [state] = (0, jotai_1.useAtom)(computedAtomValue);
|
|
51
|
+
return state;
|
|
52
|
+
}
|
|
53
|
+
exports.useQpqRuntimeComputed = useQpqRuntimeComputed;
|
|
@@ -6,7 +6,7 @@ const useQpq_1 = require("../useQpq");
|
|
|
6
6
|
const actionProcessor_1 = require("./actionProcessor");
|
|
7
7
|
const QpqRuntimeEffectCatcher_1 = require("./QpqRuntimeEffectCatcher");
|
|
8
8
|
function useQpqRuntime(atom, mainStory, name) {
|
|
9
|
-
const atomInfo = atom(name);
|
|
9
|
+
const atomInfo = (0, react_1.useMemo)(() => atom(name), [atom, name]);
|
|
10
10
|
const [state, dispatch, getCurrentState] = (0, QpqRuntimeEffectCatcher_1.useQpqRuntimeBubblingReducer)(atom, name);
|
|
11
11
|
// Api generators are memoized to prevent unnecessary re-renders.
|
|
12
12
|
const [memoedApiGenerators] = (0, react_1.useState)(() => atomInfo.api);
|
|
@@ -12,26 +12,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.useQpq = void 0;
|
|
13
13
|
const quidproquo_actionprocessor_web_1 = require("quidproquo-actionprocessor-web");
|
|
14
14
|
const quidproquo_core_1 = require("quidproquo-core");
|
|
15
|
+
const react_1 = require("react");
|
|
15
16
|
const asmj_1 = require("./asmj");
|
|
16
17
|
// WIP ~ useFastCallback, wack things like loggers in a context, try to only make once instance of the runtime.
|
|
17
18
|
// Also don't create every refresh.. useMemo / useCallback etc
|
|
19
|
+
const logger = {
|
|
20
|
+
enableLogs: () => __awaiter(void 0, void 0, void 0, function* () { }),
|
|
21
|
+
log: () => __awaiter(void 0, void 0, void 0, function* () { }),
|
|
22
|
+
waitToFinishWriting: () => __awaiter(void 0, void 0, void 0, function* () { }),
|
|
23
|
+
moveToPermanentStorage: () => __awaiter(void 0, void 0, void 0, function* () { }),
|
|
24
|
+
};
|
|
18
25
|
function useQpq(getActionProcessors = () => __awaiter(this, void 0, void 0, function* () { return ({}); })) {
|
|
19
26
|
const qpqContextValues = (0, asmj_1.useQpqContextValues)();
|
|
20
|
-
const
|
|
21
|
-
enableLogs: () => __awaiter(this, void 0, void 0, function* () { }),
|
|
22
|
-
log: () => __awaiter(this, void 0, void 0, function* () { }),
|
|
23
|
-
waitToFinishWriting: () => __awaiter(this, void 0, void 0, function* () { }),
|
|
24
|
-
moveToPermanentStorage: () => __awaiter(this, void 0, void 0, function* () { }),
|
|
25
|
-
};
|
|
26
|
-
const resolveStory = (0, quidproquo_core_1.createRuntime)([(0, quidproquo_core_1.defineModule)('UI')], {
|
|
27
|
+
const resolveStory = (0, react_1.useMemo)(() => (0, quidproquo_core_1.createRuntime)([(0, quidproquo_core_1.defineModule)('UI')], {
|
|
27
28
|
depth: 0,
|
|
28
29
|
context: qpqContextValues,
|
|
29
30
|
}, (qpqConfig, dynamicModuleLoader) => __awaiter(this, void 0, void 0, function* () {
|
|
30
31
|
return (Object.assign(Object.assign({}, (yield (0, quidproquo_actionprocessor_web_1.getWebActionProcessors)(qpqConfig, dynamicModuleLoader))), (yield getActionProcessors(qpqConfig, dynamicModuleLoader))));
|
|
31
32
|
}), () => new Date().toISOString(), logger, `frontend::${'uuid'}`, quidproquo_core_1.QpqRuntimeType.UI, (_runtime) => __awaiter(this, void 0, void 0, function* () {
|
|
32
33
|
// noop
|
|
33
|
-
}));
|
|
34
|
-
|
|
34
|
+
})), [qpqContextValues]);
|
|
35
|
+
const qpq = (0, react_1.useCallback)(function getStoryExecutor(story) {
|
|
35
36
|
return (...args) => __awaiter(this, void 0, void 0, function* () {
|
|
36
37
|
const result = yield resolveStory(story, args);
|
|
37
38
|
if (result.error) {
|
|
@@ -39,6 +40,7 @@ function useQpq(getActionProcessors = () => __awaiter(this, void 0, void 0, func
|
|
|
39
40
|
}
|
|
40
41
|
return result.result;
|
|
41
42
|
});
|
|
42
|
-
};
|
|
43
|
+
}, [resolveStory]);
|
|
44
|
+
return qpq;
|
|
43
45
|
}
|
|
44
46
|
exports.useQpq = useQpq;
|
package/lib/commonjs/index.d.ts
CHANGED
package/lib/commonjs/index.js
CHANGED
|
@@ -20,5 +20,7 @@ __exportStar(require("./auth"), exports);
|
|
|
20
20
|
__exportStar(require("./baseUrl"), exports);
|
|
21
21
|
__exportStar(require("./hooks"), exports);
|
|
22
22
|
__exportStar(require("./state"), exports);
|
|
23
|
+
__exportStar(require("./useFieldBinding"), exports);
|
|
24
|
+
__exportStar(require("./useSharedQueryParams"), exports);
|
|
23
25
|
__exportStar(require("./websocket"), exports);
|
|
24
26
|
__exportStar(require("./webSocketQueue"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useFieldBinding';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./useFieldBinding"), exports);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { QpqRuntimeComputed } from '../hooks';
|
|
2
|
+
export declare const useFieldBinding: <TState, V, E = any>(computedAtom: QpqRuntimeComputed<TState, V>, someSetter: (value: V) => Promise<void> | void, valueExtractor?: ((event: E, ...args: any[]) => V) | undefined) => [V, (event: E, ...args: any[]) => void];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useFieldBinding = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const hooks_1 = require("../hooks");
|
|
6
|
+
const useFieldBinding = (computedAtom, someSetter, valueExtractor) => {
|
|
7
|
+
const computedValue = (0, hooks_1.useQpqRuntimeComputed)(computedAtom);
|
|
8
|
+
const [value, setValue] = (0, react_1.useState)(computedValue);
|
|
9
|
+
const handleChange = (event, ...args) => {
|
|
10
|
+
const newValue = valueExtractor ? valueExtractor(event, ...args) : event.target.value;
|
|
11
|
+
setValue(newValue);
|
|
12
|
+
someSetter(newValue);
|
|
13
|
+
};
|
|
14
|
+
(0, react_1.useEffect)(() => {
|
|
15
|
+
if (computedValue !== value) {
|
|
16
|
+
setValue(computedValue);
|
|
17
|
+
}
|
|
18
|
+
}, [computedValue]);
|
|
19
|
+
return [value, handleChange];
|
|
20
|
+
};
|
|
21
|
+
exports.useFieldBinding = useFieldBinding;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./logic"), exports);
|
|
18
|
+
__exportStar(require("./sharedQueryParamsRuntime"), exports);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./runtime"), exports);
|
|
18
|
+
__exportStar(require("./sharedQueryParamsActionCreator"), exports);
|
|
19
|
+
__exportStar(require("./sharedQueryParamsReducer"), exports);
|
|
20
|
+
__exportStar(require("./sharedQueryParamsTypes"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.askSetParam = void 0;
|
|
4
|
+
const quidproquo_web_1 = require("quidproquo-web");
|
|
5
|
+
const sharedQueryParamsActionCreator_1 = require("../sharedQueryParamsActionCreator");
|
|
6
|
+
function* askSetParam(key, values) {
|
|
7
|
+
yield* (0, quidproquo_web_1.askQueryParamsSet)(key, values, false);
|
|
8
|
+
yield* (0, sharedQueryParamsActionCreator_1.askSharedQueryParamsUISetParam)(key, values);
|
|
9
|
+
}
|
|
10
|
+
exports.askSetParam = askSetParam;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.askSyncParams = void 0;
|
|
4
|
+
const quidproquo_web_1 = require("quidproquo-web");
|
|
5
|
+
const sharedQueryParamsActionCreator_1 = require("../sharedQueryParamsActionCreator");
|
|
6
|
+
function* askSyncParams() {
|
|
7
|
+
const params = yield* (0, quidproquo_web_1.askQueryParamsGetAll)();
|
|
8
|
+
for (const key in params) {
|
|
9
|
+
yield* (0, sharedQueryParamsActionCreator_1.askSharedQueryParamsUISetParam)(key, params[key]);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.askSyncParams = askSyncParams;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./askSyncParams"), exports);
|
|
18
|
+
__exportStar(require("./sharedQueryParamsLogic"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.askSharedQueryParamsUISetParam = void 0;
|
|
4
|
+
const quidproquo_core_1 = require("quidproquo-core");
|
|
5
|
+
const sharedQueryParamsTypes_1 = require("./sharedQueryParamsTypes");
|
|
6
|
+
function* askSharedQueryParamsUISetParam(key, values) {
|
|
7
|
+
yield* (0, quidproquo_core_1.askStateDispatchEffect)(sharedQueryParamsTypes_1.SharedQueryParamsEffect.SetParam, {
|
|
8
|
+
key,
|
|
9
|
+
values,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
exports.askSharedQueryParamsUISetParam = askSharedQueryParamsUISetParam;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SharedQueryParamsState } from './sharedQueryParamsTypes';
|
|
2
|
+
export declare const sharedQueryParamsInitalState: SharedQueryParamsState;
|
|
3
|
+
export declare const sharedQueryParamsReducer: (state: SharedQueryParamsState, effect: import("./sharedQueryParamsTypes").SharedQueryParamsSetParamEffect) => [SharedQueryParamsState, boolean];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sharedQueryParamsReducer = exports.sharedQueryParamsInitalState = void 0;
|
|
4
|
+
const quidproquo_core_1 = require("quidproquo-core");
|
|
5
|
+
const sharedQueryParamsTypes_1 = require("./sharedQueryParamsTypes");
|
|
6
|
+
exports.sharedQueryParamsInitalState = {
|
|
7
|
+
// No initial state
|
|
8
|
+
};
|
|
9
|
+
exports.sharedQueryParamsReducer = (0, quidproquo_core_1.buildMutableEffectReducer)({
|
|
10
|
+
[sharedQueryParamsTypes_1.SharedQueryParamsEffect.SetParam]: (state, { key, values }) => {
|
|
11
|
+
state[key] = values;
|
|
12
|
+
},
|
|
13
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Effect } from 'quidproquo-core';
|
|
2
|
+
export type SharedQueryParamsState = Record<string, string[] | undefined>;
|
|
3
|
+
export declare enum SharedQueryParamsEffect {
|
|
4
|
+
SetParam = "Qpq/SharedQueryParams/SetParam"
|
|
5
|
+
}
|
|
6
|
+
export type SharedQueryParamsSetParamEffect = Effect<SharedQueryParamsEffect.SetParam, {
|
|
7
|
+
key: string;
|
|
8
|
+
values: string[];
|
|
9
|
+
}>;
|
|
10
|
+
export type SharedQueryParamsEffects = SharedQueryParamsSetParamEffect;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SharedQueryParamsEffect = void 0;
|
|
4
|
+
var SharedQueryParamsEffect;
|
|
5
|
+
(function (SharedQueryParamsEffect) {
|
|
6
|
+
SharedQueryParamsEffect["SetParam"] = "Qpq/SharedQueryParams/SetParam";
|
|
7
|
+
})(SharedQueryParamsEffect = exports.SharedQueryParamsEffect || (exports.SharedQueryParamsEffect = {}));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sharedQueryParamsRuntime = void 0;
|
|
4
|
+
const hooks_1 = require("../hooks");
|
|
5
|
+
const runtime_1 = require("./logic/runtime");
|
|
6
|
+
const logic_1 = require("./logic");
|
|
7
|
+
exports.sharedQueryParamsRuntime = (0, hooks_1.createQpqRuntimeDefinition)(runtime_1.sharedQueryParamsLogic, logic_1.sharedQueryParamsInitalState, logic_1.sharedQueryParamsReducer);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, memo, useContext } from 'react';
|
|
2
|
+
import { createContext, memo, useContext, useMemo } from 'react';
|
|
3
3
|
import { useFastCallback } from '../useFastCallback';
|
|
4
4
|
import { useQpqRuntime, useQpqRuntimeState } from '.';
|
|
5
5
|
// Create a context with a default NOOP dispatcher
|
|
@@ -7,7 +7,7 @@ const BubbleReducerDispatchContext = createContext((_action) => {
|
|
|
7
7
|
// NOOP
|
|
8
8
|
});
|
|
9
9
|
export const useQpqRuntimeBubblingReducer = (runtimeDefinition, name) => {
|
|
10
|
-
const runtimeDefinitionInfo = runtimeDefinition(name);
|
|
10
|
+
const runtimeDefinitionInfo = useMemo(() => runtimeDefinition(name), [runtimeDefinition, name]);
|
|
11
11
|
const [state, setState, getState] = useQpqRuntimeState(runtimeDefinition, name);
|
|
12
12
|
// Get the parent dispatch from the context
|
|
13
13
|
const parentDispatch = useContext(BubbleReducerDispatchContext);
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { atom } from 'jotai';
|
|
2
|
+
import { selectAtom } from 'jotai/utils';
|
|
2
3
|
import { QpqApi } from './QpqMappedApi';
|
|
3
4
|
import { QpqBubbleReducer } from './QpqRuntimeEffectCatcher';
|
|
4
5
|
type CustomJotaiReducerAtom<TState> = ReturnType<typeof atom<TState>>;
|
|
6
|
+
type CustomJotaiComputedAtom<TState, TSlice> = ReturnType<typeof selectAtom<TState, TSlice>>;
|
|
5
7
|
export type QpqAsmjState<TState, TAction, TApi extends QpqApi> = {
|
|
6
8
|
atom: CustomJotaiReducerAtom<TState>;
|
|
7
9
|
reducer: QpqBubbleReducer<TState, TAction>;
|
|
@@ -10,7 +12,11 @@ export type QpqAsmjState<TState, TAction, TApi extends QpqApi> = {
|
|
|
10
12
|
state: TState;
|
|
11
13
|
};
|
|
12
14
|
type AsmjStateGetter<TState, TAction, TApi extends QpqApi> = (name?: string) => QpqAsmjState<TState, TAction, TApi>;
|
|
15
|
+
type AsmjStateComputer<TState, TSlice> = (name?: string) => CustomJotaiComputedAtom<TState, TSlice>;
|
|
13
16
|
export type QpqRuntimeDefinition<TState, TAction, TApi extends QpqApi> = AsmjStateGetter<TState, TAction, TApi>;
|
|
17
|
+
export type QpqRuntimeComputed<TState, TSlice> = AsmjStateComputer<TState, TSlice>;
|
|
14
18
|
export declare function createQpqRuntimeDefinition<TState, TAction, TApi extends QpqApi>(api: TApi, initialState: TState, reducer?: QpqBubbleReducer<TState, TAction>): QpqRuntimeDefinition<TState, TAction, TApi>;
|
|
19
|
+
export declare function createQpqRuntimeComputed<TState, TAction, TApi extends QpqApi, TSlice>(atom: QpqRuntimeDefinition<TState, TAction, TApi>, compute: (state: TState) => TSlice): QpqRuntimeComputed<TState, TSlice>;
|
|
15
20
|
export declare function useQpqRuntimeState<TState, TAction, TApi extends QpqApi>(atom: QpqRuntimeDefinition<TState, TAction, TApi>, name?: string): [TState, (newState: TState) => void, () => TState];
|
|
21
|
+
export declare function useQpqRuntimeComputed<TState, TSlice>(computedAtom: QpqRuntimeComputed<TState, TSlice>, name?: string): TSlice;
|
|
16
22
|
export {};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
1
|
+
import { useCallback, useMemo } from 'react';
|
|
2
2
|
import { atom, useAtom } from 'jotai';
|
|
3
|
+
import { selectAtom } from 'jotai/utils';
|
|
3
4
|
export function createQpqRuntimeDefinition(api, initialState, reducer = (s) => [s, false]) {
|
|
4
5
|
const namedAtoms = new Map();
|
|
5
6
|
const getCustomNamedAtom = (name) => {
|
|
6
7
|
const actualName = name ? name : '$$qpq-default$$';
|
|
7
8
|
if (!namedAtoms.has(actualName)) {
|
|
8
|
-
console.log('Creating Atom: ', actualName);
|
|
9
9
|
const winAtom = {
|
|
10
10
|
atom: atom(initialState),
|
|
11
11
|
reducer,
|
|
@@ -19,8 +19,15 @@ export function createQpqRuntimeDefinition(api, initialState, reducer = (s) => [
|
|
|
19
19
|
};
|
|
20
20
|
return getCustomNamedAtom;
|
|
21
21
|
}
|
|
22
|
+
export function createQpqRuntimeComputed(atom, compute) {
|
|
23
|
+
return (name) => {
|
|
24
|
+
const info = atom(name);
|
|
25
|
+
return selectAtom(info.atom, compute);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
22
28
|
export function useQpqRuntimeState(atom, name) {
|
|
23
|
-
const
|
|
29
|
+
const actualAtom = useMemo(() => atom(name).atom, [atom, name]);
|
|
30
|
+
const [state, setState] = useAtom(actualAtom);
|
|
24
31
|
const setStateWrapper = useCallback((newState) => {
|
|
25
32
|
const info = atom(name);
|
|
26
33
|
info.state = newState;
|
|
@@ -29,6 +36,11 @@ export function useQpqRuntimeState(atom, name) {
|
|
|
29
36
|
const getState = useCallback(() => {
|
|
30
37
|
const state = atom(name).state;
|
|
31
38
|
return state;
|
|
32
|
-
}, [atom]);
|
|
39
|
+
}, [atom, name]);
|
|
33
40
|
return [state, setStateWrapper, getState];
|
|
34
41
|
}
|
|
42
|
+
export function useQpqRuntimeComputed(computedAtom, name) {
|
|
43
|
+
const computedAtomValue = useMemo(() => computedAtom(name), [computedAtom, name]);
|
|
44
|
+
const [state] = useAtom(computedAtomValue);
|
|
45
|
+
return state;
|
|
46
|
+
}
|
|
@@ -3,7 +3,7 @@ import { useQpq } from '../useQpq';
|
|
|
3
3
|
import { getStateActionProcessor } from './actionProcessor';
|
|
4
4
|
import { useQpqRuntimeBubblingReducer } from './QpqRuntimeEffectCatcher';
|
|
5
5
|
export function useQpqRuntime(atom, mainStory, name) {
|
|
6
|
-
const atomInfo = atom(name);
|
|
6
|
+
const atomInfo = useMemo(() => atom(name), [atom, name]);
|
|
7
7
|
const [state, dispatch, getCurrentState] = useQpqRuntimeBubblingReducer(atom, name);
|
|
8
8
|
// Api generators are memoized to prevent unnecessary re-renders.
|
|
9
9
|
const [memoedApiGenerators] = useState(() => atomInfo.api);
|
package/lib/esm/hooks/useQpq.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { getWebActionProcessors } from 'quidproquo-actionprocessor-web';
|
|
2
2
|
import { createRuntime, defineModule, QpqRuntimeType, } from 'quidproquo-core';
|
|
3
|
+
import { useCallback, useMemo } from 'react';
|
|
3
4
|
import { useQpqContextValues } from './asmj';
|
|
4
5
|
// WIP ~ useFastCallback, wack things like loggers in a context, try to only make once instance of the runtime.
|
|
5
6
|
// Also don't create every refresh.. useMemo / useCallback etc
|
|
7
|
+
const logger = {
|
|
8
|
+
enableLogs: async () => { },
|
|
9
|
+
log: async () => { },
|
|
10
|
+
waitToFinishWriting: async () => { },
|
|
11
|
+
moveToPermanentStorage: async () => { },
|
|
12
|
+
};
|
|
6
13
|
export function useQpq(getActionProcessors = async () => ({})) {
|
|
7
14
|
const qpqContextValues = useQpqContextValues();
|
|
8
|
-
const
|
|
9
|
-
enableLogs: async () => { },
|
|
10
|
-
log: async () => { },
|
|
11
|
-
waitToFinishWriting: async () => { },
|
|
12
|
-
moveToPermanentStorage: async () => { },
|
|
13
|
-
};
|
|
14
|
-
const resolveStory = createRuntime([defineModule('UI')], {
|
|
15
|
+
const resolveStory = useMemo(() => createRuntime([defineModule('UI')], {
|
|
15
16
|
depth: 0,
|
|
16
17
|
context: qpqContextValues,
|
|
17
18
|
}, async (qpqConfig, dynamicModuleLoader) => ({
|
|
@@ -19,8 +20,8 @@ export function useQpq(getActionProcessors = async () => ({})) {
|
|
|
19
20
|
...(await getActionProcessors(qpqConfig, dynamicModuleLoader)),
|
|
20
21
|
}), () => new Date().toISOString(), logger, `frontend::${'uuid'}`, QpqRuntimeType.UI, async (_runtime) => {
|
|
21
22
|
// noop
|
|
22
|
-
});
|
|
23
|
-
|
|
23
|
+
}), [qpqContextValues]);
|
|
24
|
+
const qpq = useCallback(function getStoryExecutor(story) {
|
|
24
25
|
return async (...args) => {
|
|
25
26
|
const result = await resolveStory(story, args);
|
|
26
27
|
if (result.error) {
|
|
@@ -28,5 +29,6 @@ export function useQpq(getActionProcessors = async () => ({})) {
|
|
|
28
29
|
}
|
|
29
30
|
return result.result;
|
|
30
31
|
};
|
|
31
|
-
};
|
|
32
|
+
}, [resolveStory]);
|
|
33
|
+
return qpq;
|
|
32
34
|
}
|
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useFieldBinding';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useFieldBinding';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { QpqRuntimeComputed } from '../hooks';
|
|
2
|
+
export declare const useFieldBinding: <TState, V, E = any>(computedAtom: QpqRuntimeComputed<TState, V>, someSetter: (value: V) => Promise<void> | void, valueExtractor?: ((event: E, ...args: any[]) => V) | undefined) => [V, (event: E, ...args: any[]) => void];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { useQpqRuntimeComputed } from '../hooks';
|
|
3
|
+
export const useFieldBinding = (computedAtom, someSetter, valueExtractor) => {
|
|
4
|
+
const computedValue = useQpqRuntimeComputed(computedAtom);
|
|
5
|
+
const [value, setValue] = useState(computedValue);
|
|
6
|
+
const handleChange = (event, ...args) => {
|
|
7
|
+
const newValue = valueExtractor ? valueExtractor(event, ...args) : event.target.value;
|
|
8
|
+
setValue(newValue);
|
|
9
|
+
someSetter(newValue);
|
|
10
|
+
};
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (computedValue !== value) {
|
|
13
|
+
setValue(computedValue);
|
|
14
|
+
}
|
|
15
|
+
}, [computedValue]);
|
|
16
|
+
return [value, handleChange];
|
|
17
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { askQueryParamsSet } from 'quidproquo-web';
|
|
2
|
+
import { askSharedQueryParamsUISetParam } from '../sharedQueryParamsActionCreator';
|
|
3
|
+
export function* askSetParam(key, values) {
|
|
4
|
+
yield* askQueryParamsSet(key, values, false);
|
|
5
|
+
yield* askSharedQueryParamsUISetParam(key, values);
|
|
6
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { askQueryParamsGetAll } from 'quidproquo-web';
|
|
2
|
+
import { askSharedQueryParamsUISetParam } from '../sharedQueryParamsActionCreator';
|
|
3
|
+
export function* askSyncParams() {
|
|
4
|
+
const params = yield* askQueryParamsGetAll();
|
|
5
|
+
for (const key in params) {
|
|
6
|
+
yield* askSharedQueryParamsUISetParam(key, params[key]);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { askStateDispatchEffect } from 'quidproquo-core';
|
|
2
|
+
import { SharedQueryParamsEffect } from './sharedQueryParamsTypes';
|
|
3
|
+
export function* askSharedQueryParamsUISetParam(key, values) {
|
|
4
|
+
yield* askStateDispatchEffect(SharedQueryParamsEffect.SetParam, {
|
|
5
|
+
key,
|
|
6
|
+
values,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SharedQueryParamsState } from './sharedQueryParamsTypes';
|
|
2
|
+
export declare const sharedQueryParamsInitalState: SharedQueryParamsState;
|
|
3
|
+
export declare const sharedQueryParamsReducer: (state: SharedQueryParamsState, effect: import("./sharedQueryParamsTypes").SharedQueryParamsSetParamEffect) => [SharedQueryParamsState, boolean];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { buildMutableEffectReducer } from 'quidproquo-core';
|
|
2
|
+
import { SharedQueryParamsEffect } from './sharedQueryParamsTypes';
|
|
3
|
+
export const sharedQueryParamsInitalState = {
|
|
4
|
+
// No initial state
|
|
5
|
+
};
|
|
6
|
+
export const sharedQueryParamsReducer = buildMutableEffectReducer({
|
|
7
|
+
[SharedQueryParamsEffect.SetParam]: (state, { key, values }) => {
|
|
8
|
+
state[key] = values;
|
|
9
|
+
},
|
|
10
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Effect } from 'quidproquo-core';
|
|
2
|
+
export type SharedQueryParamsState = Record<string, string[] | undefined>;
|
|
3
|
+
export declare enum SharedQueryParamsEffect {
|
|
4
|
+
SetParam = "Qpq/SharedQueryParams/SetParam"
|
|
5
|
+
}
|
|
6
|
+
export type SharedQueryParamsSetParamEffect = Effect<SharedQueryParamsEffect.SetParam, {
|
|
7
|
+
key: string;
|
|
8
|
+
values: string[];
|
|
9
|
+
}>;
|
|
10
|
+
export type SharedQueryParamsEffects = SharedQueryParamsSetParamEffect;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createQpqRuntimeDefinition } from '../hooks';
|
|
2
|
+
import { sharedQueryParamsLogic } from './logic/runtime';
|
|
3
|
+
import { sharedQueryParamsInitalState, sharedQueryParamsReducer } from './logic';
|
|
4
|
+
export const sharedQueryParamsRuntime = createQpqRuntimeDefinition(sharedQueryParamsLogic, sharedQueryParamsInitalState, sharedQueryParamsReducer);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "quidproquo-web-react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.254",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./lib/commonjs/index.js",
|
|
6
6
|
"module": "./lib/esm/index.js",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
},
|
|
33
33
|
"homepage": "https://github.com/joe-coady/quidproquo#readme",
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"quidproquo-core": "0.0.
|
|
36
|
-
"quidproquo-tsconfig": "0.0.
|
|
35
|
+
"quidproquo-core": "0.0.254",
|
|
36
|
+
"quidproquo-tsconfig": "0.0.254",
|
|
37
37
|
"typescript": "^4.9.3"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"jotai": "^2.12.1",
|
|
44
44
|
"symbol-observable": "^4.0.0",
|
|
45
|
-
"quidproquo-web": "0.0.
|
|
46
|
-
"quidproquo-webserver": "0.0.
|
|
47
|
-
"quidproquo-actionprocessor-node": "0.0.
|
|
48
|
-
"quidproquo-actionprocessor-web": "0.0.
|
|
45
|
+
"quidproquo-web": "0.0.254",
|
|
46
|
+
"quidproquo-webserver": "0.0.254",
|
|
47
|
+
"quidproquo-actionprocessor-node": "0.0.254",
|
|
48
|
+
"quidproquo-actionprocessor-web": "0.0.254"
|
|
49
49
|
}
|
|
50
50
|
}
|