@j2inn/fin5-ui-utils 0.0.1-alpha.5 → 0.0.3
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/fantomProps/fantomPropsToObject.js +7 -2
- package/dist/fantomProps/fantomPropsToObject.js.map +1 -1
- package/dist/fantomProps/generateJsonFromFantomPropsFile.d.ts +3 -0
- package/dist/fantomProps/generateJsonFromFantomPropsFile.js +37 -7
- package/dist/fantomProps/generateJsonFromFantomPropsFile.js.map +1 -1
- package/dist/fantomProps/localePropsToJson.d.ts +1 -0
- package/dist/fantomProps/localePropsToJson.js +48 -0
- package/dist/fantomProps/localePropsToJson.js.map +1 -0
- package/dist/fantomProps/readFantomPropsFile.js +30 -4
- package/dist/fantomProps/readFantomPropsFile.js.map +1 -1
- package/dist/fin5Top/fin5Top.js +9 -5
- package/dist/fin5Top/fin5Top.js.map +1 -1
- package/dist/fin5Top/getFin5BinUrl.js +6 -2
- package/dist/fin5Top/getFin5BinUrl.js.map +1 -1
- package/dist/fin5Top/openFin5Alarm.js +10 -6
- package/dist/fin5Top/openFin5Alarm.js.map +1 -1
- package/dist/fin5Top/openFin5Historian.js +10 -6
- package/dist/fin5Top/openFin5Historian.js.map +1 -1
- package/dist/index.d.ts +12 -3
- package/dist/index.js +37 -3
- package/dist/index.js.map +1 -1
- package/dist/react/components/{ErrorDisplayer/index.d.ts → ErrorDisplayer.d.ts} +0 -0
- package/dist/react/components/ErrorDisplayer.jsx +44 -0
- package/dist/react/components/ErrorDisplayer.jsx.map +1 -0
- package/dist/react/components/{LoadingSpinner/index.d.ts → LoadingSpinner.d.ts} +0 -0
- package/dist/react/components/LoadingSpinner.jsx +12 -0
- package/dist/react/components/LoadingSpinner.jsx.map +1 -0
- package/dist/react/components/navigation/BasicLayout.d.ts +20 -0
- package/dist/react/components/navigation/BasicLayout.jsx +127 -0
- package/dist/react/components/navigation/BasicLayout.jsx.map +1 -0
- package/dist/react/components/navigation/{MenuPage/index.d.ts → MenuPage.d.ts} +1 -1
- package/dist/react/components/navigation/MenuPage.jsx +34 -0
- package/dist/react/components/navigation/MenuPage.jsx.map +1 -0
- package/dist/react/components/navigation/Router.d.ts +1 -1
- package/dist/react/components/navigation/Router.jsx +40 -10
- package/dist/react/components/navigation/Router.jsx.map +1 -1
- package/dist_es/fantomProps/fantomPropsToObject.d.ts +8 -0
- package/dist_es/fantomProps/fantomPropsToObject.js +176 -0
- package/dist_es/fantomProps/fantomPropsToObject.js.map +1 -0
- package/dist_es/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -0
- package/dist_es/fantomProps/generateJsonFromFantomPropsFile.js +10 -0
- package/dist_es/fantomProps/generateJsonFromFantomPropsFile.js.map +1 -0
- package/dist_es/fantomProps/localePropsToJson.d.ts +1 -0
- package/dist_es/fantomProps/localePropsToJson.js +19 -0
- package/dist_es/fantomProps/localePropsToJson.js.map +1 -0
- package/dist_es/fantomProps/readFantomPropsFile.d.ts +5 -0
- package/dist_es/fantomProps/readFantomPropsFile.js +33 -0
- package/dist_es/fantomProps/readFantomPropsFile.js.map +1 -0
- package/dist_es/fin5Top/fin5Top.d.ts +111 -0
- package/dist_es/fin5Top/fin5Top.js +52 -0
- package/dist_es/fin5Top/fin5Top.js.map +1 -0
- package/dist_es/fin5Top/getFin5BinUrl.d.ts +2 -0
- package/dist_es/fin5Top/getFin5BinUrl.js +3 -0
- package/dist_es/fin5Top/getFin5BinUrl.js.map +1 -0
- package/dist_es/fin5Top/openFin5Alarm.d.ts +22 -0
- package/dist_es/fin5Top/openFin5Alarm.js +17 -0
- package/dist_es/fin5Top/openFin5Alarm.js.map +1 -0
- package/dist_es/fin5Top/openFin5Historian.d.ts +3 -0
- package/dist_es/fin5Top/openFin5Historian.js +13 -0
- package/dist_es/fin5Top/openFin5Historian.js.map +1 -0
- package/dist_es/index.d.ts +12 -0
- package/dist_es/index.js +22 -0
- package/dist_es/index.js.map +1 -0
- package/dist_es/react/components/ErrorDisplayer.d.ts +19 -0
- package/{dist/react/components/ErrorDisplayer/index.jsx → dist_es/react/components/ErrorDisplayer.jsx} +1 -1
- package/{dist/react/components/ErrorDisplayer/index.jsx.map → dist_es/react/components/ErrorDisplayer.jsx.map} +1 -1
- package/dist_es/react/components/LoadingSpinner.d.ts +3 -0
- package/{dist/react/components/LoadingSpinner/index.jsx → dist_es/react/components/LoadingSpinner.jsx} +1 -1
- package/{dist/react/components/LoadingSpinner/index.jsx.map → dist_es/react/components/LoadingSpinner.jsx.map} +1 -1
- package/dist_es/react/components/navigation/BasicLayout.d.ts +20 -0
- package/{dist/react/components/navigation/BasicLayout/index.jsx → dist_es/react/components/navigation/BasicLayout.jsx} +37 -41
- package/dist_es/react/components/navigation/BasicLayout.jsx.map +1 -0
- package/dist_es/react/components/navigation/MenuPage.d.ts +33 -0
- package/{dist/react/components/navigation/MenuPage/index.jsx → dist_es/react/components/navigation/MenuPage.jsx} +2 -2
- package/dist_es/react/components/navigation/MenuPage.jsx.map +1 -0
- package/dist_es/react/components/navigation/Router.d.ts +12 -0
- package/dist_es/react/components/navigation/Router.jsx +16 -0
- package/dist_es/react/components/navigation/Router.jsx.map +1 -0
- package/package.json +11 -9
- package/dist/fantomProps/index.d.ts +0 -3
- package/dist/fantomProps/index.js +0 -4
- package/dist/fantomProps/index.js.map +0 -1
- package/dist/fin5Top/index.d.ts +0 -4
- package/dist/fin5Top/index.js +0 -5
- package/dist/fin5Top/index.js.map +0 -1
- package/dist/react/components/index.d.ts +0 -5
- package/dist/react/components/index.js +0 -6
- package/dist/react/components/index.js.map +0 -1
- package/dist/react/components/navigation/BasicLayout/index.d.ts +0 -11
- package/dist/react/components/navigation/BasicLayout/index.jsx.map +0 -1
- package/dist/react/components/navigation/MenuPage/index.jsx.map +0 -1
|
@@ -0,0 +1,127 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.BasicLayout = void 0;
|
|
27
|
+
const icons_1 = require("@ant-design/icons");
|
|
28
|
+
const ui_1 = require("@j2inn/ui");
|
|
29
|
+
const react_1 = __importStar(require("react"));
|
|
30
|
+
const react_jss_1 = require("react-jss");
|
|
31
|
+
const ErrorDisplayer_1 = require("../ErrorDisplayer");
|
|
32
|
+
const MenuPage_1 = require("./MenuPage");
|
|
33
|
+
const Router_1 = require("./Router");
|
|
34
|
+
const HEADER_HEIGHT = 45;
|
|
35
|
+
const useStyles = (0, react_jss_1.createUseStyles)((theme) => {
|
|
36
|
+
return {
|
|
37
|
+
header: {
|
|
38
|
+
position: 'fixed',
|
|
39
|
+
width: '100%',
|
|
40
|
+
zIndex: 1000,
|
|
41
|
+
padding: 0,
|
|
42
|
+
height: HEADER_HEIGHT,
|
|
43
|
+
lineHeight: '45px',
|
|
44
|
+
},
|
|
45
|
+
sider: {
|
|
46
|
+
overflow: 'auto',
|
|
47
|
+
height: '100vh',
|
|
48
|
+
position: 'fixed',
|
|
49
|
+
left: 0,
|
|
50
|
+
top: 0,
|
|
51
|
+
bottom: 0,
|
|
52
|
+
zIndex: 999,
|
|
53
|
+
paddingTop: ({ isMobile }) => isMobile ? HEADER_HEIGHT : 0,
|
|
54
|
+
},
|
|
55
|
+
menuTrigger: {
|
|
56
|
+
width: 45,
|
|
57
|
+
height: '100%',
|
|
58
|
+
textAlign: 'center',
|
|
59
|
+
fontSize: 18,
|
|
60
|
+
cursor: 'pointer',
|
|
61
|
+
transition: 'color 0.3s ease-in-out',
|
|
62
|
+
backgroundColor: 'transparent',
|
|
63
|
+
color: 'white',
|
|
64
|
+
'&:hover': {
|
|
65
|
+
color: theme.linkActiveColor,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
content: ({ isMobile, compactSider }) => ({
|
|
69
|
+
paddingLeft: isMobile ? 0 : compactSider ? 45 : 200,
|
|
70
|
+
paddingTop: isMobile ? HEADER_HEIGHT : 0,
|
|
71
|
+
}),
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
// Workaround j2inn/ui exporting problem
|
|
75
|
+
const Header = ui_1.Layout.Header;
|
|
76
|
+
const Sider = ui_1.Layout.Sider;
|
|
77
|
+
const Content = ui_1.Layout.Content;
|
|
78
|
+
/**
|
|
79
|
+
* Basic layout that combines menu and routing into one.
|
|
80
|
+
*/
|
|
81
|
+
const BasicLayout = ({ pages = [], defaultPage = pages?.[0].key ?? '', onPageChange, compactSider, layoutProps, mobileHeaderProps, contentProps, menuProps, }) => {
|
|
82
|
+
const [currentPage, setCurrentPage] = (0, react_1.useState)(defaultPage);
|
|
83
|
+
// Fire onChange
|
|
84
|
+
(0, react_1.useEffect)(() => {
|
|
85
|
+
onPageChange?.(currentPage);
|
|
86
|
+
}, [currentPage]);
|
|
87
|
+
// manage mobile navigation
|
|
88
|
+
const [isMobile, setIsMobile] = (0, react_1.useState)(false);
|
|
89
|
+
const [hiddenSider, setHiddenSider] = (0, react_1.useState)(false);
|
|
90
|
+
const classes = useStyles({ isMobile, compactSider });
|
|
91
|
+
return (<ui_1.Layout hasSider {...layoutProps}>
|
|
92
|
+
{isMobile && (<Header className={classes.header} {...mobileHeaderProps}>
|
|
93
|
+
{hiddenSider ? (<icons_1.MenuUnfoldOutlined className={classes.menuTrigger} onClick={() => {
|
|
94
|
+
setHiddenSider(!hiddenSider);
|
|
95
|
+
}}/>) : (<icons_1.MenuFoldOutlined className={classes.menuTrigger} onClick={() => {
|
|
96
|
+
setHiddenSider(!hiddenSider);
|
|
97
|
+
}}/>)}
|
|
98
|
+
</Header>)}
|
|
99
|
+
<Sider breakpoint='md' onBreakpoint={(broken) => {
|
|
100
|
+
setIsMobile(broken);
|
|
101
|
+
setHiddenSider(true);
|
|
102
|
+
}} collapsed={(isMobile && hiddenSider) || compactSider} collapsedWidth={isMobile && hiddenSider
|
|
103
|
+
? 0
|
|
104
|
+
: compactSider
|
|
105
|
+
? HEADER_HEIGHT
|
|
106
|
+
: 0} trigger={null} className={classes.sider}>
|
|
107
|
+
<ui_1.Menu {...menuProps} items={pages} selectedKeys={[currentPage]} onSelect={({ key }) => {
|
|
108
|
+
if (!hiddenSider) {
|
|
109
|
+
setHiddenSider(true);
|
|
110
|
+
}
|
|
111
|
+
const page = (0, MenuPage_1.findPageByName)(pages, key);
|
|
112
|
+
if (page?.component) {
|
|
113
|
+
setCurrentPage(key);
|
|
114
|
+
}
|
|
115
|
+
}}/>
|
|
116
|
+
</Sider>
|
|
117
|
+
<Content className={classes.content} {...contentProps}>
|
|
118
|
+
<Router_1.Router pages={pages} currentPage={currentPage ?? defaultPage} fallbackComponent={<ErrorDisplayer_1.ErrorDisplayer error={new Error('Page Not Found')} extra={[
|
|
119
|
+
<ui_1.Button type='primary' key='refresh' onClick={() => setCurrentPage(defaultPage)}>
|
|
120
|
+
Go Home
|
|
121
|
+
</ui_1.Button>,
|
|
122
|
+
]}/>}/>
|
|
123
|
+
</Content>
|
|
124
|
+
</ui_1.Layout>);
|
|
125
|
+
};
|
|
126
|
+
exports.BasicLayout = BasicLayout;
|
|
127
|
+
//# sourceMappingURL=BasicLayout.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicLayout.jsx","sourceRoot":"","sources":["../../../../src/react/components/navigation/BasicLayout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ interface Page<T = Record<string, unknown>> {
|
|
|
19
19
|
* @param name the name of the searched page
|
|
20
20
|
* @param pages the list of root pages
|
|
21
21
|
*/
|
|
22
|
-
export declare function
|
|
22
|
+
export declare function findPageByName<T extends MenuPage>(pages: T[], name?: string): T | undefined;
|
|
23
23
|
/**
|
|
24
24
|
* Expands the list of pages to include all the subpages
|
|
25
25
|
*/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAllSubPages = exports.pageTreeToPageList = exports.findPageByName = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Retrieve a specific page or subPage from a root page list
|
|
6
|
+
* @param name the name of the searched page
|
|
7
|
+
* @param pages the list of root pages
|
|
8
|
+
*/
|
|
9
|
+
function findPageByName(pages, name) {
|
|
10
|
+
return pageTreeToPageList(pages).find((page) => page.key === name && !page.disabled);
|
|
11
|
+
}
|
|
12
|
+
exports.findPageByName = findPageByName;
|
|
13
|
+
/**
|
|
14
|
+
* Expands the list of pages to include all the subpages
|
|
15
|
+
*/
|
|
16
|
+
function pageTreeToPageList(pages) {
|
|
17
|
+
return pages.flatMap((page) => getAllSubPages(page));
|
|
18
|
+
}
|
|
19
|
+
exports.pageTreeToPageList = pageTreeToPageList;
|
|
20
|
+
/**
|
|
21
|
+
* Recursively get all the subPages of a root page
|
|
22
|
+
* @param page root page
|
|
23
|
+
* @returns the whole tree of subPages as a list
|
|
24
|
+
*/
|
|
25
|
+
function getAllSubPages(page) {
|
|
26
|
+
if (page.children) {
|
|
27
|
+
return [page].concat(...page.children.map((subPage) => getAllSubPages(subPage)));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return [page];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.getAllSubPages = getAllSubPages;
|
|
34
|
+
//# sourceMappingURL=MenuPage.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuPage.jsx","sourceRoot":"","sources":["../../../../src/react/components/navigation/MenuPage.tsx"],"names":[],"mappings":";;;AAmBA;;;;GAIG;AACH,SAAgB,cAAc,CAC7B,KAAU,EACV,IAAa;IAEb,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAC7C,CAAA;AACF,CAAC;AAPD,wCAOC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAqB,KAAU;IAChE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAS,CAAC,CAAC,CAAA;AAC1D,CAAC;AAFD,gDAEC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAqB,IAAO;IACzD,IAAI,IAAI,CAAC,QAAQ,EAAE;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CACnB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAY,CAAC,CAAC,CAC/D,CAAA;KACD;SAAM;QACN,OAAO,CAAC,IAAI,CAAC,CAAA;KACb;AACF,CAAC;AARD,wCAQC"}
|
|
@@ -7,6 +7,6 @@ export interface RouterProps<T extends MenuPage> {
|
|
|
7
7
|
fallbackComponent?: ReactElement;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Renders the
|
|
10
|
+
* Renders the currently selected page from a tree of pages
|
|
11
11
|
*/
|
|
12
12
|
export declare function Router<T extends MenuPage>({ pages, currentPage, onPageChange, fallbackComponent, }: PropsWithChildren<RouterProps<T>>): JSX.Element;
|
|
@@ -1,16 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Router = void 0;
|
|
30
|
+
const react_1 = __importStar(require("react"));
|
|
31
|
+
const LoadingSpinner_1 = __importDefault(require("../LoadingSpinner"));
|
|
32
|
+
const MenuPage_1 = require("./MenuPage");
|
|
4
33
|
/**
|
|
5
|
-
* Renders the
|
|
34
|
+
* Renders the currently selected page from a tree of pages
|
|
6
35
|
*/
|
|
7
|
-
|
|
8
|
-
const page = useMemo(() =>
|
|
9
|
-
useEffect(() => {
|
|
36
|
+
function Router({ pages = [], currentPage, onPageChange, fallbackComponent, }) {
|
|
37
|
+
const page = (0, react_1.useMemo)(() => (0, MenuPage_1.findPageByName)(pages, currentPage), [pages, currentPage]);
|
|
38
|
+
(0, react_1.useEffect)(() => {
|
|
10
39
|
onPageChange?.(page);
|
|
11
40
|
}, [page]);
|
|
12
|
-
return page?.component ? (<Suspense fallback={<
|
|
13
|
-
{
|
|
14
|
-
</Suspense>) : (fallbackComponent ?? <div>{currentPage} page not found</div>);
|
|
41
|
+
return page?.component ? (<react_1.Suspense fallback={<LoadingSpinner_1.default />}>
|
|
42
|
+
{react_1.default.createElement(page.component, page?.props)}
|
|
43
|
+
</react_1.Suspense>) : (fallbackComponent ?? <div>{currentPage} page not found</div>);
|
|
15
44
|
}
|
|
45
|
+
exports.Router = Router;
|
|
16
46
|
//# sourceMappingURL=Router.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Router.jsx","sourceRoot":"","sources":["../../../../src/react/components/navigation/Router.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Router.jsx","sourceRoot":"","sources":["../../../../src/react/components/navigation/Router.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAMc;AACd,uEAA8C;AAC9C,yCAAqD;AASrD;;GAEG;AACH,SAAgB,MAAM,CAAqB,EAC1C,KAAK,GAAG,EAAE,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,GACkB;IACnC,MAAM,IAAI,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CAAC,IAAA,yBAAc,EAAC,KAAK,EAAE,WAAW,CAAC,EACxC,CAAC,KAAK,EAAE,WAAW,CAAC,CACpB,CAAA;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,YAAY,EAAE,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CACxB,CAAC,gBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAc,CAAC,AAAD,EAAG,CAAC,CACtC;GAAA,CAAC,eAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAClD;EAAA,EAAE,gBAAQ,CAAC,CACX,CAAC,CAAC,CAAC,CACH,iBAAiB,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAE,eAAc,EAAE,GAAG,CAAC,CAC5D,CAAA;AACF,CAAC;AAtBD,wBAsBC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface Props {
|
|
2
|
+
[key: string]: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Convert the given fantom props as string to JS object (@see https://fantom.org/doc/sys/InStream#readProps)
|
|
6
|
+
*/
|
|
7
|
+
export default function fantomPropsToObject(props: string): Props;
|
|
8
|
+
export declare function parseFantomProps(readChar: () => number, unreadChar: (char: number) => void): Props;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert the given fantom props as string to JS object (@see https://fantom.org/doc/sys/InStream#readProps)
|
|
3
|
+
*/
|
|
4
|
+
export default function fantomPropsToObject(props) {
|
|
5
|
+
let i = 0;
|
|
6
|
+
const readChar = () => {
|
|
7
|
+
if (i < props.length) {
|
|
8
|
+
i++;
|
|
9
|
+
return props.charCodeAt(i - 1);
|
|
10
|
+
}
|
|
11
|
+
else
|
|
12
|
+
return -1;
|
|
13
|
+
};
|
|
14
|
+
const unreadChar = () => {
|
|
15
|
+
if (i > 0) {
|
|
16
|
+
i--;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
return parseFantomProps(readChar, unreadChar);
|
|
20
|
+
}
|
|
21
|
+
var UTF_8;
|
|
22
|
+
(function (UTF_8) {
|
|
23
|
+
UTF_8[UTF_8["tab"] = 9] = "tab";
|
|
24
|
+
UTF_8[UTF_8["lf"] = 10] = "lf";
|
|
25
|
+
UTF_8[UTF_8["cr"] = 13] = "cr";
|
|
26
|
+
UTF_8[UTF_8["space"] = 32] = "space";
|
|
27
|
+
UTF_8[UTF_8["numberSign"] = 35] = "numberSign";
|
|
28
|
+
UTF_8[UTF_8["asterisk"] = 42] = "asterisk";
|
|
29
|
+
UTF_8[UTF_8["solidus"] = 47] = "solidus";
|
|
30
|
+
UTF_8[UTF_8["equalSign"] = 61] = "equalSign";
|
|
31
|
+
UTF_8[UTF_8["reverseSolidus"] = 92] = "reverseSolidus";
|
|
32
|
+
UTF_8[UTF_8["n"] = 110] = "n";
|
|
33
|
+
UTF_8[UTF_8["r"] = 114] = "r";
|
|
34
|
+
UTF_8[UTF_8["t"] = 116] = "t";
|
|
35
|
+
UTF_8[UTF_8["u"] = 117] = "u";
|
|
36
|
+
})(UTF_8 || (UTF_8 = {}));
|
|
37
|
+
const isSpace = (char) => char === UTF_8.space ||
|
|
38
|
+
char === UTF_8.tab ||
|
|
39
|
+
char === UTF_8.lf ||
|
|
40
|
+
char === UTF_8.cr;
|
|
41
|
+
const hex = function (c) {
|
|
42
|
+
if (48 <= c && c <= 57)
|
|
43
|
+
return c - 48;
|
|
44
|
+
if (97 <= c && c <= 102)
|
|
45
|
+
return c - 97 + 10;
|
|
46
|
+
if (65 <= c && c <= 70)
|
|
47
|
+
return c - 65 + 10;
|
|
48
|
+
return -1;
|
|
49
|
+
};
|
|
50
|
+
/*
|
|
51
|
+
* Parse the Fantom props file character by character.
|
|
52
|
+
* Implementation based on https://github.com/fantom-lang/fantom/blob/master/src/sys/js/fan/InStream.js
|
|
53
|
+
*/
|
|
54
|
+
export function parseFantomProps(readChar, unreadChar) {
|
|
55
|
+
const props = {};
|
|
56
|
+
let name = '';
|
|
57
|
+
let value = null;
|
|
58
|
+
let inBlockComment = 0;
|
|
59
|
+
let inEndOfLineComment = false;
|
|
60
|
+
let char = UTF_8.space, lastChar = UTF_8.space;
|
|
61
|
+
let lineNum = 1;
|
|
62
|
+
while (true) {
|
|
63
|
+
lastChar = char;
|
|
64
|
+
char = readChar();
|
|
65
|
+
if (char < 0)
|
|
66
|
+
break;
|
|
67
|
+
// end of line
|
|
68
|
+
if (char == UTF_8.lf || char == UTF_8.cr) {
|
|
69
|
+
inEndOfLineComment = false;
|
|
70
|
+
if (lastChar == UTF_8.cr && char == UTF_8.lf)
|
|
71
|
+
continue;
|
|
72
|
+
const n = name.trim();
|
|
73
|
+
if (value !== null) {
|
|
74
|
+
props[n] = value.trim();
|
|
75
|
+
name = '';
|
|
76
|
+
value = null;
|
|
77
|
+
}
|
|
78
|
+
else if (n.length > 0)
|
|
79
|
+
throw new Error('Invalid name/value pair [Line ' + lineNum + ']');
|
|
80
|
+
lineNum++;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// if in comment
|
|
84
|
+
if (inEndOfLineComment)
|
|
85
|
+
continue;
|
|
86
|
+
// block comment
|
|
87
|
+
if (inBlockComment > 0) {
|
|
88
|
+
if (lastChar == UTF_8.solidus && char == UTF_8.asterisk)
|
|
89
|
+
inBlockComment++;
|
|
90
|
+
if (lastChar == UTF_8.asterisk && char == UTF_8.solidus)
|
|
91
|
+
inBlockComment--;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
// equal
|
|
95
|
+
if (char == UTF_8.equalSign && value === null) {
|
|
96
|
+
value = '';
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// line comment
|
|
100
|
+
if (char === UTF_8.numberSign &&
|
|
101
|
+
(lastChar == UTF_8.lf || lastChar == UTF_8.cr)) {
|
|
102
|
+
inEndOfLineComment = true;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// end of line comment
|
|
106
|
+
if (char == UTF_8.solidus && isSpace(lastChar)) {
|
|
107
|
+
const peek = readChar();
|
|
108
|
+
if (peek < 0)
|
|
109
|
+
break;
|
|
110
|
+
if (peek == UTF_8.solidus) {
|
|
111
|
+
inEndOfLineComment = true;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (peek == UTF_8.asterisk) {
|
|
115
|
+
inBlockComment++;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
unreadChar(peek);
|
|
119
|
+
}
|
|
120
|
+
// escape or line continuation
|
|
121
|
+
if (char == UTF_8.reverseSolidus) {
|
|
122
|
+
let peek = readChar();
|
|
123
|
+
if (peek < 0)
|
|
124
|
+
break;
|
|
125
|
+
else if (peek == UTF_8.n)
|
|
126
|
+
char = UTF_8.lf;
|
|
127
|
+
else if (peek == UTF_8.r)
|
|
128
|
+
char = UTF_8.cr;
|
|
129
|
+
else if (peek == UTF_8.t)
|
|
130
|
+
char = UTF_8.tab;
|
|
131
|
+
else if (peek == UTF_8.reverseSolidus)
|
|
132
|
+
char = UTF_8.reverseSolidus;
|
|
133
|
+
else if (peek == UTF_8.cr || peek == UTF_8.lf) {
|
|
134
|
+
// line continuation
|
|
135
|
+
lineNum++;
|
|
136
|
+
if (peek == UTF_8.cr) {
|
|
137
|
+
peek = readChar();
|
|
138
|
+
if (peek != UTF_8.lf)
|
|
139
|
+
unreadChar(peek);
|
|
140
|
+
}
|
|
141
|
+
while (true) {
|
|
142
|
+
peek = readChar();
|
|
143
|
+
if (peek == UTF_8.space || peek == UTF_8.tab)
|
|
144
|
+
continue;
|
|
145
|
+
unreadChar(peek);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
else if (peek == UTF_8.u) {
|
|
151
|
+
const n3 = hex(readChar());
|
|
152
|
+
const n2 = hex(readChar());
|
|
153
|
+
const n1 = hex(readChar());
|
|
154
|
+
const n0 = hex(readChar());
|
|
155
|
+
if (n3 < 0 || n2 < 0 || n1 < 0 || n0 < 0)
|
|
156
|
+
throw new Error('Invalid hex value for \\uxxxx [Line ' + lineNum + ']');
|
|
157
|
+
char = (n3 << 12) | (n2 << 8) | (n1 << 4) | n0;
|
|
158
|
+
}
|
|
159
|
+
else
|
|
160
|
+
throw new Error('Invalid escape sequence [Line ' + lineNum + ']');
|
|
161
|
+
}
|
|
162
|
+
// normal character
|
|
163
|
+
if (value === null)
|
|
164
|
+
name += String.fromCharCode(char);
|
|
165
|
+
else
|
|
166
|
+
value += String.fromCharCode(char);
|
|
167
|
+
}
|
|
168
|
+
const n = name.trim();
|
|
169
|
+
if (value !== null) {
|
|
170
|
+
props[n] = value.trim();
|
|
171
|
+
}
|
|
172
|
+
else if (n.length > 0)
|
|
173
|
+
throw new Error('Invalid name/value pair [Line ' + lineNum + ']');
|
|
174
|
+
return props;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=fantomPropsToObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fantomPropsToObject.js","sourceRoot":"","sources":["../../src/fantomProps/fantomPropsToObject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import readFantomPropsFile from './readFantomPropsFile';
|
|
3
|
+
/**
|
|
4
|
+
* Converts props file to json file.
|
|
5
|
+
*/
|
|
6
|
+
export default async function generateJsonFromFantomPropsFile(inputPath = '../locale/en.props', outputPath = './src/localeKeys.json') {
|
|
7
|
+
const result = await readFantomPropsFile(inputPath);
|
|
8
|
+
fs.writeFileSync(outputPath, JSON.stringify(result, null, '\t'));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=generateJsonFromFantomPropsFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateJsonFromFantomPropsFile.js","sourceRoot":"","sources":["../../src/fantomProps/generateJsonFromFantomPropsFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AAEvD;;GAEG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,+BAA+B,CAC5D,SAAS,GAAG,oBAAoB,EAChC,UAAU,GAAG,uBAAuB;IAEpC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAEnD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AACjE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function localePropsToJson(inputPath?: string, outputPath?: string, includeOnlyPrefixedBy?: string): Promise<void>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import readFantomPropsFile from './readFantomPropsFile';
|
|
3
|
+
export default async function localePropsToJson(inputPath = '../locale/en.props', outputPath = './src/localeKeys.json', includeOnlyPrefixedBy = '') {
|
|
4
|
+
const props = await readFantomPropsFile(inputPath);
|
|
5
|
+
let localeKeys;
|
|
6
|
+
if (includeOnlyPrefixedBy) {
|
|
7
|
+
localeKeys = Object.fromEntries(Object.keys(props)
|
|
8
|
+
.filter((key) => key.startsWith(includeOnlyPrefixedBy))
|
|
9
|
+
.map((key) => [
|
|
10
|
+
key.replace(includeOnlyPrefixedBy, '').replaceAll('.', '_'),
|
|
11
|
+
key,
|
|
12
|
+
]));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
localeKeys = Object.fromEntries(Object.keys(props).map((key) => [key.replaceAll('.', '_'), key]));
|
|
16
|
+
}
|
|
17
|
+
fs.writeFileSync(outputPath, JSON.stringify(localeKeys, null, '\t'));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=localePropsToJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localePropsToJson.js","sourceRoot":"","sources":["../../src/fantomProps/localePropsToJson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,iBAAiB,CAC9C,SAAS,GAAG,oBAAoB,EAChC,UAAU,GAAG,uBAAuB,EACpC,qBAAqB,GAAG,EAAE;IAE1B,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAElD,IAAI,UAAU,CAAA;IACd,IAAI,qBAAqB,EAAE;QAC1B,UAAU,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aAChB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YACb,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;YAC3D,GAAG;SACH,CAAC,CACH,CAAA;KACD;SAAM;QACN,UAAU,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAChE,CAAA;KACD;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AACrE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { parseFantomProps } from './fantomPropsToObject';
|
|
3
|
+
/**
|
|
4
|
+
* Asynchronously read the given Fantom props file to JS object (@see https://fantom.org/doc/sys/InStream#readProps)
|
|
5
|
+
*/
|
|
6
|
+
export default function readFantomPropsFile(path) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const fileStream = fs.createReadStream(path);
|
|
9
|
+
fileStream.once('readable', function () {
|
|
10
|
+
const readChar = () => {
|
|
11
|
+
return fileStream.read(1)?.[0] ?? -1;
|
|
12
|
+
};
|
|
13
|
+
const unreadChar = (char) => {
|
|
14
|
+
return fileStream.unshift(new Uint8Array([char]));
|
|
15
|
+
};
|
|
16
|
+
try {
|
|
17
|
+
resolve(parseFantomProps(readChar, unreadChar));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
reject(error);
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
try {
|
|
24
|
+
fileStream.close();
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
console.error(err);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=readFantomPropsFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readFantomPropsFile.js","sourceRoot":"","sources":["../../src/fantomProps/readFantomPropsFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,gBAAgB,EAAS,MAAM,uBAAuB,CAAA;AAE/D;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,IAAY;IACvD,OAAO,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QAE5C,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE;YAC3B,MAAM,QAAQ,GAAG,GAAW,EAAE;gBAC7B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YACrC,CAAC,CAAA;YAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;gBACnC,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAClD,CAAC,CAAA;YAED,IAAI;gBACH,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;aAC/C;YAAC,OAAO,KAAK,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,CAAA;aACb;oBAAS;gBACT,IAAI;oBACH,UAAU,CAAC,KAAK,EAAE,CAAA;iBAClB;gBAAC,OAAO,GAAG,EAAE;oBACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;iBAClB;aACD;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACH,CAAC"}
|