Skip to content

Commit

Permalink
New merge algorithm & linting with airbnb
Browse files Browse the repository at this point in the history
New merge algorithm & linting with airbnb
  • Loading branch information
koresar authored and FredyC committed Jul 27, 2016
1 parent 5aae772 commit ecd0682
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 233 deletions.
188 changes: 5 additions & 183 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -1,187 +1,9 @@
// Add our overrides as necessary
{
"parser": "babel-eslint",

"env": {
"browser": true,
"node": true,
"es6": true
},

"ecmaFeatures": {
"arrowFunctions": true,
"binaryLiterals": true,
"blockBindings": true,
"classes": false,
"defaultParams": true,
"destructuring": true,
"forOf": true,
"generators": true,
"modules": true,
"objectLiteralComputedProperties": true,
"objectLiteralDuplicateProperties": true,
"objectLiteralShorthandMethods": true,
"objectLiteralShorthandProperties": true,
"octalLiterals": true,
"regexUFlag": true,
"regexYFlag": true,
"spread": true,
"superInFunctions": false,
"templateStrings": true,
"unicodeCodePointEscapes": true,
"globalReturn": true,
"jsx": true
},

"extends": "airbnb/base",
"rules": {
"block-scoped-var": [0],
"brace-style": [2, "1tbs", {"allowSingleLine": true}],
"camelcase": [0],
"comma-dangle": [0],
"comma-spacing": [2],
"comma-style": [2, "last"],
"complexity": [0, 11],
"consistent-this": [0, "that"],
"curly": [2, "multi-line"],
"default-case": [2],
"dot-notation": [2, {"allowKeywords": true}],
"eol-last": [2],
"eqeqeq": [2],
"func-names": [0],
"func-style": [0, "declaration"],
"generator-star-spacing": [2, "after"],
"guard-for-in": [0],
"handle-callback-err": [0],
"key-spacing": [2, {"beforeColon": false, "afterColon": true}],
"quotes": [2, "single", "avoid-escape"],
"max-depth": [0, 4],
"max-len": [0, 80, 4],
"max-nested-callbacks": [0, 2],
"max-params": [0, 3],
"max-statements": [0, 10],
"new-parens": [2],
"new-cap": [0],
"newline-after-var": [0],
"no-alert": [2],
"no-array-constructor": [2],
"no-bitwise": [0],
"no-caller": [2],
"no-catch-shadow": [2],
"no-cond-assign": [2],
"no-console": [0],
"no-constant-condition": [1],
"no-continue": [2],
"no-control-regex": [2],
"no-debugger": [2],
"no-delete-var": [2],
"no-div-regex": [0],
"no-dupe-args": [2],
"no-dupe-keys": [2],
"no-duplicate-case": [2],
"no-else-return": [0],
"no-empty": [2],
"no-empty-character-class": [2],
"no-eq-null": [0],
"no-eval": [2],
"no-ex-assign": [2],
"no-extend-native": [1],
"no-extra-bind": [2],
"no-extra-boolean-cast": [2],
"no-extra-semi": [1],
"no-fallthrough": [2],
"no-floating-decimal": [2],
"no-func-assign": [2],
"no-implied-eval": [2],
"no-inline-comments": [0],
"no-inner-declarations": [2, "functions"],
"no-invalid-regexp": [2],
"no-irregular-whitespace": [2],
"no-iterator": [2],
"no-label-var": [2],
"no-labels": [2],
"no-lone-blocks": [2],
"no-lonely-if": [2],
"no-loop-func": [2],
"no-mixed-requires": [0, false],
"no-mixed-spaces-and-tabs": [2, false],
"no-multi-spaces": [2],
"no-multi-str": [2],
"no-multiple-empty-lines": [2, {"max": 2}],
"no-native-reassign": [1],
"no-negated-in-lhs": [2],
"no-nested-ternary": [0],
"no-new": [2],
"no-new-func": [2],
"no-new-object": [2],
"no-new-require": [0],
"no-new-wrappers": [2],
"no-obj-calls": [2],
"no-octal": [2],
"no-octal-escape": [2],
"no-param-reassign": [2],
"no-path-concat": [0],
"no-plusplus": [0],
"no-process-env": [0],
"no-process-exit": [2],
"no-proto": [2],
"no-redeclare": [2],
"no-regex-spaces": [2],
"no-reserved-keys": [0],
"no-restricted-modules": [0],
"no-return-assign": [2],
"no-script-url": [2],
"no-self-compare": [0],
"no-sequences": [2],
"no-shadow": [2],
"no-shadow-restricted-names": [2],
"no-spaced-func": [2],
"no-sparse-arrays": [2],
"no-sync": [0],
"no-ternary": [0],
"no-throw-literal": [2],
"no-trailing-spaces": [2],
"no-undef-init": [2],
"no-undefined": [0],
"no-underscore-dangle": [2],
"no-unreachable": [2],
"no-unused-expressions": [2],
"no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
"no-use-before-define": [2],
"no-void": [0],
"no-warning-comments": [0, {"terms": ["todo", "fixme", "xxx"], "location": "start"}],
"no-with": [2],
"one-var": [0],
"operator-assignment": [0, "always"],
"operator-linebreak": [2, "after"],
"padded-blocks": [0],
"quote-props": [0],
"radix": [0],
"semi": [2],
"semi-spacing": [2, {"before": false, "after": true}],
"sort-vars": [0],
"keyword-spacing": [2],
"space-before-function-paren": [2, {"anonymous": "always", "named": "never"}],
"space-before-blocks": [0, "always"],
"space-in-brackets": [
0, "never", {
"singleValue": true,
"arraysInArrays": false,
"arraysInObjects": false,
"objectsInArrays": true,
"objectsInObjects": true,
"propertyName": false
}
],
"space-in-parens": [0],
"space-infix-ops": [2],
"space-unary-ops": [2, {"words": true, "nonwords": false}],
"spaced-line-comment": [0, "always"],
"strict": [2, "never"],
"use-isnan": [2],
"valid-jsdoc": [0],
"valid-typeof": [2],
"vars-on-top": [0],
"wrap-iife": [2],
"wrap-regex": [2],
"yoda": [2, "never", {"exceptRange": true}]
"no-param-reassign": 0,
"object-curly-spacing": [2, "never"],
"func-names": 0
}
}
35 changes: 23 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,31 +141,42 @@ The stamp descriptor properties are made available on each stamp as `stamp.compo

* `methods` - A set of methods that will be added to the object's delegate prototype.
* `properties` - A set of properties that will be added to new object instances by assignment.
* `deepProperties` - A set of properties that will be added to new object instances by deep property merge, except arrays are concatenated.
* `deepProperties` - A set of properties that will be added to new object instances by deep property merge.
* `propertyDescriptors` - A set of [object property
descriptors](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties) used for fine-grained control over object property behaviors.
* `staticProperties` - A set of static properties that will be copied by assignment to the stamp.
* `staticDeepProperties` - A set of static properties that will be added to the stamp by deep property merge, except arrays are concatenated.
* `staticDeepProperties` - A set of static properties that will be added to the stamp by deep property merge.
* `staticPropertyDescriptors` - A set of [object property descriptors](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties) to apply to the stamp.
* `initializers` - An array of functions that will run in sequence. Stamp details and arguments get passed to initializers.
* `configuration` - A set of options made available to the stamp and its initializers during object instance creation. These will be copied by assignment.
* `deepConfiguration` - A set of options made available to the stamp and its initializers during object instance creation. These will be deep merged, except arrays are concatenated.
* `deepConfiguration` - A set of options made available to the stamp and its initializers during object instance creation. These will be deep merged.

#### Composing Descriptors

Descriptors are composed together to create new descriptors with the following rules:

* `methods` are copied by assignment as in `Object.assign()`.
* `properties` are copied by assignment as in `Object.assign()`.
* `deepProperties` are deep merged, except arrays are concatenated.
* `propertyDescriptors` are copied by assignment as in `Object.assign()`.
* `staticProperties` are copied by assignment as in `Object.assign()`.
* `staticDeepProperties` are deep merged, except arrays are concatenated
* `staticPropertyDescriptors` are copied by assignment as in `Object.assign()`.
* `methods` are copied by assignment
* `properties` are copied by assignment
* `deepProperties` are deep merged
* `propertyDescriptors` are copied by assignment
* `staticProperties` are copied by assignment
* `staticDeepProperties` are deep merged
* `staticPropertyDescriptors` are copied by assignment
* `initializers` are uniquely concatenated as in `_.union()`.
* `configuration` are copied by assignment as in `Object.assign()`.
* `deepConfiguration` are deep merged, except arrays are concatenated.
* `configuration` are copied by assignment
* `deepConfiguration` are deep merged

##### Copying by assignment

The regular `Object.assign()` is used.

##### Deep merging

Special deep merging algorithm should be used when merging descriptors:
* The last object type always overwrites the previous object type
* Plain objects are deeply merged (or cloned if destination metadata property is not a plain object)
* Arrays are concatenated using `Array.prototype.concat` which shallow copies elements to a new array instance
* Functions, Symbols, RegExp, etc. are copied by reference

#### Priority Rules

Expand Down
Loading

0 comments on commit ecd0682

Please sign in to comment.