Skip to content

📦 Update dependency esbuild to v0.12.24#35840

Merged
rsimha merged 1 commit intomainfrom
renovate/esbuild-devdependencies
Aug 27, 2021
Merged

📦 Update dependency esbuild to v0.12.24#35840
rsimha merged 1 commit intomainfrom
renovate/esbuild-devdependencies

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate bot commented Aug 27, 2021

WhiteSource Renovate

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
esbuild 0.12.11 -> 0.12.24 age adoption passing confidence

See all other Renovate PRs on the Dependency Dashboard

How to resolve breaking changes

This PR may introduce breaking changes that require manual intervention. In such cases, you will need to check out this branch, fix the cause of the breakage, and commit the fix to ensure a green CI build. To check out and update this PR, follow the steps below:

# Check out the PR branch
git checkout -b renovate/esbuild-devdependencies main
git pull https://github.com/ampproject/amphtml.git renovate/esbuild-devdependencies

# Directly make fixes and commit them
amp lint --fix # For lint errors in JS files
amp prettify --fix # For prettier errors in non-JS files
# Edit source code in case of new compiler warnings / errors

# Push the changes to the branch
git push git@github.com:ampproject/amphtml.git renovate/esbuild-devdependencies:renovate/esbuild-devdependencies

Release Notes

evanw/esbuild

v0.12.24

Compare Source

  • Fix an edge case with direct eval and variable renaming

    Use of the direct eval construct causes all variable names in the scope containing the direct eval and all of its parent scopes to become "pinned" and unable to be renamed. This is because the dynamically-evaluated code is allowed to reference any of those variables by name. When this happens esbuild avoids renaming any of these variables, which effectively disables minification for most of the file, and avoids renaming any non-pinned variables to the name of a pinned variable.

    However, there was previously a bug where the pinned variable name avoidance only worked for pinned variables in the top-level scope but not in nested scopes. This could result in a non-pinned variable being incorrectly renamed to the name of a pinned variable in certain cases. For example:

    // Input to esbuild
    return function($) {
      function foo(arg) {
        return arg + $;
      }
      // Direct "eval" here prevents "$" from being renamed
      // Repeated "$" puts "$" at the top of the character frequency histogram
      return eval(foo($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$))
    }(2);

    When this code is minified with --minify-identifiers, the non-pinned variable arg is incorrectly transformed into $ resulting in a name collision with the nested pinned variable $:

    // Old output from esbuild (incorrect)
    return function($) {
      function foo($) {
        return $ + $;
      }
      return eval(foo($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$));
    }(2);

    This is because the non-pinned variable arg is renamed to the top character in the character frequency histogram $ (esbuild uses a character frequency histogram for smaller gzipped output sizes) and the pinned variable $ was incorrectly not present in the list of variable names to avoid. With this release, the output is now correct:

    // New output from esbuild (correct)
    return function($) {
      function foo(n) {
        return n + $;
      }
      return eval(foo($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$));
    }(2);

    Note that even when esbuild handles direct eval correctly, using direct eval is not recommended because it disables minification for the file and likely won't work correctly in the presence of scope hoisting optimizations. See https://esbuild.github.io/link/direct-eval for more details.

v0.12.23

Compare Source

  • Parsing of rest arguments in certain TypeScript types (#​1553)

    This release implements parsing of rest arguments inside object destructuring inside arrow functions inside TypeScript type declarations. Support for rest arguments in this specific syntax was not previously implemented. The following code was incorrectly considered a syntax error before this release, but is no longer considered a syntax error:

    type F = ({ ...rest }) => void;
  • Fix error message for watch: true and buildSync (#​1552)

    Watch mode currently only works with the build API. Previously using watch mode with the buildSync API caused a confusing error message. This release explicitly disallows doing this, so the error message is now more clear.

  • Fix an minification bug with the --keep-names option (#​1552)

    This release fixes a subtle bug that happens with --keep-names --minify and nested function declarations in strict mode code. It can be triggered by the following code, which was being compiled incorrectly under those flags:

    export function outer() {
      {
        function inner() {
          return Math.random();
        }
        const x = inner();
        console.log(x);
      }
    }
    outer();

    The bug was caused by an unfortunate interaction between a few of esbuild's behaviors:

    1. Function declarations inside of nested scopes behave differently in different situations, so esbuild rewrites this function declaration to a local variable initialized to a function expression instead so that it behaves the same in all situations.

      More specifically, the interpretation of such function declarations depends on whether or not it currently exists in a strict mode context:

      > (function(){ { function x(){} } return x })()
      function x() {}
      
      > (function(){ 'use strict'; { function x(){} } return x })()
      ❌ Uncaught ReferenceError: x is not defined
      

      The bundling process sometimes erases strict mode context. For example, different files may have different strict mode status but may be merged into a single file which all shares the same strict mode status. Also, files in ESM format are automatically in strict mode but a bundle output file in IIFE format may not be executed in strict mode. Transforming the nested function to a let in strict mode and a var in non-strict mode means esbuild's output will behave reliably in different environments.

    2. The "keep names" feature adds automatic calls to the built-in __name helper function to assign the original name to the .name property of the minified function object at run-time. That transforms the code into this:

      let inner = function() {
        return Math.random();
      };
      __name(inner, "inner");
      const x = inner();
      console.log(x);

      This injected helper call does not count as a use of the associated function object so that dead-code elimination will still remove the function object as dead code if nothing else uses it. Otherwise dead-code elimination would stop working when the "keep names" feature is enabled.

    3. Minification enables an optimization where an initialized variable with a single use immediately following that variable is transformed by inlining the initializer into the use. So for example var a = 1; return a is transformed into return 1. This code matches this pattern (initialized single-use variable + use immediately following that variable) so the optimization does the inlining, which transforms the code into this:

      __name(function() {
        return Math.random();
      }, "inner");
      const x = inner();
      console.log(x);

      The code is now incorrect because inner actually has two uses, although only one was actually counted.

    This inlining optimization will now be avoided in this specific case, which fixes the bug without regressing dead-code elimination or initialized variable inlining in any other cases.

v0.12.22

Compare Source

  • Make HTTP range requests more efficient (#​1536)

    The local HTTP server built in to esbuild supports range requests, which are necessary for video playback in Safari. This means you can now use <video> tags in your HTML pages with esbuild's local HTTP server.

    Previously this was implemented inefficiently for files that aren't part of the build, but that are read from the underlying fallback directory. In that case the entire file was being read even though only part of the file was needed. In this release, only the part of the file that is needed is read so using HTTP range requests with esbuild in this case will now use less memory.

  • Fix CSS minification bug with box-shadow and var() (#​1538)

    The box-shadow property can be specified using 2, 3, or 4 numbers. The 3rd and 4th numbers are the blur radius and spread radius, and can be omitted if zero. When minifying, esbuild has an optimization that removes trailing zeros from runs of numbers within the box-shadow property. However, that optimization is not correct in the presence of tokens that are neither a number, a color, nor the token insert. These edge cases include var() or calc() tokens. With this release, esbuild will now do stronger validation and will only remove trailing zeros if the contents of the box-shadow property matches the underlying CSS grammar exactly.

    /* Original code */
    button {
      box-shadow: 0 0 0 var(--spread) red;
    }
    
    /* Old minified output */
    button{box-shadow:0 0 var(--spread) red}
    
    /* New minified output */
    button{box-shadow:0 0 0 var(--spread) red}

v0.12.21

Compare Source

  • Add support for native esbuild on Windows 64-bit ARM (#​995)

    The newly-released Go version 1.17.0 adds support for Windows 64-bit ARM CPUs, so esbuild can now support these CPUs as well. This release introduces support for npm install esbuild on Windows 64-bit ARM.

v0.12.20

Compare Source

  • Avoid the sequence </style in CSS output (#​1509)

    The CSS code generator now avoids generating the character sequence </style in case you want to embed the CSS output in a <style>...</style> tag inside HTML:

    /* Original code */
    a:after {
      content: "</style>";
    }
    
    /* Old output */
    a:after {
      content: "</style>";
    }
    
    /* New output */
    a:after {
      content: "<\/style>";
    }

    This mirrors how the JS code generator similarly avoids the character sequence </script.

    In addition, the check that escapes </style and </script is now case-insensitive to match how the browser's HTML parser behaves. So </STYLE and </SCRIPT are now escaped as well.

  • Fix a TypeScript parsing edge case with ASI (Automatic Semicolon Insertion) (#​1512)

    This fixes a parsing bug where TypeScript types consisting of multiple identifiers joined together with a . could incorrectly extend onto the next line if the next line started with <. This problem was due to ASI; esbuild should be automatically inserting a semicolon at the end of the line:

    let x: {
      <A extends B>(): c.d /* A semicolon should be automatically inserted here */
      <E extends F>(): g.h
    }

    Previously the above code was incorrectly considered a syntax error since esbuild attempted to parse the parameterized type c.d<E extends F ? ...>. With this release, this code is now parsed correctly.

v0.12.19

Compare Source

  • Add support for CSS source maps (#​519)

    With this release, esbuild will now generate source maps for CSS output files when --sourcemap is enabled. This supports all of the same options as JS source maps including --sourcemap=inline and --sourcemap=external. In addition, CSS input files with embedded /*# sourceMappingURL=... */ comments will cause the CSS output file source map to map all the way back to the original inputs. CSS source maps are used by the browser's style inspector to link back to the original source code instead of linking to the bundled source code.

  • Fix computed class fields in TypeScript edge case (#​1507)

    If TypeScript code contains computed class fields, the target environment supports class fields so syntax lowering is not necessary, and TypeScript's useDefineForClassFields setting is set to true, then esbuild had a bug where the computed property names were computed after the class definition and were undefined. Note that TypeScript's useDefineForClassFields setting defaults to true if tsconfig.json contains "target": "ESNext".

    // Original code
    class Foo {
      [foo] = 1;
      @&#8203;bar [baz] = 2;
    }
    
    // Old output
    var _a, _b;
    var Foo = class {
      [_a] = 1;
      [_b] = 2;
    };
    _a = foo, _b = baz;
    __decorateClass([
      bar
    ], Foo.prototype, _b, 2);
    
    // New output
    var _a;
    var Foo = class {
      [foo] = 1;
      [_a = baz] = 2;
    };
    __decorateClass([
      bar
    ], Foo.prototype, _a, 2);

    The problem in this case is that normally TypeScript moves class field initializers into the special constructor method (automatically generating one if one doesn't already exist) so the side effects for class field property names must happen after the class body. But if class fields are supported by the target environment then the side effects must happen inline instead.

v0.12.18

Compare Source

  • Allow implicit ./ in CSS @import paths (#​1494)

    In the browser, the paths inside CSS @import rules are implicitly relative to the path of the current CSS style sheet. Previously esbuild used node's JS path resolution rules in CSS as well, which required a ./ or ../ prefix for a path to be considered a relative path. Paths without that prefix are considered package paths and are searched for inside node_modules instead.

    With this release, esbuild will now first try to interpret the path as a relative path and then fall back to interpreting it as a package path if nothing exists at that relative path. This feature was originally added in version 0.7.18 but only worked for CSS url() tokens. In this release it now also works for @import rules.

    This feature was contributed by @​pd4d10.

  • Fix lowering of nullish coalescing assignment edge case (#​1493)

    This release fixes a bug where lowering of the ??= nullish coalescing assignment operator failed when the target environment supported nullish coalescing and private class fields but not nullish coalescing assignment. An example target environment with this specific feature support matrix combination is node 14.8. This edge case is now lowered correctly:

    // Original code
    class A {
      #a;
      f() {
        this.#a ??= 1;
      }
    }
    
    // Old output (with --target=node14.8)
    panic: Unexpected expression of type *js_ast.EPrivateIdentifier
    
    // New output (with --target=node14.8)
    class A {
      #a;
      f() {
        this.#a ?? (this.#a = 1);
      }
    }
  • Fix public fields being inserted before super() call (#​1497)

    The helper function that esbuild uses to emulate the new public class field syntax can potentially be inserted into the class constructor before the super() call. That is problematic because the helper function makes use of this, and this must only be used after the super() call. This release fixes a case where this happens when minification is enabled:

    // Original code
    class A extends B {
      x;
      constructor() {
        f();
        super();
      }
    }
    
    // Old output (with --minify-syntax --target=es6)
    class A extends B {
      constructor() {
        __publicField(this, "x");
        f(), super();
      }
    }
    
    // New output (with --minify-syntax --target=es6)
    class A extends B {
      constructor() {
        f();
        super();
        __publicField(this, "x");
      }
    }
  • Fix lowering of static private methods in class expressions (#​1498)

    Previously static private methods were lowered incorrectly when present in class expressions. The class expression itself was missing in the output due to an oversight (variable shadowing). This issue has been fixed:

    // Original code
    (class {
      static #x() {}
    });
    
    // Old output (with --target=es6)
    var _x, _a, x_fn;
    __privateAdd(_a, _x), _x = new WeakSet(), x_fn = function() {
    }, __privateAdd(_a, _x), _a;
    
    // New output (with --target=es6)
    var _x, _a, x_fn;
    _a = class {
    }, _x = new WeakSet(), x_fn = function() {
    }, __privateAdd(_a, _x), _a;

v0.12.17

Compare Source

  • Fix a bug with private fields and logical assignment operators (#​1418)

    This release fixes a bug where code using private fields in combination with logical assignment operators was transformed incorrectly if the target environment supported logical assignment operators but not private fields. Since logical assignment operators are assignment operators, the entire operator must be transformed even if the operator is supported. This should now work correctly:

    // Original code
    class Foo {
      #x
      foo() {
        this.#x &&= 2
        this.#x ||= 2
        this.#x ??= 2
      }
    }
    
    // Old output
    var _x;
    class Foo {
      constructor() {
        __privateAdd(this, _x, void 0);
      }
      foo() {
        this._x &&= 2;
        this._x ||= 2;
        this._x ??= 2;
      }
    }
    _x = new WeakMap();
    
    // New output
    var _x, _a;
    class Foo {
      constructor() {
        __privateAdd(this, _x, void 0);
      }
      foo() {
        __privateGet(this, _x) && __privateSet(this, _x, 2);
        __privateGet(this, _x) || __privateSet(this, _x, 2);
        __privateGet(this, _x) ?? __privateSet(this, _x, 2);
      }
    }
    _x = new WeakMap();
  • Fix a hoisting bug in the bundler (#​1455)

    This release fixes a bug where variables declared using var inside of top-level for loop initializers were not hoisted inside lazily-initialized ES modules (such as those that are generated when bundling code that loads an ES module using require). This meant that hoisted function declarations incorrectly didn't have access to these loop variables:

    // entry.js
    console.log(require('./esm-file').test())
    
    // esm-file.js
    for (var i = 0; i < 10; i++) ;
    export function test() { return i }

    Old output (incorrect):

    // esm-file.js
    var esm_file_exports = {};
    __export(esm_file_exports, {
      test: () => test
    });
    function test() {
      return i;
    }
    var init_esm_file = __esm({
      "esm-file.js"() {
        for (var i = 0; i < 10; i++)
          ;
      }
    });
    
    // entry.js
    console.log((init_esm_file(), esm_file_exports).test());

    New output (correct):

    // esm-file.js
    var esm_file_exports = {};
    __export(esm_file_exports, {
      test: () => test
    });
    function test() {
      return i;
    }
    var i;
    var init_esm_file = __esm({
      "esm-file.js"() {
        for (i = 0; i < 10; i++)
          ;
      }
    });
    
    // entry.js
    console.log((init_esm_file(), esm_file_exports).test());
  • Fix a code generation bug for private methods (#​1424)

    This release fixes a bug where when private methods are transformed and the target environment is one that supports private methods (such as esnext), the member function name was uninitialized and took on the zero value by default. This resulted in the member function name becoming __create instead of the correct name since that's the name of the symbol at index 0. Now esbuild always generates a private method symbol even when private methods are supported, so this is no longer an issue:

    // Original code
    class Foo {
      #a() { return 'a' }
      #b() { return 'b' }
      static c
    }
    
    // Old output
    var _a, __create, _b, __create;
    var Foo = class {
      constructor() {
        __privateAdd(this, _a);
        __privateAdd(this, _b);
      }
    };
    _a = new WeakSet();
    __create = function() {
      return "a";
    };
    _b = new WeakSet();
    __create = function() {
      return "b";
    };
    __publicField(Foo, "c");
    
    // New output
    var _a, a_fn, _b, b_fn;
    var Foo = class {
      constructor() {
        __privateAdd(this, _a);
        __privateAdd(this, _b);
      }
    };
    _a = new WeakSet();
    a_fn = function() {
      return "a";
    };
    _b = new WeakSet();
    b_fn = function() {
      return "b";
    };
    __publicField(Foo, "c");
  • The CLI now stops watch and serve mode when stdin is closed (#​1449)

    To facilitate esbuild being called from the Erlang VM, esbuild's command-line interface will now exit when in --watch or --serve mode if stdin is closed. This change is necessary because the Erlang VM doesn't have an API for terminating a child process, so it instead closes stdin to indicate that the process is no longer needed.

    Note that this only happens when stdin is not a TTY (i.e. only when the CLI is being used non-interactively) to avoid disrupting the use case of manually moving esbuild to a background job using a Unix terminal.

    This change was contributed by @​josevalim.

v0.12.16

Compare Source

  • Remove warning about bad CSS @-rules (#​1426)

    The CSS bundler built in to esbuild is only designed with real CSS in mind. Running other languages that compile down to CSS through esbuild without compiling them down to CSS first can be a bad idea since esbuild applies browser-style error recovery to invalid syntax and uses browser-style import order that other languages might not be expecting. This is why esbuild previously generated warnings when it encountered unknown CSS @-rules.

    However, some people want to run other non-CSS languages through esbuild's CSS bundler anyway. So with this release, esbuild will no longer generate any warnings if you do this. But keep in mind that doing this is still potentially unsafe. Depending on the input language, using esbuild's CSS bundler to bundle non-CSS code can still potentially alter the semantics of your code.

  • Allow ES2021 in tsconfig.json (#​1470)

    TypeScript recently added support for ES2021 in tsconfig.json so esbuild now supports this too. This has the same effect as if you passed --target=es2021 to esbuild. Keep in mind that the value of target in tsconfig.json is only respected if you did not pass a --target= value to esbuild.

  • Avoid using the worker_threads optimization in certain old node versions (#​1462)

    The worker_threads optimization makes esbuild's synchronous API calls go much faster than they would otherwise. However, it turns out this optimization cannot be used in certain node versions older than v12.17.0, where node throws an error when trying to create the worker. This optimization is now disabled in these scenarios.

    Note that these old node versions are currently in maintenance. I recommend upgrading to a modern version of node if run-time performance is important to you.

  • Paths starting with node: are implicitly external when bundling for node (#​1466)

    This replicates a new node feature where you can prefix an import path with node: to load a native node module by that name (such as import fs from "node:fs/promises"). These paths also have special behavior:

    Core modules can also be identified using the node: prefix, in which case it bypasses the require cache. For instance, require('node:http') will always return the built in HTTP module, even if there is require.cache entry by that name.

    With this release, esbuild's built-in resolver will now automatically consider all import paths starting with node: as external. This new behavior is only active when the current platform is set to node such as with --platform=node. If you need to customize this behavior, you can write a plugin to intercept these paths and treat them differently.

  • Consider \ and / to be the same in file paths (#​1459)

    On Windows, there are many different file paths that can refer to the same underlying file. Windows uses a case-insensitive file system so for example foo.js and Foo.js are the same file. When bundling, esbuild needs to treat both of these paths as the same to avoid incorrectly bundling the file twice. This is case is already handled by identifying files by their lower-case file path.

    The case that wasn't being handled is the fact that Windows supports two different path separators, / and \, both of which mean the same thing. For example foo/bar.js and foo\bar.js are the same file. With this release, this case is also handled by esbuild. Files that are imported in multiple places with inconsistent path separators will now be considered the same file instead of bundling the file multiple times.

v0.12.15

Compare Source

  • Fix a bug with var() in CSS color lowering (#​1421)

    This release fixes a bug with esbuild's handling of the rgb and hsl color functions when they contain var(). Each var() token sequence can be substituted for any number of tokens including zero or more than one, but previously esbuild's output was only correct if each var() inside of rgb or hsl contained exactly one token. With this release, esbuild will now not attempt to transform newer CSS color syntax to older CSS color syntax if it contains var():

    /* Original code */
    a {
      color: hsl(var(--hs), var(--l));
    }
    
    /* Old output */
    a {
      color: hsl(var(--hs), ,, var(--l));
    }
    
    /* New output */
    a {
      color: hsl(var(--hs), var(--l));
    }
    

    The bug with the old output above happened because esbuild considered the arguments to hsl as matching the pattern hsl(h s l) which is the new space-separated form allowed by CSS Color Module Level 4. Then esbuild tried to convert this to the form hsl(h, s, l) which is more widely supported by older browsers. But this substitution doesn't work in the presence of var(), so it has now been disabled in that case.

v0.12.14

Compare Source

  • Fix the file loader with custom namespaces (#​1404)

    This fixes a regression from version 0.12.12 where using a plugin to load an input file with the file loader in a custom namespace caused esbuild to write the contents of that input file to the path associated with that namespace instead of to a path inside of the output directory. With this release, the file loader should now always copy the file somewhere inside of the output directory.

v0.12.13

Compare Source

  • Fix using JS synchronous API from from non-main threads (#​1406)

    This release fixes an issue with the new implementation of the synchronous JS API calls (transformSync and buildSync) when they are used from a thread other than the main thread. The problem happened because esbuild's new implementation uses node's worker_threads library internally and non-main threads were incorrectly assumed to be esbuild's internal thread instead of potentially another unrelated thread. Now esbuild's synchronous JS APIs should work correctly when called from non-main threads.

v0.12.12

Compare Source

  • Fix file loader import paths when subdirectories are present (#​1044)

    Using the file loader for a file type causes importing affected files to copy the file into the output directory and to embed the path to the copied file into the code that imported it. However, esbuild previously always embedded the path relative to the output directory itself. This is problematic when the importing code is generated within a subdirectory inside the output directory, since then the relative path is wrong. For example:

    $ cat src/example/entry.css
    div {
      background: url(../images/image.png);
    }
    
    $ esbuild --bundle src/example/entry.css --outdir=out --outbase=src --loader:.png=file
    
    $ find out -type f
    out/example/entry.css
    out/image-55DNWN2R.png
    
    $ cat out/example/entry.css
    /* src/example/entry.css */
    div {
      background: url(./image-55DNWN2R.png);
    }
    

    This is output from the previous version of esbuild. The above asset reference in out/example/entry.css is wrong. The path should start with ../ because the two files are in different directories.

    With this release, the asset references present in output files will now be the full relative path from the output file to the asset, so imports should now work correctly when the entry point is in a subdirectory within the output directory. This change affects asset reference paths in both CSS and JS output files.

    Note that if you want asset reference paths to be independent of the subdirectory in which they reside, you can use the --public-path setting to provide the common path that all asset reference paths should be constructed relative to. Specifically --public-path=. should bring back the old problematic behavior in case you need it.

  • Add support for [dir] in --asset-names (#​1196)

    You can now use path templates such as --asset-names=[dir]/[name]-[hash] to copy the input directory structure of your asset files (i.e. input files loaded with the file loader) to the output directory. Here's an example:

    $ cat entry.css
    header {
      background: url(images/common/header.png);
    }
    main {
      background: url(images/home/hero.png);
    }
    
    $ esbuild --bundle entry.css --outdir=out --asset-names=[dir]/[name]-[hash] --loader:.png=file
    
    $ find out -type f
    out/images/home/hero-55DNWN2R.png
    out/images/common/header-55DNWN2R.png
    out/entry.css
    
    $ cat out/entry.css
    /* entry.css */
    header {
      background: url(./images/common/header-55DNWN2R.png);
    }
    main {
      background: url(./images/home/hero-55DNWN2R.png);
    }
    

Configuration

📅 Schedule: "after 12am every weekday" in timezone America/Los_Angeles.

🚦 Automerge: Enabled.

Rebasing: Never, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box.

This PR has been generated by WhiteSource Renovate. View repository job log here.

@rsimha rsimha merged commit e9b86ad into main Aug 27, 2021
@rsimha rsimha deleted the renovate/esbuild-devdependencies branch August 27, 2021 17:02
DevMahix pushed a commit to BroadBandyDev/amphtml that referenced this pull request Sep 9, 2021
Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>
DevMahix pushed a commit to BroadBandyDev/amphtml that referenced this pull request Sep 9, 2021
Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>
powerivq added a commit that referenced this pull request Sep 16, 2021
* Broadbandy ad service implementation

* Revert serve port

* Broadbandy ad service implementation

* Revert serve port

* 🏗 Misc tsconfig updates (#35787)

* update compilerOptions.paths to handle barrel files (index.js) in VSCode

* update includes/excludes allowlist/blocklist src files

* ♻️ Bento Selector: Simplify logic (#35758)

* Bento Selector Option: Give props via JSX

* Remove extraneous event handlers

* esbuild-exp fix define_experiment_constant (#35800)

* SwG Release 0.1.22.181 (#35808)

* Improve AMP_CONFIG handling during build (#35773)

* applyAmpConfig: also update sourcemaps

* no stone unturned: AMP_CONFIG should be part of the wrapper

* update comments

* update comment + fix bug

* another bugfix

* allow newline between ; and AMP_CONFIG

* retain logs for dist|build

* smol clean

* Update build-system/tasks/prepend-global/index.js

Co-authored-by: Raghu Simha <rsimha@amp.dev>

* Update build-system/tasks/prepend-global/index.js

Co-authored-by: Raghu Simha <rsimha@amp.dev>

* target --> filename

Co-authored-by: Raghu Simha <rsimha@amp.dev>

* hide placeholder when tweet is succesfully loaded (#35788)

* 🚮 Remove IE Support via Polyfills and Conditional Statements (#35317)

* Since we are not using the data, lets remove it

* Remove all isIE checks and polyfills only used by IE

* Remove URL changes

* Integration tests were looking for IE specifics

* remove transparent img, and ie tests

* Skip all tests on IE, this functionality will be removed by the infra team following success

* try using user agent directy in test configuration

* Fix

* Feedback on describe tests not needing configuration now

* Remove unused files again

* Fix build before main is repaired

* 🏗🚮 Remove all IE11 infrastructure code paths (#35341)

* Revert "Improve AMP_CONFIG handling during build (#35773)" (#35819)

* ♻️ Verizon media yahoo components merge (#35797)

* Merged the VerizonMedia ad component into the yahoo component

* Fixed documentation formatting issues.

* 🐛 [Amp story] Catch ScreenOrientation.lock promise (#35767)

* Catch for promise.

* Update comment.

* Send e.

* 🐛[Amp story] Add position scope to attachment-content wrapper (#35786)

* Add position to attachment-content wrapper.

* whitespace

* remove re-export and update MessageType imports (#35817)

* Wrap all play calls in catch handler (#35811)

* Wrap all play calls in catch handler

* Introduce playIgnoringError

* Fix type

* Fix undefined return case

* [amp-iframe] Wrap iframe in shadow DOM and ContainWrapper (#35774)

* build-system: fix infinite loop caused by watching css in npm dist folders. (#35827)

* Change amp-sticky-ad-to-amp-ad name to avoid trigging the old experiment unintentionally (#35779)

* amp GAM support added (#35782)

* add policy attributes

* add owners

* update files for Owners.

* Revert file

* added GAM implementation

* removed policy attribute

* removed policy attribute description

* changed attribute name and corrected indentation

* indentation corrected

* new line added at last

* 🏗  Simplify release tracker issue template (#35825)

* update

* more

* .

* fix some types (#35832)

* ie deprecation/bugfix: remove isIe check (#35833)

* Disable EsbuildCompilation experiment. (#35814)

* ✨ Action `toggleChecked()` (#35795)

* Update amp-actions-and-events.md

* Update amp-email-actions-and-events.md

* Update standard-actions.amp.html

* Update scroll-component.js

* Update action-impl.js

* Update standard-actions-impl.js

* Update test-action.js

* Update test-standard-actions.js

* Update test-standard-actions.js

* Update amp-actions-and-events.md

* Update amp-email-actions-and-events.md

* Update standard-actions.amp.html

* Update scroll-component.js

* Update action-impl.js

* Update standard-actions-impl.js

* Update test-action.js

* Update test-standard-actions.js

* Fix error  Delete `⏎`  prettier/prettier

* Update amp-actions-and-events.md

* Update amp-email-actions-and-events.md

* Update standard-actions.amp.html

* revert for attribution

* revert for attribution

* revert for attribution

* Update docs/spec/amp-actions-and-events.md

Co-authored-by: Justin Ridgewell <justin@ridgewell.name>

* Update docs/spec/amp-email-actions-and-events.md

Co-authored-by: Justin Ridgewell <justin@ridgewell.name>

* Update examples/standard-actions.amp.html

Co-authored-by: Justin Ridgewell <justin@ridgewell.name>

* Update test-standard-actions.js

* Update test-standard-actions.js

* Update test-standard-actions.js

* Fix error  Insert `,`  prettier/prettier

Co-authored-by: Justin Ridgewell <justin@ridgewell.name>

* Add TrafficStars ad network support (#35836)

* 📦 Update dependency esbuild to v0.12.11 (#35058)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update dependency prettier to v2.3.2 (#35059)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update dependency esbuild to v0.12.24 (#35840)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* ✨ `amp-date-display`: Support `timeZoneName` and `timeZoneNameShort` (#35828)

Fixes #35812

Adds support for template variables `{{timeZoneName}}` and `{{timeZoneNameShort}}`.

Added to Classic (`0.1`) and Bento (`1.0`) versions.

* 📦 Update dependency prismjs to 1.24.0 [SECURITY] (#35082)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update dependency path-parse to 1.0.7 [SECURITY] (#35600)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update linting devDependencies (#35842)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update subpackage devDependencies (#35035)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update dependency eslint-plugin-jsdoc to v36 (#35392)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update core devDependencies (#34748)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update validator devDependencies (#35841)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update build-system devDependencies (major) (#35377)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update dependency jszip to 3.7.0 [SECURITY] (#35599)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update build-system devDependencies (#34993)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* Remove amp-unresolved when extension downloads in R1 (#35845)

* Remove amp-unresolved when extension downloads in R1

* test

* Lint

* 🏗 Ensure every babel invocation has a name (#35851)

* 🏗 Replace `globby` with `fast-glob` (#35846)

* Remove IE11 support from supported browsers (#35865)

* mode: collapse definitions of localDev and test (#35823)

* mode: collapse localDev and test

* fix tests

* video-iframe-integration: test agnosticism.

* bring back isProd for DCE

* remove isLocalDev from core/mode

* getMode override --> AMP_CONFIG override.

* Remove getIntersectionChangeElementLayoutBox from amp-iframe. (#35860)

* Find sizer and apply slot before `layoutCallback` (#35784)

* Apply sizer slot in `buildInternal`

* Use optional chain in `applyStaticLayout`

* 📖 `bento-twitter` documentation (#35847)

* Copy to 0.1 subdir

* Edit existing documentation

* Create readme

* 🖍 Fix displaying hero images over blurry image placeholder (#35759)

* Fix displaying hero images over blurry image placeholder

This is a second attempt at fixing #32387. The first attempt improperly used `.i-amphtml-ssr` (a class selector), when it should have been `[i-amphtml-ssr]` (a property selector).

* Update z-index doc

* 🐛 [Amp story page attachment] Propagate title attribute to draggable drawer header (#35863)

* Propogate title attribute to header.

* Only build title element if title is defined.

* Validator rollup (#35882)

* cl/392962279 Allow style in noscript.

* cl/393187930 Make no-js case valid.

* cl/393885470 Remove notice from CSS/Doc length tests.

Co-authored-by: Greg Grothaus <greggrothaus@google.com>
Co-authored-by: honeybadgerdontcare <sedano@google.com>

* Remove "for the specified Twitter id" (#35887)

* Sync for validator cpp engine and cpp htmlparser (#35885)

* Make no-js case valid. The basic structure of the change is to set up a series of requires/satisfies pairs:
- Extension js requires v0.js (this is the only code change).
- amp-pixel, amp-img, and amp-layout, which have no extension js, likewise require v0.js
- non-transformed v0.js requires style boilerplate and the noscript variant (transformed does not).

Then we remove the mandatory bits on all of these tags. They are no longer globally mandatory, they are only conditionally mandatory.

PiperOrigin-RevId: 393187930

* Remove notice for CSS/Doc length tests.

PiperOrigin-RevId: 393885470

Co-authored-by: Greg Grothaus <greggrothaus@google.com>
Co-authored-by: honeybadgerdontcare <sedano@google.com>

* Make `compiler.js` runnable within a node.js environment (#35849)

* 🐛[`amp-tiktok`] Fix CLS bug.  (#35850)

* [`amp-tiktok`] Fix CLS issue caused by promise failing to resolve.

* [`amp-tiktok`] Add Tests for CLS fix.

* [`amp-tiktok`] Update unit tests to cover cls fix case.

* [`amp-tiktok`] Remove trailing whitespaces.

* ♻️ Remove use of `.find` (#35884)

- Fixes compatibility in old browsers that don't support `.find()`
- Fixes ampproject/error-reporting#103

* 📦 Update build-system devDependencies (#35856)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* 📦 Update dependency eslint-plugin-react to v7.25.1 (#35858)

Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>

* Skip new test failures after Chrome93 release (#35900)

* 🐛 Use `/register` for Storybook addons (#35890)

Preact environment had been updated to this module path, but the AMP environment had not.

* ⏮ Rollback `timeZoneName` changes (#35895)

For cherry-pick #35892

* Fix child identifiers in Doubleclick SRA IUs. (#35891)

* 🏗 Cut a new nightly branch using CircleCI's scheduled jobs (dry run) (#35878)

* RTC vendors: add ConsentMetadata to Prebid Server (#33899)

Adding gdpr_applies, consent_type, and addtl_consent to Rubicon and AppNexus Prebid Server RTC strings as followup to #30006.

Adding @SyntaxNode as FYI for AppNexus.

* Revert "⏮ Rollback `timeZoneName` changes (#35895)" (#35911)

This reverts commit 017c5a8.

* 🏗 Alias `amp-*.js` binaries as `bento-*.js` (#35880)

`amp-*.js` binaries for Bento-compatible extensions provide an `<amp-*>` element that can be used **with** `v0.js`, and a `<bento-*>` element that can be used **without** `v0.js`.

We'd like that Bento elements are used from `bento-*.js` in Bento mode. This unblocks release since we'll be able to include the scripts in Bento mode using the correct URL.

Eventually, this binary will only provide the Bento element, while `amp-*.js` will provide only an AMP element. In the meantime, we alias the multiple-compatibility binary so that `bento-*.js` can be used as soon as possible.

* SwG Release 0.1.22.182 (#35919)

* Revert "mode: collapse definitions of localDev and test (#35823)" (#35918)

This reverts commit 59a07a3.

* ♻️ [Story performance] Simplify templates CSS by using attr instead of class (#35861)

* Changed classes for template attr

* Simplified rules

* Fixed some comments

* Remove unused template

* Reverted pan demo to image

* Removed unused const

* Added CTA Migration page-outlink experiment (#35867)

* Added CTA Migration page-outlink experiment, added logic to have it load during the Promise chain in the layout callback

* fixed some circleCI errors

* fixed some nits

* refactored cta migration and added non-hardcoded values

* fixed cricleci spacing issues

* fixed cricleci spacing issues

* Added description and re-comtting due to circleCI

* Added description and re-comtting due to circleCI

* Fixed more code review nits

* Fixed layout callback unit test

* Added back in code-breaking refactor

* will open new PR to fix page-attachment prod bug

* fixed main merge

* renamed the expirement to make it clear it was associated with ads

* 🐛 Toggle placeholders/fallbacks properly on Bento components (#35821)

* create centralized hooks for onLoad/onLoading/onError in PreactBaseElement

* update instances where components used their own (similar) hooks

* toggle placeholders for bento components with dynamic content

* update storybook stories to demonstrate placeholders/fallbacks
* update closure typings
* update docs

* Move nightly branch cut job from CircleCI to GitHub Actions (#35909)

* 🐛 [amp-video-docking] Fix issue hiding docked player during scroll on mobile (#35839)

Test-Case:

- Start via `amp --extensions=amp-video-iframe,amp-video-docking`
- Open http://localhost:8000/examples/article-with-docked-video.html with the iOS simulator
- Play first video in article
- Scroll down so that the player is docked
- Now scroll further down and then quickly up so that the URL bar is shown again
- Result => dock gets hidden

This pull request fixes the problem by only checking whether the width changed on resize to decide whether the player should be undocked.

Also see this comment, which also explains the bug: #27825 (comment)

cc @alanorozco

* Skip flaky test (#35926)

* ♻️ Use Storybook `args` (first round) (#35915)

Partial for #35923

This is the first step to replace Storybook Knobs (deprecated)[1] with Controls[2].

[1] https://www.npmjs.com/package/@storybook/addon-knobs
[2] https://storybook.js.org/docs/react/essentials/controls

We have over 60 Storybook files. I'm submitting the PRs in multiple rounds to prevent overwhelming the reviewers.

In summary:

1. Installs `@storybook/addon-controls`
2. Updates template for generated Stories.
3. Updates 15 Stories across extensions.

* 🐛 [Amp story page outlink] Default outlink color and warning (#35866)

* Default outlink color.

* Remove unnecessary if block.

* 🐛 [Amp story] Prevent pointer events on images (#35929)

* Prevent pointer events on images.

* Update comment.

* Select images in grid layer.

* cl/394490119 Fix a bug where the CSS parser was not correctly accounting for the possibility of calc() in the media expression. (#35937)

* 🏗 Visual diff updates and fixes (#35942)

* Update visual diff's Chrome version to 91.0.4472.0

* Remove page-preparation snippets that are now included in Percy's serializer library

* :%s/.percyCss/.percyCSS/

* Remove <noscript> elements from doc/iframes

* Restore <canvas> → <img> freezer

* Bento Carousel: Restore default `rtl` values (#35924)

* 🐛 [Attachment Forms] Remove the soft keyboard from view when the page attachment is closed (#35798)

* Remove focus from elements when closing the page attachment

* Hide page attachments when the window has resized and the drawer is closed

* Prettier

* Adding local files for testing

* Rename unfocusChildElements_() to dismissSoftKeyboard_()

* Reset the story's scroll position instead of hiding the attachment

* Prettier

* Remove demo files

* Add back demo example files for testing

* Rename dismissSoftKeyboard_ to blurFocusedEl_ and clarify keyboard-related comments

* Simplify the demo

* Fold the attachment-forms.html examples into the existing attachment.html example file

* Update the ID of the second example

* Update blur the active element instead of using a query selector

* Set the demo's paragraph font size so that the text doesn't resize when the soft keyboard opens

* Add a visual test to confirm that the soft keyboard closes along with attachment close

* Add missing comma

* Remove trailing whitespace

* Comment updates; removed new paragraph element to dismiss the attachment by tapping the spacer instead

* Use p element again in the visual diff test, since the spacer element is not visible on desktop

* Use .i-amphtml-story-page-attachment-close-button to dismiss the attachment instead of a p element

* Move the form presence visual tests to be adjacent to each other

* Remove publisher domain text within the form presence visual diff tests

* Formatting fixes

* Formatting fixes

* Use a dummy domain name instead of removing it altogether

* Rename `BaseCarousel` as `BentoBaseCarousel` (#35935)

* Rename `Twitter` to `BentoTwitter` (#35933)

* 📖 Update Storybook documentation in `testing.md` (#35944)

Listed commands were outdated. Added some more detail and changed some phrasing.

* 📖 [Story videos] Add video documentation for Google cache (#35609)

* Add video documentation

* More detail

* Added section on amp-story

* Update extensions/amp-story/amp-story.md

Co-authored-by: Gabriel Majoulet <gmajoulet@google.com>

* Updating documentation with approved language

* Simplify amp-story.md

Co-authored-by: Gabriel Majoulet <gmajoulet@google.com>

* Update release-tagger.yml (#35946)

* Add TrafficStars ad network integration (#35922)

* Add trafficstars ad network integration

* Remove integration from 3p

* Sync for validator cpp engine and cpp htmlparser (#35952)

* Fix a bug where the CSS parser was not correctly accounting for the possibility
of calc() in the media expression.

PiperOrigin-RevId: 394490119

* Remove .proto.h from parse-css.cc imports. The .pb.h version works with bazel.

PiperOrigin-RevId: 394774272

* ✨ Ssp params extended  (#35957)

Co-authored-by: PetrBlaha <petr.blaha@firma.seznam.cz>

* refactor(amp-accordion): (#35864)

* update (p)react component names
* update component.type

* * rename DateDisplay -> BentoDateDisplay (#35875)

* rename component.type
* ensure css is published

* 🐛 Followup fix from BaseCarousel → BentoBaseCarousel rename (#35968)

* rename `Instagram` to `BentoInstagram` (#35949)

* BentoFitText title to 'FitText' (#35972)

* 🏗 Parallelize `dist` steps (#35943)

* 📖 BentoBaseCarousel README code fixes (#35973)

* 🏗  Fix `make release` bug for release tagger (#35947)

* get ref instead of release

* release note tweaks

* * rename InlineGallery -> BentoInlineGallery (#35876)

* rename Pagination -> BentoInlineGalleryPagination
* rename Thumbnails -> BentoInlineGalleryThumbnails
* update component.type

* * rename DateCountdown -> BentoDateCountdown (#35874)

* update component.type
* ensure css is published

* refactor(amp-stream-gallery): rename StreamGallery -> BentoStreamGallery (#35879)

* Update Storybook template to differentiate between `Foo` and `BentoFoo` (#35974)

* Update Storybook template

* Set prefix in code, not template replacememt

* Set experiment to 1 (#35970)

* Clean up some small linter issues with validator files. (#35982)

* Rename `Instagram` to `BentoInstagram` (#35948)

* Rename EmbedlyCard -> BentoEmbedlyCard (#35977)

* Make amp-form failure message developer-friendlier (#35964)

This can happen whenever the XHR proxy server returns an error and
doesn't include the HTML to render the submit-failure template (e.g.,
AMP CORS failure, unreacheable proxy). Sever-side rendering of template
is an implementation detail of AMP for Email that developers shouldn't
care about so it makes sense to change this to one that would make more
sense for developers.

* added refresh interval for amp-ad blocks in the apester-media (#35961)

🐛 Bug fix. 1) Added refresh interval for amp-ad blocks in the amp-apester-media 2) Moved inline styles into class for amp-apester-media bottom ad block with the fix of centering this block.

* 📖 Warn when using a consent promptUI that contains an iframe (#35986)

Because of the rendering cycle, a `promptUI` that contains an `amp-iframe` may cause content flashing.

`promptUISrc` can be used instead and prevent that issue.

* ♻️ Use Storybook `args` (second round) (#35930)

Partial for #35923

* 📖  Add Storybook Style Recommendations (#35945)

* 🖍  [Attachment Forms] Update the style of the attachment header text (#35862)

* Make the publisher domain text lighter than the attachment's title text

* Uncomment out changes

* Increase the size of the attachment's title font

* Make the attachment title and domain URL bolder, and decrease the distance between them

* Place the domain label above the title so that the title doesn't conceal part of the domain

* Increase bottom padding of header to ensure domain label doesn't overlap attachment content

* 🏗 Update Storybook forbidden terms (#35991)

1. Move `withA11y` entry to `forbiddenTermsGlobal`. It wasn't targetting the right files previously.

2. Add `@storybook/addon-knobs` since it's deprecated.

Partial for #35923

* SwG Release 0.1.22.183 (#35997)

* ♻️ Rename `Brightcove` to `BentoBrightcove` (#35994)

* Pin CircleCI's Chrome version (#35916)

This is to prevent new stable releases of Chrome from causing test failures. Eg, the Chrome 93 release caused several tests failures that made `main` red until the tests were skipped. This delayed a cherry-pick we're working on, since the new release (on on top of old code) also picked up Chrome 93.

This should be updated regularly, hopefully with a chance to test Chrome releases during the Beta period so we can proactively fix issues.

Co-authored-by: Daniel Rozenberg <rodaniel@amp.dev>

* ♻️ Provide BentoVideo (#35993)

* ♻️ Rename `Vimeo` to `BentoVimeo` (#35995)

* ♻️ Rename `Youtube` to `BentoYoutube` (#35996)

* 🐛 [Story animations] Fix prerender resume animation (#35987)

* Add try catch

* Changed PR number to match PR

* 🏗 Enable `npm` for `amp-video` (#34819)

* 📖 Add instructions to reproduce validator tests (#35980)

* remove editor ignore file

* revert register integration

* remove unused import

* change import order

* prettify code

Co-authored-by: Mahir <mahir@techwave.io>
Co-authored-by: tijl verbert <tijl.verbert@gmail.com>
Co-authored-by: DevMahix <mahir_b@msn.com>
Co-authored-by: Keshav Varadachari <keshavvi@google.com>
Co-authored-by: Caroline Liu <10456171+caroqliu@users.noreply.github.com>
Co-authored-by: Jake Fried <samouri@users.noreply.github.com>
Co-authored-by: mmmicedcoffee <1164097+mmmicedcoffee@users.noreply.github.com>
Co-authored-by: Raghu Simha <rsimha@amp.dev>
Co-authored-by: Kristofer Baxter <kristofer@kristoferbaxter.com>
Co-authored-by: oath-jac <45564796+oath-jac@users.noreply.github.com>
Co-authored-by: Philip Bell <philip.hunter.bell@gmail.com>
Co-authored-by: Justin Ridgewell <jridgewell@google.com>
Co-authored-by: dmanek <506183+dmanek@users.noreply.github.com>
Co-authored-by: Shihua Zheng <powerivq@users.noreply.github.com>
Co-authored-by: ColombiaOnline <sandeep.saini1@timesinternet.in>
Co-authored-by: Esther Kim <44627152+estherkim@users.noreply.github.com>
Co-authored-by: Riley Jones <78179109+rileyajones@users.noreply.github.com>
Co-authored-by: anrghg <88852183+anrghg@users.noreply.github.com>
Co-authored-by: Justin Ridgewell <justin@ridgewell.name>
Co-authored-by: Ilya Shabanov <ishaba@me.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <renovate[bot]@users.noreply.github.com>
Co-authored-by: Alan Orozco <alanorozco@users.noreply.github.com>
Co-authored-by: Michael Rybak <michaelrybak@google.com>
Co-authored-by: Greg Grothaus <greggrothaus@google.com>
Co-authored-by: honeybadgerdontcare <sedano@google.com>
Co-authored-by: rebeccanthomas <64608436+rebeccanthomas@users.noreply.github.com>
Co-authored-by: Khoi Doan <khoid@google.com>
Co-authored-by: Daniel Rozenberg <rodaniel@amp.dev>
Co-authored-by: bretg <bgorsline@gmail.com>
Co-authored-by: Chris Antaki <ChrisAntaki@gmail.com>
Co-authored-by: Matias Szylkowski <mszylkowski@google.com>
Co-authored-by: Jonathan <jshamble@users.noreply.github.com>
Co-authored-by: Tobias von Klipstein <tobias@klpstn.com>
Co-authored-by: Corey Masanto <masanto@google.com>
Co-authored-by: Gabriel Majoulet <gmajoulet@google.com>
Co-authored-by: PetrBlaha <petrblahamail@gmail.com>
Co-authored-by: PetrBlaha <petr.blaha@firma.seznam.cz>
Co-authored-by: Su Zhang (張甦) <me@zhang.su>
Co-authored-by: Oleksandr Golovatyi <golovatuy@gmail.com>
Co-authored-by: Ricky Hartmann <hartmannr76@gmail.com>
Co-authored-by: Boxiao Cao <9083193+antiphoton@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants