/fugu-api-data

This repo contains raw data for Project Fugu 🐡 APIs.

Primary LanguageJavaScriptApache License 2.0Apache-2.0

Project Fugu 🐡 API Data

This repo contains raw data for Project Fugu 🐡 APIs. The data is available in two formats: pattern.js and pattern.mjs.

Data origin

The raw data in this repository comes from a Google spreadsheet that is published as a JSON file. The index.js script fetches this data, prettifies it, and saves it locally in a module and in a no-module variant.

Obtaining fresh data

You can trigger the data fetch process described above by running the start script:

npm start

Data usage

  • For the module version:

    import patterns from './patterns.mjs';
    
    console.log(patterns.WebBluetooth);
    /*
    {
      regEx: /navigator\.bluetooth\.requestDevice\s*\(/g,
      where: 'JavaScript',
      supported: (async () => 'bluetooth' in navigator)(),
      featureDetection: `(async () => 'bluetooth' in navigator)()`,
    }
    */
  • For the no-module version (for example to use it in a service worker):

    importScripts('patterns.js');
    console.log(patterns.WebBluetooth);
    /*
    {
      regEx: /navigator\.bluetooth\.requestDevice\s*\(/g,
      where: 'JavaScript',
      supported: (async () => 'bluetooth' in navigator)(),
      featureDetection: `(async () => 'bluetooth' in navigator)()`,
    }
    */

Data format

Each API is represented as an object with the following properties:

  • regEx: A regular expression that you can use to detect the API of interest in source code when you do static source code analysis.
  • where: The resource type where the regular expression needs to match in order to be valid. Either "JavaScript" or "Web App Manifest".
  • supported: A function that returns a promise that resolves with true, false, or undefined, dependent on whether the API is supported or not (undefined means no feature detection method exists).
  • featureDetection: The source code of the feature detection method, so you can use it in an eval() for example.

Depending projects

This data is used in the following projects:

License

Apache 2.0.