Handlebars.js: рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдкреНрд░рдХрд╛рд░: `рдЬреНрдЮрд╛рдд рд╣реЗрд▓реНрдкрд░реНрд╕` рдХрд╕реНрдЯрдо рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЕрдЧре░ 2019  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: handlebars-lang/handlebars.js

рдореБрджреНрджреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреГрдкрдпрд╛ рдкрд╣рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

  • [x] рдХреГрдкрдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЛрдВ рдХреЛ рди рдЦреЛрд▓реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, https://www.npmjs.com/advisories/report?package=handlebars рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рджрд░реНрдЬ
  • [x] https://github.com/wycats/handlebars.js/blob/master/CONTRIBUTING.md рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓реЗрдВред
  • [x] рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди https://github.com/wycats/handlebars.js/blob/master/FAQ.md рдкрд░ рдкрдврд╝реЗрдВ
  • [x] рд╕рдорд╕реНрдпрд╛рдУрдВ рдпрд╛ рдмрдЧ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://jsfiddle.net/9D88g/47/ рдкрд░ jsfiddle-рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдпрд╣ рд╢рд╛рдпрдж рдЖрдкрдХреЛ рддреЗрдЬреА рд╕реЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдмрдЧ рдХреЗ рд▓рд┐рдП, рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг-рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рдкреАрдЖрд░ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред


рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИрдВрдбрд▓рдмрд╛рд░ рдХреА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ knownHelper рд╡рд┐рдХрд▓реНрдк рдкрд░ рдХрд╕реНрдЯрдо рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдХрд╕реНрдЯрдо рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЗ рд╕рд╛рде knownHelpersOnly рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪреЗрдХ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП knownHelpers рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛;

function given(...args: any[]): string {
  const options = args.pop();

  if (options.fn) {
    let complete = true;
    const proxy = new Proxy(this, {
      get(context, prop: string): object {
        if (!(prop in context)) {
          complete = false;
        }

        return context[prop];
      },
    });

    const text = options.fn(proxy);

    return complete ? text : '';
  }

  return args.some((a: string): boolean => !a) ? '' : args.join(' ');
}

const templateOptions = {
  helpers: {
    first,
  },
};
const compilerOptions = {
  knownHelpers: { first: true } as unknown, // Without this `unknown` compilation fails
  knownHelpersOnly: true,
};

Hanblebars.compile('My nice template {{first "text"}}', compilerOptions)({}, templateOptions);

рдЙрддреНрдкрд╛рджрд┐рдд рддреНрд░реБрдЯрд┐ ( unknown рдХрд╛рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
    src/index.test.ts:93:41 - error TS2345: Argument of type '{ knownHelpers: { first: boolean; }; knownHelpersOnly: boolean; }' is not assignable to parameter of type 'CompileOptions'.
      Types of property 'knownHelpers' are incompatible.
        Type '{ first: boolean; }' has no properties in common with type '{ helperMissing?: boolean; blockHelperMissing?: boolean; each?: boolean; if?: boolean; unless?: boolean; with?: boolean; log?: boolean; lookup?: boolean; }'.

рдХреНрдпрд╛ CompilerOptions рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ?:

interface CompileOptions {
  data?: boolean;
  compat?: boolean;
  knownHelpers?: { [name: string]: boolean };
  knownHelpersOnly?: boolean;
  noEscape?: boolean;
  strict?: boolean;
  assumeObjects?: boolean;
  preventIndent?: boolean;
  ignoreStandalone?: boolean;
  explicitPartialContext?: boolean;
}

(рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ? рдЕрдЧрд░ рдпрд╣ рд╕рд╣реА рд╣реИ рддреЛ рдореИрдВ рдкреАрдЖрд░ рднреЗрдЬрдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВ)

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдлрд┐рдХреНрд╕ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдбреАрдИ рдореЗрдВ рдмрд┐рд▓реНрдЯрд┐рди-рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд┐рд▓реНрдЯрд┐рди рдирд╛рдо рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХрд┐рд╕реА рдЕрдиреНрдп рдирд╛рдо рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдВред

рддреБрд░рдд рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛! рдЗрд╕реЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдЕрдЧрд▓рд╛ рдкреИрдЪ рд╕рдВрд╕реНрдХрд░рдгред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдордВрдЧрд▓рд╡рд╛рд░ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред

4.2.0 . рдореЗрдВ рдЬрд╛рд░реА

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

stevenvachon picture stevenvachon  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ShintaroOkuda picture ShintaroOkuda  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jasonh-brimar picture jasonh-brimar  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DylanPiercey picture DylanPiercey  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

novwhisky picture novwhisky  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ