-
Notifications
You must be signed in to change notification settings - Fork 13.7k
feat(apps): export ENGINE_VERSION from definition layer #40183
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,16 @@ | ||||||||||||||||
| /** | ||||||||||||||||
| * The version of the Apps-Engine package. | ||||||||||||||||
| * Consumed by host-side code (e.g. AppPackageParser) to validate app compatibility | ||||||||||||||||
| * without relying on filesystem path traversal. | ||||||||||||||||
| * | ||||||||||||||||
| * Uses require() instead of a static import so TypeScript does not resolve the path | ||||||||||||||||
| * at compile time. | ||||||||||||||||
| * | ||||||||||||||||
| * When running for tests, using ts-node, package.json is located two levels above the current file. | ||||||||||||||||
| * When running in production, package.json is located one level above the compiled version of this file. | ||||||||||||||||
| */ | ||||||||||||||||
| const runningFromSource = __dirname.endsWith('src/definition'); | ||||||||||||||||
| const requirePath = runningFromSource ? '../../package.json' : '../package.json'; | ||||||||||||||||
|
|
||||||||||||||||
| // eslint-disable-next-line import/no-dynamic-require, @typescript-eslint/no-require-imports -- Paths are bounded, we just need to decide which package.json file to target | ||||||||||||||||
| export const ENGINE_VERSION: string = require(requirePath).version; | ||||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Add a runtime guard at module load time: 🛡️ Proposed fix-// eslint-disable-next-line import/no-dynamic-require, `@typescript-eslint/no-require-imports` -- Paths are bounded, we just need to decide which package.json file to target
-export const ENGINE_VERSION: string = require(requirePath).version;
+// eslint-disable-next-line import/no-dynamic-require, `@typescript-eslint/no-require-imports` -- Paths are bounded, we just need to decide which package.json file to target
+const { version }: { version?: string } = require(requirePath);
+if (!version) {
+ throw new Error(`[apps-engine] Could not read version from ${requirePath}`);
+}
+export const ENGINE_VERSION: string = version;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Path heuristic is OS-dependent — breaks on Windows.
__dirnameon Windows uses backslashes (e.g.C:\…\src\definition), soendsWith('src/definition')will always be false there and the wrong relative path will be selected when running tests viats-nodeon Windows. Even if Windows is not a primary target, it's a one-line fix:🔧 Suggested fix
Or use
path.basename(path.dirname(__dirname)) === 'src' && path.basename(__dirname) === 'definition'.📝 Committable suggestion
🤖 Prompt for AI Agents