├── .prettierrc
├── types
└── @babel
│ └── helper-plugin-utils.d.ts
├── codecov.yml
├── test
├── __node__
│ ├── self-reference
│ │ ├── code.js
│ │ └── output.js
│ └── function-param-decorator
│ │ ├── code.js
│ │ └── output.js
├── __modules-8__
│ └── member-expression
│ │ ├── code.js
│ │ └── output.js
├── __modules__
│ └── member-expression
│ │ ├── code.js
│ │ └── output.js
├── __fixtures__
│ ├── generics
│ │ ├── code.js
│ │ └── output.js
│ ├── nest-injection
│ │ ├── code.js
│ │ └── output.js
│ ├── parameter-decorator-typed
│ │ ├── code.js
│ │ └── output.js
│ └── type-serialization
│ │ ├── code.js
│ │ └── output.js
├── __helpers__
│ ├── babel-8
│ │ ├── package.json
│ │ └── yarn.lock
│ └── utils.ts
├── plugin.spec.ts
├── module.spec.ts
├── node.spec.ts
└── serializeType.spec.ts
├── .vscode
├── settings.json
└── launch.json
├── jest.config.js
├── babel.config.js
├── examples
└── inversify
│ ├── .babelrc
│ ├── tsconfig.json
│ ├── package.json
│ └── src
│ └── index.ts
├── tsconfig.json
├── .github
└── workflows
│ └── test.yml
├── LICENSE
├── .gitignore
├── src
├── plugin.ts
├── metadata
│ ├── metadataVisitor.ts
│ └── serializeType.ts
└── parameter
│ └── parameterVisitor.ts
├── package.json
├── README.md
└── CHANGELOG.md
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingCommas": "all",
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/types/@babel/helper-plugin-utils.d.ts:
--------------------------------------------------------------------------------
1 | export function declare(builder: any): any;
2 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "lib"
3 | - "examples"
4 | - "types"
5 | - "test"
6 | - "node_modules"
--------------------------------------------------------------------------------
/test/__node__/self-reference/code.js:
--------------------------------------------------------------------------------
1 | import { inject } from 'lib';
2 |
3 | @injectable()
4 | class Self {
5 | @inject()
6 | child: Self;
7 | }
8 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "javascript.implicitProjectConfig.checkJs": false,
3 | "javascript.validate.enable": false,
4 | "typescript.surveys.enabled": false
5 | }
6 |
--------------------------------------------------------------------------------
/test/__modules-8__/member-expression/code.js:
--------------------------------------------------------------------------------
1 | import AWS from 'aws-sdk';
2 |
3 | @Injectable()
4 | export class SomeService {
5 | constructor(
6 | @Inject('aws.s3') private s3client: AWS.S3,
7 | ) {}
8 | }
9 |
--------------------------------------------------------------------------------
/test/__modules__/member-expression/code.js:
--------------------------------------------------------------------------------
1 | import AWS from 'aws-sdk';
2 |
3 | @Injectable()
4 | export class SomeService {
5 | constructor(
6 | @Inject('aws.s3') private s3client: AWS.S3,
7 | ) {}
8 | }
9 |
--------------------------------------------------------------------------------
/test/__fixtures__/generics/code.js:
--------------------------------------------------------------------------------
1 | @Decorate
2 | class MyClass {
3 | constructor(
4 | private generic: Generic,
5 | generic2: Generic
6 | ) {}
7 |
8 | @Run
9 | method(
10 | generic: Inter,
11 | @Arg() generic2: InterGen
12 | ) {}
13 | }
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | collectCoverageFrom: [
3 | '/src/**/*.{ts,js}?(x)',
4 | '!/test/**/*.{ts,js}?(x)'
5 | ],
6 | testPathIgnorePatterns: ['/lib/', '/node_modules/'],
7 | transform: {
8 | '^.+\\.tsx?$': 'babel-jest'
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = api => {
2 | api.cache(true);
3 |
4 | return {
5 | presets: [
6 | [
7 | '@babel/preset-env',
8 | {
9 | targets: {
10 | node: 'current'
11 | }
12 | }
13 | ],
14 | '@babel/preset-typescript'
15 | ],
16 | plugins: []
17 | };
18 | };
19 |
--------------------------------------------------------------------------------
/examples/inversify/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "../../lib/plugin.js",
4 | ["@babel/plugin-proposal-decorators", { "legacy": true }],
5 | ["@babel/plugin-proposal-class-properties", { "loose": true }]
6 | ],
7 | "presets": [
8 | ["@babel/preset-env", { "targets": { "node": "current" } }],
9 | "@babel/preset-typescript"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/test/__fixtures__/nest-injection/code.js:
--------------------------------------------------------------------------------
1 | import { AppService } from './app.service';
2 |
3 | @Controller()
4 | export class AppController {
5 | constructor(private appService: AppService) {}
6 |
7 | @Inject()
8 | appService: AppService;
9 |
10 | @Inject()
11 | private appService2: AppService;
12 |
13 | @Get()
14 | getHello(): string {
15 | return this.appService.getHello();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/examples/inversify/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "module": "commonjs",
5 | "strict": true,
6 | "allowSyntheticDefaultImports": true,
7 | "esModuleInterop": true,
8 |
9 | "experimentalDecorators": true,
10 | "emitDecoratorMetadata": true,
11 |
12 | "outDir": "lib",
13 | "rootDir": "src",
14 | "baseUrl": "."
15 | },
16 | "include": ["src/index.ts"]
17 | }
18 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Usare IntelliSense per informazioni sui possibili attributi.
3 | // Al passaggio del mouse vengono visualizzate le descrizioni degli attributi esistenti.
4 | // Per ulteriori informazioni, visitare: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "type": "node",
9 | "request": "attach",
10 | "name": "Attach",
11 | "port": 9229
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/test/__helpers__/babel-8/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "dependencies": {
4 | "@babel/core": "^8.0.0-beta.3",
5 | "@babel/plugin-proposal-decorators": "^8.0.0-beta.3",
6 | "@babel/plugin-transform-class-properties": "^8.0.0-beta.3",
7 | "@babel/plugin-transform-modules-commonjs": "^8.0.0-beta.3",
8 | "@babel/plugin-transform-object-rest-spread": "^8.0.0-beta.3",
9 | "@babel/preset-env": "^8.0.0-beta.3",
10 | "@babel/preset-typescript": "^8.0.0-beta.3"
11 | }
12 | }
--------------------------------------------------------------------------------
/test/plugin.spec.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { define } from './__helpers__/utils';
3 |
4 | define('emit metadata', {
5 | presets: [['@babel/preset-typescript', { ignoreExtensions: true }]],
6 | plugins: [
7 | require('../src/plugin'),
8 | ['@babel/plugin-proposal-decorators', { version: 'legacy' }],
9 | ['@babel/plugin-transform-class-properties', { loose: true }],
10 | '@babel/plugin-transform-object-rest-spread'
11 | ]
12 | }, path.join(__dirname, '__fixtures__'));
13 |
--------------------------------------------------------------------------------
/test/__node__/function-param-decorator/code.js:
--------------------------------------------------------------------------------
1 | import Based from 'based';
2 | import DecoFn from 'decorator';
3 | import { Some } from 'some';
4 | import { Args, Context } from '@nestjs/graphql';
5 | import { Xyz } from 'xyz';
6 |
7 | @Based
8 | class Named {
9 | constructor(
10 | @DecoFn(Some) private param: Some,
11 | @DecoFn private param2: Some,
12 | ) {}
13 |
14 | @Based()
15 | methodName(
16 | @Args() args: Args,
17 | @Context() context: Context,
18 | @DecoFn(Xyz) xyz: any
19 | ) {}
20 | }
--------------------------------------------------------------------------------
/test/module.spec.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { define } from './__helpers__/utils';
3 |
4 | define('emit metadata', {
5 | presets: [['@babel/preset-typescript', { ignoreExtensions: true }]],
6 | plugins: [
7 | require('../src/plugin'),
8 | ['@babel/plugin-proposal-decorators', { version: 'legacy' }],
9 | ['@babel/plugin-transform-class-properties', { loose: true }],
10 | '@babel/plugin-transform-modules-commonjs'
11 | ]
12 | }, path.join(__dirname, '__modules__'), path.join(__dirname, '__modules-8__'));
13 |
--------------------------------------------------------------------------------
/test/node.spec.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { define } from './__helpers__/utils';
3 |
4 | define('emit metadata with node env', {
5 | presets: [
6 | ['@babel/preset-env', { useBuiltIns: false, targets: { node: true } }],
7 | ['@babel/preset-typescript', { ignoreExtensions: true }]
8 | ],
9 | plugins: [
10 | require('../src/plugin'),
11 | ['@babel/plugin-proposal-decorators', { version: 'legacy' }],
12 | ['@babel/plugin-transform-class-properties', { loose: true }]
13 | ]
14 | }, path.join(__dirname, '__node__'));
15 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "declaration": true,
4 | "declarationMap": true,
5 | "sourceMap": true,
6 |
7 | "target": "esnext",
8 | "module": "commonjs",
9 | "jsx": "react",
10 | "strict": true,
11 | "allowSyntheticDefaultImports": true,
12 | "esModuleInterop": true,
13 | "resolveJsonModule": true,
14 |
15 | "experimentalDecorators": true,
16 | "emitDecoratorMetadata": true,
17 |
18 | "skipLibCheck": true,
19 |
20 | "outDir": "lib",
21 | "rootDir": "src",
22 | "baseUrl": ".",
23 |
24 | "paths": {
25 | "*": ["types/*"]
26 | }
27 | },
28 | "include": ["src/**/*", "src/**/*.json"]
29 | }
30 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches: [master]
6 | pull_request:
7 | branches: [master]
8 |
9 | jobs:
10 | build:
11 | name: Check TypeScript and Test (Node.js ${{ matrix.node-version }})
12 | runs-on: ubuntu-latest
13 | strategy:
14 | matrix:
15 | node-version: [16, 22]
16 | steps:
17 | - uses: actions/checkout@v2
18 | - uses: actions/setup-node@v6
19 | with:
20 | node-version: ${{ matrix.node-version }}
21 | cache: 'yarn'
22 | - run: yarn install
23 | - run: yarn build
24 | - run: yarn check-types
25 | - run: yarn pretest
26 | if: matrix.node-version >= 22
27 | - run: yarn test:ci
28 | - uses: codecov/codecov-action@v2
29 |
--------------------------------------------------------------------------------
/examples/inversify/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "inversify",
3 | "version": "0.0.1",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "private": true,
7 | "scripts": {
8 | "build": "babel src -d lib -x '.ts,.tsx'",
9 | "dev": "babel src -w -d lib -x '.ts,.tsx'",
10 | "start": "node lib/index.js"
11 | },
12 | "devDependencies": {
13 | "@babel/cli": "^7.6.4",
14 | "@babel/core": "^7.6.4",
15 | "@babel/plugin-proposal-class-properties": "^7.5.5",
16 | "@babel/plugin-proposal-decorators": "^7.6.0",
17 | "@babel/preset-env": "^7.6.3",
18 | "@babel/preset-typescript": "^7.6.0",
19 | "typescript": "^3.6.4"
20 | },
21 | "dependencies": {
22 | "inversify": "^5.0.1",
23 | "inversify-inject-decorators": "^3.1.0",
24 | "reflect-metadata": "^0.1.13"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/test/__fixtures__/parameter-decorator-typed/code.js:
--------------------------------------------------------------------------------
1 | class Injected {}
2 |
3 | class MyClass {
4 | constructor(@inject() parameter: Injected) {}
5 | }
6 |
7 | class MyOtherClass {
8 | constructor(
9 | @inject() private readonly parameter: Injected,
10 | @inject('KIND') otherParam: Injected
11 | ) {}
12 |
13 | methodUndecorated(@demo() param: string, otherParam) {}
14 |
15 | @decorate('named')
16 | method(@inject() param: Injected, @arg() schema: Schema) {}
17 |
18 | methodWithObjectSpread(@argObjectSpread() { name }: SchemaObjectSpread) {}
19 | }
20 |
21 | @Decorate
22 | class DecoratedClass {
23 | constructor(
24 | @inject() private readonly module: Injected,
25 | @inject() otherModule: Injected
26 | ) {}
27 |
28 | @decorate('example')
29 | method(@inject() param: string) {}
30 | }
--------------------------------------------------------------------------------
/test/__modules-8__/member-expression/output.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 | exports.SomeService = void 0;
7 | var _awsSdk = _interopRequireDefault(require("aws-sdk"));
8 | var _dec, _dec2, _dec3, _dec4, _class;
9 | function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10 | let SomeService = exports.SomeService = (_dec = Injectable(), _dec2 = function (target, key) {
11 | return Inject('aws.s3')(target, undefined, 0);
12 | }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _awsSdk.default.S3 === "undefined" ? Object : _awsSdk.default.S3]), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = class SomeService {
13 | constructor(s3client) {
14 | this.s3client = s3client;
15 | }
16 | }) || _class) || _class) || _class) || _class);
17 |
--------------------------------------------------------------------------------
/test/__modules__/member-expression/output.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 | exports.SomeService = void 0;
7 | var _awsSdk = _interopRequireDefault(require("aws-sdk"));
8 | var _dec, _dec2, _dec3, _dec4, _class;
9 | function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10 | let SomeService = (_dec = Injectable(), _dec2 = function (target, key) {
11 | return Inject('aws.s3')(target, undefined, 0);
12 | }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _awsSdk.default.S3 === "undefined" ? Object : _awsSdk.default.S3]), _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = class SomeService {
13 | constructor(s3client) {
14 | this.s3client = s3client;
15 | }
16 | }) || _class) || _class) || _class) || _class);
17 | exports.SomeService = SomeService;
18 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Leonardo Ascione
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Emit
9 | lib
10 | examples/**/lib
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 |
24 | # nyc test coverage
25 | .nyc_output
26 |
27 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
28 | .grunt
29 |
30 | # Bower dependency directory (https://bower.io/)
31 | bower_components
32 |
33 | # node-waf configuration
34 | .lock-wscript
35 |
36 | # Compiled binary addons (https://nodejs.org/api/addons.html)
37 | build/Release
38 |
39 | # Dependency directories
40 | node_modules/
41 | jspm_packages/
42 |
43 | # TypeScript v1 declaration files
44 | typings/
45 |
46 | # Optional npm cache directory
47 | .npm
48 |
49 | # Optional eslint cache
50 | .eslintcache
51 |
52 | # Optional REPL history
53 | .node_repl_history
54 |
55 | # Output of 'npm pack'
56 | *.tgz
57 |
58 | # Yarn Integrity file
59 | .yarn-integrity
60 |
61 | # dotenv environment variables file
62 | .env
63 |
64 | # next.js build output
65 | .next
66 |
--------------------------------------------------------------------------------
/examples/inversify/src/index.ts:
--------------------------------------------------------------------------------
1 | import 'reflect-metadata';
2 |
3 | import getDecorators from 'inversify-inject-decorators';
4 | import { Container, injectable } from 'inversify';
5 |
6 | @injectable()
7 | class PrintService {
8 | print(book: Book) {
9 | console.log(`Book "${book.summary}" by ${book.author}.`);
10 | }
11 | }
12 |
13 | let container = new Container();
14 | container.bind('PrintService').to(PrintService);
15 | let { lazyInject } = getDecorators(container);
16 |
17 | /**
18 | * Additional function to make properties decorators compatible with babel.
19 | */
20 | function fixPropertyDecorator(decorator: T): T {
21 | return ((...args: any[]) => (
22 | target: any,
23 | propertyName: any,
24 | ...decoratorArgs: any[]
25 | ) => {
26 | decorator(...args)(target, propertyName, ...decoratorArgs);
27 | return Object.getOwnPropertyDescriptor(target, propertyName);
28 | }) as any;
29 | }
30 |
31 | const lazyInjectFix = fixPropertyDecorator(lazyInject);
32 |
33 | class Book {
34 | @lazyInjectFix('PrintService')
35 | private printService!: PrintService;
36 |
37 | public constructor(public author: string, public summary: string) {}
38 |
39 | public print() {
40 | this.printService.print(this);
41 | }
42 | }
43 |
44 | // Book instance is NOT created by InversifyJS
45 | let book = new Book('George Orwell', '1984');
46 | book.print();
47 |
--------------------------------------------------------------------------------
/test/__fixtures__/type-serialization/code.js:
--------------------------------------------------------------------------------
1 | import { Decorate } from './Decorate';
2 |
3 | const sym = Symbol();
4 |
5 | @Decorate()
6 | class Sample {
7 | constructor(
8 | private p0: String,
9 | p1: Number,
10 | p2: 10,
11 | p3: 'ABC',
12 | p4: boolean,
13 | p5: string,
14 | p6: number,
15 | p7: Object,
16 | p8: () => any,
17 | p9: 'abc' | 'def',
18 | p10: String | Number,
19 | p11: Function,
20 | p12: null,
21 | p13: undefined,
22 | p14: any,
23 | p15: (abc: any) => void,
24 | p16: false,
25 | p17: true,
26 | p18: string = 'abc'
27 | ) {}
28 |
29 | @Decorate
30 | method(
31 | @Arg() p0: Symbol,
32 | p1: typeof sym,
33 | p2: string | null,
34 | p3: never,
35 | p4: string | never,
36 | p5: (string | null),
37 | p6: Maybe,
38 | p7: Object | string,
39 | p8: string & MyStringType,
40 | p9: string[],
41 | p10: [string, number],
42 | p11: void,
43 | p12: this is number,
44 | p13: null | undefined,
45 | p14: (string | (string | null)),
46 | p15: Object,
47 | p16: any,
48 | p17: bigint,
49 | ) {}
50 |
51 | /**
52 | * Member Expression
53 | */
54 | @Decorate()
55 | method2(
56 | p0: Decorate.Name = 'abc',
57 | p1: Decorate.Name
58 | ) {}
59 |
60 | /**
61 | * Assignments
62 | */
63 | @Decorate()
64 | assignments(
65 | p0: string = 'abc'
66 | ) {}
67 | }
--------------------------------------------------------------------------------
/test/__fixtures__/generics/output.js:
--------------------------------------------------------------------------------
1 | var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2;
2 | function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
3 | let MyClass = (_dec = Reflect.metadata("design:type", Function), _dec2 = Reflect.metadata("design:paramtypes", [typeof Generic === "undefined" ? Object : Generic, typeof Generic === "undefined" ? Object : Generic]), _dec3 = function (target, key) {
4 | return Arg()(target, key, 1);
5 | }, _dec4 = Reflect.metadata("design:type", Function), _dec5 = Reflect.metadata("design:paramtypes", [typeof Inter === "undefined" ? Object : Inter, typeof InterGen === "undefined" ? Object : InterGen]), Decorate(_class = _dec(_class = _dec2(_class = (_class2 = class MyClass {
6 | constructor(generic, generic2) {
7 | this.generic = generic;
8 | }
9 | method(generic, generic2) {}
10 | }, _applyDecoratedDescriptor(_class2.prototype, "method", [Run, _dec3, _dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "method"), _class2.prototype), _class2)) || _class) || _class) || _class);
11 |
--------------------------------------------------------------------------------
/test/__node__/self-reference/output.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | var _lib = require("lib");
4 | var _dec, _dec2, _dec3, _class, _class2, _descriptor;
5 | function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
6 | function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
7 | function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
8 | let Self = (_dec = injectable(), _dec2 = (0, _lib.inject)(), _dec3 = Reflect.metadata("design:type", Object), _dec(_class = (_class2 = class Self {
9 | constructor() {
10 | _initializerDefineProperty(this, "child", _descriptor, this);
11 | }
12 | }, _descriptor = _applyDecoratedDescriptor(_class2.prototype, "child", [_dec2, _dec3], {
13 | configurable: true,
14 | enumerable: true,
15 | writable: true,
16 | initializer: null
17 | }), _class2)) || _class);
18 |
--------------------------------------------------------------------------------
/test/serializeType.spec.ts:
--------------------------------------------------------------------------------
1 | import { isClassType, serializeType } from '../src/metadata/serializeType';
2 | import { types as t } from '@babel/core';
3 | import template from '@babel/template';
4 |
5 | const VoidZero = t.unaryExpression('void', t.numericLiteral(0));
6 |
7 | describe('serializeType', () => {
8 | test('should return void for empty node', () => {
9 | expect(serializeType(null as any, null)).toEqual(VoidZero);
10 | });
11 |
12 | test('should return void zero for untyped nodes', () => {
13 | const node: t.FunctionExpression = template.expression
14 | .ast`function (param) {}` as any;
15 | expect(serializeType(null as any, node.params[0])).toEqual(VoidZero);
16 | });
17 |
18 | test('should return void zero for unexepected nodes', () => {
19 | const node = template.expression.ast`function (param) {}`;
20 | expect(serializeType(null as any, node as any)).toEqual(VoidZero);
21 | });
22 |
23 | describe('isClassType', () => {
24 | test('should recognize simple identifier', () => {
25 | expect(isClassType('ClassName', t.identifier('ClassName'))).toBe(true);
26 | expect(isClassType('ClassName', t.identifier('ClassN'))).toBe(false);
27 | });
28 |
29 | test('should recognize member expressions', () => {
30 | expect(
31 | isClassType('ClassName', template.expression.ast`ClassName.My.Type`)
32 | ).toBe(true);
33 | expect(
34 | isClassType('ClassName', (template('ClassN.My')() as any).expression)
35 | ).toBe(false);
36 | });
37 |
38 | test('should throw for wrong expressions', () => {
39 | expect(() => isClassType('ClassName', t.stringLiteral('abc'))).toThrow();
40 | });
41 | });
42 | });
43 |
--------------------------------------------------------------------------------
/src/plugin.ts:
--------------------------------------------------------------------------------
1 | import { PluginObj } from '@babel/core';
2 | import { declare } from '@babel/helper-plugin-utils';
3 | import { parameterVisitor } from './parameter/parameterVisitor';
4 | import { metadataVisitor } from './metadata/metadataVisitor';
5 |
6 | export default declare(
7 | (api: any): PluginObj => {
8 | api.assertVersion("^7.0.0 || ^8.0.0-0");
9 |
10 | return {
11 | visitor: {
12 | Program(programPath) {
13 | /**
14 | * We need to traverse the program right here since
15 | * `@babel/preset-typescript` removes imports at this level.
16 | *
17 | * Since we need to convert some typings into **bindings**, used in
18 | * `Reflect.metadata` calls, we need to process them **before**
19 | * the typescript preset.
20 | */
21 | programPath.traverse({
22 | ClassDeclaration(path) {
23 | for (const field of path.get('body').get('body')) {
24 | if (
25 | field.type !== 'ClassMethod' &&
26 | field.type !== 'ClassProperty'
27 | )
28 | continue;
29 |
30 | parameterVisitor(path, field as any);
31 | metadataVisitor(path, field as any);
32 | }
33 |
34 | /**
35 | * We need to keep binding in order to let babel know where imports
36 | * are used as a Value (and not just as a type), so that
37 | * `babel-transform-typescript` do not strip the import.
38 | */
39 | (path.parentPath.scope as any).crawl();
40 | }
41 | });
42 | }
43 | }
44 | };
45 | }
46 | );
47 |
--------------------------------------------------------------------------------
/test/__helpers__/utils.ts:
--------------------------------------------------------------------------------
1 | import { create } from 'babel-test';
2 |
3 | import { toMatchFile } from 'jest-file-snapshot';
4 | expect.extend({ toMatchFile });
5 |
6 | // We need to use the Node.js implementation of `require` to load Babel 8
7 | // packages, instead of Jest's sandboxed implementation, because Babel 8 is
8 | // written in ESM and Jest doesn't support it properly yet.
9 | import Module from 'module';
10 | import {pathToFileURL} from 'url';
11 | const createOriginalNodeRequire = Object.getPrototypeOf(Module).createRequire;
12 | const requireForBabel8 = createOriginalNodeRequire(
13 | pathToFileURL(require.resolve('./babel-8/package.json')),
14 | );
15 |
16 |
17 | export function define(
18 | description: string,
19 | config: any,
20 | pathForBabel7: string,
21 | pathForBabel8: string = pathForBabel7
22 | ) {
23 | const babel7 = create((code, options) =>
24 | require('@babel/core').transformAsync(
25 | code,
26 | {
27 | caller: { name: 'babel-test' },
28 | babelrc: false,
29 | configFile: false,
30 | ...config,
31 | ...options
32 | },
33 | ));
34 |
35 | function replaceWithBabel8Version(plugin: any) {
36 | if (Array.isArray(plugin) && typeof plugin[0] === 'string') {
37 | return [
38 | requireForBabel8(plugin[0]),
39 | ...plugin.slice(1),
40 | ];
41 | } else if (typeof plugin === 'string') {
42 | return requireForBabel8(plugin);
43 | }
44 | return plugin;
45 | }
46 |
47 | const babel8 = create((code, options): any =>
48 | requireForBabel8('@babel/core').transformAsync(
49 | code,
50 | {
51 | caller: { name: 'babel-test' },
52 | babelrc: false,
53 | configFile: false,
54 | ...config,
55 | plugins: config.plugins?.map(replaceWithBabel8Version),
56 | presets: config.presets?.map(replaceWithBabel8Version),
57 | ...options
58 | },
59 | ));
60 |
61 | describe('babel 7', () => {
62 | babel7.fixtures(description, pathForBabel7);
63 | });
64 |
65 | const isNodeGte22 = parseInt(process.versions.node) >= 22;
66 |
67 | (isNodeGte22 ? describe : describe.skip)('babel 8', () => {
68 | babel8.fixtures(description, pathForBabel8);
69 | });
70 | };
71 |
--------------------------------------------------------------------------------
/src/metadata/metadataVisitor.ts:
--------------------------------------------------------------------------------
1 | import { types as t, NodePath } from '@babel/core';
2 | import { serializeType } from './serializeType';
3 |
4 | function createMetadataDesignDecorator(
5 | design: 'design:type' | 'design:paramtypes' | 'design:returntype' | 'design:typeinfo',
6 | typeArg: t.Expression | t.SpreadElement | t.JSXNamespacedName | t.ArgumentPlaceholder
7 | ): t.Decorator {
8 | return t.decorator(
9 | t.callExpression(
10 | t.memberExpression(
11 | t.identifier('Reflect'),
12 | t.identifier('metadata')
13 | ),
14 | [
15 | t.stringLiteral(design),
16 | typeArg
17 | ]
18 | )
19 | )
20 | }
21 |
22 | export function metadataVisitor(
23 | classPath: NodePath,
24 | path: NodePath
25 | ) {
26 | const field = path.node;
27 | const classNode = classPath.node;
28 |
29 | switch (field.type) {
30 | case 'ClassMethod':
31 | const decorators =
32 | field.kind === 'constructor' ? classNode.decorators : field.decorators;
33 |
34 | if (!decorators || decorators.length === 0) return;
35 |
36 | decorators!.push(
37 | createMetadataDesignDecorator(
38 | 'design:type',
39 | t.identifier('Function')
40 | )
41 | );
42 | decorators!.push(
43 | createMetadataDesignDecorator(
44 | 'design:paramtypes',
45 | t.arrayExpression(
46 | field.params.map(param => serializeType(classPath, param))
47 | )
48 | )
49 | );
50 | // Hint: `design:returntype` could also be implemented here, although this seems
51 | // quite complicated to achieve without the TypeScript compiler.
52 | // See https://github.com/microsoft/TypeScript/blob/f807b57356a8c7e476fedc11ad98c9b02a9a0e81/src/compiler/transformers/ts.ts#L1315
53 | break;
54 |
55 | case 'ClassProperty':
56 | if (!field.decorators || field.decorators.length === 0) return;
57 |
58 | if (
59 | !field.typeAnnotation ||
60 | field.typeAnnotation.type !== 'TSTypeAnnotation'
61 | )
62 | return;
63 |
64 | field.decorators!.push(
65 | createMetadataDesignDecorator(
66 | 'design:type',
67 | serializeType(classPath, field)
68 | )
69 | );
70 | break;
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/test/__node__/function-param-decorator/output.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | var _based = _interopRequireDefault(require("based"));
4 | var _decorator = _interopRequireDefault(require("decorator"));
5 | var _some = require("some");
6 | var _graphql = require("@nestjs/graphql");
7 | var _xyz = require("xyz");
8 | var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _class, _class2;
9 | function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10 | function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
11 | let Named = (_dec = function (target, key) {
12 | return (0, _decorator.default)(_some.Some)(target, undefined, 0);
13 | }, _dec2 = function (target, key) {
14 | return (0, _decorator.default)(target, undefined, 1);
15 | }, _dec3 = Reflect.metadata("design:type", Function), _dec4 = Reflect.metadata("design:paramtypes", [typeof _some.Some === "undefined" ? Object : _some.Some, typeof _some.Some === "undefined" ? Object : _some.Some]), _dec5 = (0, _based.default)(), _dec6 = function (target, key) {
16 | return (0, _graphql.Args)()(target, key, 0);
17 | }, _dec7 = function (target, key) {
18 | return (0, _graphql.Context)()(target, key, 1);
19 | }, _dec8 = function (target, key) {
20 | return (0, _decorator.default)(_xyz.Xyz)(target, key, 2);
21 | }, _dec9 = Reflect.metadata("design:type", Function), _dec0 = Reflect.metadata("design:paramtypes", [typeof _graphql.Args === "undefined" ? Object : _graphql.Args, typeof _graphql.Context === "undefined" ? Object : _graphql.Context, Object]), (0, _based.default)(_class = _dec(_class = _dec2(_class = _dec3(_class = _dec4(_class = (_class2 = class Named {
22 | constructor(param, param2) {
23 | this.param = param;
24 | this.param2 = param2;
25 | }
26 | methodName(args, context, xyz) {}
27 | }, _applyDecoratedDescriptor(_class2.prototype, "methodName", [_dec5, _dec6, _dec7, _dec8, _dec9, _dec0], Object.getOwnPropertyDescriptor(_class2.prototype, "methodName"), _class2.prototype), _class2)) || _class) || _class) || _class) || _class) || _class);
28 |
--------------------------------------------------------------------------------
/test/__fixtures__/nest-injection/output.js:
--------------------------------------------------------------------------------
1 | var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _class, _class2, _descriptor, _descriptor2;
2 | function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
3 | function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
4 | function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
5 | import { AppService } from './app.service';
6 | export let AppController = (_dec = Controller(), _dec2 = Reflect.metadata("design:type", Function), _dec3 = Reflect.metadata("design:paramtypes", [typeof AppService === "undefined" ? Object : AppService]), _dec4 = Inject(), _dec5 = Reflect.metadata("design:type", typeof AppService === "undefined" ? Object : AppService), _dec6 = Inject(), _dec7 = Reflect.metadata("design:type", typeof AppService === "undefined" ? Object : AppService), _dec8 = Get(), _dec9 = Reflect.metadata("design:type", Function), _dec0 = Reflect.metadata("design:paramtypes", []), _dec(_class = _dec2(_class = _dec3(_class = (_class2 = class AppController {
7 | constructor(appService) {
8 | this.appService = appService;
9 | _initializerDefineProperty(this, "appService", _descriptor, this);
10 | _initializerDefineProperty(this, "appService2", _descriptor2, this);
11 | }
12 | getHello() {
13 | return this.appService.getHello();
14 | }
15 | }, _descriptor = _applyDecoratedDescriptor(_class2.prototype, "appService", [_dec4, _dec5], {
16 | configurable: true,
17 | enumerable: true,
18 | writable: true,
19 | initializer: null
20 | }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "appService2", [_dec6, _dec7], {
21 | configurable: true,
22 | enumerable: true,
23 | writable: true,
24 | initializer: null
25 | }), _applyDecoratedDescriptor(_class2.prototype, "getHello", [_dec8, _dec9, _dec0], Object.getOwnPropertyDescriptor(_class2.prototype, "getHello"), _class2.prototype), _class2)) || _class) || _class) || _class);
26 |
--------------------------------------------------------------------------------
/test/__fixtures__/type-serialization/output.js:
--------------------------------------------------------------------------------
1 | var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _class, _class2;
2 | function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
3 | import { Decorate } from './Decorate';
4 | const sym = Symbol();
5 | let Sample = (_dec = Decorate(), _dec2 = Reflect.metadata("design:type", Function), _dec3 = Reflect.metadata("design:paramtypes", [typeof String === "undefined" ? Object : String, typeof Number === "undefined" ? Object : Number, Number, String, Boolean, String, Number, typeof Object === "undefined" ? Object : Object, Function, String, Object, typeof Function === "undefined" ? Object : Function, void 0, void 0, Object, Function, Boolean, Boolean, String]), _dec4 = function (target, key) {
6 | return Arg()(target, key, 0);
7 | }, _dec5 = Reflect.metadata("design:type", Function), _dec6 = Reflect.metadata("design:paramtypes", [typeof Symbol === "undefined" ? Object : Symbol, Object, String, void 0, String, String, typeof Maybe === "undefined" ? Object : Maybe, Object, Object, Array, Array, void 0, Boolean, void 0, String, typeof Object === "undefined" ? Object : Object, Object, Number]), _dec7 = Decorate(), _dec8 = Reflect.metadata("design:type", Function), _dec9 = Reflect.metadata("design:paramtypes", [typeof Decorate.Name === "undefined" ? Object : Decorate.Name, typeof Decorate.Name === "undefined" ? Object : Decorate.Name]), _dec0 = Decorate(), _dec1 = Reflect.metadata("design:type", Function), _dec10 = Reflect.metadata("design:paramtypes", [String]), _dec(_class = _dec2(_class = _dec3(_class = (_class2 = class Sample {
8 | constructor(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18 = 'abc') {
9 | this.p0 = p0;
10 | }
11 | method(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) {}
12 |
13 | /**
14 | * Member Expression
15 | */
16 | method2(p0 = 'abc', p1) {}
17 |
18 | /**
19 | * Assignments
20 | */
21 | assignments(p0 = 'abc') {}
22 | }, _applyDecoratedDescriptor(_class2.prototype, "method", [Decorate, _dec4, _dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "method"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "method2", [_dec7, _dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "method2"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "assignments", [_dec0, _dec1, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "assignments"), _class2.prototype), _class2)) || _class) || _class) || _class);
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "babel-plugin-transform-typescript-metadata",
3 | "version": "0.4.0",
4 | "description": "Babel plugin to emit decorator metadata like typescript compiler",
5 | "main": "lib/plugin.js",
6 | "types": "lib/plugin.d.ts",
7 | "repository": "https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata.git",
8 | "author": "Leonardo Ascione ",
9 | "license": "MIT",
10 | "files": [
11 | "lib/"
12 | ],
13 | "keywords": [
14 | "babel",
15 | "babel-plugin",
16 | "babel-typescript",
17 | "decorators",
18 | "reflect-metadata"
19 | ],
20 | "scripts": {
21 | "dev": "babel src -w -d lib -x \".ts\"",
22 | "build": "yarn build:lib && yarn build:types",
23 | "prebuild:lib": "rimraf lib",
24 | "build:lib": "babel src -d lib -x \".ts\"",
25 | "build:types": "tsc --emitDeclarationOnly",
26 | "check-types": "tsc --noEmit",
27 | "release": "yarn test && yarn build && release-it",
28 | "pretest": "cd test/__helpers__/babel-8 && yarn",
29 | "test": "jest --forceExit",
30 | "test:dev": "jest --watch",
31 | "test:ci": "jest --ci --runInBand --coverage --forceExit"
32 | },
33 | "husky": {
34 | "hooks": {
35 | "commit-msg": "emoji-commit-lint"
36 | }
37 | },
38 | "release-it": {
39 | "git": {
40 | "tagName": "v${version}",
41 | "commitMessage": "🔖 v${version}"
42 | },
43 | "github": {
44 | "release": true
45 | },
46 | "plugins": {
47 | "@release-it/conventional-changelog": {
48 | "preset": "@favoloso/emoji",
49 | "infile": "CHANGELOG.md"
50 | }
51 | }
52 | },
53 | "publishConfig": {
54 | "registry": "https://registry.npmjs.org/"
55 | },
56 | "devDependencies": {
57 | "@babel/cli": "^7.6.4",
58 | "@babel/core": "^7.6.4",
59 | "@babel/plugin-proposal-decorators": "^7.6.0",
60 | "@babel/plugin-transform-class-properties": "^7.27.1",
61 | "@babel/plugin-transform-modules-commonjs": "^7.10.4",
62 | "@babel/plugin-transform-object-rest-spread": "^7.28.4",
63 | "@babel/preset-env": "^7.6.3",
64 | "@babel/preset-typescript": "^7.28.5",
65 | "@babel/template": "^7.6.0",
66 | "@babel/traverse": "^7.6.4",
67 | "@babel/types": "^7.6.3",
68 | "@favoloso/conventional-changelog-emoji": "^0.10.0",
69 | "@release-it/conventional-changelog": "^1.1.0",
70 | "@types/jest": "^27.4.1",
71 | "babel-test": "^0.2.3",
72 | "conventional-changelog-cli": "^2.0.25",
73 | "husky": "^4.2.3",
74 | "jest": "^27.5.1",
75 | "jest-file-snapshot": "^0.5.0",
76 | "release-it": "13.7.1",
77 | "rimraf": "^3.0.2",
78 | "typescript": "^3.6.4"
79 | },
80 | "dependencies": {
81 | "@babel/helper-plugin-utils": "^7.0.0"
82 | },
83 | "peerDependencies": {
84 | "@babel/core": "^7.0.0 || ^8.0.0-0"
85 | },
86 | "peerDependenciesMeta": {
87 | "@babel/core": {
88 | "optional": false
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/src/parameter/parameterVisitor.ts:
--------------------------------------------------------------------------------
1 | import { types as t, NodePath } from '@babel/core';
2 |
3 | /**
4 | * Helper function to create a field/class decorator from a parameter decorator.
5 | * Field/class decorators get three arguments: the class, the name of the method
6 | * (or 'undefined' in the case of the constructor) and the position index of the
7 | * parameter in the argument list.
8 | * Some of this information, the index, is only available at transform time, and
9 | * has to be stored. The other arguments are part of the decorator signature and
10 | * will be passed to the decorator anyway. But the decorator has to be called
11 | * with all three arguments at runtime, so this creates a function wrapper, which
12 | * takes the target and the key, and adds the index to it.
13 | *
14 | * Inject() becomes function(target, key) { return Inject()(target, key, 0) }
15 | *
16 | * @param paramIndex the index of the parameter inside the function call
17 | * @param decoratorExpression the decorator expression, the return object of SomeParameterDecorator()
18 | * @param isConstructor indicates if the key should be set to 'undefined'
19 | */
20 | function createParamDecorator(
21 | paramIndex: number,
22 | decoratorExpression: t.Expression,
23 | isConstructor: boolean = false
24 | ) {
25 | return t.decorator(
26 | t.functionExpression(
27 | null, // anonymous function
28 | [t.identifier('target'), t.identifier('key')],
29 | t.blockStatement([
30 | t.returnStatement(
31 | t.callExpression(decoratorExpression, [
32 | t.identifier('target'),
33 | t.identifier(isConstructor ? 'undefined' : 'key'),
34 | t.numericLiteral(paramIndex)
35 | ])
36 | )
37 | ])
38 | )
39 | );
40 | }
41 |
42 | export function parameterVisitor(
43 | classPath: NodePath,
44 | path: NodePath | NodePath
45 | ) {
46 | if (path.type !== 'ClassMethod') return;
47 | if (path.node.type !== 'ClassMethod') return;
48 | if (path.node.key.type !== 'Identifier') return;
49 |
50 | const methodPath = path as NodePath;
51 | const params = methodPath.get('params') || [];
52 |
53 | params.slice().forEach(function(param) {
54 | let identifier =
55 | param.node.type === 'Identifier' || param.node.type === 'ObjectPattern'
56 | ? param.node
57 | : param.node.type === 'TSParameterProperty' &&
58 | param.node.parameter.type === 'Identifier'
59 | ? param.node.parameter
60 | : null;
61 |
62 | if (identifier == null) return;
63 |
64 | let resultantDecorator: t.Decorator | undefined;
65 |
66 | ((param.node as t.Identifier).decorators || [])
67 | .slice()
68 | .forEach(function(decorator) {
69 | if (methodPath.node.kind === 'constructor') {
70 | resultantDecorator = createParamDecorator(
71 | param.key as number,
72 | decorator.expression,
73 | true
74 | );
75 | if (!classPath.node.decorators) {
76 | classPath.node.decorators = [];
77 | }
78 | classPath.node.decorators.push(resultantDecorator);
79 | } else {
80 | resultantDecorator = createParamDecorator(
81 | param.key as number,
82 | decorator.expression,
83 | false
84 | );
85 | if (!methodPath.node.decorators) {
86 | methodPath.node.decorators = [];
87 | }
88 | methodPath.node.decorators.push(resultantDecorator);
89 | }
90 | });
91 |
92 | if (resultantDecorator) {
93 | (param.node as t.Identifier).decorators = null;
94 | }
95 | });
96 | }
97 |
--------------------------------------------------------------------------------
/test/__fixtures__/parameter-decorator-typed/output.js:
--------------------------------------------------------------------------------
1 | var _dec, _dec2, _dec3, _class, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _class2, _class3, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _class4, _class5;
2 | function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
3 | class Injected {}
4 | let MyClass = (_dec = function (target, key) {
5 | return inject()(target, undefined, 0);
6 | }, _dec2 = Reflect.metadata("design:type", Function), _dec3 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected]), _dec(_class = _dec2(_class = _dec3(_class = class MyClass {
7 | constructor(parameter) {}
8 | }) || _class) || _class) || _class);
9 | let MyOtherClass = (_dec4 = function (target, key) {
10 | return inject()(target, undefined, 0);
11 | }, _dec5 = function (target, key) {
12 | return inject('KIND')(target, undefined, 1);
13 | }, _dec6 = Reflect.metadata("design:type", Function), _dec7 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected, typeof Injected === "undefined" ? Object : Injected]), _dec8 = function (target, key) {
14 | return demo()(target, key, 0);
15 | }, _dec9 = Reflect.metadata("design:type", Function), _dec0 = Reflect.metadata("design:paramtypes", [String, void 0]), _dec1 = decorate('named'), _dec10 = function (target, key) {
16 | return inject()(target, key, 0);
17 | }, _dec11 = function (target, key) {
18 | return arg()(target, key, 1);
19 | }, _dec12 = Reflect.metadata("design:type", Function), _dec13 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected, typeof Schema === "undefined" ? Object : Schema]), _dec14 = function (target, key) {
20 | return argObjectSpread()(target, key, 0);
21 | }, _dec15 = Reflect.metadata("design:type", Function), _dec16 = Reflect.metadata("design:paramtypes", [typeof SchemaObjectSpread === "undefined" ? Object : SchemaObjectSpread]), _dec4(_class2 = _dec5(_class2 = _dec6(_class2 = _dec7(_class2 = (_class3 = class MyOtherClass {
22 | constructor(parameter, otherParam) {
23 | this.parameter = parameter;
24 | }
25 | methodUndecorated(param, otherParam) {}
26 | method(param, schema) {}
27 | methodWithObjectSpread({
28 | name
29 | }) {}
30 | }, _applyDecoratedDescriptor(_class3.prototype, "methodUndecorated", [_dec8, _dec9, _dec0], Object.getOwnPropertyDescriptor(_class3.prototype, "methodUndecorated"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "method", [_dec1, _dec10, _dec11, _dec12, _dec13], Object.getOwnPropertyDescriptor(_class3.prototype, "method"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "methodWithObjectSpread", [_dec14, _dec15, _dec16], Object.getOwnPropertyDescriptor(_class3.prototype, "methodWithObjectSpread"), _class3.prototype), _class3)) || _class2) || _class2) || _class2) || _class2);
31 | let DecoratedClass = (_dec17 = function (target, key) {
32 | return inject()(target, undefined, 0);
33 | }, _dec18 = function (target, key) {
34 | return inject()(target, undefined, 1);
35 | }, _dec19 = Reflect.metadata("design:type", Function), _dec20 = Reflect.metadata("design:paramtypes", [typeof Injected === "undefined" ? Object : Injected, typeof Injected === "undefined" ? Object : Injected]), _dec21 = decorate('example'), _dec22 = function (target, key) {
36 | return inject()(target, key, 0);
37 | }, _dec23 = Reflect.metadata("design:type", Function), _dec24 = Reflect.metadata("design:paramtypes", [String]), Decorate(_class4 = _dec17(_class4 = _dec18(_class4 = _dec19(_class4 = _dec20(_class4 = (_class5 = class DecoratedClass {
38 | constructor(module, otherModule) {
39 | this.module = module;
40 | }
41 | method(param) {}
42 | }, _applyDecoratedDescriptor(_class5.prototype, "method", [_dec21, _dec22, _dec23, _dec24], Object.getOwnPropertyDescriptor(_class5.prototype, "method"), _class5.prototype), _class5)) || _class4) || _class4) || _class4) || _class4) || _class4);
43 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # babel-plugin-transform-typescript-metadata
2 |
3 | 
4 | [](https://codecov.io/gh/leonardfactory/babel-plugin-transform-typescript-metadata)
5 | [](https://www.npmjs.com/package/babel-plugin-transform-typescript-metadata)
6 |
7 | Babel plugin to emit decorator metadata like typescript compiler
8 |
9 | ## Motivation
10 |
11 | TypeScript _Decorators_ allows advanced reflection patterns when combined
12 | with [`Reflect.metadata`](https://rbuckton.github.io/reflect-metadata/) output.
13 |
14 | Current `@babel/preset-typescript` implementation however just strips all types and
15 | _does not_ emit the relative Metadata in the output code.
16 |
17 | Since this kind of information is used extensively in libraries like
18 | [Nest](https://docs.nestjs.com/providers) and [TypeORM](https://typeorm.io/#/)
19 | to implement advanced features like **Dependency Injection**, I've thought it would
20 | be awesome to be able to provide the same functionality that [TypeScript
21 | compiler `experimentalDecorators` and `emitDecoratorMetadata`
22 | flags](https://www.typescriptlang.org/docs/handbook/decorators.html) provide.
23 |
24 | This means that code like:
25 |
26 | ```ts
27 | import { Injectable, Inject } from 'some-di-library'; // Just an example
28 | import { MyService } from './MyService';
29 | import { Configuration } from './Configuration';
30 |
31 | @Injectable()
32 | class AnotherService {
33 | @Inject()
34 | config: Configuration;
35 |
36 | constructor(private service: MyService) {}
37 | }
38 | ```
39 |
40 | will be interpreted like:
41 |
42 | ```ts
43 | import { MyService } from './MyService';
44 | import { Configuration } from './Configuration';
45 |
46 | @Injectable()
47 | @Reflect.metadata('design:paramtypes', [MyService])
48 | class AnotherService {
49 | @Inject()
50 | @Reflect.metadata('design:type', Configuration)
51 | config: Configuration;
52 |
53 | constructor(private service: MyService) {}
54 | }
55 | ```
56 |
57 | ### Parameter decorators
58 |
59 | Since decorators in typescript supports also _Parameters_, this plugin
60 | also provides support for them, enabling the following syntax:
61 |
62 | ```ts
63 | @Injectable()
64 | class Some {
65 | constructor(@Inject() private: SomeService);
66 | }
67 | ```
68 |
69 | This will be roughly translated to:
70 |
71 | ```js
72 | // ...
73 | Inject()(Some.prototype, undefined, 0);
74 | ```
75 |
76 | ## Installation
77 |
78 | With npm:
79 |
80 | ```sh
81 | npm install --dev --save babel-plugin-transform-typescript-metadata
82 | ```
83 |
84 | or with Yarn:
85 |
86 | ```sh
87 | yarn add --dev babel-plugin-transform-typescript-metadata
88 | ```
89 |
90 | ## Usage
91 |
92 | With `.babelrc`:
93 |
94 | > **Note:** should be placed **before** `@babel/plugin-proposal-decorators`.
95 |
96 | ```js
97 | {
98 | "plugins": [
99 | "babel-plugin-transform-typescript-metadata",
100 | ["@babel/plugin-proposal-decorators", { "legacy": true }],
101 | ["@babel/plugin-proposal-class-properties", { "loose": true }],
102 | ],
103 | "presets": [
104 | "@babel/preset-typescript"
105 | ]
106 | }
107 | ```
108 |
109 | ### Usage with [InversifyJS](http://inversify.io)
110 |
111 | If you are using normal dependency injection letting Inversify **create your instances**, you should be fine with all kind of decorators.
112 |
113 | Instead, if you are using **property injection**, when [the container does not
114 | create the instances](https://github.com/inversify/InversifyJS/blob/master/wiki/property_injection.md#when-we-cannot-use-inversifyjs-to-create-an-instance-of-a-class),
115 | you would likely encounter errors since babel
116 | decorators are not exactly the same as TypeScript.
117 |
118 | You can fix it by _enhancing property decorators_ with the following function:
119 |
120 | ```ts
121 | import getDecorators from 'inversify-inject-decorators';
122 | // setup the container...
123 | let { lazyInject: originalLazyInject } = getDecorators(container);
124 |
125 | // Additional function to make properties decorators compatible with babel.
126 | function fixPropertyDecorator(decorator: T): T {
127 | return ((...args: any[]) =>
128 | (target: any, propertyName: any, ...decoratorArgs: any[]) => {
129 | decorator(...args)(target, propertyName, ...decoratorArgs);
130 | return Object.getOwnPropertyDescriptor(target, propertyName);
131 | }) as any;
132 | }
133 |
134 | export const lazyInject = fixPropertyDecorator(originalLazyInject);
135 | ```
136 |
137 | ## Current Pitfalls
138 |
139 | - If you are using webpack and it complains about missing exports due to types
140 | not being removed, you can switch from `import { MyType } from ...` to
141 | `import type { MyType } from ...`. See [#46](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/issues/46) for details and
142 | examples.
143 |
144 | - We cannot know if type annotations are just types (i.e. `IMyInterface`) or
145 | concrete values (like classes, etc.). In order to resolve this, we emit the
146 | following: `typeof Type === 'undefined' ? Object : Type`. The code has the
147 | advantage of not throwing. If you know a better way to do this, let me know!
148 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # [0.4.0](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.3.2...v0.4.0) (2025-10-29)
2 |
3 |
4 | ### ✨ Features
5 |
6 | * Support Babel 8 ([52c122b](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/52c122b))
7 |
8 |
9 | ### 🐛 Bug Fixes
10 |
11 | * : make [@babel](https://github.com/babel)/core optional ([9bf262c](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/9bf262c))
12 |
13 |
14 | ### 📚 Documentation
15 |
16 | * Added gh build status badge ([3a52ff7](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/3a52ff7))
17 | * Update readme badge ([1a78d42](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/1a78d42))
18 |
19 |
20 | ### 🏗 Chore
21 |
22 | * Switch from travis to gh actions ([4c98c57](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/4c98c57))
23 |
24 | ## [0.3.2](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.3.1...v0.3.2) (2021-03-19)
25 |
26 |
27 | ### 🛠 Improvements
28 |
29 | * Fixed up return type to include objectpattern type ([368eb09](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/368eb09))
30 |
31 |
32 | ### 📚 Documentation
33 |
34 | * Add documentation about webpack complains ([a397113](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/a397113))
35 |
36 |
37 | ### 🏗 Chore
38 |
39 | * Added test for object spread argument ([d6ec125](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/d6ec125))
40 | * Fixed missing call to ObjectSpread decorator ([ee28b83](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/ee28b83))
41 |
42 | ## [0.3.1](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.3.0...v0.3.1) (2020-10-12)
43 |
44 |
45 | ### 🐛 Bug Fixes
46 |
47 | * Use cloneDeep to keep reference linked ([869a913](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/869a913))
48 |
49 | # [0.3.0](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.2.2...v0.3.0) (2020-03-05)
50 |
51 |
52 | ### ✨ Features
53 |
54 | * Add support for TSBigIntKeyword ([358a689](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/358a689))
55 | * Move param dec to class ([1371f6b](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/1371f6b))
56 |
57 |
58 | ### 🐛 Bug Fixes
59 |
60 | * Restored [@babel](https://github.com/babel)/core types to allow TSC checking ([55ff485](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/55ff485))
61 |
62 |
63 | ### 🏗 Chore
64 |
65 | * Update release-it to v11+ ([e61386f](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/e61386f))
66 |
67 | ## [0.2.2](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.2.1...v0.2.2) (2019-03-27)
68 |
69 |
70 | ### 🐛 Bug Fixes
71 |
72 | * Add InversifyJS function to make decorators compatible with babel ([4535adb](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/4535adb))
73 | * Handle unsupported kind of parameters with void zero ([a35f733](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/a35f733))
74 | * Omit value when it's a reference to self (class name) ([f755bc2](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/f755bc2))
75 |
76 |
77 | ### 📚 Documentation
78 |
79 | * Add InversifyJS property injection doc ([b263fcd](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/b263fcd))
80 | * Make example DI code more realistic ([620182f](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/620182f))
81 |
82 |
83 | ### 🏗 Chore
84 |
85 | * Add example code to test InversifyJS property injector ([48bd0bb](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/48bd0bb)), closes [#2](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/issues/2)
86 |
87 |
88 | ## [0.2.1](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.2.0...v0.2.1) (2019-03-24)
89 |
90 |
91 | ### 📚 Documentation
92 |
93 | * Add current pitfalls to README ([2f2b888](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/2f2b888))
94 |
95 |
96 | ### 🏗 Chore
97 |
98 | * Add package.json keywords ([97690ca](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/97690ca))
99 |
100 |
101 | # [0.2.0](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.1.1...v0.2.0) (2019-03-24)
102 |
103 |
104 | ### ✨ Features
105 |
106 | * Enhance type serialization following TSC [#1](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/issues/1) ([5a76db1](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/5a76db1))
107 |
108 |
109 | ### 🐛 Bug Fixes
110 |
111 | * Fix parameter assignments type serialization ([0eb91bb](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/0eb91bb))
112 |
113 |
114 | ### 📚 Documentation
115 |
116 | * Add motivation to README ([f59c802](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/f59c802))
117 |
118 |
119 | ## [0.1.1](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/compare/v0.1.0...v0.1.1) (2019-03-24)
120 |
121 |
122 | ### 📚 Documentation
123 |
124 | * Add CHANGELOG ([880b618](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/880b618))
125 |
126 |
127 | # 0.1.0 (2019-03-24)
128 |
129 |
130 | ### ✨ Features
131 |
132 | * Add decorators metadata support ([9cb1e8f](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/9cb1e8f))
133 |
134 |
135 | ### 📚 Documentation
136 |
137 | * Add installation and usage in README ([8d31825](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/8d31825))
138 |
139 |
140 | ### 🏗 Chore
141 |
142 | * Use babel-plugin-utils to assert babel version ([bbf626a](https://github.com/leonardfactory/babel-plugin-transform-typescript-metadata/commit/bbf626a))
143 |
144 |
145 |
--------------------------------------------------------------------------------
/src/metadata/serializeType.ts:
--------------------------------------------------------------------------------
1 | import { types as t, NodePath } from '@babel/core';
2 |
3 | type InferArray = T extends Array ? A : never;
4 |
5 | type Parameter = InferArray | t.ClassProperty;
6 |
7 | function createVoidZero() {
8 | return t.unaryExpression('void', t.numericLiteral(0));
9 | }
10 |
11 | /**
12 | * Given a paramater (or class property) node it returns the first identifier
13 | * containing the TS Type Annotation.
14 | *
15 | * @todo Array and Objects spread are not supported.
16 | * @todo Rest parameters are not supported.
17 | */
18 | function getTypedNode(param: Parameter): t.Identifier | t.ClassProperty | t.ObjectPattern | null {
19 | if (param == null) return null;
20 |
21 | if (param.type === 'ClassProperty') return param;
22 | if (param.type === 'Identifier') return param;
23 | if (param.type === 'ObjectPattern') return param;
24 |
25 | if (param.type === 'AssignmentPattern' && param.left.type === 'Identifier')
26 | return param.left;
27 |
28 | if (param.type === 'TSParameterProperty')
29 | return getTypedNode(param.parameter);
30 |
31 | return null;
32 | }
33 |
34 | export function serializeType(
35 | classPath: NodePath,
36 | param: Parameter
37 | ) {
38 | const node = getTypedNode(param);
39 | if (node == null) return createVoidZero();
40 |
41 | if (!node.typeAnnotation || node.typeAnnotation.type !== 'TSTypeAnnotation')
42 | return createVoidZero();
43 |
44 | const annotation = node.typeAnnotation.typeAnnotation;
45 | const className = classPath.node.id ? classPath.node.id.name : '';
46 | return serializeTypeNode(className, annotation);
47 | }
48 |
49 | function serializeTypeReferenceNode(
50 | className: string,
51 | node: t.TSTypeReference
52 | ) {
53 | /**
54 | * We need to save references to this type since it is going
55 | * to be used as a Value (and not just as a Type) here.
56 | *
57 | * This is resolved in main plugin method, calling
58 | * `path.scope.crawl()` which updates the bindings.
59 | */
60 | const reference = serializeReference(node.typeName);
61 |
62 | /**
63 | * We should omit references to self (class) since it will throw a
64 | * ReferenceError at runtime due to babel transpile output.
65 | */
66 | if (isClassType(className, reference)) {
67 | return t.identifier('Object');
68 | }
69 |
70 | /**
71 | * We don't know if type is just a type (interface, etc.) or a concrete
72 | * value (class, etc.).
73 | * `typeof` operator allows us to use the expression even if it is not
74 | * defined, fallback is just `Object`.
75 | */
76 | return t.conditionalExpression(
77 | t.binaryExpression(
78 | '===',
79 | t.unaryExpression('typeof', reference),
80 | t.stringLiteral('undefined')
81 | ),
82 | t.identifier('Object'),
83 | t.cloneDeep(reference)
84 | );
85 | }
86 |
87 | /**
88 | * Checks if node (this should be the result of `serializeReference`) member
89 | * expression or identifier is a reference to self (class name).
90 | * In this case, we just emit `Object` in order to avoid ReferenceError.
91 | */
92 | export function isClassType(className: string, node: t.Expression): boolean {
93 | switch (node.type) {
94 | case 'Identifier':
95 | return node.name === className;
96 | case 'MemberExpression':
97 | return isClassType(className, node.object);
98 | default:
99 | throw new Error(
100 | `The property expression at ${node.start} is not valid as a Type to be used in Reflect.metadata`
101 | );
102 | }
103 | }
104 |
105 | function serializeReference(
106 | typeName: t.Identifier | t.TSQualifiedName
107 | ): t.Identifier | t.MemberExpression {
108 | if (typeName.type === 'Identifier') {
109 | return t.identifier(typeName.name);
110 | }
111 | return t.memberExpression(serializeReference(typeName.left), typeName.right);
112 | }
113 |
114 | type SerializedType =
115 | | t.Identifier
116 | | t.UnaryExpression
117 | | t.ConditionalExpression;
118 |
119 | /**
120 | * Actual serialization given the TS Type annotation.
121 | * Result tries to get the best match given the information available.
122 | *
123 | * Implementation is adapted from original TSC compiler source as
124 | * available here:
125 | * https://github.com/Microsoft/TypeScript/blob/2932421370df720f0ccfea63aaf628e32e881429/src/compiler/transformers/ts.ts
126 | */
127 | function serializeTypeNode(className: string, node: t.TSType): SerializedType {
128 | if (node === undefined) {
129 | return t.identifier('Object');
130 | }
131 |
132 | switch (node.type) {
133 | case 'TSVoidKeyword':
134 | case 'TSUndefinedKeyword':
135 | case 'TSNullKeyword':
136 | case 'TSNeverKeyword':
137 | return createVoidZero();
138 |
139 | case 'TSParenthesizedType':
140 | return serializeTypeNode(className, node.typeAnnotation);
141 |
142 | case 'TSFunctionType':
143 | case 'TSConstructorType':
144 | return t.identifier('Function');
145 |
146 | case 'TSArrayType':
147 | case 'TSTupleType':
148 | return t.identifier('Array');
149 |
150 | case 'TSTypePredicate':
151 | case 'TSBooleanKeyword':
152 | return t.identifier('Boolean');
153 |
154 | case 'TSStringKeyword':
155 | return t.identifier('String');
156 |
157 | case 'TSObjectKeyword':
158 | return t.identifier('Object');
159 |
160 | case 'TSLiteralType':
161 | switch (node.literal.type) {
162 | case 'StringLiteral':
163 | return t.identifier('String');
164 |
165 | case 'NumericLiteral':
166 | return t.identifier('Number');
167 |
168 | case 'BooleanLiteral':
169 | return t.identifier('Boolean');
170 |
171 | default:
172 | /**
173 | * @todo Use `path` error building method.
174 | */
175 | throw new Error('Bad type for decorator' + node.literal);
176 | }
177 |
178 | case 'TSNumberKeyword':
179 | case 'TSBigIntKeyword' as any: // Still not in ``@babel/core` typings
180 | return t.identifier('Number');
181 |
182 | case 'TSSymbolKeyword':
183 | return t.identifier('Symbol');
184 |
185 | case 'TSTypeReference':
186 | return serializeTypeReferenceNode(className, node);
187 |
188 | case 'TSIntersectionType':
189 | case 'TSUnionType':
190 | return serializeTypeList(className, node.types);
191 |
192 | case 'TSConditionalType':
193 | return serializeTypeList(className, [node.trueType, node.falseType]);
194 |
195 | case 'TSTypeQuery':
196 | case 'TSTypeOperator':
197 | case 'TSIndexedAccessType':
198 | case 'TSMappedType':
199 | case 'TSTypeLiteral':
200 | case 'TSAnyKeyword':
201 | case 'TSUnknownKeyword':
202 | case 'TSThisType':
203 | //case SyntaxKind.ImportType:
204 | break;
205 |
206 | default:
207 | throw new Error('Bad type for decorator');
208 | }
209 |
210 | return t.identifier('Object');
211 | }
212 |
213 | /**
214 | * Type lists need some refining. Even here, implementation is slightly
215 | * adapted from original TSC compiler:
216 | *
217 | * https://github.com/Microsoft/TypeScript/blob/2932421370df720f0ccfea63aaf628e32e881429/src/compiler/transformers/ts.ts
218 | */
219 | function serializeTypeList(
220 | className: string,
221 | types: ReadonlyArray
222 | ): SerializedType {
223 | let serializedUnion: SerializedType | undefined;
224 |
225 | for (let typeNode of types) {
226 | while (typeNode.type === 'TSParenthesizedType') {
227 | typeNode = typeNode.typeAnnotation; // Skip parens if need be
228 | }
229 | if (typeNode.type === 'TSNeverKeyword') {
230 | continue; // Always elide `never` from the union/intersection if possible
231 | }
232 | if (
233 | typeNode.type === 'TSNullKeyword' ||
234 | typeNode.type === 'TSUndefinedKeyword'
235 | ) {
236 | continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
237 | }
238 | const serializedIndividual = serializeTypeNode(className, typeNode);
239 |
240 | if (
241 | t.isIdentifier(serializedIndividual) &&
242 | serializedIndividual.name === 'Object'
243 | ) {
244 | // One of the individual is global object, return immediately
245 | return serializedIndividual;
246 | }
247 | // If there exists union that is not void 0 expression, check if the the common type is identifier.
248 | // anything more complex and we will just default to Object
249 | else if (serializedUnion) {
250 | // Different types
251 | if (
252 | !t.isIdentifier(serializedUnion) ||
253 | !t.isIdentifier(serializedIndividual) ||
254 | serializedUnion.name !== serializedIndividual.name
255 | ) {
256 | return t.identifier('Object');
257 | }
258 | } else {
259 | // Initialize the union type
260 | serializedUnion = serializedIndividual;
261 | }
262 | }
263 |
264 | // If we were able to find common type, use it
265 | return serializedUnion || createVoidZero(); // Fallback is only hit if all union constituients are null/undefined/never
266 | }
267 |
--------------------------------------------------------------------------------
/test/__helpers__/babel-8/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^8.0.0-beta.3":
6 | version "8.0.0-beta.3"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-8.0.0-beta.3.tgz#7a685d81d76d4e9f47a44e160f20c272b57e2a27"
8 | integrity sha512-bCQEw5OhcQSIsknZm3js7Nh7GchgeboNQsC+Frzu6xnOCMdRlc7Y8MgMcqeWcahgtDKRXECmamDH6KBk4bt5bA==
9 | dependencies:
10 | "@babel/helper-validator-identifier" "^8.0.0-beta.3"
11 | js-tokens "^8.0.0"
12 | picocolors "^1.1.1"
13 |
14 | "@babel/compat-data@^7.27.2":
15 | version "7.28.5"
16 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f"
17 | integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==
18 |
19 | "@babel/compat-data@^8.0.0-beta.3":
20 | version "8.0.0-beta.3"
21 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-8.0.0-beta.3.tgz#d3e082ce97510d409a7ed96697bea36120ad39ce"
22 | integrity sha512-dYTMhWWw/nxXE9U2wXeBxfZm+cm7yDoUx2M7dYVcFmzWQvdtp0pbBZ0wovcB+LIRfC9xjUvNf18fHoguCQ6+IA==
23 |
24 | "@babel/core@^8.0.0-beta.3":
25 | version "8.0.0-beta.3"
26 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-8.0.0-beta.3.tgz#1fb51e505f603dd30a2b70e8baa24b20684cff31"
27 | integrity sha512-WiCavSOahhRtH6yEQWz3xhzDc2loDiFmtVcqkLkPKD1Z3ykysP5oSf7OcRZeygqjJqPXjf+WMipwzJvZyTfL6A==
28 | dependencies:
29 | "@babel/code-frame" "^8.0.0-beta.3"
30 | "@babel/generator" "^8.0.0-beta.3"
31 | "@babel/helper-compilation-targets" "^8.0.0-beta.3"
32 | "@babel/helpers" "^8.0.0-beta.3"
33 | "@babel/parser" "^8.0.0-beta.3"
34 | "@babel/template" "^8.0.0-beta.3"
35 | "@babel/traverse" "^8.0.0-beta.3"
36 | "@babel/types" "^8.0.0-beta.3"
37 | "@jridgewell/remapping" "^2.3.5"
38 | "@types/gensync" "^1.0.0"
39 | convert-source-map "^2.0.0"
40 | debug "^4.1.0"
41 | gensync "^1.0.0-beta.2"
42 | json5 "^2.2.3"
43 | semver "^7.3.4"
44 |
45 | "@babel/generator@^8.0.0-beta.3":
46 | version "8.0.0-beta.3"
47 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-8.0.0-beta.3.tgz#7bd88dacf4d7c6fdb75135da5a5da2c859d03b58"
48 | integrity sha512-nwMbTx7lMjvbnMPeZLh9tOX+SYyvO1pLIk3lAZ9pkYvMEr36NakNarx4osFPmFXiSfKFkKxdJuxlHGIT5Xyjtw==
49 | dependencies:
50 | "@babel/parser" "^8.0.0-beta.3"
51 | "@babel/types" "^8.0.0-beta.3"
52 | "@jridgewell/gen-mapping" "^0.3.12"
53 | "@jridgewell/trace-mapping" "^0.3.28"
54 | "@types/jsesc" "^2.5.0"
55 | jsesc "^3.0.2"
56 |
57 | "@babel/helper-annotate-as-pure@^8.0.0-beta.3":
58 | version "8.0.0-beta.3"
59 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-8.0.0-beta.3.tgz#2e3a09a2c4f3b944fe237cfdd110f1f3c849eb3f"
60 | integrity sha512-Pzu1bmE7Ki55GouW0FzBUvbmhUqhLigm0UIafumU3b1qEvzWETR17tlkR04lZI21Ud2w4jNpVpZI62yVQJ4vYQ==
61 | dependencies:
62 | "@babel/types" "^8.0.0-beta.3"
63 |
64 | "@babel/helper-compilation-targets@^7.27.2":
65 | version "7.27.2"
66 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
67 | integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
68 | dependencies:
69 | "@babel/compat-data" "^7.27.2"
70 | "@babel/helper-validator-option" "^7.27.1"
71 | browserslist "^4.24.0"
72 | lru-cache "^5.1.1"
73 | semver "^6.3.1"
74 |
75 | "@babel/helper-compilation-targets@^8.0.0-beta.3":
76 | version "8.0.0-beta.3"
77 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0-beta.3.tgz#caa54b33474004e7b15cbc1d3f9d25b6a296d65a"
78 | integrity sha512-izyaOQ18BRlbBZuJZbj44lTMEZfuf0BVFAVwdnI7rNmDaGhQWaNMp5UGKZfHpBLFCqaEjUQZ9gVYIypwLOMvjw==
79 | dependencies:
80 | "@babel/compat-data" "^8.0.0-beta.3"
81 | "@babel/helper-validator-option" "^8.0.0-beta.3"
82 | browserslist "^4.24.0"
83 | lru-cache "^7.14.1"
84 | semver "^7.3.4"
85 |
86 | "@babel/helper-create-class-features-plugin@^8.0.0-beta.3":
87 | version "8.0.0-beta.3"
88 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-8.0.0-beta.3.tgz#c39d25e4c900b6b59a1a5ab387a75e95694ecec2"
89 | integrity sha512-FSRTjihtAstfHZvIE5oRZMdGM1UflulGT4RGsTH2GAhxDMvJVEfTqQQZqP3acnfgXMwMA14XVbPi3Tb9iefRKg==
90 | dependencies:
91 | "@babel/helper-annotate-as-pure" "^8.0.0-beta.3"
92 | "@babel/helper-member-expression-to-functions" "^8.0.0-beta.3"
93 | "@babel/helper-optimise-call-expression" "^8.0.0-beta.3"
94 | "@babel/helper-replace-supers" "^8.0.0-beta.3"
95 | "@babel/helper-skip-transparent-expression-wrappers" "^8.0.0-beta.3"
96 | "@babel/traverse" "^8.0.0-beta.3"
97 | semver "^7.3.4"
98 |
99 | "@babel/helper-create-regexp-features-plugin@^8.0.0-beta.3":
100 | version "8.0.0-beta.3"
101 | resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-8.0.0-beta.3.tgz#31889a8dd6297230935f6b6c7d7cd0be00bf8a7a"
102 | integrity sha512-kgJw3pTE8aNea7Wrqi/W80pJ1Iu4YO9vuYEL5fG3mxfxWkpD9WRR3Prk6QggfIcS3cMLkEpSUm1QHzHGlUkpjA==
103 | dependencies:
104 | "@babel/helper-annotate-as-pure" "^8.0.0-beta.3"
105 | regexpu-core "^6.3.1"
106 | semver "^7.3.4"
107 |
108 | "@babel/helper-define-polyfill-provider@^0.6.5":
109 | version "0.6.5"
110 | resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753"
111 | integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==
112 | dependencies:
113 | "@babel/helper-compilation-targets" "^7.27.2"
114 | "@babel/helper-plugin-utils" "^7.27.1"
115 | debug "^4.4.1"
116 | lodash.debounce "^4.0.8"
117 | resolve "^1.22.10"
118 |
119 | "@babel/helper-globals@^8.0.0-beta.3":
120 | version "8.0.0-beta.3"
121 | resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-8.0.0-beta.3.tgz#8480e5f82d2260db92ccd5df060f700f608a68a5"
122 | integrity sha512-dk4zM35aDJxpAp4o0RVO0bbQEHl5fUiXuoF6PxstWnZbuAu4PT1cKN838q+0WE6u+64mfNGaCm6uiWXQIwkn9Q==
123 |
124 | "@babel/helper-member-expression-to-functions@^8.0.0-beta.3":
125 | version "8.0.0-beta.3"
126 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-8.0.0-beta.3.tgz#1cef6a3c028ccbfae6c29e9bef7541e54fbea046"
127 | integrity sha512-5j1Oa66PbS+8IO36ALZW0Yvj3XS0F6tRgWfwSVqCqe9iQTWgbc5kgzxSIOgUbkoRe9Gc4Ca/5YqxAW8PMm5mfw==
128 | dependencies:
129 | "@babel/traverse" "^8.0.0-beta.3"
130 | "@babel/types" "^8.0.0-beta.3"
131 |
132 | "@babel/helper-module-imports@^8.0.0-beta.3":
133 | version "8.0.0-beta.3"
134 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-8.0.0-beta.3.tgz#f54a5a727f20f63058c05d354450783a42e4bdc5"
135 | integrity sha512-k/E56kDd5bXH2HDNG1DY/+XNfv+jnYKaTOq2lQ/XGM399JmVeYMcKCShZgPw8MuJJ+tSEKfUH8G/hBeZ7k7mfA==
136 | dependencies:
137 | "@babel/traverse" "^8.0.0-beta.3"
138 | "@babel/types" "^8.0.0-beta.3"
139 |
140 | "@babel/helper-module-transforms@^8.0.0-beta.3":
141 | version "8.0.0-beta.3"
142 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-8.0.0-beta.3.tgz#9d5aeae078afe9405b577ab2c5a64ef4e48dd9f3"
143 | integrity sha512-+mRHdTxk3+fxaRhrhnTSdCkzP/+nSRrxMBYrTggpWcIuOD6tq3rho757k2vobp4TM4A9d1QYOrudKJCvQKiywQ==
144 | dependencies:
145 | "@babel/helper-module-imports" "^8.0.0-beta.3"
146 | "@babel/helper-validator-identifier" "^8.0.0-beta.3"
147 | "@babel/traverse" "^8.0.0-beta.3"
148 |
149 | "@babel/helper-optimise-call-expression@^8.0.0-beta.3":
150 | version "8.0.0-beta.3"
151 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-8.0.0-beta.3.tgz#4266367a42a3fbea1696b4d17509d07a80943489"
152 | integrity sha512-bwmjWxLtdE5t3hQQlNPizT/2c2attbKJWZFhZ5iI++t6byWvHbn5FZy0FSnzFDN7LrlzfYP7eMPoWjQ7/elJTA==
153 | dependencies:
154 | "@babel/types" "^8.0.0-beta.3"
155 |
156 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.27.1":
157 | version "7.27.1"
158 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
159 | integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
160 |
161 | "@babel/helper-plugin-utils@^8.0.0-beta.3":
162 | version "8.0.0-beta.3"
163 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-8.0.0-beta.3.tgz#3f6e4768728c3879fe423ea414a5c195cff99a9b"
164 | integrity sha512-aq1nWma0v+51w59ANJOn0UX6tOGvJukXEQB3TWNGK8So8xEbttbwd56UMpa/nvArD/l6nt166QJAeYKEufCPWw==
165 |
166 | "@babel/helper-remap-async-to-generator@^8.0.0-beta.3":
167 | version "8.0.0-beta.3"
168 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-8.0.0-beta.3.tgz#ed80d31254efcab4770d1c5779cabdd71ddccb7c"
169 | integrity sha512-vK6gA0ZJvdWQn4pdb0YbE4aJrdhC7hwtHkkuCE6E+fhNyq2EYEdzAzLQamAnOG9rWaWODg99HvBFbiF1KQqTkA==
170 | dependencies:
171 | "@babel/helper-annotate-as-pure" "^8.0.0-beta.3"
172 | "@babel/helper-wrap-function" "^8.0.0-beta.3"
173 | "@babel/traverse" "^8.0.0-beta.3"
174 |
175 | "@babel/helper-replace-supers@^8.0.0-beta.3":
176 | version "8.0.0-beta.3"
177 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-8.0.0-beta.3.tgz#079e75a795826fc232e9233ffc82a509cf4e6c07"
178 | integrity sha512-YBAHLfbT+kG6ymRnC2O/RXe9rgezIGiLbg51ZNjpzd++mwJ1ncWhP5Oq6Lldo+bcuEVt24EO+0z93yxXvQVZpw==
179 | dependencies:
180 | "@babel/helper-member-expression-to-functions" "^8.0.0-beta.3"
181 | "@babel/helper-optimise-call-expression" "^8.0.0-beta.3"
182 | "@babel/traverse" "^8.0.0-beta.3"
183 |
184 | "@babel/helper-skip-transparent-expression-wrappers@^8.0.0-beta.3":
185 | version "8.0.0-beta.3"
186 | resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-8.0.0-beta.3.tgz#ac8fe4044c9fe5f3df65f19dc377a02e9e1c7f0d"
187 | integrity sha512-uRAYu5sBVgmsgJ4ivw9qNK1LZdKwu5M7IhIxin3KmxKygH2hQZLGkop90uHmqzoDOGn0OGcs48aZvgHXTNBfxQ==
188 | dependencies:
189 | "@babel/traverse" "^8.0.0-beta.3"
190 | "@babel/types" "^8.0.0-beta.3"
191 |
192 | "@babel/helper-string-parser@^7.27.1":
193 | version "7.27.1"
194 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
195 | integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
196 |
197 | "@babel/helper-string-parser@^8.0.0-beta.3":
198 | version "8.0.0-beta.3"
199 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-8.0.0-beta.3.tgz#f7d536551c3714be96d9ca5694bffba4c20b830e"
200 | integrity sha512-qfGhy2DxvtYvJ/D+xLTe8EZLoMe3AGgeFeqsi+y8yDEl19iqZa3FSqhD33exl8oqQY2UOSbKPwoKYJLcyUdPog==
201 |
202 | "@babel/helper-validator-identifier@^7.28.5":
203 | version "7.28.5"
204 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4"
205 | integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
206 |
207 | "@babel/helper-validator-identifier@^8.0.0-beta.3":
208 | version "8.0.0-beta.3"
209 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.0-beta.3.tgz#edcbf16165b8cb8de4efafb343fb98821f097316"
210 | integrity sha512-0uFJz8fwc1WRgepEs6L8b+f2n1cTZqAevxJgnIOWRvYiNfGGXrSWCLOPgR3zzNgjaA1O6qvkqKLbTXJ5dYJ89Q==
211 |
212 | "@babel/helper-validator-option@^7.27.1":
213 | version "7.27.1"
214 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
215 | integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
216 |
217 | "@babel/helper-validator-option@^8.0.0-beta.3":
218 | version "8.0.0-beta.3"
219 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-8.0.0-beta.3.tgz#82a5474a31bd8133f68b4fe83d9c8de23bf8cc09"
220 | integrity sha512-qYSrvmcULMWq9GOfU6Gnws53A5whLvAHnnRHaXcx/l5AjZ2AVEdIdhBHPcUC3FsQsz4A8QecApsjdguGBiwAIQ==
221 |
222 | "@babel/helper-wrap-function@^8.0.0-beta.3":
223 | version "8.0.0-beta.3"
224 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-8.0.0-beta.3.tgz#9882e146b6ee27677b4750826d1f137e6a6a16b5"
225 | integrity sha512-AnEN6OSENC0Ti2uSaTaYHybQbugfQEDnp3g1bXWhan8/N8Bqi+Iwb7+1cbWH+FiVEv6YxVxvCpUXWKyOlUaB1g==
226 | dependencies:
227 | "@babel/template" "^8.0.0-beta.3"
228 | "@babel/traverse" "^8.0.0-beta.3"
229 | "@babel/types" "^8.0.0-beta.3"
230 |
231 | "@babel/helpers@^8.0.0-beta.3":
232 | version "8.0.0-beta.3"
233 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-8.0.0-beta.3.tgz#f04bd0e89df9013b7fa9b4f6a2cfdb7f05982263"
234 | integrity sha512-8j8G0pg26FxbQeTS8NztMvkb/O4r96PwxNWr3fpopeLKJSp/dMiBtZtjNAIv/3t0d7eqtlskX4bsInGuDw3Puw==
235 | dependencies:
236 | "@babel/template" "^8.0.0-beta.3"
237 | "@babel/types" "^8.0.0-beta.3"
238 |
239 | "@babel/parser@^8.0.0-beta.3":
240 | version "8.0.0-beta.3"
241 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-8.0.0-beta.3.tgz#e93313d4a7a402e059cd037df179af5cf7ae6f00"
242 | integrity sha512-RPeTDOkzKPR9Laf0dTxx3SE2vRnAPYXCRx0xPICijbLZsuGTZGZ95Kf3EcPQdWdzLmEOLGpdh9xMtiWW56sreA==
243 | dependencies:
244 | "@babel/types" "^8.0.0-beta.3"
245 |
246 | "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^8.0.0-beta.3":
247 | version "8.0.0-beta.3"
248 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-8.0.0-beta.3.tgz#79fd715a2f45e285221af427773dc46f04f72ff4"
249 | integrity sha512-gTreCus6i5oxxIcuFLRLCuvRsfkY9FrLpBOY1hTFiMLhb5Y7bRhyMvvwPWOA4YxN9OyW+PP4QyJ0bBmN8QLnIw==
250 | dependencies:
251 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
252 | "@babel/traverse" "^8.0.0-beta.3"
253 |
254 | "@babel/plugin-bugfix-safari-class-field-initializer-scope@^8.0.0-beta.3":
255 | version "8.0.0-beta.3"
256 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-8.0.0-beta.3.tgz#cfba2dac2e90b36a5a25b275e4d7bd66e51bb35c"
257 | integrity sha512-8BFpulXbv20p2kkV1PT6JgC7PblSGAUAr/mxMWIs+zFI5guL7EeUbFAtSDs4SJfA1EC9J2UWdlTHBMtP/5BfDQ==
258 | dependencies:
259 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
260 |
261 | "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^8.0.0-beta.3":
262 | version "8.0.0-beta.3"
263 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-8.0.0-beta.3.tgz#efd0808d1cefac253061dc4da21cff895704fcee"
264 | integrity sha512-TcU8KdeVNbjyb+MHUC8ERMUe2hxnmix8BCQP1OZYKbapHa8hLa4tVnuNjjdzVvO4Sda84lfnTuUwj3cYJnCDAA==
265 | dependencies:
266 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
267 |
268 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^8.0.0-beta.3":
269 | version "8.0.0-beta.3"
270 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-8.0.0-beta.3.tgz#19f059e58aa02c8ece1449b681d1f2539ba7027f"
271 | integrity sha512-fwLt2O9nfMMP/vmSkpQAS+OIQZOjLqyiHqXWGgQ9dZ2P5qBxFamM1C+RlQ521jxd+nBkypiAwnH2zTDxqR56wA==
272 | dependencies:
273 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
274 | "@babel/helper-skip-transparent-expression-wrappers" "^8.0.0-beta.3"
275 | "@babel/plugin-transform-optional-chaining" "^8.0.0-beta.3"
276 |
277 | "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^8.0.0-beta.3":
278 | version "8.0.0-beta.3"
279 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-8.0.0-beta.3.tgz#3d8a22838ea6805da64fa234f70c7dfc279050d2"
280 | integrity sha512-XRwl8Dcp96fSwxZyiVJYa8p9UEqohvettsnoWt6Ah27Q4b7Tb8Q7L8O+9T0LArDd1hxPnVhIzXIdxLdophRsfQ==
281 | dependencies:
282 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
283 |
284 | "@babel/plugin-proposal-decorators@^8.0.0-beta.3":
285 | version "8.0.0-beta.3"
286 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-8.0.0-beta.3.tgz#dec30a7e096058a1849658f036fabab2430e39af"
287 | integrity sha512-0BsnGkgQW6d+THIHwt0tCwLGXNNJ0VpC8LfrXTqm43GOX3FD58RtT8wW19RqfmgCHQhedKvyntOnT5sW7xWozQ==
288 | dependencies:
289 | "@babel/helper-create-class-features-plugin" "^8.0.0-beta.3"
290 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
291 | "@babel/plugin-syntax-decorators" "^8.0.0-beta.3"
292 |
293 | "@babel/plugin-syntax-decorators@^8.0.0-beta.3":
294 | version "8.0.0-beta.3"
295 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-8.0.0-beta.3.tgz#fbba2d4b80c6c546e6075dedae0ccfe0d3300276"
296 | integrity sha512-xctxhLPgJP06+Ex5iUvUzfMqqYhZRT/wHZ3lSscic233/MuAgB1aHqOY8tF6R1KYAicJJYKng8dyJd8HZTHWLg==
297 | dependencies:
298 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
299 |
300 | "@babel/plugin-syntax-jsx@^8.0.0-beta.3":
301 | version "8.0.0-beta.3"
302 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-8.0.0-beta.3.tgz#07b24b29d5cda5a3dcc39c899dbc7ee67c8c6bd4"
303 | integrity sha512-aWPtIsp3sc+4xgqdZbdUHOhwiZfzTutSgEpyRUybomAhIzw6jur3489G2nrIaGpOxabsxZnXRLN2FFcmpQqkfA==
304 | dependencies:
305 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
306 |
307 | "@babel/plugin-syntax-typescript@^8.0.0-beta.3":
308 | version "8.0.0-beta.3"
309 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-8.0.0-beta.3.tgz#0cfbcd95f5ed03a743a31e8fbd02de9ae5d5c2cd"
310 | integrity sha512-2n+52f+FEaIqeIiOyysN62xNZY7sSkQfO0M9SGY4fXy1ldP1abHJbdSDNCyDdz38lY9fijgPvpPuJwLiZaMyxQ==
311 | dependencies:
312 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
313 |
314 | "@babel/plugin-transform-arrow-functions@^8.0.0-beta.3":
315 | version "8.0.0-beta.3"
316 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-8.0.0-beta.3.tgz#86a7dc7af43973e3d4275c7fc0481c81c6cde6bb"
317 | integrity sha512-HbS7IIuGRUJNsW06iwXdLxbWgsvS6tPai2boQFNItO9LfePv6DVhcVElTV0ZdMIsoxAhJumhMIlLPjk4AlE1bA==
318 | dependencies:
319 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
320 |
321 | "@babel/plugin-transform-async-generator-functions@^8.0.0-beta.3":
322 | version "8.0.0-beta.3"
323 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-8.0.0-beta.3.tgz#307a98f97a0e1f6dfd7b4a3bd811b2acb70a44bd"
324 | integrity sha512-US4Tyey6gnR7L8LGSKby4YHN8b7e/efDcuK6PpkbnADyIs11uERTo0hmNkRiFBXwqsF/bnfuxx4khHI8sKJ22g==
325 | dependencies:
326 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
327 | "@babel/helper-remap-async-to-generator" "^8.0.0-beta.3"
328 | "@babel/traverse" "^8.0.0-beta.3"
329 |
330 | "@babel/plugin-transform-async-to-generator@^8.0.0-beta.3":
331 | version "8.0.0-beta.3"
332 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-8.0.0-beta.3.tgz#84d2f64b2c6c819c1f49ccee8a367fbb50577e3c"
333 | integrity sha512-mEqFI+UppZhaiQkggTdcY66GdgoKB/qSYu70c05ttdMrUje347skIVS2e+esQPvkY/4EwSPLxBsfraKqhQZ/Xw==
334 | dependencies:
335 | "@babel/helper-module-imports" "^8.0.0-beta.3"
336 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
337 | "@babel/helper-remap-async-to-generator" "^8.0.0-beta.3"
338 |
339 | "@babel/plugin-transform-block-scoped-functions@^8.0.0-beta.3":
340 | version "8.0.0-beta.3"
341 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-8.0.0-beta.3.tgz#bf1d17015012c3b8a24b5fb11f08d04c9532a55f"
342 | integrity sha512-0pIEqxOiY4YCTHtElJyMuCo+U9jKGF1iuE96bdZZ5SJhtapl5ltydjUKsFdcQhoWj3bJ6TWmbcF3cxtummooTA==
343 | dependencies:
344 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
345 |
346 | "@babel/plugin-transform-block-scoping@^8.0.0-beta.3":
347 | version "8.0.0-beta.3"
348 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-8.0.0-beta.3.tgz#8e9e9ed5f9d52131d3bf9680c21bd10c201fbfc2"
349 | integrity sha512-wS0ss1VN1uEhIW+sAOiWjUu7/V1vJfFHJ9Pu2y7DpHmo+tbA9/NVVFzFpfMyPTfW33zTfwnT6wLETw8HTL6PXg==
350 | dependencies:
351 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
352 |
353 | "@babel/plugin-transform-class-properties@^8.0.0-beta.3":
354 | version "8.0.0-beta.3"
355 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-8.0.0-beta.3.tgz#4a4c4099b89861f52548d03d38427751636bb5cd"
356 | integrity sha512-GzQtf/kXrLiL9j30VU+7z2Xjq0hLQDi5C6rGCiq0W77JRCXq3EXqD9oDloCDbb6p4PULzJ2frUkQJWUT5uvdog==
357 | dependencies:
358 | "@babel/helper-create-class-features-plugin" "^8.0.0-beta.3"
359 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
360 |
361 | "@babel/plugin-transform-class-static-block@^8.0.0-beta.3":
362 | version "8.0.0-beta.3"
363 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-8.0.0-beta.3.tgz#59f8a7ff850ae8ae528d09bc50d543d996879080"
364 | integrity sha512-j51E8VJpFSNoY17IbkgE8KDCtufkoykYFFiUOtyeJmot543x1b+Nf6HTNjHwn3pDIQ7kZ4YYxczQTqxg4sbkrA==
365 | dependencies:
366 | "@babel/helper-create-class-features-plugin" "^8.0.0-beta.3"
367 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
368 |
369 | "@babel/plugin-transform-classes@^8.0.0-beta.3":
370 | version "8.0.0-beta.3"
371 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-8.0.0-beta.3.tgz#bee7c099f2987c18558f6b3c8fc64110a6080a24"
372 | integrity sha512-WaZ0knT2BGTUQHS4YGWR5sv/b+bdscT7CiHJuJkuML8i1GAW9rc1nGTCGaYT/o3hc26Iy0xH9Tkfr6LZiU9Btw==
373 | dependencies:
374 | "@babel/helper-annotate-as-pure" "^8.0.0-beta.3"
375 | "@babel/helper-compilation-targets" "^8.0.0-beta.3"
376 | "@babel/helper-globals" "^8.0.0-beta.3"
377 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
378 | "@babel/helper-replace-supers" "^8.0.0-beta.3"
379 | "@babel/traverse" "^8.0.0-beta.3"
380 |
381 | "@babel/plugin-transform-computed-properties@^8.0.0-beta.3":
382 | version "8.0.0-beta.3"
383 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-8.0.0-beta.3.tgz#e5f8cebbb7790007394e35db784688839c69dc7f"
384 | integrity sha512-iAVxdcR9GIrvQ+f0+nuSvqQWNm/512K/A4O/dmuHYIENVk5m/5HssqBISl63geeLeTKEgCPEDUJXylFriaaK9w==
385 | dependencies:
386 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
387 | "@babel/template" "^8.0.0-beta.3"
388 |
389 | "@babel/plugin-transform-destructuring@^8.0.0-beta.3":
390 | version "8.0.0-beta.3"
391 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-8.0.0-beta.3.tgz#f31790796ffc1c26919d3c00175600a3cd911f86"
392 | integrity sha512-NRpgq7ir6fAhhTjm7Rfyl6QaKCheFLi6pXT83lZF5GGQiLMczL/oCwjOdO9rcyjz1fxnnKJOk7ipZ1dMTj3+hw==
393 | dependencies:
394 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
395 | "@babel/traverse" "^8.0.0-beta.3"
396 |
397 | "@babel/plugin-transform-dotall-regex@^8.0.0-beta.3":
398 | version "8.0.0-beta.3"
399 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-8.0.0-beta.3.tgz#4746e9e88a222c0bb6cf285869400a094f8431f6"
400 | integrity sha512-mScdPuKY3PshfvlWqGg2ash8PtAZkpDf1E8VESi2lGYlYge/boDbJXtTA3gcrYhvFuf8YkeENZCYu7+pZ/F26w==
401 | dependencies:
402 | "@babel/helper-create-regexp-features-plugin" "^8.0.0-beta.3"
403 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
404 |
405 | "@babel/plugin-transform-duplicate-keys@^8.0.0-beta.3":
406 | version "8.0.0-beta.3"
407 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-8.0.0-beta.3.tgz#7ac094d20414dfbf6fe0cbb0a72e9e506dd37625"
408 | integrity sha512-fMjtMUNtpkPhI4WY5ZoVcFw6i3go9+ECHdl3AbSEX2cEJdPBhqiO/WJ4f7kbYyNUQmKYhH5RYq3fFcoMDvgQHQ==
409 | dependencies:
410 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
411 |
412 | "@babel/plugin-transform-duplicate-named-capturing-groups-regex@^8.0.0-beta.3":
413 | version "8.0.0-beta.3"
414 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-8.0.0-beta.3.tgz#6f481d107ec3b0df3e7c6dff271069b463913875"
415 | integrity sha512-fxqdbqUjKKTRGiMYRpo5tIzmrUt3ODOcVQb7lU5KQuFN1cUGT6sxJ7YMOnywB1VTest5Izznw672Fz4o0I/r6g==
416 | dependencies:
417 | "@babel/helper-create-regexp-features-plugin" "^8.0.0-beta.3"
418 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
419 |
420 | "@babel/plugin-transform-dynamic-import@^8.0.0-beta.3":
421 | version "8.0.0-beta.3"
422 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-8.0.0-beta.3.tgz#5a260f52bfc431e0f3133eb9fa06f558d2e8af35"
423 | integrity sha512-3v71k4AymYhduEShNIPtzVPd3lmVaOhO6E1RwtfpWefOT/OoZBJizWu552nfngl3vhtY8FeWI823thpBTpHyRQ==
424 | dependencies:
425 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
426 |
427 | "@babel/plugin-transform-explicit-resource-management@^8.0.0-beta.3":
428 | version "8.0.0-beta.3"
429 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-8.0.0-beta.3.tgz#da113b4350e8f7278b57566edd98e40747b44407"
430 | integrity sha512-kzR0ZIMqeOa9KOCBGmtJO7fy/nV4ZaWBkcPWmi3CTBR7OOovcuBkvynN5oJxthtAUw8fH3d1HB3JMBtyyAoDbA==
431 | dependencies:
432 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
433 | "@babel/plugin-transform-destructuring" "^8.0.0-beta.3"
434 |
435 | "@babel/plugin-transform-exponentiation-operator@^8.0.0-beta.3":
436 | version "8.0.0-beta.3"
437 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-8.0.0-beta.3.tgz#4c18307acefa4cd2720b3f79de9971f9d42de447"
438 | integrity sha512-T5XVdibk0+5zb1aTtUYls27ecF9crUaAdcvOFH0NVAFdgZjmgpQkS8MMUlY+xx5TUjJgLf5NyNvGKCmJfJkiaQ==
439 | dependencies:
440 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
441 |
442 | "@babel/plugin-transform-export-namespace-from@^8.0.0-beta.3":
443 | version "8.0.0-beta.3"
444 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-8.0.0-beta.3.tgz#66a1fc399a9a3c992fdeed9ce18817e324c7632e"
445 | integrity sha512-poTUx3C3QetMsiS3dnBIivRyS6qp5EV0AA0Q//rtAyFB4do4Eqw740ROBltIZrR6m1ahmsznVt90PTsvSxljmQ==
446 | dependencies:
447 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
448 |
449 | "@babel/plugin-transform-for-of@^8.0.0-beta.3":
450 | version "8.0.0-beta.3"
451 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-8.0.0-beta.3.tgz#6ff8232fe33973d5a99482e7a5440aa154eaaf1b"
452 | integrity sha512-NqwPxFpnMQS8zcr8Z0wyDpjHifpf/2imL2CeReRRY5XlsitOQpKYyd789IJQZtIsnWh2RZqZ9j87s7Tju8Hh1Q==
453 | dependencies:
454 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
455 | "@babel/helper-skip-transparent-expression-wrappers" "^8.0.0-beta.3"
456 |
457 | "@babel/plugin-transform-function-name@^8.0.0-beta.3":
458 | version "8.0.0-beta.3"
459 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-8.0.0-beta.3.tgz#cc0b6346cd5cb06973936fb3a995531a8f81d2fe"
460 | integrity sha512-H6HVFQUvHB7wSj1mctMLxIReCQQRfuRFhkK21xh6ByNWqXxQ/rrvbGyzHwY4tgrfMuUheuWkt1PB3pS9yFU4ag==
461 | dependencies:
462 | "@babel/helper-compilation-targets" "^8.0.0-beta.3"
463 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
464 |
465 | "@babel/plugin-transform-json-strings@^8.0.0-beta.3":
466 | version "8.0.0-beta.3"
467 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-8.0.0-beta.3.tgz#21de9e8664f385124760e91c95e0e03bb9db732b"
468 | integrity sha512-KKANzuCn0VLJ10HSp7wWDMwdlCo0eTddJUBTzNsnJXXmaf1+7mscoS3PfFFz3iPpen3L7U8ZfIy0EBECs9bOww==
469 | dependencies:
470 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
471 |
472 | "@babel/plugin-transform-literals@^8.0.0-beta.3":
473 | version "8.0.0-beta.3"
474 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-8.0.0-beta.3.tgz#5f7b9400c01b96b4598f0b4fd8441a2c4f6fa460"
475 | integrity sha512-PiBOnjnQ8rgyx5bH4AhrfEsCJbmKN/sbB3cg5PiOECwCjhavlmeA6yQNQO6l+xuCq5UgBi5PjNCIvkk57ZGKcg==
476 | dependencies:
477 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
478 |
479 | "@babel/plugin-transform-logical-assignment-operators@^8.0.0-beta.3":
480 | version "8.0.0-beta.3"
481 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-8.0.0-beta.3.tgz#67fde00584a5cb69fae92a08175505ce8598a431"
482 | integrity sha512-75JMAPVnaxpCQNNAt1Mn1mDJ5kiDSeY7DMIR5kLD1vVCOtzp2vRPKQjTT7pVeWbOD8VZDhgXoRZT0XyWd9GZyw==
483 | dependencies:
484 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
485 |
486 | "@babel/plugin-transform-member-expression-literals@^8.0.0-beta.3":
487 | version "8.0.0-beta.3"
488 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-8.0.0-beta.3.tgz#d772f0bbcebfb4e72150dc21cf21fa600ec60886"
489 | integrity sha512-NDwf4Tw8cX0Hats9mg+NLfb032rggzWrqq/riXfmmvpGlCPNRdibv6wWw5DiTiOoRQUPJdvVJr7hKN1dfT4BAw==
490 | dependencies:
491 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
492 |
493 | "@babel/plugin-transform-modules-amd@^8.0.0-beta.3":
494 | version "8.0.0-beta.3"
495 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-8.0.0-beta.3.tgz#4b82d4e351bf10663d3c2974ae136f473e1a0778"
496 | integrity sha512-Sf3tdAT0LEaAYQqwwQaR8f3UxzH/IfsVGar3lD6ccoB7xbHgYzPVKYW3BcmW8VsaQgtlUMvnQ5nO/fWOmuv1ew==
497 | dependencies:
498 | "@babel/helper-module-transforms" "^8.0.0-beta.3"
499 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
500 |
501 | "@babel/plugin-transform-modules-commonjs@^8.0.0-beta.3":
502 | version "8.0.0-beta.3"
503 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-8.0.0-beta.3.tgz#e86008d2f6091d5d5027407ee181c7f8f0a74de2"
504 | integrity sha512-roHujOknroBT5R8KNeOBAYNwkcx+hivke20D1ddTQSP5+808A3boR28iW1fkAA4yVhDb+YzQH/L1bFu2+QDkfg==
505 | dependencies:
506 | "@babel/helper-module-transforms" "^8.0.0-beta.3"
507 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
508 |
509 | "@babel/plugin-transform-modules-systemjs@^8.0.0-beta.3":
510 | version "8.0.0-beta.3"
511 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-8.0.0-beta.3.tgz#c9ed3ba0b4b2131561bb65c3736b931f13482df0"
512 | integrity sha512-ov+OzAgz3BtPuehIM2u13S5bHrJeOnnofyWtjTYvhWY/PveBl5kkoSPvWapr6f2PXcjR09hpG+SGL7m/2VEp8g==
513 | dependencies:
514 | "@babel/helper-module-transforms" "^8.0.0-beta.3"
515 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
516 | "@babel/helper-validator-identifier" "^8.0.0-beta.3"
517 |
518 | "@babel/plugin-transform-modules-umd@^8.0.0-beta.3":
519 | version "8.0.0-beta.3"
520 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-8.0.0-beta.3.tgz#8f8061b2bb0b383924760b4b0b62cb0ced5be239"
521 | integrity sha512-GJktSnNxE4UFV3X47V+pfCQoNHo8ffYp07LDAXMQoSVUMMtlYqTYai9JojEug8jdO02TisdsHTbXhWpRmtjmZA==
522 | dependencies:
523 | "@babel/helper-module-transforms" "^8.0.0-beta.3"
524 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
525 |
526 | "@babel/plugin-transform-named-capturing-groups-regex@^8.0.0-beta.3":
527 | version "8.0.0-beta.3"
528 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-8.0.0-beta.3.tgz#38ebb41cc9b916b793df7f50f7b707ddea3871e0"
529 | integrity sha512-rfZ69fZDObqep3rKtSeuRyry8d76nNOnYD9M0+GZ98y2461zsVRuA6+24cetufIiN3GUKYU+bKRWiBK/QWhD9g==
530 | dependencies:
531 | "@babel/helper-create-regexp-features-plugin" "^8.0.0-beta.3"
532 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
533 |
534 | "@babel/plugin-transform-new-target@^8.0.0-beta.3":
535 | version "8.0.0-beta.3"
536 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-8.0.0-beta.3.tgz#e8e1a4245a108886f9c17093af76d9324060979e"
537 | integrity sha512-qXqX34+Q1ex4VAST9wrtS1zceGi//hPhjv45dyIQFNwmgp8L1+Bh/DdB2ZvEiekCnC0WYG87w6gCKj5TF1V+pQ==
538 | dependencies:
539 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
540 |
541 | "@babel/plugin-transform-nullish-coalescing-operator@^8.0.0-beta.3":
542 | version "8.0.0-beta.3"
543 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-8.0.0-beta.3.tgz#08713f273af1a724c44ba3bd68aaa0c25b988be2"
544 | integrity sha512-MPXGBhB/YLAkLaU2vbZU/IJl7p3OQccAEYhbUKTZYaC4pqqhFiuvQHRNiBx3k65756sKgZDnu83k+/POOdOiTA==
545 | dependencies:
546 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
547 |
548 | "@babel/plugin-transform-numeric-separator@^8.0.0-beta.3":
549 | version "8.0.0-beta.3"
550 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-8.0.0-beta.3.tgz#ccc0df2db95e3c9d280b9840e5f98011572bfcc7"
551 | integrity sha512-FIWA78xgT/aariiKDD+mj6cYZNT0+2nO7JXVUfo1tmzUxxVo2GFlwtzc2PrTvZai5Kec5KKwp+qH1bY5ggOkRA==
552 | dependencies:
553 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
554 |
555 | "@babel/plugin-transform-object-rest-spread@^8.0.0-beta.3":
556 | version "8.0.0-beta.3"
557 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-8.0.0-beta.3.tgz#2aebafba99957e6aada89053cf88fb3f34c501ad"
558 | integrity sha512-tQInGn6yDOg22tFu/rth+ZoRTjV6p3L5RDRSJpRMDh/nIsAT6fMyTjnFOiJRkK72bIt3Yuh8HtOAw90CICNkNA==
559 | dependencies:
560 | "@babel/helper-compilation-targets" "^8.0.0-beta.3"
561 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
562 | "@babel/plugin-transform-destructuring" "^8.0.0-beta.3"
563 | "@babel/plugin-transform-parameters" "^8.0.0-beta.3"
564 | "@babel/traverse" "^8.0.0-beta.3"
565 |
566 | "@babel/plugin-transform-object-super@^8.0.0-beta.3":
567 | version "8.0.0-beta.3"
568 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-8.0.0-beta.3.tgz#e3f7594e5fcbe9d69520b48be447f628ef2a2268"
569 | integrity sha512-Mxs0RWt4+FHTdtQPisHlAcPoQD+XkhJB41UxbRmkMHphMFtvi6DKvjnVqbpLjAQG/Vo23CS39uejbTjoaP6kyg==
570 | dependencies:
571 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
572 | "@babel/helper-replace-supers" "^8.0.0-beta.3"
573 |
574 | "@babel/plugin-transform-optional-catch-binding@^8.0.0-beta.3":
575 | version "8.0.0-beta.3"
576 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-8.0.0-beta.3.tgz#11a18c2b475b2afc42e8d318cb4c794db9472eec"
577 | integrity sha512-EGbugGymPyfxm3bXTgNEV2L/0ZpMozF+XP6G2YYxOhH0CZV0OLkl8LegH1sCQtBz9mVsu6SDIZzZNJKp1rNAXg==
578 | dependencies:
579 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
580 |
581 | "@babel/plugin-transform-optional-chaining@^8.0.0-beta.3":
582 | version "8.0.0-beta.3"
583 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-8.0.0-beta.3.tgz#d0dbd14e7bc5fce962c546ceb48e7e669e43183e"
584 | integrity sha512-D1MB99+Iqqx/X6xNSCnZY3wMaiMk+nc1YQYsqvs7YZmXavY/5xrPDm1CfbqAJHCd0IjaSgJDcqKqOAFQr85hyw==
585 | dependencies:
586 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
587 | "@babel/helper-skip-transparent-expression-wrappers" "^8.0.0-beta.3"
588 |
589 | "@babel/plugin-transform-parameters@^8.0.0-beta.3":
590 | version "8.0.0-beta.3"
591 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-8.0.0-beta.3.tgz#c4119d514c3c8533fc637139f38e46424f8d588f"
592 | integrity sha512-HTUF27Bv6lwqDv/AeuHBV32S80r5QvkDg1B3yimLw9V7G+NbFwFX4M9o8WJ0DwI7NKJ9zyaW7BD8Z8gjTTC99g==
593 | dependencies:
594 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
595 |
596 | "@babel/plugin-transform-private-methods@^8.0.0-beta.3":
597 | version "8.0.0-beta.3"
598 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-8.0.0-beta.3.tgz#740cea974c341c5d989fdb1bdb3f1f210f660726"
599 | integrity sha512-NALmqBE2TucAkB31Efzwgl6F2dCyUoNN0N79kIAesKEhS2gbyfPw0UgeyseNIaRZnrDfcrFo4/Mq/G1STZRqbg==
600 | dependencies:
601 | "@babel/helper-create-class-features-plugin" "^8.0.0-beta.3"
602 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
603 |
604 | "@babel/plugin-transform-private-property-in-object@^8.0.0-beta.3":
605 | version "8.0.0-beta.3"
606 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-8.0.0-beta.3.tgz#b51d7e274c3ff6846a74e928c5a9909d42cea391"
607 | integrity sha512-usSfCm7Ui0tYPpimSjjao5RtgGJY55RGajuNuoJKQ540lKPgRpJ+ciyd6dbMvcjIXhjAQrkkuxHjgdsBO9tJ+g==
608 | dependencies:
609 | "@babel/helper-annotate-as-pure" "^8.0.0-beta.3"
610 | "@babel/helper-create-class-features-plugin" "^8.0.0-beta.3"
611 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
612 |
613 | "@babel/plugin-transform-property-literals@^8.0.0-beta.3":
614 | version "8.0.0-beta.3"
615 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-8.0.0-beta.3.tgz#c582f48911a1410934e77e7f8be05812e6a359ee"
616 | integrity sha512-FB5ELEjk7Q8bXQgqLMiGTQ7nWPDA1SwI5oaG2iZnqzv9/2h7rLsTKQU9qYJdV101yf9zFPPW+ofFgDlKQS/h+w==
617 | dependencies:
618 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
619 |
620 | "@babel/plugin-transform-regenerator@^8.0.0-beta.3":
621 | version "8.0.0-beta.3"
622 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-8.0.0-beta.3.tgz#33da9ebaf97aea593cd62d9f85def16d6e9a432b"
623 | integrity sha512-JSzO7fOh493D0PAo/kHDoIEwwllQryNAEQZaFMjL3kkbyFtvLnppQZWKxvsEVnIv5HT5xoQY3Lz9ap36yCx2xw==
624 | dependencies:
625 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
626 |
627 | "@babel/plugin-transform-regexp-modifiers@^8.0.0-beta.3":
628 | version "8.0.0-beta.3"
629 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-8.0.0-beta.3.tgz#c8f31fe0787a15ffc98bd4e679003cf24ed5f2ee"
630 | integrity sha512-hNRAx3yyNaAC3VDev9uiC457khAs1FAmpJb0m7yfcRtPCYr2pz5AD/EVZe3y807L0JYGnNXE6fnLtdF+x8MXtA==
631 | dependencies:
632 | "@babel/helper-create-regexp-features-plugin" "^8.0.0-beta.3"
633 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
634 |
635 | "@babel/plugin-transform-reserved-words@^8.0.0-beta.3":
636 | version "8.0.0-beta.3"
637 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-8.0.0-beta.3.tgz#04937a8f62dc25bcdfaa7e3a5acaeea404056397"
638 | integrity sha512-LlP/BAYi4iMbkSweq0so6wKzCxzwPfyQdjwlSSfv7DAB8QUCgksanagXpYE1u8Daqb9N6q8sPjewQ66l4+DEfg==
639 | dependencies:
640 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
641 |
642 | "@babel/plugin-transform-shorthand-properties@^8.0.0-beta.3":
643 | version "8.0.0-beta.3"
644 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-8.0.0-beta.3.tgz#e220af3527c4452aa9c950b426964c60bfc4f4d7"
645 | integrity sha512-7+AwivgZd79iUuwxU7epEjgepqc5s/ornf6QYFwpdQArEG7q04bl1lUsgUBlq78MNoBnzkJS3nKFBcXHrFooDQ==
646 | dependencies:
647 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
648 |
649 | "@babel/plugin-transform-spread@^8.0.0-beta.3":
650 | version "8.0.0-beta.3"
651 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-8.0.0-beta.3.tgz#2a50a92e5abfc1a979037b828999a39c43959761"
652 | integrity sha512-S+SNsNKfwbJiMdndO8kOlkqTXW4RsV5djHXcpLBD7WpPewPGJJPMxqGcoN/s2sgzufciCoCZZ2/+iOsmIW8fNw==
653 | dependencies:
654 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
655 | "@babel/helper-skip-transparent-expression-wrappers" "^8.0.0-beta.3"
656 |
657 | "@babel/plugin-transform-sticky-regex@^8.0.0-beta.3":
658 | version "8.0.0-beta.3"
659 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-8.0.0-beta.3.tgz#b2ac8c09587091441a79c4966a360bd8d5e066cd"
660 | integrity sha512-aALMYgxqQC5JHEFIgCtlW7hvzzIrXeRTcYZ5CvsUZxk5MiASIZHTwn3TFZtxM2qu6d6uvhTUkkgS73V4R+Gumw==
661 | dependencies:
662 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
663 |
664 | "@babel/plugin-transform-template-literals@^8.0.0-beta.3":
665 | version "8.0.0-beta.3"
666 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-8.0.0-beta.3.tgz#14c88813c44fc55c2e20fb28a43772c960818014"
667 | integrity sha512-pasvkRsuGf/fwNaOmnYQbduat3QC8emxVgt9lpjdDAj2c/lLJgrGWutc7ASA6R7D8WO+v8tBoHSKsurPB9m0GQ==
668 | dependencies:
669 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
670 |
671 | "@babel/plugin-transform-typeof-symbol@^8.0.0-beta.3":
672 | version "8.0.0-beta.3"
673 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-8.0.0-beta.3.tgz#07959f820da4acc5f75744118442e20d6f5149b8"
674 | integrity sha512-PO2VmD/fuPqakzSdGXrc1XXk5rT14rF02AIMgB7pJQQJVSzIMHxGvFIqYxkbWm+KznO6D0Q31Ao9ZbKk6G8P9Q==
675 | dependencies:
676 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
677 |
678 | "@babel/plugin-transform-typescript@^8.0.0-beta.3":
679 | version "8.0.0-beta.3"
680 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-8.0.0-beta.3.tgz#32d330f8cd63ee60e092f0618f0431a6e7cd980e"
681 | integrity sha512-Tnjvx7FLHSntPxfJHVvrQd9RqaccET+W8ZSQ+FkMrH/6ncLvTlrBTzJNCq1dwRn+XRt5xKsfTYVWmBhcmOpzFA==
682 | dependencies:
683 | "@babel/helper-annotate-as-pure" "^8.0.0-beta.3"
684 | "@babel/helper-create-class-features-plugin" "^8.0.0-beta.3"
685 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
686 | "@babel/helper-skip-transparent-expression-wrappers" "^8.0.0-beta.3"
687 | "@babel/plugin-syntax-typescript" "^8.0.0-beta.3"
688 |
689 | "@babel/plugin-transform-unicode-escapes@^8.0.0-beta.3":
690 | version "8.0.0-beta.3"
691 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-8.0.0-beta.3.tgz#f8de5dd7cebaeaccc24469613c5b4ae7ec15b00c"
692 | integrity sha512-HhJtLyJmcfVnBjulfbHtWVzdvW3RXl+N6SaHJ4mGLB+yMU/DuJLJ/tqaoTCli+7WnsZvcSVX48rRRcEesFoZvQ==
693 | dependencies:
694 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
695 |
696 | "@babel/plugin-transform-unicode-property-regex@^8.0.0-beta.3":
697 | version "8.0.0-beta.3"
698 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-8.0.0-beta.3.tgz#391bdeddb2533c104ebd02f95c729a35eb9df1d3"
699 | integrity sha512-wk8KU6gVekgZhI6PDyGkyspUNoRBy1+1fi661rbRyEqB+gzCgvxWpmrle2QfDHUC12J/1fC4huSU1j283JxTxA==
700 | dependencies:
701 | "@babel/helper-create-regexp-features-plugin" "^8.0.0-beta.3"
702 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
703 |
704 | "@babel/plugin-transform-unicode-regex@^8.0.0-beta.3":
705 | version "8.0.0-beta.3"
706 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-8.0.0-beta.3.tgz#a474240c72684b0ca3d376d25821cc05958a778a"
707 | integrity sha512-w9UIyU7NejTuwz68lmLxdOdBYLPoI0oO8GBiGtV1BECu9RXoa/wFO0qi85JbLzSryaB3n0eL8IYuHrMmJjNXaw==
708 | dependencies:
709 | "@babel/helper-create-regexp-features-plugin" "^8.0.0-beta.3"
710 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
711 |
712 | "@babel/plugin-transform-unicode-sets-regex@^8.0.0-beta.3":
713 | version "8.0.0-beta.3"
714 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-8.0.0-beta.3.tgz#f8feac1a1d2c817d34e4e6ff8545cbd85feb19c9"
715 | integrity sha512-MstyvMJMRAWDoIXiSA8IHHQmGQyxixAzr8Zjfpqh0a5eR/XMMzWlhQjE4UVKdtqNSHfkdX2dPXIzLvIHOdlpww==
716 | dependencies:
717 | "@babel/helper-create-regexp-features-plugin" "^8.0.0-beta.3"
718 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
719 |
720 | "@babel/preset-env@^8.0.0-beta.3":
721 | version "8.0.0-beta.3"
722 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-8.0.0-beta.3.tgz#a2127dcb5c8f156973acb70a0bb730d9dc9846e6"
723 | integrity sha512-+yVxQpbedb37nYq2DMYHbjsy6e4pv/SRqy/lm8Y9vlpjo8OiGICG7MSKdtv/WpLEjhf3EbT4STCnE4Tvsxxu4Q==
724 | dependencies:
725 | "@babel/compat-data" "^8.0.0-beta.3"
726 | "@babel/helper-compilation-targets" "^8.0.0-beta.3"
727 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
728 | "@babel/helper-validator-option" "^8.0.0-beta.3"
729 | "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^8.0.0-beta.3"
730 | "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^8.0.0-beta.3"
731 | "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^8.0.0-beta.3"
732 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^8.0.0-beta.3"
733 | "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^8.0.0-beta.3"
734 | "@babel/plugin-transform-arrow-functions" "^8.0.0-beta.3"
735 | "@babel/plugin-transform-async-generator-functions" "^8.0.0-beta.3"
736 | "@babel/plugin-transform-async-to-generator" "^8.0.0-beta.3"
737 | "@babel/plugin-transform-block-scoped-functions" "^8.0.0-beta.3"
738 | "@babel/plugin-transform-block-scoping" "^8.0.0-beta.3"
739 | "@babel/plugin-transform-class-properties" "^8.0.0-beta.3"
740 | "@babel/plugin-transform-class-static-block" "^8.0.0-beta.3"
741 | "@babel/plugin-transform-classes" "^8.0.0-beta.3"
742 | "@babel/plugin-transform-computed-properties" "^8.0.0-beta.3"
743 | "@babel/plugin-transform-destructuring" "^8.0.0-beta.3"
744 | "@babel/plugin-transform-dotall-regex" "^8.0.0-beta.3"
745 | "@babel/plugin-transform-duplicate-keys" "^8.0.0-beta.3"
746 | "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^8.0.0-beta.3"
747 | "@babel/plugin-transform-dynamic-import" "^8.0.0-beta.3"
748 | "@babel/plugin-transform-explicit-resource-management" "^8.0.0-beta.3"
749 | "@babel/plugin-transform-exponentiation-operator" "^8.0.0-beta.3"
750 | "@babel/plugin-transform-export-namespace-from" "^8.0.0-beta.3"
751 | "@babel/plugin-transform-for-of" "^8.0.0-beta.3"
752 | "@babel/plugin-transform-function-name" "^8.0.0-beta.3"
753 | "@babel/plugin-transform-json-strings" "^8.0.0-beta.3"
754 | "@babel/plugin-transform-literals" "^8.0.0-beta.3"
755 | "@babel/plugin-transform-logical-assignment-operators" "^8.0.0-beta.3"
756 | "@babel/plugin-transform-member-expression-literals" "^8.0.0-beta.3"
757 | "@babel/plugin-transform-modules-amd" "^8.0.0-beta.3"
758 | "@babel/plugin-transform-modules-commonjs" "^8.0.0-beta.3"
759 | "@babel/plugin-transform-modules-systemjs" "^8.0.0-beta.3"
760 | "@babel/plugin-transform-modules-umd" "^8.0.0-beta.3"
761 | "@babel/plugin-transform-named-capturing-groups-regex" "^8.0.0-beta.3"
762 | "@babel/plugin-transform-new-target" "^8.0.0-beta.3"
763 | "@babel/plugin-transform-nullish-coalescing-operator" "^8.0.0-beta.3"
764 | "@babel/plugin-transform-numeric-separator" "^8.0.0-beta.3"
765 | "@babel/plugin-transform-object-rest-spread" "^8.0.0-beta.3"
766 | "@babel/plugin-transform-object-super" "^8.0.0-beta.3"
767 | "@babel/plugin-transform-optional-catch-binding" "^8.0.0-beta.3"
768 | "@babel/plugin-transform-optional-chaining" "^8.0.0-beta.3"
769 | "@babel/plugin-transform-parameters" "^8.0.0-beta.3"
770 | "@babel/plugin-transform-private-methods" "^8.0.0-beta.3"
771 | "@babel/plugin-transform-private-property-in-object" "^8.0.0-beta.3"
772 | "@babel/plugin-transform-property-literals" "^8.0.0-beta.3"
773 | "@babel/plugin-transform-regenerator" "^8.0.0-beta.3"
774 | "@babel/plugin-transform-regexp-modifiers" "^8.0.0-beta.3"
775 | "@babel/plugin-transform-reserved-words" "^8.0.0-beta.3"
776 | "@babel/plugin-transform-shorthand-properties" "^8.0.0-beta.3"
777 | "@babel/plugin-transform-spread" "^8.0.0-beta.3"
778 | "@babel/plugin-transform-sticky-regex" "^8.0.0-beta.3"
779 | "@babel/plugin-transform-template-literals" "^8.0.0-beta.3"
780 | "@babel/plugin-transform-typeof-symbol" "^8.0.0-beta.3"
781 | "@babel/plugin-transform-unicode-escapes" "^8.0.0-beta.3"
782 | "@babel/plugin-transform-unicode-property-regex" "^8.0.0-beta.3"
783 | "@babel/plugin-transform-unicode-regex" "^8.0.0-beta.3"
784 | "@babel/plugin-transform-unicode-sets-regex" "^8.0.0-beta.3"
785 | "@babel/preset-modules" "0.1.6-no-external-plugins"
786 | babel-plugin-polyfill-corejs3 "^0.13.0"
787 | core-js-compat "^3.43.0"
788 | semver "^7.3.4"
789 |
790 | "@babel/preset-modules@0.1.6-no-external-plugins":
791 | version "0.1.6-no-external-plugins"
792 | resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
793 | integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
794 | dependencies:
795 | "@babel/helper-plugin-utils" "^7.0.0"
796 | "@babel/types" "^7.4.4"
797 | esutils "^2.0.2"
798 |
799 | "@babel/preset-typescript@^8.0.0-beta.3":
800 | version "8.0.0-beta.3"
801 | resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-8.0.0-beta.3.tgz#8abd8f2053c8eaf6322b48e0c1488c83b52da462"
802 | integrity sha512-b0K12cx9/M4ULmJPOEFRQz3AoBZ8oRmOrugTMxeUb5VxUI9DJqxikzGnVz6DaTcQ3XipVNS7Z4lyuu1xuep1SA==
803 | dependencies:
804 | "@babel/helper-plugin-utils" "^8.0.0-beta.3"
805 | "@babel/helper-validator-option" "^8.0.0-beta.3"
806 | "@babel/plugin-syntax-jsx" "^8.0.0-beta.3"
807 | "@babel/plugin-transform-modules-commonjs" "^8.0.0-beta.3"
808 | "@babel/plugin-transform-typescript" "^8.0.0-beta.3"
809 |
810 | "@babel/template@^8.0.0-beta.3":
811 | version "8.0.0-beta.3"
812 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-8.0.0-beta.3.tgz#064e2446fd9c8dddfcf75b48786ea59492c69805"
813 | integrity sha512-81pXW7H54ULNZJjFKE5W/zjc2juIcWg+bIpZ1YiuYjFGF0xzoh7rSMrZ18AWJ6i+O84GMwW0kaFmnJCUYkyJTg==
814 | dependencies:
815 | "@babel/code-frame" "^8.0.0-beta.3"
816 | "@babel/parser" "^8.0.0-beta.3"
817 | "@babel/types" "^8.0.0-beta.3"
818 |
819 | "@babel/traverse@^8.0.0-beta.3":
820 | version "8.0.0-beta.3"
821 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-8.0.0-beta.3.tgz#28a70360f2380b7434c2e7581e976cffae9d74aa"
822 | integrity sha512-CHPsCP93tlyC8DuKsvITuLNQrktv2lSEWcCjWiMkehv+W34XfDxjWamIh/z2pDGYsUqZUQU9zknTi+8QxcAo8A==
823 | dependencies:
824 | "@babel/code-frame" "^8.0.0-beta.3"
825 | "@babel/generator" "^8.0.0-beta.3"
826 | "@babel/helper-globals" "^8.0.0-beta.3"
827 | "@babel/parser" "^8.0.0-beta.3"
828 | "@babel/template" "^8.0.0-beta.3"
829 | "@babel/types" "^8.0.0-beta.3"
830 | debug "^4.3.1"
831 |
832 | "@babel/types@^7.4.4":
833 | version "7.28.5"
834 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b"
835 | integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
836 | dependencies:
837 | "@babel/helper-string-parser" "^7.27.1"
838 | "@babel/helper-validator-identifier" "^7.28.5"
839 |
840 | "@babel/types@^8.0.0-beta.3":
841 | version "8.0.0-beta.3"
842 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-8.0.0-beta.3.tgz#416e850e7c9de84be79510bef0976aaeae8937c2"
843 | integrity sha512-ZGM+wROHjwHhVGpt7h3MumJk4rGi0LEYFuoCr4uX9FjdbPVFsU790NYFgVmUI5nZFCl0M6MJi9QKTpwXvg+pwA==
844 | dependencies:
845 | "@babel/helper-string-parser" "^8.0.0-beta.3"
846 | "@babel/helper-validator-identifier" "^8.0.0-beta.3"
847 |
848 | "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
849 | version "0.3.13"
850 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
851 | integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
852 | dependencies:
853 | "@jridgewell/sourcemap-codec" "^1.5.0"
854 | "@jridgewell/trace-mapping" "^0.3.24"
855 |
856 | "@jridgewell/remapping@^2.3.5":
857 | version "2.3.5"
858 | resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
859 | integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
860 | dependencies:
861 | "@jridgewell/gen-mapping" "^0.3.5"
862 | "@jridgewell/trace-mapping" "^0.3.24"
863 |
864 | "@jridgewell/resolve-uri@^3.1.0":
865 | version "3.1.2"
866 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
867 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
868 |
869 | "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
870 | version "1.5.5"
871 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
872 | integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
873 |
874 | "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28":
875 | version "0.3.31"
876 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0"
877 | integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
878 | dependencies:
879 | "@jridgewell/resolve-uri" "^3.1.0"
880 | "@jridgewell/sourcemap-codec" "^1.4.14"
881 |
882 | "@types/gensync@^1.0.0":
883 | version "1.0.4"
884 | resolved "https://registry.yarnpkg.com/@types/gensync/-/gensync-1.0.4.tgz#7122d8f0cd3bf437f9725cc95b180197190cf50b"
885 | integrity sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==
886 |
887 | "@types/jsesc@^2.5.0":
888 | version "2.5.1"
889 | resolved "https://registry.yarnpkg.com/@types/jsesc/-/jsesc-2.5.1.tgz#c34defc608ec94b68dc6a12a581b440942c6d503"
890 | integrity sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==
891 |
892 | babel-plugin-polyfill-corejs3@^0.13.0:
893 | version "0.13.0"
894 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164"
895 | integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==
896 | dependencies:
897 | "@babel/helper-define-polyfill-provider" "^0.6.5"
898 | core-js-compat "^3.43.0"
899 |
900 | baseline-browser-mapping@^2.8.19:
901 | version "2.8.20"
902 | resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz#6766cf270f3668d20b6712b9c54cc911b87da714"
903 | integrity sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==
904 |
905 | browserslist@^4.24.0, browserslist@^4.26.3:
906 | version "4.27.0"
907 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697"
908 | integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==
909 | dependencies:
910 | baseline-browser-mapping "^2.8.19"
911 | caniuse-lite "^1.0.30001751"
912 | electron-to-chromium "^1.5.238"
913 | node-releases "^2.0.26"
914 | update-browserslist-db "^1.1.4"
915 |
916 | caniuse-lite@^1.0.30001751:
917 | version "1.0.30001751"
918 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz#dacd5d9f4baeea841641640139d2b2a4df4226ad"
919 | integrity sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==
920 |
921 | convert-source-map@^2.0.0:
922 | version "2.0.0"
923 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
924 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
925 |
926 | core-js-compat@^3.43.0:
927 | version "3.46.0"
928 | resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.46.0.tgz#0c87126a19a1af00371e12b02a2b088a40f3c6f7"
929 | integrity sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==
930 | dependencies:
931 | browserslist "^4.26.3"
932 |
933 | debug@^4.1.0, debug@^4.3.1, debug@^4.4.1:
934 | version "4.4.3"
935 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
936 | integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
937 | dependencies:
938 | ms "^2.1.3"
939 |
940 | electron-to-chromium@^1.5.238:
941 | version "1.5.240"
942 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz#bfd946570a723aa3754370065d02e23e30824774"
943 | integrity sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==
944 |
945 | escalade@^3.2.0:
946 | version "3.2.0"
947 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
948 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
949 |
950 | esutils@^2.0.2:
951 | version "2.0.3"
952 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
953 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
954 |
955 | function-bind@^1.1.2:
956 | version "1.1.2"
957 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
958 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
959 |
960 | gensync@^1.0.0-beta.2:
961 | version "1.0.0-beta.2"
962 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
963 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
964 |
965 | hasown@^2.0.2:
966 | version "2.0.2"
967 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
968 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
969 | dependencies:
970 | function-bind "^1.1.2"
971 |
972 | is-core-module@^2.16.1:
973 | version "2.16.1"
974 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
975 | integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
976 | dependencies:
977 | hasown "^2.0.2"
978 |
979 | js-tokens@^8.0.0:
980 | version "8.0.3"
981 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775"
982 | integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==
983 |
984 | jsesc@^3.0.2, jsesc@~3.1.0:
985 | version "3.1.0"
986 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
987 | integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
988 |
989 | json5@^2.2.3:
990 | version "2.2.3"
991 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
992 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
993 |
994 | lodash.debounce@^4.0.8:
995 | version "4.0.8"
996 | resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
997 | integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
998 |
999 | lru-cache@^5.1.1:
1000 | version "5.1.1"
1001 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
1002 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
1003 | dependencies:
1004 | yallist "^3.0.2"
1005 |
1006 | lru-cache@^7.14.1:
1007 | version "7.18.3"
1008 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
1009 | integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
1010 |
1011 | ms@^2.1.3:
1012 | version "2.1.3"
1013 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1014 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1015 |
1016 | node-releases@^2.0.26:
1017 | version "2.0.26"
1018 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.26.tgz#fdfa272f2718a1309489d18aef4ef5ba7f5dfb52"
1019 | integrity sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==
1020 |
1021 | path-parse@^1.0.7:
1022 | version "1.0.7"
1023 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1024 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1025 |
1026 | picocolors@^1.1.1:
1027 | version "1.1.1"
1028 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
1029 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
1030 |
1031 | regenerate-unicode-properties@^10.2.2:
1032 | version "10.2.2"
1033 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66"
1034 | integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==
1035 | dependencies:
1036 | regenerate "^1.4.2"
1037 |
1038 | regenerate@^1.4.2:
1039 | version "1.4.2"
1040 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
1041 | integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
1042 |
1043 | regexpu-core@^6.3.1:
1044 | version "6.4.0"
1045 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5"
1046 | integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==
1047 | dependencies:
1048 | regenerate "^1.4.2"
1049 | regenerate-unicode-properties "^10.2.2"
1050 | regjsgen "^0.8.0"
1051 | regjsparser "^0.13.0"
1052 | unicode-match-property-ecmascript "^2.0.0"
1053 | unicode-match-property-value-ecmascript "^2.2.1"
1054 |
1055 | regjsgen@^0.8.0:
1056 | version "0.8.0"
1057 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab"
1058 | integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==
1059 |
1060 | regjsparser@^0.13.0:
1061 | version "0.13.0"
1062 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0"
1063 | integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==
1064 | dependencies:
1065 | jsesc "~3.1.0"
1066 |
1067 | resolve@^1.22.10:
1068 | version "1.22.11"
1069 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262"
1070 | integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==
1071 | dependencies:
1072 | is-core-module "^2.16.1"
1073 | path-parse "^1.0.7"
1074 | supports-preserve-symlinks-flag "^1.0.0"
1075 |
1076 | semver@^6.3.1:
1077 | version "6.3.1"
1078 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
1079 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
1080 |
1081 | semver@^7.3.4:
1082 | version "7.7.3"
1083 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
1084 | integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
1085 |
1086 | supports-preserve-symlinks-flag@^1.0.0:
1087 | version "1.0.0"
1088 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1089 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1090 |
1091 | unicode-canonical-property-names-ecmascript@^2.0.0:
1092 | version "2.0.1"
1093 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2"
1094 | integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==
1095 |
1096 | unicode-match-property-ecmascript@^2.0.0:
1097 | version "2.0.0"
1098 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
1099 | integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
1100 | dependencies:
1101 | unicode-canonical-property-names-ecmascript "^2.0.0"
1102 | unicode-property-aliases-ecmascript "^2.0.0"
1103 |
1104 | unicode-match-property-value-ecmascript@^2.2.1:
1105 | version "2.2.1"
1106 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa"
1107 | integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==
1108 |
1109 | unicode-property-aliases-ecmascript@^2.0.0:
1110 | version "2.2.0"
1111 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz#301d4f8a43d2b75c97adfad87c9dd5350c9475d1"
1112 | integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==
1113 |
1114 | update-browserslist-db@^1.1.4:
1115 | version "1.1.4"
1116 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a"
1117 | integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==
1118 | dependencies:
1119 | escalade "^3.2.0"
1120 | picocolors "^1.1.1"
1121 |
1122 | yallist@^3.0.2:
1123 | version "3.1.1"
1124 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
1125 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
1126 |
--------------------------------------------------------------------------------