You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							149 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
	
	
							149 lines
						
					
					
						
							3.6 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
Object.defineProperty(exports, '__esModule', { | 
						|
  value: true | 
						|
}); | 
						|
exports.extract = extract; | 
						|
exports.strip = strip; | 
						|
exports.parse = parse; | 
						|
exports.parseWithComments = parseWithComments; | 
						|
exports.print = print; | 
						|
 | 
						|
function _os() { | 
						|
  const data = require('os'); | 
						|
 | 
						|
  _os = function _os() { | 
						|
    return data; | 
						|
  }; | 
						|
 | 
						|
  return data; | 
						|
} | 
						|
 | 
						|
function _detectNewline() { | 
						|
  const data = _interopRequireDefault(require('detect-newline')); | 
						|
 | 
						|
  _detectNewline = function _detectNewline() { | 
						|
    return data; | 
						|
  }; | 
						|
 | 
						|
  return data; | 
						|
} | 
						|
 | 
						|
function _interopRequireDefault(obj) { | 
						|
  return obj && obj.__esModule ? obj : {default: obj}; | 
						|
} | 
						|
 | 
						|
/** | 
						|
 * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. | 
						|
 * | 
						|
 * This source code is licensed under the MIT license found in the | 
						|
 * LICENSE file in the root directory of this source tree. | 
						|
 */ | 
						|
const commentEndRe = /\*\/$/; | 
						|
const commentStartRe = /^\/\*\*/; | 
						|
const docblockRe = /^\s*(\/\*\*?(.|\r?\n)*?\*\/)/; | 
						|
const lineCommentRe = /(^|\s+)\/\/([^\r\n]*)/g; | 
						|
const ltrimNewlineRe = /^(\r?\n)+/; | 
						|
const multilineRe = /(?:^|\r?\n) *(@[^\r\n]*?) *\r?\n *(?![^@\r\n]*\/\/[^]*)([^@\r\n\s][^@\r\n]+?) *\r?\n/g; | 
						|
const propertyRe = /(?:^|\r?\n) *@(\S+) *([^\r\n]*)/g; | 
						|
const stringStartRe = /(\r?\n|^) *\* ?/g; | 
						|
 | 
						|
function extract(contents) { | 
						|
  const match = contents.match(docblockRe); | 
						|
  return match ? match[0].trimLeft() : ''; | 
						|
} | 
						|
 | 
						|
function strip(contents) { | 
						|
  const match = contents.match(docblockRe); | 
						|
  return match && match[0] ? contents.substring(match[0].length) : contents; | 
						|
} | 
						|
 | 
						|
function parse(docblock) { | 
						|
  return parseWithComments(docblock).pragmas; | 
						|
} | 
						|
 | 
						|
function parseWithComments(docblock) { | 
						|
  const line = (0, _detectNewline().default)(docblock) || _os().EOL; | 
						|
 | 
						|
  docblock = docblock | 
						|
    .replace(commentStartRe, '') | 
						|
    .replace(commentEndRe, '') | 
						|
    .replace(stringStartRe, '$1'); // Normalize multi-line directives | 
						|
 | 
						|
  let prev = ''; | 
						|
 | 
						|
  while (prev !== docblock) { | 
						|
    prev = docblock; | 
						|
    docblock = docblock.replace(multilineRe, `${line}$1 $2${line}`); | 
						|
  } | 
						|
 | 
						|
  docblock = docblock.replace(ltrimNewlineRe, '').trimRight(); | 
						|
  const result = Object.create(null); | 
						|
  const comments = docblock | 
						|
    .replace(propertyRe, '') | 
						|
    .replace(ltrimNewlineRe, '') | 
						|
    .trimRight(); | 
						|
  let match; | 
						|
 | 
						|
  while ((match = propertyRe.exec(docblock))) { | 
						|
    // strip linecomments from pragmas | 
						|
    const nextPragma = match[2].replace(lineCommentRe, ''); | 
						|
 | 
						|
    if ( | 
						|
      typeof result[match[1]] === 'string' || | 
						|
      Array.isArray(result[match[1]]) | 
						|
    ) { | 
						|
      result[match[1]] = [].concat(result[match[1]], nextPragma); | 
						|
    } else { | 
						|
      result[match[1]] = nextPragma; | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  return { | 
						|
    comments, | 
						|
    pragmas: result | 
						|
  }; | 
						|
} | 
						|
 | 
						|
function print({comments = '', pragmas = {}}) { | 
						|
  const line = (0, _detectNewline().default)(comments) || _os().EOL; | 
						|
 | 
						|
  const head = '/**'; | 
						|
  const start = ' *'; | 
						|
  const tail = ' */'; | 
						|
  const keys = Object.keys(pragmas); | 
						|
  const printedObject = keys | 
						|
    .map(key => printKeyValues(key, pragmas[key])) | 
						|
    .reduce((arr, next) => arr.concat(next), []) | 
						|
    .map(keyValue => start + ' ' + keyValue + line) | 
						|
    .join(''); | 
						|
 | 
						|
  if (!comments) { | 
						|
    if (keys.length === 0) { | 
						|
      return ''; | 
						|
    } | 
						|
 | 
						|
    if (keys.length === 1 && !Array.isArray(pragmas[keys[0]])) { | 
						|
      const value = pragmas[keys[0]]; | 
						|
      return `${head} ${printKeyValues(keys[0], value)[0]}${tail}`; | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  const printedComments = | 
						|
    comments | 
						|
      .split(line) | 
						|
      .map(textLine => `${start} ${textLine}`) | 
						|
      .join(line) + line; | 
						|
  return ( | 
						|
    head + | 
						|
    line + | 
						|
    (comments ? printedComments : '') + | 
						|
    (comments && keys.length ? start + line : '') + | 
						|
    printedObject + | 
						|
    tail | 
						|
  ); | 
						|
} | 
						|
 | 
						|
function printKeyValues(key, valueOrArray) { | 
						|
  return [].concat(valueOrArray).map(value => `@${key} ${value}`.trim()); | 
						|
}
 | 
						|
 |