locutus 2.0.30 → 2.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # Locutus
2
+
3
+ > All your standard libraries will be assimilated into our JavaScript collective. Resistance is futile.
4
+
5
+ Welcome to Locutus, where the boundaries of coding languages blur. We're a dedicated collective developers on a mission
6
+ to explore the possibilities of porting standard libraries from various programming language (Go, Ruby, PHP, C) to
7
+ JavaScript. Our journey is one of discovery, innovation, and sometimes, delightful chaos.
8
+
9
+ From the complex to the quirky, we assimilate libraries with a spirit of curiosity and a penchant for experimentation.
10
+ Our creations typically start as rainy Sunday afternoon puzzles, and end up ranging from groundbreaking functions that
11
+ enhance the JavaScript ecosystem, to unique oddities that challenge the norms of coding.
12
+
13
+ As we navigate through this uncharted territory, we invite you to join us. Whether to contribute, learn, or simply
14
+ marvel at the wonders of cross-language integration and portability, your presence on GitHub is valued.
15
+
16
+ Embark on this journey with us at [locutus.io](https://locutus.io/).
17
+
18
+ Use our creations at your own risk, and may they inspire you to push the boundaries of what's possible with JavaScript.
19
+
20
+ ## Table of contents
21
+
22
+ - [Install](#install)
23
+ - [Use](#use)
24
+ - [Development](#development)
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ yarn add locutus
30
+ ```
31
+
32
+ ## Use
33
+
34
+ ```bash
35
+ $ vim php.js
36
+ ```
37
+
38
+ ```javascript
39
+ const sprintf = require('locutus/php/strings/sprintf')
40
+ const echo = require('locutus/php/strings/echo')
41
+ const effectiveness = 'futile'
42
+ echo(sprintf('Resistance is %s', effectiveness))
43
+ ```
44
+
45
+ ```bash
46
+ $ node php.js
47
+ Resistance is futile
48
+ ```
49
+
50
+ ```bash
51
+ $ vim go.js
52
+ ```
53
+
54
+ ```javascript
55
+ const strings = require('locutus/golang/strings')
56
+ console.log(strings.Contains('Locutus', 'cut'))
57
+ ```
58
+
59
+ ```bash
60
+ $ node go.js
61
+ true
62
+ ```
63
+
64
+ ## Development
65
+
66
+ Some guidelines and instructions can be found in [CONTRIBUTING.md](CONTRIBUTING.md)
package/_util/util.js CHANGED
@@ -278,7 +278,7 @@ var Util = function () {
278
278
 
279
279
  var basename = path.basename(params.filepath);
280
280
  var subdir = path.dirname(params.filepath);
281
- var testpath = this.__test + '/languages/' + subdir + '/test-' + basename;
281
+ var testpath = this.__test + '/generated/' + subdir + '/test-' + basename;
282
282
  var testdir = path.dirname(testpath);
283
283
  var relativeSrcForTestDir = path.relative(testdir, self.__src);
284
284
  var relativeTestFileForRoot = path.relative(self.__root, testpath);
@@ -300,6 +300,9 @@ var Util = function () {
300
300
 
301
301
  codez.push('// warning: This file is auto generated by `yarn build:tests`');
302
302
  codez.push('// Do not edit by hand!');
303
+ codez.push('');
304
+ codez.push('\'use strict\'');
305
+ codez.push('');
303
306
 
304
307
  // Add globals
305
308
  for (var global in self.globals) {
package/_util/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/_util/util.js"],"names":["globby","require","path","fs","fsPromises","promises","async","YAML","debug","indentString","_","esprima","Util","argv","__src","dirname","__dirname","__root","__test","globals","pattern","concurrency","authorKeys","langDefaults","c","order","function_title_template","human","packageType","inspiration_urls","function_description_template","golang","python","ruby","php","alias","allowSkip","indexOf","_reindexBuffer","_injectwebBuffer","cb","self","_runFunctionOnAll","_injectwebOne","err","indexHtml","writeFileSync","_reindexOne","indexJs","requires","sort","join","_writetestOne","runFunc","q","queue","fullpath","callback","_load","bind","params","files","sync","push","drain","filepath","dir","basefile","basename","module","line","authors","forEach","key","headKeys","flattenDeep","langPath","language","langIndexPath","catPath","category","catIndexPath","funcPath","func_name","langTitle","langData","Object","assign","warning","type","layout","title","dump","trim","catTitle","catData","functionTitle","replace","functionDescription","funcData","examples","example","map","lines","i","returns","dependencies","notes","note","description","function","permalink","buf","code","mkdir","recursive","then","writeFile","Error","name","relativeSrcForTest","JSON","stringify","subdir","testpath","testdir","relativeSrcForTestDir","relative","relativeTestFileForRoot","testProps","test","describeSkip","codez","global","_addRequire","length","humanIndex","parseInt","itSkip","body","testExpected","j","fileOrName","requesterParams","substr","msg","readFile","_opener","_parse","depCodePath","loaded","_findDependencies","parts","split","shift","codepath","pop","ast","parseScript","comment","loc","range","moduleExports","filter","node","leftArg","expression","left","rightArg","right","object","property","id","exp","funcName","funcParams","p","funcLoc","firstFuncBodyElementLoc","headComments","comments","start","end","value","_headKeys","func_arguments","headLines","keys","match","dmatch","val","num","exports"],"mappings":"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","file":"util.js","sourcesContent":["const globby = require('globby')\nconst path = require('path')\nconst fs = require('fs')\nconst fsPromises = fs.promises\nconst async = require('async')\nconst YAML = require('js-yaml')\nconst debug = require('debug')('locutus:utils')\nconst indentString = require('indent-string')\nconst _ = require('lodash')\nconst esprima = require('esprima')\n\nclass Util {\n constructor(argv) {\n if (!argv) {\n argv = []\n }\n this.__src = path.dirname(__dirname)\n this.__root = path.dirname(path.dirname(__dirname))\n this.__test = path.dirname(path.dirname(__dirname)) + '/test'\n\n this.globals = {}\n\n this.pattern = [this.__src + '/**/**/*.js', '!**/index.js', '!**/_util/**']\n this.concurrency = 8\n this.authorKeys = [\n 'original by',\n 'improved by',\n 'reimplemented by',\n 'parts by',\n 'bugfixed by',\n 'revised by',\n 'input by',\n ]\n\n this.langDefaults = {\n c: {\n order: 1,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'C',\n packageType: 'header file',\n inspiration_urls: [\n '<a href=\"https://en.cppreference.com/w/c/numeric/math\">the C math.h documentation</a>',\n '<a href=\"https://sourceware.org/git/?p=glibc.git;a=tree;f=math;hb=HEAD\">the C math.h source</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://en.cppreference.com/w/c/numeric/[category]/[function]\">[language]\\'s [function] found in the [category].h header file</a> looks like.',\n },\n golang: {\n order: 2,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'Go',\n packageType: 'package',\n inspiration_urls: [\n '<a href=\"https://golang.org/pkg/strings/\">Go strings documentation</a>',\n '<a href=\"https://golang.org/src/strings/strings.go\">Go strings source</a>',\n '<a href=\"https://golang.org/src/strings/example_test.go\">Go strings examples source</a>',\n '<a href=\"https://gophersjs.com\">GopherJS</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://golang.org/pkg/[category]/#[function]\">[language]\\'s [category].[function]</a> looks like.',\n },\n python: {\n order: 3,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'Python',\n packageType: 'module',\n inspiration_urls: [\n '<a href=\"https://docs.python.org/3/library/string.html\">the Python 3 standard library string page</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://docs.python.org/3/library/[category].html#[category].[function]\">[language]\\'s [category].[function]</a> looks like.',\n },\n ruby: {\n order: 4,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'Ruby',\n packageType: 'module',\n inspiration_urls: ['<a href=\"https://ruby-doc.org/core-2.2.2/Math.html\">the Ruby core documentation</a>'],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://ruby-doc.org/core-2.2.2/[category].html#method-c-[function]\">[language]\\'s [category].[function]</a> looks like.',\n },\n php: {\n order: 5,\n function_title_template: \"[language]'s [function] in JavaScript\",\n human: 'PHP',\n packageType: 'extension',\n inspiration_urls: [\n '<a href=\"https://php.net/manual/en/book.strings.php\">the PHP string documentation</a>',\n '<a href=\"https://github.com/php/php-src/blob/master/ext/standard/string.c#L5338\">the PHP string source</a>',\n '<a href=\"https://github.com/php/php-src/blob/master/ext/standard/tests/strings/str_pad_variation1.phpt\">a PHP str_pad test</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://php.net/manual/en/function.[functiondashed].php\">[language]\\'s [function]</a> looks like.',\n alias: [\n '/categories/',\n '/categories/array/',\n '/categories/bc/',\n '/categories/ctype/',\n '/categories/datetime/',\n '/categories/exec/',\n '/categories/filesystem/',\n '/categories/funchand/',\n '/categories/i18n/',\n '/categories/index/',\n '/categories/info/',\n '/categories/json/',\n '/categories/math/',\n '/categories/misc/',\n '/categories/net/',\n '/categories/network/',\n '/categories/pcre/',\n '/categories/strings/',\n '/categories/url/',\n '/categories/var/',\n '/categories/xdiff/',\n '/categories/xml/',\n '/functions/index/',\n '/functions/',\n '/packages/',\n '/packages/index/',\n ],\n },\n }\n\n this.allowSkip = argv.indexOf('--noskip') === -1\n\n this._reindexBuffer = {}\n this._injectwebBuffer = {}\n }\n\n injectweb(cb) {\n const self = this\n this._runFunctionOnAll(this._injectwebOne, function (err) {\n if (err) {\n return cb(err)\n }\n for (const indexHtml in self._injectwebBuffer) {\n debug('writing: ' + indexHtml)\n fs.writeFileSync(indexHtml, self._injectwebBuffer[indexHtml], 'utf-8')\n }\n })\n }\n\n reindex(cb) {\n const self = this\n self._reindexBuffer = {}\n self._runFunctionOnAll(self._reindexOne, function (err) {\n if (err) {\n return cb(err)\n }\n for (const indexJs in self._reindexBuffer) {\n const requires = self._reindexBuffer[indexJs]\n requires.sort()\n debug('writing: ' + indexJs)\n fs.writeFileSync(indexJs, requires.join('\\n') + '\\n', 'utf-8')\n }\n })\n }\n\n writetests(cb) {\n this._runFunctionOnAll(this._writetestOne, cb)\n }\n\n _runFunctionOnAll(runFunc, cb) {\n const self = this\n\n const q = async.queue(function (fullpath, callback) {\n self._load.bind(self, fullpath, {}, function (err, params) {\n if (err) {\n return callback(err)\n }\n\n runFunc.bind(self, params, callback)()\n })()\n }, self.concurrency)\n\n debug({\n pattern: self.pattern,\n })\n const files = globby.sync(self.pattern)\n\n q.push(files)\n\n q.drain = cb\n }\n\n _reindexOne(params, cb) {\n const fullpath = this.__src + '/' + params.filepath\n const dir = path.dirname(fullpath)\n const basefile = path.basename(fullpath, '.js')\n const indexJs = dir + '/index.js'\n\n let module = basefile\n if (basefile === 'Index2') {\n module = 'Index'\n }\n\n if (!this._reindexBuffer[indexJs]) {\n this._reindexBuffer[indexJs] = []\n }\n\n const line = 'module.exports.' + module + \" = require('./\" + basefile + \"')\"\n this._reindexBuffer[indexJs].push(line)\n return cb(null)\n }\n\n _injectwebOne(params, cb) {\n const authors = {}\n this.authorKeys.forEach(function (key) {\n if (params.headKeys[key]) {\n authors[key] = _.flattenDeep(params.headKeys[key])\n }\n })\n\n const langPath = [this.__root, '/website/source/', params.language].join('')\n\n const langIndexPath = langPath + '/index.html'\n const catPath = langPath + '/' + params.category\n const catIndexPath = catPath + '/' + 'index.html'\n const funcPath = catPath + '/' + params.func_name + '.html'\n\n if (!this._injectwebBuffer[langIndexPath]) {\n let langTitle = ''\n langTitle += this.langDefaults[params.language].human + ' '\n langTitle += this.langDefaults[params.language].packageType + 's '\n langTitle += ' in JavaScript'\n\n const langData = Object.assign({}, this.langDefaults[params.language], {\n warning: 'This file is auto generated by `yarn web:inject`, do not edit by hand',\n type: 'language',\n layout: 'language',\n language: params.language,\n title: langTitle,\n })\n this._injectwebBuffer[langIndexPath] = '---' + '\\n' + YAML.dump(langData).trim() + '\\n' + '---' + '\\n'\n }\n\n if (!this._injectwebBuffer[catIndexPath]) {\n let catTitle = ''\n catTitle += this.langDefaults[params.language].human + \"'s \"\n catTitle += params.category + ' '\n catTitle += this.langDefaults[params.language].packageType + ' '\n catTitle += ' in JavaScript'\n\n const catData = {\n warning: 'This file is auto generated by `yarn web:inject`, do not edit by hand',\n type: 'category',\n layout: 'category',\n language: params.language,\n category: params.category,\n title: catTitle,\n }\n this._injectwebBuffer[catIndexPath] = '---' + '\\n' + YAML.dump(catData).trim() + '\\n' + '---' + '\\n'\n }\n\n const functionTitle = this.langDefaults[params.language].function_title_template\n .replace(/\\[language]/g, this.langDefaults[params.language].human)\n .replace(/\\[category]/g, params.category)\n .replace(/\\[function]/g, params.func_name)\n .replace(/\\[functiondashed]/g, params.func_name.replace(/_/g, '-'))\n\n const functionDescription = this.langDefaults[params.language].function_description_template\n .replace(/\\[language]/g, this.langDefaults[params.language].human)\n .replace(/\\[category]/g, params.category)\n .replace(/\\[function]/g, params.func_name)\n .replace(/\\[functiondashed]/g, params.func_name.replace(/_/g, '-'))\n\n const funcData = {\n warning: 'This file is auto generated by `yarn web:inject`, do not edit by hand',\n examples: (params.headKeys.example || []).map(function (lines, i) {\n return lines.join('\\n')\n }),\n returns: (params.headKeys.returns || []).map(function (lines, i) {\n return lines.join('\\n')\n }),\n dependencies: [],\n authors: authors || {},\n notes: (params.headKeys.note || []).map(function (lines, i) {\n return lines.join('\\n')\n }),\n type: 'function',\n layout: 'function',\n title: functionTitle,\n description: functionDescription,\n function: params.func_name,\n category: params.category,\n language: params.language,\n permalink: params.language + '/' + params.category + '/' + params.func_name + '/',\n alias: [\n '/functions/' + params.language + '/' + params.func_name + '/',\n '/functions/' + params.category + '/' + params.func_name + '/',\n '/' + params.language + '/' + params.func_name + '/',\n ],\n }\n\n if (params.language === 'php') {\n funcData.alias.push('/functions/' + params.func_name + '/')\n }\n\n let buf = '---' + '\\n' + YAML.dump(funcData).trim() + '\\n' + '---' + '\\n'\n\n buf += `{% codeblock lang:javascript %}${params.code}{% endcodeblock %}`\n\n fsPromises.mkdir(path.dirname(funcPath), { recursive: true }).then(\n function () {\n fs.writeFile(funcPath, buf, 'utf-8', cb)\n },\n function (err) {\n throw new Error('Could not mkdir for ' + funcPath + '. ' + err)\n },\n )\n }\n\n _addRequire(name, relativeSrcForTest) {\n return [\n 'var ',\n name,\n \" = require('\",\n relativeSrcForTest,\n \"') // eslint-disable-line no-unused-vars,camelcase\",\n ].join('')\n }\n\n _writetestOne(params, cb) {\n const self = this\n\n if (!params.func_name) {\n throw new Error('No func_name in ' + JSON.stringify(params))\n }\n if (!params.headKeys) {\n throw new Error('No headKeys in ' + params.func_name)\n }\n if (!params.headKeys.example) {\n throw new Error('No example in ' + params.func_name)\n }\n\n const basename = path.basename(params.filepath)\n const subdir = path.dirname(params.filepath)\n const testpath = this.__test + '/languages/' + subdir + '/test-' + basename\n const testdir = path.dirname(testpath)\n const relativeSrcForTestDir = path.relative(testdir, self.__src)\n const relativeTestFileForRoot = path.relative(self.__root, testpath)\n\n // console.log(relativeSrcForTestDir)\n // process.exit(1)\n\n let testProps = ''\n if (params.headKeys.test) {\n testProps = params.headKeys.test[0][0]\n }\n\n let describeSkip = ''\n if (self.allowSkip && testProps.indexOf('skip-all') !== -1) {\n describeSkip = '.skip'\n }\n\n const codez = []\n\n codez.push('// warning: This file is auto generated by `yarn build:tests`')\n codez.push('// Do not edit by hand!')\n\n // Add globals\n for (const global in self.globals) {\n codez.push('var ' + global + ' = ' + self.globals[global])\n }\n\n // Set timezone for testing dates\n // Not ideal: https://stackoverflow.com/questions/8083410/how-to-set-default-timezone-in-node-js\n codez.push(\"process.env.TZ = 'UTC'\")\n\n codez.push('var ' + 'expect' + \" = require('chai').expect\")\n\n // Add language-wide dependencies\n // @todo: It would be great if we could remove this\n if (params.language === 'php') {\n codez.push(self._addRequire('ini_set', relativeSrcForTestDir + '/' + 'php/info/ini_set'))\n codez.push(self._addRequire('ini_get', relativeSrcForTestDir + '/' + 'php/info/ini_get'))\n if (params.func_name === 'localeconv') {\n codez.push(self._addRequire('setlocale', relativeSrcForTestDir + '/' + 'php/strings/setlocale'))\n }\n if (params.func_name === 'i18n_loc_get_default') {\n codez.push(\n self._addRequire('i18n_loc_set_default', relativeSrcForTestDir + '/' + 'php/i18n/i18n_loc_set_default'),\n )\n }\n }\n\n // Add the main function to test\n codez.push(self._addRequire(params.func_name, relativeSrcForTestDir + '/' + params.filepath))\n\n codez.push('')\n\n codez.push(\n [\n 'describe',\n describeSkip,\n \"('src/\",\n params.filepath,\n ' (tested in ',\n relativeTestFileForRoot,\n \")', function () {\",\n ].join(''),\n )\n\n // Run each example\n for (const i in params.headKeys.example) {\n if (!params.headKeys.returns[i] || !params.headKeys.returns[i].length) {\n throw new Error('There is no return for example ' + i, test, params)\n }\n\n const humanIndex = parseInt(i, 10) + 1\n let itSkip = ''\n if (self.allowSkip && testProps.indexOf('skip-' + humanIndex) !== -1) {\n itSkip = '.skip'\n }\n\n codez.push([' it', itSkip, \"('should pass example \", humanIndex, \"', function (done) {\"].join(''))\n\n const body = []\n\n const testExpected = params.headKeys.returns[i].join('\\n')\n\n body.push('var expected = ' + testExpected)\n\n // Execute line by line (see date.js why)\n // We need result be the last result of the example code\n for (const j in params.headKeys.example[i]) {\n if (parseInt(j, 10) === params.headKeys.example[i].length - 1) {\n // last action gets saved\n body.push('var result = ' + params.headKeys.example[i][j].replace('var $result = ', ''))\n } else {\n body.push(params.headKeys.example[i][j])\n }\n }\n\n body.push('expect(result).to.deep.equal(expected)')\n body.push('done()')\n\n codez.push(indentString(body.join('\\n'), ' ', 4))\n\n codez.push(' })')\n }\n\n codez.push('})')\n codez.push('')\n\n const code = codez.join('\\n')\n\n // Write to disk\n fsPromises.mkdir(testdir, { recursive: true }).then(\n function () {\n debug('writing: ' + testpath)\n fs.writeFile(testpath, code, 'utf-8', cb)\n },\n function (err) {\n throw new Error(err)\n },\n )\n }\n\n // Environment-specific file opener. function name needs to\n // be translated to code. The difficulty is in finding the\n // category.\n _opener(fileOrName, requesterParams, cb) {\n const self = this\n let pattern\n\n const language = requesterParams.language || '*'\n\n if (path.basename(fileOrName, '.js').indexOf('.') !== -1) {\n // periods in the basename, like: unicode.utf8.RuneCountInString or strings.sprintf\n pattern = self.__src + '/' + language + '/' + fileOrName.replace(/\\./g, '/') + '.js'\n } else if (fileOrName.indexOf('/') === -1) {\n // no slashes, like: sprintf\n pattern = self.__src + '/' + language + '/*/' + fileOrName + '.js'\n } else if (fileOrName.substr(0, 1) === '/') {\n // absolute path, like: /Users/john/code/locutus/php/strings/sprintf.js\n pattern = fileOrName\n } else {\n // relative path, like: php/strings/sprintf.js\n pattern = self.__src + '/' + fileOrName\n }\n\n pattern = pattern.replace('golang/strings/Index.js', 'golang/strings/Index2.js')\n debug('loading: ' + pattern)\n const files = globby.sync(pattern, {})\n\n if (files.length !== 1) {\n const msg = `Found ${files.length} occurances of ${fileOrName} via pattern: ${pattern}`\n return cb(new Error(msg))\n }\n\n const filepath = files[0]\n\n if (path.basename(filepath) === 'index.js') {\n return cb(null)\n }\n\n if (!filepath) {\n return cb(new Error('Could not find ' + pattern))\n }\n\n fs.readFile(filepath, 'utf-8', function (err, code) {\n if (err) {\n return cb(new Error('Error while opening ' + filepath + '. ' + err))\n }\n return cb(null, filepath, code)\n })\n }\n\n _load(fileOrName, requesterParams, cb) {\n const self = this\n self._opener(fileOrName, requesterParams, function (err, fullpath, code) {\n if (err) {\n return cb(err)\n }\n\n const filepath = path.relative(self.__src, fullpath)\n self._parse(filepath, code, cb)\n })\n }\n\n _findDependencies(fileOrName, requesterParams, dependencies, cb) {\n const self = this\n\n if (!requesterParams.headKeys['depends on'] || !requesterParams.headKeys['depends on'].length) {\n if (cb) {\n cb(null, {})\n }\n return\n }\n\n let i\n let depCodePath\n let loaded = 0\n for (i in requesterParams.headKeys['depends on']) {\n depCodePath = requesterParams.headKeys['depends on'][i][0]\n\n self._load(depCodePath, requesterParams, function (err, params) {\n if (err) {\n return cb(err)\n }\n\n dependencies[depCodePath] = params\n self._findDependencies(depCodePath, params, dependencies)\n\n if (cb && ++loaded === requesterParams.headKeys['depends on'].length) {\n cb(null, dependencies)\n }\n })\n }\n }\n\n _parse(filepath, code, cb) {\n if (!code) {\n return cb(new Error('Unable to parse ' + filepath + '. Received no code'))\n }\n\n if (filepath.indexOf('/') === -1) {\n return cb(new Error(\"Parse only accepts relative filepaths. Received: '\" + filepath + \"'\"))\n }\n\n const parts = filepath.split('/')\n const language = parts.shift()\n const codepath = parts.join('.')\n const name = parts.pop()\n const category = parts.join('.')\n\n const ast = esprima.parseScript(code, { comment: true, loc: true, range: true })\n\n // find module.exports in the code\n const moduleExports = ast.body.filter((node) => {\n try {\n const leftArg = node.expression.left\n const rightArg = node.expression.right\n\n return (\n leftArg.object.name === 'module' &&\n leftArg.property.name === 'exports' &&\n rightArg.type === 'FunctionExpression' &&\n rightArg.id.type === 'Identifier' &&\n !!rightArg.id.name\n )\n } catch (err) {\n return false\n }\n })\n\n // if file contains more than one export, fail\n if (moduleExports.length !== 1) {\n return cb(Error(`File ${filepath} is allowed to contain exactly one module.exports`))\n }\n\n // get the only export\n const exp = moduleExports[0]\n\n // look for function name and param list\n const funcName = exp.expression.right.id.name\n const funcParams = exp.expression.right.params.map((p) => p.name)\n\n // remember the lines where the function is defined\n const funcLoc = exp.expression.right.loc\n\n // since comments are not included in the AST\n // but are offered in ast.comments\n // remember the location of first function body statement/expression\n const firstFuncBodyElementLoc = exp.expression.right.body.body[0].loc\n\n // get all line comments which are located between function signature definition\n // and first function body element\n const headComments = ast.comments\n .filter(\n (c) =>\n c.type === 'Line' &&\n c.loc.start.line >= funcLoc.start.line &&\n c.loc.end.line <= firstFuncBodyElementLoc.start.line,\n )\n .map((c) => c.value.trim())\n\n if (headComments.length === 0) {\n const msg = `Unable to parse ${filepath}. Did not find any comments in function definition`\n return cb(new Error(msg))\n }\n\n const headKeys = this._headKeys(headComments)\n\n const params = {\n headKeys,\n name,\n filepath,\n codepath,\n code,\n language,\n category,\n func_name: funcName,\n func_arguments: funcParams,\n }\n\n this._findDependencies(filepath, params, {}, function (err, dependencies) {\n if (err) {\n return cb(err)\n }\n\n params.dependencies = dependencies\n return cb(null, params)\n })\n }\n\n _headKeys(headLines) {\n let i\n const keys = {}\n let match = []\n let dmatch = []\n let key = ''\n let val = ''\n let num = 0\n\n for (i in headLines) {\n if (!(match = headLines[i].match(/^\\s*\\W?\\s*([a-z 0-9]+)\\s*:\\s*(.*)\\s*$/))) {\n continue\n }\n key = match[1]\n val = match[2]\n\n if ((dmatch = key.match(/^(\\w+)\\s+(\\d+)$/))) {\n // Things like examples and notes can be grouped\n key = dmatch[1]\n num = dmatch[2] - 1\n } else {\n num = 0\n }\n\n if (!keys[key]) {\n keys[key] = []\n }\n if (!keys[key][num]) {\n keys[key][num] = []\n }\n keys[key][num].push(val)\n }\n\n return keys\n }\n}\n\nmodule.exports = Util\n"]}
1
+ {"version":3,"sources":["../../src/_util/util.js"],"names":["globby","require","path","fs","fsPromises","promises","async","YAML","debug","indentString","_","esprima","Util","argv","__src","dirname","__dirname","__root","__test","globals","pattern","concurrency","authorKeys","langDefaults","c","order","function_title_template","human","packageType","inspiration_urls","function_description_template","golang","python","ruby","php","alias","allowSkip","indexOf","_reindexBuffer","_injectwebBuffer","cb","self","_runFunctionOnAll","_injectwebOne","err","indexHtml","writeFileSync","_reindexOne","indexJs","requires","sort","join","_writetestOne","runFunc","q","queue","fullpath","callback","_load","bind","params","files","sync","push","drain","filepath","dir","basefile","basename","module","line","authors","forEach","key","headKeys","flattenDeep","langPath","language","langIndexPath","catPath","category","catIndexPath","funcPath","func_name","langTitle","langData","Object","assign","warning","type","layout","title","dump","trim","catTitle","catData","functionTitle","replace","functionDescription","funcData","examples","example","map","lines","i","returns","dependencies","notes","note","description","function","permalink","buf","code","mkdir","recursive","then","writeFile","Error","name","relativeSrcForTest","JSON","stringify","subdir","testpath","testdir","relativeSrcForTestDir","relative","relativeTestFileForRoot","testProps","test","describeSkip","codez","global","_addRequire","length","humanIndex","parseInt","itSkip","body","testExpected","j","fileOrName","requesterParams","substr","msg","readFile","_opener","_parse","depCodePath","loaded","_findDependencies","parts","split","shift","codepath","pop","ast","parseScript","comment","loc","range","moduleExports","filter","node","leftArg","expression","left","rightArg","right","object","property","id","exp","funcName","funcParams","p","funcLoc","firstFuncBodyElementLoc","headComments","comments","start","end","value","_headKeys","func_arguments","headLines","keys","match","dmatch","val","num","exports"],"mappings":"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","file":"util.js","sourcesContent":["const globby = require('globby')\nconst path = require('path')\nconst fs = require('fs')\nconst fsPromises = fs.promises\nconst async = require('async')\nconst YAML = require('js-yaml')\nconst debug = require('debug')('locutus:utils')\nconst indentString = require('indent-string')\nconst _ = require('lodash')\nconst esprima = require('esprima')\n\nclass Util {\n constructor(argv) {\n if (!argv) {\n argv = []\n }\n this.__src = path.dirname(__dirname)\n this.__root = path.dirname(path.dirname(__dirname))\n this.__test = path.dirname(path.dirname(__dirname)) + '/test'\n\n this.globals = {}\n\n this.pattern = [this.__src + '/**/**/*.js', '!**/index.js', '!**/_util/**']\n this.concurrency = 8\n this.authorKeys = [\n 'original by',\n 'improved by',\n 'reimplemented by',\n 'parts by',\n 'bugfixed by',\n 'revised by',\n 'input by',\n ]\n\n this.langDefaults = {\n c: {\n order: 1,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'C',\n packageType: 'header file',\n inspiration_urls: [\n '<a href=\"https://en.cppreference.com/w/c/numeric/math\">the C math.h documentation</a>',\n '<a href=\"https://sourceware.org/git/?p=glibc.git;a=tree;f=math;hb=HEAD\">the C math.h source</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://en.cppreference.com/w/c/numeric/[category]/[function]\">[language]\\'s [function] found in the [category].h header file</a> looks like.',\n },\n golang: {\n order: 2,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'Go',\n packageType: 'package',\n inspiration_urls: [\n '<a href=\"https://golang.org/pkg/strings/\">Go strings documentation</a>',\n '<a href=\"https://golang.org/src/strings/strings.go\">Go strings source</a>',\n '<a href=\"https://golang.org/src/strings/example_test.go\">Go strings examples source</a>',\n '<a href=\"https://gophersjs.com\">GopherJS</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://golang.org/pkg/[category]/#[function]\">[language]\\'s [category].[function]</a> looks like.',\n },\n python: {\n order: 3,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'Python',\n packageType: 'module',\n inspiration_urls: [\n '<a href=\"https://docs.python.org/3/library/string.html\">the Python 3 standard library string page</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://docs.python.org/3/library/[category].html#[category].[function]\">[language]\\'s [category].[function]</a> looks like.',\n },\n ruby: {\n order: 4,\n function_title_template: \"[language]'s [category].[function] in JavaScript\",\n human: 'Ruby',\n packageType: 'module',\n inspiration_urls: ['<a href=\"https://ruby-doc.org/core-2.2.2/Math.html\">the Ruby core documentation</a>'],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://ruby-doc.org/core-2.2.2/[category].html#method-c-[function]\">[language]\\'s [category].[function]</a> looks like.',\n },\n php: {\n order: 5,\n function_title_template: \"[language]'s [function] in JavaScript\",\n human: 'PHP',\n packageType: 'extension',\n inspiration_urls: [\n '<a href=\"https://php.net/manual/en/book.strings.php\">the PHP string documentation</a>',\n '<a href=\"https://github.com/php/php-src/blob/master/ext/standard/string.c#L5338\">the PHP string source</a>',\n '<a href=\"https://github.com/php/php-src/blob/master/ext/standard/tests/strings/str_pad_variation1.phpt\">a PHP str_pad test</a>',\n ],\n function_description_template:\n 'Here’s what our current JavaScript equivalent to <a href=\"https://php.net/manual/en/function.[functiondashed].php\">[language]\\'s [function]</a> looks like.',\n alias: [\n '/categories/',\n '/categories/array/',\n '/categories/bc/',\n '/categories/ctype/',\n '/categories/datetime/',\n '/categories/exec/',\n '/categories/filesystem/',\n '/categories/funchand/',\n '/categories/i18n/',\n '/categories/index/',\n '/categories/info/',\n '/categories/json/',\n '/categories/math/',\n '/categories/misc/',\n '/categories/net/',\n '/categories/network/',\n '/categories/pcre/',\n '/categories/strings/',\n '/categories/url/',\n '/categories/var/',\n '/categories/xdiff/',\n '/categories/xml/',\n '/functions/index/',\n '/functions/',\n '/packages/',\n '/packages/index/',\n ],\n },\n }\n\n this.allowSkip = argv.indexOf('--noskip') === -1\n\n this._reindexBuffer = {}\n this._injectwebBuffer = {}\n }\n\n injectweb(cb) {\n const self = this\n this._runFunctionOnAll(this._injectwebOne, function (err) {\n if (err) {\n return cb(err)\n }\n for (const indexHtml in self._injectwebBuffer) {\n debug('writing: ' + indexHtml)\n fs.writeFileSync(indexHtml, self._injectwebBuffer[indexHtml], 'utf-8')\n }\n })\n }\n\n reindex(cb) {\n const self = this\n self._reindexBuffer = {}\n self._runFunctionOnAll(self._reindexOne, function (err) {\n if (err) {\n return cb(err)\n }\n for (const indexJs in self._reindexBuffer) {\n const requires = self._reindexBuffer[indexJs]\n requires.sort()\n debug('writing: ' + indexJs)\n fs.writeFileSync(indexJs, requires.join('\\n') + '\\n', 'utf-8')\n }\n })\n }\n\n writetests(cb) {\n this._runFunctionOnAll(this._writetestOne, cb)\n }\n\n _runFunctionOnAll(runFunc, cb) {\n const self = this\n\n const q = async.queue(function (fullpath, callback) {\n self._load.bind(self, fullpath, {}, function (err, params) {\n if (err) {\n return callback(err)\n }\n\n runFunc.bind(self, params, callback)()\n })()\n }, self.concurrency)\n\n debug({\n pattern: self.pattern,\n })\n const files = globby.sync(self.pattern)\n\n q.push(files)\n\n q.drain = cb\n }\n\n _reindexOne(params, cb) {\n const fullpath = this.__src + '/' + params.filepath\n const dir = path.dirname(fullpath)\n const basefile = path.basename(fullpath, '.js')\n const indexJs = dir + '/index.js'\n\n let module = basefile\n if (basefile === 'Index2') {\n module = 'Index'\n }\n\n if (!this._reindexBuffer[indexJs]) {\n this._reindexBuffer[indexJs] = []\n }\n\n const line = 'module.exports.' + module + \" = require('./\" + basefile + \"')\"\n this._reindexBuffer[indexJs].push(line)\n return cb(null)\n }\n\n _injectwebOne(params, cb) {\n const authors = {}\n this.authorKeys.forEach(function (key) {\n if (params.headKeys[key]) {\n authors[key] = _.flattenDeep(params.headKeys[key])\n }\n })\n\n const langPath = [this.__root, '/website/source/', params.language].join('')\n\n const langIndexPath = langPath + '/index.html'\n const catPath = langPath + '/' + params.category\n const catIndexPath = catPath + '/' + 'index.html'\n const funcPath = catPath + '/' + params.func_name + '.html'\n\n if (!this._injectwebBuffer[langIndexPath]) {\n let langTitle = ''\n langTitle += this.langDefaults[params.language].human + ' '\n langTitle += this.langDefaults[params.language].packageType + 's '\n langTitle += ' in JavaScript'\n\n const langData = Object.assign({}, this.langDefaults[params.language], {\n warning: 'This file is auto generated by `yarn web:inject`, do not edit by hand',\n type: 'language',\n layout: 'language',\n language: params.language,\n title: langTitle,\n })\n this._injectwebBuffer[langIndexPath] = '---' + '\\n' + YAML.dump(langData).trim() + '\\n' + '---' + '\\n'\n }\n\n if (!this._injectwebBuffer[catIndexPath]) {\n let catTitle = ''\n catTitle += this.langDefaults[params.language].human + \"'s \"\n catTitle += params.category + ' '\n catTitle += this.langDefaults[params.language].packageType + ' '\n catTitle += ' in JavaScript'\n\n const catData = {\n warning: 'This file is auto generated by `yarn web:inject`, do not edit by hand',\n type: 'category',\n layout: 'category',\n language: params.language,\n category: params.category,\n title: catTitle,\n }\n this._injectwebBuffer[catIndexPath] = '---' + '\\n' + YAML.dump(catData).trim() + '\\n' + '---' + '\\n'\n }\n\n const functionTitle = this.langDefaults[params.language].function_title_template\n .replace(/\\[language]/g, this.langDefaults[params.language].human)\n .replace(/\\[category]/g, params.category)\n .replace(/\\[function]/g, params.func_name)\n .replace(/\\[functiondashed]/g, params.func_name.replace(/_/g, '-'))\n\n const functionDescription = this.langDefaults[params.language].function_description_template\n .replace(/\\[language]/g, this.langDefaults[params.language].human)\n .replace(/\\[category]/g, params.category)\n .replace(/\\[function]/g, params.func_name)\n .replace(/\\[functiondashed]/g, params.func_name.replace(/_/g, '-'))\n\n const funcData = {\n warning: 'This file is auto generated by `yarn web:inject`, do not edit by hand',\n examples: (params.headKeys.example || []).map(function (lines, i) {\n return lines.join('\\n')\n }),\n returns: (params.headKeys.returns || []).map(function (lines, i) {\n return lines.join('\\n')\n }),\n dependencies: [],\n authors: authors || {},\n notes: (params.headKeys.note || []).map(function (lines, i) {\n return lines.join('\\n')\n }),\n type: 'function',\n layout: 'function',\n title: functionTitle,\n description: functionDescription,\n function: params.func_name,\n category: params.category,\n language: params.language,\n permalink: params.language + '/' + params.category + '/' + params.func_name + '/',\n alias: [\n '/functions/' + params.language + '/' + params.func_name + '/',\n '/functions/' + params.category + '/' + params.func_name + '/',\n '/' + params.language + '/' + params.func_name + '/',\n ],\n }\n\n if (params.language === 'php') {\n funcData.alias.push('/functions/' + params.func_name + '/')\n }\n\n let buf = '---' + '\\n' + YAML.dump(funcData).trim() + '\\n' + '---' + '\\n'\n\n buf += `{% codeblock lang:javascript %}${params.code}{% endcodeblock %}`\n\n fsPromises.mkdir(path.dirname(funcPath), { recursive: true }).then(\n function () {\n fs.writeFile(funcPath, buf, 'utf-8', cb)\n },\n function (err) {\n throw new Error('Could not mkdir for ' + funcPath + '. ' + err)\n },\n )\n }\n\n _addRequire(name, relativeSrcForTest) {\n return [\n 'var ',\n name,\n \" = require('\",\n relativeSrcForTest,\n \"') // eslint-disable-line no-unused-vars,camelcase\",\n ].join('')\n }\n\n _writetestOne(params, cb) {\n const self = this\n\n if (!params.func_name) {\n throw new Error('No func_name in ' + JSON.stringify(params))\n }\n if (!params.headKeys) {\n throw new Error('No headKeys in ' + params.func_name)\n }\n if (!params.headKeys.example) {\n throw new Error('No example in ' + params.func_name)\n }\n\n const basename = path.basename(params.filepath)\n const subdir = path.dirname(params.filepath)\n const testpath = this.__test + '/generated/' + subdir + '/test-' + basename\n const testdir = path.dirname(testpath)\n const relativeSrcForTestDir = path.relative(testdir, self.__src)\n const relativeTestFileForRoot = path.relative(self.__root, testpath)\n\n // console.log(relativeSrcForTestDir)\n // process.exit(1)\n\n let testProps = ''\n if (params.headKeys.test) {\n testProps = params.headKeys.test[0][0]\n }\n\n let describeSkip = ''\n if (self.allowSkip && testProps.indexOf('skip-all') !== -1) {\n describeSkip = '.skip'\n }\n\n const codez = []\n\n codez.push('// warning: This file is auto generated by `yarn build:tests`')\n codez.push('// Do not edit by hand!')\n codez.push('')\n codez.push(`'use strict'`)\n codez.push('')\n\n // Add globals\n for (const global in self.globals) {\n codez.push('var ' + global + ' = ' + self.globals[global])\n }\n\n // Set timezone for testing dates\n // Not ideal: https://stackoverflow.com/questions/8083410/how-to-set-default-timezone-in-node-js\n codez.push(\"process.env.TZ = 'UTC'\")\n\n codez.push('var ' + 'expect' + \" = require('chai').expect\")\n\n // Add language-wide dependencies\n // @todo: It would be great if we could remove this\n if (params.language === 'php') {\n codez.push(self._addRequire('ini_set', relativeSrcForTestDir + '/' + 'php/info/ini_set'))\n codez.push(self._addRequire('ini_get', relativeSrcForTestDir + '/' + 'php/info/ini_get'))\n if (params.func_name === 'localeconv') {\n codez.push(self._addRequire('setlocale', relativeSrcForTestDir + '/' + 'php/strings/setlocale'))\n }\n if (params.func_name === 'i18n_loc_get_default') {\n codez.push(\n self._addRequire('i18n_loc_set_default', relativeSrcForTestDir + '/' + 'php/i18n/i18n_loc_set_default'),\n )\n }\n }\n\n // Add the main function to test\n codez.push(self._addRequire(params.func_name, relativeSrcForTestDir + '/' + params.filepath))\n\n codez.push('')\n\n codez.push(\n [\n 'describe',\n describeSkip,\n \"('src/\",\n params.filepath,\n ' (tested in ',\n relativeTestFileForRoot,\n \")', function () {\",\n ].join(''),\n )\n\n // Run each example\n for (const i in params.headKeys.example) {\n if (!params.headKeys.returns[i] || !params.headKeys.returns[i].length) {\n throw new Error('There is no return for example ' + i, test, params)\n }\n\n const humanIndex = parseInt(i, 10) + 1\n let itSkip = ''\n if (self.allowSkip && testProps.indexOf('skip-' + humanIndex) !== -1) {\n itSkip = '.skip'\n }\n\n codez.push([' it', itSkip, \"('should pass example \", humanIndex, \"', function (done) {\"].join(''))\n\n const body = []\n\n const testExpected = params.headKeys.returns[i].join('\\n')\n\n body.push('var expected = ' + testExpected)\n\n // Execute line by line (see date.js why)\n // We need result be the last result of the example code\n for (const j in params.headKeys.example[i]) {\n if (parseInt(j, 10) === params.headKeys.example[i].length - 1) {\n // last action gets saved\n body.push('var result = ' + params.headKeys.example[i][j].replace('var $result = ', ''))\n } else {\n body.push(params.headKeys.example[i][j])\n }\n }\n\n body.push('expect(result).to.deep.equal(expected)')\n body.push('done()')\n\n codez.push(indentString(body.join('\\n'), ' ', 4))\n\n codez.push(' })')\n }\n\n codez.push('})')\n codez.push('')\n\n const code = codez.join('\\n')\n\n // Write to disk\n fsPromises.mkdir(testdir, { recursive: true }).then(\n function () {\n debug('writing: ' + testpath)\n fs.writeFile(testpath, code, 'utf-8', cb)\n },\n function (err) {\n throw new Error(err)\n },\n )\n }\n\n // Environment-specific file opener. function name needs to\n // be translated to code. The difficulty is in finding the\n // category.\n _opener(fileOrName, requesterParams, cb) {\n const self = this\n let pattern\n\n const language = requesterParams.language || '*'\n\n if (path.basename(fileOrName, '.js').indexOf('.') !== -1) {\n // periods in the basename, like: unicode.utf8.RuneCountInString or strings.sprintf\n pattern = self.__src + '/' + language + '/' + fileOrName.replace(/\\./g, '/') + '.js'\n } else if (fileOrName.indexOf('/') === -1) {\n // no slashes, like: sprintf\n pattern = self.__src + '/' + language + '/*/' + fileOrName + '.js'\n } else if (fileOrName.substr(0, 1) === '/') {\n // absolute path, like: /Users/john/code/locutus/php/strings/sprintf.js\n pattern = fileOrName\n } else {\n // relative path, like: php/strings/sprintf.js\n pattern = self.__src + '/' + fileOrName\n }\n\n pattern = pattern.replace('golang/strings/Index.js', 'golang/strings/Index2.js')\n debug('loading: ' + pattern)\n const files = globby.sync(pattern, {})\n\n if (files.length !== 1) {\n const msg = `Found ${files.length} occurances of ${fileOrName} via pattern: ${pattern}`\n return cb(new Error(msg))\n }\n\n const filepath = files[0]\n\n if (path.basename(filepath) === 'index.js') {\n return cb(null)\n }\n\n if (!filepath) {\n return cb(new Error('Could not find ' + pattern))\n }\n\n fs.readFile(filepath, 'utf-8', function (err, code) {\n if (err) {\n return cb(new Error('Error while opening ' + filepath + '. ' + err))\n }\n return cb(null, filepath, code)\n })\n }\n\n _load(fileOrName, requesterParams, cb) {\n const self = this\n self._opener(fileOrName, requesterParams, function (err, fullpath, code) {\n if (err) {\n return cb(err)\n }\n\n const filepath = path.relative(self.__src, fullpath)\n self._parse(filepath, code, cb)\n })\n }\n\n _findDependencies(fileOrName, requesterParams, dependencies, cb) {\n const self = this\n\n if (!requesterParams.headKeys['depends on'] || !requesterParams.headKeys['depends on'].length) {\n if (cb) {\n cb(null, {})\n }\n return\n }\n\n let i\n let depCodePath\n let loaded = 0\n for (i in requesterParams.headKeys['depends on']) {\n depCodePath = requesterParams.headKeys['depends on'][i][0]\n\n self._load(depCodePath, requesterParams, function (err, params) {\n if (err) {\n return cb(err)\n }\n\n dependencies[depCodePath] = params\n self._findDependencies(depCodePath, params, dependencies)\n\n if (cb && ++loaded === requesterParams.headKeys['depends on'].length) {\n cb(null, dependencies)\n }\n })\n }\n }\n\n _parse(filepath, code, cb) {\n if (!code) {\n return cb(new Error('Unable to parse ' + filepath + '. Received no code'))\n }\n\n if (filepath.indexOf('/') === -1) {\n return cb(new Error(\"Parse only accepts relative filepaths. Received: '\" + filepath + \"'\"))\n }\n\n const parts = filepath.split('/')\n const language = parts.shift()\n const codepath = parts.join('.')\n const name = parts.pop()\n const category = parts.join('.')\n\n const ast = esprima.parseScript(code, { comment: true, loc: true, range: true })\n\n // find module.exports in the code\n const moduleExports = ast.body.filter((node) => {\n try {\n const leftArg = node.expression.left\n const rightArg = node.expression.right\n\n return (\n leftArg.object.name === 'module' &&\n leftArg.property.name === 'exports' &&\n rightArg.type === 'FunctionExpression' &&\n rightArg.id.type === 'Identifier' &&\n !!rightArg.id.name\n )\n } catch (err) {\n return false\n }\n })\n\n // if file contains more than one export, fail\n if (moduleExports.length !== 1) {\n return cb(Error(`File ${filepath} is allowed to contain exactly one module.exports`))\n }\n\n // get the only export\n const exp = moduleExports[0]\n\n // look for function name and param list\n const funcName = exp.expression.right.id.name\n const funcParams = exp.expression.right.params.map((p) => p.name)\n\n // remember the lines where the function is defined\n const funcLoc = exp.expression.right.loc\n\n // since comments are not included in the AST\n // but are offered in ast.comments\n // remember the location of first function body statement/expression\n const firstFuncBodyElementLoc = exp.expression.right.body.body[0].loc\n\n // get all line comments which are located between function signature definition\n // and first function body element\n const headComments = ast.comments\n .filter(\n (c) =>\n c.type === 'Line' &&\n c.loc.start.line >= funcLoc.start.line &&\n c.loc.end.line <= firstFuncBodyElementLoc.start.line,\n )\n .map((c) => c.value.trim())\n\n if (headComments.length === 0) {\n const msg = `Unable to parse ${filepath}. Did not find any comments in function definition`\n return cb(new Error(msg))\n }\n\n const headKeys = this._headKeys(headComments)\n\n const params = {\n headKeys,\n name,\n filepath,\n codepath,\n code,\n language,\n category,\n func_name: funcName,\n func_arguments: funcParams,\n }\n\n this._findDependencies(filepath, params, {}, function (err, dependencies) {\n if (err) {\n return cb(err)\n }\n\n params.dependencies = dependencies\n return cb(null, params)\n })\n }\n\n _headKeys(headLines) {\n let i\n const keys = {}\n let match = []\n let dmatch = []\n let key = ''\n let val = ''\n let num = 0\n\n for (i in headLines) {\n if (!(match = headLines[i].match(/^\\s*\\W?\\s*([a-z 0-9]+)\\s*:\\s*(.*)\\s*$/))) {\n continue\n }\n key = match[1]\n val = match[2]\n\n if ((dmatch = key.match(/^(\\w+)\\s+(\\d+)$/))) {\n // Things like examples and notes can be grouped\n key = dmatch[1]\n num = dmatch[2] - 1\n } else {\n num = 0\n }\n\n if (!keys[key]) {\n keys[key] = []\n }\n if (!keys[key][num]) {\n keys[key][num] = []\n }\n keys[key][num].push(val)\n }\n\n return keys\n }\n}\n\nmodule.exports = Util\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "locutus",
3
- "version": "2.0.30",
3
+ "version": "2.0.32",
4
4
  "description": "Locutus other languages' standard libraries to JavaScript for fun and educational purposes",
5
5
  "keywords": [
6
6
  "php",
@@ -28,10 +28,10 @@
28
28
  "scripts": {
29
29
  "browser:bundle": "browserify test/browser/app.js --outfile test/browser/bundle.js",
30
30
  "browser:watch": "budo test/browser/app.js --live --serve test/browser/bundle.js",
31
- "build:dist": "babel src --out-dir dist --source-maps && cp package.json dist/",
31
+ "build:dist": "babel src --out-dir dist --source-maps && cp package.json README.md dist/",
32
32
  "build:indices": "babel-node src/_util/cli.js reindex",
33
- "build:tests:noskip": "rimraf test/languages && babel-node src/_util/cli.js writetests --noskip",
34
- "build:tests": "rimraf test/languages && babel-node src/_util/cli.js writetests",
33
+ "build:tests:noskip": "rimraf test/generated && babel-node src/_util/cli.js writetests --noskip",
34
+ "build:tests": "rimraf test/generated && babel-node src/_util/cli.js writetests",
35
35
  "build": "npm-run-all 'build:*'",
36
36
  "injectweb": "rimraf website/source/{c,golang,php,python,ruby} && babel-node src/_util/cli.js injectweb",
37
37
  "fix:js": "DEBUG=eslint:cli-engine eslint --fix --quiet --ext .js,.jsx,.ts,.tsx .",
@@ -42,8 +42,8 @@
42
42
  "lint:js": "eslint --ext .js,.jsx,.ts,.tsx .",
43
43
  "lint": "npm-run-all --parallel 'lint:**'",
44
44
  "playground:start": "cd test/browser && babel-node server.js",
45
- "test:languages:noskip": "yarn build:tests:noskip && cross-env DEBUG='locutus:*' mocha --require babel-register --reporter spec --recursive test/languages --grep \"${TEST_GREP:-}\"",
46
- "test:languages": "yarn build:tests && cross-env DEBUG='locutus:*' mocha --require babel-register --reporter spec --recursive test/languages --grep \"${TEST_GREP:-}\"",
45
+ "test:languages:noskip": "yarn build:tests:noskip && cross-env DEBUG='locutus:*' mocha --require babel-register --reporter spec 'src/**/*.mocha.js' 'test/**/test-*.js'",
46
+ "test:languages": "yarn build:tests && cross-env DEBUG='locutus:*' mocha --require babel-register --reporter spec 'src/**/*.mocha.js' 'test/**/test-*.js'",
47
47
  "test:module": "babel-node test/module/module.js",
48
48
  "test:util": "mocha --require babel-register --reporter spec test/util/",
49
49
  "test": "npm-run-all test:languages test:util test:module",
@@ -17,6 +17,8 @@ module.exports = function array_multisort(arr) {
17
17
  // example 3: var $president = [ 39, 6, 5, 10, 4, 35, 2 ]
18
18
  // example 3: array_multisort($firstnames, 'SORT_DESC', 'SORT_STRING', $lastnames, 'SORT_ASC', 'SORT_STRING', $president, 'SORT_NUMERIC')
19
19
  // returns 3: true
20
+ // example 4: array_multisort(["productIds[]", "_"], 'SORT_ASC', ["productIds[]=977385529", "_=1502965788347"])
21
+ // returns 4: true
20
22
  // note 1: flags: Translation table for sort arguments.
21
23
  // note 1: Each argument turns on certain bits in the flag byte through addition.
22
24
  // note 1: bits: HGFE DCBA
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/php/array/array_multisort.js"],"names":["module","exports","array_multisort","arr","g","i","j","k","l","sal","vkey","elIndex","lastSorts","tmpArray","zlast","sortFlag","thingsToSort","nLastSort","lastSort","args","arguments","flags","SORT_REGULAR","SORT_NUMERIC","SORT_STRING","SORT_ASC","SORT_DESC","sortDuplicator","a","b","shift","sortFunctions","push","sortArrs","sortKeys","Object","prototype","toString","call","hasOwnProperty","arrMainLength","length","sortComponents","argl","lFlag","pop","splice","sFunction","slice","sort","concat"],"mappings":"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","file":"array_multisort.js","sourcesContent":["module.exports = function array_multisort(arr) {\n // discuss at: https://locutus.io/php/array_multisort/\n // original by: Theriault (https://github.com/Theriault)\n // improved by: Oleg Andreyev (https://github.com/oleg-andreyev)\n // example 1: array_multisort([1, 2, 1, 2, 1, 2], [1, 2, 3, 4, 5, 6])\n // returns 1: true\n // example 2: var $characters = {A: 'Edward', B: 'Locke', C: 'Sabin', D: 'Terra', E: 'Edward'}\n // example 2: var $jobs = {A: 'Warrior', B: 'Thief', C: 'Monk', D: 'Mage', E: 'Knight'}\n // example 2: array_multisort($characters, 'SORT_DESC', 'SORT_STRING', $jobs, 'SORT_ASC', 'SORT_STRING')\n // returns 2: true\n // example 3: var $lastnames = [ 'Carter','Adams','Monroe','Tyler','Madison','Kennedy','Adams']\n // example 3: var $firstnames = ['James', 'John' ,'James', 'John', 'James', 'John', 'John']\n // example 3: var $president = [ 39, 6, 5, 10, 4, 35, 2 ]\n // example 3: array_multisort($firstnames, 'SORT_DESC', 'SORT_STRING', $lastnames, 'SORT_ASC', 'SORT_STRING', $president, 'SORT_NUMERIC')\n // returns 3: true\n // note 1: flags: Translation table for sort arguments.\n // note 1: Each argument turns on certain bits in the flag byte through addition.\n // note 1: bits: HGFE DCBA\n // note 1: args: Holds pointer to arguments for reassignment\n\n let g\n let i\n let j\n let k\n let l\n let sal\n let vkey\n let elIndex\n let lastSorts\n let tmpArray\n let zlast\n\n const sortFlag = [0]\n const thingsToSort = []\n let nLastSort = []\n let lastSort = []\n // possibly redundant\n const args = arguments\n\n const flags = {\n SORT_REGULAR: 16,\n SORT_NUMERIC: 17,\n SORT_STRING: 18,\n SORT_ASC: 32,\n SORT_DESC: 40,\n }\n\n const sortDuplicator = function (a, b) {\n return nLastSort.shift()\n }\n\n const sortFunctions = [\n [\n function (a, b) {\n lastSort.push(a > b ? 1 : a < b ? -1 : 0)\n return a > b ? 1 : a < b ? -1 : 0\n },\n function (a, b) {\n lastSort.push(b > a ? 1 : b < a ? -1 : 0)\n return b > a ? 1 : b < a ? -1 : 0\n },\n ],\n [\n function (a, b) {\n lastSort.push(a - b)\n return a - b\n },\n function (a, b) {\n lastSort.push(b - a)\n return b - a\n },\n ],\n [\n function (a, b) {\n lastSort.push(a + '' > b + '' ? 1 : a + '' < b + '' ? -1 : 0)\n return a + '' > b + '' ? 1 : a + '' < b + '' ? -1 : 0\n },\n function (a, b) {\n lastSort.push(b + '' > a + '' ? 1 : b + '' < a + '' ? -1 : 0)\n return b + '' > a + '' ? 1 : b + '' < a + '' ? -1 : 0\n },\n ],\n ]\n\n const sortArrs = [[]]\n\n const sortKeys = [[]]\n\n // Store first argument into sortArrs and sortKeys if an Object.\n // First Argument should be either a Javascript Array or an Object,\n // otherwise function would return FALSE like in PHP\n if (Object.prototype.toString.call(arr) === '[object Array]') {\n sortArrs[0] = arr\n } else if (arr && typeof arr === 'object') {\n for (i in arr) {\n if (arr.hasOwnProperty(i)) {\n sortKeys[0].push(i)\n sortArrs[0].push(arr[i])\n }\n }\n } else {\n return false\n }\n\n // arrMainLength: Holds the length of the first array.\n // All other arrays must be of equal length, otherwise function would return FALSE like in PHP\n // sortComponents: Holds 2 indexes per every section of the array\n // that can be sorted. As this is the start, the whole array can be sorted.\n const arrMainLength = sortArrs[0].length\n let sortComponents = [0, arrMainLength]\n\n // Loop through all other arguments, checking lengths and sort flags\n // of arrays and adding them to the above variables.\n const argl = arguments.length\n for (j = 1; j < argl; j++) {\n if (Object.prototype.toString.call(arguments[j]) === '[object Array]') {\n sortArrs[j] = arguments[j]\n sortFlag[j] = 0\n if (arguments[j].length !== arrMainLength) {\n return false\n }\n } else if (arguments[j] && typeof arguments[j] === 'object') {\n sortKeys[j] = []\n sortArrs[j] = []\n sortFlag[j] = 0\n for (i in arguments[j]) {\n if (arguments[j].hasOwnProperty(i)) {\n sortKeys[j].push(i)\n sortArrs[j].push(arguments[j][i])\n }\n }\n if (sortArrs[j].length !== arrMainLength) {\n return false\n }\n } else if (typeof arguments[j] === 'string') {\n const lFlag = sortFlag.pop()\n // Keep extra parentheses around latter flags check\n // to avoid minimization leading to CDATA closer\n if (typeof flags[arguments[j]] === 'undefined' || ((flags[arguments[j]] >>> 4) & (lFlag >>> 4)) > 0) {\n return false\n }\n sortFlag.push(lFlag + flags[arguments[j]])\n } else {\n return false\n }\n }\n\n for (i = 0; i !== arrMainLength; i++) {\n thingsToSort.push(true)\n }\n\n // Sort all the arrays....\n for (i in sortArrs) {\n if (sortArrs.hasOwnProperty(i)) {\n lastSorts = []\n tmpArray = []\n elIndex = 0\n nLastSort = []\n lastSort = []\n\n // If there are no sortComponents, then no more sorting is neeeded.\n // Copy the array back to the argument.\n if (sortComponents.length === 0) {\n if (Object.prototype.toString.call(arguments[i]) === '[object Array]') {\n args[i] = sortArrs[i]\n } else {\n for (k in arguments[i]) {\n if (arguments[i].hasOwnProperty(k)) {\n delete arguments[i][k]\n }\n }\n sal = sortArrs[i].length\n for (j = 0, vkey = 0; j < sal; j++) {\n vkey = sortKeys[i][j]\n args[i][vkey] = sortArrs[i][j]\n }\n }\n sortArrs.splice(i, 1)\n sortKeys.splice(i, 1)\n continue\n }\n\n // Sort function for sorting. Either sorts asc or desc, regular/string or numeric.\n let sFunction = sortFunctions[sortFlag[i] & 3][(sortFlag[i] & 8) > 0 ? 1 : 0]\n\n // Sort current array.\n for (l = 0; l !== sortComponents.length; l += 2) {\n tmpArray = sortArrs[i].slice(sortComponents[l], sortComponents[l + 1] + 1)\n tmpArray.sort(sFunction)\n // Is there a better way to copy an array in Javascript?\n lastSorts[l] = [].concat(lastSort)\n elIndex = sortComponents[l]\n for (g in tmpArray) {\n if (tmpArray.hasOwnProperty(g)) {\n sortArrs[i][elIndex] = tmpArray[g]\n elIndex++\n }\n }\n }\n\n // Duplicate the sorting of the current array on future arrays.\n sFunction = sortDuplicator\n for (j in sortArrs) {\n if (sortArrs.hasOwnProperty(j)) {\n if (sortArrs[j] === sortArrs[i]) {\n continue\n }\n for (l = 0; l !== sortComponents.length; l += 2) {\n tmpArray = sortArrs[j].slice(sortComponents[l], sortComponents[l + 1] + 1)\n // alert(l + ':' + nLastSort);\n nLastSort = [].concat(lastSorts[l])\n tmpArray.sort(sFunction)\n elIndex = sortComponents[l]\n for (g in tmpArray) {\n if (tmpArray.hasOwnProperty(g)) {\n sortArrs[j][elIndex] = tmpArray[g]\n elIndex++\n }\n }\n }\n }\n }\n\n // Duplicate the sorting of the current array on array keys\n for (j in sortKeys) {\n if (sortKeys.hasOwnProperty(j)) {\n for (l = 0; l !== sortComponents.length; l += 2) {\n tmpArray = sortKeys[j].slice(sortComponents[l], sortComponents[l + 1] + 1)\n nLastSort = [].concat(lastSorts[l])\n tmpArray.sort(sFunction)\n elIndex = sortComponents[l]\n for (g in tmpArray) {\n if (tmpArray.hasOwnProperty(g)) {\n sortKeys[j][elIndex] = tmpArray[g]\n elIndex++\n }\n }\n }\n }\n }\n\n // Generate the next sortComponents\n zlast = null\n sortComponents = []\n for (j in sortArrs[i]) {\n if (sortArrs[i].hasOwnProperty(j)) {\n if (!thingsToSort[j]) {\n if (sortComponents.length & 1) {\n sortComponents.push(j - 1)\n }\n zlast = null\n continue\n }\n if (!(sortComponents.length & 1)) {\n if (zlast !== null) {\n if (sortArrs[i][j] === zlast) {\n sortComponents.push(j - 1)\n } else {\n thingsToSort[j] = false\n }\n }\n zlast = sortArrs[i][j]\n } else {\n if (sortArrs[i][j] !== zlast) {\n sortComponents.push(j - 1)\n zlast = sortArrs[i][j]\n }\n }\n }\n }\n\n if (sortComponents.length & 1) {\n sortComponents.push(j)\n }\n if (Object.prototype.toString.call(arguments[i]) === '[object Array]') {\n args[i] = sortArrs[i]\n } else {\n for (j in arguments[i]) {\n if (arguments[i].hasOwnProperty(j)) {\n delete arguments[i][j]\n }\n }\n\n sal = sortArrs[i].length\n for (j = 0, vkey = 0; j < sal; j++) {\n vkey = sortKeys[i][j]\n args[i][vkey] = sortArrs[i][j]\n }\n }\n sortArrs.splice(i, 1)\n sortKeys.splice(i, 1)\n }\n }\n return true\n}\n"]}
1
+ {"version":3,"sources":["../../../src/php/array/array_multisort.js"],"names":["module","exports","array_multisort","arr","g","i","j","k","l","sal","vkey","elIndex","lastSorts","tmpArray","zlast","sortFlag","thingsToSort","nLastSort","lastSort","args","arguments","flags","SORT_REGULAR","SORT_NUMERIC","SORT_STRING","SORT_ASC","SORT_DESC","sortDuplicator","a","b","shift","sortFunctions","push","sortArrs","sortKeys","Object","prototype","toString","call","hasOwnProperty","arrMainLength","length","sortComponents","argl","lFlag","pop","splice","sFunction","slice","sort","concat"],"mappings":"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","file":"array_multisort.js","sourcesContent":["module.exports = function array_multisort(arr) {\n // discuss at: https://locutus.io/php/array_multisort/\n // original by: Theriault (https://github.com/Theriault)\n // improved by: Oleg Andreyev (https://github.com/oleg-andreyev)\n // example 1: array_multisort([1, 2, 1, 2, 1, 2], [1, 2, 3, 4, 5, 6])\n // returns 1: true\n // example 2: var $characters = {A: 'Edward', B: 'Locke', C: 'Sabin', D: 'Terra', E: 'Edward'}\n // example 2: var $jobs = {A: 'Warrior', B: 'Thief', C: 'Monk', D: 'Mage', E: 'Knight'}\n // example 2: array_multisort($characters, 'SORT_DESC', 'SORT_STRING', $jobs, 'SORT_ASC', 'SORT_STRING')\n // returns 2: true\n // example 3: var $lastnames = [ 'Carter','Adams','Monroe','Tyler','Madison','Kennedy','Adams']\n // example 3: var $firstnames = ['James', 'John' ,'James', 'John', 'James', 'John', 'John']\n // example 3: var $president = [ 39, 6, 5, 10, 4, 35, 2 ]\n // example 3: array_multisort($firstnames, 'SORT_DESC', 'SORT_STRING', $lastnames, 'SORT_ASC', 'SORT_STRING', $president, 'SORT_NUMERIC')\n // returns 3: true\n // example 4: array_multisort([\"productIds[]\", \"_\"], 'SORT_ASC', [\"productIds[]=977385529\", \"_=1502965788347\"])\n // returns 4: true\n // note 1: flags: Translation table for sort arguments.\n // note 1: Each argument turns on certain bits in the flag byte through addition.\n // note 1: bits: HGFE DCBA\n // note 1: args: Holds pointer to arguments for reassignment\n\n let g\n let i\n let j\n let k\n let l\n let sal\n let vkey\n let elIndex\n let lastSorts\n let tmpArray\n let zlast\n\n const sortFlag = [0]\n const thingsToSort = []\n let nLastSort = []\n let lastSort = []\n // possibly redundant\n const args = arguments\n\n const flags = {\n SORT_REGULAR: 16,\n SORT_NUMERIC: 17,\n SORT_STRING: 18,\n SORT_ASC: 32,\n SORT_DESC: 40,\n }\n\n const sortDuplicator = function (a, b) {\n return nLastSort.shift()\n }\n\n const sortFunctions = [\n [\n function (a, b) {\n lastSort.push(a > b ? 1 : a < b ? -1 : 0)\n return a > b ? 1 : a < b ? -1 : 0\n },\n function (a, b) {\n lastSort.push(b > a ? 1 : b < a ? -1 : 0)\n return b > a ? 1 : b < a ? -1 : 0\n },\n ],\n [\n function (a, b) {\n lastSort.push(a - b)\n return a - b\n },\n function (a, b) {\n lastSort.push(b - a)\n return b - a\n },\n ],\n [\n function (a, b) {\n lastSort.push(a + '' > b + '' ? 1 : a + '' < b + '' ? -1 : 0)\n return a + '' > b + '' ? 1 : a + '' < b + '' ? -1 : 0\n },\n function (a, b) {\n lastSort.push(b + '' > a + '' ? 1 : b + '' < a + '' ? -1 : 0)\n return b + '' > a + '' ? 1 : b + '' < a + '' ? -1 : 0\n },\n ],\n ]\n\n const sortArrs = [[]]\n\n const sortKeys = [[]]\n\n // Store first argument into sortArrs and sortKeys if an Object.\n // First Argument should be either a Javascript Array or an Object,\n // otherwise function would return FALSE like in PHP\n if (Object.prototype.toString.call(arr) === '[object Array]') {\n sortArrs[0] = arr\n } else if (arr && typeof arr === 'object') {\n for (i in arr) {\n if (arr.hasOwnProperty(i)) {\n sortKeys[0].push(i)\n sortArrs[0].push(arr[i])\n }\n }\n } else {\n return false\n }\n\n // arrMainLength: Holds the length of the first array.\n // All other arrays must be of equal length, otherwise function would return FALSE like in PHP\n // sortComponents: Holds 2 indexes per every section of the array\n // that can be sorted. As this is the start, the whole array can be sorted.\n const arrMainLength = sortArrs[0].length\n let sortComponents = [0, arrMainLength]\n\n // Loop through all other arguments, checking lengths and sort flags\n // of arrays and adding them to the above variables.\n const argl = arguments.length\n for (j = 1; j < argl; j++) {\n if (Object.prototype.toString.call(arguments[j]) === '[object Array]') {\n sortArrs[j] = arguments[j]\n sortFlag[j] = 0\n if (arguments[j].length !== arrMainLength) {\n return false\n }\n } else if (arguments[j] && typeof arguments[j] === 'object') {\n sortKeys[j] = []\n sortArrs[j] = []\n sortFlag[j] = 0\n for (i in arguments[j]) {\n if (arguments[j].hasOwnProperty(i)) {\n sortKeys[j].push(i)\n sortArrs[j].push(arguments[j][i])\n }\n }\n if (sortArrs[j].length !== arrMainLength) {\n return false\n }\n } else if (typeof arguments[j] === 'string') {\n const lFlag = sortFlag.pop()\n // Keep extra parentheses around latter flags check\n // to avoid minimization leading to CDATA closer\n if (typeof flags[arguments[j]] === 'undefined' || ((flags[arguments[j]] >>> 4) & (lFlag >>> 4)) > 0) {\n return false\n }\n sortFlag.push(lFlag + flags[arguments[j]])\n } else {\n return false\n }\n }\n\n for (i = 0; i !== arrMainLength; i++) {\n thingsToSort.push(true)\n }\n\n // Sort all the arrays....\n for (i in sortArrs) {\n if (sortArrs.hasOwnProperty(i)) {\n lastSorts = []\n tmpArray = []\n elIndex = 0\n nLastSort = []\n lastSort = []\n\n // If there are no sortComponents, then no more sorting is neeeded.\n // Copy the array back to the argument.\n if (sortComponents.length === 0) {\n if (Object.prototype.toString.call(arguments[i]) === '[object Array]') {\n args[i] = sortArrs[i]\n } else {\n for (k in arguments[i]) {\n if (arguments[i].hasOwnProperty(k)) {\n delete arguments[i][k]\n }\n }\n sal = sortArrs[i].length\n for (j = 0, vkey = 0; j < sal; j++) {\n vkey = sortKeys[i][j]\n args[i][vkey] = sortArrs[i][j]\n }\n }\n sortArrs.splice(i, 1)\n sortKeys.splice(i, 1)\n continue\n }\n\n // Sort function for sorting. Either sorts asc or desc, regular/string or numeric.\n let sFunction = sortFunctions[sortFlag[i] & 3][(sortFlag[i] & 8) > 0 ? 1 : 0]\n\n // Sort current array.\n for (l = 0; l !== sortComponents.length; l += 2) {\n tmpArray = sortArrs[i].slice(sortComponents[l], sortComponents[l + 1] + 1)\n tmpArray.sort(sFunction)\n // Is there a better way to copy an array in Javascript?\n lastSorts[l] = [].concat(lastSort)\n elIndex = sortComponents[l]\n for (g in tmpArray) {\n if (tmpArray.hasOwnProperty(g)) {\n sortArrs[i][elIndex] = tmpArray[g]\n elIndex++\n }\n }\n }\n\n // Duplicate the sorting of the current array on future arrays.\n sFunction = sortDuplicator\n for (j in sortArrs) {\n if (sortArrs.hasOwnProperty(j)) {\n if (sortArrs[j] === sortArrs[i]) {\n continue\n }\n for (l = 0; l !== sortComponents.length; l += 2) {\n tmpArray = sortArrs[j].slice(sortComponents[l], sortComponents[l + 1] + 1)\n // alert(l + ':' + nLastSort);\n nLastSort = [].concat(lastSorts[l])\n tmpArray.sort(sFunction)\n elIndex = sortComponents[l]\n for (g in tmpArray) {\n if (tmpArray.hasOwnProperty(g)) {\n sortArrs[j][elIndex] = tmpArray[g]\n elIndex++\n }\n }\n }\n }\n }\n\n // Duplicate the sorting of the current array on array keys\n for (j in sortKeys) {\n if (sortKeys.hasOwnProperty(j)) {\n for (l = 0; l !== sortComponents.length; l += 2) {\n tmpArray = sortKeys[j].slice(sortComponents[l], sortComponents[l + 1] + 1)\n nLastSort = [].concat(lastSorts[l])\n tmpArray.sort(sFunction)\n elIndex = sortComponents[l]\n for (g in tmpArray) {\n if (tmpArray.hasOwnProperty(g)) {\n sortKeys[j][elIndex] = tmpArray[g]\n elIndex++\n }\n }\n }\n }\n }\n\n // Generate the next sortComponents\n zlast = null\n sortComponents = []\n for (j in sortArrs[i]) {\n if (sortArrs[i].hasOwnProperty(j)) {\n if (!thingsToSort[j]) {\n if (sortComponents.length & 1) {\n sortComponents.push(j - 1)\n }\n zlast = null\n continue\n }\n if (!(sortComponents.length & 1)) {\n if (zlast !== null) {\n if (sortArrs[i][j] === zlast) {\n sortComponents.push(j - 1)\n } else {\n thingsToSort[j] = false\n }\n }\n zlast = sortArrs[i][j]\n } else {\n if (sortArrs[i][j] !== zlast) {\n sortComponents.push(j - 1)\n zlast = sortArrs[i][j]\n }\n }\n }\n }\n\n if (sortComponents.length & 1) {\n sortComponents.push(j)\n }\n if (Object.prototype.toString.call(arguments[i]) === '[object Array]') {\n args[i] = sortArrs[i]\n } else {\n for (j in arguments[i]) {\n if (arguments[i].hasOwnProperty(j)) {\n delete arguments[i][j]\n }\n }\n\n sal = sortArrs[i].length\n for (j = 0, vkey = 0; j < sal; j++) {\n vkey = sortKeys[i][j]\n args[i][vkey] = sortArrs[i][j]\n }\n }\n sortArrs.splice(i, 1)\n sortKeys.splice(i, 1)\n }\n }\n return true\n}\n"]}
@@ -432,6 +432,28 @@ var formats = {
432
432
  }
433
433
  },
434
434
 
435
+ oracledate: {
436
+ regex: /^(\d{2})-([A-Z]{3})-(\d{2})$/i,
437
+ name: 'd-M-y',
438
+ callback: function callback(match, day, monthText, year) {
439
+ var month = {
440
+ JAN: 0,
441
+ FEB: 1,
442
+ MAR: 2,
443
+ APR: 3,
444
+ MAY: 4,
445
+ JUN: 5,
446
+ JUL: 6,
447
+ AUG: 7,
448
+ SEP: 8,
449
+ OCT: 9,
450
+ NOV: 10,
451
+ DEC: 11
452
+ }[monthText.toUpperCase()];
453
+ return this.ymd(2000 + parseInt(year, 10), month, parseInt(day, 10));
454
+ }
455
+ },
456
+
435
457
  timeLong12: {
436
458
  regex: RegExp('^' + reHour12 + '[:.]' + reMinute + '[:.]' + reSecondlz + reSpaceOpt + reMeridian, 'i'),
437
459
  name: 'timelong12',
@@ -1248,6 +1270,8 @@ module.exports = function strtotime(str, now) {
1248
1270
  // returns 5: 1241418600
1249
1271
  // example 6: strtotime('2009-05-04 08:30:00 YWT')
1250
1272
  // returns 6: 1241454600
1273
+ // example 7: strtotime('10-JUL-17')
1274
+ // returns 7: 1499644800
1251
1275
 
1252
1276
  if (now == null) {
1253
1277
  now = Math.floor(Date.now() / 1000);
@@ -1258,7 +1282,7 @@ module.exports = function strtotime(str, now) {
1258
1282
  // if multiple rules match the same string, the first match wins
1259
1283
  var rules = [formats.yesterday, formats.now, formats.noon, formats.midnightOrToday, formats.tomorrow, formats.timestamp, formats.firstOrLastDay, formats.backOrFrontOf,
1260
1284
  // formats.weekdayOf, // not yet implemented
1261
- formats.timeTiny12, formats.timeShort12, formats.timeLong12, formats.mssqltime, formats.timeShort24, formats.timeLong24, formats.iso8601long, formats.gnuNoColon, formats.iso8601noColon, formats.americanShort, formats.american, formats.iso8601date4, formats.iso8601dateSlash, formats.dateSlash, formats.gnuDateShortOrIso8601date2, formats.gnuDateShorter, formats.dateFull, formats.pointedDate4, formats.pointedDate2, formats.dateNoDay, formats.dateNoDayRev, formats.dateTextual, formats.dateNoYear, formats.dateNoYearRev, formats.dateNoColon, formats.xmlRpc, formats.xmlRpcNoColon, formats.soap, formats.wddx, formats.exif, formats.pgydotd, formats.isoWeekDay, formats.pgTextShort, formats.pgTextReverse, formats.clf, formats.year4, formats.ago, formats.dayText, formats.relativeTextWeek, formats.relativeText, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.tzAbbr, formats.dateShortWithTimeShort12, formats.dateShortWithTimeLong12, formats.dateShortWithTimeShort, formats.dateShortWithTimeLong, formats.relative, formats.whitespace];
1285
+ formats.timeTiny12, formats.timeShort12, formats.timeLong12, formats.mssqltime, formats.oracledate, formats.timeShort24, formats.timeLong24, formats.iso8601long, formats.gnuNoColon, formats.iso8601noColon, formats.americanShort, formats.american, formats.iso8601date4, formats.iso8601dateSlash, formats.dateSlash, formats.gnuDateShortOrIso8601date2, formats.gnuDateShorter, formats.dateFull, formats.pointedDate4, formats.pointedDate2, formats.dateNoDay, formats.dateNoDayRev, formats.dateTextual, formats.dateNoYear, formats.dateNoYearRev, formats.dateNoColon, formats.xmlRpc, formats.xmlRpcNoColon, formats.soap, formats.wddx, formats.exif, formats.pgydotd, formats.isoWeekDay, formats.pgTextShort, formats.pgTextReverse, formats.clf, formats.year4, formats.ago, formats.dayText, formats.relativeTextWeek, formats.relativeText, formats.monthFullOrMonthAbbr, formats.tzCorrection, formats.tzAbbr, formats.dateShortWithTimeShort12, formats.dateShortWithTimeLong12, formats.dateShortWithTimeShort, formats.dateShortWithTimeLong, formats.relative, formats.whitespace];
1262
1286
 
1263
1287
  var result = Object.create(resultProto);
1264
1288