Skip to content
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

(feat) Add variable name extractor to expression runner #1173

Merged
merged 1 commit into from
Oct 3, 2024

Conversation

ibacher
Copy link
Member

@ibacher ibacher commented Oct 3, 2024

Requirements

  • This PR has a title that briefly describes the work done including the ticket number. Ensure your PR title includes a conventional commit label (such as feat, fix, or chore, among others). See existing PR titles for inspiration.

For changes to apps

If applicable

  • My work includes tests or is validated by existing tests.
  • I have updated the esm-framework mock to reflect any API changes I have made.

Summary

This adds a companion function to the expression-evaluator, called extractVariableNames() which takes either a "pre-compiled" or raw expression and returns a list of any unbound identifiers ("variables") in the expression. This is useful for tracking expression dependencies or just understanding what variables need to be loaded to be passed into an expression.

While it uses the same parsing framework, the variable name extractor does not do any real validation of the expression; that is, an expression passing through this function does not guarantee that it will not throw an error when executed. This is because we do not make any attempt to actual evaluate the expression at this point.

See the examples and test cases for a better outline of what this actually does.

Variables are returned in roughly the order they first appear in the expression.

Screenshots

Related Issue

Other

Copy link
Contributor

github-actions bot commented Oct 3, 2024

Size Change: -3.44 MB (-37.49%) 🎉

Total Size: 5.74 MB

Filename Size Change
packages/apps/esm-devtools-app/dist/889.js 325 kB -401 kB (-55.24%) 🏆
packages/apps/esm-help-menu-app/dist/889.js 325 kB -401 kB (-55.24%) 🏆
packages/apps/esm-implementer-tools-app/dist/889.js 325 kB -401 kB (-55.24%) 🏆
packages/apps/esm-login-app/dist/889.js 325 kB -401 kB (-55.24%) 🏆
packages/apps/esm-offline-tools-app/dist/889.js 325 kB -401 kB (-55.24%) 🏆
packages/apps/esm-primary-navigation-app/dist/889.js 325 kB -401 kB (-55.24%) 🏆
packages/framework/esm-extensions/dist/openmrs-esm-extensions.js 24.8 kB -23.7 kB (-48.86%) 🎉
packages/framework/esm-framework/dist/openmrs-esm-framework.js 455 kB -488 kB (-51.76%) 🏆
packages/framework/esm-styleguide/dist/openmrs-esm-styleguide.js 145 kB -379 kB (-72.3%) 🏆
packages/shell/esm-app-shell/dist/6e67f18441f27170.js 0 B -63.6 kB (removed) 🏆
packages/shell/esm-app-shell/dist/97eacb94e71de9dc.js 0 B -41.3 kB (removed) 🏆
packages/shell/esm-app-shell/dist/openmrs.981a8af1787f4773.js 0 B -21.4 kB (removed) 🏆
ℹ️ View Unchanged
Filename Size Change
packages/apps/esm-devtools-app/dist/593.js 149 kB 0 B
packages/apps/esm-devtools-app/dist/642.js 21.1 kB 0 B
packages/apps/esm-devtools-app/dist/657.js 7.02 kB 0 B
packages/apps/esm-devtools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-devtools-app/dist/762.js 4.1 kB 0 B
packages/apps/esm-devtools-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-devtools-app/dist/875.js 11.6 kB 0 B
packages/apps/esm-devtools-app/dist/988.js 326 B 0 B
packages/apps/esm-devtools-app/dist/main.js 3.23 kB 0 B
packages/apps/esm-devtools-app/dist/openmrs-esm-devtools-app.js 3.28 kB 0 B
packages/apps/esm-help-menu-app/dist/167.js 1.07 kB 0 B
packages/apps/esm-help-menu-app/dist/248.js 7.07 kB 0 B
packages/apps/esm-help-menu-app/dist/611.js 2.45 kB 0 B
packages/apps/esm-help-menu-app/dist/642.js 21.1 kB 0 B
packages/apps/esm-help-menu-app/dist/657.js 7.02 kB 0 B
packages/apps/esm-help-menu-app/dist/662.js 147 kB 0 B
packages/apps/esm-help-menu-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-help-menu-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-help-menu-app/dist/958.js 3.74 kB 0 B
packages/apps/esm-help-menu-app/dist/main.js 8.56 kB 0 B
packages/apps/esm-help-menu-app/dist/openmrs-esm-help-menu-app.js 3.23 kB 0 B
packages/apps/esm-implementer-tools-app/dist/271.js 744 B 0 B
packages/apps/esm-implementer-tools-app/dist/289.js 14.1 kB 0 B
packages/apps/esm-implementer-tools-app/dist/319.js 675 B 0 B
packages/apps/esm-implementer-tools-app/dist/336.js 137 kB 0 B
packages/apps/esm-implementer-tools-app/dist/36.js 2.49 kB 0 B
packages/apps/esm-implementer-tools-app/dist/426.js 27.8 kB 0 B
packages/apps/esm-implementer-tools-app/dist/441.js 4.38 kB 0 B
packages/apps/esm-implementer-tools-app/dist/448.js 4.66 kB 0 B
packages/apps/esm-implementer-tools-app/dist/460.js 775 B 0 B
packages/apps/esm-implementer-tools-app/dist/491.js 134 kB 0 B
packages/apps/esm-implementer-tools-app/dist/574.js 584 B 0 B
packages/apps/esm-implementer-tools-app/dist/587.js 2.93 kB 0 B
packages/apps/esm-implementer-tools-app/dist/625.js 585 B 0 B
packages/apps/esm-implementer-tools-app/dist/642.js 21.1 kB 0 B
packages/apps/esm-implementer-tools-app/dist/644.js 739 B 0 B
packages/apps/esm-implementer-tools-app/dist/657.js 7.03 kB 0 B
packages/apps/esm-implementer-tools-app/dist/667.js 121 kB 0 B
packages/apps/esm-implementer-tools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-implementer-tools-app/dist/757.js 692 B 0 B
packages/apps/esm-implementer-tools-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-implementer-tools-app/dist/807.js 583 B 0 B
packages/apps/esm-implementer-tools-app/dist/833.js 714 B 0 B
packages/apps/esm-implementer-tools-app/dist/845.js 6.43 kB 0 B
packages/apps/esm-implementer-tools-app/dist/859.js 3.09 kB 0 B
packages/apps/esm-implementer-tools-app/dist/873.js 3.67 kB 0 B
packages/apps/esm-implementer-tools-app/dist/main.js 20.8 kB 0 B
packages/apps/esm-implementer-tools-app/dist/openmrs-esm-implementer-tools-app.js 3.4 kB 0 B
packages/apps/esm-login-app/dist/202.js 2.57 kB 0 B
packages/apps/esm-login-app/dist/236.js 272 B 0 B
packages/apps/esm-login-app/dist/240.js 366 B 0 B
packages/apps/esm-login-app/dist/271.js 874 B 0 B
packages/apps/esm-login-app/dist/272.js 266 B 0 B
packages/apps/esm-login-app/dist/319.js 799 B 0 B
packages/apps/esm-login-app/dist/336.js 233 B 0 B
packages/apps/esm-login-app/dist/415.js 26.7 kB 0 B
packages/apps/esm-login-app/dist/460.js 867 B 0 B
packages/apps/esm-login-app/dist/539.js 300 B 0 B
packages/apps/esm-login-app/dist/574.js 687 B 0 B
packages/apps/esm-login-app/dist/593.js 149 kB 0 B
packages/apps/esm-login-app/dist/625.js 688 B 0 B
packages/apps/esm-login-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-login-app/dist/642.js 21.1 kB 0 B
packages/apps/esm-login-app/dist/644.js 873 B 0 B
packages/apps/esm-login-app/dist/657.js 7.02 kB 0 B
packages/apps/esm-login-app/dist/673.js 286 B 0 B
packages/apps/esm-login-app/dist/676.js 2.23 kB 0 B
packages/apps/esm-login-app/dist/7.js 3.03 kB 0 B
packages/apps/esm-login-app/dist/735.js 2.62 kB 0 B
packages/apps/esm-login-app/dist/755.js 3.36 kB 0 B
packages/apps/esm-login-app/dist/757.js 847 B 0 B
packages/apps/esm-login-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-login-app/dist/80.js 30.6 kB 0 B
packages/apps/esm-login-app/dist/807.js 1 kB 0 B
packages/apps/esm-login-app/dist/833.js 815 B 0 B
packages/apps/esm-login-app/dist/859.js 3.08 kB 0 B
packages/apps/esm-login-app/dist/93.js 2.04 kB 0 B
packages/apps/esm-login-app/dist/main.js 58.9 kB 0 B
packages/apps/esm-login-app/dist/openmrs-esm-login-app.js 3.46 kB 0 B
packages/apps/esm-offline-tools-app/dist/271.js 1.19 kB 0 B
packages/apps/esm-offline-tools-app/dist/319.js 1.13 kB 0 B
packages/apps/esm-offline-tools-app/dist/460.js 1.3 kB 0 B
packages/apps/esm-offline-tools-app/dist/574.js 1.03 kB 0 B
packages/apps/esm-offline-tools-app/dist/601.js 142 kB 0 B
packages/apps/esm-offline-tools-app/dist/625.js 1.03 kB 0 B
packages/apps/esm-offline-tools-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-offline-tools-app/dist/642.js 21.1 kB 0 B
packages/apps/esm-offline-tools-app/dist/644.js 1.19 kB 0 B
packages/apps/esm-offline-tools-app/dist/645.js 91.4 kB 0 B
packages/apps/esm-offline-tools-app/dist/657.js 7.02 kB 0 B
packages/apps/esm-offline-tools-app/dist/703.js 6.32 kB 0 B
packages/apps/esm-offline-tools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-offline-tools-app/dist/757.js 1.19 kB 0 B
packages/apps/esm-offline-tools-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-offline-tools-app/dist/807.js 1.1 kB 0 B
packages/apps/esm-offline-tools-app/dist/833.js 1.21 kB 0 B
packages/apps/esm-offline-tools-app/dist/859.js 3.09 kB 0 B
packages/apps/esm-offline-tools-app/dist/947.js 8.66 kB 0 B
packages/apps/esm-offline-tools-app/dist/main.js 107 kB 0 B
packages/apps/esm-offline-tools-app/dist/openmrs-esm-offline-tools-app.js 3.39 kB 0 B
packages/apps/esm-primary-navigation-app/dist/271.js 270 B 0 B
packages/apps/esm-primary-navigation-app/dist/319.js 232 B 0 B
packages/apps/esm-primary-navigation-app/dist/460.js 266 B 0 B
packages/apps/esm-primary-navigation-app/dist/482.js 15.2 kB 0 B
packages/apps/esm-primary-navigation-app/dist/513.js 146 kB 0 B
packages/apps/esm-primary-navigation-app/dist/574.js 231 B 0 B
packages/apps/esm-primary-navigation-app/dist/577.js 7.64 kB 0 B
packages/apps/esm-primary-navigation-app/dist/619.js 6.45 kB 0 B
packages/apps/esm-primary-navigation-app/dist/625.js 231 B 0 B
packages/apps/esm-primary-navigation-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-primary-navigation-app/dist/644.js 270 B 0 B
packages/apps/esm-primary-navigation-app/dist/657.js 7.03 kB 0 B
packages/apps/esm-primary-navigation-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-primary-navigation-app/dist/757.js 237 B 0 B
packages/apps/esm-primary-navigation-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-primary-navigation-app/dist/807.js 291 B 0 B
packages/apps/esm-primary-navigation-app/dist/833.js 258 B 0 B
packages/apps/esm-primary-navigation-app/dist/888.js 24.5 kB 0 B
packages/apps/esm-primary-navigation-app/dist/933.js 3.63 kB 0 B
packages/apps/esm-primary-navigation-app/dist/main.js 29.9 kB 0 B
packages/apps/esm-primary-navigation-app/dist/openmrs-esm-primary-navigation-app.js 3.38 kB 0 B
packages/framework/esm-api/dist/openmrs-esm-api.js 16.2 kB 0 B
packages/framework/esm-config/dist/openmrs-esm-module-config.js 8.41 kB 0 B
packages/framework/esm-context/dist/openmrs-esm-context.js 1.16 kB 0 B
packages/framework/esm-dynamic-loading/dist/openmrs-esm-dynamic-loading.js 2.89 kB 0 B
packages/framework/esm-error-handling/dist/openmrs-esm-error-handling.js 891 B 0 B
packages/framework/esm-expression-evaluator/dist/openmrs-esm-expression-evaluator.js 8.98 kB +443 B (+5.19%) 🔍
packages/framework/esm-feature-flags/dist/openmrs-esm-feature-flags.js 1.66 kB 0 B
packages/framework/esm-framework/dist/278.openmrs-esm-framework.js 14.5 kB 0 B
packages/framework/esm-framework/dist/530.openmrs-esm-framework.js 2.93 kB 0 B
packages/framework/esm-framework/dist/588.openmrs-esm-framework.js 2.15 kB 0 B
packages/framework/esm-framework/dist/619.openmrs-esm-framework.js 6.49 kB 0 B
packages/framework/esm-framework/dist/645.openmrs-esm-framework.js 9.3 kB 0 B
packages/framework/esm-framework/dist/735.openmrs-esm-framework.js 2.65 kB 0 B
packages/framework/esm-framework/dist/746.openmrs-esm-framework.js 6.14 kB 0 B
packages/framework/esm-framework/dist/788.openmrs-esm-framework.js 42.9 kB 0 B
packages/framework/esm-globals/dist/openmrs-esm-globals.js 791 B 0 B
packages/framework/esm-navigation/dist/openmrs-esm-navigation.js 9.34 kB 0 B
packages/framework/esm-offline/dist/openmrs-esm-offline.js 34.4 kB 0 B
packages/framework/esm-react-utils/dist/openmrs-esm-react-utils.js 21.9 kB 0 B
packages/framework/esm-routes/dist/openmrs-esm-utils.js 4.67 kB 0 B
packages/framework/esm-state/dist/openmrs-esm-state.js 926 B 0 B
packages/framework/esm-translations/dist/openmrs-esm-core-translations.js 1.87 kB 0 B
packages/framework/esm-utils/dist/openmrs-esm-utils.js 45.5 kB 0 B
packages/shell/esm-app-shell/dist/0320f3310a8e6ffd.js 624 B 0 B
packages/shell/esm-app-shell/dist/0d5049faac5190be.js 1.27 kB 0 B
packages/shell/esm-app-shell/dist/108de29b7c1b7ac8.js 6.99 kB 0 B
packages/shell/esm-app-shell/dist/1d2cfe3cd23ce2d1.js 64.1 kB 0 B
packages/shell/esm-app-shell/dist/204a7b135d25fab8.js 0 B -5.63 kB (removed) 🏆
packages/shell/esm-app-shell/dist/20ee3ecb5d9c7be1.js 2.58 kB 0 B
packages/shell/esm-app-shell/dist/2ddface0d88d7441.js 43 kB 0 B
packages/shell/esm-app-shell/dist/355128a267c9f392.js 0 B -3.73 kB (removed) 🏆
packages/shell/esm-app-shell/dist/3644c66a25798faa.js 168 kB 0 B
packages/shell/esm-app-shell/dist/39c27dcaf13969ce.js 6.77 kB 0 B
packages/shell/esm-app-shell/dist/44a9ddbfe41aa18a.js 0 B -6.94 kB (removed) 🏆
packages/shell/esm-app-shell/dist/47b4569526a565e6.js 3.04 kB 0 B
packages/shell/esm-app-shell/dist/4ef81ca673948056.js 18.3 kB 0 B
packages/shell/esm-app-shell/dist/51230a73b8854d81.js 6.96 kB 0 B
packages/shell/esm-app-shell/dist/5aadd684d60c6888.js 2.23 kB 0 B
packages/shell/esm-app-shell/dist/654f286016653dbb.js 1 kB 0 B
packages/shell/esm-app-shell/dist/82b941b0585ccaed.js 624 B 0 B
packages/shell/esm-app-shell/dist/85bbfd1b2f124ed9.js 3.33 kB 0 B
packages/shell/esm-app-shell/dist/85d9e1ec051fd113.js 2.84 kB 0 B
packages/shell/esm-app-shell/dist/8711659b05d659a3.js 9.36 kB 0 B
packages/shell/esm-app-shell/dist/884da78f6099f180.js 3.76 kB 0 B
packages/shell/esm-app-shell/dist/8c0747baa436c928.js 1.29 kB 0 B
packages/shell/esm-app-shell/dist/8c7c69fc0e32ca48.js 2.6 kB 0 B
packages/shell/esm-app-shell/dist/9306486d6a162aea.js 1.59 kB 0 B
packages/shell/esm-app-shell/dist/a05840be5ec988e7.js 1 kB 0 B
packages/shell/esm-app-shell/dist/a0e789646c4db6de.js 15.1 kB 0 B
packages/shell/esm-app-shell/dist/ab422ab0d9328ddb.js 1 kB 0 B
packages/shell/esm-app-shell/dist/ab4fb85407d1c79b.js 41.3 kB 0 B
packages/shell/esm-app-shell/dist/b23ddf5f93216491.js 1.29 kB 0 B
packages/shell/esm-app-shell/dist/b88532bde74b513a.js 9.41 kB 0 B
packages/shell/esm-app-shell/dist/bd742565375867e5.js 172 kB 0 B
packages/shell/esm-app-shell/dist/c3d7542708411421.js 1.02 kB 0 B
packages/shell/esm-app-shell/dist/c6a386f84edd7602.js 5.63 kB 0 B
packages/shell/esm-app-shell/dist/d9baccebfcd84b87.js 1.05 kB 0 B
packages/shell/esm-app-shell/dist/dc69812e79e05b45.js 3.08 kB 0 B
packages/shell/esm-app-shell/dist/e949ae73c49dfa7e.js 1.18 kB 0 B
packages/shell/esm-app-shell/dist/f3254390a777963b.js 3.23 kB 0 B
packages/shell/esm-app-shell/dist/f74be95a974424f5.js 3.38 kB 0 B
packages/shell/esm-app-shell/dist/openmrs.9fa4c53f083be957.js 21.4 kB 0 B
packages/shell/esm-app-shell/dist/service-worker.js 46.4 kB -1 B (0%)
packages/tooling/openmrs/dist/cli.js 2.96 kB 0 B
packages/tooling/openmrs/dist/commands/assemble.js 3.31 kB 0 B
packages/tooling/openmrs/dist/commands/build.js 1.34 kB 0 B
packages/tooling/openmrs/dist/commands/debug.js 543 B 0 B
packages/tooling/openmrs/dist/commands/develop.js 2.71 kB 0 B
packages/tooling/openmrs/dist/commands/index.js 437 B 0 B
packages/tooling/openmrs/dist/commands/start.js 850 B 0 B
packages/tooling/openmrs/dist/index.js 517 B 0 B
packages/tooling/openmrs/dist/runner.js 640 B 0 B
packages/tooling/openmrs/dist/utils/config.js 726 B 0 B
packages/tooling/openmrs/dist/utils/debugger.js 575 B 0 B
packages/tooling/openmrs/dist/utils/dependencies.js 643 B 0 B
packages/tooling/openmrs/dist/utils/helpers.js 397 B 0 B
packages/tooling/openmrs/dist/utils/importmap.js 3.07 kB 0 B
packages/tooling/openmrs/dist/utils/index.js 443 B 0 B
packages/tooling/openmrs/dist/utils/logger.js 368 B 0 B
packages/tooling/openmrs/dist/utils/npmConfig.js 831 B 0 B
packages/tooling/openmrs/dist/utils/untar.js 725 B 0 B
packages/tooling/openmrs/dist/utils/variables.js 192 B 0 B
packages/tooling/openmrs/dist/utils/webpack.js 278 B 0 B
packages/tooling/webpack-config/dist/index.js 3.61 kB 0 B

compressed-size-action

@ibacher ibacher force-pushed the feat/add-variable-name-extractor branch from fbe889f to 0d547de Compare October 3, 2024 20:48
Copy link
Member

@samuelmale samuelmale left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks @ibacher!

@samuelmale samuelmale merged commit 61b8b3a into main Oct 3, 2024
14 checks passed
@samuelmale samuelmale deleted the feat/add-variable-name-extractor branch October 3, 2024 23:04
Samstar10 pushed a commit to Samstar10/openmrs-esm-core that referenced this pull request Oct 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants