v8.dev icon indicating copy to clipboard operation
v8.dev copied to clipboard

[Feature] Consider/ Requesting Access to read-only AST of Javascript Parser

Open ganeshkbhat opened this issue 7 months ago • 1 comments

What is the problem this feature will solve?

Has the Access AST of the javascript module proposal been accepted into tc9 and node.js? Can someone take lead and help raise an proposal for this?

Can you make the AST available as read-only to developers in browsers [rethink security concerns] and js server environments if not on browers? Seems like the mozilla docs Parser_API documentation is somehow removed and I am still wondering how to access the file's parsed, even if read-only, AST

  1. Access AST: https://github.com/nodejs/node/issues/45158
  2. Use Cases of AST like JS Parsers: https://github.com/nodejs/node/issues/45207
  3. https://stackoverflow.com/questions/16127985/what-is-javascript-ast-how-to-play-with-it

I wish to strongly vote for it, if this is in consideration. I recommend the access using a separate nodejs module api, if requested for my view. pls consider security and runtime risks based on your immense experience with such an nodejs module api access without a commandline's force access ast option enabled or other secure alternatives.

What is the feature you are proposing to solve the problem?

Access AST of the javascript module in runtime engines if not on browsers.

What alternatives have you considered?

  1. Using a bundler parser like ESTree, Typescript, and Babel. https://stackoverflow.com/questions/16127985/what-is-javascript-ast-how-to-play-with-it
  2. Use Cases of AST like JS Parsers: https://github.com/nodejs/node/issues/45207
  3. One of many JS Parsers [Use Cases]: https://github.com/dop251/goja/issues/498
  4. JS Parsers in the market [Use Cases]: https://github.com/fkling/astexplorer
  5. https://stackoverflow.com/questions/16127985/what-is-javascript-ast-how-to-play-with-it

ganeshkbhat avatar Nov 28 '23 04:11 ganeshkbhat

@bnoordhuis adding to this, it seems like/ behaviour none of the variable's, let's, const's, function's declaration made in the code already without using declarations like global.variable is not accessible from globals even as read-only which should not be the case. A presence of this or access to https://github.com/v8/v8.dev/issues/717 or https://github.com/nodejs/node/issues/45158 can lead to better AST or (read-only) access to variables.

I am seeing acorn: 8.10.0 here. What is this and what is the relevance here? Any way to access this in the newer versions of nodejs?

Microsoft Windows [Version 10.0.22631.2861]
(c) Microsoft Corporation. All rights reserved.

C:\Users\ganes>node --eval "console.log(require('process'))"
process {
  version: 'v21.1.0',
  versions: {
    node: '21.1.0',
    acorn: '8.10.0',
    ada: '2.7.2',
    ares: '1.20.1',
    base64: '0.5.0',
    brotli: '1.0.9',
    cjs_module_lexer: '1.2.2',
    cldr: '43.1',
    icu: '73.2',
    llhttp: '9.1.2',
    modules: '120',
    napi: '9',
    nghttp2: '1.57.0',
    nghttp3: '0.7.0',
    ngtcp2: '0.8.1',
    openssl: '3.0.10+quic',
    simdutf: '3.2.18',
    tz: '2023c',
    undici: '5.26.4',
    unicode: '15.0',
    uv: '1.46.0',
    uvwasi: '0.0.19',
    v8: '11.8.172.15-node.14',
    zlib: '1.2.13.1-motley'
  },
  arch: 'x64',
  platform: 'win32',
  release: {
    name: 'node',
    sourceUrl: 'https://nodejs.org/download/release/v21.1.0/node-v21.1.0.tar.gz',
    headersUrl: 'https://nodejs.org/download/release/v21.1.0/node-v21.1.0-headers.tar.gz',
    libUrl: 'https://nodejs.org/download/release/v21.1.0/win-x64/node.lib'
  },
  _rawDebug: [Function: _rawDebug],
  moduleLoadList: [
    'Internal Binding builtins',
    'Internal Binding errors',
    'NativeModule internal/assert',
    'Internal Binding util',
    'NativeModule internal/errors',
    'Internal Binding config',
    'Internal Binding timers',
    'Internal Binding async_wrap',
    'Internal Binding task_queue',
    'Internal Binding symbols',
    'NativeModule internal/async_hooks',
    'Internal Binding constants',
    'Internal Binding types',
    'Internal Binding options',
    'NativeModule internal/options',
    'NativeModule internal/util',
    'NativeModule internal/util/types',
    'NativeModule internal/validators',
    'NativeModule internal/linkedlist',
    'NativeModule internal/priority_queue',
    'Internal Binding icu',
    'NativeModule internal/util/inspect',
    'NativeModule internal/util/debuglog',
    'NativeModule internal/timers',
    'NativeModule events',
    'Internal Binding buffer',
    'Internal Binding string_decoder',
    'NativeModule internal/buffer',
    'NativeModule buffer',
    'Internal Binding messaging',
    'NativeModule internal/worker/js_transferable',
    'Internal Binding process_methods',
    'NativeModule internal/process/per_thread',
    'Internal Binding credentials',
    'NativeModule internal/process/promises',
    'NativeModule internal/fixed_queue',
    'NativeModule async_hooks',
    'NativeModule internal/process/task_queues',
    'NativeModule timers',
    'Internal Binding trace_events',
    'NativeModule internal/constants',
    'NativeModule path',
    'Internal Binding contextify',
    'NativeModule internal/vm',
    'NativeModule internal/process/execution',
    'NativeModule internal/process/warning',
    'NativeModule internal/querystring',
    'NativeModule querystring',
    'Internal Binding url',
    'NativeModule internal/url',
    'NativeModule internal/source_map/source_map_cache',
    'NativeModule internal/console/constructor',
    'NativeModule internal/console/global',
    'Internal Binding permission',
    'NativeModule internal/process/permission',
    'NativeModule internal/util/inspector',
    'Internal Binding inspector',
    'NativeModule util',
    'NativeModule internal/webidl',
    'Internal Binding performance',
    'NativeModule internal/perf/utils',
    'NativeModule internal/event_target',
    'Internal Binding blob',
    'Internal Binding mksnapshot',
    'NativeModule internal/v8/startup_snapshot',
    'NativeModule internal/process/signal',
    'Internal Binding fs',
    'Internal Binding encoding_binding',
    'NativeModule internal/encoding',
    'NativeModule internal/webstreams/util',
    'NativeModule internal/webstreams/queuingstrategies',
    'NativeModule internal/blob',
    'NativeModule internal/fs/utils',
    'NativeModule fs',
    'NativeModule internal/idna',
    'NativeModule url',
    'NativeModule internal/modules/helpers',
    'NativeModule internal/modules/package_json_reader',
    'Internal Binding module_wrap',
    'NativeModule internal/modules/cjs/loader',
    'NativeModule internal/process/pre_execution',
    'NativeModule internal/modules/esm/utils',
    'NativeModule internal/vm/module',
    'NativeModule internal/inspector_async_hook',
    'Internal Binding wasm_web_api',
    'Internal Binding worker',
    'NativeModule internal/modules/run_main',
    'NativeModule internal/net',
    'NativeModule internal/dns/utils',
    'NativeModule internal/modules/esm/loader',
    'NativeModule internal/source_map/source_map',
    'NativeModule module',
    'NativeModule internal/process/esm_loader',
    'NativeModule process',
    'NativeModule internal/abort_controller',
    'NativeModule internal/streams/utils',
    'NativeModule internal/streams/end-of-stream',
    'NativeModule internal/streams/destroy',
    'NativeModule internal/streams/legacy',
    'NativeModule internal/streams/add-abort-signal',
    ... 32 more items
  ],
  binding: [Function: binding],
  _linkedBinding: [Function: _linkedBinding],
  _events: [Object: null prototype] {
    newListener: [Function: startListeningIfSignal],
    removeListener: [Function: stopListeningIfSignal],
    warning: [Function: onWarning],
    SIGWINCH: [
      [Function: refreshStdoutOnSigWinch],
      [Function: refreshStderrOnSigWinch]
    ]
  },
  _eventsCount: 4,
  _maxListeners: undefined,
  domain: null,
  _exiting: [Getter/Setter],
  exitCode: [Getter/Setter],
  config: {
    target_defaults: {
      cflags: [],
      default_configuration: 'Release',
      defines: [Array],
      include_dirs: [],
      libraries: []
    },
    variables: {
      asan: 0,
      coverage: false,
      dcheck_always_on: 0,
      debug_nghttp2: false,
      debug_node: false,
      enable_lto: false,
      enable_pgo_generate: false,
      enable_pgo_use: false,
      error_on_warn: false,
      force_dynamic_crt: 0,
      host_arch: 'x64',
      icu_data_in: '..\\..\\deps\\icu-tmp\\icudt73l.dat',
      icu_endianness: 'l',
      icu_gyp_path: 'tools/icu/icu-generic.gyp',
      icu_path: 'deps/icu-small',
      icu_small: false,
      icu_ver_major: '73',
      is_debug: 0,
      libdir: 'lib',
      llvm_version: '0.0',
      napi_build_version: '9',
      nasm_version: '2.16',
      node_builtin_shareable_builtins: [Array],
      node_byteorder: 'little',
      node_debug_lib: false,
      node_enable_d8: false,
      node_enable_v8_vtunejit: false,
      node_fipsinstall: false,
      node_install_corepack: true,
      node_install_npm: true,
      node_library_files: [Array],
      node_module_version: 120,
      node_no_browser_globals: false,
      node_prefix: '\\usr\\local',
      node_release_urlbase: 'https://nodejs.org/download/release/',
      node_shared: false,
      node_shared_brotli: false,
      node_shared_cares: false,
      node_shared_http_parser: false,
      node_shared_libuv: false,
      node_shared_nghttp2: false,
      node_shared_nghttp3: false,
      node_shared_ngtcp2: false,
      node_shared_openssl: false,
      node_shared_zlib: false,
      node_tag: '',
      node_target_type: 'executable',
      node_use_bundled_v8: true,
      node_use_node_code_cache: true,
      node_use_node_snapshot: true,
      node_use_openssl: true,
      node_use_v8_platform: true,
      node_with_ltcg: true,
      node_without_node_options: false,
      node_write_snapshot_as_array_literals: true,
      openssl_is_fips: false,
      openssl_quic: true,
      ossfuzz: false,
      shlib_suffix: 'so.120',
      single_executable_application: true,
      target_arch: 'x64',
      v8_enable_31bit_smis_on_64bit_arch: 0,
      v8_enable_extensible_ro_snapshot: 0,
      v8_enable_gdbjit: 0,
      v8_enable_hugepage: 0,
      v8_enable_i18n_support: 1,
      v8_enable_inspector: 1,
      v8_enable_javascript_promise_hooks: 1,
      v8_enable_lite_mode: 0,
      v8_enable_object_print: 1,
      v8_enable_pointer_compression: 0,
      v8_enable_shared_ro_heap: 1,
      v8_enable_short_builtin_calls: 1,
      v8_enable_webassembly: 1,
      v8_no_strict_aliasing: 1,
      v8_optimized_debug: 1,
      v8_promise_internal_field_count: 1,
      v8_random_seed: 0,
      v8_trace_maps: 0,
      v8_use_siphash: 1,
      want_separate_host_toolset: 0
    }
  },
  dlopen: [Function: dlopen],
  uptime: [Function: uptime],
  _getActiveRequests: [Function: _getActiveRequests],
  _getActiveHandles: [Function: _getActiveHandles],
  getActiveResourcesInfo: [Function: getActiveResourcesInfo],
  reallyExit: [Function: reallyExit],
  _kill: [Function: _kill],
  cpuUsage: [Function: cpuUsage],
  resourceUsage: [Function: resourceUsage],
  memoryUsage: [Function: memoryUsage] { rss: [Function: rss] },
  constrainedMemory: [Function: constrainedMemory],
  kill: [Function: kill],
  exit: [Function: exit],
  hrtime: [Function: hrtime] { bigint: [Function: hrtimeBigInt] },
  openStdin: [Function (anonymous)],
  allowedNodeEnvironmentFlags: NodeEnvironmentFlagsSet(0) [Set] {
    '--icu-data-dir',
    '--title',
    '--use-largepages',
    '--trace-tls',
    '--no-trace-tls',
    '--trace-event-categories',
    '--trace-event-file-pattern',
    '--v8-pool-size',
    '--force-context-aware',
    '--no-force-context-aware',
    '--disallow-code-generation-from-strings',
    '--report-dir',
    '--trace-sync-io',
    '--no-trace-sync-io',
    '--zero-fill-buffers',
    '--no-zero-fill-buffers',
    '--diagnostic-dir',
    '--experimental-worker',
    '--disable-proto',
    '--node-snapshot',
    '--no-node-snapshot',
    '--debug-arraybuffer-allocations',
    '--no-debug-arraybuffer-allocations',
    '--abort-on-uncaught-exception',
    '--snapshot-blob',
    '--pending-deprecation',
    '--no-pending-deprecation',
    '--use-bundled-ca',
    '--no-use-bundled-ca',
    '--report-filename',
    '--report-compact',
    '--no-report-compact',
    '--report-on-fatalerror',
    '--no-report-on-fatalerror',
    '--perf-prof',
    '--report-signal',
    '--openssl-config',
    '--tls-cipher-list',
    '--use-openssl-ca',
    '--no-use-openssl-ca',
    '--node-memory-debug',
    '--enable-fips',
    '--no-enable-fips',
    '--force-fips',
    '--no-force-fips',
    '--secure-heap',
    '--secure-heap-min',
    '--openssl-legacy-provider',
    '--no-openssl-legacy-provider',
    '--openssl-shared-config',
    '--no-openssl-shared-config',
    '--trace-sigint',
    '--no-trace-sigint',
    '--track-heap-objects',
    '--no-track-heap-objects',
    '--experimental-detect-module',
    '--no-experimental-detect-module',
    '--warnings',
    '--no-warnings',
    '--experimental-repl-await',
    '--no-experimental-repl-await',
    '--experimental-json-modules',
    '--interpreted-frames-native-stack',
    '--perf-basic-prof-only-functions',
    '--max-old-space-size',
    '--allow-fs-write',
    '--max-semi-space-size',
    '--experimental-websocket',
    '--no-experimental-websocket',
    '--experimental-permission',
    '--no-experimental-permission',
    '--perf-basic-prof',
    '--perf-prof-unwinding-info',
    '--unhandled-rejections',
    '--experimental-network-imports',
    '--no-experimental-network-imports',
    '--stack-trace-limit',
    '--jitless',
    '--experimental-top-level-await',
    '--require',
    '--huge-max-old-generation-size',
    '--experimental-shadow-realm',
    '--no-experimental-shadow-realm',
    '--report-uncaught-exception',
    '--no-report-uncaught-exception',
    '--report-on-signal',
    '--no-report-on-signal',
    '--enable-etw-stack-walking',
    '--conditions',
    '--experimental-abortcontroller',
    '--experimental-policy',
    '--enable-source-maps',
    '--no-enable-source-maps',
    '--experimental-vm-modules',
    '--no-experimental-vm-modules',
    '--dns-result-order',
    '--network-family-autoselection',
    '--no-network-family-autoselection',
    '--insecure-http-parser',
    '--no-insecure-http-parser',
    ... 102 more items,
    [Symbol(internal properties)]: { array: [Array], set: [Set] }
  },
  assert: [Function: deprecated],
  features: {
    inspector: true,
    debug: false,
    uv: true,
    ipv6: true,
    tls_alpn: true,
    tls_sni: true,
    tls_ocsp: true,
    tls: true,
    cached_builtins: [Getter]
  },
  _fatalException: [Function (anonymous)],
  setUncaughtExceptionCaptureCallback: [Function: setUncaughtExceptionCaptureCallback],
  hasUncaughtExceptionCaptureCallback: [Function: hasUncaughtExceptionCaptureCallback],
  emitWarning: [Function: emitWarning],
  nextTick: [Function: nextTick],
  _tickCallback: [Function: runNextTicks],
  sourceMapsEnabled: [Getter],
  setSourceMapsEnabled: [Function: setSourceMapsEnabled],
  _debugProcess: [Function: _debugProcess],
  _debugEnd: [Function: _debugEnd],
  _startProfilerIdleNotifier: [Function (anonymous)],
  _stopProfilerIdleNotifier: [Function (anonymous)],
  stdout: [Getter],
  stdin: [Getter],
  stderr: [Getter],
  abort: [Function: abort],
  umask: [Function: wrappedUmask],
  chdir: [Function: wrappedChdir],
  cwd: [Function: wrappedCwd],
  env: {
    ALLUSERSPROFILE: 'C:\\ProgramData',
    APPDATA: 'C:\\Users\\ganes\\AppData\\Roaming',
    ChocolateyInstall: 'C:\\ProgramData\\chocolatey',
    ChocolateyLastPathUpdate: '133441465779742958',
    CommonProgramFiles: 'C:\\Program Files\\Common Files',
    'CommonProgramFiles(x86)': 'C:\\Program Files (x86)\\Common Files',
    CommonProgramW6432: 'C:\\Program Files\\Common Files',
    COMPUTERNAME: 'DESKTOP-549FNM1',
    ComSpec: 'C:\\Windows\\system32\\cmd.exe',
    DriverData: 'C:\\Windows\\System32\\Drivers\\DriverData',
    EFC_21400: '1',
    FPS_BROWSER_APP_PROFILE_STRING: 'Internet Explorer',
    FPS_BROWSER_USER_PROFILE_STRING: 'Default',
    HOMEDRIVE: 'C:',
    HOMEPATH: '\\Users\\ganes',
    LOCALAPPDATA: 'C:\\Users\\ganes\\AppData\\Local',
    LOGONSERVER: '\\\\DESKTOP-549FNM1',
    NUMBER_OF_PROCESSORS: '8',
    OneDrive: 'C:\\Users\\ganes\\OneDrive',
    OneDriveConsumer: 'C:\\Users\\ganes\\OneDrive',
    OS: 'Windows_NT',
    Path: 'C:\\Python312\\Scripts\\;C:\\Python312\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;C:\\Program Files\\dotnet\\;C:\\Users\\ganes\\OneDrive\\Documents\\binaries\\git\\cmd;C:\\Users\\ganes\\OneDrive\\Documents\\binaries\\git\\mingw64\\bin;C:\\Users\\ganes\\OneDrive\\Documents\\binaries\\git\\usr\\bin;C:\\Users\\ganes\\OneDrive\\Documents\\binaries\\nodejs\\;C:\\ProgramData\\chocolatey\\bin;C:\\Users\\ganes\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\ganes\\AppData\\Roaming\\npm',
    PATHEXT: '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW',
    PROCESSOR_ARCHITECTURE: 'AMD64',
    PROCESSOR_IDENTIFIER: 'Intel64 Family 6 Model 142 Stepping 12, GenuineIntel',
    PROCESSOR_LEVEL: '6',
    PROCESSOR_REVISION: '8e0c',
    ProgramData: 'C:\\ProgramData',
    ProgramFiles: 'C:\\Program Files',
    'ProgramFiles(x86)': 'C:\\Program Files (x86)',
    ProgramW6432: 'C:\\Program Files',
    PROMPT: '$P$G',
    PSModulePath: 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules',
    PUBLIC: 'C:\\Users\\Public',
    SESSIONNAME: 'Console',
    SystemDrive: 'C:',
    SystemRoot: 'C:\\Windows',
    TEMP: 'C:\\Users\\ganes\\AppData\\Local\\Temp',
    TMP: 'C:\\Users\\ganes\\AppData\\Local\\Temp',
    USERDOMAIN: 'DESKTOP-549FNM1',
    USERDOMAIN_ROAMINGPROFILE: 'DESKTOP-549FNM1',
    USERNAME: 'ganes',
    USERPROFILE: 'C:\\Users\\ganes',
    windir: 'C:\\Windows',
    ZES_ENABLE_SYSMAN: '1'
  },
  title: `Command Prompt - node  --eval "console.log(require('process'))"`,
  argv: [
    'C:\\Users\\ganes\\OneDrive\\Documents\\binaries\\nodejs\\node.exe'
  ],
  execArgv: [ '--eval', "console.log(require('process'))" ],
  pid: 12420,
  ppid: 11424,
  execPath: 'C:\\Users\\ganes\\OneDrive\\Documents\\binaries\\nodejs\\node.exe',
  debugPort: 9229,
  argv0: 'node',
  _eval: "console.log(require('process'))",
  _preload_modules: [],
  report: [Getter],
  [Symbol(kCapture)]: false
}

C:\Users\ganes>

ganeshkbhat avatar Dec 24 '23 02:12 ganeshkbhat

This not the right issue tracker, please use https://v8.dev/bug to file new bugs.

camillobruni avatar Mar 23 '24 21:03 camillobruni