├── .gitattributes
├── index.js
├── .jshintrc
├── .gitignore
├── .eslintrc.js
├── stylelint.config.js
├── .npmignore
├── .travis.yml
├── test
├── helpers
│ ├── error.spider
│ ├── test.js
│ └── test.spider
└── spec
│ ├── index-spec.js
│ ├── node-spider-script-spec.js
│ └── spider-loader-spec.js
├── .editorconfig
├── inch.json
├── .github
├── ISSUE_TEMPLATE.md
└── CONTRIBUTING.md
├── project
└── config
│ ├── README-footer-template.md
│ ├── jshintrc-common.json
│ └── README-template.md
├── Gruntfile.js
├── .jslintrc
├── docs
├── CHANGELOG.md
└── api.md
├── .jsbeautifyrc
├── package.json
├── lib
├── node-spider-script.js
└── spider-loader.js
├── README.md
├── .jscs.json
└── LICENSE
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text eol=lf
2 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = require('./lib/node-spider-script');
4 |
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./project/config/jshintrc-common.json",
3 | "node": true
4 | }
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .c9
3 | target
4 | .temp
5 | node_modules
6 | bower_components
7 | npm-debug.log
8 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var commons = require('js-project-commons');
4 |
5 | module.exports = commons.lint.eslint.node;
6 |
--------------------------------------------------------------------------------
/stylelint.config.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var commons = require('js-project-commons');
4 |
5 | module.exports = commons.lint.stylelint;
6 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .c9
3 | target
4 | .temp
5 | .travis.yml
6 | .atom.*.yml
7 | Gruntfile.js
8 | bower_components
9 | .github
10 | test
11 | example
12 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "node"
4 | - "10"
5 | - "8"
6 | - "6"
7 | matrix:
8 | allow_failures:
9 | - node_js: node
10 |
--------------------------------------------------------------------------------
/test/helpers/error.spider:
--------------------------------------------------------------------------------
1 |
2 | fn123 InvalidCode() {
3 | }
4 |
5 | return {
6 | create: fn() {
7 | return new InvalidCode();
8 | }
9 | };
10 |
--------------------------------------------------------------------------------
/test/helpers/test.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | require('../..');
4 |
5 | var jsModule = require('./test.spider');
6 |
7 | var person = jsModule.create('my name');
8 | var output = person.listen('my noise');
9 | console.log(output);
10 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 |
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | end_of_line = lf
7 | insert_final_newline = true
8 | trim_trailing_whitespace = true
9 | indent_style = space
10 | indent_size = 4
11 |
12 | [*.json]
13 | indent_size = 2
14 |
--------------------------------------------------------------------------------
/inch.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": {
3 | "included": [
4 | "*.js",
5 | "lib/**/*.js",
6 | "tasks/**/*.js"
7 | ],
8 | "excluded": [
9 | "**/Gruntfile.js",
10 | "**/.eslintrc.js",
11 | "**/stylelint.config.js"
12 | ]
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 | #### Problem Description
3 |
4 |
5 |
6 | #### Code Example
7 |
8 | ````js
9 | //paste code here
10 | ````
11 |
12 | #### Error Stack/Info (if any)
13 |
14 |
15 |
--------------------------------------------------------------------------------
/test/helpers/test.spider:
--------------------------------------------------------------------------------
1 |
2 | fn Person(name) {
3 | this.name = name;
4 |
5 | this.listen = fn (text) {
6 | //console.log(this.name, text);
7 | return this.name + ' ' + text;
8 | };
9 | }
10 |
11 | return {
12 | create: fn(name) {
13 | return new Person(name);
14 | }
15 | };
16 |
--------------------------------------------------------------------------------
/test/spec/index-spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /*global describe: false, it: false*/
4 |
5 | var chai = require('chai');
6 | var assert = chai.assert;
7 | require('../../');
8 |
9 | describe('Index Tests', function () {
10 | it('require setup', function () {
11 | assert.isFunction(require.extensions['.spider']);
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/project/config/README-footer-template.md:
--------------------------------------------------------------------------------
1 | ## API Documentation
2 | See full docs at: [API Docs](docs/api.md)
3 |
4 | ## Contributing
5 | See [contributing guide](.github/CONTRIBUTING.md)
6 |
7 |
8 | ## Release History
9 |
10 | {"gitdown": "include", "file": "../../docs/CHANGELOG.md"}
11 |
12 | ## License
13 | Developed by Sagie Gur-Ari and licensed under the Apache 2 open source license.
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /*jslint nomen: true*/
4 | //jscs:disable disallowDanglingUnderscores
5 | /*eslint-disable no-underscore-dangle*/
6 |
7 | module.exports = function (grunt) {
8 | var commons = require('js-project-commons');
9 |
10 | commons.grunt.config.initConfig(grunt, {
11 | buildConfig: {
12 | projectRoot: __dirname,
13 | nodeProject: true,
14 | skipSecurityCheck: true
15 | }
16 | });
17 | };
18 |
--------------------------------------------------------------------------------
/project/config/jshintrc-common.json:
--------------------------------------------------------------------------------
1 | {
2 | "bitwise": true,
3 | "curly": true,
4 | "eqeqeq": true,
5 | "forin": true,
6 | "freeze": true,
7 | "futurehostile": true,
8 | "latedef": true,
9 | "maxcomplexity": 8,
10 | "maxdepth": 5,
11 | "maxerr": 100,
12 | "maxparams": 5,
13 | "maxstatements": 50,
14 | "noarg": true,
15 | "nocomma": false,
16 | "nonbsp": true,
17 | "nonew": true,
18 | "singleGroups": false,
19 | "strict": true,
20 | "undef": true,
21 | "unused": true,
22 | "varstmt": false
23 | }
24 |
--------------------------------------------------------------------------------
/.jslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "ass": false,
3 | "bitwise": false,
4 | "browser": false,
5 | "closure": false,
6 | "continue": false,
7 | "couch": false,
8 | "debug": false,
9 | "devel": false,
10 | "eqeq": false,
11 | "evil": false,
12 | "forin": false,
13 | "indent": 4,
14 | "maxerr": 50,
15 | "maxlen": false,
16 | "newcap": false,
17 | "node": true,
18 | "nomen": false,
19 | "passfail": false,
20 | "plusplus": true,
21 | "predef": [],
22 | "regexp": false,
23 | "rhino": false,
24 | "sloppy": false,
25 | "stupid": false,
26 | "sub": false,
27 | "todo": false,
28 | "unparam": false,
29 | "vars": true,
30 | "white": false
31 | }
32 |
--------------------------------------------------------------------------------
/docs/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | | Date | Version | Description |
2 | | ----------- | ------- | ----------- |
3 | | 2018-10-31 | v1.0.39 | Maintenance |
4 | | 2015-02-06 | v0.0.20 | Grunt cleanups |
5 | | 2014-12-07 | v0.0.16 | Minor internal changes |
6 | | 2014-12-01 | v0.0.14 | Added continues integration support for the project |
7 | | 2014-11-30 | v0.0.13 | Internal changes due to spider dependency changes |
8 | | 2014-11-29 | v0.0.12 | Updated spider dependency |
9 | | 2014-11-29 | v0.0.11 | Internal improvements |
10 | | 2014-11-22 | v0.0.7 | JSDoc changes |
11 | | 2014-11-22 | v0.0.6 | Fixed pure require approach |
12 | | 2014-11-22 | v0.0.5 | Initial release |
13 |
--------------------------------------------------------------------------------
/.github/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contribution Guidelines
2 |
3 |
4 | ## Issues
5 |
6 | Found a bug? Got a question? Want some enhancement?
7 | First place to go is the repository issues section, and I'll try to help as much as possible.
8 |
9 | ## Pull Requests
10 |
11 | Fixed a bug or just want to provided additional functionality?
12 | Simply fork this repository, implement your changes and create a pull request.
13 | Few guidelines regarding pull requests:
14 |
15 | * This repository is integrated with travis.ci for continuous integration.
16 |
17 | Your pull request build must pass (the build will run automatically).
18 | You can run the following command locally to ensure the build will pass:
19 |
20 | ````sh
21 | npm run build
22 | ````
23 |
24 | * This library is using multiple code inspection tools to validate certain level of standards.
The configuration is part of the repository and you can set your favorite IDE using that configuration.
You can run the following command locally to ensure the code inspection passes:
25 |
26 | ````sh
27 | npm run lint
28 | ````
29 |
30 | * There are many automatic unit tests as part of the library which provide full coverage of the functionality.
Any fix/enhancement must come with a set of tests to ensure it's working well.
31 |
--------------------------------------------------------------------------------
/test/spec/node-spider-script-spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /*jslint stupid: true, nomen: true*/
4 | /*global describe: false, it: false*/
5 |
6 | var path = require('path');
7 | var chai = require('chai');
8 | var assert = chai.assert;
9 | var library = require('../../lib/node-spider-script');
10 |
11 | describe('Node Spider Tests', function () {
12 | it('require setup', function () {
13 | assert.isFunction(require.extensions['.spider']);
14 | });
15 |
16 | it('require via loader test', function () {
17 | var spiderLoader = library.spiderLoader;
18 |
19 | var spiderFile = path.resolve(__dirname, '../helpers/test.spider');
20 | var jsModule = spiderLoader.loadSpiderScript(spiderFile);
21 |
22 | assert.isObject(jsModule);
23 | var person = jsModule.create('my name');
24 | var output = person.listen('my noise');
25 | assert.equal('my name my noise', output);
26 | });
27 |
28 | it('require test', function () {
29 | var spiderFile = path.resolve(__dirname, '../helpers/test.spider');
30 | var jsModule = require(spiderFile);
31 |
32 | assert.isObject(jsModule);
33 | var person = jsModule.create('my name');
34 | var output = person.listen('my noise');
35 | assert.equal('my name my noise', output);
36 | });
37 | });
38 |
--------------------------------------------------------------------------------
/.jsbeautifyrc:
--------------------------------------------------------------------------------
1 | {
2 | "js": {
3 | "indent_size": 4,
4 | "indent_char": " ",
5 | "eol": "\n",
6 | "indent_level": 0,
7 | "indent_with_tabs": false,
8 | "preserve_newlines": true,
9 | "max_preserve_newlines": 2,
10 | "space_in_paren": false,
11 | "jslint_happy": true,
12 | "space_after_anon_function": true,
13 | "brace_style": "collapse",
14 | "break_chained_methods": false,
15 | "keep_array_indentation": true,
16 | "unescape_strings": false,
17 | "wrap_line_length": 0,
18 | "end_with_newline": true,
19 | "comma_first": false,
20 | "eval_code": false,
21 | "keep_function_indentation": false,
22 | "space_before_conditional": true,
23 | "good_stuff": true
24 | },
25 | "css": {
26 | "indent_size": 2,
27 | "indent_char": " ",
28 | "indent_with_tabs": false,
29 | "eol": "\n",
30 | "end_with_newline": true,
31 | "selector_separator_newline": false,
32 | "newline_between_rules": true
33 | },
34 | "html": {
35 | "indent_size": 4,
36 | "indent_char": " ",
37 | "indent_with_tabs": false,
38 | "eol": "\n",
39 | "end_with_newline": true,
40 | "preserve_newlines": true,
41 | "max_preserve_newlines": 2,
42 | "indent_inner_html": true,
43 | "brace_style": "collapse",
44 | "indent_scripts": "normal",
45 | "wrap_line_length": 0,
46 | "wrap_attributes": "auto",
47 | "wrap_attributes_indent_size": 4
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node-spider-script",
3 | "version": "1.0.39",
4 | "description": "Load spider script as any javascript modules under nodeJS runtime.",
5 | "author": {
6 | "name": "Sagie Gur-Ari",
7 | "email": "sagiegurari@gmail.com"
8 | },
9 | "license": "Apache-2.0",
10 | "homepage": "http://github.com/sagiegurari/node-spider-script",
11 | "repository": {
12 | "type": "git",
13 | "url": "http://github.com/sagiegurari/node-spider-script.git"
14 | },
15 | "bugs": {
16 | "url": "http://github.com/sagiegurari/node-spider-script/issues"
17 | },
18 | "keywords": [
19 | "spider-script",
20 | "require"
21 | ],
22 | "main": "index.js",
23 | "directories": {
24 | "lib": "lib",
25 | "test": "test/spec"
26 | },
27 | "scripts": {
28 | "test": "grunt test",
29 | "clean": "grunt cleanup",
30 | "lint": "grunt lint",
31 | "docs": "grunt docs",
32 | "format": "grunt format",
33 | "build": "grunt build",
34 | "jstest": "grunt jstest",
35 | "debug": "mocha --debug-brk=5858 --no-timeouts --ui bdd --reporter spec --recursive ./test/spec",
36 | "prepush": "npm run build",
37 | "postpublish": "grunt post-publish",
38 | "grunt": "grunt"
39 | },
40 | "dependencies": {
41 | "spider-script": "^0.1.5",
42 | "node.extend": "^2.0.1"
43 | },
44 | "devDependencies": {
45 | "chai": "latest",
46 | "grunt": "latest",
47 | "grunt-cli": "latest",
48 | "husky": "latest",
49 | "js-project-commons": "latest"
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/test/spec/spider-loader-spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /*jslint stupid: true, nomen: true*/
4 | /*global describe: false, it: false*/
5 |
6 | var path = require('path');
7 | var chai = require('chai');
8 | var assert = chai.assert;
9 | var spiderLoader = require('../../lib/spider-loader');
10 |
11 | describe('Spider Loader Tests', function () {
12 | describe('runSpiderScript2JS Tests', function () {
13 | it('runSpiderScript2JS valid', function () {
14 | var spiderFile = path.resolve(__dirname, '../helpers/test.spider');
15 | var js = spiderLoader.runSpiderScript2JS(spiderFile);
16 |
17 | assert.isString(js);
18 | assert.isTrue(js.length > 0);
19 | });
20 |
21 | it('runSpiderScript2JS error', function () {
22 | var spiderFile = path.resolve(__dirname, '../helpers/error.spider');
23 | try {
24 | var js = spiderLoader.runSpiderScript2JS(spiderFile);
25 | assert.notOk(js);
26 | } catch (error) {
27 | assert.isDefined(error);
28 | }
29 | });
30 | });
31 |
32 | describe('loadSpiderScriptSync Tests', function () {
33 | it('loadSpiderScriptSync valid', function () {
34 | var spiderFile = path.resolve(__dirname, '../helpers/test.spider');
35 | var js = spiderLoader.loadSpiderScript(spiderFile);
36 |
37 | assert.isObject(js);
38 | var person = js.create('my name');
39 | var output = person.listen('my noise');
40 | assert.equal('my name my noise', output);
41 | });
42 | });
43 | });
44 |
--------------------------------------------------------------------------------
/lib/node-spider-script.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /**
4 | * Extends the require capabilities to allow loading of spider
5 | * script files as JS files.
6 | *
7 | * @author Sagie Gur-Ari
8 | * @namespace NodeSpiderScript
9 | * @example
10 | * In order to use spider scripts under node, you need to first require this library as follows:
11 | * ```js
12 | * require('node-spider-script');
13 | * ```
14 | * Now you can require your spider files like any other javascript files, for example:
15 | * ```js
16 | * var jsModule = require('./my-test.spider');
17 | *
18 | * var person = jsModule.create('my name');
19 | * var output = person.listen('my noise');
20 | * ```
21 | * In your spider file, instead of doing module.exports, do return to the object you wish to export.
22 | *
23 | * For example:
24 | * ```js
25 | * return {
26 | * create: fn(name) {
27 | * return new Person(name);
28 | * }
29 | * };
30 | * ```
31 | * Spider source:
32 | * ```js
33 | * fn Person(name) {
34 | * this.name = name;
35 | *
36 | * this.listen = fn (text) {
37 | * return this.name + ' ' + text;
38 | * };
39 | * }
40 | *
41 | * return {
42 | * create: fn(name) {
43 | * return new Person(name);
44 | * }
45 | * };
46 | * ```
47 | */
48 |
49 | var spiderLoader = require('./spider-loader');
50 |
51 | /**
52 | * The node require implementation for spider scripts.
53 | *
54 | * @function
55 | * @alias NodeSpiderScript.requireSpider
56 | * @memberof! NodeSpiderScript
57 | * @public
58 | * @param {Object} spiderModule - The module for the spider script
59 | * @param {String} fileName - The spider script file name
60 | */
61 | var requireSpider = function (spiderModule, fileName) {
62 | spiderLoader.loadSpiderScript(fileName, spiderModule);
63 | };
64 |
65 | //use spider loader to return a JS module
66 | require.extensions['.spider'] = requireSpider;
67 |
68 | module.exports = {
69 | requireSpider: requireSpider,
70 | /**
71 | * The spider loader instance.
72 | *
73 | * @member {SpiderLoader}
74 | * @alias NodeSpiderScript.spiderLoader
75 | * @memberof! NodeSpiderScript
76 | * @public
77 | */
78 | spiderLoader: spiderLoader
79 | };
80 |
--------------------------------------------------------------------------------
/lib/spider-loader.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | /*global root: false*/
4 |
5 | var fs = require('fs');
6 | var path = require('path');
7 | var vm = require('vm');
8 | var Module = require('module');
9 | var extend = require('node.extend');
10 | var spider = require('spider-script');
11 |
12 | /*jslint debug: true*/
13 | /*eslint-disable no-empty-function*/
14 | /**
15 | * The SpiderLoader enables to load spider script files and to load them into the
16 | * node runtime as JS files.
17 | *
18 | * @author Sagie Gur-Ari
19 | * @class SpiderLoader
20 | * @public
21 | */
22 | function SpiderLoader() {}
23 | /*eslint-enable no-empty-function*/
24 | /*jslint debug: false*/
25 |
26 | /**
27 | * Converts the provided spider file into JS script text
28 | *
29 | * @function
30 | * @memberof! SpiderLoader
31 | * @public
32 | * @param {String} spiderFile - The spider script file path
33 | * @returns {String} The JS string of the converted spider script
34 | */
35 | SpiderLoader.prototype.runSpiderScript2JS = function (spiderFile) {
36 | /*eslint-disable no-sync*/
37 | /*jslint stupid: true*/
38 | var spiderScriptString = fs.readFileSync(spiderFile, 'utf8');
39 | /*jslint stupid: false */
40 | /*eslint-enable no-sync*/
41 |
42 | //add node globals
43 | spiderScriptString = 'use :node;\n' + spiderScriptString;
44 |
45 | var output = spider.compile({
46 | text: spiderScriptString,
47 | fileName: spiderFile,
48 | target: 'ES5',
49 | generateSourceMap: false
50 | });
51 |
52 | if (output.errors && output.errors.length) {
53 | throw new Error('Failed to run spider.compile\n' + output.errors[0].message); //throw only first error
54 | }
55 |
56 | //get output text
57 | var jsString = output.result;
58 |
59 | //wrap as a module
60 | var buffer = [];
61 | buffer.push('\'use strict\';\n');
62 | buffer.push('var moduleObject = ');
63 | buffer.push(jsString);
64 | buffer.push('\n\n');
65 | buffer.push('module.exports = moduleObject;');
66 |
67 | return buffer.join('');
68 | };
69 |
70 | /**
71 | * Converts the provided spider file into JS script and loads it into
72 | * the node runtime.
73 | *
74 | * @function
75 | * @memberof! SpiderLoader
76 | * @public
77 | * @param {String} spiderFile - The spider script file path
78 | * @param {Object} [spiderModule] - The module for the spider script
79 | * @returns {Object} The JS module
80 | */
81 | SpiderLoader.prototype.loadSpiderScript = function (spiderFile, spiderModule) {
82 | var jsString = this.runSpiderScript2JS(spiderFile);
83 |
84 | spiderModule = spiderModule || new Module(spiderFile);
85 |
86 | /*jslint nomen: true */
87 | var context = extend({}, global, {
88 | root: root,
89 | module: spiderModule,
90 | require: spiderModule.require.bind(spiderModule),
91 | exports: spiderModule.exports,
92 | __filename: spiderFile + '.js',
93 | __dirname: path.resolve(spiderFile, '..')
94 | });
95 | /*jslint nomen: false */
96 |
97 | context.global = context;
98 |
99 | return vm.runInNewContext(jsString, context, {
100 | filename: spiderFile + '.js'
101 | });
102 | };
103 |
104 | var spiderLoader = new SpiderLoader(); //singleton
105 |
106 | module.exports = spiderLoader;
107 |
--------------------------------------------------------------------------------
/project/config/README-template.md:
--------------------------------------------------------------------------------
1 | # {"gitdown": "gitinfo", "name": "name"}
2 |
3 | [](https://www.npmjs.org/package/{"gitdown": "gitinfo", "name": "name"}) [](http://travis-ci.org/{"gitdown": "gitinfo", "name": "username"}/{"gitdown": "gitinfo", "name": "name"}) [](https://coveralls.io/r/{"gitdown": "gitinfo", "name": "username"}/{"gitdown": "gitinfo", "name": "name"}) [](http://inch-ci.org/github/{"gitdown": "gitinfo", "name": "username"}/{"gitdown": "gitinfo", "name": "name"})
4 | [](https://github.com/{"gitdown": "gitinfo", "name": "username"}/{"gitdown": "gitinfo", "name": "name"}/blob/master/LICENSE) [](https://www.npmjs.org/package/{"gitdown": "gitinfo", "name": "name"}) [](https://david-dm.org/{"gitdown": "gitinfo", "name": "username"}/{"gitdown": "gitinfo", "name": "name"}) [](https://david-dm.org/{"gitdown": "gitinfo", "name": "username"}/{"gitdown": "gitinfo", "name": "name"}?type=dev)
5 |
6 | > Load spider script as any javascript modules under nodeJS runtime.
7 |
8 | * [Overview](#overview)
9 | * [Usage](#usage)
10 | * [Installation](#installation)
11 | * [API Documentation](docs/api.md)
12 | * [Contributing](.github/CONTRIBUTING.md)
13 | * [Release History](#history)
14 | * [License](#license)
15 |
16 |
17 | ## Overview
18 | Spider is a programming language that compiles to JavaScript. It takes the best ideas of Swift, Python, C# and CoffeeScript.
19 |
20 | See [spiderlang.org](http://spiderlang.org/) for more information.
21 |
22 |
23 | ## Usage
24 | In order to use spider scripts under node, you need to first require this library as follows
25 |
26 | ```js
27 | require('node-spider-script');
28 | ```
29 |
30 | Now you can require your spider files like any other javascript files, for example:
31 |
32 | ```js
33 | var jsModule = require('./my-test.spider');
34 |
35 | var person = jsModule.create('my name');
36 | var output = person.listen('my noise');
37 | ```
38 |
39 | In your spider file, instead of doing module.exports, do return to the object you wish to export.
40 |
41 | For example:
42 |
43 | ```js
44 | return {
45 | create: fn(name) {
46 | return new Person(name);
47 | }
48 | };
49 | ```
50 |
51 | Full example (Spider):
52 |
53 | ```js
54 | fn Person(name) {
55 | this.name = name;
56 |
57 | this.listen = fn (text) {
58 | return this.name + ' ' + text;
59 | };
60 | }
61 |
62 | return {
63 | create: fn(name) {
64 | return new Person(name);
65 | }
66 | };
67 | ```
68 |
69 | Full example (JavaScript):
70 |
71 | ```js
72 | require('node-spider-script');
73 |
74 | var jsModule = require('./my-test.spider');
75 |
76 | var person = jsModule.create('my name');
77 | var output = person.listen('my noise');
78 | ```
79 |
80 |
81 | ## Installation
82 | In order to use this library, just run the following npm install command:
83 |
84 | ```sh
85 | npm install --save {"gitdown": "gitinfo", "name": "name"}
86 | ```
87 |
88 | {"gitdown": "include", "file": "./README-footer-template.md"}
89 |
--------------------------------------------------------------------------------
/docs/api.md:
--------------------------------------------------------------------------------
1 | ## Classes
2 |
3 |
objectExtends the require capabilities to allow loading of spider 13 | script files as JS files.
14 |String
27 | * [#loadSpiderScript(spiderFile, [spiderModule])](#SpiderLoader+loadSpiderScript) ⇒ Object
28 |
29 |
30 |
31 | ### new SpiderLoader()
32 | The SpiderLoader enables to load spider script files and to load them into the
33 | node runtime as JS files.
34 |
35 |
36 |
37 | ### SpiderLoader#runSpiderScript2JS(spiderFile) ⇒ String
38 | Converts the provided spider file into JS script text
39 |
40 | **Returns**: String - The JS string of the converted spider script
41 | **Access**: public
42 |
43 | | Param | Type | Description |
44 | | --- | --- | --- |
45 | | spiderFile | String | The spider script file path |
46 |
47 |
48 |
49 | ### SpiderLoader#loadSpiderScript(spiderFile, [spiderModule]) ⇒ Object
50 | Converts the provided spider file into JS script and loads it into
51 | the node runtime.
52 |
53 | **Returns**: Object - The JS module
54 | **Access**: public
55 |
56 | | Param | Type | Description |
57 | | --- | --- | --- |
58 | | spiderFile | String | The spider script file path |
59 | | [spiderModule] | Object | The module for the spider script |
60 |
61 |
62 |
63 | ## NodeSpiderScript : object
64 | Extends the require capabilities to allow loading of spider
65 | script files as JS files.
66 |
67 | **Kind**: global namespace
68 | **Author**: Sagie Gur-Ari
69 | **Example**
70 | In order to use spider scripts under node, you need to first require this library as follows:
71 | ```js
72 | require('node-spider-script');
73 | ```
74 | Now you can require your spider files like any other javascript files, for example:
75 | ```js
76 | var jsModule = require('./my-test.spider');
77 |
78 | var person = jsModule.create('my name');
79 | var output = person.listen('my noise');
80 | ```
81 | In your spider file, instead of doing module.exports, do return to the object you wish to export.
82 |
83 | For example:
84 | ```js
85 | return {
86 | create: fn(name) {
87 | return new Person(name);
88 | }
89 | };
90 | ```
91 | Spider source:
92 | ```js
93 | fn Person(name) {
94 | this.name = name;
95 |
96 | this.listen = fn (text) {
97 | return this.name + ' ' + text;
98 | };
99 | }
100 |
101 | return {
102 | create: fn(name) {
103 | return new Person(name);
104 | }
105 | };
106 | ```
107 |
108 | * [NodeSpiderScript](#NodeSpiderScript) : object
109 | * [.spiderLoader](#NodeSpiderScript.spiderLoader) : [SpiderLoader](#SpiderLoader)
110 | * [.requireSpider(spiderModule, fileName)](#NodeSpiderScript.requireSpider)
111 |
112 |
113 |
114 | ### NodeSpiderScript.spiderLoader : [SpiderLoader](#SpiderLoader)
115 | The spider loader instance.
116 |
117 | **Access**: public
118 |
119 |
120 | ### NodeSpiderScript.requireSpider(spiderModule, fileName)
121 | The node require implementation for spider scripts.
122 |
123 | **Access**: public
124 |
125 | | Param | Type | Description |
126 | | --- | --- | --- |
127 | | spiderModule | Object | The module for the spider script |
128 | | fileName | String | The spider script file name |
129 |
130 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # node-spider-script
2 |
3 | [](https://www.npmjs.org/package/node-spider-script) [](http://travis-ci.org/sagiegurari/node-spider-script) [](https://coveralls.io/r/sagiegurari/node-spider-script) [](http://inch-ci.org/github/sagiegurari/node-spider-script)