瀏覽代碼

remove server directory in favor of the cli package

Manfred Kroehnert 12 年之前
父節點
當前提交
e156a4e543
共有 2 個文件被更改,包括 0 次插入18348 次删除
  1. 0 777
      server/FileServer.st
  2. 0 17571
      server/server.js

+ 0 - 777
server/FileServer.st

@@ -1,777 +0,0 @@
-Smalltalk current createPackage: 'FileServer'!
-Object subclass: #FileServer
-	instanceVariableNames: 'path http fs url host port basePath util username password fallbackPage'
-	package: 'FileServer'!
-
-!FileServer methodsFor: 'accessing'!
-
-basePath
-	^basePath ifNil: ['./']
-!
-
-basePath: aString
-	basePath := aString
-!
-
-fallbackPage
-	^fallbackPage
-!
-
-fallbackPage: aString
-	fallbackPage := aString
-!
-
-host
-	^host
-!
-
-host: hostname
-	host := hostname
-!
-
-password: aPassword
-	password := aPassword.
-!
-
-port
-	^port
-!
-
-port: aNumber
-	port := aNumber
-!
-
-username: aUsername
-	username := aUsername.
-!
-
-username: aUsername password: aPassword
-	username := aUsername.
-	password := aPassword.
-! !
-
-!FileServer methodsFor: 'initialization'!
-
-checkDirectoryLayout
-	(fs existsSync: self basePath, 'index.html') ifFalse: [
-		console warn: 'Warning: project directory does not contain index.html'].
-	(fs existsSync: self basePath, 'st') ifFalse: [
-		console warn: 'Warning: project directory is missing an "st" directory'].
-	(fs existsSync: self basePath, 'js') ifFalse: [
-		console warn: 'Warning: project directory is missing a "js" directory'].
-!
-
-initialize
-	super initialize.
-	path := self require: 'path'.
-	http := self require: 'http'.
-	fs := self require: 'fs'.
-	util := self require: 'util'.
-	url := self require: 'url'.
-	host := self class defaultHost.
-	port := self class defaultPort.
-	username := nil.
-	password := nil.
-	fallbackPage := nil.
-! !
-
-!FileServer methodsFor: 'private'!
-
-base64Decode: aString
-	<return (new Buffer(aString, 'base64').toString())>
-!
-
-isAuthenticated: aRequest
-	"Basic HTTP Auth: http://stackoverflow.com/a/5957629/293175
-	 and https://gist.github.com/1686663"
-	| header token auth parts|
-
-	(username isNil and: [password isNil]) ifTrue: [^true].
-
-	"get authentication header"
-	header := (aRequest headers at: 'authorization') ifNil:[''].
-	(header isEmpty)
-	ifTrue: [^false]
-	ifFalse: [
-		"get authentication token"
-		token := (header tokenize: ' ') ifNil:[''].
-		"convert back from base64"
-		auth := self base64Decode: (token at: 2).
-		"split token at colon"
-		parts := auth tokenize: ':'.
-
-		((username = (parts at: 1)) and: [password = (parts at: 2)])
-			ifTrue: [^true]
-			ifFalse: [^false]
-	].
-!
-
-require: aModuleString
-	"call to the require function"
-	^require value: aModuleString
-!
-
-writeData: data toFileNamed: aFilename
-	console log: aFilename
-! !
-
-!FileServer methodsFor: 'request handling'!
-
-handleGETRequest: aRequest respondTo: aResponse
-	| uri filename |
-	uri := (url parse: aRequest url) pathname.
-	filename := path join: self basePath with: uri.
-	fs exists: filename do: [:aBoolean |
-		aBoolean
-			ifFalse: [self respondNotFoundTo: aResponse]
-			ifTrue: [self respondFileNamed: filename to: aResponse]]
-!
-
-handleOPTIONSRequest: aRequest respondTo: aResponse
-	aResponse writeHead: 200 options: #{'Access-Control-Allow-Origin' -> '*'.
-					'Access-Control-Allow-Methods' -> 'GET, PUT, POST, DELETE, OPTIONS'.
-					'Access-Control-Allow-Headers' -> 'Content-Type, Accept'.
-					'Content-Length' -> 0.
-					'Access-Control-Max-Age' -> 10}.
-	aResponse end
-!
-
-handlePUTRequest: aRequest respondTo: aResponse
-	| file stream |
-	(self isAuthenticated: aRequest)
-		ifFalse: [self respondAuthenticationRequiredTo: aResponse. ^nil].
-
-	file := '.', aRequest url.
-	stream := fs createWriteStream: file.
-
-	stream on: 'error' do: [:error |
-		console warn: 'Error creating WriteStream for file ', file.
-		console warn: '    Did you forget to create the necessary js/ or st/ directory in your project?'.
-		console warn: '    The exact error is: ', error.
-		self respondNotCreatedTo: aResponse].
-
-	stream on: 'close' do: [
-		self respondCreatedTo: aResponse].
-
-	aRequest setEncoding: 'utf8'.
-	aRequest on: 'data' do: [:data |
-		stream write: data].
-
-	aRequest on: 'end' do: [
-		stream writable ifTrue: [stream end]]
-!
-
-handleRequest: aRequest respondTo: aResponse
-	aRequest method = 'PUT'
-		ifTrue: [self handlePUTRequest: aRequest respondTo: aResponse].
-	aRequest method = 'GET'
-		ifTrue:[self handleGETRequest: aRequest respondTo: aResponse].
-	aRequest method = 'OPTIONS'
-		ifTrue:[self handleOPTIONSRequest: aRequest respondTo: aResponse]
-!
-
-respondAuthenticationRequiredTo: aResponse
-	aResponse
-		writeHead: 401 options: #{'WWW-Authenticate' -> 'Basic realm="Secured Developer Area"'};
-		write: '<html><body>Authentication needed</body></html>';
-		end.
-!
-
-respondCreatedTo: aResponse
-	aResponse
-		writeHead: 201 options: #{'Content-Type' -> 'text/plain'. 'Access-Control-Allow-Origin' -> '*'};
-		end.
-!
-
-respondFileNamed: aFilename to: aResponse
-	| type filename |
-
-	filename := aFilename.
-	(fs statSync: aFilename) isDirectory ifTrue: [
-		filename := filename, 'index.html'].
-
-	fs readFile: filename do: [:ex :file |
-		ex notNil 
-			ifTrue: [
-				console log: filename, ' does not exist'.
-				self respondInternalErrorTo: aResponse]
-			ifFalse: [
-				type := self class mimeTypeFor: filename.
-				type = 'application/javascript'
-					ifTrue: [ type:=type,';charset=utf-8' ].
-				aResponse 
-					writeHead: 200 options:  #{'Content-Type' -> type};
-					write: file encoding: 'binary';
-					end]]
-!
-
-respondInternalErrorTo: aResponse
-	aResponse 
-		writeHead: 500 options: #{'Content-Type' -> 'text/plain'};
-		write: '500 Internal server error';
-		end
-!
-
-respondNotCreatedTo: aResponse
-	aResponse
-		writeHead: 400 options: #{'Content-Type' -> 'text/plain'};
-		write: 'File could not be created. Did you forget to create the st/js directories on the server?';
-		end.
-!
-
-respondNotFoundTo: aResponse
-	self fallbackPage isNil ifFalse: [^self respondFileNamed: self fallbackPage to: aResponse].
-	aResponse 
-		writeHead: 404 options: #{'Content-Type' -> 'text/plain'};
-		write: '404 Not found';
-		end
-!
-
-respondOKTo: aResponse
-	aResponse
-		writeHead: 200 options: #{'Content-Type' -> 'text/plain'. 'Access-Control-Allow-Origin' -> '*'};
-		end.
-! !
-
-!FileServer methodsFor: 'starting'!
-
-start
-	"Checks if required directory layout is present (issue warning if not).
-	 Afterwards start the server."
-	self checkDirectoryLayout.
-	(http createServer: [:request :response |
-	      self handleRequest: request respondTo: response])
-	      on: 'error' do: [:error | console log: 'Error starting server: ', error];
-	      on: 'listening' do: [console log: 'Starting file server on ', self host, ':', self port asString];
-	      listen: self port host: self host.
-!
-
-startOn: aPort
-	self port: aPort.
-	self start
-! !
-
-FileServer class instanceVariableNames: 'mimeTypes'!
-
-!FileServer class methodsFor: 'accessing'!
-
-commandLineSwitches
-	"Collect all methodnames from the 'accessing' protocol
-	 and select the ones with only one parameter.
-	 Then remove the ':' at the end of the name
-	 and add a '--' at the beginning.
-	 Additionally all uppercase letters are made lowercase and preceded by a '-'.
-	 Example: fallbackPage: becomes --fallback-page.
-	 Return the Array containing the commandline switches."
-	| switches |
-	switches := ((self methodsInProtocol: 'accessing') collect: [ :each | each selector]).
-	switches := switches select: [ :each | each match: '^[^:]*:$'].
-	switches :=switches collect: [ :each |
-		(each allButLast replace: '([A-Z])' with: '-$1') asLowercase replace: '^([a-z])' with: '--$1' ].
-	^switches
-!
-
-defaultMimeTypes
-	^ #{
-		'%' -> 'application/x-trash'.
-		'323' -> 'text/h323'.
-		'abw' -> 'application/x-abiword'.
-		'ai' -> 'application/postscript'.
-		'aif' -> 'audio/x-aiff'.
-		'aifc' -> 'audio/x-aiff'.
-		'aiff' -> 'audio/x-aiff'.
-		'alc' -> 'chemical/x-alchemy'.
-		'art' -> 'image/x-jg'.
-		'asc' -> 'text/plain'.
-		'asf' -> 'video/x-ms-asf'.
-		'asn' -> 'chemical/x-ncbi-asn1-spec'.
-		'aso' -> 'chemical/x-ncbi-asn1-binary'.
-		'asx' -> 'video/x-ms-asf'.
-		'au' -> 'audio/basic'.
-		'avi' -> 'video/x-msvideo'.
-		'b' -> 'chemical/x-molconn-Z'.
-		'bak' -> 'application/x-trash'.
-		'bat' -> 'application/x-msdos-program'.
-		'bcpio' -> 'application/x-bcpio'.
-		'bib' -> 'text/x-bibtex'.
-		'bin' -> 'application/octet-stream'.
-		'bmp' -> 'image/x-ms-bmp'.
-		'book' -> 'application/x-maker'.
-		'bsd' -> 'chemical/x-crossfire'.
-		'c' -> 'text/x-csrc'.
-		'c++' -> 'text/x-c++src'.
-		'c3d' -> 'chemical/x-chem3d'.
-		'cac' -> 'chemical/x-cache'.
-		'cache' -> 'chemical/x-cache'.
-		'cascii' -> 'chemical/x-cactvs-binary'.
-		'cat' -> 'application/vnd.ms-pki.seccat'.
-		'cbin' -> 'chemical/x-cactvs-binary'.
-		'cc' -> 'text/x-c++src'.
-		'cdf' -> 'application/x-cdf'.
-		'cdr' -> 'image/x-coreldraw'.
-		'cdt' -> 'image/x-coreldrawtemplate'.
-		'cdx' -> 'chemical/x-cdx'.
-		'cdy' -> 'application/vnd.cinderella'.
-		'cef' -> 'chemical/x-cxf'.
-		'cer' -> 'chemical/x-cerius'.
-		'chm' -> 'chemical/x-chemdraw'.
-		'chrt' -> 'application/x-kchart'.
-		'cif' -> 'chemical/x-cif'.
-		'class' -> 'application/java-vm'.
-		'cls' -> 'text/x-tex'.
-		'cmdf' -> 'chemical/x-cmdf'.
-		'cml' -> 'chemical/x-cml'.
-		'cod' -> 'application/vnd.rim.cod'.
-		'com' -> 'application/x-msdos-program'.
-		'cpa' -> 'chemical/x-compass'.
-		'cpio' -> 'application/x-cpio'.
-		'cpp' -> 'text/x-c++src'.
-		'cpt' -> 'image/x-corelphotopaint'.
-		'crl' -> 'application/x-pkcs7-crl'.
-		'crt' -> 'application/x-x509-ca-cert'.
-		'csf' -> 'chemical/x-cache-csf'.
-		'csh' -> 'text/x-csh'.
-		'csm' -> 'chemical/x-csml'.
-		'csml' -> 'chemical/x-csml'.
-		'css' -> 'text/css'.
-		'csv' -> 'text/comma-separated-values'.
-		'ctab' -> 'chemical/x-cactvs-binary'.
-		'ctx' -> 'chemical/x-ctx'.
-		'cu' -> 'application/cu-seeme'.
-		'cub' -> 'chemical/x-gaussian-cube'.
-		'cxf' -> 'chemical/x-cxf'.
-		'cxx' -> 'text/x-c++src'.
-		'dat' -> 'chemical/x-mopac-input'.
-		'dcr' -> 'application/x-director'.
-		'deb' -> 'application/x-debian-package'.
-		'dif' -> 'video/dv'.
-		'diff' -> 'text/plain'.
-		'dir' -> 'application/x-director'.
-		'djv' -> 'image/vnd.djvu'.
-		'djvu' -> 'image/vnd.djvu'.
-		'dl' -> 'video/dl'.
-		'dll' -> 'application/x-msdos-program'.
-		'dmg' -> 'application/x-apple-diskimage'.
-		'dms' -> 'application/x-dms'.
-		'doc' -> 'application/msword'.
-		'dot' -> 'application/msword'.
-		'dv' -> 'video/dv'.
-		'dvi' -> 'application/x-dvi'.
-		'dx' -> 'chemical/x-jcamp-dx'.
-		'dxr' -> 'application/x-director'.
-		'emb' -> 'chemical/x-embl-dl-nucleotide'.
-		'embl' -> 'chemical/x-embl-dl-nucleotide'.
-		'ent' -> 'chemical/x-pdb'.
-		'eps' -> 'application/postscript'.
-		'etx' -> 'text/x-setext'.
-		'exe' -> 'application/x-msdos-program'.
-		'ez' -> 'application/andrew-inset'.
-		'fb' -> 'application/x-maker'.
-		'fbdoc' -> 'application/x-maker'.
-		'fch' -> 'chemical/x-gaussian-checkpoint'.
-		'fchk' -> 'chemical/x-gaussian-checkpoint'.
-		'fig' -> 'application/x-xfig'.
-		'flac' -> 'application/x-flac'.
-		'fli' -> 'video/fli'.
-		'fm' -> 'application/x-maker'.
-		'frame' -> 'application/x-maker'.
-		'frm' -> 'application/x-maker'.
-		'gal' -> 'chemical/x-gaussian-log'.
-		'gam' -> 'chemical/x-gamess-input'.
-		'gamin' -> 'chemical/x-gamess-input'.
-		'gau' -> 'chemical/x-gaussian-input'.
-		'gcd' -> 'text/x-pcs-gcd'.
-		'gcf' -> 'application/x-graphing-calculator'.
-		'gcg' -> 'chemical/x-gcg8-sequence'.
-		'gen' -> 'chemical/x-genbank'.
-		'gf' -> 'application/x-tex-gf'.
-		'gif' -> 'image/gif'.
-		'gjc' -> 'chemical/x-gaussian-input'.
-		'gjf' -> 'chemical/x-gaussian-input'.
-		'gl' -> 'video/gl'.
-		'gnumeric' -> 'application/x-gnumeric'.
-		'gpt' -> 'chemical/x-mopac-graph'.
-		'gsf' -> 'application/x-font'.
-		'gsm' -> 'audio/x-gsm'.
-		'gtar' -> 'application/x-gtar'.
-		'h' -> 'text/x-chdr'.
-		'h++' -> 'text/x-c++hdr'.
-		'hdf' -> 'application/x-hdf'.
-		'hh' -> 'text/x-c++hdr'.
-		'hin' -> 'chemical/x-hin'.
-		'hpp' -> 'text/x-c++hdr'.
-		'hqx' -> 'application/mac-binhex40'.
-		'hs' -> 'text/x-haskell'.
-		'hta' -> 'application/hta'.
-		'htc' -> 'text/x-component'.
-		'htm' -> 'text/html'.
-		'html' -> 'text/html'.
-		'hxx' -> 'text/x-c++hdr'.
-		'ica' -> 'application/x-ica'.
-		'ice' -> 'x-conference/x-cooltalk'.
-		'ico' -> 'image/x-icon'.
-		'ics' -> 'text/calendar'.
-		'icz' -> 'text/calendar'.
-		'ief' -> 'image/ief'.
-		'iges' -> 'model/iges'.
-		'igs' -> 'model/iges'.
-		'iii' -> 'application/x-iphone'.
-		'inp' -> 'chemical/x-gamess-input'.
-		'ins' -> 'application/x-internet-signup'.
-		'iso' -> 'application/x-iso9660-image'.
-		'isp' -> 'application/x-internet-signup'.
-		'ist' -> 'chemical/x-isostar'.
-		'istr' -> 'chemical/x-isostar'.
-		'jad' -> 'text/vnd.sun.j2me.app-descriptor'.
-		'jar' -> 'application/java-archive'.
-		'java' -> 'text/x-java'.
-		'jdx' -> 'chemical/x-jcamp-dx'.
-		'jmz' -> 'application/x-jmol'.
-		'jng' -> 'image/x-jng'.
-		'jnlp' -> 'application/x-java-jnlp-file'.
-		'jpe' -> 'image/jpeg'.
-		'jpeg' -> 'image/jpeg'.
-		'jpg' -> 'image/jpeg'.
-		'js' -> 'application/javascript'.
-		'kar' -> 'audio/midi'.
-		'key' -> 'application/pgp-keys'.
-		'kil' -> 'application/x-killustrator'.
-		'kin' -> 'chemical/x-kinemage'.
-		'kpr' -> 'application/x-kpresenter'.
-		'kpt' -> 'application/x-kpresenter'.
-		'ksp' -> 'application/x-kspread'.
-		'kwd' -> 'application/x-kword'.
-		'kwt' -> 'application/x-kword'.
-		'latex' -> 'application/x-latex'.
-		'lha' -> 'application/x-lha'.
-		'lhs' -> 'text/x-literate-haskell'.
-		'lsf' -> 'video/x-la-asf'.
-		'lsx' -> 'video/x-la-asf'.
-		'ltx' -> 'text/x-tex'.
-		'lzh' -> 'application/x-lzh'.
-		'lzx' -> 'application/x-lzx'.
-		'm3u' -> 'audio/x-mpegurl'.
-		'm4a' -> 'audio/mpeg'.
-		'maker' -> 'application/x-maker'.
-		'man' -> 'application/x-troff-man'.
-		'mcif' -> 'chemical/x-mmcif'.
-		'mcm' -> 'chemical/x-macmolecule'.
-		'mdb' -> 'application/msaccess'.
-		'me' -> 'application/x-troff-me'.
-		'mesh' -> 'model/mesh'.
-		'mid' -> 'audio/midi'.
-		'midi' -> 'audio/midi'.
-		'mif' -> 'application/x-mif'.
-		'mm' -> 'application/x-freemind'.
-		'mmd' -> 'chemical/x-macromodel-input'.
-		'mmf' -> 'application/vnd.smaf'.
-		'mml' -> 'text/mathml'.
-		'mmod' -> 'chemical/x-macromodel-input'.
-		'mng' -> 'video/x-mng'.
-		'moc' -> 'text/x-moc'.
-		'mol' -> 'chemical/x-mdl-molfile'.
-		'mol2' -> 'chemical/x-mol2'.
-		'moo' -> 'chemical/x-mopac-out'.
-		'mop' -> 'chemical/x-mopac-input'.
-		'mopcrt' -> 'chemical/x-mopac-input'.
-		'mov' -> 'video/quicktime'.
-		'movie' -> 'video/x-sgi-movie'.
-		'mp2' -> 'audio/mpeg'.
-		'mp3' -> 'audio/mpeg'.
-		'mp4' -> 'video/mp4'.
-		'mpc' -> 'chemical/x-mopac-input'.
-		'mpe' -> 'video/mpeg'.
-		'mpeg' -> 'video/mpeg'.
-		'mpega' -> 'audio/mpeg'.
-		'mpg' -> 'video/mpeg'.
-		'mpga' -> 'audio/mpeg'.
-		'ms' -> 'application/x-troff-ms'.
-		'msh' -> 'model/mesh'.
-		'msi' -> 'application/x-msi'.
-		'mvb' -> 'chemical/x-mopac-vib'.
-		'mxu' -> 'video/vnd.mpegurl'.
-		'nb' -> 'application/mathematica'.
-		'nc' -> 'application/x-netcdf'.
-		'nwc' -> 'application/x-nwc'.
-		'o' -> 'application/x-object'.
-		'oda' -> 'application/oda'.
-		'odb' -> 'application/vnd.oasis.opendocument.database'.
-		'odc' -> 'application/vnd.oasis.opendocument.chart'.
-		'odf' -> 'application/vnd.oasis.opendocument.formula'.
-		'odg' -> 'application/vnd.oasis.opendocument.graphics'.
-		'odi' -> 'application/vnd.oasis.opendocument.image'.
-		'odm' -> 'application/vnd.oasis.opendocument.text-master'.
-		'odp' -> 'application/vnd.oasis.opendocument.presentation'.
-		'ods' -> 'application/vnd.oasis.opendocument.spreadsheet'.
-		'odt' -> 'application/vnd.oasis.opendocument.text'.
-		'ogg' -> 'application/ogg'.
-		'old' -> 'application/x-trash'.
-		'oth' -> 'application/vnd.oasis.opendocument.text-web'.
-		'oza' -> 'application/x-oz-application'.
-		'p' -> 'text/x-pascal'.
-		'p7r' -> 'application/x-pkcs7-certreqresp'.
-		'pac' -> 'application/x-ns-proxy-autoconfig'.
-		'pas' -> 'text/x-pascal'.
-		'pat' -> 'image/x-coreldrawpattern'.
-		'pbm' -> 'image/x-portable-bitmap'.
-		'pcf' -> 'application/x-font'.
-		'pcf.Z' -> 'application/x-font'.
-		'pcx' -> 'image/pcx'.
-		'pdb' -> 'chemical/x-pdb'.
-		'pdf' -> 'application/pdf'.
-		'pfa' -> 'application/x-font'.
-		'pfb' -> 'application/x-font'.
-		'pgm' -> 'image/x-portable-graymap'.
-		'pgn' -> 'application/x-chess-pgn'.
-		'pgp' -> 'application/pgp-signature'.
-		'pk' -> 'application/x-tex-pk'.
-		'pl' -> 'text/x-perl'.
-		'pls' -> 'audio/x-scpls'.
-		'pm' -> 'text/x-perl'.
-		'png' -> 'image/png'.
-		'pnm' -> 'image/x-portable-anymap'.
-		'pot' -> 'text/plain'.
-		'ppm' -> 'image/x-portable-pixmap'.
-		'pps' -> 'application/vnd.ms-powerpoint'.
-		'ppt' -> 'application/vnd.ms-powerpoint'.
-		'prf' -> 'application/pics-rules'.
-		'prt' -> 'chemical/x-ncbi-asn1-ascii'.
-		'ps' -> 'application/postscript'.
-		'psd' -> 'image/x-photoshop'.
-		'psp' -> 'text/x-psp'.
-		'py' -> 'text/x-python'.
-		'pyc' -> 'application/x-python-code'.
-		'pyo' -> 'application/x-python-code'.
-		'qt' -> 'video/quicktime'.
-		'qtl' -> 'application/x-quicktimeplayer'.
-		'ra' -> 'audio/x-realaudio'.
-		'ram' -> 'audio/x-pn-realaudio'.
-		'rar' -> 'application/rar'.
-		'ras' -> 'image/x-cmu-raster'.
-		'rd' -> 'chemical/x-mdl-rdfile'.
-		'rdf' -> 'application/rdf+xml'.
-		'rgb' -> 'image/x-rgb'.
-		'rm' -> 'audio/x-pn-realaudio'.
-		'roff' -> 'application/x-troff'.
-		'ros' -> 'chemical/x-rosdal'.
-		'rpm' -> 'application/x-redhat-package-manager'.
-		'rss' -> 'application/rss+xml'.
-		'rtf' -> 'text/rtf'.
-		'rtx' -> 'text/richtext'.
-		'rxn' -> 'chemical/x-mdl-rxnfile'.
-		'sct' -> 'text/scriptlet'.
-		'sd' -> 'chemical/x-mdl-sdfile'.
-		'sd2' -> 'audio/x-sd2'.
-		'sda' -> 'application/vnd.stardivision.draw'.
-		'sdc' -> 'application/vnd.stardivision.calc'.
-		'sdd' -> 'application/vnd.stardivision.impress'.
-		'sdf' -> 'chemical/x-mdl-sdfile'.
-		'sdp' -> 'application/vnd.stardivision.impress'.
-		'sdw' -> 'application/vnd.stardivision.writer'.
-		'ser' -> 'application/java-serialized-object'.
-		'sgf' -> 'application/x-go-sgf'.
-		'sgl' -> 'application/vnd.stardivision.writer-global'.
-		'sh' -> 'text/x-sh'.
-		'shar' -> 'application/x-shar'.
-		'shtml' -> 'text/html'.
-		'sid' -> 'audio/prs.sid'.
-		'sik' -> 'application/x-trash'.
-		'silo' -> 'model/mesh'.
-		'sis' -> 'application/vnd.symbian.install'.
-		'sit' -> 'application/x-stuffit'.
-		'skd' -> 'application/x-koan'.
-		'skm' -> 'application/x-koan'.
-		'skp' -> 'application/x-koan'.
-		'skt' -> 'application/x-koan'.
-		'smf' -> 'application/vnd.stardivision.math'.
-		'smi' -> 'application/smil'.
-		'smil' -> 'application/smil'.
-		'snd' -> 'audio/basic'.
-		'spc' -> 'chemical/x-galactic-spc'.
-		'spl' -> 'application/x-futuresplash'.
-		'src' -> 'application/x-wais-source'.
-		'stc' -> 'application/vnd.sun.xml.calc.template'.
-		'std' -> 'application/vnd.sun.xml.draw.template'.
-		'sti' -> 'application/vnd.sun.xml.impress.template'.
-		'stl' -> 'application/vnd.ms-pki.stl'.
-		'stw' -> 'application/vnd.sun.xml.writer.template'.
-		'sty' -> 'text/x-tex'.
-		'sv4cpio' -> 'application/x-sv4cpio'.
-		'sv4crc' -> 'application/x-sv4crc'.
-		'svg' -> 'image/svg+xml'.
-		'svgz' -> 'image/svg+xml'.
-		'sw' -> 'chemical/x-swissprot'.
-		'swf' -> 'application/x-shockwave-flash'.
-		'swfl' -> 'application/x-shockwave-flash'.
-		'sxc' -> 'application/vnd.sun.xml.calc'.
-		'sxd' -> 'application/vnd.sun.xml.draw'.
-		'sxg' -> 'application/vnd.sun.xml.writer.global'.
-		'sxi' -> 'application/vnd.sun.xml.impress'.
-		'sxm' -> 'application/vnd.sun.xml.math'.
-		'sxw' -> 'application/vnd.sun.xml.writer'.
-		't' -> 'application/x-troff'.
-		'tar' -> 'application/x-tar'.
-		'taz' -> 'application/x-gtar'.
-		'tcl' -> 'text/x-tcl'.
-		'tex' -> 'text/x-tex'.
-		'texi' -> 'application/x-texinfo'.
-		'texinfo' -> 'application/x-texinfo'.
-		'text' -> 'text/plain'.
-		'tgf' -> 'chemical/x-mdl-tgf'.
-		'tgz' -> 'application/x-gtar'.
-		'tif' -> 'image/tiff'.
-		'tiff' -> 'image/tiff'.
-		'tk' -> 'text/x-tcl'.
-		'tm' -> 'text/texmacs'.
-		'torrent' -> 'application/x-bittorrent'.
-		'tr' -> 'application/x-troff'.
-		'ts' -> 'text/texmacs'.
-		'tsp' -> 'application/dsptype'.
-		'tsv' -> 'text/tab-separated-values'.
-		'txt' -> 'text/plain'.
-		'udeb' -> 'application/x-debian-package'.
-		'uls' -> 'text/iuls'.
-		'ustar' -> 'application/x-ustar'.
-		'val' -> 'chemical/x-ncbi-asn1-binary'.
-		'vcd' -> 'application/x-cdlink'.
-		'vcf' -> 'text/x-vcard'.
-		'vcs' -> 'text/x-vcalendar'.
-		'vmd' -> 'chemical/x-vmd'.
-		'vms' -> 'chemical/x-vamas-iso14976'.
-		'vor' -> 'application/vnd.stardivision.writer'.
-		'vrm' -> 'x-world/x-vrml'.
-		'vrml' -> 'x-world/x-vrml'.
-		'vsd' -> 'application/vnd.visio'.
-		'wad' -> 'application/x-doom'.
-		'wav' -> 'audio/x-wav'.
-		'wax' -> 'audio/x-ms-wax'.
-		'wbmp' -> 'image/vnd.wap.wbmp'.
-		'wbxml' -> 'application/vnd.wap.wbxml'.
-		'wk' -> 'application/x-123'.
-		'wm' -> 'video/x-ms-wm'.
-		'wma' -> 'audio/x-ms-wma'.
-		'wmd' -> 'application/x-ms-wmd'.
-		'wml' -> 'text/vnd.wap.wml'.
-		'wmlc' -> 'application/vnd.wap.wmlc'.
-		'wmls' -> 'text/vnd.wap.wmlscript'.
-		'wmlsc' -> 'application/vnd.wap.wmlscriptc'.
-		'wmv' -> 'video/x-ms-wmv'.
-		'wmx' -> 'video/x-ms-wmx'.
-		'wmz' -> 'application/x-ms-wmz'.
-		'wp5' -> 'application/wordperfect5.1'.
-		'wpd' -> 'application/wordperfect'.
-		'wrl' -> 'x-world/x-vrml'.
-		'wsc' -> 'text/scriptlet'.
-		'wvx' -> 'video/x-ms-wvx'.
-		'wz' -> 'application/x-wingz'.
-		'xbm' -> 'image/x-xbitmap'.
-		'xcf' -> 'application/x-xcf'.
-		'xht' -> 'application/xhtml+xml'.
-		'xhtml' -> 'application/xhtml+xml'.
-		'xlb' -> 'application/vnd.ms-excel'.
-		'xls' -> 'application/vnd.ms-excel'.
-		'xlt' -> 'application/vnd.ms-excel'.
-		'xml' -> 'application/xml'.
-		'xpi' -> 'application/x-xpinstall'.
-		'xpm' -> 'image/x-xpixmap'.
-		'xsl' -> 'application/xml'.
-		'xtel' -> 'chemical/x-xtel'.
-		'xul' -> 'application/vnd.mozilla.xul+xml'.
-		'xwd' -> 'image/x-xwindowdump'.
-		'xyz' -> 'chemical/x-xyz'.
-		'zip' -> 'application/zip'.
-		'zmt' -> 'chemical/x-mopac-input'.
-		'~' -> 'application/x-trash'
-	}
-!
-
-defaultHost
-	^'127.0.0.1'
-!
-
-defaultPort
-	^4000
-!
-
-mimeTypeFor: aString
-	^self mimeTypes at: (aString replace: '.*[\.]' with: '') ifAbsent: ['text/plain']
-!
-
-mimeTypes
-	^mimeTypes ifNil: [mimeTypes := self defaultMimeTypes]
-!
-
-selectorForCommandLineSwitch: aSwitch
-	"Remove the trailing '--', add ':' at the end
-	 and replace all occurences of a lowercase letter preceded by a '-' with
-	 the Uppercase letter.
-	 Example: --fallback-page becomes fallbackPage:"
-	^((aSwitch replace: '^--' with: '')
-		replace: '-[a-z]' with: [ :each | each second asUppercase ]), ':'
-!
-
-printHelp
-	console log: 'Available commandline options are:'.
-	console log: '--help'.
-	self commandLineSwitches do: [ :each |
-		console log: each, ' <parameter>']
-! !
-
-!FileServer class methodsFor: 'initialization'!
-
-createServerWithArguments: options
-	"If options are empty return a default FileServer instance.
-	 If options are given loop through them and set the passed in values
-	 on the FileServer instance.
-	 
-	 Commanline options map directly to methods in the 'accessing' protocol
-	 taking one parameter.
-	 Adding a method to this protocol makes it directly settable through
-	 command line options.
-	 "
-	| server popFront front optionName optionValue switches |
-
-	switches := self commandLineSwitches.
-
-	server := self new.
-
-	options ifEmpty: [^server].
-
-	(options size even) ifFalse: [
-		console log: 'Using default parameters.'.
-		console log: 'Wrong commandline options or not enough arguments for: ' , options.
-		console log: 'Use any of the following ones: ', switches.
-		^server].
-
-	popFront := [:args |
-		front := args first.
-		args remove: front.
-		front].
-
-	[options notEmpty] whileTrue: [
-		optionName  := popFront value: options.
-		optionValue := popFront value: options.
-
-		(switches includes: optionName) ifTrue: [
-			optionName := self selectorForCommandLineSwitch: optionName.
-			server perform: optionName withArguments: (Array with: optionValue)]
-			ifFalse: [
-				console log: optionName, ' is not a valid commandline option'.
-				console log: 'Use any of the following ones: ', switches ]].
-	^server.
-!
-
-main
-	"Main entry point for Amber applications.
-	 Creates and starts a FileServer instance."
-	| fileServer args |
-	args := process argv.
-	"Remove the first args which contain the path to the node executable and the script file."
-	args removeFrom: 1 to: 3.
-
-	args detect: [ :each |
-		(each = '--help') ifTrue: [FileServer printHelp]]
-	ifNone: [
-		fileServer := FileServer createServerWithArguments: args.
-		^fileServer start]
-! !

文件差異過大導致無法顯示
+ 0 - 17571
server/server.js


部分文件因文件數量過多而無法顯示