diff --git a/configs/machineConfig.json b/configs/machineConfig.json deleted file mode 100644 index cad62a9..0000000 --- a/configs/machineConfig.json +++ /dev/null @@ -1,406 +0,0 @@ -{ - "general": { - "name": { - "default": "Rotating Machine", - "rules": { - "type": "string", - "description": "A human-readable name or label for this machine configuration." - } - }, - "id": { - "default": null, - "rules": { - "type": "string", - "nullable": true, - "description": "A unique identifier for this configuration. If not provided, defaults to null." - } - }, - "unit": { - "default": "m3/h", - "rules": { - "type": "string", - "description": "The default measurement unit for this configuration (e.g., 'meters', 'seconds', 'unitless')." - } - }, - "logging": { - "logLevel": { - "default": "info", - "rules": { - "type": "enum", - "values": [ - { - "value": "debug", - "description": "Log messages are printed for debugging purposes." - }, - { - "value": "info", - "description": "Informational messages are printed." - }, - { - "value": "warn", - "description": "Warning messages are printed." - }, - { - "value": "error", - "description": "Error messages are printed." - } - ] - } - }, - "enabled": { - "default": true, - "rules": { - "type": "boolean", - "description": "Indicates whether logging is active. If true, log messages will be generated." - } - } - } - }, - "functionality": { - "softwareType": { - "default": "machine", - "rules": { - "type": "string", - "description": "Specified software type for this configuration." - } - }, - "role": { - "default": "RotationalDeviceController", - "rules": { - "type": "string", - "description": "Indicates the role this configuration plays within the system." - } - } - }, - "asset": { - "uuid": { - "default": null, - "rules": { - "type": "string", - "nullable": true, - "description": "A universally unique identifier for this asset. May be null if not assigned." - } - }, - "geoLocation": { - "default": {}, - "rules": { - "type": "object", - "description": "An object representing the asset's physical coordinates or location.", - "schema": { - "x": { - "default": 0, - "rules": { - "type": "number", - "description": "X coordinate of the asset's location." - } - }, - "y": { - "default": 0, - "rules": { - "type": "number", - "description": "Y coordinate of the asset's location." - } - }, - "z": { - "default": 0, - "rules": { - "type": "number", - "description": "Z coordinate of the asset's location." - } - } - } - } - }, - "supplier": { - "default": "Unknown", - "rules": { - "type": "string", - "description": "The supplier or manufacturer of the asset." - } - }, - "type": { - "default": "pump", - "rules": { - "type": "string", - "description": "A general classification of the asset tied to the specific software. This is not chosen from the asset dropdown menu." - } - }, - "subType": { - "default": "Centrifugal", - "rules": { - "type": "string", - "description": "A more specific classification within 'type'. For example, 'centrifugal' for a centrifugal pump." - } - }, - "model": { - "default": "Unknown", - "rules": { - "type": "string", - "description": "A user-defined or manufacturer-defined model identifier for the asset." - } - }, - "accuracy": { - "default": null, - "rules": { - "type": "number", - "nullable": true, - "description": "The accuracy of the machine or sensor, typically as a percentage or absolute value." - } - }, - "machineCurve": { - "default": { - "nq": { - "1": { - "x": [ - 1, - 2, - 3, - 4, - 5 - ], - "y": [ - 10, - 20, - 30, - 40, - 50 - ] - } - }, - "np": { - "1": { - "x": [ - 1, - 2, - 3, - 4, - 5 - ], - "y": [ - 10, - 20, - 30, - 40, - 50 - ] - } - } - }, - "rules": { - "type": "machineCurve", - "description": "All machine curves must have a 'nq' and 'np' curve. nq stands for the flow curve, np stands for the power curve. Together they form the efficiency curve." - } - } - }, - "mode": { - "current": { - "default": "auto", - "rules": { - "type": "enum", - "values": [ - { - "value": "auto", - "description": "Machine accepts setpoints from a parent controller and runs autonomously." - }, - { - "value": "virtualControl", - "description": "Controlled via GUI setpoints; ignores parent commands." - }, - { - "value": "fysicalControl", - "description": "Controlled via physical buttons or switches; ignores external automated commands." - }, - { - "value": "maintenance", - "description": "No active control from auto, virtual, or fysical sources." - } - ], - "description": "The operational mode of the machine." - } - }, - "allowedActions":{ - "default":{}, - "rules": { - "type": "object", - "schema":{ - "auto": { - "default": ["statusCheck", "execMovement", "execSequence", "emergencyStop"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Actions allowed in auto mode." - } - }, - "virtualControl": { - "default": ["statusCheck", "execMovement", "execSequence", "emergencyStop"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Actions allowed in virtualControl mode." - } - }, - "fysicalControl": { - "default": ["statusCheck", "emergencyStop"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Actions allowed in fysicalControl mode." - } - }, - "maintenance": { - "default": ["statusCheck"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Actions allowed in maintenance mode." - } - } - }, - "description": "Information about valid command sources recognized by the machine." - } - }, - "allowedSources":{ - "default": {}, - "rules": { - "type": "object", - "schema":{ - "auto": { - "default": ["parent", "GUI", "fysical"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Sources allowed in auto mode." - } - }, - "virtualControl": { - "default": ["GUI", "fysical"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Sources allowed in virtualControl mode." - } - }, - "fysicalControl": { - "default": ["fysical"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Sources allowed in fysicalControl mode." - } - } - }, - "description": "Information about valid command sources recognized by the machine." - } - } - }, - "source": { - "default": "parent", - "rules": { - "type": "enum", - "values": [ - { - "value": "parent", - "description": "Commands are received from a parent controller." - }, - { - "value": "GUI", - "description": "Commands are received from a graphical user interface." - }, - { - "value": "fysical", - "description": "Commands are received from physical buttons or switches." - } - ], - "description": "Information about valid command sources recognized by the machine." - } - }, - "action": { - "default": "statusCheck", - "rules": { - "type": "enum", - "values": [ - { - "value": "statusCheck", - "description": "Checks the machine's state (mode, submode, operational status)." - }, - { - "value": "execMovement", - "description": "Allows control through auto or GUI setpoints." - }, - { - "value": "execSequence", - "description": "Allows execution of sequences through auto or GUI controls." - }, - { - "value": "emergencyStop", - "description": "Overrides all commands and stops the machine immediately (safety scenarios)." - } - ], - "description": "Defines the possible actions that can be performed on the machine." - } - }, - "sequences":{ - "default":{}, - "rules": { - "type": "object", - "schema": { - "startup": { - "default": ["starting","warmingup","operational"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Sequence of states for starting up the machine." - } - }, - "shutdown": { - "default": ["stopping","coolingdown","idle"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Sequence of states for shutting down the machine." - } - }, - "emergencystop": { - "default": ["emergencystop","off"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Sequence of states for an emergency stop." - } - }, - "boot": { - "default": ["idle","starting","warmingup","operational"], - "rules": { - "type": "set", - "itemType": "string", - "description": "Sequence of states for booting up the machine." - } - } - } - }, - "description": "Predefined sequences of states for the machine." - - }, - "calculationMode": { - "default": "medium", - "rules": { - "type": "enum", - "values": [ - { - "value": "low", - "description": "Calculations run at fixed intervals (time-based)." - }, - { - "value": "medium", - "description": "Calculations run when new setpoints arrive or measured changes occur (event-driven)." - }, - { - "value": "high", - "description": "Calculations run on all event-driven info, including every movement." - } - ], - "description": "The frequency at which calculations are performed." - } - } - } - \ No newline at end of file diff --git a/convert/definitions/angle.js b/convert/definitions/angle.js new file mode 100644 index 0000000..a2f091f --- /dev/null +++ b/convert/definitions/angle.js @@ -0,0 +1,49 @@ +var angle; + +angle = { + rad: { + name: { + singular: 'radian' + , plural: 'radians' + } + , to_anchor: 180/Math.PI + } +, deg: { + name: { + singular: 'degree' + , plural: 'degrees' + } + , to_anchor: 1 + } +, grad: { + name: { + singular: 'gradian' + , plural: 'gradians' + } + , to_anchor: 9/10 + } +, arcmin: { + name: { + singular: 'arcminute' + , plural: 'arcminutes' + } + , to_anchor: 1/60 + } +, arcsec: { + name: { + singular: 'arcsecond' + , plural: 'arcseconds' + } + , to_anchor: 1/3600 + } +}; + +module.exports = { + metric: angle +, _anchors: { + metric: { + unit: 'deg' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/apparentPower.js b/convert/definitions/apparentPower.js new file mode 100644 index 0000000..58d35c6 --- /dev/null +++ b/convert/definitions/apparentPower.js @@ -0,0 +1,49 @@ +var apparentPower; + +apparentPower = { + VA: { + name: { + singular: 'Volt-Ampere' + , plural: 'Volt-Amperes' + } + , to_anchor: 1 + } +, mVA: { + name: { + singular: 'Millivolt-Ampere' + , plural: 'Millivolt-Amperes' + } + , to_anchor: .001 + } +, kVA: { + name: { + singular: 'Kilovolt-Ampere' + , plural: 'Kilovolt-Amperes' + } + , to_anchor: 1000 + } +, MVA: { + name: { + singular: 'Megavolt-Ampere' + , plural: 'Megavolt-Amperes' + } + , to_anchor: 1000000 + } +, GVA: { + name: { + singular: 'Gigavolt-Ampere' + , plural: 'Gigavolt-Amperes' + } + , to_anchor: 1000000000 + } +}; + +module.exports = { + metric: apparentPower +, _anchors: { + metric: { + unit: 'VA' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/area.js b/convert/definitions/area.js new file mode 100644 index 0000000..20b374d --- /dev/null +++ b/convert/definitions/area.js @@ -0,0 +1,93 @@ +var metric + , imperial; + +metric = { + mm2: { + name: { + singular: 'Square Millimeter' + , plural: 'Square Millimeters' + } + , to_anchor: 1/1000000 + } +, cm2: { + name: { + singular: 'Centimeter' + , plural: 'Centimeters' + } + , to_anchor: 1/10000 + } +, m2: { + name: { + singular: 'Square Meter' + , plural: 'Square Meters' + } + , to_anchor: 1 + } +, ha: { + name: { + singular: 'Hectare' + , plural: 'Hectares' + } + , to_anchor: 10000 + } +, km2: { + name: { + singular: 'Square Kilometer' + , plural: 'Square Kilometers' + } + , to_anchor: 1000000 + } +}; + +imperial = { + 'in2': { + name: { + singular: 'Square Inch' + , plural: 'Square Inches' + } + , to_anchor: 1/144 + } +, yd2: { + name: { + singular: 'Square Yard' + , plural: 'Square Yards' + } + , to_anchor: 9 + } +, ft2: { + name: { + singular: 'Square Foot' + , plural: 'Square Feet' + } + , to_anchor: 1 + } +, ac: { + name: { + singular: 'Acre' + , plural: 'Acres' + } + , to_anchor: 43560 + } +, mi2: { + name: { + singular: 'Square Mile' + , plural: 'Square Miles' + } + , to_anchor: 27878400 + } +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 'm2' + , ratio: 10.7639 + } + , imperial: { + unit: 'ft2' + , ratio: 1/10.7639 + } + } +}; diff --git a/convert/definitions/current.js b/convert/definitions/current.js new file mode 100644 index 0000000..05775df --- /dev/null +++ b/convert/definitions/current.js @@ -0,0 +1,35 @@ +var current; + +current = { + A: { + name: { + singular: 'Ampere' + , plural: 'Amperes' + } + , to_anchor: 1 + } +, mA: { + name: { + singular: 'Milliampere' + , plural: 'Milliamperes' + } + , to_anchor: .001 + } +, kA: { + name: { + singular: 'Kiloampere' + , plural: 'Kiloamperes' + } + , to_anchor: 1000 + } +}; + +module.exports = { + metric: current +, _anchors: { + metric: { + unit: 'A' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/digital.js b/convert/definitions/digital.js new file mode 100644 index 0000000..e63a4a6 --- /dev/null +++ b/convert/definitions/digital.js @@ -0,0 +1,93 @@ +var bits + , bytes; + +bits = { + b: { + name: { + singular: 'Bit' + , plural: 'Bits' + } + , to_anchor: 1 + } +, Kb: { + name: { + singular: 'Kilobit' + , plural: 'Kilobits' + } + , to_anchor: 1024 + } +, Mb: { + name: { + singular: 'Megabit' + , plural: 'Megabits' + } + , to_anchor: 1048576 + } +, Gb: { + name: { + singular: 'Gigabit' + , plural: 'Gigabits' + } + , to_anchor: 1073741824 + } +, Tb: { + name: { + singular: 'Terabit' + , plural: 'Terabits' + } + , to_anchor: 1099511627776 + } +}; + +bytes = { + B: { + name: { + singular: 'Byte' + , plural: 'Bytes' + } + , to_anchor: 1 + } +, KB: { + name: { + singular: 'Kilobyte' + , plural: 'Kilobytes' + } + , to_anchor: 1024 + } +, MB: { + name: { + singular: 'Megabyte' + , plural: 'Megabytes' + } + , to_anchor: 1048576 + } +, GB: { + name: { + singular: 'Gigabyte' + , plural: 'Gigabytes' + } + , to_anchor: 1073741824 + } +, TB: { + name: { + singular: 'Terabyte' + , plural: 'Terabytes' + } + , to_anchor: 1099511627776 + } +}; + +module.exports = { + bits: bits +, bytes: bytes +, _anchors: { + bits: { + unit: 'b' + , ratio: 1/8 + } + , bytes: { + unit: 'B' + , ratio: 8 + } + } +}; diff --git a/convert/definitions/each.js b/convert/definitions/each.js new file mode 100644 index 0000000..0f4f331 --- /dev/null +++ b/convert/definitions/each.js @@ -0,0 +1,30 @@ +var metric + , imperial; + +metric = { + ea: { + name: { + singular: 'Each' + , plural: 'Each' + } + , to_anchor: 1 + }, + dz: { + name: { + singular: 'Dozen' + , plural: 'Dozens' + } + , to_anchor: 12 + } +}; + +module.exports = { + metric: metric +, imperial: {} +, _anchors: { + metric: { + unit: 'ea' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/energy.js b/convert/definitions/energy.js new file mode 100644 index 0000000..f885df7 --- /dev/null +++ b/convert/definitions/energy.js @@ -0,0 +1,63 @@ +var energy; + +energy = { + Wh: { + name: { + singular: 'Watt-hour' + , plural: 'Watt-hours' + } + , to_anchor: 3600 + } +, mWh: { + name: { + singular: 'Milliwatt-hour' + , plural: 'Milliwatt-hours' + } + , to_anchor: 3.6 + } +, kWh: { + name: { + singular: 'Kilowatt-hour' + , plural: 'Kilowatt-hours' + } + , to_anchor: 3600000 + } +, MWh: { + name: { + singular: 'Megawatt-hour' + , plural: 'Megawatt-hours' + } + , to_anchor: 3600000000 + } +, GWh: { + name: { + singular: 'Gigawatt-hour' + , plural: 'Gigawatt-hours' + } + , to_anchor: 3600000000000 + } +, J: { + name: { + singular: 'Joule' + , plural: 'Joules' + } + , to_anchor: 1 + } +, kJ: { + name: { + singular: 'Kilojoule' + , plural: 'Kilojoules' + } + , to_anchor: 1000 + } +}; + +module.exports = { + metric: energy +, _anchors: { + metric: { + unit: 'J' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/frequency.js b/convert/definitions/frequency.js new file mode 100644 index 0000000..c292e8b --- /dev/null +++ b/convert/definitions/frequency.js @@ -0,0 +1,78 @@ +var frequency; + +frequency = { + mHz: { + name: { + singular: 'millihertz' + , plural: 'millihertz' + } + , to_anchor: 1/1000 + } +, Hz: { + name: { + singular: 'hertz' + , plural: 'hertz' + } + , to_anchor: 1 + } +, kHz: { + name: { + singular: 'kilohertz' + , plural: 'kilohertz' + } + , to_anchor: 1000 + } +, MHz: { + name: { + singular: 'megahertz' + , plural: 'megahertz' + } + , to_anchor: 1000 * 1000 + } +, GHz: { + name: { + singular: 'gigahertz' + , plural: 'gigahertz' + } + , to_anchor: 1000 * 1000 * 1000 + } +, THz: { + name: { + singular: 'terahertz' + , plural: 'terahertz' + } + , to_anchor: 1000 * 1000 * 1000 * 1000 + } +, rpm: { + name: { + singular: 'rotation per minute' + , plural: 'rotations per minute' + } + , to_anchor: 1/60 + } +, "deg/s": { + name: { + singular: 'degree per second' + , plural: 'degrees per second' + } + , to_anchor: 1/360 + } +, "rad/s": { + name: { + singular: 'radian per second' + , plural: 'radians per second' + } + , to_anchor: 1/(Math.PI * 2) + } +}; + + +module.exports = { + metric: frequency +, _anchors: { + frequency: { + unit: 'hz' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/illuminance.js b/convert/definitions/illuminance.js new file mode 100644 index 0000000..eefb1f3 --- /dev/null +++ b/convert/definitions/illuminance.js @@ -0,0 +1,37 @@ +var metric, +imperial; + +metric = { + 'lx': { + name: { + singular: 'Lux', + plural: 'Lux' + }, + to_anchor: 1 + } +}; + +imperial = { + 'ft-cd': { + name: { + singular: 'Foot-candle', + plural: 'Foot-candles' + }, + to_anchor: 1 + } +}; + +module.exports = { + metric: metric, + imperial: imperial, + _anchors: { + metric: { + unit: 'lx', + ratio: 1/10.76391 + }, + imperial: { + unit: 'ft-cd', + ratio: 10.76391 + } + } +}; diff --git a/convert/definitions/length.js b/convert/definitions/length.js new file mode 100644 index 0000000..84a7adf --- /dev/null +++ b/convert/definitions/length.js @@ -0,0 +1,86 @@ +var metric, +imperial; + +metric = { + mm: { + name: { + singular: 'Millimeter', + plural: 'Millimeters' + }, + to_anchor: 1/1000 + }, + cm: { + name: { + singular: 'Centimeter', + plural: 'Centimeters' + }, + to_anchor: 1/100 + }, + m: { + name: { + singular: 'Meter', + plural: 'Meters' + }, + to_anchor: 1 + }, + km: { + name: { + singular: 'Kilometer', + plural: 'Kilometers' + }, + to_anchor: 1000 + } +}; + +imperial = { + 'in': { + name: { + singular: 'Inch', + plural: 'Inches' + }, + to_anchor: 1/12 + }, + yd: { + name: { + singular: 'Yard', + plural: 'Yards' + }, + to_anchor: 3 + }, + 'ft-us': { + name: { + singular: 'US Survey Foot', + plural: 'US Survey Feet' + }, + to_anchor: 1.000002 + }, + ft: { + name: { + singular: 'Foot', + plural: 'Feet' + }, + to_anchor: 1 + }, + mi: { + name: { + singular: 'Mile', + plural: 'Miles' + }, + to_anchor: 5280 + } +}; + +module.exports = { + metric: metric, + imperial: imperial, + _anchors: { + metric: { + unit: 'm', + ratio: 3.28084 + }, + imperial: { + unit: 'ft', + ratio: 1/3.28084 + } + } +}; diff --git a/convert/definitions/mass.js b/convert/definitions/mass.js new file mode 100644 index 0000000..7c60cb8 --- /dev/null +++ b/convert/definitions/mass.js @@ -0,0 +1,78 @@ +var metric + , imperial; + +metric = { + mcg: { + name: { + singular: 'Microgram' + , plural: 'Micrograms' + } + , to_anchor: 1/1000000 + } +, mg: { + name: { + singular: 'Milligram' + , plural: 'Milligrams' + } + , to_anchor: 1/1000 + } +, g: { + name: { + singular: 'Gram' + , plural: 'Grams' + } + , to_anchor: 1 + } +, kg: { + name: { + singular: 'Kilogram' + , plural: 'Kilograms' + } + , to_anchor: 1000 +} +, mt: { + name: { + singular: 'Metric Tonne' + , plural: 'Metric Tonnes' + } + , to_anchor: 1000000 + } +}; + +imperial = { + oz: { + name: { + singular: 'Ounce' + , plural: 'Ounces' + } + , to_anchor: 1/16 + } +, lb: { + name: { + singular: 'Pound' + , plural: 'Pounds' + } + , to_anchor: 1 +}, t: { + name: { + singular: 'Ton', + plural: 'Tons', + }, + to_anchor: 2000, + }, +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 'g' + , ratio: 1/453.592 + } + , imperial: { + unit: 'lb' + , ratio: 453.592 + } + } +}; diff --git a/convert/definitions/pace.js b/convert/definitions/pace.js new file mode 100644 index 0000000..1b5cdfa --- /dev/null +++ b/convert/definitions/pace.js @@ -0,0 +1,51 @@ +var metric + , imperial; + +metric = { + 'min/km': { + name: { + singular: 'Minute per kilometre' + , plural: 'Minutes per kilometre' + } + , to_anchor: 0.06 + } + ,'s/m': { + name: { + singular: 'Second per metre' + , plural: 'Seconds per metre' + } + , to_anchor: 1 + } +} + +imperial = { + 'min/mi': { + name: { + singular: 'Minute per mile' + , plural: 'Minutes per mile' + } + , to_anchor: 0.0113636 + } + , 's/ft': { + name: { + singular: 'Second per foot' + , plural: 'Seconds per foot' + } + , to_anchor: 1 + } +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 's/m' + , ratio: 0.3048 + } + , imperial: { + unit: 's/ft' + , ratio: 1/0.3048 + } + } +}; diff --git a/convert/definitions/partsPer.js b/convert/definitions/partsPer.js new file mode 100644 index 0000000..333a203 --- /dev/null +++ b/convert/definitions/partsPer.js @@ -0,0 +1,44 @@ +var metric + , imperial; + +metric = { + ppm: { + name: { + singular: 'Part-per Million' + , plural: 'Parts-per Million' + } + , to_anchor: 1 + } + , ppb: { + name: { + singular: 'Part-per Billion' + , plural: 'Parts-per Billion' + } + , to_anchor: .001 + } + , ppt: { + name: { + singular: 'Part-per Trillion' + , plural: 'Parts-per Trillion' + } + , to_anchor: .000001 + } + , ppq: { + name: { + singular: 'Part-per Quadrillion' + , plural: 'Parts-per Quadrillion' + } + , to_anchor: .000000001 + } +}; + +module.exports = { + metric: metric + , imperial: {} + , _anchors: { + metric: { + unit: 'ppm' + , ratio: .000001 + } + } +}; diff --git a/convert/definitions/power.js b/convert/definitions/power.js new file mode 100644 index 0000000..36896cc --- /dev/null +++ b/convert/definitions/power.js @@ -0,0 +1,49 @@ +var power; + +power = { + W: { + name: { + singular: 'Watt' + , plural: 'Watts' + } + , to_anchor: 1 + } +, mW: { + name: { + singular: 'Milliwatt' + , plural: 'Milliwatts' + } + , to_anchor: .001 + } +, kW: { + name: { + singular: 'Kilowatt' + , plural: 'Kilowatts' + } + , to_anchor: 1000 + } +, MW: { + name: { + singular: 'Megawatt' + , plural: 'Megawatts' + } + , to_anchor: 1000000 + } +, GW: { + name: { + singular: 'Gigawatt' + , plural: 'Gigawatts' + } + , to_anchor: 1000000000 + } +}; + +module.exports = { + metric: power +, _anchors: { + metric: { + unit: 'W' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/pressure.js b/convert/definitions/pressure.js new file mode 100644 index 0000000..91519ff --- /dev/null +++ b/convert/definitions/pressure.js @@ -0,0 +1,86 @@ +var metric + , imperial; + +metric = { + Pa: { + name: { + singular: 'pascal' + , plural: 'pascals' + } + , to_anchor: 1/1000 + } +, kPa: { + name: { + singular: 'kilopascal' + , plural: 'kilopascals' + } + , to_anchor: 1 + } +, MPa: { + name: { + singular: 'megapascal' + , plural: 'megapascals' + } + , to_anchor: 1000 + } +, hPa: { + name: { + singular: 'hectopascal' + , plural: 'hectopascals' + } + , to_anchor: 1/10 + } +, bar: { + name: { + singular: 'bar' + , plural: 'bar' + } + , to_anchor: 100 + } + , mbar: { + name: { + singular: 'mbar' + , plural: 'mbar' + } + , to_anchor: 1/10 + } +, torr: { + name: { + singular: 'torr' + , plural: 'torr' + } + , to_anchor: 101325/760000 + } +}; + +imperial = { + psi: { + name: { + singular: 'pound per square inch' + , plural: 'pounds per square inch' + } + , to_anchor: 1/1000 + } +, ksi: { + name: { + singular: 'kilopound per square inch' + , plural: 'kilopound per square inch' + } + , to_anchor: 1 + } +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 'kPa' + , ratio: 0.00014503768078 + } + , imperial: { + unit: 'psi' + , ratio: 1/0.00014503768078 + } + } +}; diff --git a/convert/definitions/reactiveEnergy.js b/convert/definitions/reactiveEnergy.js new file mode 100644 index 0000000..3d7e1a8 --- /dev/null +++ b/convert/definitions/reactiveEnergy.js @@ -0,0 +1,49 @@ +var reactiveEnergy; + +reactiveEnergy = { + VARh: { + name: { + singular: 'Volt-Ampere Reactive Hour' + , plural: 'Volt-Amperes Reactive Hour' + } + , to_anchor: 1 + } +, mVARh: { + name: { + singular: 'Millivolt-Ampere Reactive Hour' + , plural: 'Millivolt-Amperes Reactive Hour' + } + , to_anchor: .001 + } +, kVARh: { + name: { + singular: 'Kilovolt-Ampere Reactive Hour' + , plural: 'Kilovolt-Amperes Reactive Hour' + } + , to_anchor: 1000 + } +, MVARh: { + name: { + singular: 'Megavolt-Ampere Reactive Hour' + , plural: 'Megavolt-Amperes Reactive Hour' + } + , to_anchor: 1000000 + } +, GVARh: { + name: { + singular: 'Gigavolt-Ampere Reactive Hour' + , plural: 'Gigavolt-Amperes Reactive Hour' + } + , to_anchor: 1000000000 + } +}; + +module.exports = { + metric: reactiveEnergy +, _anchors: { + metric: { + unit: 'VARh' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/reactivePower.js b/convert/definitions/reactivePower.js new file mode 100644 index 0000000..348da53 --- /dev/null +++ b/convert/definitions/reactivePower.js @@ -0,0 +1,49 @@ +var reactivePower; + +reactivePower = { + VAR: { + name: { + singular: 'Volt-Ampere Reactive' + , plural: 'Volt-Amperes Reactive' + } + , to_anchor: 1 + } +, mVAR: { + name: { + singular: 'Millivolt-Ampere Reactive' + , plural: 'Millivolt-Amperes Reactive' + } + , to_anchor: .001 + } +, kVAR: { + name: { + singular: 'Kilovolt-Ampere Reactive' + , plural: 'Kilovolt-Amperes Reactive' + } + , to_anchor: 1000 + } +, MVAR: { + name: { + singular: 'Megavolt-Ampere Reactive' + , plural: 'Megavolt-Amperes Reactive' + } + , to_anchor: 1000000 + } +, GVAR: { + name: { + singular: 'Gigavolt-Ampere Reactive' + , plural: 'Gigavolt-Amperes Reactive' + } + , to_anchor: 1000000000 + } +}; + +module.exports = { + metric: reactivePower +, _anchors: { + metric: { + unit: 'VAR' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/speed.js b/convert/definitions/speed.js new file mode 100644 index 0000000..81b3567 --- /dev/null +++ b/convert/definitions/speed.js @@ -0,0 +1,58 @@ +var metric + , imperial; + +metric = { + 'm/s': { + name: { + singular: 'Metre per second' + , plural: 'Metres per second' + } + , to_anchor: 3.6 + } +, 'km/h': { + name: { + singular: 'Kilometre per hour' + , plural: 'Kilometres per hour' + } + , to_anchor: 1 + } +} + + imperial = { + 'm/h': { + name: { + singular: 'Mile per hour' + , plural: 'Miles per hour' + } + , to_anchor: 1 + } + , knot: { + name: { + singular: 'Knot' + , plural: 'Knots' + } + , to_anchor: 1.150779 + } + , 'ft/s': { + name: { + singular: 'Foot per second' + , plural: 'Feet per second' + } + , to_anchor: 0.681818 + } +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 'km/h' + , ratio: 1/1.609344 + } + , imperial: { + unit: 'm/h' + , ratio: 1.609344 + } + } +}; diff --git a/convert/definitions/temperature.js b/convert/definitions/temperature.js new file mode 100644 index 0000000..a118dbf --- /dev/null +++ b/convert/definitions/temperature.js @@ -0,0 +1,55 @@ +var metric + , imperial; + +metric = { + C: { + name: { + singular: 'degree Celsius' + , plural: 'degrees Celsius' + } + , to_anchor: 1 + , anchor_shift: 0 + }, + K: { + name: { + singular: 'degree Kelvin' + , plural: 'degrees Kelvin' + } + , to_anchor: 1 + , anchor_shift: 273.15 + } +}; + +imperial = { + F: { + name: { + singular: 'degree Fahrenheit' + , plural: 'degrees Fahrenheit' + } + , to_anchor: 1 + }, + R: { + name: { + singular: 'degree Rankine' + , plural: 'degrees Rankine' + } + , to_anchor: 1 + , anchor_shift: 459.67 + } +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 'C' + , transform: function (C) { return C / (5/9) + 32 } + } + , imperial: { + unit: 'F' + , transform: function (F) { return (F - 32) * (5/9) } + } + } +}; + diff --git a/convert/definitions/time.js b/convert/definitions/time.js new file mode 100644 index 0000000..fc1ad32 --- /dev/null +++ b/convert/definitions/time.js @@ -0,0 +1,86 @@ +var time; +var daysInYear = 365.25; + +time = { + ns: { + name: { + singular: 'Nanosecond' + , plural: 'Nanoseconds' + } + , to_anchor: 1/1000000000 + } +, mu: { + name: { + singular: 'Microsecond' + , plural: 'Microseconds' + } + , to_anchor: 1/1000000 + } +, ms: { + name: { + singular: 'Millisecond' + , plural: 'Milliseconds' + } + , to_anchor: 1/1000 + } +, s: { + name: { + singular: 'Second' + , plural: 'Seconds' + } + , to_anchor: 1 + } +, min: { + name: { + singular: 'Minute' + , plural: 'Minutes' + } + , to_anchor: 60 + } +, h: { + name: { + singular: 'Hour' + , plural: 'Hours' + } + , to_anchor: 60 * 60 + } +, d: { + name: { + singular: 'Day' + , plural: 'Days' + } + , to_anchor: 60 * 60 * 24 + } +, week: { + name: { + singular: 'Week' + , plural: 'Weeks' + } + , to_anchor: 60 * 60 * 24 * 7 + } +, month: { + name: { + singular: 'Month' + , plural: 'Months' + } + , to_anchor: 60 * 60 * 24 * daysInYear / 12 + } +, year: { + name: { + singular: 'Year' + , plural: 'Years' + } + , to_anchor: 60 * 60 * 24 * daysInYear + } +}; + + +module.exports = { + metric: time +, _anchors: { + metric: { + unit: 's' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/voltage.js b/convert/definitions/voltage.js new file mode 100644 index 0000000..9234f42 --- /dev/null +++ b/convert/definitions/voltage.js @@ -0,0 +1,35 @@ +var voltage; + +voltage = { + V: { + name: { + singular: 'Volt' + , plural: 'Volts' + } + , to_anchor: 1 + } +, mV: { + name: { + singular: 'Millivolt' + , plural: 'Millivolts' + } + , to_anchor: .001 + } +, kV: { + name: { + singular: 'Kilovolt' + , plural: 'Kilovolts' + } + , to_anchor: 1000 + } +}; + +module.exports = { + metric: voltage +, _anchors: { + metric: { + unit: 'V' + , ratio: 1 + } + } +}; diff --git a/convert/definitions/volume.js b/convert/definitions/volume.js new file mode 100644 index 0000000..ee35057 --- /dev/null +++ b/convert/definitions/volume.js @@ -0,0 +1,200 @@ +var metric + , imperial; + +metric = { + mm3: { + name: { + singular: 'Cubic Millimeter' + , plural: 'Cubic Millimeters' + } + , to_anchor: 1/1000000 + } +, cm3: { + name: { + singular: 'Cubic Centimeter' + , plural: 'Cubic Centimeters' + } + , to_anchor: 1/1000 + } +, ml: { + name: { + singular: 'Millilitre' + , plural: 'Millilitres' + } + , to_anchor: 1/1000 + } +, cl: { + name: { + singular: 'Centilitre' + , plural: 'Centilitres' + } + , to_anchor: 1/100 + } +, dl: { + name: { + singular: 'Decilitre' + , plural: 'Decilitres' + } + , to_anchor: 1/10 + } +, l: { + name: { + singular: 'Litre' + , plural: 'Litres' + } + , to_anchor: 1 + } +, kl: { + name: { + singular: 'Kilolitre' + , plural: 'Kilolitres' + } + , to_anchor: 1000 + } +, m3: { + name: { + singular: 'Cubic meter' + , plural: 'Cubic meters' + } + , to_anchor: 1000 + } +, km3: { + name: { + singular: 'Cubic kilometer' + , plural: 'Cubic kilometers' + } + , to_anchor: 1000000000000 + } + +// Swedish units +, krm: { + name: { + singular: 'Matsked' + , plural: 'Matskedar' + } + , to_anchor: 1/1000 +} +, tsk: { + name: { + singular: 'Tesked' + , plural: 'Teskedar' + } + , to_anchor: 5/1000 + } +, msk: { + name: { + singular: 'Matsked' + , plural: 'Matskedar' + } + , to_anchor: 15/1000 + } +, kkp: { + name: { + singular: 'Kaffekopp' + , plural: 'Kaffekoppar' + } + , to_anchor: 150/1000 + } +, glas: { + name: { + singular: 'Glas' + , plural: 'Glas' + } + , to_anchor: 200/1000 + } +, kanna: { + name: { + singular: 'Kanna' + , plural: 'Kannor' + } + , to_anchor: 2.617 + } +}; + +imperial = { + tsp: { + name: { + singular: 'Teaspoon' + , plural: 'Teaspoons' + } + , to_anchor: 1/6 + } +, Tbs: { + name: { + singular: 'Tablespoon' + , plural: 'Tablespoons' + } + , to_anchor: 1/2 + } +, in3: { + name: { + singular: 'Cubic inch' + , plural: 'Cubic inches' + } + , to_anchor: 0.55411 + } +, 'fl-oz': { + name: { + singular: 'Fluid Ounce' + , plural: 'Fluid Ounces' + } + , to_anchor: 1 + } +, cup: { + name: { + singular: 'Cup' + , plural: 'Cups' + } + , to_anchor: 8 + } +, pnt: { + name: { + singular: 'Pint' + , plural: 'Pints' + } + , to_anchor: 16 + } +, qt: { + name: { + singular: 'Quart' + , plural: 'Quarts' + } + , to_anchor: 32 + } +, gal: { + name: { + singular: 'Gallon' + , plural: 'Gallons' + } + , to_anchor: 128 + } +, ft3: { + name: { + singular: 'Cubic foot' + , plural: 'Cubic feet' + } + , to_anchor: 957.506 + } +, yd3: { + name: { + singular: 'Cubic yard' + , plural: 'Cubic yards' + } + , to_anchor: 25852.7 + } +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 'l' + , ratio: 33.8140226 + } + , imperial: { + unit: 'fl-oz' + , ratio: 1/33.8140226 + } + } +}; diff --git a/convert/definitions/volumeFlowRate.js b/convert/definitions/volumeFlowRate.js new file mode 100644 index 0000000..b6cd84f --- /dev/null +++ b/convert/definitions/volumeFlowRate.js @@ -0,0 +1,282 @@ +var metric + , imperial; + +metric = { + 'mm3/s': { + name: { + singular: 'Cubic Millimeter per second' + , plural: 'Cubic Millimeters per second' + } + , to_anchor: 1/1000000 + } +, 'cm3/s': { + name: { + singular: 'Cubic Centimeter per second' + , plural: 'Cubic Centimeters per second' + } + , to_anchor: 1/1000 + } +, 'ml/s': { + name: { + singular: 'Millilitre per second' + , plural: 'Millilitres per second' + } + , to_anchor: 1/1000 + } +, 'cl/s': { + name: { + singular: 'Centilitre per second' + , plural: 'Centilitres per second' + } + , to_anchor: 1/100 + } +, 'dl/s': { + name: { + singular: 'Decilitre per second' + , plural: 'Decilitres per second' + } + , to_anchor: 1/10 + } +, 'l/s': { + name: { + singular: 'Litre per second' + , plural: 'Litres per second' + } + , to_anchor: 1 + } +, 'l/min': { + name: { + singular: 'Litre per minute' + , plural: 'Litres per minute' + } + , to_anchor: 1/60 + } +, 'l/h': { + name: { + singular: 'Litre per hour' + , plural: 'Litres per hour' + } + , to_anchor: 1/3600 + } +, 'kl/s': { + name: { + singular: 'Kilolitre per second' + , plural: 'Kilolitres per second' + } + , to_anchor: 1000 + } +, 'kl/min': { + name: { + singular: 'Kilolitre per minute' + , plural: 'Kilolitres per minute' + } + , to_anchor: 50/3 + } +, 'kl/h': { + name: { + singular: 'Kilolitre per hour' + , plural: 'Kilolitres per hour' + } + , to_anchor: 5/18 + } +, 'm3/s': { + name: { + singular: 'Cubic meter per second' + , plural: 'Cubic meters per second' + } + , to_anchor: 1000 + } +, 'm3/min': { + name: { + singular: 'Cubic meter per minute' + , plural: 'Cubic meters per minute' + } + , to_anchor: 50/3 + } +, 'm3/h': { + name: { + singular: 'Cubic meter per hour' + , plural: 'Cubic meters per hour' + } + , to_anchor: 5/18 + } +, 'km3/s': { + name: { + singular: 'Cubic kilometer per second' + , plural: 'Cubic kilometers per second' + } + , to_anchor: 1000000000000 + } +}; + +imperial = { + 'tsp/s': { + name: { + singular: 'Teaspoon per second' + , plural: 'Teaspoons per second' + } + , to_anchor: 1/6 + } +, 'Tbs/s': { + name: { + singular: 'Tablespoon per second' + , plural: 'Tablespoons per second' + } + , to_anchor: 1/2 + } +, 'in3/s': { + name: { + singular: 'Cubic inch per second' + , plural: 'Cubic inches per second' + } + , to_anchor: 0.55411 + } +, 'in3/min': { + name: { + singular: 'Cubic inch per minute' + , plural: 'Cubic inches per minute' + } + , to_anchor: 0.55411/60 + } +, 'in3/h': { + name: { + singular: 'Cubic inch per hour' + , plural: 'Cubic inches per hour' + } + , to_anchor: 0.55411/3600 + } +, 'fl-oz/s': { + name: { + singular: 'Fluid Ounce per second' + , plural: 'Fluid Ounces per second' + } + , to_anchor: 1 + } +, 'fl-oz/min': { + name: { + singular: 'Fluid Ounce per minute' + , plural: 'Fluid Ounces per minute' + } + , to_anchor: 1/60 + } +, 'fl-oz/h': { + name: { + singular: 'Fluid Ounce per hour' + , plural: 'Fluid Ounces per hour' + } + , to_anchor: 1/3600 + } +, 'cup/s': { + name: { + singular: 'Cup per second' + , plural: 'Cups per second' + } + , to_anchor: 8 + } +, 'pnt/s': { + name: { + singular: 'Pint per second' + , plural: 'Pints per second' + } + , to_anchor: 16 + } +, 'pnt/min': { + name: { + singular: 'Pint per minute' + , plural: 'Pints per minute' + } + , to_anchor: 4/15 + } +, 'pnt/h': { + name: { + singular: 'Pint per hour' + , plural: 'Pints per hour' + } + , to_anchor: 1/225 + } +, 'qt/s': { + name: { + singular: 'Quart per second' + , plural: 'Quarts per second' + } + , to_anchor: 32 + } +, 'gal/s': { + name: { + singular: 'Gallon per second' + , plural: 'Gallons per second' + } + , to_anchor: 128 + } +, 'gal/min': { + name: { + singular: 'Gallon per minute' + , plural: 'Gallons per minute' + } + , to_anchor: 32/15 + } +, 'gal/h': { + name: { + singular: 'Gallon per hour' + , plural: 'Gallons per hour' + } + , to_anchor: 8/225 + } +, 'ft3/s': { + name: { + singular: 'Cubic foot per second' + , plural: 'Cubic feet per second' + } + , to_anchor: 957.506 + } +, 'ft3/min': { + name: { + singular: 'Cubic foot per minute' + , plural: 'Cubic feet per minute' + } + , to_anchor: 957.506/60 + } +, 'ft3/h': { + name: { + singular: 'Cubic foot per hour' + , plural: 'Cubic feet per hour' + } + , to_anchor: 957.506/3600 + } +, 'yd3/s': { + name: { + singular: 'Cubic yard per second' + , plural: 'Cubic yards per second' + } + , to_anchor: 25852.7 + } +, 'yd3/min': { + name: { + singular: 'Cubic yard per minute' + , plural: 'Cubic yards per minute' + } + , to_anchor: 25852.7/60 + } +, 'yd3/h': { + name: { + singular: 'Cubic yard per hour' + , plural: 'Cubic yards per hour' + } + , to_anchor: 25852.7/3600 + } +}; + +module.exports = { + metric: metric +, imperial: imperial +, _anchors: { + metric: { + unit: 'l/s' + , ratio: 33.8140227 + } + , imperial: { + unit: 'fl-oz/s' + , ratio: 1/33.8140227 + } + } +}; diff --git a/convert/fysics.js b/convert/fysics.js new file mode 100644 index 0000000..be9b9bc --- /dev/null +++ b/convert/fysics.js @@ -0,0 +1,160 @@ +/* +Copyright: +Year : (c) 2023 +Author : Rene De Ren +Contact details : zn375ix3@gmail.com +Location : The Netherlands + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files +(the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The author shall be notified of any and all improvements or adaptations this software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +class Fysics{ + + constructor(){ + + //gasses + this.air_density = 0; // weight of air + this.atm_pressure = 1.01325 ; //atm pressure at sea level + this.earth_gravity = 9.80665 ; // acceleration of standard gravity on earth in m/s2 + this.water_molar_mass = 18.01528 // g/mol + this.num_moles_water = 6.022 * 1023; // number of moles in water + this.water_density = 997 ; // this.water_molar_mass * this.num_moles_water // water density in kg/m3; + + //load converter + this.convert = require('./index'); + + // o2 solubility curve based on pressure and temp + this.o2Solubility = { + 1: // abs bar + { + x:[0,5,10,15,20,25,30,35,40,45,50], // temp in degrees celcius + y:[14.6,12.8,11.3,10.1,9.1,8.3,7.6,7,6.5,6,5.6], // mg/l + }, + 2: // abs bar + { + x:[0,5,10,15,20,25,30,35,40,45,50], // temp in degrees celcius + y:[29.2,25.5,22.6,20.2,18.2,16.5,15.2,14,12.9,12,11.3], // mg/l + }, + 4: // abs bar + { + x:[0,5,10,15,20,25,30,35,40,45,50], // temp in degrees celcius + y:[58.4,51.1,45.1,40.3,36.4,33.1,30.3,27.9,25.9,24,22.7], // mg/l + }, + } + + } + + /*------------------- functions -------------------*/ + //use input to calculate air density in kg/m3 is valid up to 100 degrees + //pressure in bar RH in % and temp in degrees celcius + // Antoine Equation is, Log P = A - B / ( T + C ) + // D8 = temp , d7 = RH , pressure in mbar = d6 + //=1.2923*(273.15/(273.15+temp))*(((pressure*100000)-0.3783*((((MACHT(10,(8.07-(1730.63/(233.43+temp)))))*1000/760)*RH)*100))/(1.01325*100000)) + /* + calc_air_dens(pressure,RH,temp){ + + let air_density = + 1.2923 * + ( + 273.15 / ( 273.15 + temp ) + ) + * + ( + ( + ( + pressure * 100000 + ) + - 0.3783 * + ( + ( + ( + ( + Math.pow( 10, ( 8.07 - ( 1730.63 / ( 233.43 + temp) ) ) ) + ) + *1000/760 + ) + *RH + ) + *100 + ) + ) + / (this.atm_pressure * 100000 ) + ); + + return air_density ; + } + */ + + calc_air_dens(pressure, RH, temp) { + const Rd = 287.05; // Specific gas constant for dry air in J/(kg·K) + const Rv = 461.495; // Specific gas constant for water vapor in J/(kg·K) + + // Convert temperature to Kelvin + const T = temp + 273.15; + + // Antoine constants for water vapor + const A = 8.07131; + const B = 1730.63; + const C = 233.426; + + // Calculate saturation vapor pressure (e_s) using the Antoine equation (in hPa) + const e_s = Math.pow(10, (A - (B / (C + temp)))); + + // Actual vapor pressure (e) in hPa + const e = RH * e_s / 100; + + // Convert pressure to Pascals + const pressurePa = this.convert(pressure).from('mbar').to('Pa'); + + // Partial pressure of dry air (Pa) + const p_d = pressurePa - (e * 100); + + // Air density (kg/m³) + const air_density = (p_d / (Rd * T)) + ((e * 100) / (Rv * T)); + + return air_density; + } + + //convert height to pressure ( density => kg/m3 , height => meter) output is in bar + heigth_to_pressure(density,height){ + + //calc pressure + let pressure = density * this.earth_gravity * height; + //convert Pa to bar + pressure = this.convert(pressure).from('Pa').to('mbar'); + + return pressure; + } + + //input is in meters ! + calc_volume(height,width,length){ + let result = 0; + result = height * width * length; + return result ; + } + + +} + +/* +let fysics = new Fysics(); +console.log("converted pressure : " + fysics.heigth_to_pressure(fysics.water_density,10) + " mbar "); +console.log( "air density : " + fysics.calc_air_dens(1.012,0,0) + " kg / m3" ); + +//*/ + +module.exports = Fysics; \ No newline at end of file diff --git a/convert/index.js b/convert/index.js new file mode 100644 index 0000000..0734221 --- /dev/null +++ b/convert/index.js @@ -0,0 +1,304 @@ +var convert + , keys = require('./lodash/lodash.keys') + , each = require('./lodash/lodash.foreach') + , measures = { + length: require('./definitions/length') + , area: require('./definitions/area') + , mass: require('./definitions/mass') + , volume: require('./definitions/volume') + , each: require('./definitions/each') + , temperature: require('./definitions/temperature') + , time: require('./definitions/time') + , digital: require('./definitions/digital') + , partsPer: require('./definitions/partsPer') + , speed: require('./definitions/speed') + , pace: require('./definitions/pace') + , pressure: require('./definitions/pressure') + , current: require('./definitions/current') + , voltage: require('./definitions/voltage') + , power: require('./definitions/power') + , reactivePower: require('./definitions/reactivePower') + , apparentPower: require('./definitions/apparentPower') + , energy: require('./definitions/energy') + , reactiveEnergy: require('./definitions/reactiveEnergy') + , volumeFlowRate: require('./definitions/volumeFlowRate') + , illuminance: require('./definitions/illuminance') + , frequency: require('./definitions/frequency') + , angle : require('./definitions/angle') + } + , Converter; + +Converter = function (numerator, denominator) { + if(denominator) + this.val = numerator / denominator; + else + this.val = numerator; +}; + +/** +* Lets the converter know the source unit abbreviation +*/ +Converter.prototype.from = function (from) { + if(this.destination) + throw new Error('.from must be called before .to'); + + this.origin = this.getUnit(from); + + if(!this.origin) { + this.throwUnsupportedUnitError(from); + } + + return this; +}; + +/** +* Converts the unit and returns the value +*/ +Converter.prototype.to = function (to) { + if(!this.origin) + throw new Error('.to must be called after .from'); + + this.destination = this.getUnit(to); + + var result + , transform; + + if(!this.destination) { + this.throwUnsupportedUnitError(to); + } + + // Don't change the value if origin and destination are the same + if (this.origin.abbr === this.destination.abbr) { + return this.val; + } + + // You can't go from liquid to mass, for example + if(this.destination.measure != this.origin.measure) { + throw new Error('Cannot convert incompatible measures of ' + + this.destination.measure + ' and ' + this.origin.measure); + } + + /** + * Convert from the source value to its anchor inside the system + */ + result = this.val * this.origin.unit.to_anchor; + + /** + * For some changes it's a simple shift (C to K) + * So we'll add it when convering into the unit (later) + * and subtract it when converting from the unit + */ + if (this.origin.unit.anchor_shift) { + result -= this.origin.unit.anchor_shift + } + + /** + * Convert from one system to another through the anchor ratio. Some conversions + * aren't ratio based or require more than a simple shift. We can provide a custom + * transform here to provide the direct result + */ + if(this.origin.system != this.destination.system) { + transform = measures[this.origin.measure]._anchors[this.origin.system].transform; + if (typeof transform === 'function') { + result = transform(result) + } + else { + result *= measures[this.origin.measure]._anchors[this.origin.system].ratio; + } + } + + /** + * This shift has to be done after the system conversion business + */ + if (this.destination.unit.anchor_shift) { + result += this.destination.unit.anchor_shift; + } + + /** + * Convert to another unit inside the destination system + */ + return result / this.destination.unit.to_anchor; +}; + +/** +* Converts the unit to the best available unit. +*/ +Converter.prototype.toBest = function(options) { + if(!this.origin) + throw new Error('.toBest must be called after .from'); + + var options = Object.assign({ + exclude: [], + cutOffNumber: 1, + }, options) + + var best; + /** + Looks through every possibility for the 'best' available unit. + i.e. Where the value has the fewest numbers before the decimal point, + but is still higher than 1. + */ + each(this.possibilities(), function(possibility) { + var unit = this.describe(possibility); + var isIncluded = options.exclude.indexOf(possibility) === -1; + + if (isIncluded && unit.system === this.origin.system) { + var result = this.to(possibility); + if (!best || (result >= options.cutOffNumber && result < best.val)) { + best = { + val: result, + unit: possibility, + singular: unit.singular, + plural: unit.plural + }; + } + } + }.bind(this)); + + return best; +} + +/** +* Finds the unit +*/ +Converter.prototype.getUnit = function (abbr) { + var found; + + each(measures, function (systems, measure) { + each(systems, function (units, system) { + if(system == '_anchors') + return false; + + each(units, function (unit, testAbbr) { + if(testAbbr == abbr) { + found = { + abbr: abbr + , measure: measure + , system: system + , unit: unit + }; + return false; + } + }); + + if(found) + return false; + }); + + if(found) + return false; + }); + + return found; +}; + +var describe = function(resp) { + return { + abbr: resp.abbr + , measure: resp.measure + , system: resp.system + , singular: resp.unit.name.singular + , plural: resp.unit.name.plural + }; +} + +/** +* An alias for getUnit +*/ +Converter.prototype.describe = function (abbr) { + var resp = Converter.prototype.getUnit(abbr); + var desc = null; + + try { + desc = describe(resp); + } catch(err) { + this.throwUnsupportedUnitError(abbr); + } + + return desc; +}; + +/** +* Detailed list of all supported units +*/ +Converter.prototype.list = function (measure) { + var list = []; + + each(measures, function (systems, testMeasure) { + if(measure && measure !== testMeasure) + return; + + each(systems, function (units, system) { + if(system == '_anchors') + return false; + + each(units, function (unit, abbr) { + list = list.concat(describe({ + abbr: abbr, + measure: testMeasure + , system: system + , unit: unit + })); + }); + }); + }); + + return list; +}; + +Converter.prototype.throwUnsupportedUnitError = function (what) { + var validUnits = []; + + each(measures, function (systems, measure) { + each(systems, function (units, system) { + if(system == '_anchors') + return false; + + validUnits = validUnits.concat(keys(units)); + }); + }); + + throw new Error('Unsupported unit ' + what + ', use one of: ' + validUnits.join(', ')); +} + +/** +* Returns the abbreviated measures that the value can be +* converted to. +*/ +Converter.prototype.possibilities = function (measure) { + var possibilities = []; + if(!this.origin && !measure) { + each(keys(measures), function (measure){ + each(measures[measure], function (units, system) { + if(system == '_anchors') + return false; + + possibilities = possibilities.concat(keys(units)); + }); + }); + } else { + measure = measure || this.origin.measure; + each(measures[measure], function (units, system) { + if(system == '_anchors') + return false; + + possibilities = possibilities.concat(keys(units)); + }); + } + + return possibilities; +}; + +/** +* Returns the abbreviated measures that the value can be +* converted to. +*/ +Converter.prototype.measures = function () { + return keys(measures); +}; + +convert = function (value) { + return new Converter(value); +}; + +module.exports = convert; diff --git a/convert/lodash/lodash._basebind/LICENSE.txt b/convert/lodash/lodash._basebind/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._basebind/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._basebind/README.md b/convert/lodash/lodash._basebind/README.md new file mode 100644 index 0000000..55d05fb --- /dev/null +++ b/convert/lodash/lodash._basebind/README.md @@ -0,0 +1,15 @@ +# lodash._basebind v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `baseBind` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._basebind/index.js b/convert/lodash/lodash._basebind/index.js new file mode 100644 index 0000000..6cf782d --- /dev/null +++ b/convert/lodash/lodash._basebind/index.js @@ -0,0 +1,58 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseCreate = require('./../lodash._basecreate'), + isObject = require('./../lodash.isobject'), + setBindData = require('./../lodash._setbinddata'); + +/** + * Used for `Array` method references. + * + * Normally `Array.prototype` would suffice, however, using an array literal + * avoids issues in Narwhal. + */ +var arrayRef = []; + +/** Native method shortcuts */ +var push = arrayRef.push; + +/** + * The base implementation of `_.bind` that creates the bound function and + * sets its meta data. + * + * @private + * @param {Array} bindData The bind data array. + * @returns {Function} Returns the new bound function. + */ +function baseBind(bindData) { + var func = bindData[0], + partialArgs = bindData[2], + thisArg = bindData[4]; + + function bound() { + // `Function#bind` spec + // http://es5.github.io/#x15.3.4.5 + if (partialArgs) { + var args = partialArgs.slice(); + push.apply(args, arguments); + } + // mimic the constructor's `return` behavior + // http://es5.github.io/#x13.2.2 + if (this instanceof bound) { + // ensure `new bound` is an instance of `func` + var thisBinding = baseCreate(func.prototype), + result = func.apply(thisBinding, args || arguments); + return isObject(result) ? result : thisBinding; + } + return func.apply(thisArg, args || arguments); + } + setBindData(bound, bindData); + return bound; +} + +module.exports = baseBind; diff --git a/convert/lodash/lodash._basebind/package.json b/convert/lodash/lodash._basebind/package.json new file mode 100644 index 0000000..e452d30 --- /dev/null +++ b/convert/lodash/lodash._basebind/package.json @@ -0,0 +1,21 @@ +{ + "name": "lodash._basebind", + "version": "2.3.0", + "description": "The internal Lo-Dash function `baseBind` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._basecreate": "~2.3.0", + "lodash.isobject": "~2.3.0", + "lodash._setbinddata": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash._basecreate/LICENSE.txt b/convert/lodash/lodash._basecreate/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._basecreate/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._basecreate/README.md b/convert/lodash/lodash._basecreate/README.md new file mode 100644 index 0000000..6c039a8 --- /dev/null +++ b/convert/lodash/lodash._basecreate/README.md @@ -0,0 +1,15 @@ +# lodash._basecreate v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `baseCreate` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._basecreate/index.js b/convert/lodash/lodash._basecreate/index.js new file mode 100644 index 0000000..c6fc38a --- /dev/null +++ b/convert/lodash/lodash._basecreate/index.js @@ -0,0 +1,42 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var isObject = require('./../lodash.isobject'), + noop = require('./../lodash.noop'), + reNative = require('./../lodash._renative'); + +/* Native method shortcuts for methods with the same name as other `lodash` methods */ +var nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ +function baseCreate(prototype, properties) { + return isObject(prototype) ? nativeCreate(prototype) : {}; +} +// fallback for browsers without `Object.create` +if (!nativeCreate) { + baseCreate = (function() { + function Object() {} + return function(prototype) { + if (isObject(prototype)) { + Object.prototype = prototype; + var result = new Object; + Object.prototype = null; + } + return result || global.Object(); + }; + }()); +} + +module.exports = baseCreate; diff --git a/convert/lodash/lodash._basecreate/package.json b/convert/lodash/lodash._basecreate/package.json new file mode 100644 index 0000000..6a72ca2 --- /dev/null +++ b/convert/lodash/lodash._basecreate/package.json @@ -0,0 +1,21 @@ +{ + "name": "lodash._basecreate", + "version": "2.3.0", + "description": "The internal Lo-Dash function `baseCreate` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash.isobject": "~2.3.0", + "lodash.noop": "~2.3.0", + "lodash._renative": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash._basecreatecallback/LICENSE.txt b/convert/lodash/lodash._basecreatecallback/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._basecreatecallback/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._basecreatecallback/README.md b/convert/lodash/lodash._basecreatecallback/README.md new file mode 100644 index 0000000..ff8a676 --- /dev/null +++ b/convert/lodash/lodash._basecreatecallback/README.md @@ -0,0 +1,15 @@ +# lodash._basecreatecallback v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `baseCreateCallback` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._basecreatecallback/index.js b/convert/lodash/lodash._basecreatecallback/index.js new file mode 100644 index 0000000..e60dc44 --- /dev/null +++ b/convert/lodash/lodash._basecreatecallback/index.js @@ -0,0 +1,80 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var bind = require('./../lodash.bind'), + identity = require('./../lodash.identity'), + setBindData = require('./../lodash._setbinddata'), + support = require('./../lodash.support'); + +/** Used to detected named functions */ +var reFuncName = /^\s*function[ \n\r\t]+\w/; + +/** Used to detect functions containing a `this` reference */ +var reThis = /\bthis\b/; + +/** Native method shortcuts */ +var fnToString = Function.prototype.toString; + +/** + * The base implementation of `_.createCallback` without support for creating + * "_.pluck" or "_.where" style callbacks. + * + * @private + * @param {*} [func=identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of the created callback. + * @param {number} [argCount] The number of arguments the callback accepts. + * @returns {Function} Returns a callback function. + */ +function baseCreateCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + // exit early for no `thisArg` or already bound by `Function#bind` + if (typeof thisArg == 'undefined' || !('prototype' in func)) { + return func; + } + var bindData = func.__bindData__; + if (typeof bindData == 'undefined') { + if (support.funcNames) { + bindData = !func.name; + } + bindData = bindData || !support.funcDecomp; + if (!bindData) { + var source = fnToString.call(func); + if (!support.funcNames) { + bindData = !reFuncName.test(source); + } + if (!bindData) { + // checks if `func` references the `this` keyword and stores the result + bindData = reThis.test(source); + setBindData(func, bindData); + } + } + } + // exit early if there are no `this` references or `func` is bound + if (bindData === false || (bindData !== true && bindData[1] & 1)) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 2: return function(a, b) { + return func.call(thisArg, a, b); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + } + return bind(func, thisArg); +} + +module.exports = baseCreateCallback; diff --git a/convert/lodash/lodash._basecreatecallback/package.json b/convert/lodash/lodash._basecreatecallback/package.json new file mode 100644 index 0000000..c969bad --- /dev/null +++ b/convert/lodash/lodash._basecreatecallback/package.json @@ -0,0 +1,22 @@ +{ + "name": "lodash._basecreatecallback", + "version": "2.3.0", + "description": "The internal Lo-Dash function `baseCreateCallback` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash.bind": "~2.3.0", + "lodash.identity": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash.support": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash._basecreatewrapper/LICENSE.txt b/convert/lodash/lodash._basecreatewrapper/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._basecreatewrapper/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._basecreatewrapper/README.md b/convert/lodash/lodash._basecreatewrapper/README.md new file mode 100644 index 0000000..8400ff6 --- /dev/null +++ b/convert/lodash/lodash._basecreatewrapper/README.md @@ -0,0 +1,15 @@ +# lodash._basecreatewrapper v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `baseCreateWrapper` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._basecreatewrapper/index.js b/convert/lodash/lodash._basecreatewrapper/index.js new file mode 100644 index 0000000..50309fb --- /dev/null +++ b/convert/lodash/lodash._basecreatewrapper/index.js @@ -0,0 +1,78 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseCreate = require('./../lodash._basecreate'), + isObject = require('./../lodash.isobject'), + setBindData = require('./../lodash._setbinddata'), + slice = require('./../lodash._slice'); + +/** + * Used for `Array` method references. + * + * Normally `Array.prototype` would suffice, however, using an array literal + * avoids issues in Narwhal. + */ +var arrayRef = []; + +/** Native method shortcuts */ +var push = arrayRef.push; + +/** + * The base implementation of `createWrapper` that creates the wrapper and + * sets its meta data. + * + * @private + * @param {Array} bindData The bind data array. + * @returns {Function} Returns the new function. + */ +function baseCreateWrapper(bindData) { + var func = bindData[0], + bitmask = bindData[1], + partialArgs = bindData[2], + partialRightArgs = bindData[3], + thisArg = bindData[4], + arity = bindData[5]; + + var isBind = bitmask & 1, + isBindKey = bitmask & 2, + isCurry = bitmask & 4, + isCurryBound = bitmask & 8, + key = func; + + function bound() { + var thisBinding = isBind ? thisArg : this; + if (partialArgs) { + var args = partialArgs.slice(); + push.apply(args, arguments); + } + if (partialRightArgs || isCurry) { + args || (args = slice(arguments)); + if (partialRightArgs) { + push.apply(args, partialRightArgs); + } + if (isCurry && args.length < arity) { + bitmask |= 16 & ~32; + return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]); + } + } + args || (args = arguments); + if (isBindKey) { + func = thisBinding[key]; + } + if (this instanceof bound) { + thisBinding = baseCreate(func.prototype); + var result = func.apply(thisBinding, args); + return isObject(result) ? result : thisBinding; + } + return func.apply(thisBinding, args); + } + setBindData(bound, bindData); + return bound; +} + +module.exports = baseCreateWrapper; diff --git a/convert/lodash/lodash._basecreatewrapper/package.json b/convert/lodash/lodash._basecreatewrapper/package.json new file mode 100644 index 0000000..13ad4a2 --- /dev/null +++ b/convert/lodash/lodash._basecreatewrapper/package.json @@ -0,0 +1,22 @@ +{ + "name": "lodash._basecreatewrapper", + "version": "2.3.0", + "description": "The internal Lo-Dash function `baseCreateWrapper` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._basecreate": "~2.3.0", + "lodash.isobject": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash._slice": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash._createwrapper/LICENSE.txt b/convert/lodash/lodash._createwrapper/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._createwrapper/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._createwrapper/README.md b/convert/lodash/lodash._createwrapper/README.md new file mode 100644 index 0000000..649ef36 --- /dev/null +++ b/convert/lodash/lodash._createwrapper/README.md @@ -0,0 +1,15 @@ +# lodash._createwrapper v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `createWrapper` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._createwrapper/index.js b/convert/lodash/lodash._createwrapper/index.js new file mode 100644 index 0000000..b2b8de3 --- /dev/null +++ b/convert/lodash/lodash._createwrapper/index.js @@ -0,0 +1,98 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseBind = require('./../lodash._basebind'), + baseCreateWrapper = require('./../lodash._basecreatewrapper'), + isFunction = require('./../lodash.isfunction'); + +/** + * Used for `Array` method references. + * + * Normally `Array.prototype` would suffice, however, using an array literal + * avoids issues in Narwhal. + */ +var arrayRef = []; + +/** Native method shortcuts */ +var push = arrayRef.push; + +/** + * Creates a function that, when called, either curries or invokes `func` + * with an optional `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of method flags to compose. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` + * 8 - `_.curry` (bound) + * 16 - `_.partial` + * 32 - `_.partialRight` + * @param {Array} [partialArgs] An array of arguments to prepend to those + * provided to the new function. + * @param {Array} [partialRightArgs] An array of arguments to append to those + * provided to the new function. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new function. + */ +function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { + var isBind = bitmask & 1, + isBindKey = bitmask & 2, + isCurry = bitmask & 4, + isCurryBound = bitmask & 8, + isPartial = bitmask & 16, + isPartialRight = bitmask & 32; + + if (!isBindKey && !isFunction(func)) { + throw new TypeError; + } + if (isPartial && !partialArgs.length) { + bitmask &= ~16; + isPartial = partialArgs = false; + } + if (isPartialRight && !partialRightArgs.length) { + bitmask &= ~32; + isPartialRight = partialRightArgs = false; + } + var bindData = func && func.__bindData__; + if (bindData && bindData !== true) { + bindData = bindData.slice(); + + // set `thisBinding` is not previously bound + if (isBind && !(bindData[1] & 1)) { + bindData[4] = thisArg; + } + // set if previously bound but not currently (subsequent curried functions) + if (!isBind && bindData[1] & 1) { + bitmask |= 8; + } + // set curried arity if not yet set + if (isCurry && !(bindData[1] & 4)) { + bindData[5] = arity; + } + // append partial left arguments + if (isPartial) { + push.apply(bindData[2] || (bindData[2] = []), partialArgs); + } + // append partial right arguments + if (isPartialRight) { + push.apply(bindData[3] || (bindData[3] = []), partialRightArgs); + } + // merge flags + bindData[1] |= bitmask; + return createWrapper.apply(null, bindData); + } + // fast path for `_.bind` + var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; + return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); +} + +module.exports = createWrapper; diff --git a/convert/lodash/lodash._createwrapper/package.json b/convert/lodash/lodash._createwrapper/package.json new file mode 100644 index 0000000..509eccb --- /dev/null +++ b/convert/lodash/lodash._createwrapper/package.json @@ -0,0 +1,21 @@ +{ + "name": "lodash._createwrapper", + "version": "2.3.0", + "description": "The internal Lo-Dash function `createWrapper` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._basebind": "~2.3.0", + "lodash._basecreatewrapper": "~2.3.0", + "lodash.isfunction": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash._objecttypes/LICENSE.txt b/convert/lodash/lodash._objecttypes/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._objecttypes/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._objecttypes/README.md b/convert/lodash/lodash._objecttypes/README.md new file mode 100644 index 0000000..58bd76e --- /dev/null +++ b/convert/lodash/lodash._objecttypes/README.md @@ -0,0 +1,15 @@ +# lodash._objecttypes v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) variable `objectTypes` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._objecttypes/index.js b/convert/lodash/lodash._objecttypes/index.js new file mode 100644 index 0000000..f24fa98 --- /dev/null +++ b/convert/lodash/lodash._objecttypes/index.js @@ -0,0 +1,20 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used to determine if values are of the language type Object */ +var objectTypes = { + 'boolean': false, + 'function': true, + 'object': true, + 'number': false, + 'string': false, + 'undefined': false +}; + +module.exports = objectTypes; diff --git a/convert/lodash/lodash._objecttypes/package.json b/convert/lodash/lodash._objecttypes/package.json new file mode 100644 index 0000000..2dc2610 --- /dev/null +++ b/convert/lodash/lodash._objecttypes/package.json @@ -0,0 +1,16 @@ +{ + "name": "lodash._objecttypes", + "version": "2.3.0", + "description": "The internal Lo-Dash variable `objectTypes` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" } +} \ No newline at end of file diff --git a/convert/lodash/lodash._renative/LICENSE.txt b/convert/lodash/lodash._renative/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._renative/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._renative/README.md b/convert/lodash/lodash._renative/README.md new file mode 100644 index 0000000..0d9a605 --- /dev/null +++ b/convert/lodash/lodash._renative/README.md @@ -0,0 +1,15 @@ +# lodash._renative v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) variable `reNative` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._renative/index.js b/convert/lodash/lodash._renative/index.js new file mode 100644 index 0000000..41c1476 --- /dev/null +++ b/convert/lodash/lodash._renative/index.js @@ -0,0 +1,23 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used for native method references */ +var objectProto = Object.prototype; + +/** Used to resolve the internal [[Class]] of values */ +var toString = objectProto.toString; + +/** Used to detect if a method is native */ +var reNative = RegExp('^' + + String(toString) + .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + .replace(/toString| for [^\]]+/g, '.*?') + '$' +); + +module.exports = reNative; diff --git a/convert/lodash/lodash._renative/package.json b/convert/lodash/lodash._renative/package.json new file mode 100644 index 0000000..24bdaaf --- /dev/null +++ b/convert/lodash/lodash._renative/package.json @@ -0,0 +1,16 @@ +{ + "name": "lodash._renative", + "version": "2.3.0", + "description": "The internal Lo-Dash variable `reNative` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" } +} \ No newline at end of file diff --git a/convert/lodash/lodash._setbinddata/LICENSE.txt b/convert/lodash/lodash._setbinddata/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._setbinddata/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._setbinddata/README.md b/convert/lodash/lodash._setbinddata/README.md new file mode 100644 index 0000000..e7ab45d --- /dev/null +++ b/convert/lodash/lodash._setbinddata/README.md @@ -0,0 +1,15 @@ +# lodash._setbinddata v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `setBindData` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._setbinddata/index.js b/convert/lodash/lodash._setbinddata/index.js new file mode 100644 index 0000000..7e86d4c --- /dev/null +++ b/convert/lodash/lodash._setbinddata/index.js @@ -0,0 +1,43 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var noop = require('./../lodash.noop'), + reNative = require('./../lodash._renative'); + +/** Used as the property descriptor for `__bindData__` */ +var descriptor = { + 'configurable': false, + 'enumerable': false, + 'value': null, + 'writable': false +}; + +/** Used to set meta data on functions */ +var defineProperty = (function() { + // IE 8 only accepts DOM elements + try { + var o = {}, + func = reNative.test(func = Object.defineProperty) && func, + result = func(o, o, o) && func; + } catch(e) { } + return result; +}()); + +/** + * Sets `this` binding data on a given function. + * + * @private + * @param {Function} func The function to set data on. + * @param {Array} value The data array to set. + */ +var setBindData = !defineProperty ? noop : function(func, value) { + descriptor.value = value; + defineProperty(func, '__bindData__', descriptor); +}; + +module.exports = setBindData; diff --git a/convert/lodash/lodash._setbinddata/package.json b/convert/lodash/lodash._setbinddata/package.json new file mode 100644 index 0000000..4185301 --- /dev/null +++ b/convert/lodash/lodash._setbinddata/package.json @@ -0,0 +1,20 @@ +{ + "name": "lodash._setbinddata", + "version": "2.3.0", + "description": "The internal Lo-Dash function `setBindData` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash.noop": "~2.3.0", + "lodash._renative": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash._shimkeys/LICENSE.txt b/convert/lodash/lodash._shimkeys/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._shimkeys/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._shimkeys/README.md b/convert/lodash/lodash._shimkeys/README.md new file mode 100644 index 0000000..4ce09c9 --- /dev/null +++ b/convert/lodash/lodash._shimkeys/README.md @@ -0,0 +1,15 @@ +# lodash._shimkeys v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `shimKeys` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._shimkeys/index.js b/convert/lodash/lodash._shimkeys/index.js new file mode 100644 index 0000000..4f3e9eb --- /dev/null +++ b/convert/lodash/lodash._shimkeys/index.js @@ -0,0 +1,38 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var objectTypes = require('./../lodash._objecttypes'); + +/** Used for native method references */ +var objectProto = Object.prototype; + +/** Native method shortcuts */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A fallback implementation of `Object.keys` which produces an array of the + * given object's own enumerable property names. + * + * @private + * @type Function + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + */ +var shimKeys = function(object) { + var index, iterable = object, result = []; + if (!iterable) return result; + if (!(objectTypes[typeof object])) return result; + for (index in iterable) { + if (hasOwnProperty.call(iterable, index)) { + result.push(index); + } + } + return result +}; + +module.exports = shimKeys; diff --git a/convert/lodash/lodash._shimkeys/package.json b/convert/lodash/lodash._shimkeys/package.json new file mode 100644 index 0000000..99b6f68 --- /dev/null +++ b/convert/lodash/lodash._shimkeys/package.json @@ -0,0 +1,19 @@ +{ + "name": "lodash._shimkeys", + "version": "2.3.0", + "description": "The internal Lo-Dash function `shimKeys` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._objecttypes": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash._slice/LICENSE.txt b/convert/lodash/lodash._slice/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash._slice/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash._slice/README.md b/convert/lodash/lodash._slice/README.md new file mode 100644 index 0000000..f771fbe --- /dev/null +++ b/convert/lodash/lodash._slice/README.md @@ -0,0 +1,15 @@ +# lodash._slice v2.3.0 + +The internal [Lo-Dash](http://lodash.com/) function `slice` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash._slice/index.js b/convert/lodash/lodash._slice/index.js new file mode 100644 index 0000000..bb3f449 --- /dev/null +++ b/convert/lodash/lodash._slice/index.js @@ -0,0 +1,38 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Slices the `collection` from the `start` index up to, but not including, + * the `end` index. + * + * Note: This function is used instead of `Array#slice` to support node lists + * in IE < 9 and to ensure dense arrays are returned. + * + * @private + * @param {Array|Object|string} collection The collection to slice. + * @param {number} start The start index. + * @param {number} end The end index. + * @returns {Array} Returns the new array. + */ +function slice(array, start, end) { + start || (start = 0); + if (typeof end == 'undefined') { + end = array ? array.length : 0; + } + var index = -1, + length = end - start || 0, + result = Array(length < 0 ? 0 : length); + + while (++index < length) { + result[index] = array[start + index]; + } + return result; +} + +module.exports = slice; diff --git a/convert/lodash/lodash._slice/package.json b/convert/lodash/lodash._slice/package.json new file mode 100644 index 0000000..4ad7827 --- /dev/null +++ b/convert/lodash/lodash._slice/package.json @@ -0,0 +1,16 @@ +{ + "name": "lodash._slice", + "version": "2.3.0", + "description": "The internal Lo-Dash function `slice` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" } +} \ No newline at end of file diff --git a/convert/lodash/lodash.bind/LICENSE.txt b/convert/lodash/lodash.bind/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.bind/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.bind/README.md b/convert/lodash/lodash.bind/README.md new file mode 100644 index 0000000..d2ef202 --- /dev/null +++ b/convert/lodash/lodash.bind/README.md @@ -0,0 +1,15 @@ +# lodash.bind v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.bind`](http://lodash.com/docs#bind) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.bind/index.js b/convert/lodash/lodash.bind/index.js new file mode 100644 index 0000000..dc87bee --- /dev/null +++ b/convert/lodash/lodash.bind/index.js @@ -0,0 +1,41 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var createWrapper = require('./../lodash._createwrapper'), + reNative = require('./../lodash._renative'), + slice = require('./../lodash._slice'); + +/** + * Creates a function that, when called, invokes `func` with the `this` + * binding of `thisArg` and prepends any additional `bind` arguments to those + * provided to the bound function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var func = function(greeting) { + * return greeting + ' ' + this.name; + * }; + * + * func = _.bind(func, { 'name': 'fred' }, 'hi'); + * func(); + * // => 'hi fred' + */ +function bind(func, thisArg) { + return arguments.length > 2 + ? createWrapper(func, 17, slice(arguments, 2), null, thisArg) + : createWrapper(func, 1, null, null, thisArg); +} + +module.exports = bind; diff --git a/convert/lodash/lodash.bind/package.json b/convert/lodash/lodash.bind/package.json new file mode 100644 index 0000000..734669a --- /dev/null +++ b/convert/lodash/lodash.bind/package.json @@ -0,0 +1,22 @@ +{ + "name": "lodash.bind", + "version": "2.3.0", + "description": "The Lo-Dash function `_.bind` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._createwrapper": "~2.3.0", + "lodash._renative": "~2.3.0", + "lodash._slice": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash.foreach/LICENSE.txt b/convert/lodash/lodash.foreach/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.foreach/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.foreach/README.md b/convert/lodash/lodash.foreach/README.md new file mode 100644 index 0000000..2fbd249 --- /dev/null +++ b/convert/lodash/lodash.foreach/README.md @@ -0,0 +1,15 @@ +# lodash.foreach v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.forEach`](http://lodash.com/docs#forEach) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.foreach/index.js b/convert/lodash/lodash.foreach/index.js new file mode 100644 index 0000000..ac2818f --- /dev/null +++ b/convert/lodash/lodash.foreach/index.js @@ -0,0 +1,55 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseCreateCallback = require('./../lodash._basecreatecallback'), + forOwn = require('./../lodash.forown'); + +/** + * Iterates over elements of a collection, executing the callback for each + * element. The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). Callbacks may exit iteration early by + * explicitly returning `false`. + * + * Note: As with other "Collections" methods, objects with a `length` property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(','); + * // => logs each number and returns '1,2,3' + * + * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); }); + * // => logs each number and returns the object (property order is not guaranteed across environments) + */ +function forEach(collection, callback, thisArg) { + var index = -1, + length = collection ? collection.length : 0; + + callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); + if (typeof length == 'number') { + while (++index < length) { + if (callback(collection[index], index, collection) === false) { + break; + } + } + } else { + forOwn(collection, callback); + } + return collection; +} + +module.exports = forEach; diff --git a/convert/lodash/lodash.foreach/package.json b/convert/lodash/lodash.foreach/package.json new file mode 100644 index 0000000..0a2f005 --- /dev/null +++ b/convert/lodash/lodash.foreach/package.json @@ -0,0 +1,21 @@ +{ + "name": "lodash.foreach", + "version": "2.3.0", + "description": "The Lo-Dash function `_.forEach` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._basecreatecallback": "~2.3.0", + "lodash.forown": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash.forown/LICENSE.txt b/convert/lodash/lodash.forown/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.forown/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.forown/README.md b/convert/lodash/lodash.forown/README.md new file mode 100644 index 0000000..dd2d34c --- /dev/null +++ b/convert/lodash/lodash.forown/README.md @@ -0,0 +1,15 @@ +# lodash.forown v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.forOwn`](http://lodash.com/docs#forOwn) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.forown/index.js b/convert/lodash/lodash.forown/index.js new file mode 100644 index 0000000..b76999e --- /dev/null +++ b/convert/lodash/lodash.forown/index.js @@ -0,0 +1,50 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseCreateCallback = require('./../lodash._basecreatecallback'), + keys = require('./../lodash.keys'), + objectTypes = require('./../lodash._objecttypes'); + +/** + * Iterates over own enumerable properties of an object, executing the callback + * for each property. The callback is bound to `thisArg` and invoked with three + * arguments; (value, key, object). Callbacks may exit iteration early by + * explicitly returning `false`. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { + * console.log(key); + * }); + * // => logs '0', '1', and 'length' (property order is not guaranteed across environments) + */ +var forOwn = function(collection, callback, thisArg) { + var index, iterable = collection, result = iterable; + if (!iterable) return result; + if (!objectTypes[typeof iterable]) return result; + callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); + var ownIndex = -1, + ownProps = objectTypes[typeof iterable] && keys(iterable), + length = ownProps ? ownProps.length : 0; + + while (++ownIndex < length) { + index = ownProps[ownIndex]; + if (callback(iterable[index], index, collection) === false) return result; + } + return result +}; + +module.exports = forOwn; diff --git a/convert/lodash/lodash.forown/package.json b/convert/lodash/lodash.forown/package.json new file mode 100644 index 0000000..079de45 --- /dev/null +++ b/convert/lodash/lodash.forown/package.json @@ -0,0 +1,22 @@ +{ + "name": "lodash.forown", + "version": "2.3.0", + "description": "The Lo-Dash function `_.forOwn` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._basecreatecallback": "~2.3.0", + "lodash.keys": "~2.3.0", + "lodash._objecttypes": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash.identity/LICENSE.txt b/convert/lodash/lodash.identity/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.identity/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.identity/README.md b/convert/lodash/lodash.identity/README.md new file mode 100644 index 0000000..8c57239 --- /dev/null +++ b/convert/lodash/lodash.identity/README.md @@ -0,0 +1,15 @@ +# lodash.identity v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.identity`](http://lodash.com/docs#identity) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.identity/index.js b/convert/lodash/lodash.identity/index.js new file mode 100644 index 0000000..595a6e4 --- /dev/null +++ b/convert/lodash/lodash.identity/index.js @@ -0,0 +1,28 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utilities + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'name': 'fred' }; + * _.identity(object) === object; + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; diff --git a/convert/lodash/lodash.identity/package.json b/convert/lodash/lodash.identity/package.json new file mode 100644 index 0000000..1e09a5e --- /dev/null +++ b/convert/lodash/lodash.identity/package.json @@ -0,0 +1,17 @@ +{ + "name": "lodash.identity", + "version": "2.3.0", + "description": "The Lo-Dash function `_.identity` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" } +} \ No newline at end of file diff --git a/convert/lodash/lodash.isfunction/LICENSE.txt b/convert/lodash/lodash.isfunction/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.isfunction/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.isfunction/README.md b/convert/lodash/lodash.isfunction/README.md new file mode 100644 index 0000000..e16c6a3 --- /dev/null +++ b/convert/lodash/lodash.isfunction/README.md @@ -0,0 +1,15 @@ +# lodash.isfunction v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.isFunction`](http://lodash.com/docs#isFunction) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.isfunction/index.js b/convert/lodash/lodash.isfunction/index.js new file mode 100644 index 0000000..2b333d3 --- /dev/null +++ b/convert/lodash/lodash.isfunction/index.js @@ -0,0 +1,27 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is a function. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + */ +function isFunction(value) { + return typeof value == 'function'; +} + +module.exports = isFunction; diff --git a/convert/lodash/lodash.isfunction/package.json b/convert/lodash/lodash.isfunction/package.json new file mode 100644 index 0000000..446ae6d --- /dev/null +++ b/convert/lodash/lodash.isfunction/package.json @@ -0,0 +1,17 @@ +{ + "name": "lodash.isfunction", + "version": "2.3.0", + "description": "The Lo-Dash function `_.isFunction` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" } +} \ No newline at end of file diff --git a/convert/lodash/lodash.isobject/LICENSE.txt b/convert/lodash/lodash.isobject/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.isobject/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.isobject/README.md b/convert/lodash/lodash.isobject/README.md new file mode 100644 index 0000000..897d749 --- /dev/null +++ b/convert/lodash/lodash.isobject/README.md @@ -0,0 +1,15 @@ +# lodash.isobject v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.isObject`](http://lodash.com/docs#isObject) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.isobject/index.js b/convert/lodash/lodash.isobject/index.js new file mode 100644 index 0000000..fbd5c9c --- /dev/null +++ b/convert/lodash/lodash.isobject/index.js @@ -0,0 +1,39 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var objectTypes = require('./../lodash._objecttypes'); + +/** + * Checks if `value` is the language type of Object. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // check if the value is the ECMAScript language type of Object + // http://es5.github.io/#x8 + // and avoid a V8 bug + // http://code.google.com/p/v8/issues/detail?id=2291 + return !!(value && objectTypes[typeof value]); +} + +module.exports = isObject; diff --git a/convert/lodash/lodash.isobject/package.json b/convert/lodash/lodash.isobject/package.json new file mode 100644 index 0000000..e032a9a --- /dev/null +++ b/convert/lodash/lodash.isobject/package.json @@ -0,0 +1,20 @@ +{ + "name": "lodash.isobject", + "version": "2.3.0", + "description": "The Lo-Dash function `_.isObject` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._objecttypes": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash.keys/LICENSE.txt b/convert/lodash/lodash.keys/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.keys/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.keys/README.md b/convert/lodash/lodash.keys/README.md new file mode 100644 index 0000000..5fc0154 --- /dev/null +++ b/convert/lodash/lodash.keys/README.md @@ -0,0 +1,15 @@ +# lodash.keys v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.keys`](http://lodash.com/docs#keys) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.keys/index.js b/convert/lodash/lodash.keys/index.js new file mode 100644 index 0000000..cc6e7f1 --- /dev/null +++ b/convert/lodash/lodash.keys/index.js @@ -0,0 +1,36 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var isObject = require('./../lodash.isobject'), + reNative = require('./../lodash._renative'), + shimKeys = require('./../lodash._shimkeys'); + +/* Native method shortcuts for methods with the same name as other `lodash` methods */ +var nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys; + +/** + * Creates an array composed of the own enumerable property names of an object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + * @example + * + * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); + * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) + */ +var keys = !nativeKeys ? shimKeys : function(object) { + if (!isObject(object)) { + return []; + } + return nativeKeys(object); +}; + +module.exports = keys; diff --git a/convert/lodash/lodash.keys/package.json b/convert/lodash/lodash.keys/package.json new file mode 100644 index 0000000..a6ad91b --- /dev/null +++ b/convert/lodash/lodash.keys/package.json @@ -0,0 +1,22 @@ +{ + "name": "lodash.keys", + "version": "2.3.0", + "description": "The Lo-Dash function `_.keys` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash.isobject": "~2.3.0", + "lodash._renative": "~2.3.0", + "lodash._shimkeys": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/lodash/lodash.noop/LICENSE.txt b/convert/lodash/lodash.noop/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.noop/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.noop/README.md b/convert/lodash/lodash.noop/README.md new file mode 100644 index 0000000..c277049 --- /dev/null +++ b/convert/lodash/lodash.noop/README.md @@ -0,0 +1,15 @@ +# lodash.noop v2.3.0 + +The [Lo-Dash](http://lodash.com/) function [`_.noop`](http://lodash.com/docs#noop) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.noop/index.js b/convert/lodash/lodash.noop/index.js new file mode 100644 index 0000000..4d43843 --- /dev/null +++ b/convert/lodash/lodash.noop/index.js @@ -0,0 +1,26 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * A no-operation function. + * + * @static + * @memberOf _ + * @category Utilities + * @example + * + * var object = { 'name': 'fred' }; + * _.noop(object) === undefined; + * // => true + */ +function noop() { + // no operation performed +} + +module.exports = noop; diff --git a/convert/lodash/lodash.noop/package.json b/convert/lodash/lodash.noop/package.json new file mode 100644 index 0000000..2849bdd --- /dev/null +++ b/convert/lodash/lodash.noop/package.json @@ -0,0 +1,17 @@ +{ + "name": "lodash.noop", + "version": "2.3.0", + "description": "The Lo-Dash function `_.noop` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" } +} \ No newline at end of file diff --git a/convert/lodash/lodash.support/LICENSE.txt b/convert/lodash/lodash.support/LICENSE.txt new file mode 100644 index 0000000..49869bb --- /dev/null +++ b/convert/lodash/lodash.support/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2013 The Dojo Foundation +Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/convert/lodash/lodash.support/README.md b/convert/lodash/lodash.support/README.md new file mode 100644 index 0000000..905f3a7 --- /dev/null +++ b/convert/lodash/lodash.support/README.md @@ -0,0 +1,15 @@ +# lodash.support v2.3.0 + +The [Lo-Dash](http://lodash.com/) object [`_.support`](http://lodash.com/docs#support) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli). + +## Author + +| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | +|---| +| [John-David Dalton](http://allyoucanleet.com/) | + +## Contributors + +| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---|---|---| +| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) | diff --git a/convert/lodash/lodash.support/index.js b/convert/lodash/lodash.support/index.js new file mode 100644 index 0000000..d4830bf --- /dev/null +++ b/convert/lodash/lodash.support/index.js @@ -0,0 +1,40 @@ +/** + * Lo-Dash 2.3.0 (Custom Build) + * Build: `lodash modularize modern exports="npm" -o ./npm/` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var reNative = require('./../lodash._renative'); + +/** Used to detect functions containing a `this` reference */ +var reThis = /\bthis\b/; + +/** + * An object used to flag environments features. + * + * @static + * @memberOf _ + * @type Object + */ +var support = {}; + +/** + * Detect if functions can be decompiled by `Function#toString` + * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps). + * + * @memberOf _.support + * @type boolean + */ +support.funcDecomp = !reNative.test(global.WinRTError) && reThis.test(function() { return this; }); + +/** + * Detect if `Function#name` is supported (all but IE). + * + * @memberOf _.support + * @type boolean + */ +support.funcNames = typeof Function.name == 'string'; + +module.exports = support; diff --git a/convert/lodash/lodash.support/package.json b/convert/lodash/lodash.support/package.json new file mode 100644 index 0000000..86bacf4 --- /dev/null +++ b/convert/lodash/lodash.support/package.json @@ -0,0 +1,20 @@ +{ + "name": "lodash.support", + "version": "2.3.0", + "description": "The Lo-Dash object `_.support` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"], + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (http://mathiasbynens.be/)" + ], + "bugs": "https://github.com/lodash/lodash-cli/issues", + "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" }, + "dependencies": { + "lodash._renative": "~2.3.0" + } +} \ No newline at end of file diff --git a/convert/percentError.js b/convert/percentError.js new file mode 100644 index 0000000..8ee2a3a --- /dev/null +++ b/convert/percentError.js @@ -0,0 +1,3 @@ +module.exports = function (expected, actual) { + return Math.abs((expected - actual) / actual); +} diff --git a/datasets/assetData/assetData.json b/datasets/assetData/assetData.json new file mode 100644 index 0000000..4123e1a --- /dev/null +++ b/datasets/assetData/assetData.json @@ -0,0 +1,75 @@ +{ + "suppliers": [ + { + "name": "Vega", + "categories": [ + { + "name": "Sensor", + "types": [ + { + "name": "Temperature", + "models": [ + { + "name": "VegaTemp 10", + "units": ["°C", "°F"] + }, + { + "name": "VegaTemp 20", + "units": ["°C", "°F"] + } + ] + }, + { + "name": "Pressure", + "models": [ + { + "name": "VegaPressure 10", + "units": ["bar", "m WC", "psi"] + }, + { + "name": "VegaPressure 20", + "units": ["bar", "m WC", "psi"] + } + ] + }, + { + "name": "Level", + "models": [ + { + "name": "VegaLevel 10", + "units": ["m", "ft", "mm"] + }, + { + "name": "VegaLevel 20", + "units": ["m", "ft", "mm"] + } + ] + } + ] + } + ] + }, + { + "name": "Hidrostal", + "categories": [ + { + "name": "Pumps", + "types": [ + { + "name": "Centrifugal", + "models": [ + { + "id": "hidrostal-pump-001", + "name": "H05K-S03R+HGM1X-X280KO", + "units": ["m³/h", "gpm", "l/min"], + "hasCurveData": true, + "curveDataFile": "/data/curves/hidrostal-H05K-S03R.json" + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/datasets/assetData/pumps/hydrostal/centrifugal pumps/models.json b/datasets/assetData/curves/hidrostal-H05K-S03R.json similarity index 99% rename from datasets/assetData/pumps/hydrostal/centrifugal pumps/models.json rename to datasets/assetData/curves/hidrostal-H05K-S03R.json index 412f7a0..5b68286 100644 --- a/datasets/assetData/pumps/hydrostal/centrifugal pumps/models.json +++ b/datasets/assetData/curves/hidrostal-H05K-S03R.json @@ -1,8 +1,5 @@ -[ - { - "name": "H05K-S03R+HGM1X-X280KO", - "description": "N/A", - "machineCurve": { +{ + "curve": { "np": { "700": { "x": [ @@ -1064,5 +1061,4 @@ } } } - } -] \ No newline at end of file + } \ No newline at end of file diff --git a/datasets/assetData/pumps/DAB/centrifugal pumps/models.json b/datasets/assetData/pumps/DAB/centrifugal pumps/models.json deleted file mode 100644 index d5f2493..0000000 --- a/datasets/assetData/pumps/DAB/centrifugal pumps/models.json +++ /dev/null @@ -1,36 +0,0 @@ -[ - { - "name": "DAB Evosta 2 20-75", - "description": "N/A", - "machineCurve": { - "np": { - "200": { - "x": [0, 20, 40, 60, 80, 100], - "y": [5, 8, 12, 15, 17, 18] - }, - "300": { - "x": [0, 20, 40, 60, 80, 100], - "y": [20, 28, 32, 34, 35, 35] - }, - "400": { - "x": [0, 20, 40, 60, 80, 100], - "y": [35, 38, 42, 45, 47, 48] - } - }, - "nq": { - "200": { - "x": [0, 20, 40, 60, 80, 100], - "y": [0, 0.4, 0.8, 1.2, 1.6, 2.0] - }, - "300": { - "x": [0, 20, 40, 60, 80, 100], - "y": [0, 0.72, 1.44, 2.16, 2.88, 3.6] - }, - "400": { - "x": [0, 20, 40, 60, 80, 100], - "y": [0, 0.8, 1.6, 2.4, 3.2, 4.0] - } - } - } - } -] \ No newline at end of file diff --git a/datasets/assetData/pumps/DAB/subtypes.json b/datasets/assetData/pumps/DAB/subtypes.json deleted file mode 100644 index 47e6dc4..0000000 --- a/datasets/assetData/pumps/DAB/subtypes.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "id": "1", - "name": "centrifugal pumps" - } -] \ No newline at end of file diff --git a/datasets/assetData/pumps/hydrostal/subtypes.json b/datasets/assetData/pumps/hydrostal/subtypes.json deleted file mode 100644 index 47e6dc4..0000000 --- a/datasets/assetData/pumps/hydrostal/subtypes.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "id": "1", - "name": "centrifugal pumps" - } -] \ No newline at end of file diff --git a/datasets/assetData/pumps/suppliers.json b/datasets/assetData/pumps/suppliers.json deleted file mode 100644 index c544041..0000000 --- a/datasets/assetData/pumps/suppliers.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "id": "1", - "name": "hydrostal" - }, - { - "id": "2", - "name": "DAB" - } -] diff --git a/datasets/assetData/sensors/eastron/power/models.json b/datasets/assetData/sensors/eastron/power/models.json deleted file mode 100644 index 55ffcd3..0000000 --- a/datasets/assetData/sensors/eastron/power/models.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "id": "1", - "name": "SDM120MODBUS", - "description": "De SDM120MODBUS kWh meter is een kWh meter die geschikt is voor het meten van zowel verbruik als teruglevering van stroom. Dat maakt deze meter ook zeer geschikt in combinatie met zonnepanelen." - } -] \ No newline at end of file diff --git a/datasets/assetData/sensors/eastron/subTypes.json b/datasets/assetData/sensors/eastron/subTypes.json deleted file mode 100644 index 6d771c0..0000000 --- a/datasets/assetData/sensors/eastron/subTypes.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "id": "1", - "name": "power" - } -] \ No newline at end of file diff --git a/datasets/assetData/sensors/eh/flow/models.json b/datasets/assetData/sensors/eh/flow/models.json deleted file mode 100644 index f6077aa..0000000 --- a/datasets/assetData/sensors/eh/flow/models.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "id": "1", - "name": "Proline Promag W 400", - "description": "A flow meter used for measuring the flow of liquids in various industrial applications." - } -] \ No newline at end of file diff --git a/datasets/assetData/sensors/eh/subTypes.json b/datasets/assetData/sensors/eh/subTypes.json deleted file mode 100644 index db2a99f..0000000 --- a/datasets/assetData/sensors/eh/subTypes.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "id": "1", - "name": "flow" - } -] \ No newline at end of file diff --git a/datasets/assetData/sensors/suppliers.json b/datasets/assetData/sensors/suppliers.json deleted file mode 100644 index 1ac81ca..0000000 --- a/datasets/assetData/sensors/suppliers.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "id": "1", - "name": "vega" - }, - { - "id": "2", - "name": "eh" - }, - { - "id": "3", - "name": "eastron" - } -] diff --git a/datasets/assetData/sensors/vega/pressure/models.json b/datasets/assetData/sensors/vega/pressure/models.json deleted file mode 100644 index 652efcb..0000000 --- a/datasets/assetData/sensors/vega/pressure/models.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "name": "Vegabar 14", - "description": "N/A" - } -] \ No newline at end of file diff --git a/datasets/assetData/sensors/vega/subtypes.json b/datasets/assetData/sensors/vega/subtypes.json deleted file mode 100644 index 20884a6..0000000 --- a/datasets/assetData/sensors/vega/subtypes.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "id": "1", - "name": "pressure" - }, - { - "id": "2", - "name": "flow" - }, - { - "id": "3", - "name": "temperature" - } -] \ No newline at end of file diff --git a/datasets/assetData/sensors/vega/temperature/models.json b/datasets/assetData/sensors/vega/temperature/models.json deleted file mode 100644 index 6c4aa2a..0000000 --- a/datasets/assetData/sensors/vega/temperature/models.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "name": "VegaTemp 10", - "description": "Low cost sensor for general purpose applications." - }, - { - "name": "VegaTemp 20", - "description": "High accuracy sensor for laboratory applications." - }, - { - "name": "VegaTemp 30", - "description": "High accuracy sensor for industrial applications." - }, - { - "name": "VegaTemp 40", - "description": "High accuracy sensor for environmental monitoring." - }, - { - "name": "VegaTemp 50", - "description": "High accuracy temperature sensor for industrial applications." - }, - { - "name": "VegaTherm 22", - "description": "Compact sensor ideal for environmental monitoring." - }, - { - "name": "VegaTemp 100", - "description": "Robust sensor designed for high temperature ranges." - } -] \ No newline at end of file diff --git a/index.js b/index.js index 97425f8..02177b1 100644 --- a/index.js +++ b/index.js @@ -3,10 +3,11 @@ * ----------------------------------------------------------- * Central barrel file for re-exporting helpers and configurations. * Provides both namespace exports and dynamic loading capabilities. + * now we can load modules like this: + * const { menuUtils, outputUtils } = require('generalFunctions'); */ // Core helper modules -const menuUtils = require('./src/helper/menuUtils.js'); const outputUtils = require('./src/helper/outputUtils.js'); const logger = require('./src/helper/logger.js'); const validation = require('./src/helper/validationUtils.js'); @@ -14,53 +15,16 @@ const configUtils = require('./src/helper/configUtils.js'); // Domain-specific modules const measurements = require('./src/measurements/index.js'); +const configManager = require('./src/configs/index.js'); const nrmse = require('./src/nrmse/ErrorMetrics.js'); const state = require('./src/state/state.js'); +const convert = require('./src/convert/index.js'); +const MenuManager = require('./src/menu/index.js'); -// Configuration loader with error handling -function loadConfig(path) { - try { - return require(path); - } catch (error) { - console.warn(`Failed to load config: ${path}`, error); - return null; - } -} - -// Configurations -const configs = { - get projectSettings() { - return loadConfig('./configs/projectSettings.json'); - }, - get measurementConfig() { - return loadConfig('./configs/measurementConfig.json'); - } -}; - -// Dynamic loaders with validation -function loadHelper(name) { - if (!name || typeof name !== 'string') { - throw new Error('Helper name must be a non-empty string'); - } - - try { - return require(`./src/helper/${name}.js`); - } catch (error) { - throw new Error(`Failed to load helper "${name}": ${error.message}`); - } -} - -function loadAssetDatasets() { - try { - return require('./datasets/assetData/suppliers.json'); - } catch (error) { - throw new Error(`Failed to load asset datasets: ${error.message}`); - } -} // Export everything module.exports = { - menuUtils, + configManager, outputUtils, configUtils, logger, @@ -68,7 +32,6 @@ module.exports = { measurements, nrmse, state, - configs, - loadHelper, - loadAssetDatasets + convert, + MenuManager }; \ No newline at end of file diff --git a/src/configs/index.js b/src/configs/index.js new file mode 100644 index 0000000..ff85a92 --- /dev/null +++ b/src/configs/index.js @@ -0,0 +1,76 @@ +const fs = require('fs'); +const path = require('path'); + +class ConfigManager { + constructor(relPath = '.') { + this.configDir = path.resolve(__dirname, relPath); + } + + /** + * Load a configuration file by name + * @param {string} configName - Name of the config file (without .json extension) + * @returns {Object} Parsed configuration object + */ + getConfig(configName) { + try { + const configPath = path.resolve(this.configDir, `${configName}.json`); + const configData = fs.readFileSync(configPath, 'utf8'); + return JSON.parse(configData); + } catch (error) { + throw new Error(`Failed to load config '${configName}': ${error.message}`); + } + } + + /** + * Get list of available configuration files + * @returns {Array} Array of config names (without .json extension) + */ + getAvailableConfigs() { + try { + const resolvedDir = path.resolve(this.configDir); + const files = fs.readdirSync(resolvedDir); + return files + .filter(file => file.endsWith('.json')) + .map(file => path.basename(file, '.json')); + } catch (error) { + throw new Error(`Failed to read config directory: ${error.message}`); + } + } + + /** + * Check if a specific config exists + * @param {string} configName - Name of the config file + * @returns {boolean} True if config exists + */ + hasConfig(configName) { + const configPath = path.resolve(this.configDir, `${configName}.json`); + return fs.existsSync(configPath); + } + + createEndpoint(nodeName) { + try { + // Load the config for this node + const config = this.getConfig(nodeName); + + // Convert config to JSON + const configJSON = JSON.stringify(config, null, 2); + + // Assemble the complete script + return ` + // Create the namespace structure + window.EVOLV = window.EVOLV || {}; + window.EVOLV.nodes = window.EVOLV.nodes || {}; + window.EVOLV.nodes.${nodeName} = window.EVOLV.nodes.${nodeName} || {}; + + // Inject the pre-loaded config data directly into the namespace + window.EVOLV.nodes.${nodeName}.config = ${configJSON}; + + console.log('${nodeName} config loaded and endpoint created'); + `; + } catch (error) { + throw new Error(`Failed to create endpoint for '${nodeName}': ${error.message}`); + } + } +} + +module.exports = ConfigManager; \ No newline at end of file diff --git a/configs/measurementConfig.json b/src/configs/measurement.json similarity index 88% rename from configs/measurementConfig.json rename to src/configs/measurement.json index 8c73c2a..9b32f80 100644 --- a/configs/measurementConfig.json +++ b/src/configs/measurement.json @@ -70,6 +70,27 @@ "type": "string", "description": "Indicates the role this configuration plays (e.g., sensor, controller, etc.)." } + }, + "positionVsParent":{ + "default":"atEquipment", + "rules": { + "type": "enum", + "values": [ + { + "value": "atEquipment", + "description": "The measurement is taken at the equipment level, typically representing the overall state or performance of the equipment." + }, + { + "value": "upstream", + "description": "The measurement is taken upstream, meaning it is related to inputs or conditions that affect the equipment's operation, such as supply conditions or environmental factors." + }, + { + "value": "downstream", + "description": "The measurement is taken downstream, indicating it relates to outputs or results of the equipment's operation, such as product quality or performance metrics." + } + ], + "description": "Defines the position of the measurement relative to its parent equipment or system." + } } }, "asset": { @@ -81,6 +102,14 @@ "description": "Asset tag number which is a universally unique identifier for this asset. May be null if not assigned." } }, + "tagCode":{ + "default": null, + "rules": { + "type": "string", + "nullable": true, + "description": "Asset tag code which is a unique identifier for this asset. May be null if not assigned." + } + }, "geoLocation": { "default": { "x": 0, @@ -122,7 +151,7 @@ "description": "The supplier or manufacturer of the asset." } }, - "type": { + "category": { "default": "sensor", "rules": { "type": "enum", @@ -134,7 +163,7 @@ ] } }, - "subType": { + "type": { "default": "pressure", "rules": { "type": "string", @@ -148,6 +177,13 @@ "description": "A user-defined or manufacturer-defined model identifier for the asset." } }, + "unit": { + "default": "unitless", + "rules": { + "type": "string", + "description": "The unit of measurement for this asset (e.g., 'meters', 'seconds', 'unitless')." + } + }, "accuracy": { "default": null, "rules": { diff --git a/src/helper/endpointUtils.js b/src/helper/endpointUtils.js new file mode 100644 index 0000000..4a20522 --- /dev/null +++ b/src/helper/endpointUtils.js @@ -0,0 +1,106 @@ +const MenuUtils = require('./menuUtils'); + +/** + * Server-side helper for exposing MenuUtils to the browser via HTTP endpoints. + */ +class EndpointUtils { + /** + * @param {Object} options + * @param {Function} options.MenuUtilsClass the MenuUtils constructor/function + */ + constructor({ MenuUtilsClass = MenuUtils } = {}) { + this.MenuUtils = MenuUtilsClass; + } + + /** + * Registers an HTTP GET endpoint that serves the client-side MenuUtils code + * @param {object} RED the Node-RED API object + * @param {string} nodeName the name of the node (used in the URL) + * @param {object} customHelpers additional helper functions to inject + */ + createMenuUtilsEndpoint(RED, nodeName, customHelpers = {}) { + RED.httpAdmin.get(`/${nodeName}/resources/menuUtils.js`, (req, res) => { + console.log(`Serving menuUtils.js for ${nodeName} node`); + res.set('Content-Type', 'application/javascript'); + const browserCode = this.generateMenuUtilsCode(nodeName, customHelpers); + res.send(browserCode); + }); + } + + /** + * Generates the browser-side JavaScript that redefines MenuUtils and helper fns + * @param {string} nodeName + * @param {object} customHelpers map of name: functionString pairs + * @returns {string} a JS snippet to run in the browser + */ + generateMenuUtilsCode(nodeName, customHelpers = {}) { + // Default helper implementations to expose alongside MenuUtils + const defaultHelpers = { + validateRequired: `function(value) { + return value != null && value.toString().trim() !== ''; + }`, + formatDisplayValue: `function(value, unit) { + return \`${'${'}value} ${'${'}unit || ''}\`.trim(); + }`, + validateScaling: `function(min, max) { + return !isNaN(min) && !isNaN(max) && Number(min) < Number(max); + }`, + validateUnit: `function(unit) { + return typeof unit === 'string' && unit.trim() !== ''; + }`, + }; + + // Merge any custom overrides + const allHelpers = { ...defaultHelpers, ...customHelpers }; + + // Build the helpers code block + const helpersCode = Object.entries(allHelpers) + .map(([name, fnBody]) => ` ${name}: ${fnBody}`) + .join(',\n'); + + // Introspect MenuUtils prototype to extract method definitions + const proto = this.MenuUtils.prototype; + const browserMethods = Object.getOwnPropertyNames(proto) + .filter(key => key !== 'constructor') + .map(methodName => { + const fn = proto[methodName]; + const src = fn.toString(); + const isAsync = fn.constructor.name === 'AsyncFunction'; + // extract signature and body + const signature = src.slice(src.indexOf('(')); + const prefix = isAsync ? 'async ' : ''; + return ` ${prefix}${methodName}${signature}`; + }) + .join('\n\n'); + + // Return a complete JS snippet for the browser + return ` +// Auto-generated MenuUtils for node: ${nodeName} +window.EVOLV = window.EVOLV || {}; +window.EVOLV.nodes = window.EVOLV.nodes || {}; +window.EVOLV.nodes.${nodeName} = window.EVOLV.nodes.${nodeName} || {}; + +class MenuUtils { + constructor(opts) { + // Allow same options API as server-side + this.useCloud = opts.useCloud || false; + this.projectSettings = opts.projectSettings || {}; + // any other client-side initialization... + } + +${browserMethods} +} + +window.EVOLV.nodes.${nodeName}.utils = { + menuUtils: new MenuUtils({}), + helpers: { +${helpersCode} + } +}; + +console.log('Loaded EVOLV.nodes.${nodeName}.utils.menuUtils'); +`; + } +} + +module.exports = EndpointUtils; diff --git a/src/helper/menuUtils.js b/src/helper/menuUtils.js index 9d0352a..ebed6b8 100644 --- a/src/helper/menuUtils.js +++ b/src/helper/menuUtils.js @@ -1,4 +1,5 @@ class MenuUtils { + initBasicToggles(elements) { // Toggle visibility for log level diff --git a/src/menu/asset.js b/src/menu/asset.js new file mode 100644 index 0000000..76933e2 --- /dev/null +++ b/src/menu/asset.js @@ -0,0 +1,242 @@ +// asset.js +const fs = require('fs'); +const path = require('path'); + +class AssetMenu { + /** Define path where to find data of assets in constructor for now */ + constructor(relPath = '../../datasets/assetData') { + this.baseDir = path.resolve(__dirname, relPath); + this.assetData = this._loadJSON('assetData'); + } + + _loadJSON(...segments) { + const filePath = path.resolve(this.baseDir, ...segments) + '.json'; + try { + return JSON.parse(fs.readFileSync(filePath, 'utf8')); + } catch (err) { + throw new Error(`Failed to load ${filePath}: ${err.message}`); + } + } + + /** + * ADD THIS METHOD + * Compiles all menu data from the file system into a single nested object. + * This is run once on the server to pre-load everything. + * @returns {object} A comprehensive object with all menu options. + */ + getAllMenuData() { + // load the raw JSON once + const data = this._loadJSON('assetData'); + const allData = {}; + + data.suppliers.forEach(sup => { + allData[sup.name] = {}; + sup.categories.forEach(cat => { + allData[sup.name][cat.name] = {}; + cat.types.forEach(type => { + // here: store the full array of model objects, not just names + allData[sup.name][cat.name][type.name] = type.models; + }); + }); + }); + + return allData; + } + + /** + * Convert the static initEditor function to a string that can be served to the client + * @param {string} nodeName - The name of the node type + * @returns {string} JavaScript code as a string + */ +getClientInitCode(nodeName) { + // step 1: get the two helper strings + const htmlCode = this.getHtmlInjectionCode(nodeName); + const dataCode = this.getDataInjectionCode(nodeName); + const eventsCode = this.getEventInjectionCode(nodeName); + const saveCode = this.getSaveInjectionCode(nodeName); + + + return ` + // --- AssetMenu for ${nodeName} --- + window.EVOLV.nodes.${nodeName}.assetMenu = + window.EVOLV.nodes.${nodeName}.assetMenu || {}; + + ${htmlCode} + ${dataCode} + ${eventsCode} + ${saveCode} + + // wire it all up when the editor loads + window.EVOLV.nodes.${nodeName}.assetMenu.initEditor = function(node) { + // ------------------ BELOW sequence is important! ------------------------------- + console.log('Initializing asset properties for ${nodeName}…'); + this.injectHtml(); + // load the data and wire up events + // this will populate the fields and set up the event listeners + this.wireEvents(node); + // this will load the initial data into the fields + // this is important to ensure the fields are populated correctly + this.loadData(node); + }; + `; + +} + +getDataInjectionCode(nodeName) { + return ` + // Asset Data loader for ${nodeName} + window.EVOLV.nodes.${nodeName}.assetMenu.loadData = function(node) { + const data = window.EVOLV.nodes.${nodeName}.menuData.asset; + const elems = { + supplier: document.getElementById('node-input-supplier'), + category: document.getElementById('node-input-category'), + type: document.getElementById('node-input-assetType'), + model: document.getElementById('node-input-model'), + unit: document.getElementById('node-input-unit') + }; + function populate(el, opts, sel) { + const old = el.value; + el.innerHTML = ''; + (opts||[]).forEach(o=>{ + const opt = document.createElement('option'); + opt.value = o; opt.textContent = o; + el.appendChild(opt); + }); + el.value = sel||""; + if(el.value!==old) el.dispatchEvent(new Event('change')); + } + // initial population + populate(elems.supplier, Object.keys(data), node.supplier); + }; + ` + } + +getEventInjectionCode(nodeName) { + return ` + // Asset Event wiring for ${nodeName} + window.EVOLV.nodes.${nodeName}.assetMenu.wireEvents = function(node) { + const data = window.EVOLV.nodes.${nodeName}.menuData.asset; + const elems = { + supplier: document.getElementById('node-input-supplier'), + category: document.getElementById('node-input-category'), + type: document.getElementById('node-input-assetType'), + model: document.getElementById('node-input-model'), + unit: document.getElementById('node-input-unit') + }; + function populate(el, opts, sel) { + const old = el.value; + el.innerHTML = ''; + (opts||[]).forEach(o=>{ + const opt = document.createElement('option'); + opt.value = o; opt.textContent = o; + el.appendChild(opt); + }); + el.value = sel||""; + if(el.value!==old) el.dispatchEvent(new Event('change')); + } + elems.supplier.addEventListener('change', ()=>{ + populate(elems.category, + elems.supplier.value? Object.keys(data[elems.supplier.value]||{}) : [], + node.category); + }); + elems.category.addEventListener('change', ()=>{ + const s=elems.supplier.value, c=elems.category.value; + populate(elems.type, + (s&&c)? Object.keys(data[s][c]||{}) : [], + node.assetType); + }); + elems.type.addEventListener('change', ()=>{ + const s=elems.supplier.value, c=elems.category.value, t=elems.type.value; + const md = (s&&c&&t)? data[s][c][t]||[] : []; + populate(elems.model, md.map(m=>m.name), node.model); + }); + elems.model.addEventListener('change', ()=>{ + const s=elems.supplier.value, c=elems.category.value, t=elems.type.value, m=elems.model.value; + const md = (s&&c&&t)? data[s][c][t]||[] : []; + const entry = md.find(x=>x.name===m); + populate(elems.unit, entry? entry.units : [], node.unit); + }); + }; + ` + } + +/** + * Generate HTML template for asset fields + */ + getHtmlTemplate() { + return ` + +
+

Asset selection

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ `; + } + + /** + * Get client-side HTML injection code + */ + getHtmlInjectionCode(nodeName) { + const htmlTemplate = this.getHtmlTemplate().replace(/`/g, '\\`').replace(/\$/g, '\\$'); + + return ` + // Asset HTML injection for ${nodeName} + window.EVOLV.nodes.${nodeName}.assetMenu.injectHtml = function() { + const placeholder = document.getElementById('asset-fields-placeholder'); + if (placeholder && !placeholder.hasChildNodes()) { + placeholder.innerHTML = \`${htmlTemplate}\`; + console.log('Asset HTML injected successfully'); + } + }; + `; + } + + /** + * Returns the JS that injects the saveEditor function + */ + getSaveInjectionCode(nodeName) { + return ` + // Asset Save injection for ${nodeName} + window.EVOLV.nodes.${nodeName}.assetMenu.saveEditor = function(node) { + console.log('Saving asset properties for ${nodeName}…'); + const fields = ['supplier','category','assetType','model','unit']; + const errors = []; + fields.forEach(f => { + const el = document.getElementById(\`node-input-\${f}\`); + node[f] = el ? el.value : ''; + }); + if (node.assetType && !node.unit) errors.push('Unit must be set when type is specified.'); + if (!node.unit) errors.push('Unit is required.'); + errors.forEach(e=>RED.notify(e,'error')); + + // --- DEBUG: show exactly what was saved --- + const saved = fields.reduce((o,f) => { o[f] = node[f]; return o; }, {}); + console.log('→ assetMenu.saveEditor result:', saved); + + return errors.length===0; + }; + `; + } + +} + +module.exports = AssetMenu; diff --git a/src/menu/index.js b/src/menu/index.js new file mode 100644 index 0000000..923b356 --- /dev/null +++ b/src/menu/index.js @@ -0,0 +1,85 @@ +const AssetMenu = require('./asset.js'); +const LoggerMenu = require('./logger.js'); +const PhysicalPositionMenu = require('./physicalPosition.js'); + +class MenuManager { + + constructor() { + this.registeredMenus = new Map(); // Store menu type instances + this.registerMenu('asset', new AssetMenu()); // Register asset menu by default + this.registerMenu('logger', new LoggerMenu()); // Register logger menu by default + this.registerMenu('position', new PhysicalPositionMenu()); // Register position menu by default + } + + /** + * Register a menu type with its handler instance + * @param {string} menuType - The type of menu (e.g., 'asset', 'logging') + * @param {object} menuHandler - The menu handler instance + */ + registerMenu(menuType, menuHandler) { + this.registeredMenus.set(menuType, menuHandler); + } + + /** + * Create a complete endpoint script with data and initialization functions + * @param {string} nodeName - The name of the node type + * @param {Array} menuTypes - Array of menu types to include + * @returns {string} Complete JavaScript code to serve + */ + createEndpoint(nodeName, menuTypes) { + // 1. Collect all menu data + const menuData = {}; + menuTypes.forEach(menuType => { + const handler = this.registeredMenus.get(menuType); + if (handler && typeof handler.getAllMenuData === 'function') { + menuData[menuType] = handler.getAllMenuData(); + } + }); + + // Generate HTML injection code + const htmlInjections = menuTypes.map(type => { + const menu = this.registeredMenus.get(type); + if (menu && menu.getHtmlInjectionCode) { + return menu.getHtmlInjectionCode(nodeName); + } + return ''; + }).join('\n'); + + // 2. Collect all client initialization code + const initFunctions = []; + menuTypes.forEach(menuType => { + const handler = this.registeredMenus.get(menuType); + if (handler && typeof handler.getClientInitCode === 'function') { + initFunctions.push(handler.getClientInitCode(nodeName)); + } + }); + + // 3. Convert menu data to JSON + const menuDataJSON = JSON.stringify(menuData, null, 2); + + // 4. Assemble the complete script + return ` + // Create the namespace structure + window.EVOLV = window.EVOLV || {}; + window.EVOLV.nodes = window.EVOLV.nodes || {}; + window.EVOLV.nodes.${nodeName} = window.EVOLV.nodes.${nodeName} || {}; + + // Inject the pre-loaded menu data directly into the namespace + window.EVOLV.nodes.${nodeName}.menuData = ${menuDataJSON}; + + ${initFunctions.join('\n\n')} + + // Main initialization function that calls all menu initializers + window.EVOLV.nodes.${nodeName}.initEditor = function(node) { + ${menuTypes.map(type => ` + if (window.EVOLV.nodes.${nodeName}.${type}Menu && window.EVOLV.nodes.${nodeName}.${type}Menu.initEditor) { + window.EVOLV.nodes.${nodeName}.${type}Menu.initEditor(node); + }`).join('')} + }; + + console.log('${nodeName} menu data and initializers loaded for: ${menuTypes.join(', ')}'); + `; + } +} + +module.exports = MenuManager; \ No newline at end of file diff --git a/src/menu/logger.js b/src/menu/logger.js new file mode 100644 index 0000000..194b0cf --- /dev/null +++ b/src/menu/logger.js @@ -0,0 +1,134 @@ +class LoggerMenu { + constructor() { + // no external data files for logger – all static + } + + // 1) Server‐side: return the static menuData + getAllMenuData() { + return { + logLevels: [ + { value: 'error', label: 'Error', description: 'Only error messages' }, + { value: 'warn', label: 'Warn', description: 'Warning and error messages' }, + { value: 'info', label: 'Info', description: 'Info, warning and error messages' }, + { value: 'debug', label: 'Debug', description: 'All messages including debug' } + ] + }; + } + + // 2) Client‐side: inject the dropdown options + getDataInjectionCode(nodeName) { + return ` + // Logger data loader for ${nodeName} + window.EVOLV.nodes.${nodeName}.loggerMenu.loadData = function(node) { + const data = window.EVOLV.nodes.${nodeName}.menuData.logger; + const sel = document.getElementById('node-input-logLevel'); + if (!sel) return; + sel.innerHTML = ''; + data.logLevels.forEach(l => { + const opt = document.createElement('option'); + opt.value = l.value; + opt.textContent = l.label; + opt.title = l.description; + sel.appendChild(opt); + }); + sel.value = node.logLevel || 'info'; + }; + `; + } + +getHtmlInjectionCode(nodeName) { + const tpl = ` +

Internal logging

+
+ + +
+
+ + +
+ `.replace(/`/g,'\\`').replace(/\$/g,'\\$'); + + return ` + // Logger HTML injection for ${nodeName} + window.EVOLV.nodes.${nodeName}.loggerMenu.injectHtml = function() { + const ph = document.getElementById('logger-fields-placeholder'); + if (ph && !ph.hasChildNodes()) { + ph.innerHTML = \`${tpl}\`; + } + }; + `; +} + + // 3) Client‐side: wire up the enable‐toggle behavior + getEventInjectionCode(nodeName) { + return ` + // Logger event wiring for ${nodeName} + window.EVOLV.nodes.${nodeName}.loggerMenu.wireEvents = function(node) { + const chk = document.getElementById('node-input-enableLog'); + const row = document.getElementById('row-logLevel'); + if (!chk || !row) return; + const toggle = () => { + row.style.display = chk.checked ? 'block' : 'none'; + }; + chk.checked = node.enableLog || false; + toggle(); + chk.addEventListener('change', toggle); + }; + `; + } + + // 4) Client‐side: save logic + getSaveInjectionCode(nodeName) { + return ` + // Logger Save injection for ${nodeName} + window.EVOLV.nodes.${nodeName}.loggerMenu.saveEditor = function(node) { + console.log('Saving logger properties for ${nodeName}…'); + const chk = document.getElementById('node-input-enableLog'); + const sel = document.getElementById('node-input-logLevel'); + node.enableLog = chk ? chk.checked : false; + node.logLevel = sel ? sel.value : 'info'; + const errors = []; + if (node.enableLog && !node.logLevel) { + errors.push('Log level must be selected when logging is enabled.'); + } + errors.forEach(e => RED.notify(e,'error')); + // --- DEBUG: what was saved --- + console.log('→ loggerMenu.saveEditor result:', { + enableLog: node.enableLog, + logLevel: node.logLevel + }); + return errors.length === 0; + }; + `; + } + + // 5) Compose everything into one client‐side payload + getClientInitCode(nodeName) { + const dataCode = this.getDataInjectionCode(nodeName); + const eventCode = this.getEventInjectionCode(nodeName); + const saveCode = this.getSaveInjectionCode(nodeName); + const htmlCode = this.getHtmlInjectionCode(nodeName); + + return ` + // --- LoggerMenu for ${nodeName} --- + window.EVOLV.nodes.${nodeName}.loggerMenu = + window.EVOLV.nodes.${nodeName}.loggerMenu || {}; + + ${htmlCode} + ${dataCode} + ${eventCode} + ${saveCode} + + // oneditprepare calls this + window.EVOLV.nodes.${nodeName}.loggerMenu.initEditor = function(node) { + // ------------------ BELOW sequence is important! ------------------------------- + this.injectHtml(); + this.loadData(node); + this.wireEvents(node); + }; + `; + } +} + +module.exports = LoggerMenu; \ No newline at end of file diff --git a/src/menu/physicalPosition.js b/src/menu/physicalPosition.js new file mode 100644 index 0000000..fa1cab8 --- /dev/null +++ b/src/menu/physicalPosition.js @@ -0,0 +1,123 @@ + +class PhysicalPositionMenu { + + // 1) Server-side: provide the option groups + getAllMenuData() { + return { + positionGroups: [ + { group: 'Positional', options: [ + { value: 'upstream', label: '⬅ Upstream' }, + { value: 'atEquipment', label: '⚙️ At Equipment' }, + { value: 'downstream', label: '➡ Downstream' } + ] + } + ] + }; + } + + // 2) HTML template (pure markup) + getHtmlTemplate() { + return ` +
+

Physical Position vs parent

+
+ + +
+
+ `; + } + + // 3) HTML injector + getHtmlInjectionCode(nodeName) { + const tpl = this.getHtmlTemplate() + .replace(/`/g,'\\`').replace(/\$/g,'\\$'); + return ` + // PhysicalPosition HTML injection for ${nodeName} + window.EVOLV.nodes.${nodeName}.positionMenu.injectHtml = function() { + const ph = document.getElementById('position-fields-placeholder'); + if (ph && !ph.hasChildNodes()) { + ph.innerHTML = \`${tpl}\`; + } + }; + `; + } + + // 4) Data-loader injector + getDataInjectionCode(nodeName) { + return ` + // PhysicalPosition data loader for ${nodeName} + window.EVOLV.nodes.${nodeName}.positionMenu.loadData = function(node) { + const data = window.EVOLV.nodes.${nodeName}.menuData.position; + const sel = document.getElementById('node-input-physicalAspect'); + if (!sel) return; + sel.innerHTML = ''; + (data.positionGroups||[]).forEach(grp => { + const optg = document.createElement('optgroup'); + optg.label = grp.group; + grp.options.forEach(o=>{ + const opt = document.createElement('option'); + opt.value = o.value; + opt.textContent = o.label; + optg.appendChild(opt); + }); + sel.appendChild(optg); + }); + // default to “atEquipment” if not set + sel.value = node.physicalAspect || 'atEquipment'; + }; + `; + } + + // 5) (no special events needed, but stub for symmetry) + getEventInjectionCode(nodeName) { + return ` + // PhysicalPosition events for ${nodeName} + window.EVOLV.nodes.${nodeName}.positionMenu.wireEvents = function(node) { + // no dynamic behavior + }; + `; + } + + // 6) Save-logic injector + getSaveInjectionCode(nodeName) { + return ` + // PhysicalPosition Save injection for ${nodeName} + window.EVOLV.nodes.${nodeName}.positionMenu.saveEditor = function(node) { + const sel = document.getElementById('node-input-physicalAspect'); + node.physicalAspect = sel? sel.value : 'atEquipment'; + return true; + }; + `; + } + + // 7) Compose everything into one client bundle + getClientInitCode(nodeName) { + const htmlCode = this.getHtmlInjectionCode(nodeName); + const dataCode = this.getDataInjectionCode(nodeName); + const eventCode = this.getEventInjectionCode(nodeName); + const saveCode = this.getSaveInjectionCode(nodeName); + + return ` + // --- PhysicalPositionMenu for ${nodeName} --- + window.EVOLV.nodes.${nodeName}.positionMenu = + window.EVOLV.nodes.${nodeName}.positionMenu || {}; + + ${htmlCode} + ${dataCode} + ${eventCode} + ${saveCode} + + // hook into oneditprepare + window.EVOLV.nodes.${nodeName}.positionMenu.initEditor = function(node) { + this.injectHtml(); + this.loadData(node); + this.wireEvents(node); + }; + `; + } +} + +module.exports = PhysicalPositionMenu; \ No newline at end of file