├── .appveyor.yml
├── .gitattributes
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── img
├── fuse_sdk.png
├── fuselibs.png
├── fuseopen.png
└── uno.png
├── package-lock.json
├── package.json
├── scripts
├── changelog.js
└── check-dependencies.js
├── test
├── Main.ux
└── app.unoproj
└── uno.js
/.appveyor.yml:
--------------------------------------------------------------------------------
1 | version: '{build}'
2 | image: Visual Studio 2022
3 |
4 | environment:
5 | nodejs_version: 16
6 |
7 | install:
8 | - ps: Install-Product node $env:nodejs_version
9 |
10 | build_script:
11 | - npm install
12 | - npm pack
13 |
14 | artifacts:
15 | - path: fuse-sdk-*.tgz
16 |
17 | test_script:
18 | - bash -c "npm install -g fuse-sdk-*.tgz"
19 | - uno build app
20 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .uno/
2 | build/
3 | node_modules/
4 | *.tgz
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project
7 | and our community a harassment-free experience for everyone, regardless of
8 | age, body size, disability, ethnicity, gender identity and expression, level
9 | of experience, nationality, personal appearance, race, religion, or sexual
10 | identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention
26 | or advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of
37 | acceptable behavior and are expected to take appropriate and fair corrective
38 | action in response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem
44 | inappropriate, threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an
52 | appointed representative at an online or offline event. Representation of a
53 | project may be further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at fuse-open@googlegroups.com.
59 | The project team will review and investigate all complaints, and will
60 | respond in a way that it deems appropriate to the circumstances. The project
61 | team is obligated to maintain confidentiality with regard to the reporter
62 | of an incident. Further details of specific enforcement policies may be
63 | posted separately.
64 |
65 | Project maintainers who do not follow or enforce the Code of Conduct in good
66 | faith may face temporary or permanent repercussions as determined by other
67 | members of the project's leadership.
68 |
69 | ## Attribution
70 |
71 | This Code of Conduct is adapted from the
72 | [Contributor Covenant][homepage], version 1.4,
73 | available at [http://contributor-covenant.org/version/1/4][version]
74 |
75 | [homepage]: http://contributor-covenant.org
76 | [version]: http://contributor-covenant.org/version/1/4/
77 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | If you want to contribute to this repository, please first discuss the
4 | changes you want to make with the repository's owners, for example via
5 | an issue or on [Slack](https://fusecommunity.slack.com).
6 |
7 | This project has a [code of conduct](#code-of-conduct). Please follow
8 | it in all your interactions related to the project.
9 |
10 | We also have a [contributor license agreement][1], that we require
11 | contributors to sign in order to have their changes considered for
12 | inclusion.
13 |
14 | ## Code of Conduct
15 |
16 | Please read and adhere to our [Code of Conduct](CODE_OF_CONDUCT.md)
17 |
18 | [1]: https://cla-assistant.io/fusetools/fuselibs-public
19 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (C) 2019-present Fuse Open
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
4 | associated documentation files (the "Software"), to deal in the Software without restriction,
5 | including without limitation the rights to use, copy, modify, merge, publish, distribute,
6 | sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
7 | furnished to do so, subject to the following conditions:
8 |
9 | The above copyright notice and this permission notice shall be included in all copies or
10 | substantial portions of the Software.
11 |
12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
13 | NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
14 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
15 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
16 | OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |

2 | Build beautiful, high-performance iOS and Android apps with a single codebase.
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | ---
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | ---
28 |
29 | Fuse SDK is a set of open-source tools and libraries for cross-platform mobile app development.
30 |
31 | Build user interfaces using the easy to learn [UX markup language](https://fuseopen.com/docs/ux-markup/ux-markup.html), and add [JavaScript or TypeScript](https://fuseopen.com/docs/fusejs/fusejs.html) for business logic. UX markup is a declarative, XML based language for expressing user interfaces, layout, effects and motion, where animation is a first class citizen, and where you can easily produce advanced visuals and user interfaces.
32 |
33 | Access lower level features via the very powerful [Uno programming language](https://fuseopen.com/docs/uno/uno-lang). This is a modern, C#-like language where you can seamlessly access any native API in Java, Objective-C and C/C++, implement new Fuse components, or just write some superfast code. Uno is optimized for performance and portability, compiles down to native C++, and is one of the fastest and most versatile programming languages around. The UI-engine and most run-time features in Fuse are implemented in Uno.
34 |
35 | For rapid development, you can even build and test apps directly on your development machine. Fuse apps run on Linux, Mac and Windows, in addition to Android and iOS.
36 |
37 | There's also a visual tool suite called [fuse X](https://fuse-x.com), based on Fuse SDK, offering powerful app creation tools, realtime preview (hot reload) and more, available for macOS and Windows.
38 |
39 | ## Install
40 |
41 | ```shell
42 | npm install fuse-sdk
43 | ```
44 |
45 | This will install Fuse SDK, including [`uno`](https://github.com/fuse-open/uno) and [a set of libraries](https://github.com/fuse-open/fuselibs) used to build [Fuse](https://fuseopen.com) apps.
46 |
47 | ### Beta releases
48 |
49 | We are currently working on [`beta-3.0`](https://github.com/fuse-open/fuse-sdk/tree/beta-3.0). Releases made from this branch are tagged `@beta` on NPM.
50 |
51 | ## Usage
52 |
53 | Please refer to the following links for information about using Fuse SDK.
54 |
55 | * A quick introduction to using Fuse SDK can be found in [this blog post](https://medium.com/@mortendanielfornes/introducing-fuse-sdk-890180044c13).
56 |
57 | * Check out the [official documentation](https://fuseopen.com/docs), [examples](https://fuseopen.com/examples/) and [source code](https://github.com/fuse-open).
58 |
59 | * Come chat with us on [Slack](https://fusecommunity.slack.com/) and join the [forums](https://forums.fusetools.com/).
60 |
61 | * The old, but still useful [YouTube playlist](https://www.youtube.com/playlist?list=PLdlqWm6b-XALJgM3fGa4q95Yipsgb8Q1o).
62 |
63 | ## Contributors
64 |
65 | ### Code Contributors
66 |
67 | This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]
68 |
69 |
70 | ### Financial Contributors
71 |
72 | Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/fuse-open/contribute)]
73 |
74 | #### Individuals
75 |
76 |
77 |
78 | #### Organizations
79 |
80 | Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/fuse-open/contribute)]
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/img/fuse_sdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuse-open/fuse-sdk/c7dd1b24b738563296c78610deecb5ba3c448fe8/img/fuse_sdk.png
--------------------------------------------------------------------------------
/img/fuselibs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuse-open/fuse-sdk/c7dd1b24b738563296c78610deecb5ba3c448fe8/img/fuselibs.png
--------------------------------------------------------------------------------
/img/fuseopen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuse-open/fuse-sdk/c7dd1b24b738563296c78610deecb5ba3c448fe8/img/fuseopen.png
--------------------------------------------------------------------------------
/img/uno.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuse-open/fuse-sdk/c7dd1b24b738563296c78610deecb5ba3c448fe8/img/uno.png
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fuse-sdk",
3 | "version": "3.0.0-beta.4",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "fuse-sdk",
9 | "version": "3.0.0-beta.4",
10 | "license": "MIT",
11 | "dependencies": {
12 | "@fuse-open/fuselibs": "~3.0.0-beta.9",
13 | "@fuse-open/tsconfig": "~2.7.0",
14 | "@fuse-open/types": "~2.7.1",
15 | "@fuse-open/uno": "~3.0.0-beta.10"
16 | },
17 | "bin": {
18 | "uno": "uno.js"
19 | },
20 | "devDependencies": {
21 | "axios": "^1.6.7"
22 | },
23 | "funding": {
24 | "type": "opencollective",
25 | "url": "https://opencollective.com/fuse-open"
26 | }
27 | },
28 | "node_modules/@fuse-open/fuselibs": {
29 | "version": "3.0.0-beta.9",
30 | "resolved": "https://registry.npmjs.org/@fuse-open/fuselibs/-/fuselibs-3.0.0-beta.9.tgz",
31 | "integrity": "sha512-H6ROayirOFHp9GlKVUpmA2OAtX7F+ew6EUQ/ad/arqsSs/XNirBEkFrCaclNFBLrU8jze9l9YXg4xs3GXH/5qQ==",
32 | "funding": {
33 | "type": "opencollective",
34 | "url": "https://opencollective.com/fuse-open"
35 | }
36 | },
37 | "node_modules/@fuse-open/opentk": {
38 | "version": "3.2.0",
39 | "resolved": "https://registry.npmjs.org/@fuse-open/opentk/-/opentk-3.2.0.tgz",
40 | "integrity": "sha512-LFXms2H9+3k12Ijcaz4aQ+9PzHn6KiN1ee/0T7iwkraTGy9f8g/SUCmLa7Co/Bzrr0Ykj2u7eYoT7QXYtutOEA=="
41 | },
42 | "node_modules/@fuse-open/transpiler": {
43 | "version": "1.18.0",
44 | "resolved": "https://registry.npmjs.org/@fuse-open/transpiler/-/transpiler-1.18.0.tgz",
45 | "integrity": "sha512-mqxz4Acz9EJ6yPFNJfnGA/4xY+ePWcsyn/eTh2NmvqREpbbtNB/08hTTaFBBjPnxqXqDONJ3N1JZdofgjyx6vQ==",
46 | "bin": {
47 | "fusejs-transpiler": "bin/cli.js"
48 | }
49 | },
50 | "node_modules/@fuse-open/tsconfig": {
51 | "version": "2.7.0",
52 | "resolved": "https://registry.npmjs.org/@fuse-open/tsconfig/-/tsconfig-2.7.0.tgz",
53 | "integrity": "sha512-0vpHoIyu2FxvnKZ6GyJo78D2zBei39kd5mHqa/Bly5StjxBc4DHPhRiqIuwYRi5MliriA9biq4gmnhLOEdWM0Q=="
54 | },
55 | "node_modules/@fuse-open/types": {
56 | "version": "2.7.1",
57 | "resolved": "https://registry.npmjs.org/@fuse-open/types/-/types-2.7.1.tgz",
58 | "integrity": "sha512-lnO0eeAUt+En3AAMmeenq2o3Q6izUreFEqVd9ePeccMz09XPyygnFx1BSAoy6UNEVcks1Ptuyy/Cy+8dZ/VrzQ=="
59 | },
60 | "node_modules/@fuse-open/uno": {
61 | "version": "3.0.0-beta.10",
62 | "resolved": "https://registry.npmjs.org/@fuse-open/uno/-/uno-3.0.0-beta.10.tgz",
63 | "integrity": "sha512-44Cc6VVDHMnUzO7q5lqGG/bAjX0HSyMQ5K1XigJtxuDiNBnbxhEqeq738AY7kljHtgc21sEP0m6X1MKALYlI+g==",
64 | "hasInstallScript": true,
65 | "dependencies": {
66 | "@fuse-open/opentk": "^3.2.0",
67 | "@fuse-open/transpiler": "^1.18.0",
68 | "dotnet-run": "^2.0.0",
69 | "xcode-devteams": "^1.0.1"
70 | },
71 | "bin": {
72 | "uno": "bin/uno.js"
73 | },
74 | "funding": {
75 | "type": "opencollective",
76 | "url": "https://opencollective.com/fuse-open"
77 | }
78 | },
79 | "node_modules/asynckit": {
80 | "version": "0.4.0",
81 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
82 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
83 | "dev": true
84 | },
85 | "node_modules/axios": {
86 | "version": "1.8.2",
87 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz",
88 | "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==",
89 | "dev": true,
90 | "license": "MIT",
91 | "dependencies": {
92 | "follow-redirects": "^1.15.6",
93 | "form-data": "^4.0.0",
94 | "proxy-from-env": "^1.1.0"
95 | }
96 | },
97 | "node_modules/combined-stream": {
98 | "version": "1.0.8",
99 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
100 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
101 | "dev": true,
102 | "dependencies": {
103 | "delayed-stream": "~1.0.0"
104 | },
105 | "engines": {
106 | "node": ">= 0.8"
107 | }
108 | },
109 | "node_modules/delayed-stream": {
110 | "version": "1.0.0",
111 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
112 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
113 | "dev": true,
114 | "engines": {
115 | "node": ">=0.4.0"
116 | }
117 | },
118 | "node_modules/dotnet-run": {
119 | "version": "2.0.0",
120 | "resolved": "https://registry.npmjs.org/dotnet-run/-/dotnet-run-2.0.0.tgz",
121 | "integrity": "sha512-P2md5E7tHUlFW1jLSG1Lq4RY71lu1BytQSvjRAqIEv1ktNiO/SCPOH6Wirv2iGY5RvQ7+KAkHaTiyoJE+FufRg==",
122 | "hasInstallScript": true,
123 | "dependencies": {
124 | "readline-sync": "^1.4.10",
125 | "which": "^2.0.2"
126 | }
127 | },
128 | "node_modules/follow-redirects": {
129 | "version": "1.15.6",
130 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
131 | "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
132 | "dev": true,
133 | "funding": [
134 | {
135 | "type": "individual",
136 | "url": "https://github.com/sponsors/RubenVerborgh"
137 | }
138 | ],
139 | "engines": {
140 | "node": ">=4.0"
141 | },
142 | "peerDependenciesMeta": {
143 | "debug": {
144 | "optional": true
145 | }
146 | }
147 | },
148 | "node_modules/form-data": {
149 | "version": "4.0.0",
150 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
151 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
152 | "dev": true,
153 | "dependencies": {
154 | "asynckit": "^0.4.0",
155 | "combined-stream": "^1.0.8",
156 | "mime-types": "^2.1.12"
157 | },
158 | "engines": {
159 | "node": ">= 6"
160 | }
161 | },
162 | "node_modules/isexe": {
163 | "version": "2.0.0",
164 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
165 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
166 | },
167 | "node_modules/mime-db": {
168 | "version": "1.52.0",
169 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
170 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
171 | "dev": true,
172 | "engines": {
173 | "node": ">= 0.6"
174 | }
175 | },
176 | "node_modules/mime-types": {
177 | "version": "2.1.35",
178 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
179 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
180 | "dev": true,
181 | "dependencies": {
182 | "mime-db": "1.52.0"
183 | },
184 | "engines": {
185 | "node": ">= 0.6"
186 | }
187 | },
188 | "node_modules/proxy-from-env": {
189 | "version": "1.1.0",
190 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
191 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
192 | "dev": true
193 | },
194 | "node_modules/readline-sync": {
195 | "version": "1.4.10",
196 | "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz",
197 | "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==",
198 | "engines": {
199 | "node": ">= 0.8.0"
200 | }
201 | },
202 | "node_modules/which": {
203 | "version": "2.0.2",
204 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
205 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
206 | "dependencies": {
207 | "isexe": "^2.0.0"
208 | },
209 | "bin": {
210 | "node-which": "bin/node-which"
211 | },
212 | "engines": {
213 | "node": ">= 8"
214 | }
215 | },
216 | "node_modules/xcode-devteams": {
217 | "version": "1.0.1",
218 | "resolved": "https://registry.npmjs.org/xcode-devteams/-/xcode-devteams-1.0.1.tgz",
219 | "integrity": "sha512-7TbAgRpOqisPkQUwQzUKw5gJachoIu9PZGVswqxEbFLaT7l3fWTKGM+NgCIrZEG/gySWm3bILC3bHfwhqMGuuw==",
220 | "bin": {
221 | "xcode-devteams": "cli.js"
222 | }
223 | }
224 | }
225 | }
226 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fuse-sdk",
3 | "version": "3.0.0-beta.4",
4 | "description": "Build beautiful, high-performance iOS and Android apps with a single codebase.",
5 | "dependencies": {
6 | "@fuse-open/fuselibs": "~3.0.0-beta.9",
7 | "@fuse-open/tsconfig": "~2.7.0",
8 | "@fuse-open/types": "~2.7.1",
9 | "@fuse-open/uno": "~3.0.0-beta.10"
10 | },
11 | "devDependencies": {
12 | "axios": "^1.6.7"
13 | },
14 | "bin": {
15 | "uno": "uno.js"
16 | },
17 | "files": [
18 | "uno.js"
19 | ],
20 | "scripts": {
21 | "changelog": "node scripts/changelog.js",
22 | "prepack": "node scripts/check-dependencies.js",
23 | "test": "uno build test",
24 | "uno": "node uno.js"
25 | },
26 | "repository": {
27 | "type": "git",
28 | "url": "git+https://github.com/fuse-open/fuse-sdk.git"
29 | },
30 | "keywords": [
31 | "fuse",
32 | "cross-platform",
33 | "mobile",
34 | "app",
35 | "framework",
36 | "javascript",
37 | "typescript",
38 | "uno",
39 | "ux"
40 | ],
41 | "author": "Fuse Open",
42 | "license": "MIT",
43 | "bugs": {
44 | "url": "https://github.com/fuse-open/fuse-sdk/issues"
45 | },
46 | "funding": {
47 | "type": "opencollective",
48 | "url": "https://opencollective.com/fuse-open"
49 | },
50 | "homepage": "https://github.com/fuse-open/fuse-sdk#readme"
51 | }
52 |
--------------------------------------------------------------------------------
/scripts/changelog.js:
--------------------------------------------------------------------------------
1 | const axios = require("axios")
2 |
3 | const SDK_VERSION = require("../package.json").version
4 | const UNO_VERSION = "3.0.0-beta.10"
5 | const FUSELIBS_VERSION = "3.0.0-beta.9"
6 | const LAST_VERSION = "2.9.0"
7 |
8 | async function getChangelog(url) {
9 | const request = await axios.get(url)
10 | const data = request.data
11 | const start = data.indexOf("", data.indexOf("Changes since"))
12 | const end = data.indexOf("", start)
13 | return data.substring(start, end)
14 | }
15 |
16 | /** Returns a list of patch versions, e.g. 2.9.2 => [2.9.2, 2.9.1, 2.9.0] */
17 | function getPatchVersions(version) {
18 | const versions = [version]
19 | const versionParts = version.split(".")
20 | const patchParts = versionParts[2].split("-")
21 |
22 | for (let patch = Number.parseInt(patchParts[0]); --patch >= 0;) {
23 | patchParts[0] = patch.toString()
24 | versionParts[2] = patchParts.join("-")
25 | versions.push(versionParts.join("."))
26 | }
27 |
28 | return versions
29 | }
30 |
31 | async function main() {
32 | const uno = await Promise.all(getPatchVersions(UNO_VERSION).map(v => getChangelog(`https://github.com/fuse-open/uno/releases/tag/v${v}`)))
33 | const fuselibs = await Promise.all(getPatchVersions(FUSELIBS_VERSION).map(v => getChangelog(`https://github.com/fuse-open/fuselibs/releases/tag/v${v}`)))
34 | console.log(`### [Install](https://www.npmjs.com/package/fuse-sdk)
35 |
36 | \`\`\`
37 | npm install fuse-sdk@${SDK_VERSION}
38 | \`\`\`
39 |
40 | ### Changes since v${LAST_VERSION}
41 |
42 | ### Fuselibs ${FUSELIBS_VERSION}
43 |
44 |
45 | Click to see the full changelog
46 | ${fuselibs.join("\n\n")}
47 |
48 |
49 | ### Uno ${UNO_VERSION}
50 |
51 |
52 | Click to see the full changelog
53 | ${uno.join("\n\n")}
54 | `)
55 | }
56 |
57 | main()
58 | .then(() => {
59 | process.exit(0)
60 | })
61 | .catch(error => {
62 | console.error(error)
63 | process.exit(1)
64 | })
65 |
--------------------------------------------------------------------------------
/scripts/check-dependencies.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs")
2 | const path = require("path")
3 |
4 | const json = fs.readFileSync(path.join(__dirname, "..", "package.json"))
5 | const package = JSON.parse(json)
6 |
7 | // https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number
8 | function isAllowed(version) {
9 | return version.startsWith("~") ||
10 | !isNaN(version[0]) ||
11 | version.startsWith("https://")
12 | }
13 |
14 | let failed = 0
15 |
16 | for (let name in package.dependencies) {
17 | if (!isAllowed(package.dependencies[name])) {
18 | console.error(`package.json: The version number of ${name} must start with ~ or a number`)
19 | failed++
20 | }
21 | }
22 |
23 | if (failed) {
24 | console.log("\nWe want to upgrade only patch versions of Uno, Fuselibs and other dependencies.")
25 | console.log("Minor version upgrades require a new Fuse SDK release to be made.")
26 | }
27 |
28 | process.exit(failed)
29 |
--------------------------------------------------------------------------------
/test/Main.ux:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/test/app.unoproj:
--------------------------------------------------------------------------------
1 | {
2 | "Packages": [
3 | "Fuse",
4 | "FuseJS"
5 | ],
6 | "Includes": [
7 | "*"
8 | ]
9 | }
--------------------------------------------------------------------------------
/uno.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | const uno = require("@fuse-open/uno")
3 |
4 | uno(process.argv.slice(2))
5 | .then(process.exit)
6 |
--------------------------------------------------------------------------------