Meteor-Community-Packages / meteor-collection2

A Meteor package that extends Mongo.Collection to provide support for specifying a schema and then validating against that schema when inserting and updating.
https://packosphere.com/aldeed/collection2
MIT License
1.02k stars 108 forks source link

Using aldeed:schema-index #378

Closed saptaru closed 5 years ago

saptaru commented 6 years ago

Hi, I am currently developing a meteor package which is using the aldeed:collection2@3.0.0 like so:

api.use('aldeed:collection2@3.0.0')
api.imply('aldeed:collection2@3.0.0')

From the docs I am a bit confused as I cannot tell if the aldeed:collection2 version 3.0.0 it should automatically install aldeed:schema-index and aldeed:schema-deny, or do I need to install them separately?

However, even if I do:

api.use('aldeed:schema-index@3.0.0')
api.imply('aldeed:schema-index@3.0.0')

the following error occurs: Error: Invalid definition for isDeleted field: "index" is not a supported property

Here is a snapshot with that field definition from my schema:

isDeleted  : {
        type        : Boolean,
        index       : 1,
        defaultValue: false
    },

I even tried to install the aldeed:schema-index in my app but the same happens. Please note that before every try I first do a meteor reset and I also remove the above packages version from .meteor/versions just to be sure everything is installed correctly. Also having the simpl-schema npm package installed.

Thank you!

aldeed commented 6 years ago

@saptaru You do need to api.use both 3.0.0 packages. I don't know why it wouldn't work. Can you put together a minimal package in a public repo that shows the issue (or link to yours if it's public)?

MichaelJCole commented 5 years ago

Hi, I'm getting this error on a new build for a Meteor project:

I'm using simpl-schema as an npm package. Adding aldeed:schema-index worked after a restart.

Here's the schema:

const schema = new SimpleSchema({
  'name': { type: String, max: 40, },
  'orgId': { type: String, index: true, },
});

And the error:

W20180920-15:22:21.288(-7)? (STDERR) Error: Invalid definition for orgId field: "index" is not a supported property
W20180920-15:22:21.288(-7)? (STDERR)     at /home/app/backstage/node_modules/simpl-schema/dist/SimpleSchema.js:1121:13
W20180920-15:22:21.289(-7)? (STDERR)     at Array.forEach (<anonymous>)
W20180920-15:22:21.289(-7)? (STDERR)     at checkAndScrubDefinition (/home/app/backstage/node_modules/simpl-schema/dist/SimpleSchema.js:1119:27)
☔  meteor list --tree                                                                                                              A1Mod dev
accounts-base@1.4.2                           
├─┬ callback-hook@1.1.0                       
│ └── ecmascript@0.11.1 (top level)           
├─┬ check@1.3.1                               
│ ├── ecmascript@0.11.1 (top level)           
│ └─┬ ejson@1.1.0                             
│   ├─┬ base64@1.0.11                         
│   │ └── ecmascript@0.11.1 (top level)       
│   └── ecmascript@0.11.1 (top level)         
├─┬ ddp@1.4.0                                 
│ ├─┬ ddp-client@2.3.3                        
│ │ ├── callback-hook@1.1.0 (expanded above)  
│ │ ├── check@1.3.1 (expanded above)          
│ │ ├─┬ ddp-common@1.4.0                      
│ │ │ ├── check@1.3.1 (expanded above)        
│ │ │ ├── ecmascript@0.11.1 (top level)       
│ │ │ ├── ejson@1.1.0 (expanded above)        
│ │ │ ├─┬ random@1.1.0                        
│ │ │ │ └── ecmascript@0.11.1 (top level)     
│ │ │ ├─┬ retry@1.1.0                         
│ │ │ │ ├── ecmascript@0.11.1 (top level)     
│ │ │ │ └── random@1.1.0 (expanded above)     
│ │ │ └── tracker@1.2.0 (top level)           
│ │ ├─┬ diff-sequence@1.1.0                   
│ │ │ ├── ecmascript@0.11.1 (top level)       
│ │ │ └── ejson@1.1.0 (expanded above)        
│ │ ├── ecmascript@0.11.1 (top level)         
│ │ ├── ejson@1.1.0 (expanded above)          
│ │ ├─┬ id-map@1.1.0                          
│ │ │ ├── ecmascript@0.11.1 (top level)       
│ │ │ └── ejson@1.1.0 (expanded above)        
│ │ ├─┬ mongo-id@1.0.7                        
│ │ │ ├── ecmascript@0.11.1 (top level)       
│ │ │ ├── ejson@1.1.0 (expanded above)        
│ │ │ ├── id-map@1.1.0 (expanded above)       
│ │ │ └── random@1.1.0 (expanded above)       
│ │ ├── random@1.1.0 (expanded above)         
│ │ ├─┬ reload@1.2.0                          
│ │ │ └── ecmascript@0.11.1 (top level)       
│ │ ├── retry@1.1.0 (expanded above)          
│ │ ├─┬ socket-stream-client@0.2.2            
│ │ │ ├─┬ dynamic-import@0.4.2                
│ │ │ │ ├─┬ http@1.4.1                        
│ │ │ │ │ ├─┬ modules@0.12.2                  
│ │ │ │ │ │ └── modules-runtime@0.10.2        
│ │ │ │ │ └─┬ url@1.2.0                       
│ │ │ │ │   └── modules@0.12.2 (expanded above)
│ │ │ │ ├─┬ modern-browsers@0.1.2             
│ │ │ │ │ └── modules@0.12.2 (expanded above) 
│ │ │ │ ├── modules@0.12.2 (expanded above)   
│ │ │ │ └─┬ promise@0.11.1                    
│ │ │ │   ├── modern-browsers@0.1.2 (expanded above)
│ │ │ │   └── modules@0.12.2 (expanded above) 
│ │ │ ├── ecmascript@0.11.1 (top level)       
│ │ │ ├── modern-browsers@0.1.2 (expanded above)
│ │ │ └── retry@1.1.0 (expanded above)        
│ │ └── tracker@1.2.0 (top level)             
│ └─┬ ddp-server@2.2.0                        
│   ├── callback-hook@1.1.0 (expanded above)  
│   ├── check@1.3.1 (expanded above)          
│   ├── ddp-client@2.3.3 (expanded above)     
│   ├── ddp-common@1.4.0 (expanded above)     
│   ├── diff-sequence@1.1.0 (expanded above)  
│   ├── ecmascript@0.11.1 (top level)         
│   ├── ejson@1.1.0 (expanded above)          
│   ├─┬ minimongo@1.4.4                       
│   │ ├── diff-sequence@1.1.0 (expanded above)
│   │ ├── ecmascript@0.11.1 (top level)       
│   │ ├── ejson@1.1.0 (expanded above)        
│   │ ├─┬ geojson-utils@1.0.10                
│   │ │ └── modules@0.12.2 (expanded above)   
│   │ ├── id-map@1.1.0 (expanded above)       
│   │ ├── mongo-id@1.0.7 (expanded above)     
│   │ ├─┬ ordered-dict@1.1.0                  
│   │ │ └── ecmascript@0.11.1 (top level)     
│   │ ├── random@1.1.0 (expanded above)       
│   │ └── tracker@1.2.0 (top level)           
│   ├── mongo-id@1.0.7 (expanded above)       
│   ├── random@1.1.0 (expanded above)         
│   ├── retry@1.1.0 (expanded above)          
│   ├─┬ routepolicy@1.0.13                    
│   │ ├── ecmascript@0.11.1 (top level)       
│   │ ├── underscore@1.0.10                   
│   │ └─┬ webapp@1.6.2                        
│   │   ├─┬ boilerplate-generator@1.5.0       
│   │   │ ├── ecmascript@0.11.1 (top level)   
│   │   │ └── underscore@1.0.10               
│   │   ├── ecmascript@0.11.1 (top level)     
│   │   ├─┬ logging@1.1.20                    
│   │   │ ├── ecmascript@0.11.1 (top level)   
│   │   │ ├─┬ ecmascript-runtime-client@0.7.2 
│   │   │ │ ├── modern-browsers@0.1.2 (expanded above)
│   │   │ │ ├── modules@0.12.2 (expanded above)
│   │   │ │ └── promise@0.11.1 (expanded above)
│   │   │ └── ejson@1.1.0 (expanded above)    
│   │   ├── modern-browsers@0.1.2 (expanded above)
│   │   ├── routepolicy@1.0.13 (expanded above)
│   │   ├── underscore@1.0.10                 
│   │   └─┬ webapp-hashing@1.0.9              
│   │     ├── ecmascript@0.11.1 (top level)   
│   │     └── underscore@1.0.10               
│   ├── underscore@1.0.10                     
│   └── webapp@1.6.2 (expanded above)         
├─┬ ddp-rate-limiter@1.0.7                    
│ └─┬ rate-limit@1.0.9                        
│   ├── ecmascript@0.11.1 (top level)         
│   └── random@1.1.0 (expanded above)         
├── ecmascript@0.11.1 (top level)             
├── ejson@1.1.0 (expanded above)              
├─┬ localstorage@1.2.0                        
│ └── random@1.1.0 (expanded above)           
├── mongo@1.5.1 (top level)                   
├── random@1.1.0 (expanded above)             
├── reactive-var@1.0.11 (top level)           
├─┬ service-configuration@1.0.11              
│ ├── accounts-base@1.4.2 (top level)         
│ └── mongo@1.5.1 (top level)                 
├── tracker@1.2.0 (top level)                 
└── underscore@1.0.10                         
accounts-password@1.5.1                       
├── accounts-base@1.4.2 (top level)           
├── check@1.3.1 (expanded above)              
├── ddp@1.4.0 (expanded above)                
├── ecmascript@0.11.1 (top level)             
├── ejson@1.1.0 (expanded above)              
├── email@1.2.3                               
├─┬ npm-bcrypt@0.9.3                          
│ └── modules@0.12.2 (expanded above)         
├── random@1.1.0 (expanded above)             
├── sha@1.0.9                                 
├─┬ srp@1.0.12                                
│ ├── check@1.3.1 (expanded above)            
│ ├── ecmascript@0.11.1 (top level)           
│ ├── random@1.1.0 (expanded above)           
│ └── sha@1.0.9                               
└── underscore@1.0.10                         
accounts-ui@1.3.0                             
├── accounts-base@1.4.2 (top level)           
├─┬ accounts-ui-unstyled@1.4.1                
│ ├── accounts-base@1.4.2 (top level)         
│ ├─┬ less@2.7.12                             
│ │ ├─┬ caching-compiler@1.1.12               
│ │ │ ├── ecmascript@0.11.1 (top level)       
│ │ │ └── random@1.1.0 (expanded above)       
│ │ ├── ecmascript@0.11.1 (top level)         
│ │ └── underscore@1.0.10                     
│ ├── service-configuration@1.0.11 (expanded above)
│ ├─┬ session@1.1.8                           
│ │ ├── ejson@1.1.0 (expanded above)          
│ │ └─┬ reactive-dict@1.2.1                   
│ │   ├── ecmascript@0.11.1 (top level)       
│ │   ├── ejson@1.1.0 (expanded above)        
│ │   └── tracker@1.2.0 (top level)           
│ ├─┬ templating@1.3.2                        
│ │ ├─┬ templating-compiler@1.3.3             
│ │ │ ├─┬ caching-html-compiler@1.1.3         
│ │ │ │ ├── caching-compiler@1.1.12 (expanded above)
│ │ │ │ ├── ecmascript@0.11.1 (top level)     
│ │ │ │ ├─┬ templating-tools@1.1.2            
│ │ │ │ │ ├── ecmascript@0.11.1 (top level)   
│ │ │ │ │ ├─┬ spacebars-compiler@1.1.3        
│ │ │ │ │ │ ├─┬ blaze-tools@1.0.10            
│ │ │ │ │ │ │ ├─┬ htmljs@1.0.11               
│ │ │ │ │ │ │ │ └─┬ deps@1.0.12               
│ │ │ │ │ │ │ │   └── tracker@1.2.0 (top level)
│ │ │ │ │ │ │ └── underscore@1.0.10           
│ │ │ │ │ │ ├─┬ html-tools@1.0.11             
│ │ │ │ │ │ │ └── htmljs@1.0.11 (expanded above)
│ │ │ │ │ │ ├── htmljs@1.0.11 (expanded above)
│ │ │ │ │ │ └── underscore@1.0.10             
│ │ │ │ │ └── underscore@1.0.10               
│ │ │ │ └── underscore@1.0.10                 
│ │ │ ├── ecmascript@0.11.1 (top level)       
│ │ │ └── templating-tools@1.1.2 (expanded above)
│ │ └─┬ templating-runtime@1.3.2              
│ │   ├─┬ blaze@2.3.3                         
│ │   │ ├── check@1.3.1 (expanded above)      
│ │   │ ├── htmljs@1.0.11 (expanded above)    
│ │   │ ├─┬ jquery@1.11.11                    
│ │   │ │ └── modules@0.12.2 (expanded above) 
│ │   │ ├─┬ observe-sequence@1.0.16           
│ │   │ │ ├── diff-sequence@1.1.0 (expanded above)
│ │   │ │ ├── mongo-id@1.0.7 (expanded above) 
│ │   │ │ ├── random@1.1.0 (expanded above)   
│ │   │ │ ├── tracker@1.2.0 (top level)       
│ │   │ │ └── underscore@1.0.10               
│ │   │ ├── ordered-dict@1.1.0 (expanded above)
│ │   │ ├── reactive-var@1.0.11 (top level)   
│ │   │ ├── tracker@1.2.0 (top level)         
│ │   │ └── underscore@1.0.10                 
│ │   ├─┬ spacebars@1.0.15                    
│ │   │ ├── blaze@2.3.3 (expanded above)      
│ │   │ ├── htmljs@1.0.11 (expanded above)    
│ │   │ ├── observe-sequence@1.0.16 (expanded above)
│ │   │ ├── tracker@1.2.0 (top level)         
│ │   │ └── underscore@1.0.10                 
│ │   ├── templating-compiler@1.3.3 (expanded above)
│ │   └── underscore@1.0.10                   
│ ├── tracker@1.2.0 (top level)               
│ └── underscore@1.0.10                       
└── less@2.7.12 (expanded above)              
alanning:roles@1.2.16                         
├── accounts-base@1.4.2 (top level)           
├── check@1.3.1 (expanded above)              
├── mongo@1.5.1 (top level)                   
├── tracker@1.2.0 (top level)                 
└── underscore@1.0.10                         
aldeed:collection2@3.0.0                      
├── ecmascript@0.11.1 (top level)             
├── minimongo@1.4.4 (expanded above)          
├── mongo@1.5.1 (top level)                   
├─┬ raix:eventemitter@0.1.3                   
│ └── underscore@1.0.10                       
└─┬ tmeasday:check-npm-versions@0.3.2         
  └── ecmascript@0.11.1 (top level)           
blaze-html-templates@1.1.2                    
├── blaze@2.3.3 (expanded above)              
├── spacebars@1.0.15 (expanded above)         
├── templating@1.3.2 (expanded above)         
└─┬ ui@1.0.13                                 
  └── blaze@2.3.3 (expanded above)            
browser-policy@1.1.0                          
├─┬ browser-policy-common@1.0.11              
│ └── webapp@1.6.2 (expanded above)           
├─┬ browser-policy-content@1.1.0              
│ ├── browser-policy-common@1.0.11 (expanded above)
│ ├── modules@0.12.2 (expanded above)         
│ ├── underscore@1.0.10                       
│ └── webapp@1.6.2 (expanded above)           
├─┬ browser-policy-framing@1.1.0              
│ ├── browser-policy-common@1.0.11 (expanded above)
│ ├── modules@0.12.2 (expanded above)         
│ └── underscore@1.0.10                       
└── modules@0.12.2 (expanded above)           
dburles:collection-helpers@1.1.0              
├── mongo@1.5.1 (top level)                   
└── underscore@1.0.10                         
ecmascript@0.11.1                             
├─┬ babel-compiler@7.1.1                      
│ ├─┬ ecmascript-runtime@0.7.0                
│ │ ├── ecmascript-runtime-client@0.7.2 (expanded above)
│ │ └─┬ ecmascript-runtime-server@0.7.1       
│ │   └── modules@0.12.2 (expanded above)     
│ └── modern-browsers@0.1.2 (expanded above)  
├─┬ babel-runtime@1.2.4_1                     
│ ├── modules@0.12.2 (expanded above)         
│ └── promise@0.11.1 (expanded above)         
├── dynamic-import@0.4.2 (expanded above)     
├── ecmascript-runtime@0.7.0 (expanded above) 
├── modules@0.12.2 (expanded above)           
└── promise@0.11.1 (expanded above)           
es5-shim@4.8.0                                
└── modules@0.12.2 (expanded above)           
meteor-base@1.4.0                             
├── ddp@1.4.0 (expanded above)                
├── es5-shim@4.8.0 (top level)                
├─┬ hot-code-push@1.0.4                       
│ ├─┬ autoupdate@1.4.1                        
│ │ ├── check@1.3.1 (expanded above)          
│ │ ├── ddp@1.4.0 (expanded above)            
│ │ ├── ecmascript@0.11.1 (top level)         
│ │ ├── mongo@1.5.1 (top level)               
│ │ ├── retry@1.1.0 (expanded above)          
│ │ ├── tracker@1.2.0 (top level)             
│ │ └── webapp@1.6.2 (expanded above)         
│ └── reload@1.2.0 (expanded above)           
├─┬ livedata@1.0.18                           
│ └── ddp@1.4.0 (expanded above)              
└── webapp@1.6.2 (expanded above)             
meteoreact:accounts@1.2.3                     
├── accounts-base@1.4.2 (top level)           
├── accounts-password@1.5.1 (top level)       
├── ecmascript@0.11.1 (top level)             
├── http@1.4.1 (expanded above)               
├─┬ mdg:validated-method@1.1.0                
│ ├── check@1.3.1 (expanded above)            
│ ├── ddp@1.4.0 (expanded above)              
│ ├── ecmascript@0.11.1 (top level)           
│ └── underscore@1.0.10                       
└── react-meteor-data@0.2.16 (top level)      
meteoreact:accounts-unstyled@1.0.0            
└── ecmascript@0.11.1 (top level)             
mobile-experience@1.0.5                       
├── launch-screen@1.1.1                       
└── mobile-status-bar@1.0.14                  
mongo@1.5.1                                   
├─┬ allow-deny@1.1.0                          
│ ├── check@1.3.1 (expanded above)            
│ ├── ddp@1.4.0 (expanded above)              
│ ├── ecmascript@0.11.1 (top level)           
│ ├── ejson@1.1.0 (expanded above)            
│ └── minimongo@1.4.4 (expanded above)        
├─┬ binary-heap@1.0.10                        
│ ├── id-map@1.1.0 (expanded above)           
│ └── underscore@1.0.10                       
├── callback-hook@1.1.0 (expanded above)      
├── check@1.3.1 (expanded above)              
├── ddp@1.4.0 (expanded above)                
├── diff-sequence@1.1.0 (expanded above)      
├── ecmascript@0.11.1 (top level)             
├── ejson@1.1.0 (expanded above)              
├── minimongo@1.4.4 (expanded above)          
├─┬ mongo-dev-server@1.1.0                    
│ └── modules@0.12.2 (expanded above)         
├── mongo-id@1.0.7 (expanded above)           
├── npm-mongo@3.0.11                          
├── random@1.1.0 (expanded above)             
├── tracker@1.2.0 (top level)                 
└── underscore@1.0.10                         
msavin:mongol@7.0.1                           
├── check@1.3.1 (expanded above)              
├── jquery@1.11.11 (expanded above)           
├─┬ meteortoys:toykit@4.0.2                   
│ ├── check@1.3.1 (expanded above)            
│ ├── ddp@1.4.0 (expanded above)              
│ ├── jquery@1.11.11 (expanded above)         
│ ├── minimongo@1.4.4 (expanded above)        
│ ├── mongo@1.5.1 (top level)                 
│ ├── random@1.1.0 (expanded above)           
│ ├── reactive-dict@1.2.1 (expanded above)    
│ ├── reactive-var@1.0.11 (top level)         
│ ├── session@1.1.8 (expanded above)          
│ ├── templating@1.3.2 (expanded above)       
│ ├── tracker@1.2.0 (top level)               
│ ├── underscore@1.0.10                       
│ └── webapp@1.6.2 (expanded above)           
├── mongo@1.5.1 (top level)                   
├── templating@1.3.2 (expanded above)         
├── tracker@1.2.0 (top level)                 
└── underscore@1.0.10                         
nitrolabs:cdn@1.3.0                           
├── templating@1.3.2 (expanded above)         
└── webapp@1.6.2 (expanded above)             
react-meteor-data@0.2.16                      
├── ecmascript@0.11.1 (top level)             
├── tmeasday:check-npm-versions@0.3.2 (expanded above)
└── tracker@1.2.0 (top level)                 
reactive-var@1.0.11                           
└── tracker@1.2.0 (top level)                 
shell-server@0.3.1                            
└── ecmascript@0.11.1 (top level)             
standard-minifier-css@1.4.1                   
└─┬ minifier-css@1.3.1                        
  └── ecmascript@0.11.1 (top level)           
standard-minifier-js@2.3.4                    
├── babel-compiler@7.1.1 (expanded above)     
├── ecmascript@0.11.1 (top level)             
└─┬ minifier-js@2.3.5                         
  └── babel-compiler@7.1.1 (expanded above)   
tracker@1.2.0                                 
└── ecmascript@0.11.1 (top level)     
MichaelJCole commented 5 years ago

Snap! It works locally, but not on a meteor build.

saptaru commented 5 years ago

Can you put

@aldeed Thank you, I've figured it out in the end, sorry I didn't reply earlier. Bellow is my package.js example:

Package.onUse(function (api) {
    const use   = [
              'ecmascript',
              'mongo',
              'aldeed:collection2@3.0.0',
              'aldeed:schema-index@3.0.0',
              'aldeed:autoform@6.3.0',
          ],
          imply = [
              'mongo'
          ];

    api.versionsFrom('1.6.1');
    api.use(use);
    api.imply(imply);
    api.mainModule('my-app-server.js', 'server');
    api.mainModule('my-app-client.js', 'client');
});

I am also using "meteor/tmeasday:check-npm-versions" to check for the "simpl-schema" package like so:

import {checkNpmVersions} from 'meteor/tmeasday:check-npm-versions';

checkNpmVersions({'simpl-schema': '>=1.4.2'}, 'my-package');
silkroadnomad commented 5 years ago

for me I have the same problem, but don't know how to make it work.

neubuot commented 5 years ago

I have no idea how to make it work too, sadly.

paulincai commented 5 years ago

I think you need to extend the schema ... SimpleSchema.extendOptions(['index', 'unique', 'denyInsert', 'denyUpdate']); (from here: https://github.com/aldeed/simple-schema-js#extending-the-schema-options) . I am past this error now but I can't figure out if an index should be created by the simple fact that I added index: 1 or I need to so something else. I can see no index in my DB

aldeed commented 5 years ago

Correct. You need to call SimpleSchema.extendOptions(['index', 'unique']) somewhere in server code before defining any schemas. Then you need index: 1 or whatever options in some schema fields. Then you need to use attachSchema to attach to some collection. Then on startup it should create those indexes in the background.

aldeed commented 5 years ago

You may not need to call SimpleSchema.extendOptions because schema-index package does it, but if that package loads after some of the schemas are created, then you'll need to call it in some code that will load earlier than that.