WIP: Feathers-Vuex 2.0 rewritten with TypeScript

Differences in Feathers-Vuex 2.0
The biggest change in Feathers-Vuex 2.0 is that it has been refactored with TypeScript!  (It's mostly ES6, still)
Your project does NOT require to be written in TypeScript.  The dist is compiled to ES6.
Trying it out
One note about trying it out.  Because I accidentally published<EMAIL_ADDRESS>with a pre tag on npm, you have to install the specific version number to get the latest code.  To find out which is the most-recently published version, run npm view feathers-vuex and look at the pre tag.  You can ignore the next and pegasus tags.  Those were that happened because I publish a lot of packages.  :)
To try the latest code.
npm view feathers-vuex

The end of the output looks something like this:
dist-tags:
latest: 1.7.0         next: 1.7.0-pre.37    pegasus: 1.7.0-pre.1  pre: 2.0.0-pre.54

Now use the latest pre tag:
npm i<EMAIL_ADDRESS>
# or with yarn
yarn add<EMAIL_ADDRESS>
My TypeScript experience
Initially, I wasn't a fan of TypeScript.  I'm turned off by the steeper learning curve it introduces to writing code.
What I do like is the tooling.    I'm only able to appreciate it for one reason: you can use directives to tell it to ignore lines or files, similar to ESLint. The tooling will then shut up and let me write JavaScript.  TypeScript has been quite beneficial to allowing me to better see how to refactor and get rid of a huge monkey patch.  It's down to a few lines of code, now.
I imagine I will like TypeScript more when there's first-class support for it built into Vue.  I imagine how powerful it will be in an entire Vue project.  It's one of the reasons that I'm REALLY excited about the new VueJS 3.0 API (The new function-based syntax is way more exciting, though. It's going to let me write some really pretty, well-organized code :)
But that's enough about TypeScript.
Where I need assistance: the build
The build system has been my only frustration with switching to TypeScript.  Transpiling from TypeScript to JavaScript only to be transpiled by Babel (or whichever) into another form of JavaScript... has proven to be frustrating.  I could really use some help in this area.
My original intent was to target the build to ES5.  But there are some weird errors that show up when classes get transpiled into old Javascript code.  Classes don't quite behave the same after transpiling.  Things were so inconsistent that I couldn't write down any useful notes to tell you what I was experiencing.  The only clarity I got out of the experience was that it was frustrating.  ;)
I found that the simplest way around my frustration was to target ES6.  I found next that Vue's default build assumes packages in the node_modules folder to be compiled to ES5.  So you'll run into this error:
TypeError : Class constructor BaseModel cannot be invoked without 'new'

This error was fixed by adding feathers-vuex to the transpileDependencies in the vue.config.js file:
module.exports = {
  transpileDependencies: ['feathers-vuex']
}

It felt like everything was solved until I ran the production build.  There were more errors.  I finally copied the feathers-vuex folder from node_modules into a src/libs folder in my project.  Voila!  It all works.  So I'm currently running this code in production by using a shell script to copy it inside my project.
rm -rf src/libs
mkdir src/libs

# feathers-vuex
cp -r node_modules/feathers-vuex/dist src/libs/feathers-vuex

Then in my package.json scripts:
{
  "copy": ". ./copy-deps.sh",
  "serve": "npm run copy && vue-cli-service serve",
  "build": "npm run copy && vue-cli-service build",
  "postinstall": "npm run copy"
}

I don't consider the above solution to be a pretty one.  I likely will not publish 2.0 until a solution is discovered which doesn't required copying from node_modules.  I know it's got to be simple.  It's has something to do with transpile settings for node_modules.  I just haven't found it yet.
Here's what's new in feathers-vuex
Check out the tests for the best documentation.  They've been reorganized.  This is still a Work in Progress.
Changes to Initialization

To assist in connecting with multiple FeathersJS API servers, a new serverAlias option is now required.  This requires a simple addition to the initial options.
The exports have changed.

(a) A new BaseModel is available.  This is the base FeathersVuexModel which contains the model methods. Feel free to extend it and make it fit your awesome services!
(b) The service method has been renamed to makeServicePlugin.
(c) The auth method is now called makeAuthPlugin
(d) The models object is now exported, so you can access them from anywhere.  They are keyed by serverAlias.
(e) A new clients object is available. The intention is to allow working with multiple FeathersJS API servers.

You no longer pass a servicePath to create a service-plugin. Instead, pass the actual Feathers service.
Since you can customize the Model, you also pass the extended Model into the makeServicePlugin method.

Below is an all-in-one example of a the basic configuration steps.  See the next section for how to setup a project.
// ./src/store/store.js
import feathers from './feathers-client'
import Vuex from 'vuex'
import feathersVuex from 'feathers-vuex'

const {
  BaseModel,         // (2a)
  makeServicePlugin, // (2b)
  makeAuthPlugin,    // (2c)
  models,            // (2d)
  clients            // (2e)
} = feathersVuex(feathers, {
  idField: '_id',
  serverAlias: 'myApi' // (1)
})

class Todo extends BaseModel {
  // required
  constructor (data, options) {
    super(data, options)
  }
  // required
  static modelName = 'Todo'

  // optional, but useful
  static instanceDefaults(data) {
    return {
      name: '',
      isComplete: false,
      userId: null,
      user: null // populated on the server
    }
  }

  // optional, but useful
  static setupInstance(data) {
    if (data.user) {
      data.user = new models.myApi.User(data.user)
    }
    return data
  }
  // customize the model as you see fit!
}

const todosPlugin = makeServicePlugin({
  Model: Todo, // (3)
  service: feathers.service('todos') // (4)
})

const store = new Vuex.Store({
  plugins: [
    todosPlugin
  ]
})

Setting up a project
There are four steps to setting up the entirety of feathers-vuex:

Setup the FeathersJS Client.
Setup each Service plugin
Setup the Auth plugin
Register all plugins with Vuex

Setup the FeathersJS Client
It's now recommended that the FeathersJS and client live together in the same file.  This cleans up imports when setting up services.  So let's start with the feathers-client.js file.  I usually put this in src/feathers-client.js, but you can put it in the store folder if you want.
// src/feathers-client.js
import feathers from '@feathersjs/feathers'
import socketio from '@feathersjs/socketio-client'
import authClient from '@feathersjs/authentication-client'
import io from 'socket.io-client'
import feathersVuex from 'feathers-vuex' // or '@/libs/feathers-vuex' if you're copying feathers-vuex as mentioned earlier.

// Setup the Feathers client
const host = process.env.VUE_APP_API_URL // or set a string here, directly
const socket = io(host, { transports: ['websocket'] })
const feathersClient = feathers()
  .configure(socketio(socket))
  .configure(authClient({ storage: window.localStorage }))

export default feathersClient

// Setup feathers-vuex
const {
  makeServicePlugin,
  makeAuthPlugin,
  BaseModel,
  models,
  clients,
  FeathersVuex
} = feathersVuex(feathersClient, {
  serverAlias: 'api', // or whatever that makes sense for your project
  idField: '_id' // `id` and `_id` are both supported, so this is only necessary if you're using something else.
})

export {
  makeAuthPlugin,
  makeServicePlugin,
  BaseModel,
  models,
  clients,
  FeathersVuex
}

Now that we have setup the client, we can use the configured exports in each of our services.
Setup the Services Plugins
Now let's setup a Vuex plugin for each service. I use Webpack's require.context to automatically import all of the services instead of explicitly typing them all.  So, I'll put the services in the src/store/services folder.
// Bring in the imports from the feathers-client.js file.
import feathersClient, {
  makeServicePlugin,
  BaseModel
} from '../../feathers-client'

// Extend the base class
class User extends BaseModel {
  constructor(data, options) {
    super(data, options)
  }
  static modelName = 'User'
  static instanceDefaults() {
    return {
      firstName: '',
      lastName: '',
      email: '',
      password: ''
    }
  }
  get fullName() {
    return `${this.firstName} ${this.lastName}`
  }
}
const servicePath = 'users'
const servicePlugin = makeServicePlugin({
  Model: User,
  service: feathersClient.service(servicePath),
  servicePath
})

// Optionally add service-level hooks, here:
feathersClient.service(servicePath).hooks({
  before: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  },
  after: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  },
  error: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  }
})

export default servicePlugin

Once the service plugin is exported, we can register it with Vuex, but first let's setup the auth plugin.
Setup the Auth Plugin
We'll use the makeAuthPlugin method to tell the auth plugin where to find our /users service:
// src/store/store.auth.js
import feathersClient, { makeAuthPlugin } from '../feathers-client'

export default makeAuthPlugin({ userService: 'users' })

Once you've added the export, we're finally ready to setup the store.
Register all plugins with Vuex
The final step is to add all of the plugins to the Vuex store.
// src/store/store.js
import Vue from 'vue'
import Vuex from 'vuex'
import { FeathersVuex } from 'feathers-vuex'
import auth from './store.auth'

Vue.use(Vuex)
Vue.use(FeathersVuex)

// Require the entire folder of service plugins with Webpack
const requireModule = require.context( './services', false, /.js$/ )
const servicePlugins = requireModule
  .keys()
  .map(modulePath => requireModule(modulePath).default)

// Or you can import them manually for Rollup, etc.
import users from './services/users'

export default new Vuex.Store({
  state: {},
  getters: {},
  mutations: {},
  actions: {},
  plugins: [
    ...servicePlugins, // if you're using require.context, spread the plugins into the array.
    users, // if you're manually importing, just add the plugins into the array, like this
    auth
  ]
})

With the above four steps accomplished, the base of most any application using feathers-vuex is ready to build something awesome!
FeathersVuex Vue plugin changes
The Vue plugin is registered in exactly the same way.  The difference comes when you try to find the Model classes in the $FeathersVuex object.  Instead of finding models directly on the $FeathersVuex object, they are namespaced by the serverAlias you provided.  This allows cleaner support for multiple APIs.  Supposing you had this code in a component, previously...
created () {
  // The old way
  const { Todo } = this.$FeathersVuex
}

Modify it to include the new serverAlias.  Suppose you set a serverAlias of myApi, you'd put this in the new version:
created () {
  // The new way includes the `serverAlias` of '.myApi'
  const { Todo } = this.$FeathersVuex.myApi
}

Better default idField support
Since records are keyed by id, feathers-vuex needs to know what the idField is for each service.  In the last version, the default was id, and you had to specify something different.  This version supports id and _id with zero configuration.  You only need to set idField when you're using something other than id or _id.
There's still a warning message when records don't have a property matching the idField.  Just like in the last version, it only appears when you turn on debug: true in the options.
Support for Temporary Records
Feathers-Vuex 2.0 supports tracking temporary items and automatically assigns a temporary id to new records. It also adds the records to state.tempsById.  This is customizable using the tempIdField option.
Because of the new ability to handle temporary records, a message is only logged when assigning a temporary id to a record.  The checkId utility function has been removed, since this was its main purpose.
Getters Work with Temporary Records
The find getter has been updated to include records from state.tempsById, by default.  You can pass temps: false in the params to only search state.keyedById: find({ query: {}, temps: false })
The get getter has also been updated to work with temp ids.  Pass the tempId the way you normally would pass the id:  get(tempId)
The "currentItem" workflow is no longer supported
The setCurrent mutation and currentId state encouraged use of a very limiting API.  It's much more common for apps to require more than one current record.  The createCopy, resetCopy (formerly called rejectCopy), commitCopy, and clearCopy mutations (since v1.x) provide a more flexible solution for implementing the same functionality.  As a result of this, following have been removed from the modules:

state: currentID
getters: current
mutations: setCurrent, clearList, copy

The diffOnPatch option has been removed
(See the next section for its replacement.)
I have not been able to find a diffing algorithm that works equally well acroos all schemas.  It's especially difficult for nested schemas.  Because of this, diffOnPatch is no longer a global option.  It is being replaced by the diffOnPatch static Model method. See the next section.
Model Classes: BYOD (Bring Your Own Diffing)
First, why do any diffing?  On the API server, an update request replaces an entire object, but a patch request only overwrites the attributes that are provided in the data.  For services with simple schemas, it doesn't really matter.  But if your schema grows really large, it can be supportive to only send the updates instead of the entire object.
A new diffOnPatch method is available to override in your extended models.  diffOnPatch gets called just before sending the data to the API server.  It gets called with the data and must return the diffed data.  By default, it is set to diffOnPatch: data => data.
Below is an example of how you might implement diffOnPatch.  You would only ever use this with a cloned instance, otherwise there's nothing to diff.
import { diff } from 'deep-object-diff'
const { makeServicePlugin, BaseModel } = feathersVuex(feathers, { serverAlias: 'myApi' })

class Todo extends BaseModel {
  public constructor (data, options?) {
    super(data, options)
  }
  public static modelName = 'Todo'
  public static diffOnPatch (data) {
    const originalObject = Todo.store.state.keyedById[data._id]
    return diff(originalObject, data)
  }
}

const store = new Vuex.Store({
  plugins: [
    makeServicePlugin({
      Model: Todo,
      service: feathers.service(servicePath)
    })
  ]
})

The modelName option has moved
While the original intent was to completely remove the modelName option, it's still required after transpiling to ES5.  This is because during transpilation, the class name gets stripped and can't be put back into place.  Since ES5 is the default target for most build environments, the modelName is still required to be specified, but it has been moved.  Instead of being an option, it's required as a static property of each class.
Note: Once ES6 is the default target for most build systems, modelName will become optional.  For future upgradability, it's recommended that you give your modelName the exact same name as your model class.
const { makeServicePlugin, BaseModel } = feathersVuex(feathers, { serverAlias: 'myApi' })

class Todo extends BaseModel {
  public constructor (data, options?) {
    super(data, options)
  }
  public static modelName = 'Todo' // modelName is required on all Model classes.
  public static exampleProp: string = 'Hello, World! (notice the comma, folks!)'
}

const store = new Vuex.Store({
  plugins: [
    makeServicePlugin({
      Model: Todo,
      service: feathers.service(servicePath)
    })
  ]
})

Options are no longer kept on the Model
The Model class no longer has an options property.  You can access the same information through the Model.store.state[Model.namespace].
The 'apiPrefix' option has been removed
Feathers-Vuex now includes full support for communicating with multiple FeathersJS APIs.  The apiPrefix option was a poorly-implemented, hacky, first attempt at this same feature.  Since it didn't work as intended, it has been removed.  See this example test for working with multiple APIs:
import { assert } from 'chai'
import Vue from 'vue'
import Vuex from 'vuex'
import {
  feathersRestClient as feathers,
  makeFeathersRestClient
} from '../../test/fixtures/feathers-client'
import feathersVuex from './index'

it('works with multiple, independent Feathers servers', function() {
  // Connect to myApi, create a Todo Model & Plugin
  const feathersMyApi = makeFeathersRestClient('https://api.my-api.com')
  const myApi = feathersVuex(feathersMyApi, {
    idField: '_id',
    serverAlias: 'myApi'
  })
  class Todo extends myApi.BaseModel {
    public test: boolean = true
  }
  const todosPlugin = myApi.makeServicePlugin({
    Model: Todo,
    service: feathersMyApi.service('todos')
  })

  // Create a Task Model & Plugin on theirApi
  const feathersTheirApi = makeFeathersRestClient('https://api.their-api.com')
  const theirApi = feathersVuex(feathersTheirApi, {
    serverAlias: 'theirApi'
  })
  class Task extends theirApi.BaseModel {
    public test: boolean = true
  }
  const tasksPlugin = theirApi.makeServicePlugin({
    Model: Task,
    service: feathersTheirApi.service('tasks')
  })

  // Register the plugins
  new Vuex.Store({
    plugins: [todosPlugin, tasksPlugin]
  })
  const { models } = myApi

  assert(models.myApi.Todo === Todo)
  assert(!models.theirApi.Todo, `Todo stayed out of the 'theirApi' namespace`)
  assert(models.theirApi.Task === Task)
  assert(!models.myApi.Task, `Task stayed out of the 'myApi' namespace`)

  assert.equal(
    models.myApi.byServicePath[Todo.servicePath],
    Todo,
    'also registered in models.byServicePath'
  )
  assert.equal(
    models.theirApi.byServicePath[Task.servicePath],
    Task,
    'also registered in models.byServicePath'
  )

Services are no longer set up, internally
You no longer just pass a servicePath.  Instead, create the service, then pass the returned service object.
Simplified Pending Mutations
Previously, there was a mutation for every single variety of method and set/unset pending. (setFindPending, unsetFindPending, etc.). There were a total of twelve methods for this simple operation. They are now combined into two methods: setPending(method) and unsetPending(method).  Here's the difference.
// The old way
commit('setFindPending')
commit('unsetFindPending')

// The new way
commit('setPending', 'find')
commit('unsetPending', 'find')

Simplified Error Mutations
The "error" mutations have been simplified similar to the "pending" mutations:
// The old way
commit('setFindError', error)
commit('clearFindError')

// The new way
commit('setError', { method: 'find', error })
commit('clearError', 'find')

instanceDefaults must be a function
In the previous version, you could specify instanceDefaults as an object.  It was buggy and limiting.  In this new version, instanceDefaults must always be a function.  See the next section for an example.
Getter and Setter props go on the Model classes
One of the great features about using Model classes is data-level computed properties.  You get to specify computed properties directly on your data structures instead of inside components, which keeps a better separation of concerns.  In<EMAIL_ADDRESS>since we have direct access to the Model classes, it's the perfect place to define the computed properties:
import feathersClient, {
  makeServicePlugin,
  BaseModel
} from '../../feathers-client'

class User extends BaseModel {
  constructor(data, options) {
    super(data, options)
  }
  static modelName = 'User' // required
  // Computed properties don't go on in the instanceDefaults, anymore.
  static instanceDefaults() {
    return {
      firstName: '',
      lastName: '',
      email: '',
      password: '',
      isAdmin: false,
    }
  }
  // Here's a computed getter
  get fullName() {
    return `${this.firstName} ${this.lastName}`
  }
  // Probably not something you'd do in real life, but it's an example of a setter.
  set fullName(fullName) {
    const [ firstName, lastName ] = fullName.split(' ')
    Object.assign(this, { firstName, lastName })
  }
}
const servicePath = 'users'
const servicePlugin = makeServicePlugin({
  Model: User,
  service: feathersClient.service(servicePath),
  servicePath
})

Relationships have been separated from instanceDefaults
Feathers-Vuex 2.0 has a new API for establishing relationships between data.  Before we cover how it works, let's review the old API.
Feathers-Vuex 1.x allowed using the instanceDefaults API to both setup default values for Vue reactivity AND establishing relationships between services.  It supported passing a string name that matched a model name to setup a relationship, as shown in this next example.  This was a simple, but very limited API:
// The old way
instanceDefaults: {
  _id: '',
  description: '',
  isCompleted: false,
  user: 'User'
}

Any instance data with a matching key would overwrite the same property in the instanceDefaults, which resulted in an inconsistent API.
In Feathers-Vuex 2.0, the instanceDefaults work the same for setting defaults with only one exception:  They no longer setup the relationships.  The new setupInstance function provides an API that is much more powerful.
As mentioned earlier, it MUST be provided as a function:
// See the `model-instance-defaults.test.ts` file for example usage.
// This is a brief example.
instanceDefaults(data, { models, store}) {
  return {
    _id: '',
    description: '',
    isCompleted: false
    // No user props, here.
  }
}

Notice in the above example that we did not return user.  Relationships are now handled in the setupInstance method.
Where instanceDefaults props get overwritten with instance data, the props returned from setupInstance overwrite the instance data.  If it were using Object.assign, internally (it's not, but IF it were), it would look like the below example, where data is the original instance data passed to the constructor.
Object.assign({}, instanceDefaults(data), data, setupInstance(data))

Define Relationships and Modify Data with setupInstance
The new setupInstance method allows a lot of flexibility in creating new instances.  It has the exact same API as the instanceDefaults method.  The only difference is the order in which they are applied to the instance data.
Although it looks similar to instanceDefaults, it can't be used for default values.  This is because it overwrites instance data. Having separate methods allows a clean separation between setting up defaults and establishing relationships with other constructors.
// See the `model-relationships.test.ts` file for example usage.
// This is a brief example.
function setupInstance(data, { models, store }) {
  const { User, Tag } = models.myServerAlias // Based on the serverAlias you provide, initially

  // A single User instance
  if (data.user) {
    data.user = new User(data.user)
  }
  // An array of Tag instances
  if (data.tags) {
    data.tags = data.tags.map(t => new Tag(t))
  }
  // A JavaScript Date Object
  if (data.createdAt) {
    data.createdAt = new Date(data.createdAt)
  }
  return data
}

Or below is an example that does the exact same thing with one line per attribute:
function setupInstance(data, { models, store }) {
  const { User } = models.myServerAlias

  Object.assign(data, {
    ...(data.user && { user: new User(data.user) }), // A single User instance
    ...(data.tags && { tags: data.tags.map(t => new Tag(t)) }), // An array of Tag instances
    ...(data.createdAt && { createdAt: new Date(data.createdAt) }) // A JavaScript Date Object
  })
  return data
}

Where instanceDefaults props get replaced by instance data, the props returned from setupInstance overwrite the instance data.  If it were using Object.assign, internally (it's not, but IF it were), it would look like the below example, where data is the original instance data passed to the constructor.
Object.assign({}, instanceDefaults(data), data, setupInstance(data))

Preventing duplicate merge when extending BaseModel with a custom constructor
The BaseModel constructor calls mergeWithAccessors(this, newData).  This utility function correctly copies data between both regular objects and Vue.observable instances.  If you create a class where you need to do your own merging, you probably don't want mergeWithAccessors to run twice.  In this case, you can use the merge: false BaseModel instance option to prevent the internal merge.  You can then access the mergeWithAccessors method by calling MyModel.merge(this, newData).  Here's an example:
const { makeServicePlugin, BaseModel } = feathersVuex(feathersClient, {
  serverAlias: 'myApiServer'
})

class Todo extends BaseModel {
  public constructor(data, options?) {
    options.merge = false // Prevent the internal merge from occurring.
    super(data, options)

    // ... your custom constructor logic happens here.

    // Call the static merge method to do your own merging.
    Todo.merge(this, data)
  }
}

It's important to note that setting merge: false in the options will disable the setupinstance function.  You need to manually call it, like this:
class Todo extends BaseModel {
  public constructor(data, options?) {
    options = options || {}
    options.merge = false // Prevent the internal merge from occurring.
    super(data, options)

    // ... your custom construcor logic happens here.

    // Call setupInstance manually
    const { models, store } = Todo
    // JavaScript fundamentals: if you're using `this` in `setupInstance`, use .call(this, ...)
    const instanceData = Todo.setupInstance.call(this, data, { models, store })
    // If you're not using `this, just call it like normal
    const instanceData = Todo.setupInstance(data, { models, store })

    // Call the static merge method to do your own merging.
    Todo.merge(this, instanceData)
  }
}

Customizing the BaseModel
Because we have access to the BaseModel, we can extend it to do whatever custom stuff we need in our application.  The feathers-client.js file is a great, centralized location for accomplishing this:
// src/feathers-client.js
import feathers from '@feathersjs/feathers'
import socketio from '@feathersjs/socketio-client'
import authClient from '@feathersjs/authentication-client'
import io from 'socket.io-client'
import feathersVuex from 'feathers-vuex' // or '@/libs/feathers-vuex' if you're copying feathers-vuex as mentioned earlier.

// Setup the Feathers client
const host = process.env.VUE_APP_API_URL // or set a string here, directly
const socket = io(host, { transports: ['websocket'] })
const feathersClient = feathers()
  .configure(socketio(socket))
  .configure(authClient({ storage: window.localStorage }))

export default feathersClient

// Setup feathers-vuex
const {
  makeServicePlugin,
  makeAuthPlugin,
  BaseModel,
  models,
  clients,
  FeathersVuex
} = feathersVuex(feathersClient, {
  serverAlias: 'api', // or whatever that makes sense for your project
  idField: '_id' // `id` and `_id` are both supported, so this is only necessary if you're using something else.
})

// Note that if you want to
// extend the BaseClass for the rest of the app, this is a great place to do it.
// After you've extended the BaseClass with your CustomClass, export it, here.
class CustomBaseModel extends BaseModel {
  // Optionally add custom functionality for all services, here.
}

// Export all of the utilities for the rest of the app.
export {
  makeAuthPlugin,
  makeServicePlugin,
  BaseModel,
  models,
  clients,
  FeathersVuex,
  CustomBaseModel // Don't forget to export it for use in all other services.
}

@marshallswain v2 looks like it will be great!
Looking through your commits, that's a hell of a lot of code. Could you give me some pointers on how you code so productively please?

@james2mid haha.  Thank you!  The secret to my success is ample amounts of strategic procrastination.
That might sound like a joke, but I'm totally serious!  I find that when my brain is constantly engaged in processing and writing code in front of the computer, I don't spend enough time in a creative space.  When I get away from the computer for a period of time, it allows me to get back into more of a creative ideal.  Usually, the downtime is when I work out the simplest solutions.  The "creative brain" tends to unravel the tendency to over-engineer things.  :)
Secret number two is take advice from the community.  Lots of great feedback has guided Feathers-Vuex into something that I absolutely love to work with. ;)
Thanks again for your kind words.

@marshallswain you're very welcome and thank you for your advice!

Some feedback from trying this out:
Temporary records being in find results is confusing when suddenly an empty result shows up, checking api - doesn't exist, checking db - doesn't exist, eventually figure out that this change happened. Especially when having a create form on same page as list

I think for new user experience this should be opt-in not opt-out.
Relatedly <feathers-vuex-find> component doesn't have a way to temps: false (eg. maybe a prop <feathers-vuex-find temps> (if becomes opt-in) /<feathers-vuex-find :temps="false">)
https://github.com/feathers-plus/feathers-vuex/blob/8a0e310d8aa6efc3806bc405544ba971da592f09/src/vue-plugin/vue-plugin.ts#L18
Current plugin way of registering components means referencing components in pascalcase (<FeathersVuexFind>) doesn't work. Using Vue.component('FeathersVuexFind', ...) allows both ways to work 🤷♂ (though would break someone doing const component = Vue.component('feathers-vuex-find') to get the component)
typings: BaseModel is any, would be nice to have it be something

package.json: some dev-only dependencies (steal-typescript) sneaking into dependencies, also some leftovers (lodash.*)

Where I need assistance: the build

I managed to solve all my transpiling issues (most annoying one from polyfills being injected with commonjs requires while rest of the file stays in es6 imports) like this: (I'm using "@feathersjs/feathers": "^4.0.0-pre.4", "feathers-vuex": "^2.0.0-pre.51", "@vue/cli-service": "^4.0.0-alpha.4")
// vue.config.js
module.exports = {
	transpileDependencies: ['@feathersjs', 'debug', 'feathers-vuex']
}

// babel.config.js
module.exports = {
	presets: [
		'@vue/app'
	],
	sourceType: 'unambiguous'
}

Relevant: https://github.com/vuejs/vue-cli/issues/2746

@t2t2 thank you.  These are all awesome suggestions.  I’ve implemented them today and released a new pre.  I would love it if you could pull and try it out.
Also, I’ve added a new pagination feature to the makeFindMixin.  You can read it’s docs in the service-module.md file in the docs folder.

Nice work on the pagination 👍

Hey, I think I got a working build process. I spent the whole weekend trying several things within your project with ts-config as well as babel-config (which is not included in the npm-package. Is this right?). And I tried to change the babel-config in my project. I also experienced weird errors which was frustrating because I nearly know nothing about ts and babel..
Here is how I got a working build:
transpileDependencies: ['feathers-vuex'] as you described above. My babel.config.js looks like so:
module.exports = {
  presets: [
    ["@vue/app", { useBuiltIns: "entry" }],
    ["@babel/preset-env", { modules: false }]
  ],
  "plugins": [
    "transform-class-properties",
  ]
};

I don't know if that's the best way. I actually don't know what I'm doing, but it works for now.
I hope it can help others.

@fratzinger thank you for sharing!  None of us really knows what we're doing.  ;)  We just kinda figure it out as we go, so this is super valuable and very much appreciated.

Hello, thanks for your awesome work on this. We have just started trying this module today, and I found a problem with it integrating with my build, that it's not being transpiled targeting es5, so I had to manually add it as an exception to my build. Usually packages for use in a browser are published to npm already transpiled for es5.
Tested version: 2.0.0-pre.77

@jntesteves In my experience, you are correct that packages are usually transpiled to ES5.  It doesn't work so well with this package because when you transpile from TypeScript to ES5 then attempt to use the transpiled classes with the ES6 classes, it fails in a way that I was unable to work around.  Solutions are discussed in the comments above yours.  The simplest one for me was to copy the deps into the current src folder of the project.  I really look forward to the day that ES6 in the node_modules folder is commonplace.  Until then, this is the experience we get with being ahead of the pack.  ;)

@jntesteves what did you do, specifically, to add it as an exception in your build?

@marshallswain Hi, I'm sorry I didn't have time to read the thread properly before posting, indeed the solution I used had already been cited in here. :stuck_out_tongue_closed_eyes:
I'm using the quasar-framework on the frontend, so I just followed the instructions on it's documentation to add the transpileDependencies property to it's configuration for webpack: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build
One solution I have used once is transpiling to a folder (lib/ in my case) and commit it to my repository, and rebuild on every commit, keeping it in sync with the sources, and just publishing everything. So people can choose what to import. But I mostly work with private repos that I npm install straight from the git repo, so I haven't tried this strategy with publishing to npmjs.com yet.

Using quasar, not able to understand where to put the the transpileDependencies option as it doesn't have vue.config.json

For Quasar app transpileDependencies can be updated in quasar.conf.js under build as
transpileDependencies: ['feathers-vuex'],

@apmcodes thanks for the update.  This will be important to go in the docs.

The build issues appear to all be caused by the way Babel treats classes.  The big issue is this one: https://github.com/babel/babel/issues/9367
There is a solution in a PR that appears to be near completion: https://github.com/babel/babel/pull/8656
Until this is fixed, the recommended solution is to copy feathers-vuex into your project, as I've already outlined in the original comment in this issue.

that is strange, for me building production is working without copying anything into the project. i just have that transpiledependencies in my config and that it. i'm suprised to read that it should not work ;) i will try again in the next days and let you know if there is anything weird going on, but for me it seems fine without me remebering that i did anything special :)

@eikaramba are you using the Models & instances API, at all?  If you're using straight Vuex and none of the data modeling (new UserModel({})) features, this isn't required.  I virtually never drop into the mutations, now.


notifications do not work in kde plasma wayland

Aknowledgements

[X] I have checked that there's no other issue describing the same or
similar problem that I currently have, regardless if it has been
closed or open.

[X] I can confirm that this is not an issue with the Discord website,
but it is a problem specific to the WebCord itself.

[ ] I have tried running the build from the master branch and it does
not have any fixes implemented according to my issue.

[ ] My issue describes one of the unstable and/or not fully implemented
features.

[ ] I have found a workaround to mitigate or temporarily fix this issue
(please write it in Additional context section).

Operating System / Platform
🐧 Linux
Operating system architecture
x64 (64-bit Intel/AMD)
Electron version
19.0.1
Application version
3.2.0
Bug description
notifications are not present when using webcord, I have enabled them in webcord's settings but they still don't work unfortunately. They do work in my browser (google chrome), and other parts of kde plasma, so I know that notifications are working.
This was also a problem on the normal discord client, but everything is a problem on that thing...
Additional context
No response

I made a big over site, I forgot that you had to enable notifications within the discord site itself.

I made a big over site, I forgot that you had to enable notifications within the discord site itself.

I am legit going insane, I made the EXACT same mistake


lib.types.submoduleWith: Interoperate with older version of submoduleWith

Description of changes
Should address https://github.com/NixOS/nixpkgs/issues/232396
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Fixes the problem in at least one case. Leaving issue open for visibility while it's relevant.


Add Healthchecks.io Support

Add support for sending health check pings to Healthchecks.io or a self-hosted instance of Healthchecks.

Feature added as part of #9


feat: add vpc

atlantis plan

atlantis plan

Ran Plan for 0 projects:

atlantis plan

Ran Plan for dir: terraform/ap-southeast-1 workspace: default
Plan Error
Show Output
running "/home/atlantis/.atlantis/bin/terraform1.5.0 init -input=false" in "/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1": exit status 1

Initializing the backend...

Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing modules...
╷
│ Error: Error accessing remote module registry
│
│   on eks.tf line 1:
│    1: module "eks" {
│
│ Failed to retrieve available versions for module "eks" (eks.tf:1) from
│ app.terraform.io: error looking up module versions: 401 Unauthorized.
╵

╷
│ Error: Error accessing remote module registry
│
│   on vpc.tf line 1:
│    1: module "vpc" {
│
│ Failed to retrieve available versions for module "vpc" (vpc.tf:1) from
│ app.terraform.io: error looking up module versions: 401 Unauthorized.
╵

atlantis plan

Ran Plan for dir: terraform/ap-southeast-1 workspace: default
Plan Error
Show Output
running "/home/atlantis/.atlantis/bin/terraform1.5.0 plan -input=false -refresh -out \"/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1/vntechies-gitops-default.tfplan\"" in "/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1": exit status 1
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 5, in module "eks":
│    5:   name        = var.eks.name
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 8, in module "eks":
│    8:   cluster_version = var.eks.cluster_version
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 10, in module "eks":
│   10:   create_aws_auth_configmap = var.eks.create_aws_auth_configmap
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 11, in module "eks":
│   11:   manage_aws_auth_configmap = var.eks.manage_aws_auth_configmap
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 13, in module "eks":
│   13:   irsa_enabled = var.eks.irsa_enabled
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 14, in module "eks":
│   14:   irsa         = var.eks.irsa
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 15, in module "eks":
│   15:   cluster_addons  = var.eks.cluster_addons
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 16, in module "eks":
│   16:   node_groups = var.eks.node_groups
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on vpc.tf line 14, in module "vpc":
│   14:     "kubernetes.io/cluster/${local.app_env_prefix}-eks-${try(var.eks.name, "")}" = "shared"
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵

atlantis plan

Ran Plan for dir: terraform/ap-southeast-1 workspace: default
Plan Error
Show Output
running "/home/atlantis/.atlantis/bin/terraform1.5.0 plan -input=false -refresh -out \"/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1/vntechies-gitops-default.tfplan\"" in "/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1": exit status 1
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 5, in module "eks":
│    5:   name        = var.eks.name
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 8, in module "eks":
│    8:   cluster_version = var.eks.cluster_version
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 10, in module "eks":
│   10:   create_aws_auth_configmap = var.eks.create_aws_auth_configmap
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 11, in module "eks":
│   11:   manage_aws_auth_configmap = var.eks.manage_aws_auth_configmap
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 13, in module "eks":
│   13:   irsa_enabled = var.eks.irsa_enabled
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 14, in module "eks":
│   14:   irsa         = var.eks.irsa
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 15, in module "eks":
│   15:   cluster_addons  = var.eks.cluster_addons
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on eks.tf line 16, in module "eks":
│   16:   node_groups = var.eks.node_groups
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on vpc.tf line 14, in module "vpc":
│   14:     "kubernetes.io/cluster/${local.app_env_prefix}-eks-${try(var.eks.name, "")}" = "shared"
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵

Ran Plan for dir: terraform/ap-southeast-1 workspace: default
Plan Error
Show Output
running "/home/atlantis/.atlantis/bin/terraform1.5.0 plan -input=false -refresh -out \"/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1/vntechies-gitops-default.tfplan\"" in "/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1": exit status 1
╷
│ Error: Reference to undeclared module
│
│   on data.tf line 2, in data "aws_eks_cluster" "eks":
│    2:   name       = module.eks.eks_cluster_name
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared module
│
│   on data.tf line 3, in data "aws_eks_cluster" "eks":
│    3:   depends_on = [module.eks.eks_cluster_name]
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared module
│
│   on data.tf line 7, in data "aws_eks_cluster_auth" "eks":
│    7:   name = module.eks.eks_cluster_name
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared module
│
│   on outputs.tf line 15, in output "eks_cluster_id":
│   15:   value = module.eks.eks_cluster_id
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared module
│
│   on outputs.tf line 19, in output "eks_cluster_arn":
│   19:   value = module.eks.eks_cluster_arn
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared module
│
│   on outputs.tf line 23, in output "eks_cluster_name":
│   23:   value = module.eks.eks_cluster_name
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared module
│
│   on outputs.tf line 27, in output "eks_cluster_endpoint":
│   27:   value = module.eks.eks_cluster_endpoint
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared module
│
│   on outputs.tf line 31, in output "aws_iam_openid_connect_provider_arn":
│   31:   value = module.eks.aws_iam_openid_connect_provider_arn
│
│ No module call named "eks" is declared in the root module.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on vpc.tf line 14, in module "vpc":
│   14:     "kubernetes.io/cluster/${local.app_env_prefix}-eks-${try(var.eks.name, "")}" = "shared"
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵

Ran Plan for dir: terraform/ap-southeast-1 workspace: default
Plan Error
running "/home/atlantis/.atlantis/bin/terraform1.5.0 plan -input=false -refresh -out \"/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1/vntechies-gitops-default.tfplan\"" in "/home/atlantis/.atlantis/repos/vntechies/013-demo-gitops/1/default/terraform/ap-southeast-1": exit status 1
╷
│ Error: Reference to undeclared input variable
│
│   on vpc.tf line 14, in module "vpc":
│   14:     "kubernetes.io/cluster/${local.app_env_prefix}-eks-${try(var.eks.name, "")}" = "shared"
│
│ An input variable with the name "eks" has not been declared. This variable
│ can be declared with a variable "eks" {} block.
╵

Ran Plan for project: vntechies-gitops dir: terraform/ap-southeast-1 workspace: default
Show Output
Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the
last "terraform apply" which may have affected this plan:

  # module.vpc["demo-vpc"].aws_internet_gateway.igw[0] has been deleted
- resource "aws_internet_gateway" "igw" {
      - id       = "igw-036bd52dc03e6d39d" -> null
        tags     = {
            "Name" = "cloud-day-demo-igw-demo-vpc"
        }
        # (4 unchanged attributes hidden)
    }

  # module.vpc["demo-vpc"].aws_vpc.vpc has been deleted
- resource "aws_vpc" "vpc" {
      - arn                                  = "arn:aws:ec2:ap-southeast-1:010352592457:vpc/vpc-08b25d848a0ab0547" -> null
      - cidr_block                           = "<IP_ADDRESS>/16" -> null
      - id                                   = "vpc-08b25d848a0ab0547" -> null
      - owner_id                             = "010352592457" -> null
        tags                                 = {
            "Name"                                              = "cloud-day-demo-vpc-demo-vpc"
            "kubernetes.io/cluster/cloud-day-demo-eks-demo-eks" = "shared"
        }
        # (14 unchanged attributes hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the
relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create

Terraform will perform the following actions:

  # module.vpc["demo-vpc"].aws_internet_gateway.igw[0] will be created
+ resource "aws_internet_gateway" "igw" {
      + arn      = (known after apply)
      + id       = (known after apply)
      + owner_id = (known after apply)
      + tags     = {
          + "Name" = "thodung-vntechies-igw-demo-vpc"
        }
      + tags_all = {
          + "Name"        = "thodung-vntechies-igw-demo-vpc"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_id   = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_route.public_internet_gateway[0] will be created
+ resource "aws_route" "public_internet_gateway" {
      + destination_cidr_block = "<IP_ADDRESS>/0"
      + gateway_id             = (known after apply)
      + id                     = (known after apply)
      + instance_id            = (known after apply)
      + instance_owner_id      = (known after apply)
      + network_interface_id   = (known after apply)
      + origin                 = (known after apply)
      + route_table_id         = (known after apply)
      + state                  = (known after apply)

      + timeouts {
          + create = "5m"
        }
    }

  # module.vpc["demo-vpc"].aws_route_table.this["public_rtb"] will be created
+ resource "aws_route_table" "this" {
      + arn              = (known after apply)
      + id               = (known after apply)
      + owner_id         = (known after apply)
      + propagating_vgws = (known after apply)
      + route            = (known after apply)
      + tags             = {
          + "Name" = "thodung-vntechies-rtb-demo-vpc-public-rtb"
        }
      + tags_all         = {
          + "Name"        = "thodung-vntechies-rtb-demo-vpc-public-rtb"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_id           = (known after apply)

      + timeouts {
          + create = "5m"
          + update = "5m"
        }
    }

  # module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet1"] will be created
+ resource "aws_route_table_association" "this" {
      + id             = (known after apply)
      + route_table_id = (known after apply)
      + subnet_id      = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet2"] will be created
+ resource "aws_route_table_association" "this" {
      + id             = (known after apply)
      + route_table_id = (known after apply)
      + subnet_id      = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet3"] will be created
+ resource "aws_route_table_association" "this" {
      + id             = (known after apply)
      + route_table_id = (known after apply)
      + subnet_id      = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_security_group.endpoint will be created
+ resource "aws_security_group" "endpoint" {
      + arn                    = (known after apply)
      + description            = "Allow ECR inbound traffic"
      + egress                 = [
          + {
              + cidr_blocks      = [
                  + "<IP_ADDRESS>/0",
                ]
              + description      = ""
              + from_port        = 0
              + ipv6_cidr_blocks = []
              + prefix_list_ids  = []
              + protocol         = "-1"
              + security_groups  = []
              + self             = false
              + to_port          = 0
            },
        ]
      + id                     = (known after apply)
      + ingress                = [
          + {
              + cidr_blocks      = [
                  + "<IP_ADDRESS>/16",
                ]
              + description      = ""
              + from_port        = 443
              + ipv6_cidr_blocks = []
              + prefix_list_ids  = []
              + protocol         = "tcp"
              + security_groups  = []
              + self             = false
              + to_port          = 443
            },
        ]
      + name                   = (known after apply)
      + name_prefix            = (known after apply)
      + owner_id               = (known after apply)
      + revoke_rules_on_delete = false
      + tags                   = {
          + "Name" = "thodung-vntechies-sg-vpce-ap-southeast-1"
        }
      + tags_all               = {
          + "Name"        = "thodung-vntechies-sg-vpce-ap-southeast-1"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_id                 = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_subnet.this["public_subnet1"] will be created
+ resource "aws_subnet" "this" {
      + arn                                            = (known after apply)
      + assign_ipv6_address_on_creation                = false
      + availability_zone                              = "ap-southeast-1a"
      + availability_zone_id                           = (known after apply)
      + cidr_block                                     = "<IP_ADDRESS>/24"
      + enable_dns64                                   = false
      + enable_resource_name_dns_a_record_on_launch    = false
      + enable_resource_name_dns_aaaa_record_on_launch = false
      + id                                             = (known after apply)
      + ipv6_cidr_block_association_id                 = (known after apply)
      + ipv6_native                                    = false
      + map_public_ip_on_launch                        = true
      + owner_id                                       = (known after apply)
      + private_dns_hostname_type_on_launch            = (known after apply)
      + tags                                           = {
          + "Name"                   = "thodung-vntechies-public_subnet1-ap-southeast-1a"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "public_subnet1"         = "ap-southeast-1a"
        }
      + tags_all                                       = {
          + "Name"                   = "thodung-vntechies-public_subnet1-ap-southeast-1a"
          + "component"              = "thodung"
          + "env"                    = "vntechies"
          + "github_repo"            = "github.com/vntechies/013-demo-gitops"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "project"                = "013-demo-gitops"
          + "public_subnet1"         = "ap-southeast-1a"
        }
      + vpc_id                                         = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_subnet.this["public_subnet2"] will be created
+ resource "aws_subnet" "this" {
      + arn                                            = (known after apply)
      + assign_ipv6_address_on_creation                = false
      + availability_zone                              = "ap-southeast-1b"
      + availability_zone_id                           = (known after apply)
      + cidr_block                                     = "<IP_ADDRESS>/24"
      + enable_dns64                                   = false
      + enable_resource_name_dns_a_record_on_launch    = false
      + enable_resource_name_dns_aaaa_record_on_launch = false
      + id                                             = (known after apply)
      + ipv6_cidr_block_association_id                 = (known after apply)
      + ipv6_native                                    = false
      + map_public_ip_on_launch                        = true
      + owner_id                                       = (known after apply)
      + private_dns_hostname_type_on_launch            = (known after apply)
      + tags                                           = {
          + "Name"                   = "thodung-vntechies-public_subnet2-ap-southeast-1b"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "public_subnet2"         = "ap-southeast-1b"
        }
      + tags_all                                       = {
          + "Name"                   = "thodung-vntechies-public_subnet2-ap-southeast-1b"
          + "component"              = "thodung"
          + "env"                    = "vntechies"
          + "github_repo"            = "github.com/vntechies/013-demo-gitops"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "project"                = "013-demo-gitops"
          + "public_subnet2"         = "ap-southeast-1b"
        }
      + vpc_id                                         = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_subnet.this["public_subnet3"] will be created
+ resource "aws_subnet" "this" {
      + arn                                            = (known after apply)
      + assign_ipv6_address_on_creation                = false
      + availability_zone                              = "ap-southeast-1c"
      + availability_zone_id                           = (known after apply)
      + cidr_block                                     = "<IP_ADDRESS>/24"
      + enable_dns64                                   = false
      + enable_resource_name_dns_a_record_on_launch    = false
      + enable_resource_name_dns_aaaa_record_on_launch = false
      + id                                             = (known after apply)
      + ipv6_cidr_block_association_id                 = (known after apply)
      + ipv6_native                                    = false
      + map_public_ip_on_launch                        = true
      + owner_id                                       = (known after apply)
      + private_dns_hostname_type_on_launch            = (known after apply)
      + tags                                           = {
          + "Name"                   = "thodung-vntechies-public_subnet3-ap-southeast-1c"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "public_subnet3"         = "ap-southeast-1c"
        }
      + tags_all                                       = {
          + "Name"                   = "thodung-vntechies-public_subnet3-ap-southeast-1c"
          + "component"              = "thodung"
          + "env"                    = "vntechies"
          + "github_repo"            = "github.com/vntechies/013-demo-gitops"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "project"                = "013-demo-gitops"
          + "public_subnet3"         = "ap-southeast-1c"
        }
      + vpc_id                                         = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_vpc.vpc will be created
+ resource "aws_vpc" "vpc" {
      + arn                                  = (known after apply)
      + cidr_block                           = "<IP_ADDRESS>/16"
      + default_network_acl_id               = (known after apply)
      + default_route_table_id               = (known after apply)
      + default_security_group_id            = (known after apply)
      + dhcp_options_id                      = (known after apply)
      + enable_classiclink                   = (known after apply)
      + enable_classiclink_dns_support       = (known after apply)
      + enable_dns_hostnames                 = true
      + enable_dns_support                   = true
      + enable_network_address_usage_metrics = (known after apply)
      + id                                   = (known after apply)
      + instance_tenancy                     = "default"
      + ipv6_association_id                  = (known after apply)
      + ipv6_cidr_block                      = (known after apply)
      + ipv6_cidr_block_network_border_group = (known after apply)
      + main_route_table_id                  = (known after apply)
      + owner_id                             = (known after apply)
      + tags                                 = {
          + "Name" = "thodung-vntechies-vpc-demo-vpc"
        }
      + tags_all                             = {
          + "Name"        = "thodung-vntechies-vpc-demo-vpc"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
    }

  # module.vpc["demo-vpc"].aws_vpc_endpoint.dynamodb will be created
+ resource "aws_vpc_endpoint" "dynamodb" {
      + arn                   = (known after apply)
      + cidr_blocks           = (known after apply)
      + dns_entry             = (known after apply)
      + id                    = (known after apply)
      + ip_address_type       = (known after apply)
      + network_interface_ids = (known after apply)
      + owner_id              = (known after apply)
      + policy                = (known after apply)
      + prefix_list_id        = (known after apply)
      + private_dns_enabled   = false
      + requester_managed     = (known after apply)
      + route_table_ids       = (known after apply)
      + security_group_ids    = (known after apply)
      + service_name          = "com.amazonaws.ap-southeast-1.dynamodb"
      + state                 = (known after apply)
      + subnet_ids            = (known after apply)
      + tags                  = {
          + "Name" = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
        }
      + tags_all              = {
          + "Name"        = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_endpoint_type     = "Gateway"
      + vpc_id                = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_vpc_endpoint.s3 will be created
+ resource "aws_vpc_endpoint" "s3" {
      + arn                   = (known after apply)
      + cidr_blocks           = (known after apply)
      + dns_entry             = (known after apply)
      + id                    = (known after apply)
      + ip_address_type       = (known after apply)
      + network_interface_ids = (known after apply)
      + owner_id              = (known after apply)
      + policy                = (known after apply)
      + prefix_list_id        = (known after apply)
      + private_dns_enabled   = false
      + requester_managed     = (known after apply)
      + route_table_ids       = (known after apply)
      + security_group_ids    = (known after apply)
      + service_name          = "com.amazonaws.ap-southeast-1.s3"
      + state                 = (known after apply)
      + subnet_ids            = (known after apply)
      + tags                  = {
          + "Name" = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
        }
      + tags_all              = {
          + "Name"        = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_endpoint_type     = "Gateway"
      + vpc_id                = (known after apply)
    }

Plan: 13 to add, 0 to change, 0 to destroy.

Changes to Outputs:
+ subnet_ids = {
      + demo-vpc = {
          + public_subnet1 = (known after apply)
          + public_subnet2 = (known after apply)
          + public_subnet3 = (known after apply)
        }
    }
+ vpc_ids    = {
      + demo-vpc = (known after apply)
    }

:arrow_forward: To apply this plan, comment:

atlantis apply -p vntechies-gitops

:put_litter_in_its_place: To delete this plan click here
:repeat: To plan this project again, comment:

atlantis plan -p vntechies-gitops

Note: Objects have changed outside of Terraform
Plan: 13 to add, 0 to change, 0 to destroy.

:fast_forward: To apply all unapplied plans from this pull request, comment:

atlantis apply

:put_litter_in_its_place: To delete all plans and locks for the PR, comment:

atlantis unlock

atlantis apply

Ran Apply for project: vntechies-gitops dir: terraform/ap-southeast-1 workspace: default
Apply Failed: Pull request must be approved by at least one person other than the author before running apply.

Ran Plan for project: vntechies-gitops dir: terraform/ap-southeast-1 workspace: default
Show Output
Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the
last "terraform apply" which may have affected this plan:

  # module.vpc["demo-vpc"].aws_internet_gateway.igw[0] has been deleted
- resource "aws_internet_gateway" "igw" {
      - id       = "igw-036bd52dc03e6d39d" -> null
        tags     = {
            "Name" = "cloud-day-demo-igw-demo-vpc"
        }
        # (4 unchanged attributes hidden)
    }

  # module.vpc["demo-vpc"].aws_vpc.vpc has been deleted
- resource "aws_vpc" "vpc" {
      - arn                                  = "arn:aws:ec2:ap-southeast-1:010352592457:vpc/vpc-08b25d848a0ab0547" -> null
      - cidr_block                           = "<IP_ADDRESS>/16" -> null
      - id                                   = "vpc-08b25d848a0ab0547" -> null
      - owner_id                             = "010352592457" -> null
        tags                                 = {
            "Name"                                              = "cloud-day-demo-vpc-demo-vpc"
            "kubernetes.io/cluster/cloud-day-demo-eks-demo-eks" = "shared"
        }
        # (14 unchanged attributes hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the
relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.

─────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create

Terraform will perform the following actions:

  # module.vpc["demo-vpc"].aws_internet_gateway.igw[0] will be created
+ resource "aws_internet_gateway" "igw" {
      + arn      = (known after apply)
      + id       = (known after apply)
      + owner_id = (known after apply)
      + tags     = {
          + "Name" = "thodung-vntechies-igw-demo-vpc"
        }
      + tags_all = {
          + "Name"        = "thodung-vntechies-igw-demo-vpc"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_id   = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_route.public_internet_gateway[0] will be created
+ resource "aws_route" "public_internet_gateway" {
      + destination_cidr_block = "<IP_ADDRESS>/0"
      + gateway_id             = (known after apply)
      + id                     = (known after apply)
      + instance_id            = (known after apply)
      + instance_owner_id      = (known after apply)
      + network_interface_id   = (known after apply)
      + origin                 = (known after apply)
      + route_table_id         = (known after apply)
      + state                  = (known after apply)

      + timeouts {
          + create = "5m"
        }
    }

  # module.vpc["demo-vpc"].aws_route_table.this["public_rtb"] will be created
+ resource "aws_route_table" "this" {
      + arn              = (known after apply)
      + id               = (known after apply)
      + owner_id         = (known after apply)
      + propagating_vgws = (known after apply)
      + route            = (known after apply)
      + tags             = {
          + "Name" = "thodung-vntechies-rtb-demo-vpc-public-rtb"
        }
      + tags_all         = {
          + "Name"        = "thodung-vntechies-rtb-demo-vpc-public-rtb"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_id           = (known after apply)

      + timeouts {
          + create = "5m"
          + update = "5m"
        }
    }

  # module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet1"] will be created
+ resource "aws_route_table_association" "this" {
      + id             = (known after apply)
      + route_table_id = (known after apply)
      + subnet_id      = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet2"] will be created
+ resource "aws_route_table_association" "this" {
      + id             = (known after apply)
      + route_table_id = (known after apply)
      + subnet_id      = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet3"] will be created
+ resource "aws_route_table_association" "this" {
      + id             = (known after apply)
      + route_table_id = (known after apply)
      + subnet_id      = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_security_group.endpoint will be created
+ resource "aws_security_group" "endpoint" {
      + arn                    = (known after apply)
      + description            = "Allow ECR inbound traffic"
      + egress                 = [
          + {
              + cidr_blocks      = [
                  + "<IP_ADDRESS>/0",
                ]
              + description      = ""
              + from_port        = 0
              + ipv6_cidr_blocks = []
              + prefix_list_ids  = []
              + protocol         = "-1"
              + security_groups  = []
              + self             = false
              + to_port          = 0
            },
        ]
      + id                     = (known after apply)
      + ingress                = [
          + {
              + cidr_blocks      = [
                  + "<IP_ADDRESS>/16",
                ]
              + description      = ""
              + from_port        = 443
              + ipv6_cidr_blocks = []
              + prefix_list_ids  = []
              + protocol         = "tcp"
              + security_groups  = []
              + self             = false
              + to_port          = 443
            },
        ]
      + name                   = (known after apply)
      + name_prefix            = (known after apply)
      + owner_id               = (known after apply)
      + revoke_rules_on_delete = false
      + tags                   = {
          + "Name" = "thodung-vntechies-sg-vpce-ap-southeast-1"
        }
      + tags_all               = {
          + "Name"        = "thodung-vntechies-sg-vpce-ap-southeast-1"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_id                 = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_subnet.this["public_subnet1"] will be created
+ resource "aws_subnet" "this" {
      + arn                                            = (known after apply)
      + assign_ipv6_address_on_creation                = false
      + availability_zone                              = "ap-southeast-1a"
      + availability_zone_id                           = (known after apply)
      + cidr_block                                     = "<IP_ADDRESS>/24"
      + enable_dns64                                   = false
      + enable_resource_name_dns_a_record_on_launch    = false
      + enable_resource_name_dns_aaaa_record_on_launch = false
      + id                                             = (known after apply)
      + ipv6_cidr_block_association_id                 = (known after apply)
      + ipv6_native                                    = false
      + map_public_ip_on_launch                        = true
      + owner_id                                       = (known after apply)
      + private_dns_hostname_type_on_launch            = (known after apply)
      + tags                                           = {
          + "Name"                   = "thodung-vntechies-public_subnet1-ap-southeast-1a"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "public_subnet1"         = "ap-southeast-1a"
        }
      + tags_all                                       = {
          + "Name"                   = "thodung-vntechies-public_subnet1-ap-southeast-1a"
          + "component"              = "thodung"
          + "env"                    = "vntechies"
          + "github_repo"            = "github.com/vntechies/013-demo-gitops"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "project"                = "013-demo-gitops"
          + "public_subnet1"         = "ap-southeast-1a"
        }
      + vpc_id                                         = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_subnet.this["public_subnet2"] will be created
+ resource "aws_subnet" "this" {
      + arn                                            = (known after apply)
      + assign_ipv6_address_on_creation                = false
      + availability_zone                              = "ap-southeast-1b"
      + availability_zone_id                           = (known after apply)
      + cidr_block                                     = "<IP_ADDRESS>/24"
      + enable_dns64                                   = false
      + enable_resource_name_dns_a_record_on_launch    = false
      + enable_resource_name_dns_aaaa_record_on_launch = false
      + id                                             = (known after apply)
      + ipv6_cidr_block_association_id                 = (known after apply)
      + ipv6_native                                    = false
      + map_public_ip_on_launch                        = true
      + owner_id                                       = (known after apply)
      + private_dns_hostname_type_on_launch            = (known after apply)
      + tags                                           = {
          + "Name"                   = "thodung-vntechies-public_subnet2-ap-southeast-1b"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "public_subnet2"         = "ap-southeast-1b"
        }
      + tags_all                                       = {
          + "Name"                   = "thodung-vntechies-public_subnet2-ap-southeast-1b"
          + "component"              = "thodung"
          + "env"                    = "vntechies"
          + "github_repo"            = "github.com/vntechies/013-demo-gitops"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "project"                = "013-demo-gitops"
          + "public_subnet2"         = "ap-southeast-1b"
        }
      + vpc_id                                         = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_subnet.this["public_subnet3"] will be created
+ resource "aws_subnet" "this" {
      + arn                                            = (known after apply)
      + assign_ipv6_address_on_creation                = false
      + availability_zone                              = "ap-southeast-1c"
      + availability_zone_id                           = (known after apply)
      + cidr_block                                     = "<IP_ADDRESS>/24"
      + enable_dns64                                   = false
      + enable_resource_name_dns_a_record_on_launch    = false
      + enable_resource_name_dns_aaaa_record_on_launch = false
      + id                                             = (known after apply)
      + ipv6_cidr_block_association_id                 = (known after apply)
      + ipv6_native                                    = false
      + map_public_ip_on_launch                        = true
      + owner_id                                       = (known after apply)
      + private_dns_hostname_type_on_launch            = (known after apply)
      + tags                                           = {
          + "Name"                   = "thodung-vntechies-public_subnet3-ap-southeast-1c"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "public_subnet3"         = "ap-southeast-1c"
        }
      + tags_all                                       = {
          + "Name"                   = "thodung-vntechies-public_subnet3-ap-southeast-1c"
          + "component"              = "thodung"
          + "env"                    = "vntechies"
          + "github_repo"            = "github.com/vntechies/013-demo-gitops"
          + "group"                  = "public_subnet"
          + "kubernetes.io/role/elb" = "1"
          + "project"                = "013-demo-gitops"
          + "public_subnet3"         = "ap-southeast-1c"
        }
      + vpc_id                                         = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_vpc.vpc will be created
+ resource "aws_vpc" "vpc" {
      + arn                                  = (known after apply)
      + cidr_block                           = "<IP_ADDRESS>/16"
      + default_network_acl_id               = (known after apply)
      + default_route_table_id               = (known after apply)
      + default_security_group_id            = (known after apply)
      + dhcp_options_id                      = (known after apply)
      + enable_classiclink                   = (known after apply)
      + enable_classiclink_dns_support       = (known after apply)
      + enable_dns_hostnames                 = true
      + enable_dns_support                   = true
      + enable_network_address_usage_metrics = (known after apply)
      + id                                   = (known after apply)
      + instance_tenancy                     = "default"
      + ipv6_association_id                  = (known after apply)
      + ipv6_cidr_block                      = (known after apply)
      + ipv6_cidr_block_network_border_group = (known after apply)
      + main_route_table_id                  = (known after apply)
      + owner_id                             = (known after apply)
      + tags                                 = {
          + "Name" = "thodung-vntechies-vpc-demo-vpc"
        }
      + tags_all                             = {
          + "Name"        = "thodung-vntechies-vpc-demo-vpc"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
    }

  # module.vpc["demo-vpc"].aws_vpc_endpoint.dynamodb will be created
+ resource "aws_vpc_endpoint" "dynamodb" {
      + arn                   = (known after apply)
      + cidr_blocks           = (known after apply)
      + dns_entry             = (known after apply)
      + id                    = (known after apply)
      + ip_address_type       = (known after apply)
      + network_interface_ids = (known after apply)
      + owner_id              = (known after apply)
      + policy                = (known after apply)
      + prefix_list_id        = (known after apply)
      + private_dns_enabled   = false
      + requester_managed     = (known after apply)
      + route_table_ids       = (known after apply)
      + security_group_ids    = (known after apply)
      + service_name          = "com.amazonaws.ap-southeast-1.dynamodb"
      + state                 = (known after apply)
      + subnet_ids            = (known after apply)
      + tags                  = {
          + "Name" = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
        }
      + tags_all              = {
          + "Name"        = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_endpoint_type     = "Gateway"
      + vpc_id                = (known after apply)
    }

  # module.vpc["demo-vpc"].aws_vpc_endpoint.s3 will be created
+ resource "aws_vpc_endpoint" "s3" {
      + arn                   = (known after apply)
      + cidr_blocks           = (known after apply)
      + dns_entry             = (known after apply)
      + id                    = (known after apply)
      + ip_address_type       = (known after apply)
      + network_interface_ids = (known after apply)
      + owner_id              = (known after apply)
      + policy                = (known after apply)
      + prefix_list_id        = (known after apply)
      + private_dns_enabled   = false
      + requester_managed     = (known after apply)
      + route_table_ids       = (known after apply)
      + security_group_ids    = (known after apply)
      + service_name          = "com.amazonaws.ap-southeast-1.s3"
      + state                 = (known after apply)
      + subnet_ids            = (known after apply)
      + tags                  = {
          + "Name" = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
        }
      + tags_all              = {
          + "Name"        = "thodung-vntechies-s3-gwendpoint-ap-southeast-1"
          + "component"   = "thodung"
          + "env"         = "vntechies"
          + "github_repo" = "github.com/vntechies/013-demo-gitops"
          + "project"     = "013-demo-gitops"
        }
      + vpc_endpoint_type     = "Gateway"
      + vpc_id                = (known after apply)
    }

Plan: 13 to add, 0 to change, 0 to destroy.

Changes to Outputs:
+ subnet_ids = {
      + demo-vpc = {
          + public_subnet1 = (known after apply)
          + public_subnet2 = (known after apply)
          + public_subnet3 = (known after apply)
        }
    }
+ vpc_ids    = {
      + demo-vpc = (known after apply)
    }

:arrow_forward: To apply this plan, comment:

atlantis apply -p vntechies-gitops

:put_litter_in_its_place: To delete this plan click here
:repeat: To plan this project again, comment:

atlantis plan -p vntechies-gitops

Note: Objects have changed outside of Terraform
Plan: 13 to add, 0 to change, 0 to destroy.

:fast_forward: To apply all unapplied plans from this pull request, comment:

atlantis apply

:put_litter_in_its_place: To delete all plans and locks for the PR, comment:

atlantis unlock

atlantis apply

Ran Apply for project: vntechies-gitops dir: terraform/ap-southeast-1 workspace: default
Show Output
module.vpc["demo-vpc"].aws_vpc.vpc: Creating...
module.vpc["demo-vpc"].aws_vpc.vpc: Still creating... [10s elapsed]
module.vpc["demo-vpc"].aws_vpc.vpc: Creation complete after 11s [id=vpc-05f67dec3e19597d3]
module.vpc["demo-vpc"].aws_route_table.this["public_rtb"]: Creating...
module.vpc["demo-vpc"].aws_internet_gateway.igw[0]: Creating...
module.vpc["demo-vpc"].aws_subnet.this["public_subnet3"]: Creating...
module.vpc["demo-vpc"].aws_subnet.this["public_subnet2"]: Creating...
module.vpc["demo-vpc"].aws_subnet.this["public_subnet1"]: Creating...
module.vpc["demo-vpc"].aws_security_group.endpoint: Creating...
module.vpc["demo-vpc"].aws_route_table.this["public_rtb"]: Creation complete after 0s [id=rtb-01d240c02fb6f1f20]
module.vpc["demo-vpc"].aws_vpc_endpoint.dynamodb: Creating...
module.vpc["demo-vpc"].aws_internet_gateway.igw[0]: Creation complete after 0s [id=igw-0d474349bd636d68c]
module.vpc["demo-vpc"].aws_vpc_endpoint.s3: Creating...
module.vpc["demo-vpc"].aws_route.public_internet_gateway[0]: Creating...
module.vpc["demo-vpc"].aws_route.public_internet_gateway[0]: Creation complete after 1s [id=r-rtb-01d240c02fb6f1f201080289494]
module.vpc["demo-vpc"].aws_security_group.endpoint: Creation complete after 2s [id=sg-0618aee9155004a34]
module.vpc["demo-vpc"].aws_vpc_endpoint.s3: Creation complete after 7s [id=vpce-05ecb02e9d23abbee]
module.vpc["demo-vpc"].aws_vpc_endpoint.dynamodb: Creation complete after 8s [id=vpce-0c819eb8e77498f45]
module.vpc["demo-vpc"].aws_subnet.this["public_subnet3"]: Still creating... [10s elapsed]
module.vpc["demo-vpc"].aws_subnet.this["public_subnet2"]: Still creating... [10s elapsed]
module.vpc["demo-vpc"].aws_subnet.this["public_subnet1"]: Still creating... [10s elapsed]
module.vpc["demo-vpc"].aws_subnet.this["public_subnet2"]: Creation complete after 11s [id=subnet-01183ba54fce29ae7]
module.vpc["demo-vpc"].aws_subnet.this["public_subnet1"]: Creation complete after 11s [id=subnet-0cb7fc68240103b1b]
module.vpc["demo-vpc"].aws_subnet.this["public_subnet3"]: Creation complete after 11s [id=subnet-0b1743b318f3693ee]
module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet3"]: Creating...
module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet1"]: Creating...
module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet2"]: Creating...
module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet3"]: Creation complete after 0s [id=rtbassoc-0585bda2a9df2c9e0]
module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet1"]: Creation complete after 0s [id=rtbassoc-0f53fe4cb204ed857]
module.vpc["demo-vpc"].aws_route_table_association.this["public_subnet2"]: Creation complete after 0s [id=rtbassoc-0e94b60fd41ea6f9e]

Apply complete! Resources: 13 added, 0 changed, 0 destroyed.

Outputs:

subnet_ids = {
  "demo-vpc" = {
    "public_subnet1" = "subnet-0cb7fc68240103b1b"
    "public_subnet2" = "subnet-01183ba54fce29ae7"
    "public_subnet3" = "subnet-0b1743b318f3693ee"
  }
}
vpc_ids = {
  "demo-vpc" = "vpc-05f67dec3e19597d3"
}

atlantis apply

Ran Apply for 0 projects:

Locks and plans deleted for the projects and workspaces modified in this pull request:

dir: terraform/ap-southeast-1 workspace: default


localStorage in Island,  SyntaxError: "[object Object]" is not valid JSON

i'm trying parse JSON in localStorage in Island, but going error
JSON.parse(localStorage.getItem('some_json')!)

Why island prerender in server?, this error is on terminal, not browser console.

Can we close this as a duplicate of https://github.com/denoland/fresh/issues/975?

Good idea, #975 describes the use case already.


False Positive on Public Storage Arrays

Mythril 0.18.4 produces the following false positive on public storage arrays:
contract Benchmark {
    bytes32[] public STATES = [bytes32(0)];
}

vagrant@vagrant:~/host/benchmarks$ myth -x public_storage_array.sol
==== Exception state ====
Type: Informational
Contract: Unknown
Function name: _function_0x2da83e68
PC address: 151
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that `assert()` should only be used to check invariants. Use `require()` for regular input checking.
--------------------
In file: public_storage_array.sol:4

bytes32[] public STATES = [bytes32(0)]

Confirmed that Manticore also reaches a 0xfe on this benchmark.

Added to FAQ


Change in Icon Style

The app icon is in square shape not circular. This makes the app aesthetically unappealing and it is not in sync with material design concepts and gives an asymmetric look in comparison to other apps.
Kindly change the app icon to a circular shape.

Kindly make the changes.

For me the App Icon is a little different but we need padding as well.

Totally agreed @manjotsidhu

Can you assign it to me?

Can you assign it to me?

Sure go ahead 👍

Please check the PR.

#96


Replace deprecated collections::Bound with ops::Bound

Is collections::Bound deprecated? I couldn't find anything in the doc of std::collections::Bound.

It's deprecated indeed. (https://github.com/rust-lang/rust/blob/1.50.0/library/std/src/collections/mod.rs#L404-L406)
Sorry.

I'm wondering why it slipped off our radar.

It's not your fault, it's actually a bug in the stdlib/compiler that I'm in the process of working on. :) https://github.com/rust-lang/rust/issues/82080


feat: Add SwiftUI support

@plajdo @andrej-jasso Lets already merge that PR? 😄
@marekVGR Approved, good job! 👍🏼  Please add documentation I mentioned.

@vaIerika I'm okay with these changes, it should even work as a drag&drop replacement IIRC.
Just an idea I wanted to propose:
I think viewModel.currentState. is a lot of repetitive "boilerplate" to write on every single state access, especially on data-heavy views. Maybe we could do something about that in the future?

@vaIerika  Excelent idea to put into the innovation board ;) don't forget to add it there even if you have similar ideas in the future.


Allow Downgrades - client and repo

A feature in pacman allows the user to keep the local state in sync with a remote repository,

If the upstream repo redacts a package, clients can opt into mirroring the repo by downgrading their system. I'd like to see this implemented in the choco client, and also would like to see approved version delisting support on the community repository, even if only done by moderator approval. It's not great that packages can be rendered unworkable or permanently jank by an error in the version string. The repo should be more flexible than that.
Perhaps this wouldn't be necessary if chocolatey validated what package is "newer" not by reading the version string, but by new metadata in the nuspec. This would take a lot of clunk out of the requirements around version strings, the above issue becomes easily fixable on the maintainer end without jank, and this would also enable packages to have the flexibility to naively follow upstream releases, even if the package entirely changes its version scheme.
I'm aware the latter idea represents incredible change and likely won't happen, but I will include it for discussion regardless.
Thanks

Perhaps this wouldn't be necessary if chocolatey validated what package is "newer" not by reading the version string, but by new metadata in the nuspec. This would take a lot of clunk out of the requirements around version strings, the above issue becomes easily fixable on the maintainer end without jank, and this would also enable packages to have the flexibility to naively follow upstream releases, even if the package entirely changes its version scheme.

If my understanding is correct, this would break compatibility with Nuget.

also would like to see approved version delisting support on the community repository, even if only done by moderator approval.

This can already be done by maintainers, and does not require a moderator. Go to https://community.chocolatey.org/packages/<package>/<version>/Delete via clicking the "Delete Package" button. Then uncheck the box to list the package, and save changes.
Of course, this is not permanent, and the package can be re-listed by re-ticking the box.

If the upstream repo redacts a package, clients can opt into mirroring the repo by downgrading their system. I'd like to see this implemented in the choco client

Support for checking if a package is newer than what is available in the repository already exists in Chocolatey:

So it should just be a matter of adding another switch to the upgrade command which bypasses that check, and installs the lower version anyway.

This can already be done by maintainers, and does not require a moderator. Go to https://community.chocolatey.org/packages///Delete via clicking the "Delete Package" button. Then uncheck the box to list the package, and save changes.

Thank you for this. I've contacted chocolatey support about fixing a package of mine a couple times over the last 3 years, but somehow this never came up. I was given a hard "can't be done", and workarounds were suggested to me, like create a new package as a dependency, or just alter the version for every new release forever more....
Glad it turned out to be fixable after all.

Support for checking if a package is newer than what is available in the repository already exists in Chocolatey:

Yeah, I figured this wouldn't be extraordinarily out of the way to implement because some building blocks already exist. But I'm sure there are considerations to mull over I'm not privy to.

I have one corner case package I'd like to pick your brain on, then: mpv. Used to be Windows got specialized builds, and the contributor building them used yyyy.mm.dd for releases.
That contributor is gone and now the binaries are simply built straight from the source, but I can't seem to adapt my chocolatey package to reflect that.
I created an alternative package mpvio, still awaiting approval. Without historical baggage, it can follow the upstream version string, but is otherwise identical to the mpv package. My plan was to maintain both packages indefinitely. Any better suggestions there?

I created an alternative package mpvio, still awaiting approval. Without historical baggage, it can follow the upstream version string, but is otherwise identical to the mpv package. My plan was to maintain both packages indefinitely. Any better suggestions there?

Unless someone else has a better suggestion, that sounds like the best option to me.


Reporting

Generate a reporting summary (csv) and html report from logs to describe process of data cleaning.
Important to report any errors, summary stats about cleaning, flag any inconsistencies in record numbers.

Should be done in ipynb rendered to HTML with pull values parsed from log files.

Done.


Bump sharp version and its dependencies

I am also suggesting a versioning scheme that follows sharp, to make it easier to track.

it also adds lcms2 for color profile support.  without it, some pictures come out garbled.

superseded by #12


harness packages should use NimbleOptions to declare schema

I just used nimble_options for the first time the other day and was delighted at how easy it was to use and the nice documentation it can provide automatically
I think it'd be a great boon to packages to define their schemas using NimbleOptions

have some nice package work on this now


fix for reward_item with spaces

added simple test for admob
added strings.replace to change %20 to space in rawQuery variable

Fixes #2

And merge that commits to one commit, Thank you.

working on this


MSS should remember the last style chosen for a layer

Original report by Joern Ungermann (Bitbucket: joernu76, GitHub: joernu76).

Do you mean MSS should remember the last style chosen persistently?
E.g. When I choose Style B for a Layer, and restart MSS, Style B should still be chosen?

I think we have (3) already with the new interface (and maybe before...). I think I mostly refer to (1).
Imagine: We have two styles, one for northern hemisphere (default) and one for southern hemisphere (where the campaign is located). It would be nice, if MSS would remember my choice of the southern hemisphere style across application restarts.
But only if this does not complicate the code too much.
I think (2) is out-of-scope.


Check if token is valid

When reopening the application after the token has expired, the UI thinks it is still valid, but it is not, so a log out- go in is necessary.
Try to have it detect automatically if the token is not valid and in case that it is, have the option to log in directly

Does it make sense to have an endpoint for this on the server, that given a token, checks if it is valid or not? It can probably be done in other ways but I think this would be the cleanest way

Does it make sense to have an endpoint for this on the server, that given a token, checks if it is valid or not? It can probably be done in other ways but I think this would be the cleanest way

It makes sense, I will update the tags so that a change is also made on cornflow-server to have and endpoint that just checks token validity, so that we can have the cornflow-app  check against it.
We should also see if it make sense to re-issue tokens in some instances to extend its "life"


Remove the racy check added in commit 74c14e5a

That previous commit was potentially unsafe since checking the deadline involves more than 1 word
read. Restoring earlier status quo. Will find an alternative lock-mitigation mechanism.

Depending on the difference scale, a good approximation would be to atomically load g_shard_queue[0]->min_deadline.tv_sec and compare it with now.tv_sec.

We probably want at least milli and probably micro second precision. How
about defining an epoch at init time and keeping track of the deltas?
On Sat, Apr 4, 2015, 12:47 PM Nicolas Noble<EMAIL_ADDRESS>wrote:

Depending on the difference scale, a good approximation would be to
atomically load g_shard_queue[0]->min_deadline.tv_sec and compare it with
now.tv_sec.
—
Reply to this email directly or view it on GitHub
https://github.com/grpc/grpc/pull/1196#issuecomment-89650024.