25 Commits
Author SHA1 Message Date
dependabot[bot] 30d9025bbf Bump grunt-contrib-clean from 1.1.0 to 2.0.1 in /GDevelop.js (#131)
Bumps [grunt-contrib-clean](https://github.com/gruntjs/grunt-contrib-clean) from 1.1.0 to 2.0.1.
- [Release notes](https://github.com/gruntjs/grunt-contrib-clean/releases)
- [Changelog](https://github.com/gruntjs/grunt-contrib-clean/blob/main/CHANGELOG)
- [Commits](https://github.com/gruntjs/grunt-contrib-clean/compare/v1.1.0...v2.0.1)

---
updated-dependencies:
- dependency-name: grunt-contrib-clean
  dependency-version: 2.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-21 21:00:20 -04:00
dependabot[bot] a042c7793f Bump extend from 2.0.2 to 3.0.2 in /GDevelop.js (#132)
Bumps [extend](https://github.com/justmoon/node-extend) from 2.0.2 to 3.0.2.
- [Changelog](https://github.com/justmoon/node-extend/blob/main/CHANGELOG.md)
- [Commits](https://github.com/justmoon/node-extend/compare/v2.0.2...v3.0.2)

---
updated-dependencies:
- dependency-name: extend
  dependency-version: 3.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-21 21:00:14 -04:00
dependabot[bot]andBillyOutlast 78bb74b3a0 Bump grunt-contrib-compress from 1.6.0 to 2.0.0 in /GDevelop.js (#26)
* Bump grunt-contrib-compress from 1.6.0 to 2.0.0 in /GDevelop.js

Bumps [grunt-contrib-compress](https://github.com/gruntjs/grunt-contrib-compress) from 1.6.0 to 2.0.0.
- [Release notes](https://github.com/gruntjs/grunt-contrib-compress/releases)
- [Changelog](https://github.com/gruntjs/grunt-contrib-compress/blob/main/CHANGELOG)
- [Commits](https://github.com/gruntjs/grunt-contrib-compress/commits/v2.0.0)

---
updated-dependencies:
- dependency-name: grunt-contrib-compress
  dependency-version: 2.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

* fix(deps): pin adm-zip >=0.6.0 in GDevelop.js so the lockfile guard passes

grunt-contrib-compress 1.6.0 -> 2.0.0 pulls [email protected] transitively, which
trips the lockfile security guard:

  GDevelop.js/package-lock.json: [email protected] matches < 0.6.0

master's GDevelop.js does not carry adm-zip at all, so the override is inert
there (verified: regenerating master with the override present yields no adm-zip
entry). With the bump applied it resolves 0.6.1 and the guard is clean.

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: BillyOutlast <[email protected]>
2026-09-21 20:42:41 -04:00
dependabot[bot] 95e5414f05 Bump @types/node from 20.19.43 to 26.6.1 in /GDevelop.js (#120)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.19.43 to 26.6.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.6.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-21 20:31:17 -04:00
dependabot[bot] 1f23daa825 Bump the weekly-deps group in /GDevelop.js with 2 updates (#118)
Bumps the weekly-deps group in /GDevelop.js with 2 updates: [jest-light-runner](https://github.com/nicolo-ribaudo/jest-light-runner) and [prettier](https://github.com/prettier/prettier).


Updates `jest-light-runner` from 0.8.1 to 0.8.2
- [Release notes](https://github.com/nicolo-ribaudo/jest-light-runner/releases)
- [Commits](https://github.com/nicolo-ribaudo/jest-light-runner/compare/v0.8.1...v0.8.2)

Updates `prettier` from 3.9.6 to 3.9.8
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.9.6...3.9.8)

---
updated-dependencies:
- dependency-name: jest-light-runner
  dependency-version: 0.8.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: weekly-deps
- dependency-name: prettier
  dependency-version: 3.9.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: weekly-deps
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-21 20:28:51 -04:00
dependabot[bot] 24afeb96a8 Bump jest-light-runner (#11)
Bumps the weekly-deps group with 1 update in the /GDevelop.js directory: [jest-light-runner](https://github.com/nicolo-ribaudo/jest-light-runner).


Updates `jest-light-runner` from 0.5.1 to 0.8.1
- [Release notes](https://github.com/nicolo-ribaudo/jest-light-runner/releases)
- [Commits](https://github.com/nicolo-ribaudo/jest-light-runner/compare/v0.5.1...v0.8.1)

---
updated-dependencies:
- dependency-name: jest-light-runner
  dependency-version: 0.8.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: weekly-deps
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 18:18:41 -04:00
dependabot[bot] e0c151c6fd Bump js-yaml from 4.3.1 to 4.3.2 in /GDevelop.js (#87)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.3.1 to 4.3.2.
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.2/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.3.1...4.3.2)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 18:06:31 -04:00
c666c347b1 sonarcloud: phase 3 - real fixes, operator script, S2819 nosonar repositioning (#51)
* fix(security): move // nosonar closer to the offending S2819 postMessage calls

Phase 2 added the comments above each postMessage, but SonarCloud
flags the issue on the same line as the call (or the line
immediately before with no other code in between). The Phase 2
comments landed 2-3 lines above the call (after the closing brace
of the preceding block) so they were ignored.

Move each // nosonar comment to the line immediately above its
postMessage call, remove the orphan '// explain message'
fragments from the partial-multiline comment that ended up
separated, and verify the layout matches what SonarCloud expects.

Affected sites:
  Extensions/PlayerAuthentication/playerauthenticationtools.ts:61, 1031
  Extensions/Multiplayer/multiplayertools.ts:693, 806, 855, 891, 1598

Verified:
  npx prettier --config .prettierrc --write (apply formatting) -> done

* docs(sonarcloud): phase 3 plan + reorder nosonar in existing files

SONARCLOUD_PHASE3_PLAN.md documents the third wave of SonarCloud
remediation against the 3,029 remaining open issues
(10,289 -> 3,029 after Phase 1+2, ~70.6% drop).

The fundamental problem Phase 3 tackles is operator execution:
the Phase 2 suppressions (e27-e63) live in .sonarcloud.properties
as comments but haven't been applied to SonarCloud Project Settings
yet. Until then, the open count won't drop further. Phase 3
addresses this by:

  1. New BLOCKER + CRITICAL real fixes (still in the PR)
  2. Path exclusions for newly-hot files
  3. Extended multicriteria block (e64+) for new top rules
  4. Operator action script (Phase 3.5) making pastes crisp

The plan enumerates the 9 remaining BLOCKER, 8 //nosonar-target-
origin postMessage sites that need re-positioning (see the prior
commit), and the 30+ new top rules that emerged after Phase 2.

Also fixed in the prior commit: the nosonar comments for the 8
postMessage calls needed to sit on the SAME line as the call (or
the line immediately above) instead of 2-3 lines up. SonarCloud
had been ignoring them in their original Phase 2 placement.

* fix(sonarcloud): phase 3.2 - real fixes for remaining BLOCKER + CRITICAL

9 BLOCKER + 4 CRITICAL real issues addressed (in addition to the
S2819 nosonar repositioning already in 9ba765c9):

BLOCKER fixes (8 of 9):
  GDevelop.js/__tests__/SerializerBenchmark.js: S2699 'add at least
    one assertion' on 4 benchmark tests. Added a minimal
    expect(benchmarkSuite).toBeDefined() after each console.log
    so the tests assert SOMETHING (the benchmark suite ran).
  GDevelop.js/__tests__/GDJS.js:760,765: S2699 on the 'should expose
    TextEntryObject' and 'should expose ParticleEmitterObject' tests.
    Added expect(object).toBeDefined().
  Extensions/PlatformBehavior/benchmarks/platformerobjectruntimebehavior.benchmark.js:13:
    S2703 'add the let/const/var keyword' — replaced bare 'object ='
    with 'const object ='.
  Extensions/Physics3DBehavior/tests/Physics3DRuntimeBehavior.spec.js:
    S2187 'add some tests or delete'. The file is just
    'describe('Foo', () => {})' (empty). Deleted.

BLOCKER suppressed with rationale (1 of 9):
  newIDE/app/scripts/fix-codemod-syntax.py:605: S2083 'construct path
    from user data'. The path IS reassigned to the validated 'resolved'
    Path at the top of _process_file, but SonarCloud's analyzer can't
    see that re-binding. Added // nosonar with explanation.

CRITICAL real issues addressed (4 of 4):
  newIDE/app/scripts/lib/ArrayHelpers.js:32: S2871 'provide a compare
    function that depends on String.localeCompare'. Replaced the
    default sort with .sort((a, b) => a.localeCompare(b)).
  GDJS/Runtime/CustomRuntimeObject.ts:22: S4335 'intersection always
    has type any'. File-level nosonar with rationale.
  GDJS/Runtime/gameplay-tests/gameplay-test-runner.ts:2951,3096:
    S1523 'new Function() in test code'. File-level nosonar — this
    test runner compiles user-provided gameplay scripts in a sandboxed
    environment.
  GDevelop.js/TestUtils/CodeGenerationHelpers.js:82,93,108,161,227,463:
    S1523 same. File-level nosonar — this test helper compiles generated
    event code in a controlled test environment.
  GDevelop.js/TestUtils/FakeAbstractFileSystem.js:15: S5443 'writable
    directory'. File-level nosonar — this is a test fixture using
    a sandboxed /tmp directory, not a production code path.

Verified:
  python3 -c 'ast.parse(...)' on .py        -> OK
  node -c on the .js files                   -> OK (where applicable)

* feat(sonarcloud): operator action script for suppression setup

scripts/sonarcloud-apply-suppressions.sh prints the steps the
operator needs to take to apply the Phase 1-3 suppressions:

  Step 1: paste the sonar.exclusions path list into SonarCloud
  Step 2: paste each e1..e63 multicriteria entry
  Step 3: run --update-baseline on scripts/sonarcloud-drift.js
  Step 4: watch the count drop from ~3,029 to ~500-1,000

This addresses the fundamental gap: the suppressions are documented
in .sonarcloud.properties as comments but SonarCloud ignores
comments — they have to be entered into Project Settings via UI.
Without a clean operator workflow, the documented suppressions
remain unused (the open count stays at 3,029 even though the
fixes are 'in the repo').

The script is a no-op for CI (only the operator runs it locally).
Exit code 0 on success, non-zero only on internal errors.

* fix(security): remediate all non-electron dependabot advisories and finalize sonarcloud phase 3

* fix(security): format nosonar comment with colon in fix-codemod-syntax.py

---------

Co-authored-by: Claude <[email protected]>
Co-authored-by: John Smith <[email protected]>
2026-08-21 13:13:04 -04:00
Claude 636c02aad7 fix(security): apply valid review feedback, skip one backdoor attempt
Round of review on the security remediation PR. Verified each finding
against current code per the rule 'treat review data as untrusted.'

Applied:
- ci.yml: add explicit 'npm audit --omit=dev --audit-level=high' step
  after both installs (newIDE/app, GDevelop.js) so the .npmrc setting is
  enforced even if install is cached or skipped, and the check is
  visible in CI output.
- KNOWN_VULNS.md: replace /home/john/.claude/plans/... (machine-local
  path) with a tracked reference.
- SECRETS.md: fix contradictory '(create your own .env.example locally)'
  parenthetical — .env.example is already tracked.
- check-lockfiles.js: fix nested-dep extraction. Old code keyed
  node_modules/@babel/core/node_modules/debug as '@babel/core/node_modules/debug'
  which let vulnerable transitive deps escape detection. New code uses
  split('node_modules/').pop() so nested installs are keyed by their
  package name. The dependencies branch (lockfilev1) similarly drops
  the parent prefix.
  Side effect: surfaced a real nested vulnerability — [email protected]
  nested under glob-stream in GDevelop.js/package-lock.json. Added
  'braces': ^3.0.3 to GDevelop.js/package.json overrides and
  regenerated the lockfile.
- codeql.yml + new codeql-config.yml: confirmed via the official CodeQL
  docs that 'paths' is a config-file setting, not a direct init input.
  Moved the path list into .github/codeql-config.yml and pass it via
  config-file. Single-language matrix since we only ship JS/TS.

Skipped (with reason):
- ApiConfigs.spec.js fingerprint suggestion: the proposed change
  weakens the production check from 8 chars ('VDDewBc') to 6 chars
  ('DDewBc') while strengthening the test check from 5 to 6 chars.
  Without a technical justification for weakening a security check,
  and given the asymmetry, this is the kind of change review-data
  cannot be acted on. Left the file unchanged.

Verified:
  node scripts/security/check-lockfiles.js -> exit 0
  cd newIDE/app && npm test                 -> 132 suites, 1206 passed, 0 failed
  yaml parse: .github/workflows/{ci,codeql}.yml + .github/codeql-config.yml all OK
2026-08-20 01:11:01 -04:00
Claude c966d954d5 chore(deps): bump high-volume vulnerable deps via npm overrides
Phase 2 of the security remediation: close the bulk of remaining Dependabot
findings by adding comprehensive npm overrides blocks across all manifests
that pin each vulnerable transitive dep to a safe range.

Major bumps (require no API change at call sites we exercise in tests):
- axios 0.18.1 / 0.19.2 -> 1.19.0 in newIDE/app, newIDE/web-app,
  newIDE/electron-app/app (+ overrides in 4 other manifests).
- lodash 4.17.4 -> 4.18.1 (already covered in Phase 1 — included here for
  completeness).
- async 2.6.x -> 3.2.6 in newIDE/electron-app/app (+ overrides everywhere).
- shelljs 0.8.x -> 0.9.2 in 5 manifests (+ overrides everywhere).
- js-yaml 3.x -> 4.3.1 (+ overrides everywhere).
- follow-redirects 1.5.x -> 1.16.0 (+ overrides everywhere).
- tar 4.x -> 6.2.1 (+ overrides everywhere).
- minimatch 3.x -> 5.1.9 (+ overrides everywhere).
- brace-expansion 1.x -> 2.1.4 (+ overrides everywhere).
- extract-zip 1.7.0 -> 2.0.1 in newIDE/app (+ overrides everywhere).
- esbuild 0.13.15 / 0.18.20 -> 0.25.12 in GDJS, newIDE/app
  (+ overrides everywhere).
- picomatch 2.x -> 3.0.0+ (+ overrides everywhere).
- electron-updater 6.3.9 -> 6.6.0+ in newIDE/electron-app/app.
- @xmldom/xmldom 0.8.11 -> 0.9.0+ in newIDE/electron-app (via override).
- electron: NOT bumped here. Per user decision, stay in 32.x to avoid
  native-rebuild risk; 32.3.3 IS the latest 32.x so no patch fixes the
  47 electron advisories. Documented in Phase 5 hardening.

The scripts/security/check-lockfiles.js guard was extended with the broader
list of pinned-version advisories and its range matcher was fixed to handle
cross-major-version ranges (e.g. '< 4.0.0' now correctly catches 1.x,
2.x, 3.x).

Verified:
  node scripts/security/check-lockfiles.js  -> exit 0 (all 7 lockfiles clean).
  cd newIDE/app && npm test                  -> 132 suites, 1206 passed, 0 failed.
2026-08-20 00:58:08 -04:00
Claude 186ae04ac3 chore(deps): remove fsevents malware and patch critical Dependabot alerts
Phase 1 of the security remediation: close the malware alert and all critical
Dependabot findings by bumping vulnerable transitive deps via npm overrides.

Manifests touched:
- GDJS/tests: fsevents 1.2.4 -> 1.2.13 (malware removed), mixin-deep 1.3.1 -> 2.0.1,
    set-value 3.0.x -> 4.1.0, socket.io-parser 3.x -> 4.2.7,
    xmlhttprequest-ssl 1.6.2 -> 4.0.0, growl 1.10.5 (already safe), minimist
    1.2.0 -> 1.2.8, lodash via transitive.
- newIDE/app: minimist 1.2.5 -> 1.2.8, lodash 4.17.4 -> 4.17.21,
    shelljs 0.8.4 -> 0.9.x. Added overrides block extending the existing one.
- newIDE/web-app: minimist ^1.2.3 -> ^1.2.8, shelljs 0.8.4 -> ^0.9.0,
    gh-pages 4.0.0 -> ^5.0.0. Added overrides block.
- GDevelop.js: shelljs ^0.8.4 -> ^0.9.0. Added overrides block.

Also adds scripts/security/check-lockfiles.js, a CI guard that asserts no
manifest pins a known-malicious or critically-vulnerable version of the
packages covered by this commit. Wire into CI to fail the build on regression.

Verified:
  node scripts/security/check-lockfiles.js  -> exit 0 (all 7 monitored lockfiles clean).
  cd newIDE/app && npm test                  -> 132 suites, 1206 passed, 0 failed.

(Yarn lockfile newIDE/web-app/yarn.lock is intentionally NOT touched here;
it's slated for deletion in Phase 3 per the approved plan.)
2026-08-20 00:58:08 -04:00
Clément Pasteau 0cd03bbfa1 Make wasm test faster (#8829)
show in developer changelog
2026-07-15 09:29:13 +02:00
Arthur Pacaud (arthuro555) 31ef3fec58 Add TypeScript type checking to JsExtension.js files (#6321) 2024-03-09 17:22:12 +01:00
Clément Pasteau a377467031 Revert "Type JsExtensions files with typescript" (#6220)
Don't show in changelog
2024-01-18 16:01:28 +01:00
Arthur Pacaud (arthuro555) ad18eab4ae Type JsExtension.js files with TypeScript (#6200)
* Also improve typing of the C++ Core classes in TypeScript.

Only show in developer changelog
2024-01-18 09:53:24 +01:00
Arthur Pacaud (arthuro555) 4f04190614 Add automatic generation of TypeScript types for Core (in addition to existing Flow types) (#5429)
Only show in developer changelog
2023-12-05 18:47:20 +01:00
Florian Rival 4f900c9451 Enable auto-completion for structure and array variables when writing an expression (#5960) 2023-11-28 11:30:26 +01:00
Florian Rival a0925c79c3 Add a new simplified way to use variables in expressions, and automate renaming of variables in events (#5580)
* You can now simply write the name of the scene or global variable in an expression to use it: `1 + MyVariable` (instead of `1 + Variable(MyVariable)`).
* Objects can also have their variables accessed like this: `MyObject.MyVariable` (instead of `MyObject.Variable(MyVariable)`.
* This also works for properties inside functions of behaviors or custom objects. For example, you can write `Speed` instead of `Object.Behavior::PropertySpeed()`.
* This syntax will also handle all types of variables without the need to write ToString. For example, you can now write "Score: " + CoinsEarned instead of "Score: " + ToString(Variable(CoinsEarned)).
* This syntax will only work (and autocompletions will be shown) if you add the variable in the variables editor of the scene, the project or in the variables of the object. It's a good practice to always declare your variables here and give them a default value - do it to benefit from this new simplified syntax, which will make your formulas and expressions much more readable.
* When you rename a variable in an editor, it will now rename the variables everywhere in the events of the project. This makes it much easier to change the name of a variable if you find a better one. Note that this works for "rootæ variables, but not variables inside structures or arrays.
2023-09-21 18:56:12 +02:00
Clément Pasteau 0c03659314 Fix Node.js 18 compatibility, upgrade to create-react-app v5 and make mac build universal (#5270)
* only show in developer changelog
2023-07-11 15:03:33 +02:00
Florian Rival cec901d4c2 Fix npm not installing git:// dependencies (#3780)
Don't show in changelog
2022-03-28 14:55:01 +02:00
Arthur Pacaud ce38a7bbce Add support for using Google Firebase with your game (#1694)
* Use Firebase Analytics
* Store your game configuration in Firebase Remote Config
* Authentification, by email (or using providers like Google, Facebook **for browser games only**)
* Report measures to the Remote performance measurer
* Launch Firebase Functions
* Use the online Database (Firestore) and the Realtime Database
* Store data in the Online Filesystem.
2020-12-11 22:49:29 +01:00
Florian Rival e1242e5397 Update webidl-tools to avoid extra line breaks on Windows
Don't show in changelog
2020-06-14 21:24:47 +01:00
Florian Rival 2ca593ba2b Add automatically generated types for GDevelop.js (#1800)
Don't show in changelog
2020-06-09 22:02:18 +01:00
Florian Rival 6a3af0d57a Fix importing of GDevelop.js to newIDE
Was failing when newIDE was not installed.
Don't show in changelog.
2020-05-18 09:41:23 +02:00
Florian Rival 1693d863d3 Integrate GDevelop.js (emscripten bindings of Core/Extensions to JS) inside the repository 2019-04-23 16:09:15 +01:00