Skip to content

Release/14.1.0 - Extension Data #470

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 28 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f64e355
chore: Add 13.1.0 upcoming strings for crowdin
colin969 Dec 15, 2024
28c974e
chore: Final push of 13.1.0 strings for crowdin
colin969 Feb 10, 2025
fd6d1b1
Merge branch 'release/14.0.0' into develop
colin969 Feb 15, 2025
8f52375
Merge branch 'hotfix/14.0.1' into develop
colin969 Feb 17, 2025
7661776
Merge branch 'hotfix/14.0.2' into develop
colin969 Apr 28, 2025
a782aa2
feat: Extension data + NGA proof of concept
colin969 Apr 27, 2025
f91f94e
feat: Introduce React Compiler + Rsbuild
colin969 Apr 28, 2025
3a37840
fix: Update eslint plugins blocking install
colin969 Apr 28, 2025
f7fb1ef
fix: Even more linting fixes
colin969 Apr 28, 2025
edc0547
refactor: Adjust many react components to be compatible with the reac…
colin969 Apr 28, 2025
9f33bcc
fix: Fix remaining renderer eslint problems. Still a few non-blocking…
colin969 Apr 28, 2025
7bd9cdd
fix: When dragging a selected curation, move all selected to the new …
colin969 Apr 28, 2025
4e293df
feat: Migration to React 19 WIP
colin969 Apr 29, 2025
4dbce71
fix: Various react 19 fixes
colin969 Apr 29, 2025
a85980b
refactor: Move LogsPage and BrowsePage to functional components
colin969 Apr 30, 2025
ed367aa
refactor: More components moved to functionals
colin969 Apr 30, 2025
e6303eb
feat: Game List icons for extensions
colin969 Apr 30, 2025
19e8a71
feat: Searchables
colin969 May 1, 2025
3c2a4e4
feat: Extension ordering support
colin969 May 2, 2025
ccb7a61
fix: Image paths fixed
colin969 May 3, 2025
45ea6a0
feat: Move to Module Federation for loaded components
colin969 May 5, 2025
0334f00
refactor: Move ruffle page into Ruffle extension
colin969 May 6, 2025
c7cc2ef
refactor: Better module federation definitions in extensions
colin969 May 6, 2025
f644185
refactor: Make launch embed a toggle to replace standalone
colin969 May 8, 2025
91f6ee2
fix: Update deprecated electron methods
colin969 May 8, 2025
f62cce2
fix: Revert websocket call changes. Typings are wrong?
colin969 May 8, 2025
b856d7e
fix: Cap window size to 200px min
colin969 May 9, 2025
c90e7da
feat: Toast notifs for game edit submissions
colin969 May 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .eslintignore

This file was deleted.

137 changes: 0 additions & 137 deletions .eslintrc-old.json

This file was deleted.

4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ Install by running ``sudo apt install libgtk-3-0 libnss3``

4. Run ``npm run start`` (at the root of the repository) to start the launcher. It is recommended to do this in a second command prompt / terminal.

5. **Optional** - It is highly recommended to set the launcher's "Flashpoint folder". This is where the launcher will read and write most data to and from. You can set the "Flashpoint folder" path at the "Config" tab in the launcher. Make sure the background of the text field is green (this means the path is valid) and don't forget to hit "Save and Exit"!
5. React components use the React Compiler. If creating new components please make sure they are compiled, see this extension for a handy IDE hint in Vscode. Existing components are fine to be skipped. https://marketplace.visualstudio.com/items?itemName=blazejkustra.react-compiler-marker

6. **Optional** - It is highly recommended to set the launcher's "Flashpoint folder". This is where the launcher will read and write most data to and from. You can set the "Flashpoint folder" path at the "Config" tab in the launcher. Make sure the background of the text field is green (this means the path is valid) and don't forget to hit "Save and Exit"!

Notes:

Expand Down
22 changes: 13 additions & 9 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,26 @@ import tseslint from 'typescript-eslint';
import react from 'eslint-plugin-react';
import stylistic from '@stylistic/eslint-plugin';
import globals from 'globals';
import reactHooks from 'eslint-plugin-react-hooks';

export default tseslint.config(
eslint.configs.recommended,
reactHooks.configs['recommended-latest'],
...tseslint.configs.recommended,
{
files: ['**/*.{js,jsx,ts,tsx}'],
ignores: ['gulpfile.js'],
ignores: ['**/*.js']
},
{
files: ['**/*.{ts,tsx}'],
plugins: {
react,
'@stylistic': stylistic,
},
settings: {
react: {
version: '17'
}
},
languageOptions: {
parserOptions: {
ecmaFeatures: {
Expand All @@ -29,15 +38,9 @@ export default tseslint.config(
rules: {
"@stylistic/object-curly-spacing": ["warn", "always"],
"@typescript-eslint/adjacent-overload-signatures": "off",
"@typescript-eslint/ban-types": ["error", {
"types": {
"{}": false
},
"extendDefaults": true
}],
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/indent": ["error", 2, {
"@stylistic/indent": ["error", 2, {
"MemberExpression": 0,
"SwitchCase": 1
}],
Expand All @@ -47,6 +50,7 @@ export default tseslint.config(
"@typescript-eslint/no-namespace": "off",
"@typescript-eslint/no-unused-vars": ["error", {
"vars": "all",
"caughtErrors": "none",
"args": "none"
}],
"@typescript-eslint/no-use-before-define": "off",
Expand Down
1 change: 1 addition & 0 deletions extensions/core-nga/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.js
4 changes: 4 additions & 0 deletions extensions/core-nga/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
dist/
static/*.js
static/mf*.json
static/*mf-types*
85 changes: 85 additions & 0 deletions extensions/core-nga/gulpfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
const { series } = require('gulp');
const fs = require('fs');
const gulp = require('gulp');
const zip = require('gulp-zip');
const merge = require('merge-stream');
const esbuild = require('esbuild');
const { build: rslibBuild, loadConfig } = require('@rslib/core');

const filesToCopy = [
'extension.js',
'package.json',
'icon.png',
'LICENSE.md',
'README.md'
];

async function build(done) {
// Build main extension (Node.js)
const nodeBuild = esbuild.build({
bundle: true,
entryPoints: ['./src/extension.ts'],
outfile: './dist/extension.js',
platform: 'node',
external: ['flashpoint-launcher'],
});

const config = await loadConfig('./rslib.config.ts');

Promise.all([nodeBuild, rslibBuild({
...config.content,
mode: 'development'
})])
.catch(console.error)
.finally(done);
}

async function watch(done) {
const ctx = await esbuild.context({
bundle: true,
entryPoints: ['./src/extension.ts'],
outfile: './dist/extension.js',
platform: 'node',
external: ['flashpoint-launcher', '*.css'],
});

const config = await loadConfig('./rslib.config.ts');
const renderer = rslibBuild({
...config.content,
mode: 'development',
watch: true
});

return Promise.all([ctx.watch(), renderer])
.catch(console.error)
.finally(done);
}

function clean(cb) {
fs.rm('./package', { recursive: true }, (err) => {
if (err) { console.log('Clean', err); }
cb();
});
}

function stage() {
const streams = filesToCopy.map(file => {
if (fs.existsSync(file)) {
return gulp.src(file).pipe(gulp.dest('package/core-nga'));
}
}).filter(s => s !== undefined);
return merge([
...streams,
gulp.src('out/**/*').pipe(gulp.dest('package/core-nga/out')),
gulp.src('dist/**/*').pipe(gulp.dest('package/core-nga/dist')),
gulp.src('static/**/*').pipe(gulp.dest('package/core-nga/static')),
]);
}

function package() {
return gulp.src('package/**/*').pipe(zip('core-nga.fplx')).pipe(gulp.dest('.'));
}

exports.build = series(build);
exports.watch = series(watch);
exports.package = series(clean, stage, package);
Loading
Loading