Compare commits

..

1 Commits

Author SHA1 Message Date
isaacs
33d746c656 doc: Explain process.nextTick timing
Provide more detailed explanation of the timing of `process.nextTick`
relative to I/O.
2013-07-13 15:20:30 -07:00
2826 changed files with 117568 additions and 267711 deletions

8
.gitignore vendored
View File

@@ -52,14 +52,8 @@ deps/openssl/openssl.props
deps/openssl/openssl.targets
deps/openssl/openssl.xml
# generated by gyp on android
/*.target.mk
/*.host.mk
deps/openssl/openssl.target.mk
deps/zlib/zlib.target.mk
# build/release artifacts
/*.tar.gz
/SHASUMS*.txt*
/SHASUMS.txt*
/tools/wrk/wrk

51
AUTHORS
View File

@@ -437,7 +437,6 @@ Suwon Chae <doortts@gmail.com>
David Braun <NodeJS-box@snkmail.com>
Mitar Milutinovic <mitar.git@tnode.com>
Michael Hart <michael.hart.au@gmail.com>
Jeff Barczewski <jeff.barczewski@gmail.com>
Andrew Hart <hartandrewr@gmail.com>
Rafael Garcia <rgarcia2009@gmail.com>
Tobias Müllerleile <tobias@muellerleile.net>
@@ -465,52 +464,4 @@ Yuan Chuan <yuanchuan23@gmail.com>
Krzysztof Chrapka <chrapka.k@gmail.com>
Linus Mårtensson <linus.martensson@sonymobile.com>
Peter Rust <peter@cornerstonenw.com>
Shuan Wang <shuanwang@gmail.com>
Wyatt Preul <wpreul@gmail.com>
David Björklund <david.bjorklund@gmail.com>
Dav Glass <davglass@gmail.com>
Andrew Chilton <andychilton@gmail.com>
Antony Bailey <support@antonybailey.net>
Forrest L Norvell <ogd@aoaioxxysz.net>
Evan Solomon <evan@evanalyze.com>
Eran Hammer <eran@hueniverse.com>
Daniel Chatfield <chatfielddaniel@gmail.com>
Eivind Uggedal <eivind@uggedal.com>
Edward Hutchins <eahutchins@gmail.com>
Chris Wren <cthewren@gmail.com>
Duan Yao <duanyao@ustc.edu>
Matthias Bartelmeß <mba@fourplusone.de>
James Halliday <mail@substack.net>
Matthew Aynalem <maynalem@gmail.com>
Vsevolod Strukchinsky <floatdrop@yandex-team.ru>
Jay Beavers <jay@hikinghomeschoolers.org>
Eric Schrock <Eric.Schrock@delphix.com>
Jeff Switzer <git@skratchdot.com>
Glen Mailer <glenjamin@gmail.com>
Jason Gerfen <jason.gerfen@gmail.com>
Patrik Stutz <patrik.stutz@gmail.com>
Zarko Stankovic <stankovic.zarko@gmail.com>
Maxim Bogushevich <boga1@mail.ru>
Phillip Alexander <git@phillipalexander.io>
Thom Seddon <thom@nightworld.com>
Nick Simmons <nick.simmons@jadedpixel.com>
Jacob Groundwater <groundwater@gmail.com>
Jackson Tian <shyvo1987@gmail.com>
fengmk2 <fengmk2@gmail.com>
Tim Wood <washwithcare@gmail.com>
Linus Unnebäck <linus@folkdatorn.se>
Nikolai Vavilov <vvnicholas@gmail.com>
Michael Ridgway <mcridgway@gmail.com>
Yazhong Liu <yorkiefixer@gmail.com>
Gabriel Falkenberg <gabriel.falkenberg@gmail.com>
Kai Groner <kai@gronr.com>
Steven Kabbes <stevenkabbes@gmail.com>
Gabriel Farrell <g@grrawr.com>
Nicolas Kaiser <nikai@nikai.net>
Ahamed Nafeez <ahamed.nafeez@gmail.com>
Cam Swords <cam.swords@gmail.com>
Paul Loyd <pavelko95@gmail.com>
Benjamin Waters <benjamin.waters@outlook.com>
Lev Gimelfarb <lev.gimelfarb@gmail.com>
Peter Flannery <flannery.peter@ntlworld.com>
Tuğrul Topuz <tugrultopuz@gmail.com>
Jeff Barczewski <jeff.barczewski@gmail.com>

442
ChangeLog
View File

@@ -1,270 +1,4 @@
2013.12.31, Version 0.11.10 (Unstable)
* http_parser: update to 2.2
* uv: Upgrade to v0.11.17
* v8: Upgrade to 3.22.24.10
* buffer: optimize writeInt* methods (Paul Loyd)
* child_process: better error handling (Alexis Campailla)
* cluster: do not synchronously emit 'setup' event (Sam Roberts)
* cluster: restore backwards compatibility and various fixes (Sam Roberts)
* crypto: remove unnecessary OpenSSL_add_all_digests (Yorkie)
* crypto: support GCM authenticated encryption mode. (Ingmar Runge)
* dns: add resolveSoa and 'SOA' rrtype (Tuğrul Topuz)
* events: move EE c'tor guts to EventEmitter.init (Bert Belder)
* http: DELETE shouldn't default to chunked encoding (Lalit Kapoor)
* http: parse the status message in a http response. (Cam Swords)
* node: fix removing AsyncListener in callback (Vladimir Kurchatkin)
* node: follow specification, zero-fill ArrayBuffers (Trevor Norris)
* openssl: use ASM optimized routines (Fedor Indutny)
* process: allow nextTick infinite recursion (Trevor Norris)
* querystring: remove `name` from `stringify()` (Yorkie)
* timers: setImmediate v8 optimization fix (pflannery)
* tls: add serialNumber to getPeerCertificate() (Ben Noordhuis)
* tls: reintroduce socket.encrypted (Fedor Indutny)
* tls: fix handling of asterisk in SNI context (Fedor Indutny)
* util: Format negative zero as '-0' (David Chan)
* vm: fix race condition in timeout (Alexis Campailla)
* windows: fix dns lookup of localhost with ipv6 (Alexis Campailla)
2013.11.20, Version 0.11.9 (Unstable), dcfd032bdd69dfb38c120e18438d6316ae522edc
* uv: upgrade to v0.11.15 (Timothy J Fontaine)
* v8: upgrade to 3.22.24.5 (Timothy J Fontaine)
* buffer: remove warning when no encoding is passed (Trevor Norris)
* build: make v8 use random seed for hash tables (Ben Noordhuis)
* crypto: build with shared openssl without NPN (Ben Noordhuis)
* crypto: update root certificates (Ben Noordhuis)
* debugger: pass on v8 debug switches (Ben Noordhuis)
* domain: use AsyncListener API (Trevor Norris)
* fs: add recursive subdirectory support to fs.watch (Nick Simmons)
* fs: make fs.watch() non-recursive by default (Ben Noordhuis)
* http: cleanup freeSockets when socket destroyed (fengmk2)
* http: force socket encoding to be null (isaacs)
* http: make DELETE requests set `req.method` (Nathan Rajlich)
* node: add AsyncListener support (Trevor Norris)
* src: remove global HandleScope that hid memory leaks (Ben Noordhuis)
* tls: add ECDH ciphers support (Erik Dubbelboer)
* tls: do not default to 'localhost' servername (Fedor Indutny)
* tls: more accurate wrapping of connecting socket (Fedor Indutny)
2013.10.30, Version 0.11.8 (Unstable), f8d86e24f3463c36f7f3f4c3b3ec779e5b6201e1
* uv: Upgrade to v0.11.14
* v8: upgrade 3.21.18.3
* assert: indicate if exception message is generated (Glen Mailer)
* buffer: add buf.toArrayBuffer() API (Trevor Norris)
* cluster: fix premature 'disconnect' event (Ben Noordhuis)
* crypto: add SPKAC support (Jason Gerfen)
* debugger: count space for line numbers correctly (Alex Kocharin)
* debugger: make busy loops SIGUSR1-interruptible (Ben Noordhuis)
* debugger: repeat last command (Alex Kocharin)
* debugger: show current line, fix for #6150 (Alex Kocharin)
* dgram: send() can accept strings (Trevor Norris)
* dns: rename domain to hostname (Ben Noordhuis)
* dns: set hostname property on error object (Ben Noordhuis)
* dtrace, mdb_v8: support more string, frame types (Dave Pacheco)
* http: add statusMessage (Patrik Stutz)
* http: expose supported methods (Ben Noordhuis)
* http: provide backpressure for pipeline flood (isaacs)
* process: Add exitCode property (isaacs)
* tls: socket.renegotiate(options, callback) (Fedor Indutny)
* util: format as Error if instanceof Error (Rod Vagg)
2013.08.21, Version 0.11.7 (Unstable), be52549bfa5311208b5fcdb3ba09210460fa9ceb
* uv: upgrade to v0.11.13
* v8: upgrade to 3.20.17
* buffer: adhere to INSPECT_MAX_BYTES (Timothy J Fontaine)
* buffer: fix regression for large buffer creation (Trevor Norris)
* buffer: don't throw if slice length too long (Trevor Norris)
* buffer: Buffer(buf) constructor copies into the proper buffer (Ben Noordhuis)
* cli: remove --max-stack-size (Ben Noordhuis)
* cli: unknown command line options are errors (Ben Noordhuis)
* child_process: exec accept buffer as an encoding (Seth Fitzsimmons)
* crypto: make randomBytes/pbkdf2 callbacks domain aware (Ben Noordhuis)
* domain: deprecate domain.dispose(). (Forrest L Norvell)
* fs: Expose birthtime on stat objects (isaacs)
* http: Only send connection:keep-alive if necessary (isaacs)
* repl: Catch syntax errors better (isaacs, Nathan Rajlich)
* stream: change default highWaterMark for objectMode to 16 (Mathias Buus)
* stream: make setEncoding/pause/resume chainable (Julian Gruber, isaacs)
* util: pass opts to custom inspect functions (Timothy J Fontaine)
* vm: rewritten to behave like Contextify (Domenic Denicola)
2013.08.21, Version 0.11.6 (Unstable), 04018d4b3938fd30ba14822e79195e4af2be36f6
* uv: Upgrade to v0.11.8
* v8: upgrade v8 to 3.20.14.1
* build: disable SSLv2 by default (Ben Noordhuis)
* build: don't auto-destroy existing configuration (Ben Noordhuis)
* crypto: add TLS 1.1 and 1.2 to secureProtocol list (Matthias Bartelmeß)
* crypto: fix memory leak in randomBytes() error path (Ben Noordhuis)
* dgram: don't call into js when send cb is omitted (Ben Noordhuis)
* dgram: fix regression in string argument handling (Ben Noordhuis)
* domains: performance improvements (Trevor Norris)
* events: EventEmitter = require('events') (Jake Verbaten)
* http: Add write()/end() callbacks (isaacs)
* http: Consistent 'finish' event semantics (isaacs)
* http: Prefer 'binary' over 'ascii' (isaacs)
* http: Support legacy agent.addRequest API (isaacs)
* http: Write hex/base64 chunks properly (isaacs)
* http: add agent.maxFreeSockets option (isaacs)
* http: provide access to raw headers/trailers (isaacs)
* http: removed headers stay removed (James Halliday)
* http,timers: improve callback performance (Ben Noordhuis)
* net: family option in net.connect (Vsevolod Strukchinsky)
* readline: pause stdin before turning off terminal raw mode (Daniel Chatfield)
* smalloc: allow different external array types (Trevor Norris)
* smalloc: expose ExternalArraySize (Trevor Norris)
* stream: Short-circuit buffer pushes when flowing (isaacs)
* tls: handle errors on socket before releasing it (Fedor Indutny)
* util: fix isPrimitive check (Trevor Norris)
* util: isObject should always return boolean (Trevor Norris)
2013.08.06, Version 0.11.5 (Unstable), 6f92da2dd106b0c63fde563284f83e08e2a521b5
* v8: upgrade to 3.20.11
* uv: upgrade to v0.11.7
* buffer: return offset for end of last write (Trevor Norris)
* build: embed the mdb_v8.so into the binary (Timothy J Fontaine)
* build: fix --without-ssl build (Ben Noordhuis)
* child_process: add 'shell' option to .exec() (Ben Noordhuis)
* dgram: report send errors to cb, don't pass bytes (Ben Noordhuis)
* fs: write strings directly to disk (Trevor Norris)
* https: fix default port (Koichi Kobayashi)
* openssl: use asm for sha, md5, rmd (Fedor Indutny)
* os: add mac address to networkInterfaces() output (Brian White)
* smalloc: introduce smalloc module (Trevor Norris)
* stream: Simplify flowing, passive data listening (streams3) (isaacs)
* tls: asynchronous SNICallback (Fedor Indutny)
* tls: share tls tickets key between cluster workers (Fedor Indutny)
* util: don't throw on circular %j input to format() (Ben Noordhuis)
2013.07.12, Version 0.11.4 (Unstable), b5b84197ed037918fd1a26e5cb87cce7c812ca55
2013.07.12, Version 0.11.4 (Unstable)
* npm: Upgrade to 1.3.4
@@ -445,180 +179,6 @@
* console: `console.dir()` bypasses inspect() methods (Nathan Rajlich)
2013.12.18, Version 0.10.24 (Stable), b7fd6bc899ccb629d790c47aee06aba87e535c41
* uv: Upgrade to v0.10.21
* npm: upgrade to 1.3.21
* v8: backport fix for CVE-2013-{6639|6640}
* build: unix install node and dep library headers (Timothy J Fontaine)
* cluster, v8: fix --logfile=%p.log (Ben Noordhuis)
* module: only cache package main (Wyatt Preul)
2013.12.12, Version 0.10.23 (Stable), 0462bc23564e7e950a70ae4577a840b04db6c7c6
* uv: Upgrade to v0.10.20 (Timothy J Fontaine)
* npm: Upgrade to 1.3.17 (isaacs)
* gyp: update to 78b26f7 (Timothy J Fontaine)
* build: include postmortem symbols on linux (Timothy J Fontaine)
* crypto: Make Decipher._flush() emit errors. (Kai Groner)
* dgram: fix abort when getting `fd` of closed dgram (Fedor Indutny)
* events: do not accept NaN in setMaxListeners (Fedor Indutny)
* events: avoid calling `once` functions twice (Tim Wood)
* events: fix TypeError in removeAllListeners (Jeremy Martin)
* fs: report correct path when EEXIST (Fedor Indutny)
* process: enforce allowed signals for kill (Sam Roberts)
* tls: emit 'end' on .receivedShutdown (Fedor Indutny)
* tls: fix potential data corruption (Fedor Indutny)
* tls: handle `ssl.start()` errors appropriately (Fedor Indutny)
* tls: reset NPN callbacks after SNI (Fedor Indutny)
2013.11.12, Version 0.10.22 (Stable), cbff8f091c22fb1df6b238c7a1b9145db950fa65
* npm: Upgrade to 1.3.14
* uv: Upgrade to v0.10.19
* child_process: don't assert on stale file descriptor events (Fedor Indutny)
* darwin: Fix "Not Responding" in Mavericks activity monitor (Fedor Indutny)
* debugger: Fix bug in sb() with unnamed script (Maxim Bogushevich)
* repl: do not insert duplicates into completions (Maciej Małecki)
* src: Fix memory leak on closed handles (Timothy J Fontaine)
* tls: prevent stalls by using read(0) (Fedor Indutny)
* v8: use correct timezone information on Solaris (Maciej Małecki)
2013.10.18, Version 0.10.21 (Stable), e2da042844a830fafb8031f6c477eb4f96195210
* uv: Upgrade to v0.10.18
* crypto: clear errors from verify failure (Timothy J Fontaine)
* dtrace: interpret two byte strings (Dave Pacheco)
* fs: fix fs.truncate() file content zeroing bug (Ben Noordhuis)
* http: provide backpressure for pipeline flood (isaacs)
* tls: fix premature connection termination (Ben Noordhuis)
2013.09.30, Version 0.10.20 (Stable), d7234c8d50a1af73f60d2d3c0cc7eed17429a481
* tls: fix sporadic hang and partial reads (Fedor Indutny)
- fixes "npm ERR! cb() never called!"
2013.09.24, Version 0.10.19 (Stable), 6b5e6a5a3ec8d994c9aab3b800b9edbf1b287904
* uv: Upgrade to v0.10.17
* npm: upgrade to 1.3.11
* readline: handle input starting with control chars (Eric Schrock)
* configure: add mips-float-abi (soft, hard) option (Andrei Sedoi)
* stream: objectMode transforms allow falsey values (isaacs)
* tls: prevent duplicate values returned from read (Nathan Rajlich)
* tls: NPN protocols are now local to connections (Fedor Indutny)
2013.09.04, Version 0.10.18 (Stable), 67a1f0c52e0708e2596f3f2134b8386d6112561e
* uv: Upgrade to v0.10.15
* stream: Don't crash on unset _events property (isaacs)
* stream: Pass 'buffer' encoding with decoded writable chunks (isaacs)
2013.08.21, Version 0.10.17 (Stable), 469a4a5091a677df62be319675056b869c31b35c
* uv: Upgrade v0.10.14
* http_parser: Do not accept PUN/GEM methods as PUT/GET (Chris Dickinson)
* tls: fix assertion when ssl is destroyed at read (Fedor Indutny)
* stream: Throw on 'error' if listeners removed (isaacs)
* dgram: fix assertion on bad send() arguments (Ben Noordhuis)
* readline: pause stdin before turning off terminal raw mode (Daniel Chatfield)
2013.08.16, Version 0.10.16 (Stable), 50b4c905a4425430ae54db4906f88982309e128d
* v8: back-port fix for CVE-2013-2882
* npm: Upgrade to 1.3.8
* crypto: fix assert() on malformed hex input (Ben Noordhuis)
* crypto: fix memory leak in randomBytes() error path (Ben Noordhuis)
* events: fix memory leak, don't leak event names (Ben Noordhuis)
* http: Handle hex/base64 encodings properly (isaacs)
* http: improve chunked res.write(buf) performance (Ben Noordhuis)
* stream: Fix double pipe error emit (Eran Hammer)
2013.07.25, Version 0.10.15 (Stable), 2426d65af860bda7be9f0832a99601cc43c6cf63
* src: fix process.getuid() return value (Ben Noordhuis)
2013.07.25, Version 0.10.14 (Stable), fdf57f811f9683a4ec49a74dc7226517e32e6c9d
* uv: Upgrade to v0.10.13
* npm: Upgrade to v1.3.5
* os: Don't report negative times in cpu info (Ben Noordhuis)
* fs: Handle large UID and GID (Ben Noordhuis)
* url: Fix edge-case when protocol is non-lowercase (Shuan Wang)
* doc: Streams API Doc Rewrite (isaacs)
* node: call MakeDomainCallback in all domain cases (Trevor Norris)
* crypto: fix memory leak in LoadPKCS12 (Fedor Indutny)
2013.07.09, Version 0.10.13 (Stable), e32660a984427d46af6a144983cf7b8045b7299c
* uv: Upgrade to v0.10.12

265
LICENSE
View File

@@ -323,241 +323,70 @@ maintained libraries. The externally maintained libraries used by Node are:
- npm is a package manager program located at deps/npm.
npm's license follows:
"""
Copyright (c) Isaac Z. Schlueter
Copyright 2009-2012, Isaac Z. Schlueter (the "Original Author")
All rights reserved.
npm is released under the Artistic 2.0 License.
The text of the License follows:
MIT +no-false-attribs License
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
Distributions of all or part of the Software intended to be used
by the recipients as they would use the unmodified Software,
containing modifications that substantially alter, remove, or
disable functionality of the Software, outside of the documented
configuration mechanisms provided by the Software, shall be
modified such that the Original Author's bug reporting email
addresses and urls are either replaced with the contact information
of the parties responsible for the changes, or removed entirely.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
--------
The Artistic License 2.0
Copyright (c) 2000-2006, The Perl Foundation.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
This license establishes the terms under which a given free software
Package may be copied, modified, distributed, and/or redistributed.
The intent is that the Copyright Holder maintains some artistic
control over the development of that Package while still keeping the
Package available as open source and free software.
You are always permitted to make arrangements wholly outside of this
license directly with the Copyright Holder of a given Package. If the
terms of this license do not permit the full use that you propose to
make of the Package, you should contact the Copyright Holder and seek
a different licensing arrangement.
Definitions
"Copyright Holder" means the individual(s) or organization(s)
named in the copyright notice for the entire Package.
"Contributor" means any party that has contributed code or other
material to the Package, in accordance with the Copyright Holder's
procedures.
"You" and "your" means any person who would like to copy,
distribute, or modify the Package.
"Package" means the collection of files distributed by the
Copyright Holder, and derivatives of that collection and/or of
those files. A given Package may consist of either the Standard
Version, or a Modified Version.
"Distribute" means providing a copy of the Package or making it
accessible to anyone else, or in the case of a company or
organization, to others outside of your company or organization.
"Distributor Fee" means any fee that you charge for Distributing
this Package or providing support for this Package to another
party. It does not mean licensing fees.
"Standard Version" refers to the Package if it has not been
modified, or has been modified only in ways explicitly requested
by the Copyright Holder.
"Modified Version" means the Package, if it has been changed, and
such changes were not explicitly requested by the Copyright
Holder.
"Original License" means this Artistic License as Distributed with
the Standard Version of the Package, in its current version or as
it may be modified by The Perl Foundation in the future.
"Source" form means the source code, documentation source, and
configuration files for the Package.
"Compiled" form means the compiled bytecode, object code, binary,
or any other form resulting from mechanical transformation or
translation of the Source form.
Permission for Use and Modification Without Distribution
(1) You are permitted to use the Standard Version and create and use
Modified Versions for any purpose without restriction, provided that
you do not Distribute the Modified Version.
Permissions for Redistribution of the Standard Version
(2) You may Distribute verbatim copies of the Source form of the
Standard Version of this Package in any medium without restriction,
either gratis or for a Distributor Fee, provided that you duplicate
all of the original copyright notices and associated disclaimers. At
your discretion, such verbatim copies may or may not include a
Compiled form of the Package.
(3) You may apply any bug fixes, portability changes, and other
modifications made available from the Copyright Holder. The resulting
Package will still be considered the Standard Version, and as such
will be subject to the Original License.
Distribution of Modified Versions of the Package as Source
(4) You may Distribute your Modified Version as Source (either gratis
or for a Distributor Fee, and with or without a Compiled form of the
Modified Version) provided that you clearly document how it differs
from the Standard Version, including, but not limited to, documenting
any non-standard features, executables, or modules, and provided that
you do at least ONE of the following:
(a) make the Modified Version available to the Copyright Holder
of the Standard Version, under the Original License, so that the
Copyright Holder may include your modifications in the Standard
Version.
(b) ensure that installation of your Modified Version does not
prevent the user installing or running the Standard Version. In
addition, the Modified Version must bear a name that is different
from the name of the Standard Version.
(c) allow anyone who receives a copy of the Modified Version to
make the Source form of the Modified Version available to others
under
(i) the Original License or
(ii) a license that permits the licensee to freely copy,
modify and redistribute the Modified Version using the same
licensing terms that apply to the copy that the licensee
received, and requires that the Source form of the Modified
Version, and of any works derived from it, be made freely
available in that license fees are prohibited but Distributor
Fees are allowed.
Distribution of Compiled Forms of the Standard Version
or Modified Versions without the Source
(5) You may Distribute Compiled forms of the Standard Version without
the Source, provided that you include complete instructions on how to
get the Source of the Standard Version. Such instructions must be
valid at the time of your distribution. If these instructions, at any
time while you are carrying out such distribution, become invalid, you
must provide new instructions on demand or cease further distribution.
If you provide valid instructions or cease distribution within thirty
days after you become aware that the instructions are invalid, then
you do not forfeit any of your rights under this license.
(6) You may Distribute a Modified Version in Compiled form without
the Source, provided that you comply with Section 4 with respect to
the Source of the Modified Version.
Aggregating or Linking the Package
(7) You may aggregate the Package (either the Standard Version or
Modified Version) with other packages and Distribute the resulting
aggregation provided that you do not charge a licensing fee for the
Package. Distributor Fees are permitted, and licensing fees for other
components in the aggregation are permitted. The terms of this license
apply to the use and Distribution of the Standard or Modified Versions
as included in the aggregation.
(8) You are permitted to link Modified and Standard Versions with
other works, to embed the Package in a larger work of your own, or to
build stand-alone binary or bytecode versions of applications that
include the Package, and Distribute the result without restriction,
provided the result does not expose a direct interface to the Package.
Items That are Not Considered Part of a Modified Version
(9) Works (including, but not limited to, modules and scripts) that
merely extend or make use of the Package, do not, by themselves, cause
the Package to be a Modified Version. In addition, such works are not
considered parts of the Package itself, and are not subject to the
terms of this license.
General Provisions
(10) Any use, modification, and distribution of the Standard or
Modified Versions is governed by this Artistic License. By using,
modifying or distributing the Package, you accept this license. Do not
use, modify, or distribute the Package, if you do not accept this
license.
(11) If your Modified Version has been derived from a Modified
Version made by someone other than you, you are nevertheless required
to ensure that your Modified Version complies with the requirements of
this license.
(12) This license does not grant you the right to use any trademark,
service mark, tradename, or logo of the Copyright Holder.
(13) This license includes the non-exclusive, worldwide,
free-of-charge patent license to make, have made, use, offer to sell,
sell, import and otherwise transfer the Package with respect to any
patent claims licensable by the Copyright Holder that are necessarily
infringed by the Package. If you institute patent litigation
(including a cross-claim or counterclaim) against any party alleging
that the Package constitutes direct or contributory patent
infringement, then this Artistic License to you shall terminate on the
date that such litigation is filed.
(14) Disclaimer of Warranty:
THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------
Except where noted, this license applies to any and all software
programs and associated documentation files created by the
Original Author, when distributed with the Software.
"Node.js" and "node" trademark Joyent, Inc. npm is not officially
part of the Node.js project, and is neither owned by nor
officially affiliated with Joyent, Inc.
Packages published in the npm registry (other than the Software and
its included dependencies) are not part of npm itself, are the sole
property of their respective maintainers, and are not covered by
this license.
Packages published in the npm registry are not part of npm
itself, are the sole property of their respective maintainers,
and are not covered by this license.
"npm Logo" created by Mathias Pettersson and Brian Hammond,
used with permission.
"Gubblebum Blocky" font
Copyright (c) by Tjarda Koster, http://jelloween.deviantart.com
Copyright (c) 2007 by Tjarda Koster, http://jelloween.deviantart.com
included for use in the npm website and documentation,
used with permission.
This program uses several Node modules contained in the node_modules/
subdirectory, according to the terms of their respective licenses.
This program uses "node-uuid", Copyright (c) 2010 Robert Kieffer,
according to the terms of the MIT license.
This program uses "request", Copyright (c) 2011 Mikeal Rogers,
according to the terms of the Apache license.
This program uses "mkdirp", Copyright (c) 2010 James Halliday,
according to the terms of the MIT/X11 license.
"""
- tools/doc/node_modules/marked. Marked is a Markdown parser. Marked's

View File

@@ -14,12 +14,6 @@ NODE ?= ./node
# or set the V environment variable to an empty string.
V ?= 1
ifeq ($(USE_NINJA),1)
ifneq ($(V),)
NINJA := $(NINJA) -v
endif
endif
# BUILDTYPE=Debug builds both release and debug builds. If you want to compile
# just the debug build, run `make -C out BUILDTYPE=Debug` instead.
ifeq ($(BUILDTYPE),Release)
@@ -50,20 +44,16 @@ node_g: config.gypi out/Makefile
ln -fs out/Debug/node $@
endif
out/Makefile: common.gypi deps/uv/uv.gyp deps/http_parser/http_parser.gyp deps/zlib/zlib.gyp deps/v8/build/toolchain.gypi deps/v8/build/features.gypi deps/v8/tools/gyp/v8.gyp node.gyp config.gypi
out/Makefile: common.gypi deps/uv/uv.gyp deps/http_parser/http_parser.gyp deps/zlib/zlib.gyp deps/v8/build/common.gypi deps/v8/tools/gyp/v8.gyp node.gyp config.gypi
ifeq ($(USE_NINJA),1)
touch out/Makefile
$(PYTHON) tools/gyp_node.py -f ninja
$(PYTHON) tools/gyp_node -f ninja
else
$(PYTHON) tools/gyp_node.py -f make
$(PYTHON) tools/gyp_node -f make
endif
config.gypi: configure
if [ -f $@ ]; then
$(error Stale $@, please re-run ./configure)
else
$(error No $@, please run ./configure first)
fi
$(PYTHON) ./configure
install: all
$(PYTHON) tools/install.py $@ '$(DESTDIR)' '$(PREFIX)'
@@ -86,7 +76,6 @@ distclean:
test: all
$(PYTHON) tools/test.py --mode=release simple message
$(MAKE) jslint
$(MAKE) cpplint
test-http1: all
$(PYTHON) tools/test.py --mode=release --use-http1 simple message
@@ -94,16 +83,16 @@ test-http1: all
test-valgrind: all
$(PYTHON) tools/test.py --mode=release --valgrind simple message
test/gc/node_modules/weak/build/Release/weakref.node:
test/gc/node_modules/weak/build:
@if [ ! -f node ]; then make all; fi
./node deps/npm/node_modules/node-gyp/bin/node-gyp rebuild \
--directory="$(shell pwd)/test/gc/node_modules/weak" \
--nodedir="$(shell pwd)"
test-gc: all test/gc/node_modules/weak/build/Release/weakref.node
test-gc: all test/gc/node_modules/weak/build
$(PYTHON) tools/test.py --mode=release gc
test-all: all test/gc/node_modules/weak/build/Release/weakref.node
test-all: all test/gc/node_modules/weak/build
$(PYTHON) tools/test.py --mode=debug,release
make test-npm
@@ -131,9 +120,6 @@ test-pummel: all
test-internet: all
$(PYTHON) tools/test.py internet
test-debugger: all
$(PYTHON) tools/test.py debugger
test-npm: node
./node deps/npm/test/run.js
@@ -402,19 +388,8 @@ jslintfix:
jslint:
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ --exclude_files lib/punycode.js
CPPLINT_EXCLUDE ?=
CPPLINT_EXCLUDE += src/node_dtrace.cc
CPPLINT_EXCLUDE += src/node_dtrace.cc
CPPLINT_EXCLUDE += src/node_root_certs.h
CPPLINT_EXCLUDE += src/node_win32_perfctr_provider.cc
CPPLINT_EXCLUDE += src/queue.h
CPPLINT_EXCLUDE += src/tree.h
CPPLINT_EXCLUDE += src/v8abbr.h
CPPLINT_FILES = $(filter-out $(CPPLINT_EXCLUDE), $(wildcard src/*.cc src/*.h src/*.c))
cpplint:
@$(PYTHON) tools/cpplint.py $(CPPLINT_FILES)
@$(PYTHON) tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c)
lint: jslint cpplint

View File

@@ -1,4 +1,4 @@
Evented I/O for V8 javascript.
Evented I/O for V8 javascript. [![Build Status](https://secure.travis-ci.org/joyent/node.png)](http://travis-ci.org/joyent/node)
===
### To build:
@@ -16,15 +16,6 @@ Unix/Macintosh:
make
make install
With libicu i18n support:
svn checkout --force --revision 214189 \
http://src.chromium.org/svn/trunk/deps/third_party/icu46 \
deps/v8/third_party/icu46
./configure --with-icu-path=deps/v8/third_party/icu46/icu.gyp
make
make install
If your python binary is in a non-standard location or has a
non-standard name, run the following instead:
@@ -33,27 +24,9 @@ non-standard name, run the following instead:
make
make install
Prerequisites (Windows only):
* Python 2.6 or 2.7
* Visual Studio 2010 or 2012
Windows:
vcbuild nosign
You can download pre-built binaries for various operating systems from
[http://nodejs.org/download/](http://nodejs.org/download/). The Windows
and OS X installers will prompt you for the location to install to.
The tarballs are self-contained; you can extract them to a local directory
with:
tar xzf /path/to/node-<version>-<platform>-<arch>.tar.gz
Or system-wide with:
cd /usr/local && tar --strip-components 1 -xzf \
/path/to/node-<version>-<platform>-<arch>.tar.gz
vcbuild.bat
### To run the tests:
@@ -63,7 +36,7 @@ Unix/Macintosh:
Windows:
vcbuild test
vcbuild.bat test
### To build the documentation:
@@ -77,7 +50,7 @@ Resources for Newcomers
---
- [The Wiki](https://github.com/joyent/node/wiki)
- [nodejs.org](http://nodejs.org/)
- [how to install node.js and npm (node package manager)](http://www.joyent.com/blog/installing-node-and-npm/)
- [how to install node.js and npm (node package manager)](http://joyeur.com/2010/12/10/installing-node-and-npm/)
- [list of modules](https://github.com/joyent/node/wiki/modules)
- [searching the npm registry](http://npmjs.org/)
- [list of companies and projects using node](https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node)

View File

@@ -18,29 +18,28 @@ if (module === require.main) {
var spawn = require('child_process').spawn;
runBenchmarks();
}
function runBenchmarks() {
var test = tests.shift();
if (!test)
return;
function runBenchmarks() {
var test = tests.shift();
if (!test)
return;
if (test.match(/^[\._]/))
return process.nextTick(runBenchmarks);
if (test.match(/^[\._]/))
return process.nextTick(runBenchmarks);
console.error(type + '/' + test);
test = path.resolve(dir, test);
console.error(type + '/' + test);
test = path.resolve(dir, test);
var a = (process.execArgv || []).concat(test);
var child = spawn(process.execPath, a, { stdio: 'inherit' });
child.on('close', function(code) {
if (code)
process.exit(code);
else {
console.log('');
runBenchmarks();
}
});
var child = spawn(process.execPath, [ test ], { stdio: 'inherit' });
child.on('close', function(code) {
if (code)
process.exit(code);
else {
console.log('');
runBenchmarks();
}
});
}
}
exports.createBenchmark = function(fn, options) {

View File

@@ -1,4 +1,4 @@
// test the throughput of the fs.WriteStream class.
// test the througput of the fs.WriteStream class.
var path = require('path');
var common = require('../common.js');
@@ -38,7 +38,7 @@ function main(conf) {
function runTest() {
assert(fs.statSync(filename).size === filesize);
var rs = fs.createReadStream(filename, {
highWaterMark: size,
bufferSize: size,
encoding: encoding
});

View File

@@ -1,4 +1,4 @@
// test the throughput of the fs.WriteStream class.
// test the througput of the fs.WriteStream class.
var path = require('path');
var common = require('../common.js');

View File

@@ -5,7 +5,6 @@ var bench = common.createBenchmark(main, {
// unicode confuses ab on os x.
type: ['bytes', 'buffer'],
length: [4, 1024, 102400],
chunks: [0, 1, 4], // chunks=0 means 'no chunked encoding'.
c: [50, 500]
});
@@ -14,7 +13,7 @@ function main(conf) {
var spawn = require('child_process').spawn;
var server = require('../http_simple.js');
setTimeout(function() {
var path = '/' + conf.type + '/' + conf.length + '/' + conf.chunks;
var path = '/' + conf.type + '/' + conf.length; //+ '/' + conf.chunks;
var args = ['-r', 5000, '-t', 8, '-c', conf.c];
bench.http(path, args, function() {

View File

@@ -5,12 +5,13 @@ using namespace v8;
static int c = 0;
void Hello(const FunctionCallbackInfo<Value>& args) {
args.GetReturnValue().Set(c++);
static Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
return scope.Close(Integer::New(c++));
}
extern "C" void init (Handle<Object> target) {
HandleScope scope(Isolate::GetCurrent());
HandleScope scope;
NODE_SET_METHOD(target, "hello", Hello);
}

View File

@@ -2,7 +2,6 @@
// as many bytes as we can in the specified time (default = 10s)
var common = require('../common.js');
var util = require('util');
// if there are --dur=N and --len=N args, then
// run the function with those settings.
@@ -28,23 +27,26 @@ function main(conf) {
}
function fail(err, syscall) {
throw util._errnoException(err, syscall);
function fail(syscall) {
var e = new Error(syscall + ' ' + errno);
e.errno = e.code = errno;
e.syscall = syscall;
throw e;
}
function server() {
var serverHandle = new TCP();
var err = serverHandle.bind('127.0.0.1', PORT);
if (err)
fail(err, 'bind');
var r = serverHandle.bind('127.0.0.1', PORT);
if (r)
fail('bind');
err = serverHandle.listen(511);
if (err)
fail(err, 'listen');
var r = serverHandle.listen(511);
if (r)
fail('listen');
serverHandle.onconnection = function(err, clientHandle) {
if (err)
fail(err, 'connect');
serverHandle.onconnection = function(clientHandle) {
if (!clientHandle)
fail('connect');
// the meat of the benchmark is right here:
bench.start();
@@ -55,11 +57,11 @@ function server() {
bench.end((bytes * 8) / (1024 * 1024 * 1024));
}, dur * 1000);
clientHandle.onread = function(nread, buffer) {
clientHandle.onread = function(buffer) {
// we're not expecting to ever get an EOF from the client.
// just lots of data forever.
if (nread < 0)
fail(nread, 'read');
if (!buffer)
fail('read');
// don't slice the buffer. the point of this is to isolate, not
// simulate real traffic.
@@ -91,44 +93,41 @@ function client() {
}
var clientHandle = new TCP();
var connectReq = {};
var err = clientHandle.connect(connectReq, '127.0.0.1', PORT);
var connectReq = clientHandle.connect('127.0.0.1', PORT);
if (err)
fail(err, 'connect');
if (!connectReq)
fail('connect');
clientHandle.readStart();
connectReq.oncomplete = function(err) {
if (err)
fail(err, 'connect');
connectReq.oncomplete = function() {
while (clientHandle.writeQueueSize === 0)
write();
};
function write() {
var writeReq = { oncomplete: afterWrite };
var err;
var writeReq
switch (type) {
case 'buf':
err = clientHandle.writeBuffer(writeReq, chunk);
writeReq = clientHandle.writeBuffer(chunk);
break;
case 'utf':
err = clientHandle.writeUtf8String(writeReq, chunk);
writeReq = clientHandle.writeUtf8String(chunk);
break;
case 'asc':
err = clientHandle.writeAsciiString(writeReq, chunk);
writeReq = clientHandle.writeAsciiString(chunk);
break;
}
if (err)
fail(err, 'write');
if (!writeReq)
fail('write');
writeReq.oncomplete = afterWrite;
}
function afterWrite(err, handle, req) {
if (err)
fail(err, 'write');
function afterWrite(status, handle, req) {
if (status)
fail('write');
while (clientHandle.writeQueueSize === 0)
write();

View File

@@ -2,7 +2,6 @@
// as many bytes as we can in the specified time (default = 10s)
var common = require('../common.js');
var util = require('util');
// if there are --dur=N and --len=N args, then
// run the function with those settings.
@@ -27,39 +26,42 @@ function main(conf) {
server();
}
function fail(err, syscall) {
throw util._errnoException(err, syscall);
function fail(syscall) {
var e = new Error(syscall + ' ' + errno);
e.errno = e.code = errno;
e.syscall = syscall;
throw e;
}
function server() {
var serverHandle = new TCP();
var err = serverHandle.bind('127.0.0.1', PORT);
if (err)
fail(err, 'bind');
var r = serverHandle.bind('127.0.0.1', PORT);
if (r)
fail('bind');
err = serverHandle.listen(511);
if (err)
fail(err, 'listen');
var r = serverHandle.listen(511);
if (r)
fail('listen');
serverHandle.onconnection = function(err, clientHandle) {
if (err)
fail(err, 'connect');
serverHandle.onconnection = function(clientHandle) {
if (!clientHandle)
fail('connect');
clientHandle.onread = function(nread, buffer) {
clientHandle.onread = function(buffer) {
// we're not expecting to ever get an EOF from the client.
// just lots of data forever.
if (nread < 0)
fail(nread, 'read');
if (!buffer)
fail('read');
var writeReq = {};
err = clientHandle.writeBuffer(writeReq, buffer);
var writeReq = clientHandle.writeBuffer(buffer);
if (err)
fail(err, 'write');
if (!writeReq)
fail('write');
writeReq.oncomplete = function(status, handle, req) {
if (status)
fail(err, 'write');
fail('write');
};
};
@@ -88,26 +90,22 @@ function client() {
}
var clientHandle = new TCP();
var connectReq = {};
var err = clientHandle.connect(connectReq, '127.0.0.1', PORT);
var connectReq = clientHandle.connect('127.0.0.1', PORT);
var bytes = 0;
if (err)
fail(err, 'connect');
if (!connectReq)
fail('connect');
clientHandle.readStart();
clientHandle.onread = function(nread, buffer) {
if (nread < 0)
fail(nread, 'read');
clientHandle.onread = function(buffer) {
if (!buffer)
fail('read');
bytes += buffer.length;
};
connectReq.oncomplete = function(err) {
if (err)
fail(err, 'connect');
connectReq.oncomplete = function() {
bench.start();
setTimeout(function() {
@@ -121,27 +119,28 @@ function client() {
};
function write() {
var writeReq = { oncomplete: afterWrite };
var err;
var writeReq
switch (type) {
case 'buf':
err = clientHandle.writeBuffer(writeReq, chunk);
writeReq = clientHandle.writeBuffer(chunk);
break;
case 'utf':
err = clientHandle.writeUtf8String(writeReq, chunk);
writeReq = clientHandle.writeUtf8String(chunk);
break;
case 'asc':
err = clientHandle.writeAsciiString(writeReq, chunk);
writeReq = clientHandle.writeAsciiString(chunk);
break;
}
if (err)
fail(err, 'write');
if (!writeReq)
fail('write');
writeReq.oncomplete = afterWrite;
}
function afterWrite(err, handle, req) {
if (err)
fail(err, 'write');
function afterWrite(status, handle, req) {
if (status)
fail('write');
while (clientHandle.writeQueueSize === 0)
write();

View File

@@ -2,7 +2,6 @@
// as many bytes as we can in the specified time (default = 10s)
var common = require('../common.js');
var util = require('util');
// if there are dur=N and len=N args, then
// run the function with those settings.
@@ -27,23 +26,27 @@ function main(conf) {
server();
}
function fail(err, syscall) {
throw util._errnoException(err, syscall);
function fail(syscall) {
var e = new Error(syscall + ' ' + errno);
e.errno = e.code = errno;
e.syscall = syscall;
throw e;
}
function server() {
var serverHandle = new TCP();
var err = serverHandle.bind('127.0.0.1', PORT);
if (err)
fail(err, 'bind');
var r = serverHandle.bind('127.0.0.1', PORT);
if (r)
fail('bind');
err = serverHandle.listen(511);
if (err)
fail(err, 'listen');
var r = serverHandle.listen(511);
if (r)
fail('listen');
serverHandle.onconnection = function(err, clientHandle) {
if (err)
fail(err, 'connect');
serverHandle.onconnection = function(clientHandle) {
if (!clientHandle)
fail('connect');
var chunk;
switch (type) {
@@ -68,27 +71,28 @@ function server() {
write();
function write() {
var writeReq = { oncomplete: afterWrite };
var err;
var writeReq
switch (type) {
case 'buf':
err = clientHandle.writeBuffer(writeReq, chunk);
writeReq = clientHandle.writeBuffer(chunk);
break;
case 'utf':
err = clientHandle.writeUtf8String(writeReq, chunk);
writeReq = clientHandle.writeUtf8String(chunk);
break;
case 'asc':
err = clientHandle.writeAsciiString(writeReq, chunk);
writeReq = clientHandle.writeAsciiString(chunk);
break;
}
if (err)
fail(err, 'write');
if (!writeReq)
fail('write');
writeReq.oncomplete = afterWrite;
}
function afterWrite(err, handle, req) {
if (err)
fail(err, 'write');
function afterWrite(status, handle, req) {
if (status)
fail('write');
while (clientHandle.writeQueueSize === 0)
write();
@@ -100,19 +104,18 @@ function server() {
function client() {
var clientHandle = new TCP();
var connectReq = {};
var err = clientHandle.connect(connectReq, '127.0.0.1', PORT);
var connectReq = clientHandle.connect('127.0.0.1', PORT);
if (err)
fail(err, 'connect');
if (!connectReq)
fail('connect');
connectReq.oncomplete = function() {
var bytes = 0;
clientHandle.onread = function(nread, buffer) {
clientHandle.onread = function(buffer) {
// we're not expecting to ever get an EOF from the client.
// just lots of data forever.
if (nread < 0)
fail(nread, 'read');
if (!buffer)
fail('read');
// don't slice the buffer. the point of this is to isolate, not
// simulate real traffic.

View File

@@ -39,8 +39,7 @@ function main(conf) {
options = { key: fs.readFileSync(cert_dir + '/test_key.pem'),
cert: fs.readFileSync(cert_dir + '/test_cert.pem'),
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ],
ciphers: 'AES256-GCM-SHA384' };
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ] };
server = tls.createServer(options, onConnection);
setTimeout(done, dur * 1000);

View File

@@ -23,8 +23,7 @@ function main(conf) {
var cert_dir = path.resolve(__dirname, '../../test/fixtures'),
options = { key: fs.readFileSync(cert_dir + '/test_key.pem'),
cert: fs.readFileSync(cert_dir + '/test_cert.pem'),
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ],
ciphers: 'AES256-GCM-SHA384' };
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ] };
server = tls.createServer(options, onConnection);
server.listen(common.PORT, onListening);

View File

@@ -14,10 +14,8 @@
# Enable V8's post-mortem debugging only on unix flavors.
'conditions': [
['OS == "win"', {
'os_posix': 0,
'v8_postmortem_support': 'false'
}, {
'os_posix': 1,
'v8_postmortem_support': 'true'
}]
],
@@ -57,6 +55,7 @@
'msvs_configuration_platform': 'x64',
}],
['OS=="solaris"', {
'cflags': [ '-fno-omit-frame-pointer' ],
# pull in V8's postmortem metadata
'ldflags': [ '-Wl,-z,allextract' ]
}, {
@@ -69,9 +68,6 @@
['clang == 0 and gcc_version <= 44', {
'cflags': [ '-fno-tree-sink' ], # Work around compiler bug.
}],
['OS!="mac" and OS!="win"', {
'cflags': [ '-fno-omit-frame-pointer' ],
}],
],
'msvs_settings': {
'VCCLCompilerTool': {
@@ -103,10 +99,6 @@
},
}
},
# Forcibly disable -Werror. We support a wide range of compilers, it's
# simply not feasible to squelch all warnings, never mind that the
# libraries in deps/ are not under our control.
'cflags!': ['-Werror'],
'msvs_settings': {
'VCCLCompilerTool': {
'StringPooling': 'true', # pool string literals
@@ -137,7 +129,6 @@
],
},
},
'msvs_disabled_warnings': [4351, 4355, 4800],
'conditions': [
['OS == "win"', {
'msvs_cygwin_shell': 0, # prevent actions from trying to use cygwin

535
configure vendored
View File

@@ -16,260 +16,254 @@ from gyp.common import GetFlavor
# parse our options
parser = optparse.OptionParser()
# Options should be in alphabetical order but keep --prefix at the top,
# that's arguably the one people will be looking for most.
parser.add_option('--prefix',
action='store',
dest='prefix',
help='select the install prefix (defaults to /usr/local)')
parser.add_option("--debug",
action="store_true",
dest="debug",
help="Also build debug build")
parser.add_option('--debug',
action='store_true',
dest='debug',
help='also build debug build')
parser.add_option("--prefix",
action="store",
dest="prefix",
help="Select the install prefix (defaults to /usr/local)")
parser.add_option('--dest-cpu',
action='store',
dest='dest_cpu',
help='CPU architecture to build for. Valid values are: arm, ia32, x64')
parser.add_option("--without-npm",
action="store_true",
dest="without_npm",
help="Don\'t install the bundled npm package manager")
parser.add_option('--dest-os',
action='store',
dest='dest_os',
help='operating system to build for. Valid values are: '
'win, mac, solaris, freebsd, openbsd, linux, android')
parser.add_option("--without-ssl",
action="store_true",
dest="without_ssl",
help="Build without SSL")
parser.add_option('--gdb',
action='store_true',
dest='gdb',
help='add gdb support')
parser.add_option("--without-snapshot",
action="store_true",
dest="without_snapshot",
help="Build without snapshotting V8 libraries. You might want to set"
" this for cross-compiling. [Default: False]")
parser.add_option('--ninja',
action='store_true',
dest='use_ninja',
help='generate files for the ninja build system')
parser.add_option("--shared-v8",
action="store_true",
dest="shared_v8",
help="Link to a shared V8 DLL instead of static linking")
parser.add_option('--no-ifaddrs',
action='store_true',
dest='no_ifaddrs',
help='use on deprecated SunOS systems that do not support ifaddrs.h')
parser.add_option("--shared-v8-includes",
action="store",
dest="shared_v8_includes",
help="Directory containing V8 header files")
parser.add_option("--shared-v8-libpath",
action="store",
dest="shared_v8_libpath",
help="A directory to search for the shared V8 DLL")
parser.add_option("--shared-v8-libname",
action="store",
dest="shared_v8_libname",
help="Alternative lib name to link to (default: 'v8')")
parser.add_option("--shared-openssl",
action="store_true",
dest="shared_openssl",
help="Link to a shared OpenSSl DLL instead of static linking")
parser.add_option("--shared-openssl-includes",
action="store",
dest="shared_openssl_includes",
help="Directory containing OpenSSL header files")
parser.add_option("--shared-openssl-libpath",
action="store",
dest="shared_openssl_libpath",
help="A directory to search for the shared OpenSSL DLLs")
parser.add_option("--shared-openssl-libname",
action="store",
dest="shared_openssl_libname",
help="Alternative lib name to link to (default: 'crypto,ssl')")
# deprecated
parser.add_option('--openssl-includes',
action='store',
dest='shared_openssl_includes',
parser.add_option("--openssl-use-sys",
action="store_true",
dest="shared_openssl",
help=optparse.SUPPRESS_HELP)
# deprecated
parser.add_option('--openssl-libpath',
action='store',
dest='shared_openssl_libpath',
parser.add_option("--openssl-includes",
action="store",
dest="shared_openssl_includes",
help=optparse.SUPPRESS_HELP)
# deprecated
parser.add_option('--openssl-use-sys',
action='store_true',
dest='shared_openssl',
parser.add_option("--openssl-libpath",
action="store",
dest="shared_openssl_libpath",
help=optparse.SUPPRESS_HELP)
parser.add_option('--shared-cares',
action='store_true',
dest='shared_cares',
help='link to a shared cares DLL instead of static linking')
parser.add_option('--shared-cares-includes',
action='store',
dest='shared_cares_includes',
help='directory containing cares header files')
parser.add_option('--shared-cares-libname',
action='store',
dest='shared_cares_libname',
help='alternative lib name to link to (default: \'cares\')')
parser.add_option('--shared-cares-libpath',
action='store',
dest='shared_cares_libpath',
help='a directory to search for the shared cares DLL')
parser.add_option('--shared-http-parser',
action='store_true',
dest='shared_http_parser',
help='link to a shared http_parser DLL instead of static linking')
parser.add_option('--shared-http-parser-includes',
action='store',
dest='shared_http_parser_includes',
help='directory containing http_parser header files')
parser.add_option('--shared-http-parser-libname',
action='store',
dest='shared_http_parser_libname',
help='alternative lib name to link to (default: \'http_parser\')')
parser.add_option('--shared-http-parser-libpath',
action='store',
dest='shared_http_parser_libpath',
help='a directory to search for the shared http_parser DLL')
parser.add_option('--shared-libuv',
action='store_true',
dest='shared_libuv',
help='link to a shared libuv DLL instead of static linking')
parser.add_option('--shared-libuv-includes',
action='store',
dest='shared_libuv_includes',
help='directory containing libuv header files')
parser.add_option('--shared-libuv-libname',
action='store',
dest='shared_libuv_libname',
help='alternative lib name to link to (default: \'uv\')')
parser.add_option('--shared-libuv-libpath',
action='store',
dest='shared_libuv_libpath',
help='a directory to search for the shared libuv DLL')
parser.add_option('--shared-openssl',
action='store_true',
dest='shared_openssl',
help='link to a shared OpenSSl DLL instead of static linking')
parser.add_option('--shared-openssl-includes',
action='store',
dest='shared_openssl_includes',
help='directory containing OpenSSL header files')
parser.add_option('--shared-openssl-libname',
action='store',
dest='shared_openssl_libname',
help='alternative lib name to link to (default: \'crypto,ssl\')')
parser.add_option('--shared-openssl-libpath',
action='store',
dest='shared_openssl_libpath',
help='a directory to search for the shared OpenSSL DLLs')
parser.add_option('--shared-v8',
action='store_true',
dest='shared_v8',
help='link to a shared V8 DLL instead of static linking')
parser.add_option('--shared-v8-includes',
action='store',
dest='shared_v8_includes',
help='directory containing V8 header files')
parser.add_option('--shared-v8-libname',
action='store',
dest='shared_v8_libname',
help='alternative lib name to link to (default: \'v8\')')
parser.add_option('--shared-v8-libpath',
action='store',
dest='shared_v8_libpath',
help='a directory to search for the shared V8 DLL')
parser.add_option('--shared-zlib',
action='store_true',
dest='shared_zlib',
help='link to a shared zlib DLL instead of static linking')
parser.add_option('--shared-zlib-includes',
action='store',
dest='shared_zlib_includes',
help='directory containing zlib header files')
parser.add_option('--shared-zlib-libname',
action='store',
dest='shared_zlib_libname',
help='alternative lib name to link to (default: \'z\')')
parser.add_option('--shared-zlib-libpath',
action='store',
dest='shared_zlib_libpath',
help='a directory to search for the shared zlib DLL')
# TODO document when we've decided on what the tracing API and its options will
# look like
parser.add_option('--systemtap-includes',
action='store',
dest='systemtap_includes',
parser.add_option("--systemtap-includes",
action="store",
dest="systemtap_includes",
help=optparse.SUPPRESS_HELP)
parser.add_option('--tag',
action='store',
dest='tag',
help='custom build tag')
parser.add_option("--no-ssl2",
action="store_true",
dest="no_ssl2",
help="Disable OpenSSL v2")
parser.add_option('--with-arm-float-abi',
action='store',
dest='arm_float_abi',
help='specifies which floating-point ABI to use. Valid values are: '
'soft, softfp, hard')
parser.add_option("--shared-zlib",
action="store_true",
dest="shared_zlib",
help="Link to a shared zlib DLL instead of static linking")
parser.add_option('--with-dtrace',
action='store_true',
dest='with_dtrace',
help='build with DTrace (default is true on sunos)')
parser.add_option("--shared-zlib-includes",
action="store",
dest="shared_zlib_includes",
help="Directory containing zlib header files")
parser.add_option('--with-etw',
action='store_true',
dest='with_etw',
help='build with ETW (default is true on Windows)')
parser.add_option("--shared-zlib-libpath",
action="store",
dest="shared_zlib_libpath",
help="A directory to search for the shared zlib DLL")
parser.add_option('--with-icu-path',
action='store',
dest='with_icu_path',
help='Path to icu.gyp (ICU i18n, Chromium version only.)')
parser.add_option("--shared-zlib-libname",
action="store",
dest="shared_zlib_libname",
help="Alternative lib name to link to (default: 'z')")
parser.add_option('--with-perfctr',
action='store_true',
dest='with_perfctr',
help='build with performance counters (default is true on Windows)')
parser.add_option("--shared-http-parser",
action="store_true",
dest="shared_http_parser",
help="Link to a shared http_parser DLL instead of static linking")
parser.add_option('--with-sslv2',
action='store_true',
dest='with_sslv2',
help='enable SSL v2')
parser.add_option("--shared-http-parser-includes",
action="store",
dest="shared_http_parser_includes",
help="Directory containing http_parser header files")
parser.add_option('--without-dtrace',
action='store_true',
dest='without_dtrace',
help='build without DTrace')
parser.add_option("--shared-http-parser-libpath",
action="store",
dest="shared_http_parser_libpath",
help="A directory to search for the shared http_parser DLL")
parser.add_option('--without-etw',
action='store_true',
dest='without_etw',
help='build without ETW')
parser.add_option("--shared-http-parser-libname",
action="store",
dest="shared_http_parser_libname",
help="Alternative lib name to link to (default: 'http_parser')")
parser.add_option('--without-npm',
action='store_true',
dest='without_npm',
help='don\'t install the bundled npm package manager')
parser.add_option("--shared-cares",
action="store_true",
dest="shared_cares",
help="Link to a shared cares DLL instead of static linking")
parser.add_option('--without-perfctr',
action='store_true',
dest='without_perfctr',
help='build without performance counters')
parser.add_option("--shared-cares-includes",
action="store",
dest="shared_cares_includes",
help="Directory containing cares header files")
parser.add_option('--without-snapshot',
action='store_true',
dest='without_snapshot',
help='build without snapshotting V8 libraries. You might want to set'
' this for cross-compiling. [Default: False]')
parser.add_option("--shared-cares-libpath",
action="store",
dest="shared_cares_libpath",
help="A directory to search for the shared cares DLL")
parser.add_option('--without-ssl',
action='store_true',
dest='without_ssl',
help='build without SSL')
parser.add_option("--shared-cares-libname",
action="store",
dest="shared_cares_libname",
help="Alternative lib name to link to (default: 'cares')")
parser.add_option('--xcode',
action='store_true',
dest='use_xcode',
help='generate build files for use with xcode')
parser.add_option("--shared-libuv",
action="store_true",
dest="shared_libuv",
help="Link to a shared libuv DLL instead of static linking")
parser.add_option("--shared-libuv-includes",
action="store",
dest="shared_libuv_includes",
help="Directory containing libuv header files")
parser.add_option("--shared-libuv-libpath",
action="store",
dest="shared_libuv_libpath",
help="A directory to search for the shared libuv DLL")
parser.add_option("--shared-libuv-libname",
action="store",
dest="shared_libuv_libname",
help="Alternative lib name to link to (default: 'uv')")
parser.add_option("--with-dtrace",
action="store_true",
dest="with_dtrace",
help="Build with DTrace (default is true on sunos)")
parser.add_option("--without-dtrace",
action="store_true",
dest="without_dtrace",
help="Build without DTrace")
parser.add_option("--with-etw",
action="store_true",
dest="with_etw",
help="Build with ETW (default is true on Windows)")
parser.add_option("--without-etw",
action="store_true",
dest="without_etw",
help="Build without ETW")
parser.add_option("--with-perfctr",
action="store_true",
dest="with_perfctr",
help="Build with performance counters (default is true on Windows)")
parser.add_option("--without-perfctr",
action="store_true",
dest="without_perfctr",
help="Build without performance counters")
# CHECKME does this still work with recent releases of V8?
parser.add_option("--gdb",
action="store_true",
dest="gdb",
help="add gdb support")
parser.add_option("--dest-cpu",
action="store",
dest="dest_cpu",
help="CPU architecture to build for. Valid values are: arm, ia32, x64")
parser.add_option("--dest-os",
action="store",
dest="dest_os",
help="Operating system to build for. Valid values are: "
"win, mac, solaris, freebsd, openbsd, linux, android")
parser.add_option("--no-ifaddrs",
action="store_true",
dest="no_ifaddrs",
help="Use on deprecated SunOS systems that do not support ifaddrs.h")
parser.add_option("--with-arm-float-abi",
action="store",
dest="arm_float_abi",
help="Specifies which floating-point ABI to use. Valid values are: "
"soft, softfp, hard")
parser.add_option("--ninja",
action="store_true",
dest="use_ninja",
help="Generate files for the ninja build system")
parser.add_option("--xcode",
action="store_true",
dest="use_xcode",
help="Generate build files for use with xcode")
parser.add_option("--tag",
action="store",
dest="tag",
help="Custom build tag")
(options, args) = parser.parse_args()
@@ -411,15 +405,13 @@ def host_arch_win():
def compiler_version():
try:
proc = subprocess.Popen(shlex.split(CC) + ['--version'],
stdout=subprocess.PIPE)
proc = subprocess.Popen(shlex.split(CC) + ['--version'], stdout=subprocess.PIPE)
except WindowsError:
return (0, False)
is_clang = 'clang' in proc.communicate()[0].split('\n')[0]
proc = subprocess.Popen(shlex.split(CC) + ['-dumpversion'],
stdout=subprocess.PIPE)
proc = subprocess.Popen(shlex.split(CC) + ['-dumpversion'], stdout=subprocess.PIPE)
version = tuple(map(int, proc.communicate()[0].split('.')))
return (version, is_clang)
@@ -428,10 +420,8 @@ def compiler_version():
def configure_arm(o):
if options.arm_float_abi:
arm_float_abi = options.arm_float_abi
elif is_arm_hard_float_abi():
arm_float_abi = 'hard'
else:
arm_float_abi = 'default'
arm_float_abi = 'hard' if is_arm_hard_float_abi() else 'default'
o['variables']['armv7'] = int(is_arch_armv7())
o['variables']['arm_fpu'] = 'vfpv3' # V8 3.18 no longer supports VFP2.
o['variables']['arm_neon'] = int(is_arm_neon())
@@ -441,7 +431,9 @@ def configure_arm(o):
def configure_node(o):
if options.dest_os == 'android':
o['variables']['OS'] = 'android'
o['variables']['OS'] = "android"
o['variables']['v8_enable_gdbjit'] = 1 if options.gdb else 0
o['variables']['v8_no_strict_aliasing'] = 1 # work around compiler bugs
o['variables']['node_prefix'] = os.path.expanduser(options.prefix or '')
o['variables']['node_install_npm'] = b(not options.without_npm)
o['default_configuration'] = 'Debug' if options.debug else 'Release'
@@ -464,35 +456,31 @@ def configure_node(o):
if not is_clang and cc_version < (4,0,0):
o['variables']['visibility'] = ''
if flavor in ('solaris', 'mac', 'linux'):
use_dtrace = not options.without_dtrace
# Don't enable by default on linux, it needs the sdt-devel package.
if flavor == 'linux':
if options.systemtap_includes:
o['include_dirs'] += [options.systemtap_includes]
use_dtrace = options.with_dtrace
o['variables']['node_use_dtrace'] = b(use_dtrace)
o['variables']['uv_use_dtrace'] = b(use_dtrace)
# By default, enable DTrace on SunOS systems. Don't allow it on other
# systems, since it won't work. (The MacOS build process is different than
# SunOS, and we haven't implemented it.)
if flavor in ('solaris', 'mac'):
o['variables']['node_use_dtrace'] = b(not options.without_dtrace)
o['variables']['uv_use_dtrace'] = o['variables']['node_use_dtrace']
o['variables']['uv_parent_path'] = '/deps/uv/'
elif flavor == 'linux':
o['variables']['node_use_dtrace'] = 'false'
o['variables']['node_use_systemtap'] = b(options.with_dtrace)
if options.systemtap_includes:
o['include_dirs'] += [options.systemtap_includes]
elif options.with_dtrace:
raise Exception(
'DTrace is currently only supported on SunOS, MacOS or Linux systems.')
else:
o['variables']['node_use_dtrace'] = 'false'
# if we're on illumos based systems wrap the helper library into the
# executable
if flavor == 'solaris':
o['variables']['node_use_mdb'] = 'true'
else:
o['variables']['node_use_mdb'] = 'false'
o['variables']['node_use_systemtap'] = 'false'
if options.no_ifaddrs:
o['defines'] += ['SUNOS_NO_IFADDRS']
# By default, enable ETW on Windows.
if flavor == 'win':
o['variables']['node_use_etw'] = b(not options.without_etw)
o['variables']['node_use_etw'] = b(not options.without_etw);
elif options.with_etw:
raise Exception('ETW is only supported on Windows.')
else:
@@ -500,7 +488,7 @@ def configure_node(o):
# By default, enable Performance counters on Windows.
if flavor == 'win':
o['variables']['node_use_perfctr'] = b(not options.without_perfctr)
o['variables']['node_use_perfctr'] = b(not options.without_perfctr);
elif options.with_perfctr:
raise Exception('Performance counter is only supported on Windows.')
else:
@@ -569,12 +557,8 @@ def configure_libuv(o):
def configure_v8(o):
o['variables']['node_shared_v8'] = b(options.shared_v8)
o['variables']['v8_enable_gdbjit'] = 1 if options.gdb else 0
o['variables']['v8_no_strict_aliasing'] = 1 # Work around compiler bugs.
o['variables']['v8_optimized_debug'] = 0 # Compile with -O0 in debug builds.
o['variables']['v8_random_seed'] = 0 # Use a random seed for hash tables.
o['variables']['v8_use_snapshot'] = b(not options.without_snapshot)
o['variables']['node_shared_v8'] = b(options.shared_v8)
# assume shared_v8 if one of these is set?
if options.shared_v8_libpath:
@@ -594,9 +578,7 @@ def configure_openssl(o):
if options.without_ssl:
return
# OpenSSL uses `#ifndef OPENSSL_NO_SSL2` checks so only define the
# macro when we want to _disable_ SSL2.
if not options.with_sslv2:
if options.no_ssl2:
o['defines'] += ['OPENSSL_NO_SSL2=1']
if options.shared_openssl:
@@ -621,31 +603,22 @@ def configure_winsdk(o):
if flavor != 'win':
return
winsdk_dir = os.environ.get('WindowsSdkDir')
winsdk_dir = os.environ.get("WindowsSdkDir")
if winsdk_dir and os.path.isfile(winsdk_dir + '\\bin\\ctrpp.exe'):
print('Found ctrpp in WinSDK--will build generated files '
'into tools/msvs/genfiles.')
print "Found ctrpp in WinSDK--will build generated files into tools/msvs/genfiles."
o['variables']['node_has_winsdk'] = 'true'
return
print('ctrpp not found in WinSDK path--using pre-gen files '
'from tools/msvs/genfiles.')
def configure_icu(o):
have_icu_path = bool(options.with_icu_path)
o['variables']['v8_enable_i18n_support'] = int(have_icu_path)
if have_icu_path:
o['variables']['icu_gyp_path'] = options.with_icu_path
print "ctrpp not found in WinSDK path--using pre-gen files from tools/msvs/genfiles."
# determine the "flavor" (operating system) we're building for,
# leveraging gyp's GetFlavor function
flavor_params = {}
flavor_params = {};
if (options.dest_os):
flavor_params['flavor'] = options.dest_os
flavor = GetFlavor(flavor_params)
flavor_params['flavor'] = options.dest_os;
flavor = GetFlavor(flavor_params);
output = {
'variables': { 'python': sys.executable },
@@ -663,7 +636,7 @@ configure_libuv(output)
configure_v8(output)
configure_openssl(output)
configure_winsdk(output)
configure_icu(output)
# variables should be a root level element,
# move everything else to target_defaults
@@ -677,12 +650,12 @@ pprint.pprint(output, indent=2)
def write(filename, data):
filename = os.path.join(root_dir, filename)
print 'creating ', filename
print "creating ", filename
f = open(filename, 'w+')
f.write(data)
write('config.gypi', '# Do not edit. Generated by the configure script.\n' +
pprint.pformat(output, indent=2) + '\n')
write('config.gypi', "# Do not edit. Generated by the configure script.\n" +
pprint.pformat(output, indent=2) + "\n")
config = {
'BUILDTYPE': 'Debug' if options.debug else 'Release',
@@ -699,17 +672,13 @@ config = '\n'.join(map('='.join, config.iteritems())) + '\n'
write('config.mk',
'# Do not edit. Generated by the configure script.\n' + config)
gyp_args = [sys.executable, 'tools/gyp_node.py', '--no-parallel']
if options.use_ninja:
gyp_args += ['-f', 'ninja-' + flavor]
gyp_args = ['-f', 'ninja-' + flavor]
elif options.use_xcode:
gyp_args += ['-f', 'xcode']
gyp_args = ['-f', 'xcode']
elif flavor == 'win':
gyp_args += ['-f', 'msvs', '-G', 'msvs_version=auto']
gyp_args = ['-f', 'msvs', '-G', 'msvs_version=auto']
else:
gyp_args += ['-f', 'make-' + flavor]
gyp_args = ['-f', 'make-' + flavor]
gyp_args += args
subprocess.call(gyp_args)
subprocess.call([sys.executable, 'tools/gyp_node'] + gyp_args)

View File

@@ -1,4 +1,3 @@
/out/
core
tags
*.o
@@ -6,9 +5,7 @@ test
test_g
test_fast
url_parser
parsertrace
parsertrace_g
*.mk
*.Makefile
*.so.*
*.so
*.a

View File

@@ -3,5 +3,3 @@
Ryan Dahl <ry@tinyclouds.org>
Salman Haq <salman.haq@asti-usa.com>
Simon Zimmermann <simonz05@gmail.com>
Thomas LE ROUX <thomas@november-eleven.fr> LE ROUX Thomas <thomas@procheo.fr>
Thomas LE ROUX <thomas@november-eleven.fr> Thomas LE ROUX <thomas@procheo.fr>

View File

@@ -1,13 +0,0 @@
language: c
compiler:
- clang
- gcc
script:
- "make"
notifications:
email: false
irc:
- "irc.freenode.net#libuv"

View File

@@ -28,20 +28,10 @@ Andre Caron <andre.l.caron@gmail.com>
Ivo Raisr <ivosh@ivosh.net>
James McLaughlin <jamie@lacewing-project.org>
David Gwynne <loki@animata.net>
Thomas LE ROUX <thomas@november-eleven.fr>
LE ROUX Thomas <thomas@procheo.fr>
Randy Rizun <rrizun@ortivawireless.com>
Andre Louis Caron <andre.louis.caron@usherbrooke.ca>
Simon Zimmermann <simonz05@gmail.com>
Erik Dubbelboer <erik@dubbelboer.com>
Martell Malone <martellmalone@gmail.com>
Bertrand Paquet <bpaquet@octo.com>
BogDan Vatra <bogdan@kde.org>
Peter Faiman <peter@thepicard.org>
Corey Richardson <corey@octayn.net>
Tóth Tamás <tomika_nospam@freemail.hu>
Patrik Stutz <patrik.stutz@gmail.com>
Cam Swords <cam.swords@gmail.com>
Chris Dickinson <christopher.s.dickinson@gmail.com>
Uli Köhler <ukoehler@btronik.de>
Charlie Somerville <charlie@charliesomerville.com>
Fedor Indutny <fedor.indutny@gmail.com>

View File

@@ -1,33 +1,10 @@
# Copyright Joyent, Inc. and other Node contributors. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
PLATFORM ?= $(shell sh -c 'uname -s | tr "[A-Z]" "[a-z]"')
SONAME ?= libhttp_parser.so.2.2
CC?=gcc
AR?=ar
CPPFLAGS += -I.
CPPFLAGS_DEBUG = $(CPPFLAGS) -DHTTP_PARSER_STRICT=1
CPPFLAGS_DEBUG = $(CPPFLAGS) -DHTTP_PARSER_STRICT=1 -DHTTP_PARSER_DEBUG=1
CPPFLAGS_DEBUG += $(CPPFLAGS_DEBUG_EXTRA)
CPPFLAGS_FAST = $(CPPFLAGS) -DHTTP_PARSER_STRICT=0
CPPFLAGS_FAST = $(CPPFLAGS) -DHTTP_PARSER_STRICT=0 -DHTTP_PARSER_DEBUG=0
CPPFLAGS_FAST += $(CPPFLAGS_FAST_EXTRA)
CFLAGS += -Wall -Wextra -Werror
@@ -35,13 +12,6 @@ CFLAGS_DEBUG = $(CFLAGS) -O0 -g $(CFLAGS_DEBUG_EXTRA)
CFLAGS_FAST = $(CFLAGS) -O3 $(CFLAGS_FAST_EXTRA)
CFLAGS_LIB = $(CFLAGS_FAST) -fPIC
LDFLAGS_LIB = $(LDFLAGS) -shared
ifneq (darwin,$(PLATFORM))
# TODO(bnoordhuis) The native SunOS linker expects -h rather than -soname...
LDFLAGS_LIB += -Wl,-soname=$(SONAME)
endif
test: test_g test_fast
./test_g
./test_fast
@@ -61,6 +31,12 @@ test_fast: http_parser.o test.o http_parser.h
test.o: test.c http_parser.h Makefile
$(CC) $(CPPFLAGS_FAST) $(CFLAGS_FAST) -c test.c -o $@
url_parser: http_parser_g.o url_parser.o
$(CC) $(CFLAGS_DEBUG) $(LDFLAGS) http_parser_g.o url_parser.o -o $@
url_parser.o: url_parser.c http_parser.h Makefile
$(CC) $(CPPFLAGS_DEBUG) $(CFLAGS_DEBUG) -c url_parser.c -o $@
http_parser.o: http_parser.c http_parser.h Makefile
$(CC) $(CPPFLAGS_FAST) $(CFLAGS_FAST) -c http_parser.c
@@ -74,32 +50,15 @@ libhttp_parser.o: http_parser.c http_parser.h Makefile
$(CC) $(CPPFLAGS_FAST) $(CFLAGS_LIB) -c http_parser.c -o libhttp_parser.o
library: libhttp_parser.o
$(CC) $(LDFLAGS_LIB) -o $(SONAME) $<
$(CC) -shared -o libhttp_parser.so libhttp_parser.o
package: http_parser.o
$(AR) rcs libhttp_parser.a http_parser.o
url_parser: http_parser.o contrib/url_parser.c
$(CC) $(CPPFLAGS_FAST) $(CFLAGS_FAST) $^ -o $@
url_parser_g: http_parser_g.o contrib/url_parser.c
$(CC) $(CPPFLAGS_DEBUG) $(CFLAGS_DEBUG) $^ -o $@
parsertrace: http_parser.o contrib/parsertrace.c
$(CC) $(CPPFLAGS_FAST) $(CFLAGS_FAST) $^ -o parsertrace
parsertrace_g: http_parser_g.o contrib/parsertrace.c
$(CC) $(CPPFLAGS_DEBUG) $(CFLAGS_DEBUG) $^ -o parsertrace_g
tags: http_parser.c http_parser.h test.c
ctags $^
clean:
rm -f *.o *.a tags test test_fast test_g \
http_parser.tar libhttp_parser.so.* \
url_parser url_parser_g parsertrace parsertrace_g
contrib/url_parser.c: http_parser.h
contrib/parsertrace.c: http_parser.h
rm -f *.o *.a test test_fast test_g url_parser http_parser.tar tags libhttp_parser.so libhttp_parser.o
.PHONY: clean package test-run test-run-timed test-valgrind

View File

@@ -1,8 +1,6 @@
HTTP Parser
===========
[![Build Status](https://travis-ci.org/joyent/http-parser.png?branch=master)](https://travis-ci.org/joyent/http-parser)
This is a parser for HTTP messages written in C. It parses both requests and
responses. The parser is designed to be used in performance HTTP
applications. It does not make any syscalls nor allocations, it does not
@@ -36,41 +34,38 @@ Usage
One `http_parser` object is used per TCP connection. Initialize the struct
using `http_parser_init()` and set the callbacks. That might look something
like this for a request parser:
```c
http_parser_settings settings;
settings.on_url = my_url_callback;
settings.on_header_field = my_header_field_callback;
/* ... */
http_parser *parser = malloc(sizeof(http_parser));
http_parser_init(parser, HTTP_REQUEST);
parser->data = my_socket;
```
http_parser_settings settings;
settings.on_path = my_path_callback;
settings.on_header_field = my_header_field_callback;
/* ... */
http_parser *parser = malloc(sizeof(http_parser));
http_parser_init(parser, HTTP_REQUEST);
parser->data = my_socket;
When data is received on the socket execute the parser and check for errors.
```c
size_t len = 80*1024, nparsed;
char buf[len];
ssize_t recved;
size_t len = 80*1024, nparsed;
char buf[len];
ssize_t recved;
recved = recv(fd, buf, len, 0);
recved = recv(fd, buf, len, 0);
if (recved < 0) {
/* Handle error. */
}
if (recved < 0) {
/* Handle error. */
}
/* Start up / continue the parser.
* Note we pass recved==0 to signal that EOF has been recieved.
*/
nparsed = http_parser_execute(parser, &settings, buf, recved);
/* Start up / continue the parser.
* Note we pass recved==0 to signal that EOF has been recieved.
*/
nparsed = http_parser_execute(parser, &settings, buf, recved);
if (parser->upgrade) {
/* handle new protocol */
} else if (nparsed != recved) {
/* Handle error. Usually just close the connection. */
}
```
if (parser->upgrade) {
/* handle new protocol */
} else if (nparsed != recved) {
/* Handle error. Usually just close the connection. */
}
HTTP needs to know where the end of the stream is. For example, sometimes
servers send responses without Content-Length and expect the client to

View File

@@ -1,156 +0,0 @@
/* Based on src/http/ngx_http_parse.c from NGINX copyright Igor Sysoev
*
* Additional changes are licensed under the same terms as NGINX and
* copyright Joyent, Inc. and other Node contributors. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
/* Dump what the parser finds to stdout as it happen */
#include "http_parser.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int on_message_begin(http_parser* _) {
(void)_;
printf("\n***MESSAGE BEGIN***\n\n");
return 0;
}
int on_headers_complete(http_parser* _) {
(void)_;
printf("\n***HEADERS COMPLETE***\n\n");
return 0;
}
int on_message_complete(http_parser* _) {
(void)_;
printf("\n***MESSAGE COMPLETE***\n\n");
return 0;
}
int on_url(http_parser* _, const char* at, size_t length) {
(void)_;
printf("Url: %.*s\n", (int)length, at);
return 0;
}
int on_header_field(http_parser* _, const char* at, size_t length) {
(void)_;
printf("Header field: %.*s\n", (int)length, at);
return 0;
}
int on_header_value(http_parser* _, const char* at, size_t length) {
(void)_;
printf("Header value: %.*s\n", (int)length, at);
return 0;
}
int on_body(http_parser* _, const char* at, size_t length) {
(void)_;
printf("Body: %.*s\n", (int)length, at);
return 0;
}
void usage(const char* name) {
fprintf(stderr,
"Usage: %s $type $filename\n"
" type: -x, where x is one of {r,b,q}\n"
" parses file as a Response, reQuest, or Both\n",
name);
exit(EXIT_FAILURE);
}
int main(int argc, char* argv[]) {
enum http_parser_type file_type;
if (argc != 3) {
usage(argv[0]);
}
char* type = argv[1];
if (type[0] != '-') {
usage(argv[0]);
}
switch (type[1]) {
/* in the case of "-", type[1] will be NUL */
case 'r':
file_type = HTTP_RESPONSE;
break;
case 'q':
file_type = HTTP_REQUEST;
break;
case 'b':
file_type = HTTP_BOTH;
break;
default:
usage(argv[0]);
}
char* filename = argv[2];
FILE* file = fopen(filename, "r");
if (file == NULL) {
perror("fopen");
return EXIT_FAILURE;
}
fseek(file, 0, SEEK_END);
long file_length = ftell(file);
if (file_length == -1) {
perror("ftell");
return EXIT_FAILURE;
}
fseek(file, 0, SEEK_SET);
char* data = malloc(file_length);
if (fread(data, 1, file_length, file) != (size_t)file_length) {
fprintf(stderr, "couldn't read entire file\n");
free(data);
return EXIT_FAILURE;
}
http_parser_settings settings;
memset(&settings, 0, sizeof(settings));
settings.on_message_begin = on_message_begin;
settings.on_url = on_url;
settings.on_header_field = on_header_field;
settings.on_header_value = on_header_value;
settings.on_headers_complete = on_headers_complete;
settings.on_body = on_body;
settings.on_message_complete = on_message_complete;
http_parser parser;
http_parser_init(&parser, file_type);
size_t nparsed = http_parser_execute(&parser, &settings, data, file_length);
free(data);
if (nparsed != (size_t)file_length) {
fprintf(stderr,
"Error: %s (%s)\n",
http_errno_description(HTTP_PARSER_ERRNO(&parser)),
http_errno_name(HTTP_PARSER_ERRNO(&parser)));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}

View File

@@ -51,10 +51,18 @@
# define ELEM_AT(a, i, v) ((unsigned int) (i) < ARRAY_SIZE(a) ? (a)[(i)] : (v))
#endif
#if HTTP_PARSER_DEBUG
#define SET_ERRNO(e) \
do { \
parser->http_errno = (e); \
parser->error_lineno = __LINE__; \
} while (0)
#else
#define SET_ERRNO(e) \
do { \
parser->http_errno = (e); \
} while(0)
#endif
/* Run the notify callback FOR, returning ER if it fails */
@@ -248,7 +256,6 @@ enum state
, s_res_http_minor
, s_res_first_status_code
, s_res_status_code
, s_res_status_start
, s_res_status
, s_res_line_almost_done
@@ -582,7 +589,6 @@ size_t http_parser_execute (http_parser *parser,
const char *header_value_mark = 0;
const char *url_mark = 0;
const char *body_mark = 0;
const char *status_mark = 0;
/* We're in an error state. Don't bother doing anything. */
if (HTTP_PARSER_ERRNO(parser) != HPE_OK) {
@@ -629,9 +635,6 @@ size_t http_parser_execute (http_parser *parser,
case s_req_fragment:
url_mark = data;
break;
case s_res_status:
status_mark = data;
break;
}
for (p=data; p != data + len; p++) {
@@ -639,17 +642,7 @@ size_t http_parser_execute (http_parser *parser,
if (PARSING_HEADER(parser->state)) {
++parser->nread;
/* Don't allow the total size of the HTTP headers (including the status
* line) to exceed HTTP_MAX_HEADER_SIZE. This check is here to protect
* embedders against denial-of-service attacks where the attacker feeds
* us a never-ending header that the embedder keeps buffering.
*
* This check is arguably the responsibility of embedders but we're doing
* it on the embedder's behalf because most won't bother and this way we
* make the web a little safer. HTTP_MAX_HEADER_SIZE is still far bigger
* than any reasonable request or response so this should never affect
* day-to-day operation.
*/
/* Buffer overflow attack */
if (parser->nread > HTTP_MAX_HEADER_SIZE) {
SET_ERRNO(HPE_HEADER_OVERFLOW);
goto error;
@@ -838,7 +831,7 @@ size_t http_parser_execute (http_parser *parser,
if (!IS_NUM(ch)) {
switch (ch) {
case ' ':
parser->state = s_res_status_start;
parser->state = s_res_status;
break;
case CR:
parser->state = s_res_line_almost_done;
@@ -864,37 +857,18 @@ size_t http_parser_execute (http_parser *parser,
break;
}
case s_res_status_start:
{
if (ch == CR) {
parser->state = s_res_line_almost_done;
break;
}
if (ch == LF) {
parser->state = s_header_field_start;
break;
}
MARK(status);
parser->state = s_res_status;
parser->index = 0;
break;
}
case s_res_status:
/* the human readable status. e.g. "NOT FOUND"
* we are not humans so just ignore this */
if (ch == CR) {
parser->state = s_res_line_almost_done;
CALLBACK_DATA(status);
break;
}
if (ch == LF) {
parser->state = s_header_field_start;
CALLBACK_DATA(status);
break;
}
break;
case s_res_line_almost_done:
@@ -962,7 +936,6 @@ size_t http_parser_execute (http_parser *parser,
} else if (parser->index == 2 && ch == 'P') {
parser->method = HTTP_COPY;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->method == HTTP_MKCOL) {
@@ -975,14 +948,12 @@ size_t http_parser_execute (http_parser *parser,
} else if (parser->index == 2 && ch == 'A') {
parser->method = HTTP_MKACTIVITY;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->method == HTTP_SUBSCRIBE) {
if (parser->index == 1 && ch == 'E') {
parser->method = HTTP_SEARCH;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->index == 1 && parser->method == HTTP_POST) {
@@ -993,27 +964,13 @@ size_t http_parser_execute (http_parser *parser,
} else if (ch == 'A') {
parser->method = HTTP_PATCH;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->index == 2) {
if (parser->method == HTTP_PUT) {
if (ch == 'R') {
parser->method = HTTP_PURGE;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
if (ch == 'R') parser->method = HTTP_PURGE;
} else if (parser->method == HTTP_UNLOCK) {
if (ch == 'S') {
parser->method = HTTP_UNSUBSCRIBE;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
if (ch == 'S') parser->method = HTTP_UNSUBSCRIBE;
}
} else if (parser->index == 4 && parser->method == HTTP_PROPFIND && ch == 'P') {
parser->method = HTTP_PROPPATCH;
@@ -1877,14 +1834,12 @@ size_t http_parser_execute (http_parser *parser,
assert(((header_field_mark ? 1 : 0) +
(header_value_mark ? 1 : 0) +
(url_mark ? 1 : 0) +
(body_mark ? 1 : 0) +
(status_mark ? 1 : 0)) <= 1);
(body_mark ? 1 : 0)) <= 1);
CALLBACK_DATA_NOADVANCE(header_field);
CALLBACK_DATA_NOADVANCE(header_value);
CALLBACK_DATA_NOADVANCE(url);
CALLBACK_DATA_NOADVANCE(body);
CALLBACK_DATA_NOADVANCE(status);
return len;
@@ -2015,7 +1970,7 @@ http_parse_host_char(enum http_host_state s, const char ch) {
/* FALLTHROUGH */
case s_http_host_v6_start:
if (IS_HEX(ch) || ch == ':' || ch == '.') {
if (IS_HEX(ch) || ch == ':') {
return s_http_host_v6;
}
@@ -2220,15 +2175,3 @@ http_parser_pause(http_parser *parser, int paused) {
assert(0 && "Attempting to pause parser in error state");
}
}
int
http_body_is_final(const struct http_parser *parser) {
return parser->state == s_message_done;
}
unsigned long
http_parser_version(void) {
return HTTP_PARSER_VERSION_MAJOR * 0x10000 |
HTTP_PARSER_VERSION_MINOR * 0x00100 |
HTTP_PARSER_VERSION_PATCH * 0x00001;
}

View File

@@ -12,7 +12,6 @@
# RuntimeLibrary MUST MATCH across the entire project
'Debug': {
'defines': [ 'DEBUG', '_DEBUG' ],
'cflags': [ '-Wall', '-Wextra', '-O0', '-g', '-ftrapv' ],
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': 1, # static debug
@@ -21,7 +20,6 @@
},
'Release': {
'defines': [ 'NDEBUG' ],
'cflags': [ '-Wall', '-Wextra', '-O3' ],
'msvs_settings': {
'VCCLCompilerTool': {
'RuntimeLibrary': 0, # static release
@@ -53,7 +51,6 @@
'type': 'static_library',
'include_dirs': [ '.' ],
'direct_dependent_settings': {
'defines': [ 'HTTP_PARSER_STRICT=0' ],
'include_dirs': [ '.' ],
},
'defines': [ 'HTTP_PARSER_STRICT=0' ],
@@ -72,40 +69,11 @@
},
{
'target_name': 'http_parser_strict',
'type': 'static_library',
'include_dirs': [ '.' ],
'direct_dependent_settings': {
'defines': [ 'HTTP_PARSER_STRICT=1' ],
'include_dirs': [ '.' ],
},
'defines': [ 'HTTP_PARSER_STRICT=1' ],
'sources': [ './http_parser.c', ],
'conditions': [
['OS=="win"', {
'msvs_settings': {
'VCCLCompilerTool': {
# Compile as C++. http_parser.c is actually C99, but C++ is
# close enough in this case.
'CompileAs': 2,
},
},
}]
],
},
{
'target_name': 'test-nonstrict',
'target_name': 'test',
'type': 'executable',
'dependencies': [ 'http_parser' ],
'sources': [ 'test.c' ]
},
{
'target_name': 'test-strict',
'type': 'executable',
'dependencies': [ 'http_parser_strict' ],
'sources': [ 'test.c' ]
}
]
}

View File

@@ -24,15 +24,12 @@
extern "C" {
#endif
/* Also update SONAME in the Makefile whenever you change these. */
#define HTTP_PARSER_VERSION_MAJOR 2
#define HTTP_PARSER_VERSION_MINOR 2
#define HTTP_PARSER_VERSION_PATCH 0
#define HTTP_PARSER_VERSION_MAJOR 1
#define HTTP_PARSER_VERSION_MINOR 0
#include <sys/types.h>
#if defined(_WIN32) && !defined(__MINGW32__) && (!defined(_MSC_VER) || _MSC_VER<1600)
#include <BaseTsd.h>
#include <stddef.h>
typedef __int8 int8_t;
typedef unsigned __int8 uint8_t;
typedef __int16 int16_t;
@@ -41,6 +38,8 @@ typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
typedef SIZE_T size_t;
typedef SSIZE_T ssize_t;
#else
#include <stdint.h>
#endif
@@ -52,6 +51,14 @@ typedef unsigned __int64 uint64_t;
# define HTTP_PARSER_STRICT 1
#endif
/* Compile with -DHTTP_PARSER_DEBUG=1 to add extra debugging information to
* the error reporting facility.
*/
#ifndef HTTP_PARSER_DEBUG
# define HTTP_PARSER_DEBUG 0
#endif
/* Maximium header size allowed */
#define HTTP_MAX_HEADER_SIZE (80*1024)
@@ -70,7 +77,7 @@ typedef struct http_parser_settings http_parser_settings;
* chunked' headers that indicate the presence of a body.
*
* http_data_cb does not return data chunks. It will be call arbitrarally
* many times for each string. E.G. you might get 10 callbacks for "on_url"
* many times for each string. E.G. you might get 10 callbacks for "on_path"
* each providing just a few characters more data.
*/
typedef int (*http_data_cb) (http_parser*, const char *at, size_t length);
@@ -149,7 +156,6 @@ enum flags
XX(CB_headers_complete, "the on_headers_complete callback failed") \
XX(CB_body, "the on_body callback failed") \
XX(CB_message_complete, "the on_message_complete callback failed") \
XX(CB_status, "the on_status callback failed") \
\
/* Parsing-related errors */ \
XX(INVALID_EOF_STATE, "stream ended at an unexpected time") \
@@ -190,14 +196,21 @@ enum http_errno {
/* Get an http_errno value from an http_parser */
#define HTTP_PARSER_ERRNO(p) ((enum http_errno) (p)->http_errno)
/* Get the line number that generated the current error */
#if HTTP_PARSER_DEBUG
#define HTTP_PARSER_ERRNO_LINE(p) ((p)->error_lineno)
#else
#define HTTP_PARSER_ERRNO_LINE(p) 0
#endif
struct http_parser {
/** PRIVATE **/
unsigned int type : 2; /* enum http_parser_type */
unsigned int flags : 6; /* F_* values from 'flags' enum; semi-public */
unsigned int state : 8; /* enum state from http_parser.c */
unsigned int header_state : 8; /* enum header_state from http_parser.c */
unsigned int index : 8; /* index into current matcher */
unsigned char type : 2; /* enum http_parser_type */
unsigned char flags : 6; /* F_* values from 'flags' enum; semi-public */
unsigned char state; /* enum state from http_parser.c */
unsigned char header_state; /* enum header_state from http_parser.c */
unsigned char index; /* index into current matcher */
uint32_t nread; /* # bytes read in various scenarios */
uint64_t content_length; /* # bytes in body (0 if no Content-Length header) */
@@ -205,16 +218,20 @@ struct http_parser {
/** READ-ONLY **/
unsigned short http_major;
unsigned short http_minor;
unsigned int status_code : 16; /* responses only */
unsigned int method : 8; /* requests only */
unsigned int http_errno : 7;
unsigned short status_code; /* responses only */
unsigned char method; /* requests only */
unsigned char http_errno : 7;
/* 1 = Upgrade header was present and the parser has exited because of that.
* 0 = No upgrade header present.
* Should be checked when http_parser_execute() returns in addition to
* error checking.
*/
unsigned int upgrade : 1;
unsigned char upgrade : 1;
#if HTTP_PARSER_DEBUG
uint32_t error_lineno;
#endif
/** PUBLIC **/
void *data; /* A pointer to get hook to the "connection" or "socket" object */
@@ -224,7 +241,6 @@ struct http_parser {
struct http_parser_settings {
http_cb on_message_begin;
http_data_cb on_url;
http_data_cb on_status;
http_data_cb on_header_field;
http_data_cb on_header_value;
http_cb on_headers_complete;
@@ -263,18 +279,6 @@ struct http_parser_url {
};
/* Returns the library version. Bits 16-23 contain the major version number,
* bits 8-15 the minor version number and bits 0-7 the patch level.
* Usage example:
*
* unsigned long version = http_parser_version();
* unsigned major = (version >> 16) & 255;
* unsigned minor = (version >> 8) & 255;
* unsigned patch = version & 255;
* printf("http_parser v%u.%u.%u\n", major, minor, version);
*/
unsigned long http_parser_version(void);
void http_parser_init(http_parser *parser, enum http_parser_type type);
@@ -309,9 +313,6 @@ int http_parser_parse_url(const char *buf, size_t buflen,
/* Pause or un-pause the parser; a nonzero value pauses */
void http_parser_pause(http_parser *parser, int paused);
/* Checks if this is the final chunk of the body. */
int http_body_is_final(const http_parser *parser);
#ifdef __cplusplus
}
#endif

View File

@@ -26,19 +26,13 @@
#include <string.h>
#include <stdarg.h>
#if defined(__APPLE__)
# undef strlcat
# undef strlncpy
# undef strlcpy
#endif /* defined(__APPLE__) */
#undef TRUE
#define TRUE 1
#undef FALSE
#define FALSE 0
#define MAX_HEADERS 13
#define MAX_ELEMENT_SIZE 2048
#define MAX_ELEMENT_SIZE 500
#define MIN(a,b) ((a) < (b) ? (a) : (b))
@@ -50,7 +44,6 @@ struct message {
enum http_parser_type type;
enum http_method method;
int status_code;
char response_status[MAX_ELEMENT_SIZE];
char request_path[MAX_ELEMENT_SIZE];
char request_url[MAX_ELEMENT_SIZE];
char fragment[MAX_ELEMENT_SIZE];
@@ -74,7 +67,6 @@ struct message {
int headers_complete_cb_called;
int message_complete_cb_called;
int message_complete_on_eof;
int body_is_final;
};
static int currently_parsing_eof;
@@ -934,7 +926,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 301
,.response_status= "Moved Permanently"
,.num_headers= 8
,.headers=
{ { "Location", "http://www.google.com/" }
@@ -983,7 +974,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 5
,.headers=
{ { "Date", "Tue, 04 Aug 2009 07:59:32 GMT" }
@@ -1012,7 +1002,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 404
,.response_status= "Not Found"
,.num_headers= 0
,.headers= {}
,.body_size= 0
@@ -1028,7 +1017,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 301
,.response_status= ""
,.num_headers= 0
,.headers= {}
,.body= ""
@@ -1054,7 +1042,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 2
,.headers=
{ {"Content-Type", "text/plain" }
@@ -1080,7 +1067,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 2
,.headers=
{ {"Content-Type", "text/html; charset=utf-8" }
@@ -1104,7 +1090,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 4
,.headers=
{ {"Content-Type", "text/html; charset=UTF-8" }
@@ -1130,7 +1115,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 4
,.headers=
{ {"Server", "DCLK-AdSvr" }
@@ -1163,7 +1147,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 0
,.status_code= 301
,.response_status= "Moved Permanently"
,.num_headers= 9
,.headers=
{ { "Date", "Thu, 03 Jun 2010 09:56:32 GMT" }
@@ -1202,7 +1185,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 11
,.headers=
{ { "Date", "Tue, 28 Sep 2010 01:14:13 GMT" }
@@ -1234,7 +1216,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 500
,.response_status= "Oriëntatieprobleem"
,.num_headers= 3
,.headers=
{ { "Date", "Fri, 5 Nov 2010 23:07:12 GMT+2" }
@@ -1255,7 +1236,6 @@ const struct message responses[] =
,.http_major= 0
,.http_minor= 9
,.status_code= 200
,.response_status= "OK"
,.num_headers= 0
,.headers=
{}
@@ -1278,7 +1258,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 1
,.headers=
{ { "Content-Type", "text/plain" }
@@ -1297,7 +1276,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 0
,.status_code= 200
,.response_status= "OK"
,.num_headers= 1
,.headers=
{ { "Connection", "keep-alive" }
@@ -1317,7 +1295,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 0
,.status_code= 204
,.response_status= "No content"
,.num_headers= 1
,.headers=
{ { "Connection", "keep-alive" }
@@ -1336,7 +1313,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 0
,.headers={}
,.body_size= 0
@@ -1353,7 +1329,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 204
,.response_status= "No content"
,.num_headers= 0
,.headers={}
,.body_size= 0
@@ -1371,7 +1346,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 204
,.response_status= "No content"
,.num_headers= 1
,.headers=
{ { "Connection", "close" }
@@ -1393,7 +1367,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 1
,.headers=
{ { "Transfer-Encoding", "chunked" }
@@ -1422,7 +1395,6 @@ const struct message responses[] =
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= "OK"
,.num_headers= 7
,.headers=
{ { "Server", "Microsoft-IIS/6.0" }
@@ -1437,138 +1409,14 @@ const struct message responses[] =
}
#endif /* !HTTP_PARSER_STRICT */
#define AMAZON_COM 20
, {.name= "amazon.com"
,.type= HTTP_RESPONSE
,.raw= "HTTP/1.1 301 MovedPermanently\r\n"
"Date: Wed, 15 May 2013 17:06:33 GMT\r\n"
"Server: Server\r\n"
"x-amz-id-1: 0GPHKXSJQ826RK7GZEB2\r\n"
"p3p: policyref=\"http://www.amazon.com/w3c/p3p.xml\",CP=\"CAO DSP LAW CUR ADM IVAo IVDo CONo OTPo OUR DELi PUBi OTRi BUS PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA HEA PRE LOC GOV OTC \"\r\n"
"x-amz-id-2: STN69VZxIFSz9YJLbz1GDbxpbjG6Qjmmq5E3DxRhOUw+Et0p4hr7c/Q8qNcx4oAD\r\n"
"Location: http://www.amazon.com/Dan-Brown/e/B000AP9DSU/ref=s9_pop_gw_al1?_encoding=UTF8&refinementId=618073011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=0SHYY5BZXN3KR20BNFAY&pf_rd_t=101&pf_rd_p=1263340922&pf_rd_i=507846\r\n"
"Vary: Accept-Encoding,User-Agent\r\n"
"Content-Type: text/html; charset=ISO-8859-1\r\n"
"Transfer-Encoding: chunked\r\n"
"\r\n"
"1\r\n"
"\n\r\n"
"0\r\n"
"\r\n"
,.should_keep_alive= TRUE
,.message_complete_on_eof= FALSE
,.http_major= 1
,.http_minor= 1
,.status_code= 301
,.response_status= "MovedPermanently"
,.num_headers= 9
,.headers= { { "Date", "Wed, 15 May 2013 17:06:33 GMT" }
, { "Server", "Server" }
, { "x-amz-id-1", "0GPHKXSJQ826RK7GZEB2" }
, { "p3p", "policyref=\"http://www.amazon.com/w3c/p3p.xml\",CP=\"CAO DSP LAW CUR ADM IVAo IVDo CONo OTPo OUR DELi PUBi OTRi BUS PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA HEA PRE LOC GOV OTC \"" }
, { "x-amz-id-2", "STN69VZxIFSz9YJLbz1GDbxpbjG6Qjmmq5E3DxRhOUw+Et0p4hr7c/Q8qNcx4oAD" }
, { "Location", "http://www.amazon.com/Dan-Brown/e/B000AP9DSU/ref=s9_pop_gw_al1?_encoding=UTF8&refinementId=618073011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=0SHYY5BZXN3KR20BNFAY&pf_rd_t=101&pf_rd_p=1263340922&pf_rd_i=507846" }
, { "Vary", "Accept-Encoding,User-Agent" }
, { "Content-Type", "text/html; charset=ISO-8859-1" }
, { "Transfer-Encoding", "chunked" }
}
,.body= "\n"
}
#define EMPTY_REASON_PHRASE_AFTER_SPACE 20
, {.name= "empty reason phrase after space"
,.type= HTTP_RESPONSE
,.raw= "HTTP/1.1 200 \r\n"
"\r\n"
,.should_keep_alive= FALSE
,.message_complete_on_eof= TRUE
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.response_status= ""
,.num_headers= 0
,.headers= {}
,.body= ""
}
, {.name= NULL } /* sentinel */
};
/* strnlen() is a POSIX.2008 addition. Can't rely on it being available so
* define it ourselves.
*/
size_t
strnlen(const char *s, size_t maxlen)
{
const char *p;
p = memchr(s, '\0', maxlen);
if (p == NULL)
return maxlen;
return p - s;
}
size_t
strlncat(char *dst, size_t len, const char *src, size_t n)
{
size_t slen;
size_t dlen;
size_t rlen;
size_t ncpy;
slen = strnlen(src, n);
dlen = strnlen(dst, len);
if (dlen < len) {
rlen = len - dlen;
ncpy = slen < rlen ? slen : (rlen - 1);
memcpy(dst + dlen, src, ncpy);
dst[dlen + ncpy] = '\0';
}
assert(len > slen + dlen);
return slen + dlen;
}
size_t
strlcat(char *dst, const char *src, size_t len)
{
return strlncat(dst, len, src, (size_t) -1);
}
size_t
strlncpy(char *dst, size_t len, const char *src, size_t n)
{
size_t slen;
size_t ncpy;
slen = strnlen(src, n);
if (len > 0) {
ncpy = slen < len ? slen : (len - 1);
memcpy(dst, src, ncpy);
dst[ncpy] = '\0';
}
assert(len > slen);
return slen;
}
size_t
strlcpy(char *dst, const char *src, size_t len)
{
return strlncpy(dst, len, src, (size_t) -1);
}
int
request_url_cb (http_parser *p, const char *buf, size_t len)
{
assert(p == parser);
strlncat(messages[num_messages].request_url,
sizeof(messages[num_messages].request_url),
buf,
len);
strncat(messages[num_messages].request_url, buf, len);
return 0;
}
@@ -1581,10 +1429,7 @@ header_field_cb (http_parser *p, const char *buf, size_t len)
if (m->last_header_element != FIELD)
m->num_headers++;
strlncat(m->headers[m->num_headers-1][0],
sizeof(m->headers[m->num_headers-1][0]),
buf,
len);
strncat(m->headers[m->num_headers-1][0], buf, len);
m->last_header_element = FIELD;
@@ -1597,39 +1442,19 @@ header_value_cb (http_parser *p, const char *buf, size_t len)
assert(p == parser);
struct message *m = &messages[num_messages];
strlncat(m->headers[m->num_headers-1][1],
sizeof(m->headers[m->num_headers-1][1]),
buf,
len);
strncat(m->headers[m->num_headers-1][1], buf, len);
m->last_header_element = VALUE;
return 0;
}
void
check_body_is_final (const http_parser *p)
{
if (messages[num_messages].body_is_final) {
fprintf(stderr, "\n\n *** Error http_body_is_final() should return 1 "
"on last on_body callback call "
"but it doesn't! ***\n\n");
assert(0);
abort();
}
messages[num_messages].body_is_final = http_body_is_final(p);
}
int
body_cb (http_parser *p, const char *buf, size_t len)
{
assert(p == parser);
strlncat(messages[num_messages].body,
sizeof(messages[num_messages].body),
buf,
len);
strncat(messages[num_messages].body, buf, len);
messages[num_messages].body_size += len;
check_body_is_final(p);
// printf("body_cb: '%s'\n", requests[num_messages].body);
return 0;
}
@@ -1640,7 +1465,6 @@ count_body_cb (http_parser *p, const char *buf, size_t len)
assert(p == parser);
assert(buf);
messages[num_messages].body_size += len;
check_body_is_final(p);
return 0;
}
@@ -1677,18 +1501,6 @@ message_complete_cb (http_parser *p)
assert(0);
abort();
}
if (messages[num_messages].body_size &&
http_body_is_final(p) &&
!messages[num_messages].body_is_final)
{
fprintf(stderr, "\n\n *** Error http_body_is_final() should return 1 "
"on last on_body callback call "
"but it doesn't! ***\n\n");
assert(0);
abort();
}
messages[num_messages].message_complete_cb_called = TRUE;
messages[num_messages].message_complete_on_eof = currently_parsing_eof;
@@ -1697,17 +1509,6 @@ message_complete_cb (http_parser *p)
return 0;
}
int
response_status_cb (http_parser *p, const char *buf, size_t len)
{
assert(p == parser);
strlncat(messages[num_messages].response_status,
sizeof(messages[num_messages].response_status),
buf,
len);
return 0;
}
/* These dontcall_* callbacks exist so that we can verify that when we're
* paused, no additional callbacks are invoked */
int
@@ -1768,20 +1569,11 @@ dontcall_message_complete_cb (http_parser *p)
abort();
}
int
dontcall_response_status_cb (http_parser *p, const char *buf, size_t len)
{
if (p || buf || len) { } // gcc
fprintf(stderr, "\n\n*** on_status() called on paused parser ***\n\n");
abort();
}
static http_parser_settings settings_dontcall =
{.on_message_begin = dontcall_message_begin_cb
,.on_header_field = dontcall_header_field_cb
,.on_header_value = dontcall_header_value_cb
,.on_url = dontcall_request_url_cb
,.on_status = dontcall_response_status_cb
,.on_body = dontcall_body_cb
,.on_headers_complete = dontcall_headers_complete_cb
,.on_message_complete = dontcall_message_complete_cb
@@ -1847,20 +1639,11 @@ pause_message_complete_cb (http_parser *p)
return message_complete_cb(p);
}
int
pause_response_status_cb (http_parser *p, const char *buf, size_t len)
{
http_parser_pause(p, 1);
*current_pause_parser = settings_dontcall;
return response_status_cb(p, buf, len);
}
static http_parser_settings settings_pause =
{.on_message_begin = pause_message_begin_cb
,.on_header_field = pause_header_field_cb
,.on_header_value = pause_header_value_cb
,.on_url = pause_request_url_cb
,.on_status = pause_response_status_cb
,.on_body = pause_body_cb
,.on_headers_complete = pause_headers_complete_cb
,.on_message_complete = pause_message_complete_cb
@@ -1871,7 +1654,6 @@ static http_parser_settings settings =
,.on_header_field = header_field_cb
,.on_header_value = header_value_cb
,.on_url = request_url_cb
,.on_status = response_status_cb
,.on_body = body_cb
,.on_headers_complete = headers_complete_cb
,.on_message_complete = message_complete_cb
@@ -1882,7 +1664,6 @@ static http_parser_settings settings_count_body =
,.on_header_field = header_field_cb
,.on_header_value = header_value_cb
,.on_url = request_url_cb
,.on_status = response_status_cb
,.on_body = count_body_cb
,.on_headers_complete = headers_complete_cb
,.on_message_complete = message_complete_cb
@@ -1893,7 +1674,6 @@ static http_parser_settings settings_null =
,.on_header_field = 0
,.on_header_value = 0
,.on_url = 0
,.on_status = 0
,.on_body = 0
,.on_headers_complete = 0
,.on_message_complete = 0
@@ -2017,7 +1797,6 @@ message_eq (int index, const struct message *expected)
MESSAGE_CHECK_NUM_EQ(expected, m, method);
} else {
MESSAGE_CHECK_NUM_EQ(expected, m, status_code);
MESSAGE_CHECK_STR_EQ(expected, m, response_status);
}
MESSAGE_CHECK_NUM_EQ(expected, m, should_keep_alive);
@@ -2147,7 +1926,8 @@ upgrade_message_fix(char *body, const size_t nread, const size_t nmsgs, ...) {
static void
print_error (const char *raw, size_t error_location)
{
fprintf(stderr, "\n*** %s ***\n\n",
fprintf(stderr, "\n*** %s:%d -- %s ***\n\n",
"http_parser.c", HTTP_PARSER_ERRNO_LINE(parser),
http_errno_description(HTTP_PARSER_ERRNO(parser)));
int this_line = 0, char_len = 0;
@@ -2328,25 +2108,6 @@ const struct url_test url_tests[] =
,.rv=0
}
, {.name="ipv4 in ipv6 address"
,.url="http://[2001:0000:0000:0000:0000:0000:1.9.1.1]/"
,.is_connect=0
,.u=
{.field_set=(1 << UF_SCHEMA) | (1 << UF_HOST) | (1 << UF_PATH)
,.port=0
,.field_data=
{{ 0, 4 } /* UF_SCHEMA */
,{ 8, 37 } /* UF_HOST */
,{ 0, 0 } /* UF_PORT */
,{ 46, 1 } /* UF_PATH */
,{ 0, 0 } /* UF_QUERY */
,{ 0, 0 } /* UF_FRAGMENT */
,{ 0, 0 } /* UF_USERINFO */
}
}
,.rv=0
}
, {.name="extra ? in query string"
,.url="http://a.tbcdn.cn/p/fp/2010c/??fp-header-min.css,fp-base-min.css,"
"fp-channel-min.css,fp-product-min.css,fp-mall-min.css,fp-category-min.css,"
@@ -2701,7 +2462,7 @@ dump_url (const char *url, const struct http_parser_url *u)
continue;
}
printf("\tfield_data[%u]: off: %u len: %u part: \"%.*s\n\"",
printf("\tfield_data[%u]: off: %u len: %u part: \"%.*s\n",
i,
u->field_data[i].off,
u->field_data[i].len,
@@ -3091,15 +2852,15 @@ test_scan (const struct message *r1, const struct message *r2, const struct mess
parser_init(type_both ? HTTP_BOTH : r1->type);
buf1_len = i;
strlncpy(buf1, sizeof(buf1), total, buf1_len);
strncpy(buf1, total, buf1_len);
buf1[buf1_len] = 0;
buf2_len = j - i;
strlncpy(buf2, sizeof(buf1), total+i, buf2_len);
strncpy(buf2, total+i, buf2_len);
buf2[buf2_len] = 0;
buf3_len = total_len - j;
strlncpy(buf3, sizeof(buf1), total+j, buf3_len);
strncpy(buf3, total+j, buf3_len);
buf3[buf3_len] = 0;
read = parse(buf1, buf1_len);
@@ -3263,16 +3024,6 @@ main (void)
int i, j, k;
int request_count;
int response_count;
unsigned long version;
unsigned major;
unsigned minor;
unsigned patch;
version = http_parser_version();
major = (version >> 16) & 255;
minor = (version >> 8) & 255;
patch = version & 255;
printf("http_parser v%u.%u.%u (0x%06lx)\n", major, minor, patch, version);
printf("sizeof(http_parser) = %u\n", (unsigned int)sizeof(http_parser));
@@ -3336,7 +3087,6 @@ main (void)
,.http_major= 1
,.http_minor= 0
,.status_code= 200
,.response_status= "OK"
,.num_headers= 2
,.headers=
{ { "Transfer-Encoding", "chunked" }
@@ -3367,8 +3117,14 @@ main (void)
/// REQUESTS
test_simple("hello world", HPE_INVALID_METHOD);
test_simple("GET / HTP/1.1\r\n\r\n", HPE_INVALID_VERSION);
test_simple("ASDF / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("PROPPATCHA / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("GETA / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
// Well-formed but incomplete
test_simple("GET / HTTP/1.1\r\n"
"Content-Type: text/plain\r\n"
@@ -3411,23 +3167,13 @@ main (void)
}
static const char *bad_methods[] = {
"ASDF",
"C******",
"COLA",
"GEM",
"GETA",
"M****",
"MKCOLA",
"PROPPATCHA",
"PUN",
"PX",
"SA",
"hello world",
0 };
for (this_method = bad_methods; *this_method; this_method++) {
char buf[200];
sprintf(buf, "%s / HTTP/1.1\r\n\r\n", *this_method);
test_simple(buf, HPE_INVALID_METHOD);
test_simple(buf, HPE_UNKNOWN);
}
const char *dumbfuck2 =

4242
deps/mdb_v8/mdb_v8.c vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +0,0 @@
{
'targets': [
{
'target_name': 'mdb_v8',
'product_prefix': '',
'type': 'loadable_module',
'cflags': [ '-fPIC' ],
'sources': [
'mdb_v8.c',
'mdb_v8_cfg.c',
'v8cfg.h',
'v8dbg.h',
],
'link_settings': {
'libraries': [
'-lproc',
'-lavl',
],
},
},
],
}

View File

@@ -1,725 +0,0 @@
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
/*
* mdb_v8_cfg.c: canned configurations for previous V8 versions.
*
* The functions and data defined here enable this dmod to support debugging
* Node.js binaries that predated V8's built-in postmortem debugging support.
*/
#include "v8cfg.h"
/*ARGSUSED*/
static int
v8cfg_target_iter(v8_cfg_t *cfgp, int (*func)(mdb_symbol_t *, void *),
void *arg)
{
return (mdb_symbol_iter(MDB_OBJ_EVERY, MDB_DYNSYM,
MDB_BIND_GLOBAL | MDB_TYPE_OBJECT | MDB_TYPE_FUNC,
func, arg));
}
/*ARGSUSED*/
static int
v8cfg_target_readsym(v8_cfg_t *cfgp, const char *name, intptr_t *valp)
{
int val, rval;
if ((rval = mdb_readsym(&val, sizeof (val), name)) != -1)
*valp = (intptr_t)val;
return (rval);
}
/*
* Analog of mdb_symbol_iter() for a canned configuration.
*/
static int
v8cfg_canned_iter(v8_cfg_t *cfgp, int (*func)(mdb_symbol_t *, void *),
void *arg)
{
v8_cfg_symbol_t *v8sym;
mdb_symbol_t mdbsym;
int rv;
for (v8sym = cfgp->v8cfg_symbols; v8sym->v8cs_name != NULL; v8sym++) {
mdbsym.sym_name = v8sym->v8cs_name;
mdbsym.sym_object = NULL;
mdbsym.sym_sym = NULL;
mdbsym.sym_table = 0;
mdbsym.sym_id = 0;
if ((rv = func(&mdbsym, arg)) != 0)
return (rv);
}
return (0);
}
/*
* Analog of mdb_readsym() for a canned configuration.
*/
static int
v8cfg_canned_readsym(v8_cfg_t *cfgp, const char *name, intptr_t *valp)
{
v8_cfg_symbol_t *v8sym;
for (v8sym = cfgp->v8cfg_symbols; v8sym->v8cs_name != NULL; v8sym++) {
if (strcmp(name, v8sym->v8cs_name) == 0)
break;
}
if (v8sym->v8cs_name == NULL)
return (-1);
*valp = v8sym->v8cs_value;
return (0);
}
/*
* Canned configuration for the V8 bundled with Node.js v0.4.8 and later.
*/
static v8_cfg_symbol_t v8_symbols_node_04[] = {
{ "v8dbg_type_AccessCheckInfo__ACCESS_CHECK_INFO_TYPE", 0x91 },
{ "v8dbg_type_AccessorInfo__ACCESSOR_INFO_TYPE", 0x90 },
{ "v8dbg_type_BreakPointInfo__BREAK_POINT_INFO_TYPE", 0x9b },
{ "v8dbg_type_ByteArray__BYTE_ARRAY_TYPE", 0x86 },
{ "v8dbg_type_CallHandlerInfo__CALL_HANDLER_INFO_TYPE", 0x93 },
{ "v8dbg_type_Code__CODE_TYPE", 0x81 },
{ "v8dbg_type_CodeCache__CODE_CACHE_TYPE", 0x99 },
{ "v8dbg_type_ConsString__CONS_ASCII_STRING_TYPE", 0x5 },
{ "v8dbg_type_ConsString__CONS_ASCII_SYMBOL_TYPE", 0x45 },
{ "v8dbg_type_ConsString__CONS_STRING_TYPE", 0x1 },
{ "v8dbg_type_ConsString__CONS_SYMBOL_TYPE", 0x41 },
{ "v8dbg_type_DebugInfo__DEBUG_INFO_TYPE", 0x9a },
{ "v8dbg_type_ExternalAsciiString__EXTERNAL_ASCII_STRING_TYPE", 0x6 },
{ "v8dbg_type_ExternalAsciiString__EXTERNAL_ASCII_SYMBOL_TYPE", 0x46 },
{ "v8dbg_type_ExternalByteArray__EXTERNAL_BYTE_ARRAY_TYPE", 0x88 },
{ "v8dbg_type_ExternalFloatArray__EXTERNAL_FLOAT_ARRAY_TYPE", 0x8e },
{ "v8dbg_type_ExternalIntArray__EXTERNAL_INT_ARRAY_TYPE", 0x8c },
{ "v8dbg_type_ExternalShortArray__EXTERNAL_SHORT_ARRAY_TYPE", 0x8a },
{ "v8dbg_type_ExternalString__EXTERNAL_STRING_TYPE", 0x2 },
{ "v8dbg_type_ExternalString__EXTERNAL_SYMBOL_TYPE", 0x42 },
{ "v8dbg_type_ExternalUnsignedByteArray__"
"EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE", 0x89 },
{ "v8dbg_type_ExternalUnsignedIntArray__"
"EXTERNAL_UNSIGNED_INT_ARRAY_TYPE", 0x8d },
{ "v8dbg_type_ExternalUnsignedShortArray__"
"EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE", 0x8b },
{ "v8dbg_type_FixedArray__FIXED_ARRAY_TYPE", 0x9c },
{ "v8dbg_type_FunctionTemplateInfo__"
"FUNCTION_TEMPLATE_INFO_TYPE", 0x94 },
{ "v8dbg_type_HeapNumber__HEAP_NUMBER_TYPE", 0x84 },
{ "v8dbg_type_InterceptorInfo__INTERCEPTOR_INFO_TYPE", 0x92 },
{ "v8dbg_type_JSArray__JS_ARRAY_TYPE", 0xa5 },
{ "v8dbg_type_JSBuiltinsObject__JS_BUILTINS_OBJECT_TYPE", 0xa3 },
{ "v8dbg_type_JSFunction__JS_FUNCTION_TYPE", 0xa7 },
{ "v8dbg_type_JSGlobalObject__JS_GLOBAL_OBJECT_TYPE", 0xa2 },
{ "v8dbg_type_JSGlobalPropertyCell__"
"JS_GLOBAL_PROPERTY_CELL_TYPE", 0x83 },
{ "v8dbg_type_JSGlobalProxy__JS_GLOBAL_PROXY_TYPE", 0xa4 },
{ "v8dbg_type_JSMessageObject__JS_MESSAGE_OBJECT_TYPE", 0x9e },
{ "v8dbg_type_JSObject__JS_OBJECT_TYPE", 0xa0 },
{ "v8dbg_type_JSRegExp__JS_REGEXP_TYPE", 0xa6 },
{ "v8dbg_type_JSValue__JS_VALUE_TYPE", 0x9f },
{ "v8dbg_type_Map__MAP_TYPE", 0x80 },
{ "v8dbg_type_ObjectTemplateInfo__OBJECT_TEMPLATE_INFO_TYPE", 0x95 },
{ "v8dbg_type_Oddball__ODDBALL_TYPE", 0x82 },
{ "v8dbg_type_Script__SCRIPT_TYPE", 0x98 },
{ "v8dbg_type_SeqAsciiString__ASCII_STRING_TYPE", 0x4 },
{ "v8dbg_type_SeqAsciiString__ASCII_SYMBOL_TYPE", 0x44 },
{ "v8dbg_type_SharedFunctionInfo__SHARED_FUNCTION_INFO_TYPE", 0x9d },
{ "v8dbg_type_SignatureInfo__SIGNATURE_INFO_TYPE", 0x96 },
{ "v8dbg_type_String__STRING_TYPE", 0x0 },
{ "v8dbg_type_String__SYMBOL_TYPE", 0x40 },
{ "v8dbg_type_TypeSwitchInfo__TYPE_SWITCH_INFO_TYPE", 0x97 },
{ "v8dbg_class_AccessCheckInfo__data__Object", 0xc },
{ "v8dbg_class_AccessCheckInfo__indexed_callback__Object", 0x8 },
{ "v8dbg_class_AccessCheckInfo__named_callback__Object", 0x4 },
{ "v8dbg_class_AccessorInfo__data__Object", 0xc },
{ "v8dbg_class_AccessorInfo__flag__Smi", 0x14 },
{ "v8dbg_class_AccessorInfo__getter__Object", 0x4 },
{ "v8dbg_class_AccessorInfo__name__Object", 0x10 },
{ "v8dbg_class_AccessorInfo__setter__Object", 0x8 },
{ "v8dbg_class_BreakPointInfo__break_point_objects__Object", 0x10 },
{ "v8dbg_class_BreakPointInfo__code_position__Smi", 0x4 },
{ "v8dbg_class_BreakPointInfo__source_position__Smi", 0x8 },
{ "v8dbg_class_BreakPointInfo__statement_position__Smi", 0xc },
{ "v8dbg_class_ByteArray__length__SMI", 0x4 },
{ "v8dbg_class_CallHandlerInfo__callback__Object", 0x4 },
{ "v8dbg_class_CallHandlerInfo__data__Object", 0x8 },
{ "v8dbg_class_Code__deoptimization_data__FixedArray", 0xc },
{ "v8dbg_class_Code__instruction_size__int", 0x4 },
{ "v8dbg_class_Code__instruction_start__int", 0x20 },
{ "v8dbg_class_Code__relocation_info__ByteArray", 0x8 },
{ "v8dbg_class_CodeCache__default_cache__FixedArray", 0x4 },
{ "v8dbg_class_CodeCache__normal_type_cache__Object", 0x8 },
{ "v8dbg_class_ConsString__first__String", 0xc },
{ "v8dbg_class_ConsString__second__String", 0x10 },
{ "v8dbg_class_DebugInfo__break_points__FixedArray", 0x14 },
{ "v8dbg_class_DebugInfo__code__Code", 0xc },
{ "v8dbg_class_DebugInfo__original_code__Code", 0x8 },
{ "v8dbg_class_DebugInfo__shared__SharedFunctionInfo", 0x4 },
{ "v8dbg_class_ExternalString__resource__Object", 0xc },
{ "v8dbg_class_FixedArray__data__uintptr_t", 0x8 },
{ "v8dbg_class_FixedArray__length__SMI", 0x4 },
{ "v8dbg_class_FunctionTemplateInfo__access_check_info__Object", 0x38 },
{ "v8dbg_class_FunctionTemplateInfo__call_code__Object", 0x10 },
{ "v8dbg_class_FunctionTemplateInfo__class_name__Object", 0x2c },
{ "v8dbg_class_FunctionTemplateInfo__flag__Smi", 0x3c },
{ "v8dbg_class_FunctionTemplateInfo__"
"indexed_property_handler__Object", 0x24 },
{ "v8dbg_class_FunctionTemplateInfo__"
"instance_call_handler__Object", 0x34 },
{ "v8dbg_class_FunctionTemplateInfo__instance_template__Object", 0x28 },
{ "v8dbg_class_FunctionTemplateInfo__"
"named_property_handler__Object", 0x20 },
{ "v8dbg_class_FunctionTemplateInfo__parent_template__Object", 0x1c },
{ "v8dbg_class_FunctionTemplateInfo__"
"property_accessors__Object", 0x14 },
{ "v8dbg_class_FunctionTemplateInfo__"
"prototype_template__Object", 0x18 },
{ "v8dbg_class_FunctionTemplateInfo__serial_number__Object", 0xc },
{ "v8dbg_class_FunctionTemplateInfo__signature__Object", 0x30 },
{ "v8dbg_class_GlobalObject__builtins__JSBuiltinsObject", 0xc },
{ "v8dbg_class_GlobalObject__global_context__Context", 0x10 },
{ "v8dbg_class_GlobalObject__global_receiver__JSObject", 0x14 },
{ "v8dbg_class_HeapNumber__value__SMI", 0x4 },
{ "v8dbg_class_HeapObject__map__Map", 0x0 },
{ "v8dbg_class_InterceptorInfo__data__Object", 0x18 },
{ "v8dbg_class_InterceptorInfo__deleter__Object", 0x10 },
{ "v8dbg_class_InterceptorInfo__enumerator__Object", 0x14 },
{ "v8dbg_class_InterceptorInfo__getter__Object", 0x4 },
{ "v8dbg_class_InterceptorInfo__query__Object", 0xc },
{ "v8dbg_class_InterceptorInfo__setter__Object", 0x8 },
{ "v8dbg_class_JSArray__length__Object", 0xc },
{ "v8dbg_class_JSFunction__literals__FixedArray", 0x1c },
{ "v8dbg_class_JSFunction__next_function_link__Object", 0x20 },
{ "v8dbg_class_JSFunction__prototype_or_initial_map__Object", 0x10 },
{ "v8dbg_class_JSFunction__shared__SharedFunctionInfo", 0x14 },
{ "v8dbg_class_JSGlobalProxy__context__Object", 0xc },
{ "v8dbg_class_JSMessageObject__arguments__JSArray", 0x10 },
{ "v8dbg_class_JSMessageObject__end_position__SMI", 0x24 },
{ "v8dbg_class_JSMessageObject__script__Object", 0x14 },
{ "v8dbg_class_JSMessageObject__stack_frames__Object", 0x1c },
{ "v8dbg_class_JSMessageObject__stack_trace__Object", 0x18 },
{ "v8dbg_class_JSMessageObject__start_position__SMI", 0x20 },
{ "v8dbg_class_JSMessageObject__type__String", 0xc },
{ "v8dbg_class_JSObject__elements__Object", 0x8 },
{ "v8dbg_class_JSObject__properties__FixedArray", 0x4 },
{ "v8dbg_class_JSRegExp__data__Object", 0xc },
{ "v8dbg_class_JSValue__value__Object", 0xc },
{ "v8dbg_class_Map__code_cache__Object", 0x18 },
{ "v8dbg_class_Map__constructor__Object", 0x10 },
{ "v8dbg_class_Map__inobject_properties__int", 0x5 },
{ "v8dbg_class_Map__instance_size__int", 0x4 },
{ "v8dbg_class_Map__instance_attributes__int", 0x8 },
{ "v8dbg_class_Map__instance_descriptors__DescriptorArray", 0x14 },
{ "v8dbg_class_ObjectTemplateInfo__constructor__Object", 0xc },
{ "v8dbg_class_ObjectTemplateInfo__"
"internal_field_count__Object", 0x10 },
{ "v8dbg_class_Oddball__to_number__Object", 0x8 },
{ "v8dbg_class_Oddball__to_string__String", 0x4 },
{ "v8dbg_class_Script__column_offset__Smi", 0x10 },
{ "v8dbg_class_Script__compilation_type__Smi", 0x24 },
{ "v8dbg_class_Script__context_data__Object", 0x18 },
{ "v8dbg_class_Script__data__Object", 0x14 },
{ "v8dbg_class_Script__eval_from_instructions_offset__Smi", 0x34 },
{ "v8dbg_class_Script__eval_from_shared__Object", 0x30 },
{ "v8dbg_class_Script__id__Object", 0x2c },
{ "v8dbg_class_Script__line_ends__Object", 0x28 },
{ "v8dbg_class_Script__line_offset__Smi", 0xc },
{ "v8dbg_class_Script__name__Object", 0x8 },
{ "v8dbg_class_Script__source__Object", 0x4 },
{ "v8dbg_class_Script__type__Smi", 0x20 },
{ "v8dbg_class_Script__wrapper__Proxy", 0x1c },
{ "v8dbg_class_SeqAsciiString__chars__char", 0xc },
{ "v8dbg_class_SharedFunctionInfo__code__Code", 0x8 },
{ "v8dbg_class_SharedFunctionInfo__compiler_hints__SMI", 0x50 },
{ "v8dbg_class_SharedFunctionInfo__construct_stub__Code", 0x10 },
{ "v8dbg_class_SharedFunctionInfo__debug_info__Object", 0x20 },
{ "v8dbg_class_SharedFunctionInfo__end_position__SMI", 0x48 },
{ "v8dbg_class_SharedFunctionInfo__"
"expected_nof_properties__SMI", 0x3c },
{ "v8dbg_class_SharedFunctionInfo__formal_parameter_count__SMI", 0x38 },
{ "v8dbg_class_SharedFunctionInfo__function_data__Object", 0x18 },
{ "v8dbg_class_SharedFunctionInfo__"
"function_token_position__SMI", 0x4c },
{ "v8dbg_class_SharedFunctionInfo__inferred_name__String", 0x24 },
{ "v8dbg_class_SharedFunctionInfo__initial_map__Object", 0x28 },
{ "v8dbg_class_SharedFunctionInfo__instance_class_name__Object", 0x14 },
{ "v8dbg_class_SharedFunctionInfo__length__SMI", 0x34 },
{ "v8dbg_class_SharedFunctionInfo__name__Object", 0x4 },
{ "v8dbg_class_SharedFunctionInfo__num_literals__SMI", 0x40 },
{ "v8dbg_class_SharedFunctionInfo__opt_count__SMI", 0x58 },
{ "v8dbg_class_SharedFunctionInfo__script__Object", 0x1c },
{ "v8dbg_class_SharedFunctionInfo__"
"start_position_and_type__SMI", 0x44 },
{ "v8dbg_class_SharedFunctionInfo__"
"this_property_assignments__Object", 0x2c },
{ "v8dbg_class_SharedFunctionInfo__"
"this_property_assignments_count__SMI", 0x54 },
{ "v8dbg_class_SignatureInfo__args__Object", 0x8 },
{ "v8dbg_class_SignatureInfo__receiver__Object", 0x4 },
{ "v8dbg_class_String__length__SMI", 0x4 },
{ "v8dbg_class_TemplateInfo__property_list__Object", 0x8 },
{ "v8dbg_class_TemplateInfo__tag__Object", 0x4 },
{ "v8dbg_class_TypeSwitchInfo__types__Object", 0x4 },
{ "v8dbg_parent_AccessCheckInfo__Struct", 0x0 },
{ "v8dbg_parent_AccessorInfo__Struct", 0x0 },
{ "v8dbg_parent_BreakPointInfo__Struct", 0x0 },
{ "v8dbg_parent_ByteArray__HeapObject", 0x0 },
{ "v8dbg_parent_CallHandlerInfo__Struct", 0x0 },
{ "v8dbg_parent_Code__HeapObject", 0x0 },
{ "v8dbg_parent_CodeCache__Struct", 0x0 },
{ "v8dbg_parent_ConsString__String", 0x0 },
{ "v8dbg_parent_DebugInfo__Struct", 0x0 },
{ "v8dbg_parent_DeoptimizationInputData__FixedArray", 0x0 },
{ "v8dbg_parent_DeoptimizationOutputData__FixedArray", 0x0 },
{ "v8dbg_parent_DescriptorArray__FixedArray", 0x0 },
{ "v8dbg_parent_ExternalArray__HeapObject", 0x0 },
{ "v8dbg_parent_ExternalAsciiString__ExternalString", 0x0 },
{ "v8dbg_parent_ExternalByteArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalFloatArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalIntArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalShortArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalString__String", 0x0 },
{ "v8dbg_parent_ExternalTwoByteString__ExternalString", 0x0 },
{ "v8dbg_parent_ExternalUnsignedByteArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalUnsignedIntArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalUnsignedShortArray__ExternalArray", 0x0 },
{ "v8dbg_parent_Failure__MaybeObject", 0x0 },
{ "v8dbg_parent_FixedArray__HeapObject", 0x0 },
{ "v8dbg_parent_FunctionTemplateInfo__TemplateInfo", 0x0 },
{ "v8dbg_parent_GlobalObject__JSObject", 0x0 },
{ "v8dbg_parent_HeapNumber__HeapObject", 0x0 },
{ "v8dbg_parent_HeapObject__Object", 0x0 },
{ "v8dbg_parent_InterceptorInfo__Struct", 0x0 },
{ "v8dbg_parent_JSArray__JSObject", 0x0 },
{ "v8dbg_parent_JSBuiltinsObject__GlobalObject", 0x0 },
{ "v8dbg_parent_JSFunction__JSObject", 0x0 },
{ "v8dbg_parent_JSFunctionResultCache__FixedArray", 0x0 },
{ "v8dbg_parent_JSGlobalObject__GlobalObject", 0x0 },
{ "v8dbg_parent_JSGlobalPropertyCell__HeapObject", 0x0 },
{ "v8dbg_parent_JSGlobalProxy__JSObject", 0x0 },
{ "v8dbg_parent_JSMessageObject__JSObject", 0x0 },
{ "v8dbg_parent_JSObject__HeapObject", 0x0 },
{ "v8dbg_parent_JSRegExp__JSObject", 0x0 },
{ "v8dbg_parent_JSRegExpResult__JSArray", 0x0 },
{ "v8dbg_parent_JSValue__JSObject", 0x0 },
{ "v8dbg_parent_Map__HeapObject", 0x0 },
{ "v8dbg_parent_NormalizedMapCache__FixedArray", 0x0 },
{ "v8dbg_parent_Object__MaybeObject", 0x0 },
{ "v8dbg_parent_ObjectTemplateInfo__TemplateInfo", 0x0 },
{ "v8dbg_parent_Oddball__HeapObject", 0x0 },
{ "v8dbg_parent_Script__Struct", 0x0 },
{ "v8dbg_parent_SeqAsciiString__SeqString", 0x0 },
{ "v8dbg_parent_SeqString__String", 0x0 },
{ "v8dbg_parent_SeqTwoByteString__SeqString", 0x0 },
{ "v8dbg_parent_SharedFunctionInfo__HeapObject", 0x0 },
{ "v8dbg_parent_SignatureInfo__Struct", 0x0 },
{ "v8dbg_parent_Smi__Object", 0x0 },
{ "v8dbg_parent_String__HeapObject", 0x0 },
{ "v8dbg_parent_Struct__HeapObject", 0x0 },
{ "v8dbg_parent_TemplateInfo__Struct", 0x0 },
{ "v8dbg_parent_TypeSwitchInfo__Struct", 0x0 },
{ "v8dbg_frametype_ArgumentsAdaptorFrame", 0x8 },
{ "v8dbg_frametype_ConstructFrame", 0x7 },
{ "v8dbg_frametype_EntryConstructFrame", 0x2 },
{ "v8dbg_frametype_EntryFrame", 0x1 },
{ "v8dbg_frametype_ExitFrame", 0x3 },
{ "v8dbg_frametype_InternalFrame", 0x6 },
{ "v8dbg_frametype_JavaScriptFrame", 0x4 },
{ "v8dbg_frametype_OptimizedFrame", 0x5 },
{ "v8dbg_off_fp_context", -0x4 },
{ "v8dbg_off_fp_function", -0x8 },
{ "v8dbg_off_fp_marker", -0x8 },
{ "v8dbg_off_fp_args", 0x8 },
{ "v8dbg_prop_idx_content", 0x0 },
{ "v8dbg_prop_idx_first", 0x2 },
{ "v8dbg_prop_type_field", 0x1 },
{ "v8dbg_prop_type_first_phantom", 0x6 },
{ "v8dbg_prop_type_mask", 0xf },
{ "v8dbg_AsciiStringTag", 0x4 },
{ "v8dbg_ConsStringTag", 0x1 },
{ "v8dbg_ExternalStringTag", 0x2 },
{ "v8dbg_FailureTag", 0x3 },
{ "v8dbg_FailureTagMask", 0x3 },
{ "v8dbg_FirstNonstringType", 0x80 },
{ "v8dbg_HeapObjectTag", 0x1 },
{ "v8dbg_HeapObjectTagMask", 0x3 },
{ "v8dbg_IsNotStringMask", 0x80 },
{ "v8dbg_NotStringTag", 0x80 },
{ "v8dbg_SeqStringTag", 0x0 },
{ "v8dbg_SmiTag", 0x0 },
{ "v8dbg_SmiTagMask", 0x1 },
{ "v8dbg_SmiValueShift", 0x1 },
{ "v8dbg_StringEncodingMask", 0x4 },
{ "v8dbg_StringRepresentationMask", 0x3 },
{ "v8dbg_StringTag", 0x0 },
{ "v8dbg_TwoByteStringTag", 0x0 },
{ "v8dbg_PointerSizeLog2", 0x2 },
{ NULL }
};
/*
* Canned configuration for the V8 bundled with Node.js v0.6.5.
*/
static v8_cfg_symbol_t v8_symbols_node_06[] = {
{ "v8dbg_type_AccessCheckInfo__ACCESS_CHECK_INFO_TYPE", 0x93 },
{ "v8dbg_type_AccessorInfo__ACCESSOR_INFO_TYPE", 0x92 },
{ "v8dbg_type_BreakPointInfo__BREAK_POINT_INFO_TYPE", 0x9e },
{ "v8dbg_type_ByteArray__BYTE_ARRAY_TYPE", 0x86 },
{ "v8dbg_type_CallHandlerInfo__CALL_HANDLER_INFO_TYPE", 0x95 },
{ "v8dbg_type_Code__CODE_TYPE", 0x81 },
{ "v8dbg_type_CodeCache__CODE_CACHE_TYPE", 0x9b },
{ "v8dbg_type_ConsString__CONS_ASCII_STRING_TYPE", 0x5 },
{ "v8dbg_type_ConsString__CONS_ASCII_SYMBOL_TYPE", 0x45 },
{ "v8dbg_type_ConsString__CONS_STRING_TYPE", 0x1 },
{ "v8dbg_type_ConsString__CONS_SYMBOL_TYPE", 0x41 },
{ "v8dbg_type_DebugInfo__DEBUG_INFO_TYPE", 0x9d },
{ "v8dbg_type_ExternalAsciiString__EXTERNAL_ASCII_STRING_TYPE", 0x6 },
{ "v8dbg_type_ExternalAsciiString__EXTERNAL_ASCII_SYMBOL_TYPE", 0x46 },
{ "v8dbg_type_ExternalByteArray__EXTERNAL_BYTE_ARRAY_TYPE", 0x87 },
{ "v8dbg_type_ExternalDoubleArray__EXTERNAL_DOUBLE_ARRAY_TYPE", 0x8e },
{ "v8dbg_type_ExternalFloatArray__EXTERNAL_FLOAT_ARRAY_TYPE", 0x8d },
{ "v8dbg_type_ExternalIntArray__EXTERNAL_INT_ARRAY_TYPE", 0x8b },
{ "v8dbg_type_ExternalPixelArray__EXTERNAL_PIXEL_ARRAY_TYPE", 0x8f },
{ "v8dbg_type_ExternalShortArray__EXTERNAL_SHORT_ARRAY_TYPE", 0x89 },
{ "v8dbg_type_ExternalTwoByteString__EXTERNAL_STRING_TYPE", 0x2 },
{ "v8dbg_type_ExternalTwoByteString__EXTERNAL_SYMBOL_TYPE", 0x42 },
{ "v8dbg_type_ExternalUnsignedByteArray__"
"EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE", 0x88 },
{ "v8dbg_type_ExternalUnsignedIntArray__"
"EXTERNAL_UNSIGNED_INT_ARRAY_TYPE", 0x8c },
{ "v8dbg_type_ExternalUnsignedShortArray__"
"EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE", 0x8a },
{ "v8dbg_type_FixedArray__FIXED_ARRAY_TYPE", 0x9f },
{ "v8dbg_type_FixedDoubleArray__FIXED_DOUBLE_ARRAY_TYPE", 0x90 },
{ "v8dbg_type_Foreign__FOREIGN_TYPE", 0x85 },
{ "v8dbg_type_FunctionTemplateInfo__FUNCTION_TEMPLATE_INFO_TYPE",
0x96 },
{ "v8dbg_type_HeapNumber__HEAP_NUMBER_TYPE", 0x84 },
{ "v8dbg_type_InterceptorInfo__INTERCEPTOR_INFO_TYPE", 0x94 },
{ "v8dbg_type_JSArray__JS_ARRAY_TYPE", 0xa8 },
{ "v8dbg_type_JSBuiltinsObject__JS_BUILTINS_OBJECT_TYPE", 0xa6 },
{ "v8dbg_type_JSFunction__JS_FUNCTION_TYPE", 0xac },
{ "v8dbg_type_JSFunctionProxy__JS_FUNCTION_PROXY_TYPE", 0xad },
{ "v8dbg_type_JSGlobalObject__JS_GLOBAL_OBJECT_TYPE", 0xa5 },
{ "v8dbg_type_JSGlobalPropertyCell__JS_GLOBAL_PROPERTY_CELL_TYPE",
0x83 },
{ "v8dbg_type_JSMessageObject__JS_MESSAGE_OBJECT_TYPE", 0xa1 },
{ "v8dbg_type_JSObject__JS_OBJECT_TYPE", 0xa3 },
{ "v8dbg_type_JSProxy__JS_PROXY_TYPE", 0xa9 },
{ "v8dbg_type_JSRegExp__JS_REGEXP_TYPE", 0xab },
{ "v8dbg_type_JSValue__JS_VALUE_TYPE", 0xa2 },
{ "v8dbg_type_JSWeakMap__JS_WEAK_MAP_TYPE", 0xaa },
{ "v8dbg_type_Map__MAP_TYPE", 0x80 },
{ "v8dbg_type_ObjectTemplateInfo__OBJECT_TEMPLATE_INFO_TYPE", 0x97 },
{ "v8dbg_type_Oddball__ODDBALL_TYPE", 0x82 },
{ "v8dbg_type_PolymorphicCodeCache__POLYMORPHIC_CODE_CACHE_TYPE",
0x9c },
{ "v8dbg_type_Script__SCRIPT_TYPE", 0x9a },
{ "v8dbg_type_SeqAsciiString__ASCII_STRING_TYPE", 0x4 },
{ "v8dbg_type_SeqAsciiString__ASCII_SYMBOL_TYPE", 0x44 },
{ "v8dbg_type_SeqTwoByteString__STRING_TYPE", 0x0 },
{ "v8dbg_type_SeqTwoByteString__SYMBOL_TYPE", 0x40 },
{ "v8dbg_type_SharedFunctionInfo__SHARED_FUNCTION_INFO_TYPE", 0xa0 },
{ "v8dbg_type_SignatureInfo__SIGNATURE_INFO_TYPE", 0x98 },
{ "v8dbg_type_SlicedString__SLICED_ASCII_STRING_TYPE", 0x7 },
{ "v8dbg_type_SlicedString__SLICED_STRING_TYPE", 0x3 },
{ "v8dbg_type_TypeSwitchInfo__TYPE_SWITCH_INFO_TYPE", 0x99 },
{ "v8dbg_class_AccessCheckInfo__data__Object", 0xc },
{ "v8dbg_class_AccessCheckInfo__indexed_callback__Object", 0x8 },
{ "v8dbg_class_AccessCheckInfo__named_callback__Object", 0x4 },
{ "v8dbg_class_AccessorInfo__data__Object", 0xc },
{ "v8dbg_class_AccessorInfo__flag__Smi", 0x14 },
{ "v8dbg_class_AccessorInfo__getter__Object", 0x4 },
{ "v8dbg_class_AccessorInfo__name__Object", 0x10 },
{ "v8dbg_class_AccessorInfo__setter__Object", 0x8 },
{ "v8dbg_class_BreakPointInfo__break_point_objects__Object", 0x10 },
{ "v8dbg_class_BreakPointInfo__code_position__Smi", 0x4 },
{ "v8dbg_class_BreakPointInfo__source_position__Smi", 0x8 },
{ "v8dbg_class_BreakPointInfo__statement_position__Smi", 0xc },
{ "v8dbg_class_CallHandlerInfo__callback__Object", 0x4 },
{ "v8dbg_class_CallHandlerInfo__data__Object", 0x8 },
{ "v8dbg_class_Code__deoptimization_data__FixedArray", 0xc },
{ "v8dbg_class_Code__instruction_size__int", 0x4 },
{ "v8dbg_class_Code__instruction_start__int", 0x20 },
{ "v8dbg_class_Code__next_code_flushing_candidate__Object", 0x10 },
{ "v8dbg_class_Code__relocation_info__ByteArray", 0x8 },
{ "v8dbg_class_CodeCache__default_cache__FixedArray", 0x4 },
{ "v8dbg_class_CodeCache__normal_type_cache__Object", 0x8 },
{ "v8dbg_class_ConsString__first__String", 0xc },
{ "v8dbg_class_ConsString__second__String", 0x10 },
{ "v8dbg_class_DebugInfo__break_points__FixedArray", 0x14 },
{ "v8dbg_class_DebugInfo__code__Code", 0xc },
{ "v8dbg_class_DebugInfo__original_code__Code", 0x8 },
{ "v8dbg_class_DebugInfo__shared__SharedFunctionInfo", 0x4 },
{ "v8dbg_class_ExternalString__resource__Object", 0xc },
{ "v8dbg_class_FixedArray__data__uintptr_t", 0x8 },
{ "v8dbg_class_FixedArrayBase__length__SMI", 0x4 },
{ "v8dbg_class_FunctionTemplateInfo__access_check_info__Object", 0x38 },
{ "v8dbg_class_FunctionTemplateInfo__call_code__Object", 0x10 },
{ "v8dbg_class_FunctionTemplateInfo__class_name__Object", 0x2c },
{ "v8dbg_class_FunctionTemplateInfo__flag__Smi", 0x3c },
{ "v8dbg_class_FunctionTemplateInfo__indexed_property_handler__Object",
0x24 },
{ "v8dbg_class_FunctionTemplateInfo__instance_call_handler__Object",
0x34 },
{ "v8dbg_class_FunctionTemplateInfo__instance_template__Object", 0x28 },
{ "v8dbg_class_FunctionTemplateInfo__named_property_handler__Object",
0x20 },
{ "v8dbg_class_FunctionTemplateInfo__parent_template__Object", 0x1c },
{ "v8dbg_class_FunctionTemplateInfo__property_accessors__Object",
0x14 },
{ "v8dbg_class_FunctionTemplateInfo__prototype_template__Object",
0x18 },
{ "v8dbg_class_FunctionTemplateInfo__serial_number__Object", 0xc },
{ "v8dbg_class_FunctionTemplateInfo__signature__Object", 0x30 },
{ "v8dbg_class_GlobalObject__builtins__JSBuiltinsObject", 0xc },
{ "v8dbg_class_GlobalObject__global_context__Context", 0x10 },
{ "v8dbg_class_GlobalObject__global_receiver__JSObject", 0x14 },
{ "v8dbg_class_HeapNumber__value__double", 0x4 },
{ "v8dbg_class_HeapObject__map__Map", 0x0 },
{ "v8dbg_class_InterceptorInfo__data__Object", 0x18 },
{ "v8dbg_class_InterceptorInfo__deleter__Object", 0x10 },
{ "v8dbg_class_InterceptorInfo__enumerator__Object", 0x14 },
{ "v8dbg_class_InterceptorInfo__getter__Object", 0x4 },
{ "v8dbg_class_InterceptorInfo__query__Object", 0xc },
{ "v8dbg_class_InterceptorInfo__setter__Object", 0x8 },
{ "v8dbg_class_JSArray__length__Object", 0xc },
{ "v8dbg_class_JSFunction__literals__FixedArray", 0x1c },
{ "v8dbg_class_JSFunction__next_function_link__Object", 0x20 },
{ "v8dbg_class_JSFunction__prototype_or_initial_map__Object", 0x10 },
{ "v8dbg_class_JSFunction__shared__SharedFunctionInfo", 0x14 },
{ "v8dbg_class_JSFunctionProxy__call_trap__Object", 0x8 },
{ "v8dbg_class_JSFunctionProxy__construct_trap__Object", 0xc },
{ "v8dbg_class_JSGlobalProxy__context__Object", 0xc },
{ "v8dbg_class_JSMessageObject__arguments__JSArray", 0x10 },
{ "v8dbg_class_JSMessageObject__end_position__SMI", 0x24 },
{ "v8dbg_class_JSMessageObject__script__Object", 0x14 },
{ "v8dbg_class_JSMessageObject__stack_frames__Object", 0x1c },
{ "v8dbg_class_JSMessageObject__stack_trace__Object", 0x18 },
{ "v8dbg_class_JSMessageObject__start_position__SMI", 0x20 },
{ "v8dbg_class_JSMessageObject__type__String", 0xc },
{ "v8dbg_class_JSObject__elements__Object", 0x8 },
{ "v8dbg_class_JSObject__properties__FixedArray", 0x4 },
{ "v8dbg_class_JSProxy__handler__Object", 0x4 },
{ "v8dbg_class_JSRegExp__data__Object", 0xc },
{ "v8dbg_class_JSValue__value__Object", 0xc },
{ "v8dbg_class_JSWeakMap__next__Object", 0x10 },
{ "v8dbg_class_JSWeakMap__table__ObjectHashTable", 0xc },
{ "v8dbg_class_Map__code_cache__Object", 0x18 },
{ "v8dbg_class_Map__constructor__Object", 0x10 },
{ "v8dbg_class_Map__inobject_properties__int", 0x5 },
{ "v8dbg_class_Map__instance_attributes__int", 0x8 },
{ "v8dbg_class_Map__instance_descriptors__FixedArray", 0x14 },
{ "v8dbg_class_Map__instance_size__int", 0x4 },
{ "v8dbg_class_Map__prototype_transitions__FixedArray", 0x1c },
{ "v8dbg_class_ObjectTemplateInfo__constructor__Object", 0xc },
{ "v8dbg_class_ObjectTemplateInfo__internal_field_count__Object",
0x10 },
{ "v8dbg_class_Oddball__to_number__Object", 0x8 },
{ "v8dbg_class_Oddball__to_string__String", 0x4 },
{ "v8dbg_class_PolymorphicCodeCache__cache__Object", 0x4 },
{ "v8dbg_class_Script__column_offset__Smi", 0x10 },
{ "v8dbg_class_Script__compilation_type__Smi", 0x24 },
{ "v8dbg_class_Script__context_data__Object", 0x18 },
{ "v8dbg_class_Script__data__Object", 0x14 },
{ "v8dbg_class_Script__eval_from_instructions_offset__Smi", 0x34 },
{ "v8dbg_class_Script__eval_from_shared__Object", 0x30 },
{ "v8dbg_class_Script__id__Object", 0x2c },
{ "v8dbg_class_Script__line_ends__Object", 0x28 },
{ "v8dbg_class_Script__line_offset__Smi", 0xc },
{ "v8dbg_class_Script__name__Object", 0x8 },
{ "v8dbg_class_Script__source__Object", 0x4 },
{ "v8dbg_class_Script__type__Smi", 0x20 },
{ "v8dbg_class_Script__wrapper__Foreign", 0x1c },
{ "v8dbg_class_SeqAsciiString__chars__char", 0xc },
{ "v8dbg_class_SharedFunctionInfo__code__Code", 0x8 },
{ "v8dbg_class_SharedFunctionInfo__compiler_hints__SMI", 0x50 },
{ "v8dbg_class_SharedFunctionInfo__construct_stub__Code", 0x10 },
{ "v8dbg_class_SharedFunctionInfo__debug_info__Object", 0x20 },
{ "v8dbg_class_SharedFunctionInfo__end_position__SMI", 0x48 },
{ "v8dbg_class_SharedFunctionInfo__expected_nof_properties__SMI",
0x3c },
{ "v8dbg_class_SharedFunctionInfo__formal_parameter_count__SMI", 0x38 },
{ "v8dbg_class_SharedFunctionInfo__function_data__Object", 0x18 },
{ "v8dbg_class_SharedFunctionInfo__function_token_position__SMI",
0x4c },
{ "v8dbg_class_SharedFunctionInfo__inferred_name__String", 0x24 },
{ "v8dbg_class_SharedFunctionInfo__initial_map__Object", 0x28 },
{ "v8dbg_class_SharedFunctionInfo__instance_class_name__Object", 0x14 },
{ "v8dbg_class_SharedFunctionInfo__length__SMI", 0x34 },
{ "v8dbg_class_SharedFunctionInfo__name__Object", 0x4 },
{ "v8dbg_class_SharedFunctionInfo__num_literals__SMI", 0x40 },
{ "v8dbg_class_SharedFunctionInfo__opt_count__SMI", 0x58 },
{ "v8dbg_class_SharedFunctionInfo__script__Object", 0x1c },
{ "v8dbg_class_SharedFunctionInfo__"
"start_position_and_type__SMI", 0x44 },
{ "v8dbg_class_SharedFunctionInfo__"
"this_property_assignments__Object", 0x2c },
{ "v8dbg_class_SharedFunctionInfo__"
"this_property_assignments_count__SMI", 0x54 },
{ "v8dbg_class_SignatureInfo__args__Object", 0x8 },
{ "v8dbg_class_SignatureInfo__receiver__Object", 0x4 },
{ "v8dbg_class_SlicedString__offset__SMI", 0x10 },
{ "v8dbg_class_String__length__SMI", 0x4 },
{ "v8dbg_class_TemplateInfo__property_list__Object", 0x8 },
{ "v8dbg_class_TemplateInfo__tag__Object", 0x4 },
{ "v8dbg_class_TypeSwitchInfo__types__Object", 0x4 },
{ "v8dbg_parent_AccessCheckInfo__Struct", 0x0 },
{ "v8dbg_parent_AccessorInfo__Struct", 0x0 },
{ "v8dbg_parent_BreakPointInfo__Struct", 0x0 },
{ "v8dbg_parent_ByteArray__FixedArrayBase", 0x0 },
{ "v8dbg_parent_CallHandlerInfo__Struct", 0x0 },
{ "v8dbg_parent_Code__HeapObject", 0x0 },
{ "v8dbg_parent_CodeCache__Struct", 0x0 },
{ "v8dbg_parent_ConsString__String", 0x0 },
{ "v8dbg_parent_DebugInfo__Struct", 0x0 },
{ "v8dbg_parent_DeoptimizationInputData__FixedArray", 0x0 },
{ "v8dbg_parent_DeoptimizationOutputData__FixedArray", 0x0 },
{ "v8dbg_parent_DescriptorArray__FixedArray", 0x0 },
{ "v8dbg_parent_ExternalArray__FixedArrayBase", 0x0 },
{ "v8dbg_parent_ExternalAsciiString__ExternalString", 0x0 },
{ "v8dbg_parent_ExternalByteArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalDoubleArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalFloatArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalIntArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalPixelArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalShortArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalString__String", 0x0 },
{ "v8dbg_parent_ExternalTwoByteString__ExternalString", 0x0 },
{ "v8dbg_parent_ExternalUnsignedByteArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalUnsignedIntArray__ExternalArray", 0x0 },
{ "v8dbg_parent_ExternalUnsignedShortArray__ExternalArray", 0x0 },
{ "v8dbg_parent_Failure__MaybeObject", 0x0 },
{ "v8dbg_parent_FixedArray__FixedArrayBase", 0x0 },
{ "v8dbg_parent_FixedArrayBase__HeapObject", 0x0 },
{ "v8dbg_parent_FixedDoubleArray__FixedArrayBase", 0x0 },
{ "v8dbg_parent_Foreign__HeapObject", 0x0 },
{ "v8dbg_parent_FunctionTemplateInfo__TemplateInfo", 0x0 },
{ "v8dbg_parent_GlobalObject__JSObject", 0x0 },
{ "v8dbg_parent_HashTable__FixedArray", 0x0 },
{ "v8dbg_parent_HeapNumber__HeapObject", 0x0 },
{ "v8dbg_parent_HeapObject__Object", 0x0 },
{ "v8dbg_parent_InterceptorInfo__Struct", 0x0 },
{ "v8dbg_parent_JSArray__JSObject", 0x0 },
{ "v8dbg_parent_JSBuiltinsObject__GlobalObject", 0x0 },
{ "v8dbg_parent_JSFunction__JSObject", 0x0 },
{ "v8dbg_parent_JSFunctionProxy__JSProxy", 0x0 },
{ "v8dbg_parent_JSFunctionResultCache__FixedArray", 0x0 },
{ "v8dbg_parent_JSGlobalObject__GlobalObject", 0x0 },
{ "v8dbg_parent_JSGlobalPropertyCell__HeapObject", 0x0 },
{ "v8dbg_parent_JSMessageObject__JSObject", 0x0 },
{ "v8dbg_parent_JSObject__JSReceiver", 0x0 },
{ "v8dbg_parent_JSProxy__JSReceiver", 0x0 },
{ "v8dbg_parent_JSReceiver__HeapObject", 0x0 },
{ "v8dbg_parent_JSRegExp__JSObject", 0x0 },
{ "v8dbg_parent_JSRegExpResult__JSArray", 0x0 },
{ "v8dbg_parent_JSValue__JSObject", 0x0 },
{ "v8dbg_parent_JSWeakMap__JSObject", 0x0 },
{ "v8dbg_parent_Map__HeapObject", 0x0 },
{ "v8dbg_parent_NormalizedMapCache__FixedArray", 0x0 },
{ "v8dbg_parent_ObjectTemplateInfo__TemplateInfo", 0x0 },
{ "v8dbg_parent_Oddball__HeapObject", 0x0 },
{ "v8dbg_parent_PolymorphicCodeCache__Struct", 0x0 },
{ "v8dbg_parent_Script__Struct", 0x0 },
{ "v8dbg_parent_SeqAsciiString__SeqString", 0x0 },
{ "v8dbg_parent_SeqString__String", 0x0 },
{ "v8dbg_parent_SeqTwoByteString__SeqString", 0x0 },
{ "v8dbg_parent_SharedFunctionInfo__HeapObject", 0x0 },
{ "v8dbg_parent_SignatureInfo__Struct", 0x0 },
{ "v8dbg_parent_SlicedString__String", 0x0 },
{ "v8dbg_parent_Smi__Object", 0x0 },
{ "v8dbg_parent_String__HeapObject", 0x0 },
{ "v8dbg_parent_Struct__HeapObject", 0x0 },
{ "v8dbg_parent_TemplateInfo__Struct", 0x0 },
{ "v8dbg_parent_TypeSwitchInfo__Struct", 0x0 },
{ "v8dbg_frametype_ArgumentsAdaptorFrame", 0x8 },
{ "v8dbg_frametype_ConstructFrame", 0x7 },
{ "v8dbg_frametype_EntryConstructFrame", 0x2 },
{ "v8dbg_frametype_EntryFrame", 0x1 },
{ "v8dbg_frametype_ExitFrame", 0x3 },
{ "v8dbg_frametype_InternalFrame", 0x6 },
{ "v8dbg_frametype_JavaScriptFrame", 0x4 },
{ "v8dbg_frametype_OptimizedFrame", 0x5 },
{ "v8dbg_off_fp_args", 0x8 },
{ "v8dbg_off_fp_context", -0x4 },
{ "v8dbg_off_fp_function", -0x8 },
{ "v8dbg_off_fp_marker", -0x8 },
{ "v8dbg_prop_idx_content", 0x1 },
{ "v8dbg_prop_idx_first", 0x3 },
{ "v8dbg_prop_type_field", 0x1 },
{ "v8dbg_prop_type_first_phantom", 0x6 },
{ "v8dbg_prop_type_mask", 0xf },
{ "v8dbg_AsciiStringTag", 0x4 },
{ "v8dbg_PointerSizeLog2", 0x2 },
{ "v8dbg_SeqStringTag", 0x0 },
{ "v8dbg_SmiTag", 0x0 },
{ "v8dbg_SmiTagMask", 0x1 },
{ "v8dbg_SmiValueShift", 0x1 },
{ "v8dbg_StringEncodingMask", 0x4 },
{ "v8dbg_StringRepresentationMask", 0x3 },
{ "v8dbg_StringTag", 0x0 },
{ "v8dbg_TwoByteStringTag", 0x0 },
{ "v8dbg_ConsStringTag", 0x1 },
{ "v8dbg_ExternalStringTag", 0x2 },
{ "v8dbg_FailureTag", 0x3 },
{ "v8dbg_FailureTagMask", 0x3 },
{ "v8dbg_FirstNonstringType", 0x80 },
{ "v8dbg_HeapObjectTag", 0x1 },
{ "v8dbg_HeapObjectTagMask", 0x3 },
{ "v8dbg_IsNotStringMask", 0x80 },
{ "v8dbg_NotStringTag", 0x80 },
{ NULL },
};
v8_cfg_t v8_cfg_04 = { "node-0.4", "node v0.4", v8_symbols_node_04,
v8cfg_canned_iter, v8cfg_canned_readsym };
v8_cfg_t v8_cfg_06 = { "node-0.6", "node v0.6", v8_symbols_node_06,
v8cfg_canned_iter, v8cfg_canned_readsym };
v8_cfg_t *v8_cfgs[] = {
&v8_cfg_04,
&v8_cfg_06,
NULL
};
v8_cfg_t v8_cfg_target = { NULL, NULL, NULL, v8cfg_target_iter,
v8cfg_target_readsym };

52
deps/mdb_v8/v8cfg.h vendored
View File

@@ -1,52 +0,0 @@
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
/*
* v8cfg.h: canned configurations for previous V8 versions
*/
#ifndef V8CFG_H
#define V8CFG_H
#include <sys/types.h>
#include <sys/mdb_modapi.h>
typedef struct {
const char *v8cs_name; /* symbol name */
intptr_t v8cs_value; /* symbol value */
} v8_cfg_symbol_t;
typedef struct v8_cfg {
const char *v8cfg_name; /* canned config name */
const char *v8cfg_label; /* description */
v8_cfg_symbol_t *v8cfg_symbols; /* actual symbol values */
int (*v8cfg_iter)(struct v8_cfg *, int (*)(mdb_symbol_t *, void *),
void *);
int (*v8cfg_readsym)(struct v8_cfg *, const char *, intptr_t *);
} v8_cfg_t;
extern v8_cfg_t v8_cfg_04;
extern v8_cfg_t v8_cfg_06;
extern v8_cfg_t v8_cfg_target;
extern v8_cfg_t *v8_cfgs[];
#endif /* V8CFG_H */

80
deps/mdb_v8/v8dbg.h vendored
View File

@@ -1,80 +0,0 @@
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
/*
* v8dbg.h: macros for use by V8 heap inspection tools. The consumer must
* define values for various tags and shifts. The MDB module gets these
* constants from information encoded in the binary itself.
*/
#ifndef _V8DBG_H
#define _V8DBG_H
/*
* Recall that while V8 heap objects are always 4-byte aligned, heap object
* pointers always have the last bit set. So when looking for a field nominally
* at offset X, one must be sure to clear the tag bit first.
*/
#define V8_OFF_HEAP(x) ((x) - V8_HeapObjectTag)
/*
* Determine whether a given pointer refers to a SMI, Failure, or HeapObject.
*/
#define V8_IS_SMI(ptr) (((ptr) & V8_SmiTagMask) == V8_SmiTag)
#define V8_IS_FAILURE(ptr) (((ptr) & V8_FailureTagMask) == V8_FailureTag)
#define V8_IS_HEAPOBJECT(ptr) \
(((ptr) & V8_HeapObjectTagMask) == V8_HeapObjectTag)
/*
* Extract the value of a SMI "pointer". Recall that small integers are stored
* using the upper 31 bits.
*/
#define V8_SMI_VALUE(smi) ((smi) >> (V8_SmiValueShift + V8_SmiShiftSize))
/*
* Determine the encoding and representation of a V8 string.
*/
#define V8_TYPE_STRING(type) (((type) & V8_IsNotStringMask) == V8_StringTag)
#define V8_STRENC_ASCII(type) \
(((type) & V8_StringEncodingMask) == V8_AsciiStringTag)
#define V8_STRREP_SEQ(type) \
(((type) & V8_StringRepresentationMask) == V8_SeqStringTag)
#define V8_STRREP_CONS(type) \
(((type) & V8_StringRepresentationMask) == V8_ConsStringTag)
#define V8_STRREP_SLICED(type) \
(((type) & V8_StringRepresentationMask) == V8_SlicedStringTag)
#define V8_STRREP_EXT(type) \
(((type) & V8_StringRepresentationMask) == V8_ExternalStringTag)
/*
* Several of the following constants and transformations are hardcoded in V8 as
* well, so there's no way to extract them programmatically from the binary.
*/
#define V8_DESC_KEYIDX(x) ((x) + V8_PROP_IDX_FIRST)
#define V8_DESC_VALIDX(x) ((x) << 1)
#define V8_DESC_DETIDX(x) (((x) << 1) + 1)
#define V8_DESC_ISFIELD(x) \
((V8_SMI_VALUE(x) & V8_PROP_TYPE_MASK) == V8_PROP_TYPE_FIELD)
#endif /* _V8DBG_H */

1
deps/npm/.npmignore vendored
View File

@@ -10,7 +10,6 @@ npm-debug.log
node_modules/ronn
node_modules/tap
node_modules/.bin
node_modules/npm-registry-mock
/npmrc
/release/

93
deps/npm/AUTHORS vendored
View File

@@ -1,48 +1,48 @@
# Authors sorted by whether or not they're me
Isaac Z. Schlueter <i@izs.me>
Steve Steiner <ssteinerX@gmail.com>
Mikeal Rogers <mikeal.rogers@gmail.com>
Aaron Blohowiak <aaron.blohowiak@gmail.com>
Martyn Smith <martyn@dollyfish.net.nz>
Mathias Pettersson <mape@mape.me>
Brian Hammond <brian@fictorial.com>
Charlie Robbins <charlie.robbins@gmail.com>
Francisco Treacy <francisco.treacy@gmail.com>
Cliffano Subagio <cliffano@gmail.com>
Christian Eager <christian.eager@nokia.com>
Dav Glass <davglass@gmail.com>
Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)
Steve Steiner <ssteinerX@gmail.com> (http://websaucesoftware.com/blog/)
Mikeal Rogers <mikeal.rogers@gmail.com> (http://www.mikealrogers.com/)
Aaron Blohowiak <aaron.blohowiak@gmail.com> (http://aaronblohowiak.com/)
Martyn Smith <martyn@dollyfish.net.nz> (http://dollyfish.net.nz/)
Mathias Pettersson <mape@mape.me> (http://mape.me/)
Brian Hammond <brian@fictorial.com> (http://fictorial.com/)
Charlie Robbins <charlie.robbins@gmail.com> (http://www.charlierobbins.com/)
Francisco Treacy <francisco.treacy@gmail.com> (http://franciscotreacy.com/)
Cliffano Subagio <cliffano@gmail.com> (http://blog.cliffano.com/)
Christian Eager <christian.eager@nokia.com> (http://perpenduum.com)
Dav Glass <davglass@gmail.com> (http://blog.davglass.com)
Alex K. Wolfe <alexkwolfe@gmail.com>
James Sanders <jimmyjazz14@gmail.com>
Reid Burke <me@reidburke.com>
Arlo Breault <arlolra@gmail.com>
Timo Derstappen <teemow@gmail.com>
James Sanders <jimmyjazz14@gmail.com> (http://james-sanders.com/)
Reid Burke <me@reidburke.com> (http://reidburke.com/)
Arlo Breault <arlolra@gmail.com> (http://thoughtherder.com/)
Timo Derstappen <teemow@gmail.com> (http://teemow.com)
Bradley Meck <bradley.meck@gmail.com>
Bart Teeuwisse <bart.teeuwisse@thecodemill.biz>
Ben Noordhuis <info@bnoordhuis.nl>
Tor Valamo <tor.valamo@gmail.com>
Whyme.Lyu <5longluna@gmail.com>
Bart Teeuwisse <bart.teeuwisse@thecodemill.biz> (http://thecodemill.biz/)
Ben Noordhuis <info@bnoordhuis.nl> (http://bnoordhuis.nl/)
Tor Valamo <tor.valamo@gmail.com> (http://www.magnimedia.no/)
Whyme.Lyu <5longluna@gmail.com> (http://whyme.kuantu.com/)
Olivier Melcher <olivier.melcher@gmail.com>
Tomaž Muraus <kami@k5-storitve.net>
Evan Meagher <evan.meagher@gmail.com>
Orlando Vazquez <ovazquez@gmail.com>
Tomaž Muraus <kami@k5-storitve.net> (http://www.tomaz-muraus.info)
Evan Meagher <evan.meagher@gmail.com> (http://evanmeagher.net/)
Orlando Vazquez <ovazquez@gmail.com> (http://2wycked.net/)
George Miroshnykov <gmiroshnykov@lohika.com>
Geoff Flarity <geoff.flarity@gmail.com>
Geoff Flarity (http://ca.linkedin.com/pub/geoff-flarity/a/536/43a)
Pete Kruckenberg <pete@kruckenberg.com>
Laurie Harper <laurie@holoweb.net>
Laurie Harper <laurie@holoweb.net> (http://laurie.holoweb.net/)
Chris Wong <chris@chriswongstudio.com>
Max Goodman <c@chromacode.com>
Max Goodman <c@chromacode.com> (http://chromacode.com/)
Scott Bronson <brons_github@rinspin.com>
Federico Romero <federomero@gmail.com>
Visnu Pitiyanuvath <visnupx@gmail.com>
Irakli Gozalishvili <rfobic@gmail.com>
Mark Cahill <mark@tiemonster.info>
Visnu Pitiyanuvath <visnupx@gmail.com> (http://visnup.com)
Irakli Gozalishvili <rfobic@gmail.com> (http://jeditoolkit.com/)
Mark Cahill <mark@tiemonster.info> (http://www.tiemonster.info/)
Zearin <zearin@gonk.net>
Iain Sproat <iainsproat@gmail.com>
Trent Mick <trentm@gmail.com>
Felix Geisendörfer <felix@debuggable.com>
Conny Brunnkvist <cbrunnkvist@gmail.com>
Will Elwood <w.elwood08@gmail.com>
Oleg Efimov <efimovov@gmail.com>
Trent Mick <trentm@gmail.com> (http://trentm.com/)
Felix Geisendörfer <felix@debuggable.com> (http://www.debuggable.com/)
Conny Brunnkvist <cbrunnkvist@gmail.com> (http://twitter.com/connyb)
Will Elwood <w.elwood08@gmail.com> (https://github.com/welwood08)
Oleg Efimov <efimovov@gmail.com> (http://sannis.ru)
Martin Cooper <mfncooper@gmail.com>
Jameson Little <t.jameson.little@gmail.com>
cspotcode <cspotcode@gmail.com>
@@ -90,28 +90,3 @@ Paul Miller <paul@paulmillr.com>
seebees <seebees@gmail.com>
Carl Lange <carl@flax.ie>
Jan Lehnardt <jan@apache.org>
Alexey Kreschuk <akrsch@gmail.com>
Di Wu <dwu@palantir.com>
Florian Margaine <florian@margaine.com>
Forbes Lindesay <forbes@lindesay.co.uk>
Ian Babrou <ibobrik@gmail.com>
Jaakko Manninen <jaakko@rocketpack.fi>
Johan Nordberg <its@johan-nordberg.com>
Johan Sköld <johan@skold.cc>
Larz Conwell <larz@larz-laptop.(none)>
Luke Arduini <luke.arduini@gmail.com>
Marcel Klehr <mklehr@gmx.net>
Mathias Bynens <mathias@qiwi.be>
Matt Lunn <matt@mattlunn.me.uk>
Matt McClure <matt.mcclure@mapmyfitness.com>
Nirk Niggler <nirk.niggler@gmail.com>
Paolo Fragomeni <paolo@async.ly>
Jake Verbaten (Raynos) <raynos2@gmail.com>
Robert Kowalski <rok@kowalski.gd>
Schabse Laks <Dev@SLaks.net>
Stuart Knightley <stuart@stuartk.com>
Stuart P. Bentley <stuart@testtrack4.com>
Vaz Allen <vaz@tryptid.com>
elisee <elisee@sparklin.org>
Evan You <yyx990803@gmail.com>
Wil Moore III <wil.moore@wilmoore.com>

256
deps/npm/LICENSE vendored
View File

@@ -1,218 +1,42 @@
Copyright (c) Isaac Z. Schlueter
Copyright (c) Isaac Z. Schlueter (the "Original Author")
All rights reserved.
npm is released under the Artistic License 2.0.
The text of the License follows:
MIT +no-false-attribs License
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
Distributions of all or part of the Software intended to be used
by the recipients as they would use the unmodified Software,
containing modifications that substantially alter, remove, or
disable functionality of the Software, outside of the documented
configuration mechanisms provided by the Software, shall be
modified such that the Original Author's bug reporting email
addresses and urls are either replaced with the contact information
of the parties responsible for the changes, or removed entirely.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
--------
The Artistic License 2.0
Copyright (c) 2000-2006, The Perl Foundation.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
This license establishes the terms under which a given free software
Package may be copied, modified, distributed, and/or redistributed.
The intent is that the Copyright Holder maintains some artistic
control over the development of that Package while still keeping the
Package available as open source and free software.
You are always permitted to make arrangements wholly outside of this
license directly with the Copyright Holder of a given Package. If the
terms of this license do not permit the full use that you propose to
make of the Package, you should contact the Copyright Holder and seek
a different licensing arrangement.
Definitions
"Copyright Holder" means the individual(s) or organization(s)
named in the copyright notice for the entire Package.
"Contributor" means any party that has contributed code or other
material to the Package, in accordance with the Copyright Holder's
procedures.
"You" and "your" means any person who would like to copy,
distribute, or modify the Package.
"Package" means the collection of files distributed by the
Copyright Holder, and derivatives of that collection and/or of
those files. A given Package may consist of either the Standard
Version, or a Modified Version.
"Distribute" means providing a copy of the Package or making it
accessible to anyone else, or in the case of a company or
organization, to others outside of your company or organization.
"Distributor Fee" means any fee that you charge for Distributing
this Package or providing support for this Package to another
party. It does not mean licensing fees.
"Standard Version" refers to the Package if it has not been
modified, or has been modified only in ways explicitly requested
by the Copyright Holder.
"Modified Version" means the Package, if it has been changed, and
such changes were not explicitly requested by the Copyright
Holder.
"Original License" means this Artistic License as Distributed with
the Standard Version of the Package, in its current version or as
it may be modified by The Perl Foundation in the future.
"Source" form means the source code, documentation source, and
configuration files for the Package.
"Compiled" form means the compiled bytecode, object code, binary,
or any other form resulting from mechanical transformation or
translation of the Source form.
Permission for Use and Modification Without Distribution
(1) You are permitted to use the Standard Version and create and use
Modified Versions for any purpose without restriction, provided that
you do not Distribute the Modified Version.
Permissions for Redistribution of the Standard Version
(2) You may Distribute verbatim copies of the Source form of the
Standard Version of this Package in any medium without restriction,
either gratis or for a Distributor Fee, provided that you duplicate
all of the original copyright notices and associated disclaimers. At
your discretion, such verbatim copies may or may not include a
Compiled form of the Package.
(3) You may apply any bug fixes, portability changes, and other
modifications made available from the Copyright Holder. The resulting
Package will still be considered the Standard Version, and as such
will be subject to the Original License.
Distribution of Modified Versions of the Package as Source
(4) You may Distribute your Modified Version as Source (either gratis
or for a Distributor Fee, and with or without a Compiled form of the
Modified Version) provided that you clearly document how it differs
from the Standard Version, including, but not limited to, documenting
any non-standard features, executables, or modules, and provided that
you do at least ONE of the following:
(a) make the Modified Version available to the Copyright Holder
of the Standard Version, under the Original License, so that the
Copyright Holder may include your modifications in the Standard
Version.
(b) ensure that installation of your Modified Version does not
prevent the user installing or running the Standard Version. In
addition, the Modified Version must bear a name that is different
from the name of the Standard Version.
(c) allow anyone who receives a copy of the Modified Version to
make the Source form of the Modified Version available to others
under
(i) the Original License or
(ii) a license that permits the licensee to freely copy,
modify and redistribute the Modified Version using the same
licensing terms that apply to the copy that the licensee
received, and requires that the Source form of the Modified
Version, and of any works derived from it, be made freely
available in that license fees are prohibited but Distributor
Fees are allowed.
Distribution of Compiled Forms of the Standard Version
or Modified Versions without the Source
(5) You may Distribute Compiled forms of the Standard Version without
the Source, provided that you include complete instructions on how to
get the Source of the Standard Version. Such instructions must be
valid at the time of your distribution. If these instructions, at any
time while you are carrying out such distribution, become invalid, you
must provide new instructions on demand or cease further distribution.
If you provide valid instructions or cease distribution within thirty
days after you become aware that the instructions are invalid, then
you do not forfeit any of your rights under this license.
(6) You may Distribute a Modified Version in Compiled form without
the Source, provided that you comply with Section 4 with respect to
the Source of the Modified Version.
Aggregating or Linking the Package
(7) You may aggregate the Package (either the Standard Version or
Modified Version) with other packages and Distribute the resulting
aggregation provided that you do not charge a licensing fee for the
Package. Distributor Fees are permitted, and licensing fees for other
components in the aggregation are permitted. The terms of this license
apply to the use and Distribution of the Standard or Modified Versions
as included in the aggregation.
(8) You are permitted to link Modified and Standard Versions with
other works, to embed the Package in a larger work of your own, or to
build stand-alone binary or bytecode versions of applications that
include the Package, and Distribute the result without restriction,
provided the result does not expose a direct interface to the Package.
Items That are Not Considered Part of a Modified Version
(9) Works (including, but not limited to, modules and scripts) that
merely extend or make use of the Package, do not, by themselves, cause
the Package to be a Modified Version. In addition, such works are not
considered parts of the Package itself, and are not subject to the
terms of this license.
General Provisions
(10) Any use, modification, and distribution of the Standard or
Modified Versions is governed by this Artistic License. By using,
modifying or distributing the Package, you accept this license. Do not
use, modify, or distribute the Package, if you do not accept this
license.
(11) If your Modified Version has been derived from a Modified
Version made by someone other than you, you are nevertheless required
to ensure that your Modified Version complies with the requirements of
this license.
(12) This license does not grant you the right to use any trademark,
service mark, tradename, or logo of the Copyright Holder.
(13) This license includes the non-exclusive, worldwide,
free-of-charge patent license to make, have made, use, offer to sell,
sell, import and otherwise transfer the Package with respect to any
patent claims licensable by the Copyright Holder that are necessarily
infringed by the Package. If you institute patent litigation
(including a cross-claim or counterclaim) against any party alleging
that the Package constitutes direct or contributory patent
infringement, then this Artistic License to you shall terminate on the
date that such litigation is filed.
(14) Disclaimer of Warranty:
THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------
Except where noted, this license applies to any and all software
programs and associated documentation files created by the
Original Author, when distributed with the Software.
"Node.js" and "node" trademark Joyent, Inc. npm is not officially
part of the Node.js project, and is neither owned by nor
@@ -231,5 +55,11 @@ Copyright (c) by Tjarda Koster, http://jelloween.deviantart.com
included for use in the npm website and documentation,
used with permission.
This program uses several Node modules contained in the node_modules/
subdirectory, according to the terms of their respective licenses.
This program uses "request", Copyright (c) Mikeal Rogers,
according to the terms of the Apache license.
This program uses "mkdirp", Copyright (c) James Halliday,
according to the terms of the MIT/X11 license.
This program uses "opener", Copyright (c) Domenic Denicola,
according to the terms of the DWTFPL2 license.

8
deps/npm/Makefile vendored
View File

@@ -71,7 +71,7 @@ link: uninstall
node cli.js link -f
clean: ronnclean doc-clean uninstall
rm -rf npmrc
rm npmrc
node cli.js cache clean
uninstall:
@@ -154,13 +154,13 @@ html/doc/misc/%.html: doc/misc/%.md $(html_docdeps)
ronn: node_modules/.bin/ronn
node_modules/.bin/ronn:
node cli.js install ronn --no-global
node cli.js install ronn
doc: man
man: $(cli_docs) $(api_docs)
test: doc
test:
node cli.js test
publish: link doc
@@ -214,6 +214,6 @@ release:
@bash scripts/release.sh
sandwich:
@[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || (echo "make it yourself" && exit 13)
@[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || echo "make it yourself" && exit 13
.PHONY: all latest install dev link doc clean uninstall test man doc-publish doc-clean docclean docpublish release zip-publish

9
deps/npm/README.md vendored
View File

@@ -179,8 +179,9 @@ you should [read this](https://npmjs.org/doc/developers.html)
## Legal Stuff
"npm" and "the npm registry" are owned by Isaac Z. Schlueter.
All rights reserved. See the included LICENSE file for more details.
"npm" and "the npm registry" are owned by Isaac Z. Schlueter. All
rights not explicitly granted in the MIT license are reserved. See the
included LICENSE file for more details.
"Node.js" and "node" are trademarks owned by Joyent, Inc. npm is not
officially part of the Node.js project, and is neither owned by nor
@@ -233,6 +234,6 @@ will no doubt tell you to put the output in a gist or email.
## SEE ALSO
* npm(1)
* npm-faq(7)
* npm-faq(1)
* npm-help(1)
* npm-index(7)
* npm-index(1)

View File

@@ -1,19 +0,0 @@
npm-repo(3) -- Open package repository page in the browser
========================================================
## SYNOPSIS
npm.commands.repo(package, callback)
## DESCRIPTION
This command tries to guess at the likely location of a package's
repository URL, and then tries to open it using the `--browser`
config param.
Like other commands, the first parameter is an array. This command only
uses the first element, which is expected to be a package name with an
optional version number.
This command will launch a browser, so this command may not be the most
friendly for programmatic use.

View File

@@ -4,7 +4,7 @@ npm(3) -- node package manager
## SYNOPSIS
var npm = require("npm")
npm.load([configObject], function (er, npm) {
npm.load([configObject,] function (er, npm) {
// use the npm object, now that it's loaded.
npm.config.set(key, val)

View File

@@ -15,7 +15,7 @@ The username, password, and email are read in from prompts.
You may use this command to change your email address, but not username
or password.
To reset your password, go to <https://npmjs.org/forgot>
To reset your password, go to <http://admin.npmjs.org/>
You may use this command multiple times with the same user account to
authorize on a new machine.

View File

@@ -13,7 +13,7 @@ Print the folder where npm will install executables.
* npm-prefix(1)
* npm-root(1)
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -4,14 +4,12 @@ npm-bugs(1) -- Bugs for a package in a web browser maybe
## SYNOPSIS
npm bugs <pkgname>
npm bugs (with no args in a package dir)
## DESCRIPTION
This command tries to guess at the likely location of a package's
bug tracker URL, and then tries to open it using the `--browser`
config param. If no package name is provided, it will search for
a `package.json` in the current folder and use the `name` property.
config param.
## CONFIGURATION

View File

@@ -33,9 +33,9 @@ Used to add, list, or clear the npm cache folder.
## DETAILS
npm stores cache data in the directory specified in `npm config get cache`.
For each package that is added to the cache, three pieces of information are
stored in `{cache}/{name}/{version}`:
npm stores cache data in `$HOME/.npm`. For each package that is added
to the cache, three pieces of information are stored in
`{cache}/{name}/{version}`:
* .../package/:
A folder containing the package contents as they appear in the tarball.
@@ -57,13 +57,13 @@ they do not make an HTTP request to the registry.
### cache
Default: `~/.npm` on Posix, or `%AppData%/npm-cache` on Windows.
Default: `$HOME/.npm` on Posix, or `$HOME/npm-cache` on Windows.
The root cache folder.
## SEE ALSO
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -8,7 +8,6 @@ npm-config(1) -- Manage the npm configuration files
npm config delete <key>
npm config list
npm config edit
npm c [set|get|delete|list]
npm get <key>
npm set <key> <value> [--global]

View File

@@ -4,7 +4,6 @@ npm-dedupe(1) -- Reduce duplication
## SYNOPSIS
npm dedupe [package names...]
npm ddp [package names...]
## DESCRIPTION
@@ -47,10 +46,6 @@ registry.
This feature is experimental, and may change in future versions.
The `--tag` argument will apply to all of the affected dependencies. If a
tag with the given name exists, the tagged version is preferred over newer
versions.
## SEE ALSO
* npm-ls(1)

View File

@@ -4,16 +4,13 @@ npm-docs(1) -- Docs for a package in a web browser maybe
## SYNOPSIS
npm docs <pkgname>
npm docs (with no args in a package dir)
npm home <pkgname>
npm home (with no args in a package dir)
## DESCRIPTION
This command tries to guess at the likely location of a package's
documentation URL, and then tries to open it using the `--browser`
config param. If no package name is provided, it will search for
a `package.json` in the current folder and use the `name` property.
config param.
## CONFIGURATION

View File

@@ -29,7 +29,7 @@ The command to run for `npm edit` or `npm config edit`.
## SEE ALSO
* npm-folders(5)
* npm-folders(7)
* npm-explore(1)
* npm-install(1)
* npm-config(1)

View File

@@ -33,7 +33,7 @@ The shell to run for the `npm explore` command.
## SEE ALSO
* npm-submodule(1)
* npm-folders(5)
* npm-folders(7)
* npm-edit(1)
* npm-rebuild(1)
* npm-build(1)

View File

@@ -31,7 +31,7 @@ Set to `"browser"` to view html help content in the default web browser.
* npm(1)
* README
* npm-faq(7)
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -11,7 +11,7 @@ npm-install(1) -- Install a package
npm install <name>@<tag>
npm install <name>@<version>
npm install <name>@<version range>
npm i (with any of the previous argument usage)
npm install <name>@<version range>
## DESCRIPTION
@@ -43,9 +43,6 @@ after packing it up into a tarball (b).
it installs the current package context (ie, the current working
directory) as a global package.
By default, `npm install` will install all modules listed as
dependencies. With the `--production` flag,
npm will not install modules listed in `devDependencies`.
* `npm install <folder>`:
@@ -155,9 +152,7 @@ For example:
npm install sax@">=0.1.0 <0.2.0" bench supervisor
The `--tag` argument will apply to all of the specified install targets. If a
tag with the given name exists, the tagged version is preferred over newer
versions.
The `--tag` argument will apply to all of the specified install targets.
The `--force` argument will force npm to fetch remote resources even if a
local copy exists on disk.
@@ -165,7 +160,7 @@ local copy exists on disk.
npm install sax --force
The `--global` argument will cause npm to install the package globally
rather than locally. See `npm-folders(5)`.
rather than locally. See `npm-folders(7)`.
The `--link` argument will cause npm to link global installs into the
local space in some cases.
@@ -173,9 +168,6 @@ local space in some cases.
The `--no-bin-links` argument will prevent npm from creating symlinks for
any binaries the package might contain.
The `--no-optional` argument will prevent optional dependencies from
being installed.
The `--no-shrinkwrap` argument, which will ignore an available
shrinkwrap file and use the package.json instead.
@@ -210,7 +202,7 @@ this algorithm produces:
That is, the dependency from B to C is satisfied by the fact that A
already caused C to be installed at a higher level.
See npm-folders(5) for a more detailed description of the specific
See npm-folders(7) for a more detailed description of the specific
folder structures that npm creates.
### Limitations of npm's Install Algorithm
@@ -236,7 +228,7 @@ affects a real use-case, it will be investigated.
## SEE ALSO
* npm-folders(5)
* npm-folders(7)
* npm-update(1)
* npm-link(1)
* npm-rebuild(1)
@@ -246,7 +238,7 @@ affects a real use-case, it will be investigated.
* npm-config(7)
* npmrc(5)
* npm-registry(7)
* npm-folders(5)
* npm-folders(7)
* npm-tag(1)
* npm-rm(1)
* npm-shrinkwrap(1)

View File

@@ -5,7 +5,6 @@ npm-link(1) -- Symlink a package folder
npm link (in package folder)
npm link <pkgname>
npm ln (with any of the previous argument usage)
## DESCRIPTION
@@ -17,7 +16,7 @@ symbolic link from `prefix/package-name` to the current folder.
Next, in some other location, `npm link package-name` will create a
symlink from the local `node_modules` folder to the global symlink.
Note that `package-name` is taken from `package.json`,
Note that `package-name` is taken from `package.json` ,
not from directory name.
When creating tarballs for `npm publish`, the linked packages are
@@ -57,7 +56,7 @@ installation target into your project's `node_modules` folder.
* npm-faq(7)
* package.json(5)
* npm-install(1)
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -66,7 +66,7 @@ project.
* npm-config(1)
* npm-config(7)
* npmrc(5)
* npm-folders(5)
* npm-folders(7)
* npm-install(1)
* npm-link(1)
* npm-prune(1)

View File

@@ -10,12 +10,8 @@ npm-outdated(1) -- Check for outdated packages
This command will check the registry to see if any (or, specific) installed
packages are currently outdated.
The resulting field 'wanted' shows the latest version according to the
version specified in the package.json, the field 'latest' the very latest
version of the package.
## SEE ALSO
* npm-update(1)
* npm-registry(7)
* npm-folders(5)
* npm-folders(7)

View File

@@ -13,7 +13,7 @@ Print the prefix to standard out.
* npm-root(1)
* npm-bin(1)
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -4,7 +4,6 @@ npm-prune(1) -- Remove extraneous packages
## SYNOPSIS
npm prune [<name> [<name ...]]
npm prune [<name> [<name ...]] [--production]
## DESCRIPTION
@@ -15,11 +14,8 @@ removed.
Extraneous packages are packages that are not listed on the parent
package's dependencies list.
If the `--production` flag is specified, this command will remove the
packages specified in your `devDependencies`.
## SEE ALSO
* npm-rm(1)
* npm-folders(5)
* npm-ls(1)
* npm-folders(7)
* npm-list(1)

View File

@@ -4,7 +4,6 @@ npm-rebuild(1) -- Rebuild a package
## SYNOPSIS
npm rebuild [<name> [<name> ...]]
npm rb [<name> [<name> ...]]
* `<name>`:
The package to rebuild

View File

@@ -1,28 +0,0 @@
npm-repo(1) -- Open package repository page in the browser
========================================================
## SYNOPSIS
npm repo <pkgname>
npm repo (with no args in a package dir)
## DESCRIPTION
This command tries to guess at the likely location of a package's
repository URL, and then tries to open it using the `--browser`
config param. If no package name is provided, it will search for
a `package.json` in the current folder and use the `name` property.
## CONFIGURATION
### browser
* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
* Type: String
The browser that is called by the `npm repo` command to open websites.
## SEE ALSO
* npm-docs(1)
* npm-config(1)

View File

@@ -4,9 +4,7 @@ npm-rm(1) -- Remove a package
## SYNOPSIS
npm rm <name>
npm r <name>
npm uninstall <name>
npm un <name>
## DESCRIPTION
@@ -17,7 +15,7 @@ on its behalf.
* npm-prune(1)
* npm-install(1)
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -13,7 +13,7 @@ Print the effective `node_modules` folder to standard out.
* npm-prefix(1)
* npm-bin(1)
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -4,8 +4,6 @@ npm-search(1) -- Search for packages
## SYNOPSIS
npm search [search terms ...]
npm s [search terms ...]
npm se [search terms ...]
## DESCRIPTION

View File

@@ -182,4 +182,4 @@ contents rather than versions.
* npm-install(1)
* package.json(5)
* npm-ls(1)
* npm-list(1)

View File

@@ -10,24 +10,9 @@ npm-tag(1) -- Tag a published version
Tags the specified version of the package with the specified tag, or the
`--tag` config if not specified.
A tag can be used when installing packages as a reference to a version instead
of using a specific version number:
npm install <name>@<tag>
When installing dependencies, a preferred tagged version may be specified:
npm install --tag <tag>
This also applies to `npm dedupe`.
Publishing a package always sets the "latest" tag to the published version.
## SEE ALSO
* npm-publish(1)
* npm-install(1)
* npm-dedupe(1)
* npm-registry(7)
* npm-config(1)
* npm-config(7)

View File

@@ -4,7 +4,6 @@ npm-test(1) -- Test a package
## SYNOPSIS
npm test <name>
npm tst <name>
## DESCRIPTION

View File

@@ -15,7 +15,7 @@ on its behalf.
* npm-prune(1)
* npm-install(1)
* npm-folders(5)
* npm-folders(7)
* npm-config(1)
* npm-config(7)
* npmrc(5)

View File

@@ -20,5 +20,5 @@ If no package name is specified, all packages in the specified location (global
* npm-install(1)
* npm-outdated(1)
* npm-registry(7)
* npm-folders(5)
* npm-ls(1)
* npm-folders(7)
* npm-list(1)

View File

@@ -3,7 +3,7 @@ npm-version(1) -- Bump a package version
## SYNOPSIS
npm version [<newversion> | major | minor | patch]
npm version [<newversion> | major | minor | patch | build]
## DESCRIPTION
@@ -11,7 +11,7 @@ Run this in a package directory to bump the version and write the new
data back to the package.json file.
The `newversion` argument should be a valid semver string, *or* a valid
second argument to semver.inc (one of "patch", "minor", or
second argument to semver.inc (one of "build", "patch", "minor", or
"major"). In the second case, the existing version will be incremented
by 1 in the specified field.
@@ -42,4 +42,4 @@ in your git config for this to work properly. For example:
* npm-init(1)
* package.json(5)
* semver(7)
* npm-semver(7)

View File

@@ -4,7 +4,6 @@ npm-view(1) -- View registry info
## SYNOPSIS
npm view <name>[@<version>] [<field>[.<subfield>]...]
npm v <name>[@<version>] [<field>[.<subfield>]...]
## DESCRIPTION

View File

@@ -33,7 +33,7 @@ Use `npm ls` to show everything you've installed.
## DIRECTORIES
See `npm-folders(5)` to learn about where npm puts stuff.
See `npm-folders(7)` to learn about where npm puts stuff.
In particular, npm has two modes of operation:
@@ -132,6 +132,10 @@ as expected. The `npm-debug.log` file is also helpful to provide.
You can also look for isaacs in #node.js on irc://irc.freenode.net. He
will no doubt tell you to put the output in a gist or email.
## HISTORY
See npm-changelog(1)
## AUTHOR
[Isaac Z. Schlueter](http://blog.izs.me/) ::

View File

@@ -9,6 +9,32 @@ file. It must be actual JSON, not just a JavaScript object literal.
A lot of the behavior described in this document is affected by the config
settings described in `npm-config(7)`.
## DEFAULT VALUES
npm will default some values based on package contents.
* `"scripts": {"start": "node server.js"}`
If there is a `server.js` file in the root of your package, then npm
will default the `start` command to `node server.js`.
* `"scripts":{"preinstall": "node-waf clean || true; node-waf configure build"}`
If there is a `wscript` file in the root of your package, npm will
default the `preinstall` command to compile using node-waf.
* `"scripts":{"preinstall": "node-gyp rebuild"}`
If there is a `binding.gyp` file in the root of your package, npm will
default the `preinstall` command to compile using node-gyp.
* `"contributors": [...]`
If there is an `AUTHORS` file in the root of your package, npm will
treat each line as a `Name <email> (url)` format, where email and url
are optional. Lines which start with a `#` or are blank, will be
ignored.
## name
The *most* important things in your package.json are the name and version fields.
@@ -42,7 +68,18 @@ Version must be parseable by
[node-semver](https://github.com/isaacs/node-semver), which is bundled
with npm as a dependency. (`npm install semver` to use it yourself.)
More on version numbers and ranges at semver(7).
Here's how npm's semver implementation deviates from what's on semver.org:
* Versions can start with "v"
* A numeric item separated from the main three-number version by a hyphen
will be interpreted as a "build" number, and will *increase* the version.
But, if the tag is not a number separated by a hyphen, then it's treated
as a pre-release tag, and is *less than* the version without a tag.
So, `0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta`
This is a little bit confusing to explain, but matches what you see in practice
when people create tags in git like "v1.2.3" and then do "git describe" to generate
a patch version.
## description
@@ -86,18 +123,21 @@ If a url is provided, it will be used by the `npm bugs` command.
You should specify a license for your package so that people know how they are
permitted to use it, and any restrictions you're placing on it.
The simplest way, assuming you're using a common license such as BSD-3-Clause
or MIT, is to just specify the standard SPDX ID of the license you're using,
like this:
The simplest way, assuming you're using a common license such as BSD or MIT, is
to just specify the name of the license you're using, like this:
{ "license" : "BSD-3-Clause" }
{ "license" : "BSD" }
You can check [the full list of SPDX license IDs](https://spdx.org/licenses/).
Ideally you should pick one that is
[OSI](http://opensource.org/licenses/alphabetical) approved.
If you have more complex licensing terms, or you want to provide more detail
in your package.json file, you can use the more verbose plural form, like this:
It's also a good idea to include a LICENSE file at the top level in
your package.
"licenses" : [
{ "type" : "MyLicense"
, "url" : "http://github.com/owner/project/path/to/license"
}
]
It's also a good idea to include a license file at the top level in your package.
## people fields: author, contributors
@@ -295,30 +335,30 @@ configs.
## dependencies
Dependencies are specified with a simple hash of package name to
version range. The version range is a string which has one or more
space-separated descriptors. Dependencies can also be identified with
a tarball or git URL.
Dependencies are specified with a simple hash of package name to version
range. The version range is EITHER a string which has one or more
space-separated descriptors, OR a range like "fromVersion - toVersion"
**Please do not put test harnesses or transpilers in your
`dependencies` hash.** See `devDependencies`, below.
**Please do not put test harnesses in your `dependencies` hash.** See
`devDependencies`, below.
See semver(7) for more details about specifying version ranges.
Version range descriptors may be any of the following styles, where "version"
is a semver compatible version identifier.
* `version` Must match `version` exactly
* `=version` Same as just `version`
* `>version` Must be greater than `version`
* `>=version` etc
* `<version`
* `<=version`
* `~version` "Approximately equivalent to version" See semver(7)
* `1.2.x` 1.2.0, 1.2.1, etc., but not 1.3.0
* `~version` See 'Tilde Version Ranges' below
* `1.2.x` See 'X Version Ranges' below
* `http://...` See 'URLs as Dependencies' below
* `*` Matches any version
* `""` (just an empty string) Same as `*`
* `version1 - version2` Same as `>=version1 <=version2`.
* `range1 || range2` Passes if either range1 or range2 are satisfied.
* `git...` See 'Git URLs as Dependencies' below
* `user/repo` See 'GitHub URLs' below
For example, these are all valid:
@@ -336,9 +376,40 @@ For example, these are all valid:
}
}
### Tilde Version Ranges
A range specifier starting with a tilde `~` character is matched against
a version in the following fashion.
* The version must be at least as high as the range.
* The version must be less than the next major revision above the range.
For example, the following are equivalent:
* `"~1.2.3" = ">=1.2.3 <1.3.0"`
* `"~1.2" = ">=1.2.0 <1.3.0"`
* `"~1" = ">=1.0.0 <1.1.0"`
### X Version Ranges
An "x" in a version range specifies that the version number must start
with the supplied digits, but any digit may be used in place of the x.
The following are equivalent:
* `"1.2.x" = ">=1.2.0 <1.3.0"`
* `"1.x.x" = ">=1.0.0 <2.0.0"`
* `"1.2" = "1.2.x"`
* `"1.x" = "1.x.x"`
* `"1" = "1.x.x"`
You may not supply a comparator with a version containing an x. Any
digits after the first "x" are ignored.
### URLs as Dependencies
You may specify a tarball URL in place of a version range.
Starting with npm version 0.2.14, you may specify a tarball URL in place
of a version range.
This tarball will be downloaded and installed locally to your package at
install time.
@@ -356,20 +427,6 @@ Git urls can be of the form:
The `commit-ish` can be any tag, sha, or branch which can be supplied as
an argument to `git checkout`. The default is `master`.
## GitHub URLs
As of version 1.1.65, you can refer to GitHub urls as just "foo": "user/foo-project". For example:
```json
{
"name": "foo",
"version": "0.0.0",
"dependencies": {
"express": "visionmedia/express"
}
}
```
## devDependencies
If someone is planning on downloading and using your module in their
@@ -379,35 +436,11 @@ the external test or documentation framework that you use.
In this case, it's best to list these additional items in a
`devDependencies` hash.
These things will be installed when doing `npm link` or `npm install`
from the root of a package, and can be managed like any other npm
These things will be installed whenever the `--dev` configuration flag
is set. This flag is set automatically when doing `npm link` or when doing
`npm install` from the root of a package, and can be managed like any other npm
configuration param. See `npm-config(7)` for more on the topic.
For build steps that are not platform-specific, such as compiling
CoffeeScript or other languages to JavaScript, use the `prepublish`
script to do this, and make the required package a devDependency.
For example:
```json
{ "name": "ethopia-waza",
"description": "a delightfully fruity coffee varietal",
"version": "1.2.3",
"devDependencies": {
"coffee-script": "~1.6.3"
},
"scripts": {
"prepublish": "coffee -o lib/ -c src/waza.coffee"
},
"main": "lib/waza.js"
}
```
The `prepublish` script will be run before publishing, so that users
can consume the functionality without requiring them to compile it
themselves. In dev mode (ie, locally running `npm install`), it'll
run this script as well, so that you can test it easily.
## bundledDependencies
Array of package names that will be bundled when publishing the package.
@@ -448,7 +481,7 @@ Entries in `optionalDependencies` will override entries of the same name in
You can specify the version of node that your stuff works on:
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
{ "engines" : { "node" : ">=0.1.27 <0.1.30" } }
And, like with dependencies, if you don't specify the version (or if you
specify "\*" as the version), then any version of node will do.
@@ -541,30 +574,9 @@ Any config values can be overridden, but of course only "tag" and
See `npm-config(7)` to see the list of config options that can be
overridden.
## DEFAULT VALUES
npm will default some values based on package contents.
* `"scripts": {"start": "node server.js"}`
If there is a `server.js` file in the root of your package, then npm
will default the `start` command to `node server.js`.
* `"scripts":{"preinstall": "node-gyp rebuild"}`
If there is a `binding.gyp` file in the root of your package, npm will
default the `preinstall` command to compile using node-gyp.
* `"contributors": [...]`
If there is an `AUTHORS` file in the root of your package, npm will
treat each line as a `Name <email> (url)` format, where email and url
are optional. Lines which start with a `#` or are blank, will be
ignored.
## SEE ALSO
* semver(7)
* npm-semver(7)
* npm-init(1)
* npm-version(1)
* npm-config(1)

View File

@@ -146,7 +146,7 @@ See also the `strict-ssl` config.
### cache
* Default: Windows: `%AppData%\npm-cache`, Posix: `~/.npm`
* Default: Windows: `%APPDATA%\npm-cache`, Posix: `~/.npm`
* Type: path
The location of npm's cache directory. See `npm-cache(1)`
@@ -194,13 +194,6 @@ re-checking against the registry.
Note that no purging is done unless the `npm cache clean` command is
explicitly used, and that only GET requests use the cache.
### cert
* Default: `null`
* Type: String
A client certificate to pass when accessing the registry.
### color
* Default: true on Posix, false on Windows
@@ -209,6 +202,14 @@ A client certificate to pass when accessing the registry.
If false, never shows colors. If `"always"` then always shows colors.
If true, then only prints color codes for tty file descriptors.
### coverage
* Default: false
* Type: Boolean
A flag to tell test-harness to run with their coverage options enabled,
if they respond to the `npm_config_coverage` environment variable.
### depth
* Default: Infinity
@@ -242,12 +243,6 @@ set.
The command to run for `npm edit` or `npm config edit`.
### email
The email of the logged-in user.
Set by the `npm adduser` command. Should not be set explicitly.
### engine-strict
* Default: false
@@ -310,13 +305,6 @@ The command to use for git commands. If git is installed on the
computer, but is not in the `PATH`, then set this to the full path to
the git binary.
### git-tag-version
* Default: `true`
* Type: Boolean
Tag the commit when using the `npm version` command.
### global
* Default: false
@@ -324,7 +312,7 @@ Tag the commit when using the `npm version` command.
Operates in "global" mode, so that packages are installed into the
`prefix` folder instead of the current working directory. See
`npm-folders(5)` for more on the differences in behavior.
`npm-folders(7)` for more on the differences in behavior.
* packages are installed into the `{prefix}/lib/node_modules` folder, instead of the
current working directory.
@@ -338,6 +326,17 @@ Operates in "global" mode, so that packages are installed into the
The config file to read for global config options.
### globalignorefile
* Default: {prefix}/etc/npmignore
* Type: path
The config file to read for global ignore patterns to apply to all users
and all projects.
If not found, but there is a "gitignore" file in the
same directory, then that will be used instead.
### group
* Default: GID of the current process
@@ -346,13 +345,6 @@ The config file to read for global config options.
The group to use when running package scripts in global mode as the root
user.
### heading
* Default: `"npm"`
* Type: String
The string that starts all the debugging log output.
### https-proxy
* Default: the `HTTPS_PROXY` or `https_proxy` or `HTTP_PROXY` or
@@ -361,12 +353,20 @@ The string that starts all the debugging log output.
A proxy to use for outgoing https requests.
### ignore-scripts
### user-agent
* Default: false
* Type: Boolean
* Default: node/{process.version} {process.platform} {process.arch}
* Type: String
If true, npm does not run scripts specified in package.json files.
Sets a User-Agent to the request header
### ignore
* Default: ""
* Type: string
A white-space separated list of glob patterns of files to always exclude
from packages when building tarballs.
### init-module
@@ -378,6 +378,13 @@ documentation for the
[init-package-json](https://github.com/isaacs/init-package-json) module
for more information, or npm-init(1).
### init.version
* Default: "0.0.0"
* Type: semver
The value `npm init` should use by default for the package version.
### init.author.name
* Default: ""
@@ -399,13 +406,6 @@ The value `npm init` should use by default for the package author's email.
The value `npm init` should use by default for the package author's homepage.
### init.license
* Default: "BSD-2-Clause"
* Type: String
The value `npm init` should use by default for the package license.
### json
* Default: false
@@ -417,13 +417,6 @@ This feature is currently experimental, and the output data structures
for many commands is either not implemented in JSON yet, or subject to
change. Only the output from `npm ls --json` is currently valid.
### key
* Default: `null`
* Type: String
A client key to pass when accessing the registry.
### link
* Default: false
@@ -440,14 +433,6 @@ if one of the two conditions are met:
* the globally installed version is identical to the version that is
being installed locally.
### local-address
* Default: undefined
* Type: IP Address
The IP address of the local interface to use when making connections
to the npm registry. Must be IPv4 in versions of Node prior to 0.12.
### loglevel
* Default: "http"
@@ -503,7 +488,15 @@ The node version to use when checking package's "engines" hash.
* Default: false
* Type: Boolean
Run tests on installation.
Run tests on installation and report results to the
`npaturl`.
### npaturl
* Default: Not yet implemented
* Type: url
The url to report npat test results.
### onload-script
@@ -532,7 +525,7 @@ standard output.
### prefix
* Default: see npm-folders(5)
* Default: see npm-folders(7)
* Type: path
The location to install global items. If set on the command line, then
@@ -763,6 +756,16 @@ The username on the npm registry. Set with `npm adduser`
The location of user-level configuration settings.
### userignorefile
* Default: ~/.npmignore
* Type: path
The location of a user-level ignore file to apply to all packages.
If not found, but there is a .gitignore file in the same directory, then
that will be used instead.
### umask
* Default: 022
@@ -775,13 +778,6 @@ Folders and executables are given a mode which is `0777` masked against
this value. Other files are given a mode which is `0666` masked against
this value. Thus, the defaults are `0755` and `0644` respectively.
### user-agent
* Default: node/{process.version} {process.platform} {process.arch}
* Type: String
Sets a User-Agent to the request header
### version
* Default: false
@@ -810,6 +806,17 @@ The program to use to view help content.
Set to `"browser"` to view html help content in the default web browser.
### yes
* Default: null
* Type: Boolean or null
If set to `null`, then prompt the user for responses in some
circumstances.
If set to `true`, then answer "yes" to any prompt. If set to `false`
then answer "no" to any prompt.
## SEE ALSO
* npm-config(1)

View File

@@ -277,7 +277,6 @@ Windows:
* <http://github.com/marcelklehr/nodist>
* <https://github.com/hakobera/nvmw>
* <https://github.com/nanjingboy/nvmw>
## How can I use npm for development?

View File

@@ -115,10 +115,6 @@ Publish a package
Rebuild a package
## npm-repo(1)
Open package repository page in the browser
## npm-restart(1)
Start a package
@@ -285,10 +281,6 @@ Publish a package
Rebuild a package
## npm-repo(3)
Open package repository page in the browser
## npm-restart(3)
Start a package

View File

@@ -53,8 +53,33 @@ otherwise.
## Do I have to use couchdb to build a registry that npm can talk to?
No, but it's way easier. Basically, yes, you do, or you have to
effectively implement the entire CouchDB API anyway.
No, but it's way easier.
## I published something elsewhere, and want to tell the npm registry about it.
That is supported, but not using the npm client. You'll have to get
your hands dirty and do some HTTP. The request looks something like
this:
PUT /my-foreign-package
content-type:application/json
accept:application/json
authorization:Basic $base_64_encoded
{ "name":"my-foreign-package"
, "maintainers":["owner","usernames"]
, "description":"A package that is hosted elsewhere"
, "keywords":["nih","my cheese smells the best"]
, "url":"http://my-different-registry.com/blerg/my-local-package"
}
(Keywords and description are optional, but recommended. Name,
maintainers, and url are required.)
Then, when a user tries to install "my-foreign-package", it'll redirect
to your registry. If that doesn't resolve to a valid package entry,
then it'll fail, so please make sure that you understand the spec, and
ask for help on the <npm-@googlegroups.com> mailing list.
## Is there a website or something to see package docs and such?

View File

@@ -33,7 +33,7 @@ following scripts:
Run by the `npm restart` command. Note: `npm restart` will run the
stop and start scripts if no `restart` script is provided.
Additionally, arbitrary scripts can be run by doing
Additionally, arbitrary scrips can be run by doing
`npm run-script <stage> <pkg>`.
## NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN

View File

@@ -185,8 +185,9 @@ you should <a href="https://npmjs.org/doc/developers.html">read this</a></p>
<h2 id="Legal-Stuff">Legal Stuff</h2>
<p>&quot;npm&quot; and &quot;the npm registry&quot; are owned by Isaac Z. Schlueter.
All rights reserved. See the included LICENSE file for more details.</p>
<p>&quot;npm&quot; and &quot;the npm registry&quot; are owned by Isaac Z. Schlueter. All
rights not explicitly granted in the MIT license are reserved. See the
included LICENSE file for more details.</p>
<p>&quot;Node.js&quot; and &quot;node&quot; are trademarks owned by Joyent, Inc. npm is not
officially part of the Node.js project, and is neither owned by nor
@@ -237,9 +238,9 @@ will no doubt tell you to put the output in a gist or email.</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<ul><li><a href="cli/npm.html">npm(1)</a></li><li><a href="misc/npm-faq.html">npm-faq(7)</a></li><li><a href="cli/npm-help.html">npm-help(1)</a></li><li><a href="misc/npm-index.html">npm-index(7)</a></li></ul>
<ul><li><a href="cli/npm.html">npm(1)</a></li><li><a href="cli/npm-faq.html">npm-faq(1)</a></li><li><a href="cli/npm-help.html">npm-help(1)</a></li><li><a href="cli/npm-index.html">npm-index(1)</a></li></ul>
</div>
<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.3.23</p>
<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -19,7 +19,7 @@
<p>This function should not be used programmatically. Instead, just refer
to the <code>npm.bin</code> member.</p>
</div>
<p id="footer">npm-bin &mdash; npm@1.3.23</p>
<p id="footer">npm-bin &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -25,7 +25,7 @@ optional version number.</p>
<p>This command will launch a browser, so this command may not be the most
friendly for programmatic use.</p>
</div>
<p id="footer">npm-bugs &mdash; npm@1.3.23</p>
<p id="footer">npm-bugs &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -28,7 +28,7 @@ usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
<ul><li><a href="../misc/npm-index.html">npm-index(7)</a></li></ul>
</div>
<p id="footer">npm-commands &mdash; npm@1.3.23</p>
<p id="footer">npm-commands &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -33,7 +33,7 @@ functions instead.</p>
<ul><li><a href="../api/npm.html">npm(3)</a></li></ul>
</div>
<p id="footer">npm-config &mdash; npm@1.3.23</p>
<p id="footer">npm-config &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -32,7 +32,7 @@ install the package.</p></li></ul>
<ul><li><a href="../api/npm-publish.html">npm-publish(3)</a></li><li><a href="../api/npm-unpublish.html">npm-unpublish(3)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li></ul>
</div>
<p id="footer">npm-deprecate &mdash; npm@1.3.23</p>
<p id="footer">npm-deprecate &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -25,7 +25,7 @@ optional version number.</p>
<p>This command will launch a browser, so this command may not be the most
friendly for programmatic use.</p>
</div>
<p id="footer">npm-docs &mdash; npm@1.3.23</p>
<p id="footer">npm-docs &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -30,7 +30,7 @@ to open. The package can optionally have a version number attached.</p>
<p>Since this command opens an editor in a new process, be careful about where
and how this is used.</p>
</div>
<p id="footer">npm-edit &mdash; npm@1.3.23</p>
<p id="footer">npm-edit &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -24,7 +24,7 @@ sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
<p>The first element in the &#39;args&#39; parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
</div>
<p id="footer">npm-explore &mdash; npm@1.3.23</p>
<p id="footer">npm-explore &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -32,7 +32,7 @@ Name of the file that matched</li></ul>
<p>The silent parameter is not neccessary not used, but it may in the future.</p>
</div>
<p id="footer">npm-help-search &mdash; npm@1.3.23</p>
<p id="footer">npm-help-search &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -35,7 +35,7 @@ then go ahead and use this programmatically.</p>
<p><a href="../files/package.json.html">package.json(5)</a></p>
</div>
<p id="footer">npm-init &mdash; npm@1.3.23</p>
<p id="footer">npm-init &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -25,7 +25,7 @@ the name of a package to be installed.</p>
<p>Finally, &#39;callback&#39; is a function that will be called when all packages have been
installed or when an error has been encountered.</p>
</div>
<p id="footer">npm-install &mdash; npm@1.3.23</p>
<p id="footer">npm-install &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -39,7 +39,7 @@ npm.commands.link(&#39;redis&#39;, cb) # link-install the package</code></pre>
<p>Now, any changes to the redis package will be reflected in
the package in the current working directory</p>
</div>
<p id="footer">npm-link &mdash; npm@1.3.23</p>
<p id="footer">npm-link &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -32,7 +32,7 @@ config object.</p>
<p>For a list of all the available command-line configs, see <code>npm help config</code></p>
</div>
<p id="footer">npm-load &mdash; npm@1.3.23</p>
<p id="footer">npm-load &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -59,7 +59,7 @@ project.</p>
This means that if a submodule a same dependency as a parent module, then the
dependency will only be output once.</p>
</div>
<p id="footer">npm-ls &mdash; npm@1.3.23</p>
<p id="footer">npm-ls &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -19,7 +19,7 @@ currently outdated.</p>
<p>If the &#39;packages&#39; parameter is left out, npm will check all packages.</p>
</div>
<p id="footer">npm-outdated &mdash; npm@1.3.23</p>
<p id="footer">npm-outdated &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -34,7 +34,7 @@ that is not implemented at this time.</p>
<ul><li><a href="../api/npm-publish.html">npm-publish(3)</a></li><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li></ul>
</div>
<p id="footer">npm-owner &mdash; npm@1.3.23</p>
<p id="footer">npm-owner &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -25,7 +25,7 @@ overwritten the second time.</p>
<p>If no arguments are supplied, then npm packs the current package folder.</p>
</div>
<p id="footer">npm-pack &mdash; npm@1.3.23</p>
<p id="footer">npm-pack &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -21,7 +21,7 @@
<p>This function is not useful programmatically</p>
</div>
<p id="footer">npm-prefix &mdash; npm@1.3.23</p>
<p id="footer">npm-prefix &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -23,7 +23,7 @@
<p>Extraneous packages are packages that are not listed on the parent
package&#39;s dependencies list.</p>
</div>
<p id="footer">npm-prune &mdash; npm@1.3.23</p>
<p id="footer">npm-prune &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -32,7 +32,7 @@ the registry. Overwrites when the &quot;force&quot; environment variable is set
<ul><li><a href="../misc/npm-registry.html">npm-registry(7)</a></li><li><a href="../cli/npm-adduser.html">npm-adduser(1)</a></li><li><a href="../api/npm-owner.html">npm-owner(3)</a></li></ul>
</div>
<p id="footer">npm-publish &mdash; npm@1.3.23</p>
<p id="footer">npm-publish &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -22,7 +22,7 @@ the new binary. If no &#39;packages&#39; parameter is specify, every package wil
<p>See <code>npm help build</code></p>
</div>
<p id="footer">npm-rebuild &mdash; npm@1.3.23</p>
<p id="footer">npm-rebuild &mdash; npm@1.3.4</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")

View File

@@ -1,59 +0,0 @@
<!doctype html>
<html>
<title>npm-repo</title>
<meta http-equiv="content-type" value="text/html;utf-8">
<link rel="stylesheet" type="text/css" href="../../static/style.css">
<body>
<div id="wrapper">
<h1><a href="../api/npm-repo.html">npm-repo</a></h1> <p>Open package repository page in the browser</p>
<h2 id="SYNOPSIS">SYNOPSIS</h2>
<pre><code>npm.commands.repo(package, callback)</code></pre>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>This command tries to guess at the likely location of a package&#39;s
repository URL, and then tries to open it using the <code>--browser</code>
config param.</p>
<p>Like other commands, the first parameter is an array. This command only
uses the first element, which is expected to be a package name with an
optional version number.</p>
<p>This command will launch a browser, so this command may not be the most
friendly for programmatic use.</p>
</div>
<p id="footer">npm-repo &mdash; npm@1.3.23</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
var els = Array.prototype.slice.call(wrapper.getElementsByTagName("*"), 0)
.filter(function (el) {
return el.parentNode === wrapper
&& el.tagName.match(/H[1-6]/)
&& el.id
})
var l = 2
, toc = document.createElement("ul")
toc.innerHTML = els.map(function (el) {
var i = el.tagName.charAt(1)
, out = ""
while (i > l) {
out += "<ul>"
l ++
}
while (i < l) {
out += "</ul>"
l --
}
out += "<li><a href='#" + el.id + "'>" +
( el.innerText || el.text || el.innerHTML)
+ "</a>"
return out
}).join("\n")
toc.id = "toc"
document.body.appendChild(toc)
})()
</script>

Some files were not shown because too many files have changed in this diff Show More