@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.
Files changed (91) hide show
  1. package/dist/fantomProps/fantomPropsToObject.js +7 -2
  2. package/dist/fantomProps/fantomPropsToObject.js.map +1 -1
  3. package/dist/fantomProps/generateJsonFromFantomPropsFile.d.ts +3 -0
  4. package/dist/fantomProps/generateJsonFromFantomPropsFile.js +37 -7
  5. package/dist/fantomProps/generateJsonFromFantomPropsFile.js.map +1 -1
  6. package/dist/fantomProps/localePropsToJson.d.ts +1 -0
  7. package/dist/fantomProps/localePropsToJson.js +48 -0
  8. package/dist/fantomProps/localePropsToJson.js.map +1 -0
  9. package/dist/fantomProps/readFantomPropsFile.js +30 -4
  10. package/dist/fantomProps/readFantomPropsFile.js.map +1 -1
  11. package/dist/fin5Top/fin5Top.js +9 -5
  12. package/dist/fin5Top/fin5Top.js.map +1 -1
  13. package/dist/fin5Top/getFin5BinUrl.js +6 -2
  14. package/dist/fin5Top/getFin5BinUrl.js.map +1 -1
  15. package/dist/fin5Top/openFin5Alarm.js +10 -6
  16. package/dist/fin5Top/openFin5Alarm.js.map +1 -1
  17. package/dist/fin5Top/openFin5Historian.js +10 -6
  18. package/dist/fin5Top/openFin5Historian.js.map +1 -1
  19. package/dist/index.d.ts +12 -3
  20. package/dist/index.js +37 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/react/components/{ErrorDisplayer/index.d.ts → ErrorDisplayer.d.ts} +0 -0
  23. package/dist/react/components/ErrorDisplayer.jsx +44 -0
  24. package/dist/react/components/ErrorDisplayer.jsx.map +1 -0
  25. package/dist/react/components/{LoadingSpinner/index.d.ts → LoadingSpinner.d.ts} +0 -0
  26. package/dist/react/components/LoadingSpinner.jsx +12 -0
  27. package/dist/react/components/LoadingSpinner.jsx.map +1 -0
  28. package/dist/react/components/navigation/BasicLayout.d.ts +20 -0
  29. package/dist/react/components/navigation/BasicLayout.jsx +127 -0
  30. package/dist/react/components/navigation/BasicLayout.jsx.map +1 -0
  31. package/dist/react/components/navigation/{MenuPage/index.d.ts → MenuPage.d.ts} +1 -1
  32. package/dist/react/components/navigation/MenuPage.jsx +34 -0
  33. package/dist/react/components/navigation/MenuPage.jsx.map +1 -0
  34. package/dist/react/components/navigation/Router.d.ts +1 -1
  35. package/dist/react/components/navigation/Router.jsx +40 -10
  36. package/dist/react/components/navigation/Router.jsx.map +1 -1
  37. package/dist_es/fantomProps/fantomPropsToObject.d.ts +8 -0
  38. package/dist_es/fantomProps/fantomPropsToObject.js +176 -0
  39. package/dist_es/fantomProps/fantomPropsToObject.js.map +1 -0
  40. package/dist_es/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -0
  41. package/dist_es/fantomProps/generateJsonFromFantomPropsFile.js +10 -0
  42. package/dist_es/fantomProps/generateJsonFromFantomPropsFile.js.map +1 -0
  43. package/dist_es/fantomProps/localePropsToJson.d.ts +1 -0
  44. package/dist_es/fantomProps/localePropsToJson.js +19 -0
  45. package/dist_es/fantomProps/localePropsToJson.js.map +1 -0
  46. package/dist_es/fantomProps/readFantomPropsFile.d.ts +5 -0
  47. package/dist_es/fantomProps/readFantomPropsFile.js +33 -0
  48. package/dist_es/fantomProps/readFantomPropsFile.js.map +1 -0
  49. package/dist_es/fin5Top/fin5Top.d.ts +111 -0
  50. package/dist_es/fin5Top/fin5Top.js +52 -0
  51. package/dist_es/fin5Top/fin5Top.js.map +1 -0
  52. package/dist_es/fin5Top/getFin5BinUrl.d.ts +2 -0
  53. package/dist_es/fin5Top/getFin5BinUrl.js +3 -0
  54. package/dist_es/fin5Top/getFin5BinUrl.js.map +1 -0
  55. package/dist_es/fin5Top/openFin5Alarm.d.ts +22 -0
  56. package/dist_es/fin5Top/openFin5Alarm.js +17 -0
  57. package/dist_es/fin5Top/openFin5Alarm.js.map +1 -0
  58. package/dist_es/fin5Top/openFin5Historian.d.ts +3 -0
  59. package/dist_es/fin5Top/openFin5Historian.js +13 -0
  60. package/dist_es/fin5Top/openFin5Historian.js.map +1 -0
  61. package/dist_es/index.d.ts +12 -0
  62. package/dist_es/index.js +22 -0
  63. package/dist_es/index.js.map +1 -0
  64. package/dist_es/react/components/ErrorDisplayer.d.ts +19 -0
  65. package/{dist/react/components/ErrorDisplayer/index.jsx → dist_es/react/components/ErrorDisplayer.jsx} +1 -1
  66. package/{dist/react/components/ErrorDisplayer/index.jsx.map → dist_es/react/components/ErrorDisplayer.jsx.map} +1 -1
  67. package/dist_es/react/components/LoadingSpinner.d.ts +3 -0
  68. package/{dist/react/components/LoadingSpinner/index.jsx → dist_es/react/components/LoadingSpinner.jsx} +1 -1
  69. package/{dist/react/components/LoadingSpinner/index.jsx.map → dist_es/react/components/LoadingSpinner.jsx.map} +1 -1
  70. package/dist_es/react/components/navigation/BasicLayout.d.ts +20 -0
  71. package/{dist/react/components/navigation/BasicLayout/index.jsx → dist_es/react/components/navigation/BasicLayout.jsx} +37 -41
  72. package/dist_es/react/components/navigation/BasicLayout.jsx.map +1 -0
  73. package/dist_es/react/components/navigation/MenuPage.d.ts +33 -0
  74. package/{dist/react/components/navigation/MenuPage/index.jsx → dist_es/react/components/navigation/MenuPage.jsx} +2 -2
  75. package/dist_es/react/components/navigation/MenuPage.jsx.map +1 -0
  76. package/dist_es/react/components/navigation/Router.d.ts +12 -0
  77. package/dist_es/react/components/navigation/Router.jsx +16 -0
  78. package/dist_es/react/components/navigation/Router.jsx.map +1 -0
  79. package/package.json +11 -9
  80. package/dist/fantomProps/index.d.ts +0 -3
  81. package/dist/fantomProps/index.js +0 -4
  82. package/dist/fantomProps/index.js.map +0 -1
  83. package/dist/fin5Top/index.d.ts +0 -4
  84. package/dist/fin5Top/index.js +0 -5
  85. package/dist/fin5Top/index.js.map +0 -1
  86. package/dist/react/components/index.d.ts +0 -5
  87. package/dist/react/components/index.js +0 -6
  88. package/dist/react/components/index.js.map +0 -1
  89. package/dist/react/components/navigation/BasicLayout/index.d.ts +0 -11
  90. package/dist/react/components/navigation/BasicLayout/index.jsx.map +0 -1
  91. 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 getPage<T extends MenuPage>(pages: T[], name?: string): T | undefined;
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 current selected page from a tree of pages
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
- import React, { Suspense, useEffect, useMemo, } from 'react';
2
- import LoadingSpinner from '../LoadingSpinner';
3
- import { getPage } from './MenuPage';
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 current selected page from a tree of pages
34
+ * Renders the currently selected page from a tree of pages
6
35
  */
7
- export function Router({ pages = [], currentPage, onPageChange, fallbackComponent, }) {
8
- const page = useMemo(() => getPage(pages, currentPage), [pages, currentPage]);
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={<LoadingSpinner />}>
13
- {React.createElement(page.component, page?.props)}
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,OAAO,KAAK,EAAE,EAGb,QAAQ,EACR,SAAS,EACT,OAAO,GACP,MAAM,OAAO,CAAA;AACd,OAAO,cAAc,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAY,MAAM,YAAY,CAAA;AAS9C;;GAEG;AACH,MAAM,UAAU,MAAM,CAAqB,EAC1C,KAAK,GAAG,EAAE,EACV,WAAW,EACX,YAAY,EACZ,iBAAiB,GACkB;IACnC,MAAM,IAAI,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,EACjC,CAAC,KAAK,EAAE,WAAW,CAAC,CACpB,CAAA;IAED,SAAS,CAAC,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,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,AAAD,EAAG,CAAC,CACtC;GAAA,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAClD;EAAA,EAAE,QAAQ,CAAC,CACX,CAAC,CAAC,CAAC,CACH,iBAAiB,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAE,eAAc,EAAE,GAAG,CAAC,CAC5D,CAAA;AACF,CAAC"}
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,4 @@
1
+ /**
2
+ * Converts props file to json file.
3
+ */
4
+ export default function generateJsonFromFantomPropsFile(inputPath?: string, outputPath?: string): Promise<void>;
@@ -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,5 @@
1
+ import { Props } from './fantomPropsToObject';
2
+ /**
3
+ * Asynchronously read the given Fantom props file to JS object (@see https://fantom.org/doc/sys/InStream#readProps)
4
+ */
5
+ export default function readFantomPropsFile(path: string): Promise<Props>;
@@ -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"}