diff options
Diffstat (limited to 'node_modules/jest-docblock')
| -rw-r--r-- | node_modules/jest-docblock/LICENSE | 21 | ||||
| -rw-r--r-- | node_modules/jest-docblock/README.md | 108 | ||||
| -rw-r--r-- | node_modules/jest-docblock/build/index.d.ts | 19 | ||||
| -rw-r--r-- | node_modules/jest-docblock/build/index.js | 153 | ||||
| -rw-r--r-- | node_modules/jest-docblock/package.json | 32 | 
5 files changed, 333 insertions, 0 deletions
diff --git a/node_modules/jest-docblock/LICENSE b/node_modules/jest-docblock/LICENSE new file mode 100644 index 0000000..b96dcb0 --- /dev/null +++ b/node_modules/jest-docblock/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +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. diff --git a/node_modules/jest-docblock/README.md b/node_modules/jest-docblock/README.md new file mode 100644 index 0000000..ba3fc7b --- /dev/null +++ b/node_modules/jest-docblock/README.md @@ -0,0 +1,108 @@ +# jest-docblock + +`jest-docblock` is a package that can extract and parse a specially-formatted comment called a "docblock" at the top of a file. + +A docblock looks like this: + +```js +/** + * Stuff goes here! + */ +``` + +Docblocks can contain pragmas, which are words prefixed by `@`: + +```js +/** + * Pragma incoming! + * + * @flow + */ +``` + +Pragmas can also take arguments: + +```js +/** + * Check this out: + * + * @myPragma it is so cool + */ +``` + +`jest-docblock` can: + +- extract the docblock from some code as a string +- parse a docblock string's pragmas into an object +- print an object and some comments back to a string + +## Installation + +```sh +# with yarn +$ yarn add jest-docblock +# with npm +$ npm install jest-docblock +``` + +## Usage + +```js +const code = ` +/** + * Everything is awesome! + * + * @everything is:awesome + * @flow + */ + + export const everything = Object.create(null); + export default function isAwesome(something) { +   return something === everything; + } +`; + +const { +  extract, +  strip, +  parse, +  parseWithComments, +  print, +} = require('jest-docblock'); + +const docblock = extract(code); +console.log(docblock); // "/**\n * Everything is awesome!\n * \n * @everything is:awesome\n * @flow\n */" + +const stripped = strip(code); +console.log(stripped); // "export const everything = Object.create(null);\n export default function isAwesome(something) {\n return something === everything;\n }" + +const pragmas = parse(docblock); +console.log(pragmas); // { everything: "is:awesome", flow: "" } + +const parsed = parseWithComments(docblock); +console.log(parsed); // { comments: "Everything is awesome!", pragmas: { everything: "is:awesome", flow: "" } } + +console.log(print({pragmas, comments: 'hi!'})); // /**\n * hi!\n *\n * @everything is:awesome\n * @flow\n */; +``` + +## API Documentation + +### `extract(contents: string): string` + +Extracts a docblock from some file contents. Returns the docblock contained in `contents`. If `contents` did not contain a docblock, it will return the empty string (`""`). + +### `strip(contents: string): string` + +Strips the top docblock from a file and return the result. If a file does not have a docblock at the top, then return the file unchanged. + +### `parse(docblock: string): {[key: string]: string | string[] }` + +Parses the pragmas in a docblock string into an object whose keys are the pragma tags and whose values are the arguments to those pragmas. + +### `parseWithComments(docblock: string): { comments: string, pragmas: {[key: string]: string | string[]} }` + +Similar to `parse` except this method also returns the comments from the docblock. Useful when used with `print()`. + +### `print({ comments?: string, pragmas?: {[key: string]: string | string[]} }): string` + +Prints an object of key-value pairs back into a docblock. If `comments` are provided, they will be positioned on the top of the docblock. diff --git a/node_modules/jest-docblock/build/index.d.ts b/node_modules/jest-docblock/build/index.d.ts new file mode 100644 index 0000000..c457121 --- /dev/null +++ b/node_modules/jest-docblock/build/index.d.ts @@ -0,0 +1,19 @@ +/** + * 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. + */ +declare type Pragmas = Record<string, string | Array<string>>; +export declare function extract(contents: string): string; +export declare function strip(contents: string): string; +export declare function parse(docblock: string): Pragmas; +export declare function parseWithComments(docblock: string): { +    comments: string; +    pragmas: Pragmas; +}; +export declare function print({ comments, pragmas, }: { +    comments?: string; +    pragmas?: Pragmas; +}): string; +export {}; diff --git a/node_modules/jest-docblock/build/index.js b/node_modules/jest-docblock/build/index.js new file mode 100644 index 0000000..66450dd --- /dev/null +++ b/node_modules/jest-docblock/build/index.js @@ -0,0 +1,153 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { +  value: true +}); +exports.extract = extract; +exports.parse = parse; +exports.parseWithComments = parseWithComments; +exports.print = print; +exports.strip = strip; + +function _os() { +  const data = require('os'); + +  _os = function () { +    return data; +  }; + +  return data; +} + +function _detectNewline() { +  const data = _interopRequireDefault(require('detect-newline')); + +  _detectNewline = function () { +    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; +const STRING_ARRAY = []; + +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]] = STRING_ARRAY.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 STRING_ARRAY.concat(valueOrArray).map(value => +    `@${key} ${value}`.trim() +  ); +} diff --git a/node_modules/jest-docblock/package.json b/node_modules/jest-docblock/package.json new file mode 100644 index 0000000..5a15045 --- /dev/null +++ b/node_modules/jest-docblock/package.json @@ -0,0 +1,32 @@ +{ +  "name": "jest-docblock", +  "version": "27.5.1", +  "repository": { +    "type": "git", +    "url": "https://github.com/facebook/jest.git", +    "directory": "packages/jest-docblock" +  }, +  "license": "MIT", +  "main": "./build/index.js", +  "types": "./build/index.d.ts", +  "exports": { +    ".": { +      "types": "./build/index.d.ts", +      "default": "./build/index.js" +    }, +    "./package.json": "./package.json" +  }, +  "dependencies": { +    "detect-newline": "^3.0.0" +  }, +  "devDependencies": { +    "@types/node": "*" +  }, +  "engines": { +    "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" +  }, +  "publishConfig": { +    "access": "public" +  }, +  "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850" +}  | 
