Giter Club home page Giter Club logo

node-ts-dedent's Introduction

TypeScript Dedent

codecov

TypeScript package which smartly trims and strips indentation from multi-line strings.

Usage Examples

import { dedent } from 'ts-dedent';

console.log(dedent`A string that gets so long you need to break it over
                    multiple lines. Luckily dedent is here to keep it
                    readable without lots of spaces ending up in the string
                    itself.`);

console.log(dedent`
  A string that gets so long you need to break it over
  multiple lines. Luckily dedent is here to keep it
  readable without lots of spaces ending up in the string
  itself.
`);
A string that gets so long you need to break it over
multiple lines. Luckily dedent is here to keep it
readable without lots of spaces ending up in the string
itself.

console.log(dedent`
  Leading and trailing lines will be trimmed, so you can write something like
  this and have it work as you expect:

    * how convenient it is
    * that I can use an indented list
        - and still have it do the right thing

  That's all.
`);
Leading and trailing lines will be trimmed, so you can write something like
this and have it work as you expect:

  * how convenient it is
  * that I can use an indented list
    - and still have it do the right thing

That's all.

console.log(dedent`
  Also works fine

  ${1}. With any kind of
  ${2}. Placeholders
`);
Also works fine

1. With any kind of
2. Placeholders

console.log(dedent(`
  Wait! I lied. Dedent can also be used as a function.
`);
Wait! I lied. Dedent can also be used as a function.

License

MIT

Based on

Changelog

See history for more details.

  • 2.2.1 2021-08-01 Update build dependencies and fixed typos in readme
  • 2.2.0 2021-08-01 Add indentation to values with multiline strings & added ESM module
  • 2.1.1 2021-03-31 Update build dependencies
  • 2.1.0 2021-03-24 Bugfixes
  • 2.0.0 2020-09-28 Bugfixes
  • 1.2.0 2020-09-28 Update build dependencies and a couple of minor improvments
  • 1.1.0 2019-07-26 Update build dependencies and fixed links in readme
  • 1.0.0 2018-06-14 Initial release

node-ts-dedent's People

Contributors

armaant avatar avivahl avatar dependabot[bot] avatar eirslett avatar hipstersmoothie avatar tamino-martinius avatar whoaa512 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

node-ts-dedent's Issues

Dedenting doesn't work when using on stored strings

I had my string stored in a variable, and used dedent on it.

        const string = `
        Leading and trailing lines will be trimmed, so you can write something like
        this and have it work as you expect:
       
          * how convenient it is
          * that I can use an indented list
              - and still have it do the right thing
       
        That's all.
      `;
        const dedentedString1 = dedent`
        Leading and trailing lines will be trimmed, so you can write something like
        this and have it work as you expect:
       
          * how convenient it is
          * that I can use an indented list
              - and still have it do the right thing
       
        That's all.
      `;
        const dedentedString2 = dedent`
      ${string}
    `;

dedentedString2 did not dedent the string at all.

        Leading and trailing lines will be trimmed, so you can write something like
        this and have it work as you expect:
       
          * how convenient it is
          * that I can use an indented list
              - and still have it do the right thing
       
        That's all.

Not sure if this is a feature request or a bug.

Backticks (possibly) cause no dedent

I've got a weird one for you, one that seems to be a problem in the older dedent package as well (dmnd/dedent#26). Escaped backticks result in no dedent-ing.

const content = '    [APBannerManager showBannerWithTitle:@"Title"\n' +
    '                                          subtitle:@"Subtitle"\n' +
    '                                          body:@"Body"\n' +
    '                                          image:[UIImage imageNamed:@"myPicture"]\n' +
    '                                          actionBlock:^(APBannerActionType type) {\n' +
    '                                            switch (type) {\n' +
    '                                              case APBannerActionTypeTap:\n' +
    '                                                NSLog(@"TAP");\n' +
    '                                                break;\n' +
    '                                              case APBannerActionTypeDismiss:\n' +
    '                                                NSLog(@"DISMISS");\n' +
    '                                                break;\n' +
    '                                            }\n' +
    '                                          }];';
   dedent(`\`\`\`
${content}
\`\`\``);

What we end up with is:

\`\`\`
    [APBannerManager showBannerWithTitle:@"Title"
                                          subtitle:@"Subtitle"
                                          body:@"Body"
                                          image:[UIImage imageNamed:@"myPicture"]
                                          actionBlock:^(APBannerActionType type) {
                                            switch (type) {
                                              case APBannerActionTypeTap:
                                                NSLog(@"TAP");
                                                break;
                                              case APBannerActionTypeDismiss:
                                                NSLog(@"DISMISS");
                                                break;
                                            }
                                          }];
\`\`\`

Could you please explain exactly what it does in the docs?

Based on the examples, I think it removes a starting bare newline, and then removes the number of whitespace characters on the first line that starts with whitespace characters. Or does it remove the number of whitespace characters on the line with the fewest leading whitespace characters?

A quick summary of what the algorithm is would make it easier than having to look in the code or try stuff.

Unicode Escape Sequence Handling

Feature request: unicode escape sequence handling.

import dedent from 'dedent';

console.log(`\u00E4`); // Prints ä
console.log(dedent`\u00E4`); // Prints \u00E4 - expected ä

Remove trailing spaces on empty lines in interpolated text

See indentjs/endent#12 for an example failing test.

const insertion = "indented 1\n\nindented 2";
const output = endent`
  foo
    ${insertion}
`;
const current = output === "foo\n  indented 1\n  \n  indented 2"
const desired = output === "foo\n  indented 1\n\n  indented 2"

I have worked around this by tacking .replaceAll(/\n\s*\n/gi, '\n\n') at the end of our dedent() calls in a wrapper function.

ts typings error

Got error :

error TS7016: Could not find a declaration file for module 'dedent'. '.../node_modules/dedent/dist/dedent.js' implicitly has an 'any' type.
Try npm install @types/dedent if it exists or add a new declaration (.d.ts) file containing declare module 'dedent';

Can you please publish @types/ts-dedent? That would help.

Handle interpolations properly

import dedent from 'ts-dedent'

const fieldDocs = dedent`
  * a
  * b
  * c
`

const a = dedent`
  /**
   ${fieldIntro()}
   *
   ${fieldDocs}
   *
   ${fieldExample()} 
   */
`

function fieldIntro() {
  return dedent`
    * 0
  `
}
function fieldExample() {
  return dedent`
    * d
  `
}

console.log(a)

Expected

/**
 * 0
 *
 * a
 * b
 * c
 *
 * d 
 */

Actual

/**
 * 0
 *
 * a
* b
* c
 *
 * d 
 */

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.