Fix various typos
Found via `codespell -q 3 -L optio,promisses,usera`
This commit is contained in:
+2
-2
@@ -6,7 +6,7 @@ Thank you for reading this! Speckle's a rather wide network of parts that depend
|
|||||||
|
|
||||||
> **Speckle** is a quite large ecosystem of moving parts. Any changes may have unintended effects, that can cause problems quickly for many people (and processes) that rely on Speckle.
|
> **Speckle** is a quite large ecosystem of moving parts. Any changes may have unintended effects, that can cause problems quickly for many people (and processes) that rely on Speckle.
|
||||||
|
|
||||||
This means that what might look like a simple quick change in one repo may have a big hidden cost that propagates around other parts of the project. We're all here to help each other, and this guide is meant to help you get started and promote a framework that can untangle all these dependecies through discussion!
|
This means that what might look like a simple quick change in one repo may have a big hidden cost that propagates around other parts of the project. We're all here to help each other, and this guide is meant to help you get started and promote a framework that can untangle all these dependencies through discussion!
|
||||||
|
|
||||||
## Bugs & Issues 🐞
|
## Bugs & Issues 🐞
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ Changes that are cosmetic in nature and do not add anything substantial to the s
|
|||||||
|
|
||||||
Why? However trivial the changes might seem, there might be subtle reasons for the original code to be as it is. Furthermore, there are a lot of potential hidden costs (that even maintainers themselves are not aware of fully!) and they eat up review time unncessarily.
|
Why? However trivial the changes might seem, there might be subtle reasons for the original code to be as it is. Furthermore, there are a lot of potential hidden costs (that even maintainers themselves are not aware of fully!) and they eat up review time unncessarily.
|
||||||
|
|
||||||
> **Examples**: modifying the colour of an UI element in one client may have a big hidden cost and need propagation in several other clients that implement a similar ui element. Changing the default port or specifiying `localhost` instead of `0.0.0.0` breaks cross-vm debugging and developing.
|
> **Examples**: modifying the colour of an UI element in one client may have a big hidden cost and need propagation in several other clients that implement a similar ui element. Changing the default port or specifying `localhost` instead of `0.0.0.0` breaks cross-vm debugging and developing.
|
||||||
|
|
||||||
## Wrap up
|
## Wrap up
|
||||||
|
|
||||||
|
|||||||
@@ -123,7 +123,7 @@
|
|||||||
<b>Connectors</b>
|
<b>Connectors</b>
|
||||||
are plugins for design and analysis software, they let you
|
are plugins for design and analysis software, they let you
|
||||||
<b>exchange</b>
|
<b>exchange</b>
|
||||||
geometry and BIM data dirctly from the tools you use.
|
geometry and BIM data directly from the tools you use.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Install our connectors and you'll instantly be able to
|
Install our connectors and you'll instantly be able to
|
||||||
@@ -194,8 +194,8 @@
|
|||||||
<p>
|
<p>
|
||||||
Commits can also be organized in
|
Commits can also be organized in
|
||||||
<b>branches,</b>
|
<b>branches,</b>
|
||||||
for instace, to have multiple design options or to store data by discipline. The
|
for instance, to have multiple design options or to store data by discipline. The
|
||||||
dafault branch is called
|
default branch is called
|
||||||
<i>main</i>
|
<i>main</i>
|
||||||
.
|
.
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
v-model="description"
|
v-model="description"
|
||||||
label="Description"
|
label="Description"
|
||||||
persistent-hint
|
persistent-hint
|
||||||
hint="A short description of your applicaiton."
|
hint="A short description of your application."
|
||||||
></v-textarea>
|
></v-textarea>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Comprehensive developer and user documentation can be found in our:
|
|||||||
|
|
||||||
## Getting started
|
## Getting started
|
||||||
|
|
||||||
This is a small utility class that helps you stream an object and all its sub-components from the Speckle Server API. It is inteded to be used in contexts where you want to "download" the whole object, or iteratively traverse its whole tree.
|
This is a small utility class that helps you stream an object and all its sub-components from the Speckle Server API. It is intended to be used in contexts where you want to "download" the whole object, or iteratively traverse its whole tree.
|
||||||
|
|
||||||
Here's a sample way on how to use it, pfilfered from the [3d viewer package](../viewer):
|
Here's a sample way on how to use it, pfilfered from the [3d viewer package](../viewer):
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ let graphqlServer
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialises the express application together with the graphql server middleware.
|
* Initialises the express application together with the graphql server middleware.
|
||||||
* @return {[type]} an express applicaiton and the graphql server
|
* @return {[type]} an express application and the graphql server
|
||||||
*/
|
*/
|
||||||
exports.init = async ( ) => {
|
exports.init = async ( ) => {
|
||||||
const app = express( )
|
const app = express( )
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ module.exports = async ( app, session, sessionStorage, finalizeAuth ) => {
|
|||||||
existingUser = await getUserByEmail( { email: user.email } )
|
existingUser = await getUserByEmail( { email: user.email } )
|
||||||
|
|
||||||
// if there is an existing user, go ahead and log them in (regardless of
|
// if there is an existing user, go ahead and log them in (regardless of
|
||||||
// wether the server is invite only or not).
|
// whether the server is invite only or not).
|
||||||
if ( existingUser ) {
|
if ( existingUser ) {
|
||||||
let myUser = await findOrCreateUser( { user: user, rawProfile: profile._raw } )
|
let myUser = await findOrCreateUser( { user: user, rawProfile: profile._raw } )
|
||||||
return done( null, myUser )
|
return done( null, myUser )
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ module.exports = async ( app, session, sessionStorage, finalizeAuth ) => {
|
|||||||
existingUser = await getUserByEmail( { email: user.email } )
|
existingUser = await getUserByEmail( { email: user.email } )
|
||||||
|
|
||||||
// if there is an existing user, go ahead and log them in (regardless of
|
// if there is an existing user, go ahead and log them in (regardless of
|
||||||
// wether the server is invite only or not).
|
// whether the server is invite only or not).
|
||||||
if ( existingUser ) {
|
if ( existingUser ) {
|
||||||
let myUser = await findOrCreateUser( { user: user, rawProfile: profile._raw } )
|
let myUser = await findOrCreateUser( { user: user, rawProfile: profile._raw } )
|
||||||
return done( null, myUser )
|
return done( null, myUser )
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ describe( 'Apps @apps', ( ) => {
|
|||||||
let usedAccessCode = await createAuthorizationCode( { appId: myTestApp.id, userId: actor.id, challenge } )
|
let usedAccessCode = await createAuthorizationCode( { appId: myTestApp.id, userId: actor.id, challenge } )
|
||||||
let apiTokenResponse = await createAppTokenFromAccessCode( { appId: myTestApp.id, appSecret: myTestApp.secret, accessCode: usedAccessCode, challenge: challenge } )
|
let apiTokenResponse = await createAppTokenFromAccessCode( { appId: myTestApp.id, appSecret: myTestApp.secret, accessCode: usedAccessCode, challenge: challenge } )
|
||||||
|
|
||||||
// We now have one unused acces code, an api token and a refresh token.
|
// We now have one unused access code, an api token and a refresh token.
|
||||||
// Proceed to update the app:
|
// Proceed to update the app:
|
||||||
const res = await updateApp( { app: { name: 'updated test application', id: myTestApp.id, scopes: [ 'streams:write', 'users:read' ] } } )
|
const res = await updateApp( { app: { name: 'updated test application', id: myTestApp.id, scopes: [ 'streams:write', 'users:read' ] } } )
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ type Stream {
|
|||||||
description: String
|
description: String
|
||||||
isPublic: Boolean!
|
isPublic: Boolean!
|
||||||
"""
|
"""
|
||||||
Your role for this stream. `null` if request is not authenticated, or the stream is not explictely shared with you.
|
Your role for this stream. `null` if request is not authenticated, or the stream is not explicitly shared with you.
|
||||||
"""
|
"""
|
||||||
role: String
|
role: String
|
||||||
createdAt: DateTime!
|
createdAt: DateTime!
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ exports.up = async knex => {
|
|||||||
// Roles.
|
// Roles.
|
||||||
// Roles keep track of their name and the target resource they are applied to.
|
// Roles keep track of their name and the target resource they are applied to.
|
||||||
// The target resource must be a table name.
|
// The target resource must be a table name.
|
||||||
// The heigher the weight, the bigger the permissions.
|
// The higher the weight, the bigger the permissions.
|
||||||
await knex.schema.createTable( 'user_roles', table => {
|
await knex.schema.createTable( 'user_roles', table => {
|
||||||
table.string( 'name', 256 ).primary( )
|
table.string( 'name', 256 ).primary( )
|
||||||
table.string( 'description', 256 ).notNullable( )
|
table.string( 'description', 256 ).notNullable( )
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// Conventions:
|
// Conventions:
|
||||||
// "weight: 1000" => resource owner
|
// "weight: 1000" => resource owner
|
||||||
// "weight: 100" => resource viewer / basic user
|
// "weight: 100" => resource viewer / basic user
|
||||||
// Anything in between 100 and 1000 can be used for escalating priviliges.
|
// Anything in between 100 and 1000 can be used for escalating privileges.
|
||||||
|
|
||||||
module.exports = [
|
module.exports = [
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ module.exports = {
|
|||||||
let closureBatchSize = 1000
|
let closureBatchSize = 1000
|
||||||
let objectsBatchSize = 500
|
let objectsBatchSize = 500
|
||||||
|
|
||||||
// step 1: insert objecs
|
// step 1: insert objects
|
||||||
if ( objsToInsert.length > 0 ) {
|
if ( objsToInsert.length > 0 ) {
|
||||||
let batches = chunk( objsToInsert, objectsBatchSize )
|
let batches = chunk( objsToInsert, objectsBatchSize )
|
||||||
for ( const batch of batches ) {
|
for ( const batch of batches ) {
|
||||||
@@ -270,7 +270,7 @@ module.exports = {
|
|||||||
cursor = JSON.parse( Buffer.from( cursor, 'base64' ).toString( 'binary' ) )
|
cursor = JSON.parse( Buffer.from( cursor, 'base64' ).toString( 'binary' ) )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flag that keeps track of wether we select the whole "data" part of an object or not
|
// Flag that keeps track of whether we select the whole "data" part of an object or not
|
||||||
let fullObjectSelect = false
|
let fullObjectSelect = false
|
||||||
if ( Array.isArray( select ) ) {
|
if ( Array.isArray( select ) ) {
|
||||||
// if we order by a field that we do not select, select it!
|
// if we order by a field that we do not select, select it!
|
||||||
@@ -332,7 +332,7 @@ module.exports = {
|
|||||||
else whereClause = 'andWhere'
|
else whereClause = 'andWhere'
|
||||||
|
|
||||||
// Note: castType is generated from the statement's value and operators are matched against a whitelist.
|
// Note: castType is generated from the statement's value and operators are matched against a whitelist.
|
||||||
// If comparing with strings, the jsonb_path_query(_first) func returns json encoded strings (ie, `bar` is actually `"bar"`), hence we need to add the qoutes manually to the raw provided comparison value.
|
// If comparing with strings, the jsonb_path_query(_first) func returns json encoded strings (ie, `bar` is actually `"bar"`), hence we need to add the quotes manually to the raw provided comparison value.
|
||||||
nestedWhereQuery[ whereClause ]( knex.raw( `jsonb_path_query_first( data, ? )::${castType} ${statement.operator} ? `, [ '$.' + statement.field, castType === 'text' ? `"${statement.value}"` : statement.value ] ) )
|
nestedWhereQuery[ whereClause ]( knex.raw( `jsonb_path_query_first( data, ? )::${castType} ${statement.operator} ? `, [ '$.' + statement.field, castType === 'text' ? `"${statement.value}"` : statement.value ] ) )
|
||||||
} )
|
} )
|
||||||
} )
|
} )
|
||||||
@@ -358,7 +358,7 @@ module.exports = {
|
|||||||
if ( typeof cursor.value === 'boolean' ) castType = 'boolean'
|
if ( typeof cursor.value === 'boolean' ) castType = 'boolean'
|
||||||
if ( typeof cursor.value === 'number' ) castType = 'numeric'
|
if ( typeof cursor.value === 'number' ) castType = 'numeric'
|
||||||
|
|
||||||
// When strings are used inside an order clause, as mentioned above, we need to add qoutes around the comparison value, as the jsonb_path_query funcs return json encoded strings (`{"test":"foo"}` => test is returned as `"foo"`)
|
// When strings are used inside an order clause, as mentioned above, we need to add quotes around the comparison value, as the jsonb_path_query funcs return json encoded strings (`{"test":"foo"}` => test is returned as `"foo"`)
|
||||||
if ( castType === 'text' )
|
if ( castType === 'text' )
|
||||||
cursor.value = `"${cursor.value}"`
|
cursor.value = `"${cursor.value}"`
|
||||||
|
|
||||||
@@ -423,7 +423,7 @@ module.exports = {
|
|||||||
cursorObj.lastSeenId = rows[ rows.length - 1 ].id
|
cursorObj.lastSeenId = rows[ rows.length - 1 ].id
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cursor objetcs should be client-side opaque, hence we encode them to base64.
|
// Cursor objects should be client-side opaque, hence we encode them to base64.
|
||||||
let cursorEncoded = Buffer.from( JSON.stringify( cursorObj ), 'binary' ).toString( 'base64' )
|
let cursorEncoded = Buffer.from( JSON.stringify( cursorObj ), 'binary' ).toString( 'base64' )
|
||||||
return { totalCount, objects: rows, cursor: rows.length === limit ? cursorEncoded : null }
|
return { totalCount, objects: rows, cursor: rows.length === limit ? cursorEncoded : null }
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ describe( 'Objects @core-objects', ( ) => {
|
|||||||
|
|
||||||
} )
|
} )
|
||||||
|
|
||||||
it( 'should query childern and sort them by a boolean value ', async ( ) => {
|
it( 'should query children and sort them by a boolean value ', async ( ) => {
|
||||||
let test = await getObjectChildrenQuery( {
|
let test = await getObjectChildrenQuery( {
|
||||||
streamId: stream.id,
|
streamId: stream.id,
|
||||||
objectId: parentObjectId,
|
objectId: parentObjectId,
|
||||||
@@ -330,7 +330,7 @@ describe( 'Objects @core-objects', ( ) => {
|
|||||||
|
|
||||||
} )
|
} )
|
||||||
|
|
||||||
it( 'should query childern and sort them by a string value ', async ( ) => {
|
it( 'should query children and sort them by a string value ', async ( ) => {
|
||||||
let limVal = 20
|
let limVal = 20
|
||||||
|
|
||||||
let test = await getObjectChildrenQuery( {
|
let test = await getObjectChildrenQuery( {
|
||||||
@@ -355,13 +355,13 @@ describe( 'Objects @core-objects', ( ) => {
|
|||||||
|
|
||||||
expect( test.objects[ 0 ].data.name ).to.equal( 'mr. 0' )
|
expect( test.objects[ 0 ].data.name ).to.equal( 'mr. 0' )
|
||||||
expect( test.objects[ 1 ].data.name ).to.equal( 'mr. 1' )
|
expect( test.objects[ 1 ].data.name ).to.equal( 'mr. 1' )
|
||||||
expect( test.objects[ 2 ].data.name ).to.equal( 'mr. 10' ) // remeber kids, this is a lexicographical sort
|
expect( test.objects[ 2 ].data.name ).to.equal( 'mr. 10' ) // remember kids, this is a lexicographical sort
|
||||||
expect( test.objects[ 4 ].data.name ).to.equal( 'mr. 12' )
|
expect( test.objects[ 4 ].data.name ).to.equal( 'mr. 12' )
|
||||||
expect( test2.objects[ 0 ].data.name ).to.equal( 'mr. 13' )
|
expect( test2.objects[ 0 ].data.name ).to.equal( 'mr. 13' )
|
||||||
|
|
||||||
} )
|
} )
|
||||||
|
|
||||||
it( 'should query childern and sort them by id by default ', async ( ) => {
|
it( 'should query children and sort them by id by default ', async ( ) => {
|
||||||
let test = await getObjectChildrenQuery( {
|
let test = await getObjectChildrenQuery( {
|
||||||
streamId: stream.id,
|
streamId: stream.id,
|
||||||
objectId: parentObjectId,
|
objectId: parentObjectId,
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ describe( 'Upload/Download Routes @api-rest', ( ) => {
|
|||||||
.attach( 'batch2', Buffer.from( JSON.stringify( objBatches[ 1 ] ), 'utf8' ) )
|
.attach( 'batch2', Buffer.from( JSON.stringify( objBatches[ 1 ] ), 'utf8' ) )
|
||||||
.attach( 'batch3', Buffer.from( JSON.stringify( objBatches[ 2 ] ), 'utf8' ) )
|
.attach( 'batch3', Buffer.from( JSON.stringify( objBatches[ 2 ] ), 'utf8' ) )
|
||||||
|
|
||||||
// TODO: test gziped uploads. They work. Current blocker: cannot set content-type for each part in the 'multipart' request.
|
// TODO: test gzipped uploads. They work. Current blocker: cannot set content-type for each part in the 'multipart' request.
|
||||||
// .attach( 'batch1', zlib.gzipSync( Buffer.from( JSON.stringify( objBatches[ 0 ] ) ), 'utf8' ) )
|
// .attach( 'batch1', zlib.gzipSync( Buffer.from( JSON.stringify( objBatches[ 0 ] ) ), 'utf8' ) )
|
||||||
// .attach( 'batch2', zlib.gzipSync( Buffer.from( JSON.stringify( objBatches[ 1 ] ) ), 'utf8' ) )
|
// .attach( 'batch2', zlib.gzipSync( Buffer.from( JSON.stringify( objBatches[ 1 ] ) ), 'utf8' ) )
|
||||||
// .attach( 'batch3', zlib.gzipSync( Buffer.from( JSON.stringify( objBatches[ 2 ] ) ), 'utf8' ) )
|
// .attach( 'batch3', zlib.gzipSync( Buffer.from( JSON.stringify( objBatches[ 2 ] ) ), 'utf8' ) )
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ describe( 'Password reset requests @passwordresets', ( ) => {
|
|||||||
.post( '/auth/pwdreset/request' )
|
.post( '/auth/pwdreset/request' )
|
||||||
.expect( 400 )
|
.expect( 400 )
|
||||||
|
|
||||||
// non-existant user
|
// non-existent user
|
||||||
await request( expressApp )
|
await request( expressApp )
|
||||||
.post( '/auth/pwdreset/request' )
|
.post( '/auth/pwdreset/request' )
|
||||||
.send( { email: 'doesnot@exist.here' } )
|
.send( { email: 'doesnot@exist.here' } )
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ async function contextApiTokenHelper( { req, res, connection } ) {
|
|||||||
|
|
||||||
return { auth: true, userId, role, token, scopes }
|
return { auth: true, userId, role, token, scopes }
|
||||||
} catch ( e ) {
|
} catch ( e ) {
|
||||||
// TODO: Think wether perhaps it's better to throw the error
|
// TODO: Think whether perhaps it's better to throw the error
|
||||||
return { auth: false, err: e }
|
return { auth: false, err: e }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ export default class Coverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the object is convertable (there is a direct conversion routine), it will invoke the callback with the conversion result.
|
* If the object is convertible (there is a direct conversion routine), it will invoke the callback with the conversion result.
|
||||||
* If the object is not convertable, it will recursively iterate through it (arrays & objects) and invoke the callback on any postive conversion result.
|
* If the object is not convertible, it will recursively iterate through it (arrays & objects) and invoke the callback on any positive conversion result.
|
||||||
* @param {[type]} obj [description]
|
* @param {[type]} obj [description]
|
||||||
* @param {Function} callback [description]
|
* @param {Function} callback [description]
|
||||||
* @return {[type]} [description]
|
* @return {[type]} [description]
|
||||||
@@ -236,7 +236,7 @@ export default class Coverter {
|
|||||||
if ( !obj ) return
|
if ( !obj ) return
|
||||||
let { bufferGeometry } = await this.MeshToBufferGeometry( await this.resolveReference( obj.displayValue || obj.displayMesh ), scale )
|
let { bufferGeometry } = await this.MeshToBufferGeometry( await this.resolveReference( obj.displayValue || obj.displayMesh ), scale )
|
||||||
|
|
||||||
// deletes known uneeded fields
|
// deletes known unneeded fields
|
||||||
// delete obj.displayMesh
|
// delete obj.displayMesh
|
||||||
// delete obj.displayValue
|
// delete obj.displayValue
|
||||||
delete obj.Edges
|
delete obj.Edges
|
||||||
@@ -476,7 +476,7 @@ export default class Coverter {
|
|||||||
const xAxis = this.PointToVector3( plane.xdir )
|
const xAxis = this.PointToVector3( plane.xdir )
|
||||||
const yAxis = this.PointToVector3( plane.ydir )
|
const yAxis = this.PointToVector3( plane.ydir )
|
||||||
|
|
||||||
// Make sure plane axis are unit lenght!!!!
|
// Make sure plane axis are unit length!!!!
|
||||||
xAxis.normalize()
|
xAxis.normalize()
|
||||||
yAxis.normalize()
|
yAxis.normalize()
|
||||||
|
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ var TransformControls = function ( camera, domElement, translationDotsOnly ) {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Detatch from object
|
// Detach from object
|
||||||
this.detach = function () {
|
this.detach = function () {
|
||||||
|
|
||||||
this.object = undefined;
|
this.object = undefined;
|
||||||
|
|||||||
Reference in New Issue
Block a user