@next-core/react-runtime 1.0.2
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/dist/cjs/ReactUseBrick.js +82 -0
- package/dist/cjs/ReactUseBrick.js.map +1 -0
- package/dist/cjs/index.js +50 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/useCurrentApp.js +25 -0
- package/dist/cjs/useCurrentApp.js.map +1 -0
- package/dist/cjs/useCurrentTheme.js +22 -0
- package/dist/cjs/useCurrentTheme.js.map +1 -0
- package/dist/cjs/useRecentApps.js +21 -0
- package/dist/cjs/useRecentApps.js.map +1 -0
- package/dist/esm/ReactUseBrick.js +83 -0
- package/dist/esm/ReactUseBrick.js.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/useCurrentApp.js +20 -0
- package/dist/esm/useCurrentApp.js.map +1 -0
- package/dist/esm/useCurrentTheme.js +16 -0
- package/dist/esm/useCurrentTheme.js.map +1 -0
- package/dist/esm/useRecentApps.js +14 -0
- package/dist/esm/useRecentApps.js.map +1 -0
- package/dist/types/ReactUseBrick.d.ts +12 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/useCurrentApp.d.ts +15 -0
- package/dist/types/useCurrentTheme.d.ts +2 -0
- package/dist/types/useRecentApps.d.ts +6 -0
- package/package.json +50 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ReactUseBrick = ReactUseBrick;
|
|
8
|
+
exports.ReactUseMultipleBricks = ReactUseMultipleBricks;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _runtime = require("@next-core/runtime");
|
|
11
|
+
// Note: always synchronize code in LegacyUseBrick:
|
|
12
|
+
// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`
|
|
13
|
+
function ReactUseBrick({
|
|
14
|
+
useBrick,
|
|
15
|
+
data
|
|
16
|
+
}) {
|
|
17
|
+
const [renderResult, setRenderResult] = (0, _react.useState)(null);
|
|
18
|
+
const mountResult = (0, _react.useRef)();
|
|
19
|
+
const [renderKey, setRenderKey] = (0, _react.useState)();
|
|
20
|
+
const IdCounterRef = (0, _react.useRef)(0);
|
|
21
|
+
(0, _react.useEffect)(() => {
|
|
22
|
+
async function init() {
|
|
23
|
+
try {
|
|
24
|
+
setRenderResult(await _runtime.__secret_internals.renderUseBrick(useBrick, data));
|
|
25
|
+
setRenderKey(getUniqueId(IdCounterRef));
|
|
26
|
+
} catch (error) {
|
|
27
|
+
// eslint-disable-next-line no-console
|
|
28
|
+
console.error("Render useBrick failed:", useBrick, "with data:", data);
|
|
29
|
+
(0, _runtime.handleHttpError)(error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
init();
|
|
33
|
+
}, [data, useBrick]);
|
|
34
|
+
const refCallback = (0, _react.useCallback)(element => {
|
|
35
|
+
if (element) {
|
|
36
|
+
mountResult.current = _runtime.__secret_internals.mountUseBrick(
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
38
|
+
renderResult, element);
|
|
39
|
+
} else {
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
41
|
+
_runtime.__secret_internals.unmountUseBrick(renderResult, mountResult.current);
|
|
42
|
+
mountResult.current = undefined;
|
|
43
|
+
}
|
|
44
|
+
}, [renderResult]);
|
|
45
|
+
if (!renderResult) {
|
|
46
|
+
// Fallback when loading/
|
|
47
|
+
return null;
|
|
48
|
+
// return <span>🌀 Loading...</span>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const {
|
|
52
|
+
tagName
|
|
53
|
+
} = renderResult;
|
|
54
|
+
if (tagName === null) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const WebComponent = tagName;
|
|
58
|
+
return /*#__PURE__*/_react.default.createElement(WebComponent, {
|
|
59
|
+
key: renderKey,
|
|
60
|
+
ref: refCallback
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function getUniqueId(ref) {
|
|
64
|
+
return ++ref.current;
|
|
65
|
+
}
|
|
66
|
+
function ReactUseMultipleBricks({
|
|
67
|
+
useBrick,
|
|
68
|
+
data
|
|
69
|
+
}) {
|
|
70
|
+
if (Array.isArray(useBrick)) {
|
|
71
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, useBrick.map((item, index) => /*#__PURE__*/_react.default.createElement(ReactUseBrick, {
|
|
72
|
+
key: index,
|
|
73
|
+
useBrick: item,
|
|
74
|
+
data: data
|
|
75
|
+
})));
|
|
76
|
+
}
|
|
77
|
+
return /*#__PURE__*/_react.default.createElement(ReactUseBrick, {
|
|
78
|
+
useBrick: useBrick,
|
|
79
|
+
data: data
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=ReactUseBrick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactUseBrick.js","names":["_react","_interopRequireWildcard","require","_runtime","ReactUseBrick","useBrick","data","renderResult","setRenderResult","useState","mountResult","useRef","renderKey","setRenderKey","IdCounterRef","useEffect","init","__secret_internals","renderUseBrick","getUniqueId","error","console","handleHttpError","refCallback","useCallback","element","current","mountUseBrick","unmountUseBrick","undefined","tagName","WebComponent","default","createElement","key","ref","ReactUseMultipleBricks","Array","isArray","Fragment","map","item","index"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { UseSingleBrickConf } from \"@next-core/types\";\nimport { __secret_internals, handleHttpError } from \"@next-core/runtime\";\n\nexport interface ReactUseBrickProps {\n useBrick: UseSingleBrickConf;\n data?: unknown;\n}\n\n// Note: always synchronize code in LegacyUseBrick:\n// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`\nexport function ReactUseBrick({\n useBrick,\n data,\n}: ReactUseBrickProps): React.ReactElement | null {\n const [renderResult, setRenderResult] =\n useState<__secret_internals.RenderUseBrickResult | null>(null);\n const mountResult = useRef<__secret_internals.MountUseBrickResult>();\n const [renderKey, setRenderKey] = useState<number>();\n const IdCounterRef = useRef(0);\n\n useEffect(() => {\n async function init() {\n try {\n setRenderResult(\n await __secret_internals.renderUseBrick(useBrick, data)\n );\n setRenderKey(getUniqueId(IdCounterRef));\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Render useBrick failed:\", useBrick, \"with data:\", data);\n handleHttpError(error);\n }\n }\n init();\n }, [data, useBrick]);\n\n const refCallback = useCallback(\n (element: HTMLElement) => {\n if (element) {\n mountResult.current = __secret_internals.mountUseBrick(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n renderResult!,\n element\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n __secret_internals.unmountUseBrick(renderResult!, mountResult.current!);\n mountResult.current = undefined;\n }\n },\n [renderResult]\n );\n\n if (!renderResult) {\n // Fallback when loading/\n return null;\n // return <span>🌀 Loading...</span>;\n }\n\n const { tagName } = renderResult;\n if (tagName === null) {\n return null;\n }\n\n const WebComponent = tagName as any;\n return <WebComponent key={renderKey} ref={refCallback} />;\n}\n\nfunction getUniqueId(ref: MutableRefObject<number>): number {\n return ++ref.current;\n}\n\nexport interface ReactUseMultipleBricksProps {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n data?: unknown;\n}\n\nexport function ReactUseMultipleBricks({\n useBrick,\n data,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\n if (Array.isArray(useBrick)) {\n return (\n <>\n {useBrick.map((item, index) => (\n <ReactUseBrick key={index} useBrick={item} data={data} />\n ))}\n </>\n );\n }\n return <ReactUseBrick useBrick={useBrick} data={data} />;\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAQA,IAAAC,QAAA,GAAAD,OAAA;AAOA;AACA;AACO,SAASE,aAAaA,CAAC;EAC5BC,QAAQ;EACRC;AACkB,CAAC,EAA6B;EAChD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GACnC,IAAAC,eAAQ,EAAiD,IAAI,CAAC;EAChE,MAAMC,WAAW,GAAG,IAAAC,aAAM,GAA0C;EACpE,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAJ,eAAQ,GAAU;EACpD,MAAMK,YAAY,GAAG,IAAAH,aAAM,EAAC,CAAC,CAAC;EAE9B,IAAAI,gBAAS,EAAC,MAAM;IACd,eAAeC,IAAIA,CAAA,EAAG;MACpB,IAAI;QACFR,eAAe,CACb,MAAMS,2BAAkB,CAACC,cAAc,CAACb,QAAQ,EAAEC,IAAI,CAAC,CACxD;QACDO,YAAY,CAACM,WAAW,CAACL,YAAY,CAAC,CAAC;MACzC,CAAC,CAAC,OAAOM,KAAK,EAAE;QACd;QACAC,OAAO,CAACD,KAAK,CAAC,yBAAyB,EAAEf,QAAQ,EAAE,YAAY,EAAEC,IAAI,CAAC;QACtE,IAAAgB,wBAAe,EAACF,KAAK,CAAC;MACxB;IACF;IACAJ,IAAI,EAAE;EACR,CAAC,EAAE,CAACV,IAAI,EAAED,QAAQ,CAAC,CAAC;EAEpB,MAAMkB,WAAW,GAAG,IAAAC,kBAAW,EAC5BC,OAAoB,IAAK;IACxB,IAAIA,OAAO,EAAE;MACXf,WAAW,CAACgB,OAAO,GAAGT,2BAAkB,CAACU,aAAa;MACpD;MACApB,YAAY,EACZkB,OAAO,CACR;IACH,CAAC,MAAM;MACL;MACAR,2BAAkB,CAACW,eAAe,CAACrB,YAAY,EAAGG,WAAW,CAACgB,OAAO,CAAE;MACvEhB,WAAW,CAACgB,OAAO,GAAGG,SAAS;IACjC;EACF,CAAC,EACD,CAACtB,YAAY,CAAC,CACf;EAED,IAAI,CAACA,YAAY,EAAE;IACjB;IACA,OAAO,IAAI;IACX;EACF;;EAEA,MAAM;IAAEuB;EAAQ,CAAC,GAAGvB,YAAY;EAChC,IAAIuB,OAAO,KAAK,IAAI,EAAE;IACpB,OAAO,IAAI;EACb;EAEA,MAAMC,YAAY,GAAGD,OAAc;EACnC,oBAAO9B,MAAA,CAAAgC,OAAA,CAAAC,aAAA,CAACF,YAAY;IAACG,GAAG,EAAEtB,SAAU;IAACuB,GAAG,EAAEZ;EAAY,EAAG;AAC3D;AAEA,SAASJ,WAAWA,CAACgB,GAA6B,EAAU;EAC1D,OAAO,EAAEA,GAAG,CAACT,OAAO;AACtB;AAOO,SAASU,sBAAsBA,CAAC;EACrC/B,QAAQ;EACRC;AAC2B,CAAC,EAA6B;EACzD,IAAI+B,KAAK,CAACC,OAAO,CAACjC,QAAQ,CAAC,EAAE;IAC3B,oBACEL,MAAA,CAAAgC,OAAA,CAAAC,aAAA,CAAAjC,MAAA,CAAAgC,OAAA,CAAAO,QAAA,QACGlC,QAAQ,CAACmC,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,kBACxB1C,MAAA,CAAAgC,OAAA,CAAAC,aAAA,CAAC7B,aAAa;MAAC8B,GAAG,EAAEQ,KAAM;MAACrC,QAAQ,EAAEoC,IAAK;MAACnC,IAAI,EAAEA;IAAK,EACvD,CAAC,CACD;EAEP;EACA,oBAAON,MAAA,CAAAgC,OAAA,CAAAC,aAAA,CAAC7B,aAAa;IAACC,QAAQ,EAAEA,QAAS;IAACC,IAAI,EAAEA;EAAK,EAAG;AAC1D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _ReactUseBrick = require("./ReactUseBrick.js");
|
|
7
|
+
Object.keys(_ReactUseBrick).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _ReactUseBrick[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _ReactUseBrick[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _useCurrentTheme = require("./useCurrentTheme.js");
|
|
18
|
+
Object.keys(_useCurrentTheme).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _useCurrentTheme[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _useCurrentTheme[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
var _useCurrentApp = require("./useCurrentApp.js");
|
|
29
|
+
Object.keys(_useCurrentApp).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _useCurrentApp[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _useCurrentApp[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
var _useRecentApps = require("./useRecentApps.js");
|
|
40
|
+
Object.keys(_useRecentApps).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _useRecentApps[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _useRecentApps[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_ReactUseBrick","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_useCurrentTheme","_useCurrentApp","_useRecentApps"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./ReactUseBrick.js\";\nexport * from \"./useCurrentTheme.js\";\nexport * from \"./useCurrentApp.js\";\nexport * from \"./useRecentApps.js\";\n"],"mappings":";;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,cAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,cAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,cAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,gBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,gBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,gBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,cAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,cAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,cAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,cAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,cAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,cAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,cAAA,CAAAP,GAAA;IAAA;EAAA;AAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useCurrentApp = useCurrentApp;
|
|
7
|
+
var _useRecentApps = require("./useRecentApps.js");
|
|
8
|
+
/**
|
|
9
|
+
* 获取当前所在微应用信息的 React hooks。
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
*
|
|
13
|
+
* ```tsx
|
|
14
|
+
* function MyReactComponent() {
|
|
15
|
+
* const app = useCurrentApp();
|
|
16
|
+
* return <div>{app.id}</div>;
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @returns 当前所在微应用的信息。
|
|
21
|
+
*/
|
|
22
|
+
function useCurrentApp() {
|
|
23
|
+
return (0, _useRecentApps.useRecentApps)().currentApp;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=useCurrentApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCurrentApp.js","names":["_useRecentApps","require","useCurrentApp","useRecentApps","currentApp"],"sources":["../../src/useCurrentApp.ts"],"sourcesContent":["import { useRecentApps } from \"./useRecentApps.js\";\n\n/**\n * 获取当前所在微应用信息的 React hooks。\n *\n * @example\n *\n * ```tsx\n * function MyReactComponent() {\n * const app = useCurrentApp();\n * return <div>{app.id}</div>;\n * }\n * ```\n *\n * @returns 当前所在微应用的信息。\n */\nexport function useCurrentApp() {\n return useRecentApps().currentApp;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAAA,EAAG;EAC9B,OAAO,IAAAC,4BAAa,GAAE,CAACC,UAAU;AACnC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useCurrentTheme = useCurrentTheme;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _runtime = require("@next-core/runtime");
|
|
9
|
+
function useCurrentTheme() {
|
|
10
|
+
const [currentTheme, setCurrentTheme] = (0, _react.useState)(_runtime.getCurrentTheme);
|
|
11
|
+
(0, _react.useEffect)(() => {
|
|
12
|
+
const listenToThemeChange = event => {
|
|
13
|
+
setCurrentTheme(event.detail);
|
|
14
|
+
};
|
|
15
|
+
window.addEventListener("theme.change", listenToThemeChange);
|
|
16
|
+
return () => {
|
|
17
|
+
window.removeEventListener("theme.change", listenToThemeChange);
|
|
18
|
+
};
|
|
19
|
+
}, []);
|
|
20
|
+
return currentTheme;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=useCurrentTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCurrentTheme.js","names":["_react","require","_runtime","useCurrentTheme","currentTheme","setCurrentTheme","useState","getCurrentTheme","useEffect","listenToThemeChange","event","detail","window","addEventListener","removeEventListener"],"sources":["../../src/useCurrentTheme.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { getCurrentTheme } from \"@next-core/runtime\";\nimport type { SiteTheme } from \"@next-core/types\";\n\nexport function useCurrentTheme(): SiteTheme {\n const [currentTheme, setCurrentTheme] = useState(getCurrentTheme);\n\n useEffect(() => {\n const listenToThemeChange = (event: Event): void => {\n setCurrentTheme((event as CustomEvent<SiteTheme>).detail);\n };\n window.addEventListener(\"theme.change\", listenToThemeChange);\n return () => {\n window.removeEventListener(\"theme.change\", listenToThemeChange);\n };\n }, []);\n\n return currentTheme;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGO,SAASE,eAAeA,CAAA,EAAc;EAC3C,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAC,eAAQ,EAACC,wBAAe,CAAC;EAEjE,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,mBAAmB,GAAIC,KAAY,IAAW;MAClDL,eAAe,CAAEK,KAAK,CAA4BC,MAAM,CAAC;IAC3D,CAAC;IACDC,MAAM,CAACC,gBAAgB,CAAC,cAAc,EAAEJ,mBAAmB,CAAC;IAC5D,OAAO,MAAM;MACXG,MAAM,CAACE,mBAAmB,CAAC,cAAc,EAAEL,mBAAmB,CAAC;IACjE,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOL,YAAY;AACrB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useRecentApps = useRecentApps;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _runtime = require("@next-core/runtime");
|
|
10
|
+
function useRecentApps() {
|
|
11
|
+
const [recentApps, setRecentApps] = _react.default.useState(() => (0, _runtime.getRuntime)().getRecentApps());
|
|
12
|
+
_react.default.useEffect(() => {
|
|
13
|
+
const listener = event => {
|
|
14
|
+
setRecentApps(event.detail);
|
|
15
|
+
};
|
|
16
|
+
window.addEventListener("app.change", listener);
|
|
17
|
+
return () => window.removeEventListener("app.change", listener);
|
|
18
|
+
}, []);
|
|
19
|
+
return recentApps;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=useRecentApps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRecentApps.js","names":["_react","_interopRequireDefault","require","_runtime","useRecentApps","recentApps","setRecentApps","React","useState","getRuntime","getRecentApps","useEffect","listener","event","detail","window","addEventListener","removeEventListener"],"sources":["../../src/useRecentApps.ts"],"sourcesContent":["import React from \"react\";\nimport { MicroApp } from \"@next-core/types\";\nimport { getRuntime } from \"@next-core/runtime\";\n\nexport interface RecentApps {\n currentApp?: MicroApp;\n previousApp?: MicroApp;\n}\n\nexport function useRecentApps(): RecentApps {\n const [recentApps, setRecentApps] = React.useState<RecentApps>(() =>\n getRuntime().getRecentApps()\n );\n\n React.useEffect(() => {\n const listener = ((event: CustomEvent<RecentApps>) => {\n setRecentApps(event.detail);\n }) as EventListener;\n window.addEventListener(\"app.change\", listener);\n return () => window.removeEventListener(\"app.change\", listener);\n }, []);\n\n return recentApps;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,QAAA,GAAAD,OAAA;AAOO,SAASE,aAAaA,CAAA,EAAe;EAC1C,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGC,cAAK,CAACC,QAAQ,CAAa,MAC7D,IAAAC,mBAAU,GAAE,CAACC,aAAa,EAAE,CAC7B;EAEDH,cAAK,CAACI,SAAS,CAAC,MAAM;IACpB,MAAMC,QAAQ,GAAKC,KAA8B,IAAK;MACpDP,aAAa,CAACO,KAAK,CAACC,MAAM,CAAC;IAC7B,CAAmB;IACnBC,MAAM,CAACC,gBAAgB,CAAC,YAAY,EAAEJ,QAAQ,CAAC;IAC/C,OAAO,MAAMG,MAAM,CAACE,mBAAmB,CAAC,YAAY,EAAEL,QAAQ,CAAC;EACjE,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOP,UAAU;AACnB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { __secret_internals, handleHttpError } from "@next-core/runtime";
|
|
4
|
+
// Note: always synchronize code in LegacyUseBrick:
|
|
5
|
+
// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`
|
|
6
|
+
export function ReactUseBrick(_ref) {
|
|
7
|
+
var {
|
|
8
|
+
useBrick,
|
|
9
|
+
data
|
|
10
|
+
} = _ref;
|
|
11
|
+
var [renderResult, setRenderResult] = useState(null);
|
|
12
|
+
var mountResult = useRef();
|
|
13
|
+
var [renderKey, setRenderKey] = useState();
|
|
14
|
+
var IdCounterRef = useRef(0);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
function init() {
|
|
17
|
+
return _init.apply(this, arguments);
|
|
18
|
+
}
|
|
19
|
+
function _init() {
|
|
20
|
+
_init = _asyncToGenerator(function* () {
|
|
21
|
+
try {
|
|
22
|
+
setRenderResult(yield __secret_internals.renderUseBrick(useBrick, data));
|
|
23
|
+
setRenderKey(getUniqueId(IdCounterRef));
|
|
24
|
+
} catch (error) {
|
|
25
|
+
// eslint-disable-next-line no-console
|
|
26
|
+
console.error("Render useBrick failed:", useBrick, "with data:", data);
|
|
27
|
+
handleHttpError(error);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return _init.apply(this, arguments);
|
|
31
|
+
}
|
|
32
|
+
init();
|
|
33
|
+
}, [data, useBrick]);
|
|
34
|
+
var refCallback = useCallback(element => {
|
|
35
|
+
if (element) {
|
|
36
|
+
mountResult.current = __secret_internals.mountUseBrick(
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
38
|
+
renderResult, element);
|
|
39
|
+
} else {
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
41
|
+
__secret_internals.unmountUseBrick(renderResult, mountResult.current);
|
|
42
|
+
mountResult.current = undefined;
|
|
43
|
+
}
|
|
44
|
+
}, [renderResult]);
|
|
45
|
+
if (!renderResult) {
|
|
46
|
+
// Fallback when loading/
|
|
47
|
+
return null;
|
|
48
|
+
// return <span>🌀 Loading...</span>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
var {
|
|
52
|
+
tagName
|
|
53
|
+
} = renderResult;
|
|
54
|
+
if (tagName === null) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
var WebComponent = tagName;
|
|
58
|
+
return /*#__PURE__*/React.createElement(WebComponent, {
|
|
59
|
+
key: renderKey,
|
|
60
|
+
ref: refCallback
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function getUniqueId(ref) {
|
|
64
|
+
return ++ref.current;
|
|
65
|
+
}
|
|
66
|
+
export function ReactUseMultipleBricks(_ref2) {
|
|
67
|
+
var {
|
|
68
|
+
useBrick,
|
|
69
|
+
data
|
|
70
|
+
} = _ref2;
|
|
71
|
+
if (Array.isArray(useBrick)) {
|
|
72
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, useBrick.map((item, index) => /*#__PURE__*/React.createElement(ReactUseBrick, {
|
|
73
|
+
key: index,
|
|
74
|
+
useBrick: item,
|
|
75
|
+
data: data
|
|
76
|
+
})));
|
|
77
|
+
}
|
|
78
|
+
return /*#__PURE__*/React.createElement(ReactUseBrick, {
|
|
79
|
+
useBrick: useBrick,
|
|
80
|
+
data: data
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ReactUseBrick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactUseBrick.js","names":["React","useCallback","useEffect","useRef","useState","__secret_internals","handleHttpError","ReactUseBrick","_ref","useBrick","data","renderResult","setRenderResult","mountResult","renderKey","setRenderKey","IdCounterRef","init","_init","apply","arguments","_asyncToGenerator","renderUseBrick","getUniqueId","error","console","refCallback","element","current","mountUseBrick","unmountUseBrick","undefined","tagName","WebComponent","createElement","key","ref","ReactUseMultipleBricks","_ref2","Array","isArray","Fragment","map","item","index"],"sources":["../../src/ReactUseBrick.tsx"],"sourcesContent":["import React, {\n MutableRefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { UseSingleBrickConf } from \"@next-core/types\";\nimport { __secret_internals, handleHttpError } from \"@next-core/runtime\";\n\nexport interface ReactUseBrickProps {\n useBrick: UseSingleBrickConf;\n data?: unknown;\n}\n\n// Note: always synchronize code in LegacyUseBrick:\n// `bricks/v2-adapter/src/data-providers/legacy-brick-kit/getLegacyUseBrick.ts`\nexport function ReactUseBrick({\n useBrick,\n data,\n}: ReactUseBrickProps): React.ReactElement | null {\n const [renderResult, setRenderResult] =\n useState<__secret_internals.RenderUseBrickResult | null>(null);\n const mountResult = useRef<__secret_internals.MountUseBrickResult>();\n const [renderKey, setRenderKey] = useState<number>();\n const IdCounterRef = useRef(0);\n\n useEffect(() => {\n async function init() {\n try {\n setRenderResult(\n await __secret_internals.renderUseBrick(useBrick, data)\n );\n setRenderKey(getUniqueId(IdCounterRef));\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Render useBrick failed:\", useBrick, \"with data:\", data);\n handleHttpError(error);\n }\n }\n init();\n }, [data, useBrick]);\n\n const refCallback = useCallback(\n (element: HTMLElement) => {\n if (element) {\n mountResult.current = __secret_internals.mountUseBrick(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n renderResult!,\n element\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n __secret_internals.unmountUseBrick(renderResult!, mountResult.current!);\n mountResult.current = undefined;\n }\n },\n [renderResult]\n );\n\n if (!renderResult) {\n // Fallback when loading/\n return null;\n // return <span>🌀 Loading...</span>;\n }\n\n const { tagName } = renderResult;\n if (tagName === null) {\n return null;\n }\n\n const WebComponent = tagName as any;\n return <WebComponent key={renderKey} ref={refCallback} />;\n}\n\nfunction getUniqueId(ref: MutableRefObject<number>): number {\n return ++ref.current;\n}\n\nexport interface ReactUseMultipleBricksProps {\n useBrick: UseSingleBrickConf | UseSingleBrickConf[];\n data?: unknown;\n}\n\nexport function ReactUseMultipleBricks({\n useBrick,\n data,\n}: ReactUseMultipleBricksProps): React.ReactElement | null {\n if (Array.isArray(useBrick)) {\n return (\n <>\n {useBrick.map((item, index) => (\n <ReactUseBrick key={index} useBrick={item} data={data} />\n ))}\n </>\n );\n }\n return <ReactUseBrick useBrick={useBrick} data={data} />;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./ReactUseBrick.js\";\nexport * from \"./useCurrentTheme.js\";\nexport * from \"./useCurrentApp.js\";\nexport * from \"./useRecentApps.js\";\n"],"mappings":"AAAA,cAAc,oBAAoB;AAClC,cAAc,sBAAsB;AACpC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useRecentApps } from "./useRecentApps.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 获取当前所在微应用信息的 React hooks。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
*
|
|
8
|
+
* ```tsx
|
|
9
|
+
* function MyReactComponent() {
|
|
10
|
+
* const app = useCurrentApp();
|
|
11
|
+
* return <div>{app.id}</div>;
|
|
12
|
+
* }
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @returns 当前所在微应用的信息。
|
|
16
|
+
*/
|
|
17
|
+
export function useCurrentApp() {
|
|
18
|
+
return useRecentApps().currentApp;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=useCurrentApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCurrentApp.js","names":["useRecentApps","useCurrentApp","currentApp"],"sources":["../../src/useCurrentApp.ts"],"sourcesContent":["import { useRecentApps } from \"./useRecentApps.js\";\n\n/**\n * 获取当前所在微应用信息的 React hooks。\n *\n * @example\n *\n * ```tsx\n * function MyReactComponent() {\n * const app = useCurrentApp();\n * return <div>{app.id}</div>;\n * }\n * ```\n *\n * @returns 当前所在微应用的信息。\n */\nexport function useCurrentApp() {\n return useRecentApps().currentApp;\n}\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,oBAAoB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAA,EAAG;EAC9B,OAAOD,aAAa,EAAE,CAACE,UAAU;AACnC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { getCurrentTheme } from "@next-core/runtime";
|
|
3
|
+
export function useCurrentTheme() {
|
|
4
|
+
var [currentTheme, setCurrentTheme] = useState(getCurrentTheme);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
var listenToThemeChange = event => {
|
|
7
|
+
setCurrentTheme(event.detail);
|
|
8
|
+
};
|
|
9
|
+
window.addEventListener("theme.change", listenToThemeChange);
|
|
10
|
+
return () => {
|
|
11
|
+
window.removeEventListener("theme.change", listenToThemeChange);
|
|
12
|
+
};
|
|
13
|
+
}, []);
|
|
14
|
+
return currentTheme;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=useCurrentTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCurrentTheme.js","names":["useEffect","useState","getCurrentTheme","useCurrentTheme","currentTheme","setCurrentTheme","listenToThemeChange","event","detail","window","addEventListener","removeEventListener"],"sources":["../../src/useCurrentTheme.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { getCurrentTheme } from \"@next-core/runtime\";\nimport type { SiteTheme } from \"@next-core/types\";\n\nexport function useCurrentTheme(): SiteTheme {\n const [currentTheme, setCurrentTheme] = useState(getCurrentTheme);\n\n useEffect(() => {\n const listenToThemeChange = (event: Event): void => {\n setCurrentTheme((event as CustomEvent<SiteTheme>).detail);\n };\n window.addEventListener(\"theme.change\", listenToThemeChange);\n return () => {\n window.removeEventListener(\"theme.change\", listenToThemeChange);\n };\n }, []);\n\n return currentTheme;\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,eAAe,QAAQ,oBAAoB;AAGpD,OAAO,SAASC,eAAeA,CAAA,EAAc;EAC3C,IAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGJ,QAAQ,CAACC,eAAe,CAAC;EAEjEF,SAAS,CAAC,MAAM;IACd,IAAMM,mBAAmB,GAAIC,KAAY,IAAW;MAClDF,eAAe,CAAEE,KAAK,CAA4BC,MAAM,CAAC;IAC3D,CAAC;IACDC,MAAM,CAACC,gBAAgB,CAAC,cAAc,EAAEJ,mBAAmB,CAAC;IAC5D,OAAO,MAAM;MACXG,MAAM,CAACE,mBAAmB,CAAC,cAAc,EAAEL,mBAAmB,CAAC;IACjE,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOF,YAAY;AACrB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { getRuntime } from "@next-core/runtime";
|
|
3
|
+
export function useRecentApps() {
|
|
4
|
+
var [recentApps, setRecentApps] = React.useState(() => getRuntime().getRecentApps());
|
|
5
|
+
React.useEffect(() => {
|
|
6
|
+
var listener = event => {
|
|
7
|
+
setRecentApps(event.detail);
|
|
8
|
+
};
|
|
9
|
+
window.addEventListener("app.change", listener);
|
|
10
|
+
return () => window.removeEventListener("app.change", listener);
|
|
11
|
+
}, []);
|
|
12
|
+
return recentApps;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=useRecentApps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRecentApps.js","names":["React","getRuntime","useRecentApps","recentApps","setRecentApps","useState","getRecentApps","useEffect","listener","event","detail","window","addEventListener","removeEventListener"],"sources":["../../src/useRecentApps.ts"],"sourcesContent":["import React from \"react\";\nimport { MicroApp } from \"@next-core/types\";\nimport { getRuntime } from \"@next-core/runtime\";\n\nexport interface RecentApps {\n currentApp?: MicroApp;\n previousApp?: MicroApp;\n}\n\nexport function useRecentApps(): RecentApps {\n const [recentApps, setRecentApps] = React.useState<RecentApps>(() =>\n getRuntime().getRecentApps()\n );\n\n React.useEffect(() => {\n const listener = ((event: CustomEvent<RecentApps>) => {\n setRecentApps(event.detail);\n }) as EventListener;\n window.addEventListener(\"app.change\", listener);\n return () => window.removeEventListener(\"app.change\", listener);\n }, []);\n\n return recentApps;\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,UAAU,QAAQ,oBAAoB;AAO/C,OAAO,SAASC,aAAaA,CAAA,EAAe;EAC1C,IAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGJ,KAAK,CAACK,QAAQ,CAAa,MAC7DJ,UAAU,EAAE,CAACK,aAAa,EAAE,CAC7B;EAEDN,KAAK,CAACO,SAAS,CAAC,MAAM;IACpB,IAAMC,QAAQ,GAAKC,KAA8B,IAAK;MACpDL,aAAa,CAACK,KAAK,CAACC,MAAM,CAAC;IAC7B,CAAmB;IACnBC,MAAM,CAACC,gBAAgB,CAAC,YAAY,EAAEJ,QAAQ,CAAC;IAC/C,OAAO,MAAMG,MAAM,CAACE,mBAAmB,CAAC,YAAY,EAAEL,QAAQ,CAAC;EACjE,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOL,UAAU;AACnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { UseSingleBrickConf } from "@next-core/types";
|
|
3
|
+
export interface ReactUseBrickProps {
|
|
4
|
+
useBrick: UseSingleBrickConf;
|
|
5
|
+
data?: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare function ReactUseBrick({ useBrick, data, }: ReactUseBrickProps): React.ReactElement | null;
|
|
8
|
+
export interface ReactUseMultipleBricksProps {
|
|
9
|
+
useBrick: UseSingleBrickConf | UseSingleBrickConf[];
|
|
10
|
+
data?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export declare function ReactUseMultipleBricks({ useBrick, data, }: ReactUseMultipleBricksProps): React.ReactElement | null;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 获取当前所在微应用信息的 React hooks。
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
*
|
|
6
|
+
* ```tsx
|
|
7
|
+
* function MyReactComponent() {
|
|
8
|
+
* const app = useCurrentApp();
|
|
9
|
+
* return <div>{app.id}</div>;
|
|
10
|
+
* }
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @returns 当前所在微应用的信息。
|
|
14
|
+
*/
|
|
15
|
+
export declare function useCurrentApp(): import("@next-core/types").MicroApp | undefined;
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@next-core/react-runtime",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"homepage": "https://github.com/easyops-cn/next-core/tree/master/packages/react-runtime",
|
|
5
|
+
"license": "GPL-3.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git@github.com:easyops-cn/next-core.git"
|
|
9
|
+
},
|
|
10
|
+
"sideEffects": false,
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "dist/cjs/index.js",
|
|
13
|
+
"module": "dist/esm/index.js",
|
|
14
|
+
"typings": "dist/types/index.d.ts",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/types/index.d.ts",
|
|
21
|
+
"import": "./dist/esm/index.js",
|
|
22
|
+
"require": "./dist/cjs/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./package.json": "./package.json"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"clean": "rimraf dist",
|
|
28
|
+
"prestart": "npm run clean",
|
|
29
|
+
"start": "concurrently -k -n types,main \"npm run start:types\" \"npm run start:main\"",
|
|
30
|
+
"start:main": "cross-env NODE_ENV=development build-next-libs --watch",
|
|
31
|
+
"start:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types --project tsconfig.build.json --watch",
|
|
32
|
+
"prebuild": "npm run clean",
|
|
33
|
+
"build": "npm run build:types && npm run build:main",
|
|
34
|
+
"build:main": "cross-env NODE_ENV=production build-next-libs",
|
|
35
|
+
"build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types --project tsconfig.build.json",
|
|
36
|
+
"test": "cross-env NODE_ENV='test' test-next",
|
|
37
|
+
"test:ci": "cross-env NODE_ENV='test' CI=true test-next"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@next-core/runtime": "^1.0.2",
|
|
41
|
+
"@next-core/types": "^1.0.2",
|
|
42
|
+
"react": "0.0.0-experimental-ee8509801-20230117",
|
|
43
|
+
"react-dom": "0.0.0-experimental-ee8509801-20230117"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@next-core/build-next-libs": "^1.0.2",
|
|
47
|
+
"@next-core/test-next": "^1.0.2"
|
|
48
|
+
},
|
|
49
|
+
"gitHead": "ffd8b31a5d99db5af3b4ec7675ff2d6541eb1338"
|
|
50
|
+
}
|