TypeError: __extends is not a function

I have an angular 2 app that works fine with 5.0.0-rc.1 but fails to load with 5.0.0-rc.2 thru 5.  The error in the console (line numbers for rc.5) is
home:40 Error: (SystemJS) __extends is not a function
TypeError: __extends is not a function
at eval (http://localhost:3000/node_modules/rxjs/bundles/Rx.js:345:5)
at Object.eval (http://localhost:3000/node_modules/rxjs/bundles/Rx.js:356:2)
at ZoneDelegate.invoke (http://localhost:3000/node_modules/zone.js/dist/zone.js:229:26)
at Zone.run (http://localhost:3000/node_modules/zone.js/dist/zone.js:113:43)
at http://localhost:3000/node_modules/zone.js/dist/zone.js:509:57
at ZoneDelegate.invokeTask (http://localhost:3000/node_modules/zone.js/dist/zone.js:262:35)
at Zone.runTask (http://localhost:3000/node_modules/zone.js/dist/zone.js:151:47)
at drainMicroTaskQueue (http://localhost:3000/node_modules/zone.js/dist/zone.js:405:35)
at XMLHttpRequest.ZoneTask.invoke (http://localhost:3000/node_modules/zone.js/dist/zone.js:336:25)
Error loading http://localhost:3000/main
at eval (http://localhost:3000/node_modules/rxjs/bundles/Rx.js:345:5)
at Object.eval (http://localhost:3000/node_modules/rxjs/bundles/Rx.js:356:2)
at ZoneDelegate.invoke (http://localhost:3000/node_modules/zone.js/dist/zone.js:229:26)
at Zone.run (http://localhost:3000/node_modules/zone.js/dist/zone.js:113:43)
at http://localhost:3000/node_modules/zone.js/dist/zone.js:509:57
at ZoneDelegate.invokeTask (http://localhost:3000/node_modules/zone.js/dist/zone.js:262:35)
at Zone.runTask (http://localhost:3000/node_modules/zone.js/dist/zone.js:151:47)
at drainMicroTaskQueue (http://localhost:3000/node_modules/zone.js/dist/zone.js:405:35)
at XMLHttpRequest.ZoneTask.invoke (http://localhost:3000/node_modules/zone.js/dist/zone.js:336:25)
Error loading http://localhost:3000/main

Me too:
Rx.js:345 Uncaught TypeError: __extends is not a function(…)(anonymous function) @ Rx.js:345(anonymous function) @ Rx.js:356execCb @ require.min.js:1check @ require.min.js:1enable @ require.min.js:1init @ require.min.js:1callGetModule @ require.min.js:1completeLoad @ require.min.js:1onScriptLoad @ require.min.js:1

Using latest version from npm, almost vanilla app, no ui frameworks etc apart from jquery so far..
My Version installed from $ npm ls
...
└─┬<EMAIL_ADDRESS>  └──<EMAIL_ADDRESS>

Hmm... this seems like some strange SystemJS thing. That __extends method is something for classes generated by TypeScript.
@robwormald, have you seen this with SystemJS in the past?
FWIW, I use the bundled version from bundles/Rx.js all the time, and I haven't run into this issue, but I'm not using System.js.

@timfogarty1549 or @nmors do either of you have a minimum example you can share to help us debug this issue?

digging through the rc5 system bundle, it all looks OK to me.
@timfogarty1549 w/ angular2 i'd strongly suggest using a bundler rather than the bundles Rx provides.

I'm also having the same issue.
What I have found out is that since rc.2 the helper function that adds __extends, __assign, __decorate, __param, __metadata and __awaiter is never executed if you are using SystemJS.
It is only executed if you import "tslib".
This is different from the rc.1, where the __extends function is created anyway.
When bundles/Rx.js is used, it breaks in the function "UnsubscriptionError" because that is where it look likes __extends first is executed.

I'm seeing this same error on my Angular2, luckily I'm getting it while running Karma and not at runtime.
Any ideas on how to fix this?
Angular2 2.3.1
rxjs 5.0.0-rc4
Rx.js:388 Uncaught TypeError: __extends is not a function
    at http://localhost:9876/base/dist/libs/rxjs/bundles/Rx.js:388:5
    at http://localhost:9876/base/dist/libs/rxjs/bundles/Rx.js:399:2
    at root (http://localhost:9876/base/dist/libs/rxjs/bundles/Rx.js:340:6)
    at http://localhost:9876/base/dist/libs/rxjs/bundles/Rx.js:341:2(anonymous function) @ Rx.js:388(anonymous function) @ Rx.js:399root @ Rx.js:340(anonymous function) @ Rx.js:341

core.umd.js:4041 Uncaught TypeError: Cannot read property 'prototype' of undefined
    at __extends$6 (http://localhost:9876/base/dist/libs/@angular/core/bundles/core.umd.js:4041:72)
    at http://localhost:9876/base/dist/libs/@angular/core/bundles/core.umd.js:4089:9
    at http://localhost:9876/base/dist/libs/@angular/core/bundles/core.umd.js:4143:6
    at http://localhost:9876/base/dist/libs/@angular/core/bundles/core.umd.js:9:6
    at http://localhost:9876/base/dist/libs/@angular/core/bundles/core.umd.js:10:2

Anyone experiencing this issue, would you mind to add bit more details

which package of rxjs you're using? (umd vs. cjs...)
configuration of repo : TypeScript version, rxjs import configuration (i.e systemjs, webpack, etcs else)
(optional): any barebone code repo repduces this issue

@kwonoj I am loading the global UMD distribution of RxJS through require.js, no config whatsoever besides specifying the file path.

I created a plnkr where the issue is available:
https://plnkr.co/edit/fTWLTjnbUV2R1P9EkSA9

My gut feeling at this moment is this is somewhat related to https://github.com/ReactiveX/rxjs/pull/2093 / https://github.com/ReactiveX/rxjs/pull/2121 since it seems it's missing known helper function signature from TypeScript. (not saying given PR is invalid, seems somehow not play along with some configurations)

I was trying to switch from rxjs-es to @reacitvex/rxjs and ran into this error when I pointed my files at the dist/es6 files directly.  I had assumed that those files would be completely written in es6 and fit in nicely with our current es6 modules, but found that the files only used es6-style modules without the body of those modules being transpiled to es6.  It seems that this __extends function comes with the cjs-style module system somehow, and that in mixing the es5 code body with es6 modules, the _extend function was stranded in there.
Then I noticed the npm script:
"compile_module_es6": "tsc                                          ./dist/es6/src/Rx.ts ./dist/es6/src/add/observable/of.ts                             -m es2015   --sourceMap --outDir ./dist/es6 --target ES5 -d --diagnostics --pretty --noImplicitAny --noImplicitReturns --noImplicitThis --suppressImplicitAnyIndexErrors --moduleResolution node --noEmitHelpers --lib es5,es2015.iterable,es2015.collection,es2015.promise,dom ",
notice -target ES5 and --lib es5
WTH?  This seems like a pretty careless copy-paste error.  when I change -target to ES6 and start --lib es6, then it all compiles as expected and the __extends magically disappears.
So I know how to fix it, but it's quite inconvenient for my automated build system to have to cd into node_modules, hit npm install for this library, change the package.json, the run the modified compile_module_es6 script.  Either that or I just put the modified files in my local npm repo and point to that in my projects.
Or... someone can fix the script and check in the new files and upload them to npm.  I would be happy to check in a fix for the npm scripts, but I don't know what procedure you use for updating your npm version.

@dtniland uh..actually @reactivex/rxjs should not include es6 dist anymore, not sure how it did included again. (https://github.com/ReactiveX/rxjs/pull/2019)
There are some histories of native ES2015 module and final conclusion is release version of RxJS does not publish es6 package as well, notice -target ES5 and --lib es5 WTH? This seems like a pretty careless copy-paste error. : this is even intended (though I agree script name is super confusing) for internal-use-only to generate UMD build (https://github.com/ReactiveX/rxjs/pull/2093#discussion_r85589111)
So in your case, I'd like to suggest to use cjs / global under @reactivex package or directly install cjs via npm install rxjs. Actually your detailed explanation may be answer to all of this issue that some of users are accidentally referring unintended package published.

@kwonoj ... it seems there was an accidental publish. Obviously my fault. We're not cleaning out the dist/es6 directory on clean up. So if I published the docs, which require the building of es6, then it's sitting in there and gets published. :\ That's unfortunate.

@blesh will RxJS 5 continue to support AMD?

@edobry the bundled output is UMD so it will work with AMD, yes.

Why would you not publish es6 modules?  Telling everyone to use cjs seems a bit 2014 of you... not everyone wants to transpile from typescript, either.  Is there a discussion on this somewhere?
I thought you guys were all gung-ho on es6.  At least you were last year.  Did those guys leave the team?

@dtniland context

@trxcllnt thanks.  Very illuminating.  I didn't realize I was in such a minority. Well, for the time being I'll have run the tsc script myself and use my private npm repo.
Actually, we need to rebuild rxjs to work with Angular 2. We cannot use the Rx.min.js in the bundles directory

Guys I've been trying to setup a basic project using<EMAIL_ADDRESS><EMAIL_ADDRESS>and<EMAIL_ADDRESS>and I'm getting this very same error as you'll see if you don't mind to take a look on this repo I created to share the issue with you.
https://github.com/n370/systemjs-rxjs5-typescript2-boilerplate
Fire it up with npḿ install && npm start
I appreciate any help.

I can reproduce this issue as well, but using requirejs.
Is there any temporary fix for that?

The definition of __extends exists in the UMD bundle since as part of the rxjs' build process tslib.js is prepended into the beginning of the files.
You can hit the issue if you're loading the rxjs bundle with SystemJS because of tslib.js itself:
// tslib.js
(function (factory) {
    ...
    if (typeof define === "function" && define.amd) {
        define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
    }
...

In case of SystemJS included into the page, define is a function, and define.amd is a truthy value. This will invoke define, which unfortunately is asynchronous and will push the factory into the queue. In the meantime because of the hoisting in JavaScript, __extends will has value undefined and on top of that will override all previous definitions of __extends. This happens because in versions of SystemJS v0.19.29 and newer, Rx.js will be wrapped into IIFE. This will cause the following:
// Previous definitions of the helpers
window.__extends = ...;
...

// Rx.js bundle, wrapped by IIFE by SystemJS
(function (System, ..) {
var __extends;
//...
var UnsubscriptionError = (function (_super) {
    // _extends === undefined, because of hoisting
    __extends(UnsubscriptionError, _super);
    function UnsubscriptionError(errors) {
...
}(System, ...));

If you use SystemJS v0.19.28 and include reference to tslib.js manually in your index.html file everything should work.
This doesn't seem like an issue in rxjs, maybe tslib.js, since such async definition doesn't seem right to me.
PS: SystemJS v0.19.28 works because it still hasn't introduced this change.

Amazing @mgechev! It works perfectly now.

Hi @mgechev ,
Thank you for your information but it just fixed half of the problem.
I am trying to use AngularJS 2.4.3. The version of System.js and Rxjs are 0.19.40 and 5.0.3. Before referencing the tslib.js in the index file, it popped up two error. One is regular error and the other one is ZoneAwareError. After referencing the tslib.js, the first one disappeared. However the second one is still there. Like this:

ZoneAwareErrormessage: "(SystemJS) __extends is not a function↵	TypeError: __extends is not a function↵	    at eval (http://localhost:55811/lib/rxjs/rx.js:385:5)↵	    at Object.eval (http://localhost:55811/lib/rxjs/rx.js:396:2)↵	    at Object.eval (http://localhost:55811/appScripts/boot.js:5:34)↵	    at eval (http://localhost:55811/appScripts/boot.js:11:4)↵	    at eval (http://localhost:55811/appScripts/boot.js:12:3)↵	    at eval ()↵	Evaluating http://localhost:55811/appScripts/boot.js↵	Error loading http://localhost:55811/appScripts/boot.js"name: "Error"originalErr: TypeError: __extends is not a function
at eval (http://localhost:55811/lib/rxjs/rx.js:385:5)
at Object.eval (http://localhost:55811/lib/rxjs/rx.js:396:2)
at s (http://localhost:55811/lib/systemjs/system.js:5:19930)
at c (http://localhost:55811/lib/systemjs/system.js:5:6225)
at c (http://localhost:55811/lib/systemjs/system.js:5:6187)
at c (http://localhost:55811/lib/systemjs/system.js:5:6187)
at c (http://localhost:55811/lib/systemjs/system.js:5:6187)
at d (http://localhost:55811/lib/systemjs/system.js:5:5844)
at http://localhost:55811/lib/systemjs/system.js:5:6303
at a (http://localhost:55811/lib/systemjs/system.js:5:17131)
at Object.eval (http://localhost:55811/appScripts/boot.js:5:34)
at eval (http://localhost:55811/appScripts/boot.js:11:4)
at eval (http://localhost:55811/appScripts/boot.js:12:3)
at eval ()
at a.ee (http://localhost:55811/lib/systemjs/system.js:4:21980)originalStack: "Error: (SystemJS) __extends is not a function↵	TypeError: __extends is not a function↵	    at eval (http://localhost:55811/lib/rxjs/rx.js:385:5)↵	    at Object.eval (http://localhost:55811/lib/rxjs/rx.js:396:2)↵	    at Object.eval (http://localhost:55811/appScripts/boot.js:5:34)↵	    at eval (http://localhost:55811/appScripts/boot.js:11:4)↵	    at eval (http://localhost:55811/appScripts/boot.js:12:3)↵	    at eval ()↵	Evaluating http://localhost:55811/appScripts/boot.js↵	Error loading http://localhost:55811/appScripts/boot.js↵    at ZoneAwareError (http://localhost:55811/lib/zone.js/zone.js:738:33)↵    at t (http://localhost:55811/lib/systemjs/system.js:4:1662)↵    at p (http://localhost:55811/lib/systemjs/system.js:4:13348)↵    at http://localhost:55811/lib/systemjs/system.js:4:12921↵    at g (http://localhost:55811/lib/systemjs/system.js:4:14601)↵    at b (http://localhost:55811/lib/systemjs/system.js:4:14949)↵    at f (http://localhost:55811/lib/systemjs/system.js:4:12903)↵    at m (http://localhost:55811/lib/systemjs/system.js:4:13257)↵    at http://localhost:55811/lib/systemjs/system.js:4:11567↵    at ZoneDelegate.invoke (http://localhost:55811/lib/zone.js/zone.js:242:26)↵    at Zone.run (http://localhost:55811/lib/zone.js/zone.js:113:43)↵    at http://localhost:55811/lib/zone.js/zone.js:535:57↵    at ZoneDelegate.invokeTask (http://localhost:55811/lib/zone.js/zone.js:275:35)↵    at Zone.runTask (http://localhost:55811/lib/zone.js/zone.js:151:47)↵    at drainMicroTaskQueue (http://localhost:55811/lib/zone.js/zone.js:433:35)"stack: "(SystemJS) __extends is not a function↵	TypeError: __extends is not a function↵	    at eval (http://localhost:55811/lib/rxjs/rx.js:385:5)↵	    at Object.eval (http://localhost:55811/lib/rxjs/rx.js:396:2)↵	    at Object.eval (http://localhost:55811/appScripts/boot.js:5:34)↵	    at eval (http://localhost:55811/appScripts/boot.js:11:4)↵	    at eval (http://localhost:55811/appScripts/boot.js:12:3)↵	    at eval ()↵	Evaluating http://localhost:55811/appScripts/boot.js↵	Error loading http://localhost:55811/appScripts/boot.js"toString: toString()zoneAwareStack: "Error: (SystemJS) __extends is not a function↵	TypeError: __extends is not a function↵	    at eval (http://localhost:55811/lib/rxjs/rx.js:385:5)↵	    at Object.eval (http://localhost:55811/lib/rxjs/rx.js:396:2)↵	    at Object.eval (http://localhost:55811/appScripts/boot.js:5:34)↵	    at eval (http://localhost:55811/appScripts/boot.js:11:4)↵	    at eval (http://localhost:55811/appScripts/boot.js:12:3)↵	    at eval ()↵	Evaluating http://localhost:55811/appScripts/boot.js↵	Error loading http://localhost:55811/appScripts/boot.js↵    at t (http://localhost:55811/lib/systemjs/system.js:4:1662) []↵    at p (http://localhost:55811/lib/systemjs/system.js:4:13348) []↵    at http://localhost:55811/lib/systemjs/system.js:4:12921 []↵    at g (http://localhost:55811/lib/systemjs/system.js:4:14601) []↵    at b (http://localhost:55811/lib/systemjs/system.js:4:14949) []↵    at f (http://localhost:55811/lib/systemjs/system.js:4:12903) []↵    at m (http://localhost:55811/lib/systemjs/system.js:4:13257) []↵    at http://localhost:55811/lib/systemjs/system.js:4:11567 []↵    at Zone.run (http://localhost:55811/lib/zone.js/zone.js:113:43) [ => ]↵    at http://localhost:55811/lib/zone.js/zone.js:535:57 []↵    at Zone.runTask (http://localhost:55811/lib/zone.js/zone.js:151:47) [ => ]↵    at drainMicroTaskQueue (http://localhost:55811/lib/zone.js/zone.js:433:35) []"proto: Objectconstructor: Error()message: ""name: "Error"toString: toString()proto: Object
ZoneDelegate.invoke @ zone.js:242
Zone.run @ zone.js:113
(anonymous) @ zone.js:535
ZoneDelegate.invokeTask @ zone.js:275
Zone.runTask @ zone.js:151
drainMicroTaskQueue @ zone.js:433
ZoneTask.invoke @ zone.js:349
XMLHttpRequest.send (async)
scheduleTask @ zone.js:1725
ZoneDelegate.scheduleTask @ zone.js:255
Zone.scheduleMacroTask @ zone.js:168
(anonymous) @ zone.js:1749
send @ VM1009:3
G @ system.js:4
(anonymous) @ system.js:4
ZoneAwarePromise @ zone.js:551
(anonymous) @ system.js:4
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:4
ZoneDelegate.invoke @ zone.js:242
Zone.run @ zone.js:113
(anonymous) @ zone.js:535
ZoneDelegate.invokeTask @ zone.js:275
Zone.runTask @ zone.js:151
drainMicroTaskQueue @ zone.js:433
ZoneTask.invoke @ zone.js:349
XMLHttpRequest.send (async)
scheduleTask @ zone.js:1725
ZoneDelegate.scheduleTask @ zone.js:255
Zone.scheduleMacroTask @ zone.js:168
(anonymous) @ zone.js:1749
send @ VM1009:3
G @ system.js:4
(anonymous) @ system.js:4
ZoneAwarePromise @ zone.js:551
(anonymous) @ system.js:4
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:4
ZoneDelegate.invoke @ zone.js:242
Zone.run @ zone.js:113
(anonymous) @ zone.js:535
ZoneDelegate.invokeTask @ zone.js:275
Zone.runTask @ zone.js:151
drainMicroTaskQueue @ zone.js:433
ZoneTask.invoke @ zone.js:349
XMLHttpRequest.send (async)
scheduleTask @ zone.js:1725
ZoneDelegate.scheduleTask @ zone.js:255
Zone.scheduleMacroTask @ zone.js:168
(anonymous) @ zone.js:1749
send @ VM1009:3
G @ system.js:4
(anonymous) @ system.js:4
ZoneAwarePromise @ zone.js:551
(anonymous) @ system.js:4
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:4
ZoneDelegate.invoke @ zone.js:242
Zone.run @ zone.js:113
(anonymous) @ zone.js:535
ZoneDelegate.invokeTask @ zone.js:275
Zone.runTask @ zone.js:151
drainMicroTaskQueue @ zone.js:433
ZoneTask.invoke @ zone.js:349
XMLHttpRequest.send (async)
scheduleTask @ zone.js:1725
ZoneDelegate.scheduleTask @ zone.js:255
Zone.scheduleMacroTask @ zone.js:168
(anonymous) @ zone.js:1749
send @ VM1009:3
G @ system.js:4
(anonymous) @ system.js:4
ZoneAwarePromise @ zone.js:551
(anonymous) @ system.js:4
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:5
(anonymous) @ system.js:4
ZoneDelegate.invoke @ zone.js:242
Zone.run @ zone.js:113
(anonymous) @ zone.js:535
ZoneDelegate.invokeTask @ zone.js:275
Zone.runTask @ zone.js:151
drainMicroTaskQueue @ zone.js:433
ZoneTask.invoke @ zone.js:349

It's pretty annoying because I tried switch system.js back to 0.19.28 but it didn't work. It seems like the AngularJS 2.4.3 is using something new in the Rxjs. I just don't know what next can I do. Switch back to earlier version of the AngularJS2 to user earlier version of Rxjs?
Thanks at lot.

Show me your systemjs.config.js file.

@xonuzofa Here's my config:
(
Please note:

I was upgrading from the 2.0.0-RCx. The "rxjs" used to be configured as the line commented out, with no paths section. It worked fine in the old setup with RC version. The paths section was introduced after the upgrade because it will otherwise cannot find a whole bunch of 'operator/add' etc.
2.All the libraries are put into the "lib" folder but my own app was put into the "appScript" folder.
)

System.config({
//baseUrl:'lib',
defaultJSExtensions: true,
paths: {
'rxjs*': '/lib/rxjs/rx.js',
},
packages: {
'appScripts': {
main: 'boot'
},
'@angular/common': {
main: 'common.umd.js',
},
'@angular/compiler': {
main: 'compiler.umd.js',
},
'@angular/core': {
main: 'core.umd.js',
},
'@angular/http': {
main: 'http.umd.js',
},
'@angular/platform-browser': {
main: 'platform-browser.umd.js',
},
'@angular/platform-browser-dynamic': {
main: 'platform-browser-dynamic.umd.js',
},
'@angular/upgrade': {
main: 'upgrade.umd.js',
},
'@angular/forms': {
main: 'forms.umd.js',
},
'@angular/router': {
main: 'router.umd.js',
},
'@angular/router-deprecated': {
main: 'router-deprecated.umd.js',
},
materialize: {
main: 'js/materialize',
format: 'global'
},
'angular2-materialize': {
main: 'index'
},
'tslib':{
main: 'tslib'
},
rxjs: {
main: 'rx',
//format: 'register',
//defaultExtension: 'js'
},
},
map: {
'@angular': '/lib/@angular',
'@angular/common': '/lib/@angular/common',
'@angular/compiler': '/lib/@angular/compiler',
'@angular/core': '/lib/@angular/core',
'@angular/http': '/lib/@angular/http',
'@angular/platform-browser': '/lib/@angular/platform-browser',
'@angular/platform-browser-dynamic': '/lib/@angular/platform-browser-dynamic',
'@angular/upgrade': '/lib/@angular/upgrade',
materialize: '/lib/materialize',
'angular2-materialize': '/lib/angular2-materialize',
'tslib': '/lib/tslib',
//rxjs: '/lib/rxjs',
appScripts: '/appScripts'
}
});

Try this:
(function(global) {

// map tells the System loader where to look for things
var map = {
	'appScripts':                 '/appScripts',
	'rxjs':                       '/lib/rxjs',
        'tslib':                      '/lib/tslib',
        '@angular':                   '/lib/@angular',
        'materialize':                '/lib/materialize',
        'angular2-materialize':       '/lib/angular2-materialize'
};

// packages tells the System loader how to load when no filename and/or no extension
var packages = {
	'appScripts':                 { main: 'boot.js',  defaultExtension: 'js' },
	'rxjs':                       { main: 'Rx.js', defaultExtension: 'js' },
	'tslib':                      { main: 'tslib.js', defaultExtension: 'js' },
        'materialize:                 { main: 'js/materialize.js', format: 'global', defaultExtension: 'js' },
        'angular2-materialize':       { main: 'index.js', defaultExtension: 'js' },
};

var packageNames = [
	'@angular/common',
	'@angular/compiler',
	'@angular/core',
	'@angular/forms',
	'@angular/http',
	'@angular/platform-browser',
	'@angular/platform-browser-dynamic',
	'@angular/router',
	'@angular/material',
        '@angular/upgrade'
];

// add package entries for angular packages in the form '@angular/common': { main: 'bundles/common.umd.js', defaultExtension: 'js' }
packageNames.forEach(function(pkgName) {
	packages[pkgName] = { main: 'bundles/' + pkgName.replace('@angular/','') + '.umd.js', defaultExtension: 'js' };
});

var config = {
	map: map,
	packages: packages
}

// filterSystemConfig - index.html's chance to modify config before we register it.
if (global.filterSystemConfig) { global.filterSystemConfig(config); }

System.config(config);

})(this);

I am using RequireJS + TypeScript + RxJS5 and I get this issue

Hi @xonuzofa ,
Thanks but It doesn't help.
With your config, it complained that the angular's js files were not found before I changed my file structure. After fixing the file structure, it complained the lots of 404s from the RxJs library just like it were not a bundle but actually it is.

And that's why I changed it to use the following config according to a post which I can't find out anymore.
    paths: {
            'rxjs*': '/lib/rxjs/rx.js',
    },

And by reading the config, there is not much difference between my original config. The only change is use a piece of javascript to change the packages to "bundles/"+"original package".
Can you explain why you think your solution would work? Maybe I can get some idea about how to fix it. :)
Cheers

I feel like you either don't have the same version of rxjs as me or you didn't install it the same.
Did you use npm to install the packages?  In my package.json I have "rxjs": "5.0.3" and using npm install I get a node_modules/rxjs folder, which does not contain a rx.js.
My Rx.js file in node_modules/rxjs/Rx.js is as follows:
"use strict";
/* tslint:disable:no-unused-variable */
// Subject imported before Observable to bypass circular dependency issue since
// Subject extends Observable and Observable references Subject in it's
// definition
var Subject_1 = require('./Subject');
exports.Subject = Subject_1.Subject;
exports.AnonymousSubject = Subject_1.AnonymousSubject;
/* tslint:enable:no-unused-variable */
var Observable_1 = require('./Observable');
exports.Observable = Observable_1.Observable;
// statics
/* tslint:disable:no-use-before-declare */
require('./add/observable/bindCallback');
require('./add/observable/bindNodeCallback');
require('./add/observable/combineLatest');
require('./add/observable/concat');
require('./add/observable/defer');
require('./add/observable/empty');
require('./add/observable/forkJoin');
require('./add/observable/from');
require('./add/observable/fromEvent');
require('./add/observable/fromEventPattern');
require('./add/observable/fromPromise');
require('./add/observable/generate');
require('./add/observable/if');
require('./add/observable/interval');
require('./add/observable/merge');
require('./add/observable/race');
require('./add/observable/never');
require('./add/observable/of');
require('./add/observable/onErrorResumeNext');
require('./add/observable/pairs');
require('./add/observable/range');
require('./add/observable/using');
require('./add/observable/throw');
require('./add/observable/timer');
require('./add/observable/zip');
//dom
require('./add/observable/dom/ajax');
require('./add/observable/dom/webSocket');
//operators
require('./add/operator/buffer');
require('./add/operator/bufferCount');
require('./add/operator/bufferTime');
require('./add/operator/bufferToggle');
require('./add/operator/bufferWhen');
require('./add/operator/catch');
require('./add/operator/combineAll');
require('./add/operator/combineLatest');
require('./add/operator/concat');
require('./add/operator/concatAll');
require('./add/operator/concatMap');
require('./add/operator/concatMapTo');
require('./add/operator/count');
require('./add/operator/dematerialize');
require('./add/operator/debounce');
require('./add/operator/debounceTime');
require('./add/operator/defaultIfEmpty');
require('./add/operator/delay');
require('./add/operator/delayWhen');
require('./add/operator/distinct');
require('./add/operator/distinctUntilChanged');
require('./add/operator/distinctUntilKeyChanged');
require('./add/operator/do');
require('./add/operator/exhaust');
require('./add/operator/exhaustMap');
require('./add/operator/expand');
require('./add/operator/elementAt');
require('./add/operator/filter');
require('./add/operator/finally');
require('./add/operator/find');
require('./add/operator/findIndex');
require('./add/operator/first');
require('./add/operator/groupBy');
require('./add/operator/ignoreElements');
require('./add/operator/isEmpty');
require('./add/operator/audit');
require('./add/operator/auditTime');
require('./add/operator/last');
require('./add/operator/let');
require('./add/operator/every');
require('./add/operator/map');
require('./add/operator/mapTo');
require('./add/operator/materialize');
require('./add/operator/max');
require('./add/operator/merge');
require('./add/operator/mergeAll');
require('./add/operator/mergeMap');
require('./add/operator/mergeMapTo');
require('./add/operator/mergeScan');
require('./add/operator/min');
require('./add/operator/multicast');
require('./add/operator/observeOn');
require('./add/operator/onErrorResumeNext');
require('./add/operator/pairwise');
require('./add/operator/partition');
require('./add/operator/pluck');
require('./add/operator/publish');
require('./add/operator/publishBehavior');
require('./add/operator/publishReplay');
require('./add/operator/publishLast');
require('./add/operator/race');
require('./add/operator/reduce');
require('./add/operator/repeat');
require('./add/operator/repeatWhen');
require('./add/operator/retry');
require('./add/operator/retryWhen');
require('./add/operator/sample');
require('./add/operator/sampleTime');
require('./add/operator/scan');
require('./add/operator/sequenceEqual');
require('./add/operator/share');
require('./add/operator/single');
require('./add/operator/skip');
require('./add/operator/skipUntil');
require('./add/operator/skipWhile');
require('./add/operator/startWith');
require('./add/operator/subscribeOn');
require('./add/operator/switch');
require('./add/operator/switchMap');
require('./add/operator/switchMapTo');
require('./add/operator/take');
require('./add/operator/takeLast');
require('./add/operator/takeUntil');
require('./add/operator/takeWhile');
require('./add/operator/throttle');
require('./add/operator/throttleTime');
require('./add/operator/timeInterval');
require('./add/operator/timeout');
require('./add/operator/timeoutWith');
require('./add/operator/timestamp');
require('./add/operator/toArray');
require('./add/operator/toPromise');
require('./add/operator/window');
require('./add/operator/windowCount');
require('./add/operator/windowTime');
require('./add/operator/windowToggle');
require('./add/operator/windowWhen');
require('./add/operator/withLatestFrom');
require('./add/operator/zip');
require('./add/operator/zipAll');
/* tslint:disable:no-unused-variable */
var Subscription_1 = require('./Subscription');
exports.Subscription = Subscription_1.Subscription;
var Subscriber_1 = require('./Subscriber');
exports.Subscriber = Subscriber_1.Subscriber;
var AsyncSubject_1 = require('./AsyncSubject');
exports.AsyncSubject = AsyncSubject_1.AsyncSubject;
var ReplaySubject_1 = require('./ReplaySubject');
exports.ReplaySubject = ReplaySubject_1.ReplaySubject;
var BehaviorSubject_1 = require('./BehaviorSubject');
exports.BehaviorSubject = BehaviorSubject_1.BehaviorSubject;
var ConnectableObservable_1 = require('./observable/ConnectableObservable');
exports.ConnectableObservable = ConnectableObservable_1.ConnectableObservable;
var Notification_1 = require('./Notification');
exports.Notification = Notification_1.Notification;
var EmptyError_1 = require('./util/EmptyError');
exports.EmptyError = EmptyError_1.EmptyError;
var ArgumentOutOfRangeError_1 = require('./util/ArgumentOutOfRangeError');
exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
var ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');
exports.ObjectUnsubscribedError = ObjectUnsubscribedError_1.ObjectUnsubscribedError;
var TimeoutError_1 = require('./util/TimeoutError');
exports.TimeoutError = TimeoutError_1.TimeoutError;
var UnsubscriptionError_1 = require('./util/UnsubscriptionError');
exports.UnsubscriptionError = UnsubscriptionError_1.UnsubscriptionError;
var timeInterval_1 = require('./operator/timeInterval');
exports.TimeInterval = timeInterval_1.TimeInterval;
var timestamp_1 = require('./operator/timestamp');
exports.Timestamp = timestamp_1.Timestamp;
var TestScheduler_1 = require('./testing/TestScheduler');
exports.TestScheduler = TestScheduler_1.TestScheduler;
var VirtualTimeScheduler_1 = require('./scheduler/VirtualTimeScheduler');
exports.VirtualTimeScheduler = VirtualTimeScheduler_1.VirtualTimeScheduler;
var AjaxObservable_1 = require('./observable/dom/AjaxObservable');
exports.AjaxResponse = AjaxObservable_1.AjaxResponse;
exports.AjaxError = AjaxObservable_1.AjaxError;
exports.AjaxTimeoutError = AjaxObservable_1.AjaxTimeoutError;
var asap_1 = require('./scheduler/asap');
var async_1 = require('./scheduler/async');
var queue_1 = require('./scheduler/queue');
var animationFrame_1 = require('./scheduler/animationFrame');
var rxSubscriber_1 = require('./symbol/rxSubscriber');
var iterator_1 = require('./symbol/iterator');
var observable_1 = require('./symbol/observable');
/* tslint:enable:no-unused-variable */
/**
 * @typedef {Object} Rx.Scheduler
 * @property {Scheduler} queue Schedules on a queue in the current event frame
 * (trampoline scheduler). Use this for iteration operations.
 * @property {Scheduler} asap Schedules on the micro task queue, which uses the
 * fastest transport mechanism available, either Node.js' `process.nextTick()`
 * or Web Worker MessageChannel or setTimeout or others. Use this for
 * asynchronous conversions.
 * @property {Scheduler} async Schedules work with `setInterval`. Use this for
 * time-based operations.
 * @property {Scheduler} animationFrame Schedules work with `requestAnimationFrame`.
 * Use this for synchronizing with the platform's painting
 */
var Scheduler = {
    asap: asap_1.asap,
    queue: queue_1.queue,
    animationFrame: animationFrame_1.animationFrame,
    async: async_1.async
};
exports.Scheduler = Scheduler;
/**
 * @typedef {Object} Rx.Symbol
 * @property {Symbol|string} rxSubscriber A symbol to use as a property name to
 * retrieve an "Rx safe" Observer from an object. "Rx safety" can be defined as
 * an object that has all of the traits of an Rx Subscriber, including the
 * ability to add and remove subscriptions to the subscription chain and
 * guarantees involving event triggering (can't "next" after unsubscription,
 * etc).
 * @property {Symbol|string} observable A symbol to use as a property name to
 * retrieve an Observable as defined by the [ECMAScript "Observable" spec](https://github.com/zenparsing/es-observable).
 * @property {Symbol|string} iterator The ES6 symbol to use as a property name
 * to retrieve an iterator from an object.
 */
var Symbol = {
    rxSubscriber: rxSubscriber_1.$$rxSubscriber,
    observable: observable_1.$$observable,
    iterator: iterator_1.$$iterator
};
exports.Symbol = Symbol;
//# sourceMappingURL=Rx.js.map

It seems to me that you are not using the correct file to link, thus cannot find any of the files that you need.
Another issue you may be having is not moving the entire folder over to my wwwroot folder which is where all my compiled js/html/css files are, as well as lib, yours is libs.
gulp.task("scriptsNStyles", () => {
gulp.src([
        'systemjs/dist/system-polyfills.js',
        'systemjs/dist/system.src.js',
        'rxjs/**',
        'zone.js/dist/**',
        '@angular/**',
        'angular-in-memory-web-api/**',
        'bootstrap/dist/js/bootstrap*.js',
        '@ng-bootstrap/**',
        '@ngrx/**',
        'ngrx-store-freeze/**',
        'deep-freeze-strict/**',
        'angular2-jwt/**',
        'reflect-metadata/**',
        'es6-shim/**',
        'hammerjs/**',
        'angularfire2/**',
        'firebase/**'
    ], {
        cwd: "node_modules/**"
    })
    .pipe(gulp.dest("./wwwroot/libs"));

gulp.src([
    'node_modules/bootstrap/dist/css/bootstrap.css'
]).pipe(gulp.dest('./wwwroot/libs/css'));
});

Let me know what you are using for your link file.

Hi @xonuzofa ,
My rxjs is installed via npm and the rx.js is copied from bundle folder.
So, you mean I have to preserve the exact folder structure like lib/rxjs/bundle/rx.js, not just lib/rxjs/rx.js? Well, the folder structure was like that since I tried the angularjs2 beta maybe 8. It worked fine until the RTM of the angular JS.
In your gulp file, it seems like you copied everything of the rxjs. And you are not using the bundle of the rxjs, aren't you? I can try that but I hope I can just use bundle to reduce the connection amount.
Thanks

Yes i used to use the rx file inside the bundle but it did not work after the update either.  So i switched it to the Rx.js file on the root folder and it worked for me.  But yes, it will require you to move the entire rxjs folder or edit the file as needed.

Just want to remind since #2121 has landed with v5.1 release, this problem should been resolved, please upgrade your rxjs version and try.

As fix for this is released and believe latest version resolve it, closing issue. If it still occurs please feel freely report / reopen.

I am using rxjs v5.3.0, and I am still hitting this exception with angular 4.0.2

@mertdeg would you mind to share minimal reproducible repo for issue? it'll help to look into issues.

@kwonoj Nevermind, I think i was using rxjs-es npm package, which seems to be deprecated

I have updated to version 5.3.1 and the problem was solved.


Missing 'AS' in alias when SELECT

Description
I work in dbeaver with ClickHouse via the "ClickHouse (legacy)" connection.
I noticed that when opening the “table” object and then the “data” tab, a query like this is executed (example of opening system.asynchronous_metric_log):
SELECT x.* FROM system.asynchronous_metric_log x FORMAT TabSeparatedWithNamesAndTypes;
That is, in queries when opening the “data” tab of “table” objects, the keyword “ASS” is missing.
DBeaver Version
Community Edition 24.0.0
Operating System
Windows 10 Pro 64-bit (10.0, Build 19044)
Database and driver

ClickHouse <IP_ADDRESS>
ClickHouse JDBC 0.2.6

Steps to reproduce
I just marked the steps in the screenshot:

Additional context
Is there an option to add the "ASS" keyword in dbeaver settings or driver settings?

That is, in queries when opening the “data” tab of “table” objects, the keyword “ASS” is missing.

Hello, please describe more - what for do you need another alias word? I do not see any issues on your screenshot.

It's been a while since no update here. If the issue is still actual please let me know and provide additional information.


feat: autocomplete subprops and allow string values for readOnly in resolveData

This updates the TS types of resolveData such that:
readOnly can now return a boolean OR a string. Supporting string is helpful when you have a 'custom' field defined for a level which contains multiple fields underneath, rather than using objectFields. resolveData can pass a string value of the subfield being set for readOnly.
As an example, given this type:
type MyProps = {
  foo: {
    bar: {
      id: string;
      value: string;
  }
}

and I want to create a custom Puck field at the bar level, I have id and value as subprops. resolveData works at the level of bar, so if you wanted to set value as readOnly, that is not possible with
resolveData: () => {
  return {
    readOnly: { 'foo.bar': true }
  }
}

we do this instead now
resolveData: () => {
  return {
    readOnly: { 'foo.bar': 'value' }
  }
}

and then in the field's render function the readOnly prop would have a value of 'value'.
The readOnly acceptable values now autocomplete to any valid subfield. Prior to this change only the top-level fields were enumerated by the type. Given the MyProps example above:
resolveData: () => {
  return {
    readOnly: { 'HERE': 'value' }
  }
}

HERE would autocomplete as: 'foo'
Now it autocompletes as : 'foo' | 'foo.bar' | 'foo.bar.id' | 'foo.bar.value'
More context around these changes can be found here.

The DotBranch type could be used in a number of more places.

Closing this as I haven't heard back in a while @mkilpatrick. Let me know if you want to pick this up again.


Support enum variants with values

Hi folks! This feature was discussed in the past in other issues, but it's been quiet for a while and there hasn't been an issue dedicated specifically to this feature, hence this:
Motivation
Right now, only C-style enums are supported. A C-style enum like this
#[wasm_bindgen]
enum CStyleEnum { A, B = 42, C }

is now converted to a mapping from tag to integer values:
const CStyleEnum = Object.freeze({ A: 0, B: 42, C: 43 });

In your code you can just use CStyleEnum.A, like you would in Rust.
Rust's support for Algebraic Data Types (ADTs) is an awesome feature that I love and use intensely. It would be nice if JavaScript bindings could be generated for an enum like this:
#[wasm_bindgen]
enum MyEnum {
    A,
    B(u32),
    C(u32, u32),
    D { x: u32, y: u32 },
}

Proposed Solutions
JavaScript does not have builtin support for "tagged unions" like Rust does, so a decision has to be made on how we "model" this. There was discussion on this in the earlier C-style enum issue, with 2 proposed solutions. I'll summarize them here.
Solution 1: Tag + array of values
This is the most straightforward solution. It reflects Rust's memory layout for enums.
Typescript definition:
type MyEnum =
  | { tag: 'A' }
  | { tag: 'B', value: number }
  | { tag: 'C', value: [number, number] }
  | { tag: 'D', value: { x: number, y: number }
  ;

I like how currently, for C-style enums, a mapping from enum identifier to an integer is created. We could further generalize this by creating a mapping from enum identifier to enum variant constructor:
const MyEnum_Tags = Object.freeze({ A: 0, B: 1, C: 2, D: 3 });
const MyEnum = Object.freeze({
  A: Object.freeze({ tag: MyEnum_Tags.A }), // just a value, like currently for C-style enums
  B: function() { this.tag = MyEnum_Tags.B; this.val = arguments }, // a constructor
  C: function() { this.tag = MyEnum_Tags.C; this.val = arguments },
  D: function() { this.tag = MyEnum_Tags.D; this.val = arguments },
});

and use it as follows:
 // C-style variant. Reflects usage in Rust, and current usage in JS
const a = MyEnum.A;

// Variants with values. Reflects how in Rust a variant with values is a function:
const b = new MyEnum.B(42);
const c = new MyEnum.C(42, 43);
const d = new MyEnum.D({x: 42, y: 43});

JavaScript allows any function to be called with any list of parameters, so there's no way to prevent e.g. forgetting the number parameter for variant B, doing something like new MyEnum.B(), but that's just the way it is, in a dynamically typed language.
To "match" an enum variant, one can use JS switch-statements:
switch (variant.tag) {
case MyEnum_Tags.A:
  ...
case MyEnum_Tags.B:
  ...
}

if-else:
if (variant.tag === MyEnum_Tags.C) {
   const [x, y] = variant.val; // this is not too pretty, but values must be put under a field ("val"), in order to prevent naming collisions with the "tag" field.
   ...
}

or use a mapping:
const something = {
  [MyEnum_Tags.A]: ... ,
  [MyEnum_Tags.B]: ... ,
}[variant.tag];

Alternatives
Solution 2: Keep the tag as a key in the object
The following was also proposed:
type MyEnum =
  | { A: any }
  | { B: { '0': number } }
  | { C: { '0': number, '1': number } }
  | { D: { x: number, y: number } }
  ;

I'm personally not in favor, because one is forced to add a dummy value for variant 'A', which is inefficient:
const variant = { A: {} };

And this dummy value has to be truthy, in order for
if (variant.A) { ... }

to match.
Also, I think checking if an object contains a key is less efficient in (non-optimized?) JavaScript, compared to just checking the value of an integer field ("tag").
To "match" a variant, to my knowledge, one can only use if-statements.
if (variant.C) {
  const [x, y] = variant.C;
  ...
}

Additional info
I'm willing to put some work into this. Currently looking at the source of the wasm_bindgen macro to see if I can implement it myself.

It seems reasonable to me to try to support this, thanks for writing this up! This is likely a pretty significant feature to implement, however, and I don't have a ton of time to help with design details myself. I'd be happy to help review though!

It seems reasonable to me to try to support this, thanks for writing this up! This is likely a pretty significant feature to implement, however, and I don't have a ton of time to help with design details myself. I'd be happy to help review though!

Nice to hear. I will also be a bit busy the coming weeks, but I'll get at it, eventually. Need this feature for a problem I'm working on.

Nice to hear. I will also be a bit busy the coming weeks, but I'll get at it, eventually. Need this feature for a problem I'm working on.

Awesome to see someone else had the idea before me! I do like Approach 1, though I'm not sure if one would get the proper hints by the IDE when calling the constructors. Still, perfectly reasonable and would be a huge improvement!

Awesome to see someone else had the idea before me! I do like Approach 1, though I'm not sure if one would get the proper hints by the IDE when calling the constructors. Still, perfectly reasonable and would be a huge improvement!

That's a great feature that will surely help a lot in one of my projects.
You're proposals are awesome, @joeriexelmans, but what do you think about following what the genType ReScript library does with their variants? This seems to work really well, and could help in building a ReScript <-> wasm-bindgen interop.
I'd be more than happy to work on this with you, and am also currently reading the wasm_bindgen macro to get a grisp of how it works.

Hi @celsobonutti
From quickly reading the ReScript documentation, it seems to me that a downside is that matching a specific variant in JS is somewhat more complex, as a variant value may be either just a "string", or an object { tag, value }, for the same enum. Did I understand this correctly? Is there an upside I'm missing?
I'm still busy, until mid-March, so feel free to "take over" from me. I'll let you guys know soon as I've got time to work on this again.

Hey @joeriexelmans
Yes, the bindings are indeed more complex. I got the wrong understanding about how C-like enums were compiled in wasm_bindgen and thought they were - like ReScript's - strings. Now that I saw how they're currently compiled, this change does not make sense for me anymore.
Sure, I'm pretty busy lately too, but I'll keep trying to understand the macro when I have free time.
Thank you a lot for your quick response! 😃

Hey @alexcrichton, how are you doing?
I finally got some time to work on this (#2631), but looks like I had a misconception about WasmSlices (I thought I could have a slice with various ABI types) and now it looks to me that this feature would be way easier to implement using wasm multi-value returns. Is there any work on using multi-value in wasm-bindgen? I've searched for it but couldn't find anything 😞

Hi everyone, what would be needed to unlock this feature?

Is #2631 still relevant? I'm interested in this and would like to play around with it but starting from scratch might be too much. Getting a couple of pointers would also work.

A common error handling pattern is to wrap errors from other libraries in an enum variant. Would be great to be able to return a JsValue error inside of our library's error enum, rather than try to map every single one to a value.
If there's a better way to do this please let me know.

@voxelstack Yes, kind of. It does work in that revision as far as I remember, so definitely your best starting point, but you'd have to rebase it onto master. Could be possible, could be a lot of work.

Another option would be to treat non-c-style enums as structs, so they're wrapped in a class on the JavaScript side

I think at a minimum, wasm-bindgen could copy what Serde currently lets you do. See this link: https://serde.rs/enum-representations.html, there are three possible representations:
// Internally tagged: the enum variant gets a key with the rest of the enum content
// `#[wasm_bindgen(tag = "type")]` on the Rust side
{"type": "Request", "id": "...", "method": "...", "params": {...}}

// Adjacently tagged: the enum content is represented within a separate key
// `#[wasm_bindgen(tag = "t", content = "c")]`
{"type": "Request", "c": {"id": "...", "method": "...", "params": {...}}}

// Untagged: no variant indicator, figure it out based on the content
// `#[wasm_bindgen(untagged)]`
{"id": "...", "method": "...", "params": {...}}

I think that there needs to be a couple possible representations, and mimicking the serde style gives a familiar (and proven) way to do that. In any case, exporting the enum variant constructors as js functions (e.g. MyEnum.C(42, 43)) also sounds like a good idea.
For anyone who needs a fast workaround, using serde_wasm_bindgen lets you pass enums to and from js like the examples above.

The last one (untagged) would not work for enum where some variants have values and others not and the first one might lead. The first one (internally tagged) may lead to problems with field name conflicts and as per serde documentation does not work with enums containing tuple variants.
So I think the second one (adjacently tagged) or the default which you did not mention (externally tagged) is best suited.

I did miss externally tagged, thanks for pointing that out.
The point of my comment was more that I don't think wasm_bindgen does need to pick the "best" representation - instead it needs options, since no single representation is good in every case.

Although I agree that multiple options would be the best, I think we need to focus on getting the feature working first. TS/JS representation is something we can do solely on the JS side, which I believe is easier to modify than actually passing the necessary data back and forth.
I, unfortunately, still have no time to continue working on my PR, but would love to be involved if someone can.

Is there a way to see if a JsValue is of an enum member declared in the rust code as of now or is everything like that to-do?
I have an enum that is used in the js code and then passed to the rust code on several other occasions, but I can't use the enum in the functions argument.

What’s the status on this? I think I need this implemented, unless there’s other alternatives/workarounds

@ThatXliner as a general rule, if there are no other comments on an issue, the status hasn't changed.
A comment like "What's the status?" is rarely productive and notifies everyone in the conversation, causing noise and distraction, please consider not posting comments like that in the future in highly active repositories.
If you think someone should see this issue, send it to them or mention them here, ideally with an explanation.
If you want to express your support or desire for this feature, upvote the original post.
If you want to show how this feature is useful in a way that hasn't been considered in this thread yet, feel free to post a minimal example. Something like this can be useful for generating test cases.
Thank you.

Correct me if I am wrong, but I believe this is just waiting on somebody to implement it. It doesn’t seem like it would all that much work, especially since SerDe provides a good reference.

Probably needs a reviewer, I'm afraid this will be too big for me to find time to review.
E.g. I didn't find the time to review https://github.com/rustwasm/wasm-bindgen/pull/3554 yet.

Correct me if I am wrong, but I believe this is just waiting on somebody to implement it.

True, but so far nobody has done it. There was an attempt in https://github.com/rustwasm/wasm-bindgen/pull/2631, but the original author had no time to work on it further and it was never merged.

Hey all, I've recently come across a need for this feature and I'm also between jobs and so have some spare time to work on something like this. However I'm not sure I understand what benefits this approach would provide over the one outlined in the documentation for communicating arbitrary data via serde_wasm_bindgen https://rustwasm.github.io/wasm-bindgen/reference/arbitrary-data-with-serde.html.
Especially since Rust structs exported to JS must be Copy https://rustwasm.github.io/wasm-bindgen/reference/types/exported-rust-types.html so any enum with String is out of the question and the serde_wasm_bindgen feature does not have this problem.
The following example appears to work just fine, and since the implementations of WasmDescribe, IntoWasmAbi, and FromWasmAbi are all mechanical delegations to serde_wasm_bindgen they could be easily produced with a simple macro
#[derive(Serialize, Deserialize)]
#[serde(tag = "type", content = "data")]
pub enum TestEnum {
    Foo { number: i32 },
    Bar { string: String },
}

impl From<TestEnum> for JsValue {
    fn from(val: TestEnum) -> Self {
        serde_wasm_bindgen::to_value(&val).unwrap()
    }
}

impl wasm_bindgen::describe::WasmDescribe for TestEnum {
    fn describe() {
        JsValue::describe()
    }
}

impl wasm_bindgen::convert::IntoWasmAbi for TestEnum {
    type Abi = <JsValue as IntoWasmAbi>::Abi;

    fn into_abi(self) -> Self::Abi {
        serde_wasm_bindgen::to_value(&self).unwrap().into_abi()
    }
}

impl wasm_bindgen::convert::FromWasmAbi for TestEnum {
    type Abi = <JsValue as FromWasmAbi>::Abi;

    unsafe fn from_abi(js: Self::Abi) -> Self {
        serde_wasm_bindgen::from_value(JsValue::from_abi(js)).unwrap()
    }
}

#[wasm_bindgen(js_name = "newTestEnum")]
pub fn new_test_enum() -> TestEnum {
    TestEnum::Foo { number: 42 }
}

#[wasm_bindgen(js_name = "printTestEnum")]
pub fn print_test_enum(test_enum: TestEnum) {
    match test_enum {
        TestEnum::Foo { number } => console_log!("Foo encountered with value: {}", number),
        TestEnum::Bar { string } => console_log!("Bar encountered with value: {}", string),
    }
}

Here's a procedural macro for it, the macro attributes get passed directly to serde so you can customize the the tagging convention.
``rs
use proc_macro2::TokenStream;
use quote::{quote, ToTokens};
use syn::{spanned::Spanned, Error, Item};
pub fn expand_macro(serde_attr: TokenStream, tokens: TokenStream) -> syn::Result {
let item = syn::parse2::(tokens)?;
match item {
Item::Struct(it) => inner_macro(it.ident.clone(), serde_attr, it.to_token_stream()),
Item::Enum(it) => inner_macro(it.ident.clone(), serde_attr, it.to_token_stream()),
item => Err(Error::new(
item.span(),
"serde_wasm_bindgen macro can only be applied to structs or enums",
)),
}
}
fn inner_macro(
ident: proc_macro2::Ident,
serde_attr: TokenStream,
tokens: TokenStream,
) -> Result<TokenStream, Error> {
let pound = syn::Token.to_token_stream();
Ok(quote! {
  #pound[derive(Serialize, Deserialize)]
  #pound[serde(#serde_attr)]
  #tokens

  impl From<#ident> for JsValue {
    fn from(val: #ident) -> Self {
        serde_wasm_bindgen::to_value(&val).unwrap()
    }
  }

  impl From<JsValue> for #ident {
      fn from(value: JsValue) -> Self {
          serde_wasm_bindgen::from_value(value).unwrap()
      }
  }

  impl wasm_bindgen::describe::WasmDescribe for #ident {
      fn describe() {
          JsValue::describe()
      }
  }

  impl wasm_bindgen::convert::IntoWasmAbi for #ident {
      type Abi = <JsValue as IntoWasmAbi>::Abi;

      fn into_abi(self) -> Self::Abi {
          Into::<JsValue>::into(self).into_abi()
      }
  }

  impl wasm_bindgen::convert::FromWasmAbi for #ident {
      type Abi = <JsValue as FromWasmAbi>::Abi;

      unsafe fn from_abi(js: Self::Abi) -> Self {
          JsValue::from_abi(js).into()
      }
  }
})

}

@DylanRJohnston I've created a macro that does this for me. It generates TypeScript based on serde and uses serde_wasm_bindgen for ABI conversions. Here' a blog post, the crate (/bomboni_wasm), and an example.

It generates TypeScript based on serde and uses serde_wasm_bindgen for ABI conversions.

FWIW there's also tsify, which does this as well.

Hey all, I've recently come across a need for this feature and I'm also between jobs and so have some spare time to work on something like this. However I'm not sure I understand what benefits this approach would provide over the one outlined in the documentation for communicating arbitrary data via serde_wasm_bindgen https://rustwasm.github.io/wasm-bindgen/reference/arbitrary-data-with-serde.html.
Especially since Rust structs exported to JS must be Copy https://rustwasm.github.io/wasm-bindgen/reference/types/exported-rust-types.html so any enum with String is out of the question and the serde_wasm_bindgen approach does not have this problem.
The following example appears to work just fine, and since the implementations of WasmDescribe, IntoWasmAbi, and FromWasmAbi are all mechanical delegations to serde_wasm_bindgen they could be easily produced with a simple macro
#[derive(Serialize, Deserialize)]
#[serde(tag = "type", content = "data")]
pub enum TestEnum {
    Foo { number: i32 },
    Bar { string: String },
}

impl From<TestEnum> for JsValue {
    fn from(val: TestEnum) -> Self {
        serde_wasm_bindgen::to_value(&val).unwrap()
    }
}

impl wasm_bindgen::describe::WasmDescribe for TestEnum {
    fn describe() {
        JsValue::describe()
    }
}

impl wasm_bindgen::convert::IntoWasmAbi for TestEnum {
    type Abi = <JsValue as IntoWasmAbi>::Abi;

    fn into_abi(self) -> Self::Abi {
        serde_wasm_bindgen::to_value(&self).unwrap().into_abi()
    }
}

impl wasm_bindgen::convert::FromWasmAbi for TestEnum {
    type Abi = <JsValue as FromWasmAbi>::Abi;

    unsafe fn from_abi(js: Self::Abi) -> Self {
        serde_wasm_bindgen::from_value(JsValue::from_abi(js)).unwrap()
    }
}

#[wasm_bindgen(js_name = "newTestEnum")]
pub fn new_test_enum() -> TestEnum {
    TestEnum::Foo { number: 42 }
}

#[wasm_bindgen(js_name = "printTestEnum")]
pub fn print_test_enum(test_enum: TestEnum) {
    match test_enum {
        TestEnum::Foo { number } => console_log!("Foo encountered with value: {}", number),
        TestEnum::Bar { string } => console_log!("Bar encountered with value: {}", string),
    }
}

The main limitation I can think of is that it won't produce Typescript type definitions for the Enum, you can define them manually https://rustwasm.github.io/wasm-bindgen/reference/attributes/on-js-imports/typescript_type.html, but keeping them in sync would be a pain. However I'm not sure this limitation warrants the effort. Maybe it'd be enough to outline this approach for enums in the documentation?

@DylanRJohnston Could you submit this as a pull request to serde_wasm_bindgen? I could do this for you if you would like.

FWIW tsify seems to be a little abandoned right now, but there's an active and updated fork called tsify-next.


Remove duplicate doc in Uri.encodeQueryComponent()

Minor documentation change

[x] I’ve reviewed the contributor guide and applied the relevant portions to this PR.

Contribution guidelines:

See our contributor guide for general expectations for PRs.
Larger or significant changes should be discussed in an issue before creating a PR.
Contributions to our repos should follow the Dart style guide and use dart format.

Note that this repository uses Gerrit for code reviews. Your pull request will be automatically converted into a Gerrit CL and a link to the CL written into this PR. The review will happen on Gerrit but you can also push additional commits to this PR to update the code review.

/cc @lrhn

Good catch. Thanks!


GKE Node upgrades causes repeat "PV exists" error

When upgrading a GKE node pool, the nodes are drained, deleted and recreated. When they come back up, the rescheduled Pod errors with "persistentvolumes x already exists"; this will loop continuously until the PV is manually deleted.
Deleting a bound PVC has no affect on the PV; the PV will remain in a "Released" state until manually deleted.
Is this a known issue?

what pod is giving that error?

The DaemonSet pod for the Local Volume Static Provisioner:

Workflow:
*Pod is scheduled, PV is successfully created
*StatefulSet using volumeClaimTemplates creates a PVC and binds to our PV
*Trigger a Node Pool upgrade
*Node is restarted, pod is rescheduled
*Pod tries to create PV with the same name

/area local-volume
Does the node UID remain the same before/after upgrade? The name does, right? A different UID would explain this error.

Yes, I think there is at least one issue here.
In 1.10 (and below), when a node upgrade or repair was done, the Kubernetes Node object would be recreated (and therefore get a new Node.UID).  The local volume provisioner filters out local PV objects that were not created by the provisioner on its current Node UID, which is inconsistent with local PV naming scheme, which only uses Node.Name.  I opened up #636 to add an option to set provisioner name without node UID to solve this cleanup issue.  However, this will only fix new deployments going forward.  Existing PVs created with an older local provisioner will still have the UID provisioner naming.
This issue should not be seen on 1.11 because Node objects are no longer recreated on upgrade/repair even though the underlying instance is still recreated (and local SSDs are wiped).  Regardless, fixing #636 should not impact 1.11, so we should fix it anyway.
Eventually when GKE offers a unique local SSD naming scheme, using Node.Name will still be fine because the local SSDs will have unique paths.  So on an upgrade/repair, a new PV will get created, and the stale PV will remain with error.

HI @dwilliams782, we added an option to not use Node UID in the provisioner name in #947, and I updated the GKE provisioner spec to use it in #952.  This won't solve the problem with Local PVs created by the older version of the provisioner, so you will have to delete those PVs when after deleting the PVCs, or update all of the PVs with the correct provisioner name in the "provisioned-by" annotation

Let me know if you are still seeing issues.

Please open a new issue in https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner if you still have problems.
/close


Docs Improvement: Add installation command and namespace to readme

I have to feature requests for the readme:
Add the composer installation command for easy copy and paste
composer require robthree/humanoid

Add the proper namespace in the example, had to look at the source to see that I needed the following:
use RobThree\HumanoID\HumanoIDs;

Edit: While looking at the source I found the spaceIdGenerator which I think is cooler. Something to add to the readme as well?

BAM!


_transfer

objective

To transfer not only NFT, but attributes

feature

when user transfer NFT. transfer also attribute like role, point, name etc

to transfer user's attribute, override this function.
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol#L442


Remove 'speaker' column from generated talk SQL.

This is handled by the talk_speaker table now.

Oops, we were too slow and got this PR twice.  I merged https://github.com/joindin/joindin-api/pull/303


TypeError: Converting circular structure to JSON

Not sure if this is expected behavior or not. But when I have all my definitions in one object and then extract a single definition to be the one that is tested and merge it back into the schema it throws the error given in the title. A simple (and nonsensical) example is given below it can also be seen and played with on https://tonicdev.com/jon/562a6c0a38427f0d009ed8b4. The example works if I stringify the object and then parse it again. I tried just doing a cloneDeep operation but the error persists.
var Ajv = require('ajv');
var _ = require('lodash');
var ajv = Ajv(); // options can be passed

var definitions ={ definitions: {
    "baz": {
    "properties": {
        "foo": { "type": "string" },
        "bar": { "type": "number", "maximum": 3 }
    }}
}};

var schema = _.assign(definitions, definitions.definitions.baz)
//schema = JSON.parse(JSON.stringify(schema))

var res = ajv.addSchema(schema, 'baz');

var validate = ajv.getSchema('baz');

test({"foo": "abc", "bar": 2});
test({"foo": 2, "bar": 2});

function test(data) {
    var valid = validate(data);
    if (valid) console.log('Valid!');
    else console.log('Invalid:' + ajv.errorsText(validate.errors));
}

I can look later but I suspect that the issue may be in json-stable-stringify
If you pass your object to it directly does it work?

It seems like it is - this file throws this error - https://github.com/substack/json-stable-stringify/blob/master/index.js
It probably thinks that the object is circular because the same reference appears in it twice, although it appears in different properties so it can be stringified ok. Passing it to JSON.stringify makes all references unique

Yes, it does work when I create a fresh object directly. I'll check out json-stable-stringify.

If I omit the data in the definitions it then works.

Yes, here's the issue in json-stable-stringify. It hasn't been updated to the library yet though. Until then I'll just do my work around.
https://github.com/substack/json-stable-stringify/issues/14

I'm not sure if this issue should stay open until it is resolved in the other library. So whatever you want to do!
Thanks for the pointer!

It would be good if @substack merged the PR that fixes the issue. Or I could switch to using the fork of json-stable-stringify

It would be great to use the forked version of json-stable-stringify because there is no activity since 9 months on the original json-stable-stringify repo

I'd say it's 20 months...


Add binary stream support

Adds support for myc messages with binary payload.
New header x-stream-type header introduced to indicate message type.
Fixes issue with last migration for messages.message_id column

thanks for review @wwkeyboard, can you please check latest changes and let me know if issues you mentioned are resolved


How to cache repositories hosted as private github repo?

Configuration:
mcajkovs@ubuntu:~$ cat docker-compose.yml
version: '3.1'
services:
  verdaccio:
    container_name: 'verdaccio'
    image: verdaccio/verdaccio
    restart: always
    ports:
      - "4873:4873"
    networks:
      - docker-network

networks:
  docker-network:
    driver: bridge

mcajkovs@ubuntu:~$ docker-compose up
Recreating verdaccio ...
WARNING: Service "verdaccio" is using volume "/verdaccio/storage" from the previous container. Host mapping "/home/mcajkovs/smbshare/_excalibur/local_npm_registry/data/storRecreating verdaccio ... done
Attaching to verdaccio
verdaccio    |  warn --- config file  - /verdaccio/conf/config.yaml
verdaccio    |  warn --- Verdaccio started
verdaccio    |  warn --- Plugin successfully loaded: verdaccio-htpasswd
verdaccio    |  warn --- Plugin successfully loaded: verdaccio-audit

mcajkovs@ubuntu:~$ npm get registry
https://registry.npmjs.org/
mcajkovs@ubuntu:~$ npm set registry http://localhost:4873
mcajkovs@ubuntu:~$ npm get registry
http://localhost:4873/

Problem:
When I'm installing packages from public npm repository everything is working fine. I can see that those packages are cached inside my docker container under /verdaccio/storage/data/ I'can alo see request in console where Docker was started. When I delete node_modules and run npm install again then modules are installed blazingly fast.
But the problem is when I want to install private modules hosted on github. Modules are not cahed (empty /verdaccio/storage/data/), installation is very slow, Docker console does not show any output. How can I cache repositories hosted as private github repo?
Public npm repos iniside package.json
  "dependencies": {
    "liqd-logger": "0.0.3",
    "liqd-server": "^1.3.5",
    "liqd-timed-promise": "^1.2.4",
    "liqd-unique-id": "^1.1.1",
    "liqd-websocket": "^1.2.3"
  }

Private github repos inside package.json
    "dependencies": {
        "liqd-logger"<EMAIL_ADDRESS>        "liqd-server"<EMAIL_ADDRESS>        "liqd-timed-promise"<EMAIL_ADDRESS>        "liqd-unique-id"<EMAIL_ADDRESS>        "liqd-websocket"<EMAIL_ADDRESS>    }

Node package managers do download this directly from the repo, Verdaccio is not involved in this.
 "dependencies": {
        "liqd-logger"<EMAIL_ADDRESS>        "liqd-server"<EMAIL_ADDRESS>        "liqd-timed-promise"<EMAIL_ADDRESS>        "liqd-unique-id"<EMAIL_ADDRESS>        "liqd-websocket"<EMAIL_ADDRESS>    }

Answering your main question, no, you cannot cache Git repositories with Verdaccio.


Fix sys_home_dir on windows

It was crashing here on Windows, as it lacks a HOME environment variable (it's USERPROFILE).
os.path.expanduser('~') correctly returns the home directory on Windows, Linux, and Mac.

Hi, thanks for your suggestion. But I don't think we need this modification for Windows. Since users on Windows tend not to put things under the home directory -- they often prefer to put all of them in folders like: E:\Research\.... In this case, you can easily assign this path to sys_home_dir in config.py, and everything will be okay.


Issue with prl-tools does not appear to be installing correctly

The parallel tools package does not appear to be installing prl_fs properly.
I get the following error when trying to start a box with vagrant:
#snippet (full log below)
Vagrant was unable to mount Parallels Desktop shared folders. This is usually (VagrantPlugins::Parallels::Errors::ParallelsMountFailed)
because the filesystem "prl_fs" is not available. This filesystem is
made available via the Parallels Tools and kernel module.
Please verify that these guest tools are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

Steps To Reproduce
From a new directory):

Create a new machine based on my example nixos base box

vagrant init jamesla/nixos-basebox

Run it

vagrant up --no-destroy-on-error

It will start the machine but throw the error when trying to mount the shared volume.

Check the box

vagrant ssh
prltools -V

(you will see that parallel tools is installed correctly).
Describe the bug
parallel tools prl_fs does not appear to be instlled properly as vagrant can not mount shared volumes.
Expected behavior
If parallels tools was installed correctly then the shared volume would mount correctly.
Notify maintainers

#full log
==> default: Mounting shared folders...
    default: /vagrant => /Users/jamesla/Documents/projects/nixos-bootstrapper
Traceback (most recent call last):
        116: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/bin/vagrant:248:in `<main>'
        115: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/environment.rb:301:in `cli'
        114: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/cli.rb:67:in `execute'
        113: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/plugins/commands/reload/command.rb:40:in `execute'
        112: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/plugin/v2/command.rb:232:in `with_target_vms'
        111: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/plugin/v2/command.rb:232:in `each'
        110: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/plugin/v2/command.rb:243:in `block in with_target_vms'
        109: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/plugins/commands/reload/command.rb:42:in `block in execute'
        108: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:203:in `action'
        107: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:203:in `call'
        106: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/environment.rb:631:in `lock'
        105: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:217:in `block in action'
        104: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:248:in `action_raw'
        103: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
        102: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
        101: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
        100: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         99: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         98: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/config_validate.rb:25:in `call'
         97: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         96: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         95: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         94: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         93: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         92: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         91: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         90: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         89: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         88: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/config_validate.rb:25:in `call'
         87: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         86: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/check_shared_interface.rb:13:in `call'
         85: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         84: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         83: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         82: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         81: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         80: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         79: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         78: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         77: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         76: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/resume.rb:21:in `call'
         75: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         74: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         73: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         72: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         71: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         70: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         69: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         68: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         67: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         66: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         65: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         64: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/clear_forwarded_ports.rb:16:in `call'
         63: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         62: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         61: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         60: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/box_check_outdated.rb:36:in `call'
         59: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         58: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         57: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         56: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         55: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         54: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         53: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         52: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         51: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         50: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         49: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         48: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         47: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         46: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         45: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         44: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         43: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         42: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         41: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         40: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         39: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         38: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         37: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         36: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         35: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         34: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/check_shared_interface.rb:13:in `call'
         33: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         32: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/set_name.rb:48:in `call'
         31: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         30: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/clear_forwarded_ports.rb:16:in `call'
         29: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         28: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/provision.rb:80:in `call'
         27: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         26: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/prepare_forwarded_port_collision_params.rb:35:in `call'
         25: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         24: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb:52:in `call'
         23: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         22: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/prepare_nfs_valid_ids.rb:12:in `call'
         21: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         20: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/plugins/synced_folders/nfs/action_cleanup.rb:25:in `call'
         19: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         18: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folder_cleanup.rb:28:in `call'
         17: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         16: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/delayed.rb:19:in `call'
         15: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         14: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folders.rb:90:in `call'
         13: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folders.rb:90:in `each'
         12: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folders.rb:93:in `block in call'
         11: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/synced_folder.rb:49:in `enable'
         10: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/synced_folder.rb:49:in `each'
          9: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/synced_folder.rb:65:in `block in enable'
          8: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/guest.rb:45:in `capability'
          7: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `capability'
          6: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `call'
          5: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/guest_cap/linux/mount_parallels_shared_folder.rb:35:in `mount_parallels_shared_folder'
          4: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `capability'
          3: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `call'
          2: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/cap/mount_options.rb:19:in `mount_options'
          1: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/util/unix_mount_helpers.rb:48:in `detect_owner_group_ids'
/opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/plugins/communicators/ssh/communicator.rb:268:in `execute': Vagrant was unable to mount Parallels Desktop shared folders. This is usually (VagrantPlugins::Parallels::Errors::ParallelsMountFailed)
because the filesystem "prl_fs" is not available. This filesystem is
made available via the Parallels Tools and kernel module.
Please verify that these guest tools are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

getent group vagrant

The error output from the command was:

        116: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/bin/vagrant:248:in `<main>'
        115: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/environment.rb:301:in `cli'
        114: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/cli.rb:67:in `execute'
        113: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/plugins/commands/reload/command.rb:40:in `execute'
        112: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/plugin/v2/command.rb:232:in `with_target_vms'
        111: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/plugin/v2/command.rb:232:in `each'
        110: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/plugin/v2/command.rb:243:in `block in with_target_vms'
        109: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/plugins/commands/reload/command.rb:42:in `block in execute'
        108: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:203:in `action'
        107: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:203:in `call'
        106: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/environment.rb:631:in `lock'
        105: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:217:in `block in action'
        104: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/machine.rb:248:in `action_raw'
        103: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
        102: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
        101: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
        100: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         99: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         98: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/config_validate.rb:25:in `call'
         97: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         96: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         95: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         94: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         93: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         92: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         91: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         90: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         89: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         88: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/config_validate.rb:25:in `call'
         87: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         86: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/check_shared_interface.rb:13:in `call'
         85: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         84: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         83: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         82: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         81: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         80: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         79: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         78: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         77: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         76: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/resume.rb:21:in `call'
         75: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         74: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         73: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         72: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         71: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         70: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         69: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         68: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         67: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         66: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         65: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         64: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/clear_forwarded_ports.rb:16:in `call'
         63: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         62: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         61: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         60: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/box_check_outdated.rb:36:in `call'
         59: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         58: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         57: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         56: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         55: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         54: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         53: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         52: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         51: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         50: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         49: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         48: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         47: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         46: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         45: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         44: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         43: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         42: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/call.rb:53:in `call'
         41: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `run'
         40: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/util/busy.rb:19:in `busy'
         39: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/runner.rb:101:in `block in run'
         38: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builder.rb:180:in `call'
         37: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         36: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:127:in `block in finalize_action'
         35: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         34: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/check_shared_interface.rb:13:in `call'
         33: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         32: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/set_name.rb:48:in `call'
         31: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         30: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/clear_forwarded_ports.rb:16:in `call'
         29: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         28: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/provision.rb:80:in `call'
         27: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         26: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/prepare_forwarded_port_collision_params.rb:35:in `call'
         25: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         24: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb:52:in `call'
         23: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         22: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/action/prepare_nfs_valid_ids.rb:12:in `call'
         21: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         20: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/plugins/synced_folders/nfs/action_cleanup.rb:25:in `call'
         19: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         18: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folder_cleanup.rb:28:in `call'
         17: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         16: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/delayed.rb:19:in `call'
         15: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/warden.rb:48:in `call'
         14: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folders.rb:90:in `call'
         13: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folders.rb:90:in `each'
         12: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/action/builtin/synced_folders.rb:93:in `block in call'
         11: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/synced_folder.rb:49:in `enable'
         10: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/synced_folder.rb:49:in `each'
          9: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/synced_folder.rb:65:in `block in enable'
          8: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/guest.rb:45:in `capability'
          7: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `capability'
          6: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `call'
          5: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/guest_cap/linux/mount_parallels_shared_folder.rb:35:in `mount_parallels_shared_folder'
          4: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `capability'
          3: from /opt/vagrant/embedded/gems/2.3.4/gems/vagrant-2.3.4/lib/vagrant/capability_host.rb:111:in `call'
          2: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/cap/mount_options.rb:19:in `mount_options'
          1: from /Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/util/unix_mount_helpers.rb:45:in `detect_owner_group_ids'
/Users/jamesla/.vagrant.d/gems/2.7.6/gems/vagrant-parallels-2.3.1/lib/vagrant-parallels/util/unix_mount_helpers.rb:56:in `rescue in detect_owner_group_ids': uninitialized constant Vagrant::Errors::ParallelsMountFailed (NameError)

You can find the source code to nixos-basebuild here:
https://github.com/jamesla/nixos-bootstrapper/blob/master/scripts/configuration.nix
(it basically installs make, git and prl-tools):

Closing - I wasn't understanding how /etc/fstab worked with nixos. Once I added an entry to the shared volume through my nixos configuration it worked fine.