Git Product home page Git Product logo

container-interop-doctrine's Introduction

container-interop-doctrine: Doctrine Factories for PSR-11

THIS REPOSITORY IS DEPRECATED - PLEASE VISIT https://github.com/Roave/psr-container-doctrine

Latest Stable Version Total Downloads Build Status Coverage Status

Doctrine factories for PSR-11 (previously known as container-interop).

This package provides a set of factories to be used with containers using the PSR-11 standard for an easy Doctrine integration in a project.

Installation

The easiest way to install this package is through composer:

$ composer require dasprid/container-interop-doctrine

Configuration

In the general case where you are only using a single connection, it's enough to define the entity manager factory:

return [
    'dependencies' => [
        'factories' => [
            'doctrine.entity_manager.orm_default' => \ContainerInteropDoctrine\EntityManagerFactory::class,
        ],
    ],
];

If you want to add a second connection, or use another name than "orm_default", you can do so by using the static variants of the factories:

return [
    'dependencies' => [
        'factories' => [
            'doctrine.entity_manager.orm_other' => [\ContainerInteropDoctrine\EntityManagerFactory::class, 'orm_other'],
        ],
    ],
];

Each factory supplied by this package will by default look for a registered factory in the container. If it cannot find one, it will automatically pull its dependencies from on-the-fly created factories. This saves you the hassle of registering factories in your container which you may not need at all. Of course, you can always register those factories when required. The following additional factories are available:

  • \ContainerInteropDoctrine\CacheFactory (doctrine.cache.*)
  • \ContainerInteropDoctrine\ConnectionFactory (doctrine.connection.*)
  • \ContainerInteropDoctrine\ConfigurationFactory (doctrine.configuration.*)
  • \ContainerInteropDoctrine\DriverFactory (doctrine.driver.*)
  • \ContainerInteropDoctrine\EventManagerFactory (doctrine.event_manager.*)

Each of those factories supports the same static behavior as the entity manager factory. For container specific configurations, there are a few examples provided in the example directory:

Example configuration

A complete example configuration can be found in example/full-config.php. Please note that the values in there are the defaults, and don't have to be supplied when you are not changing them. Keep your own configuration as minimal as possible. A minimal configuration can be found in example/minimal-config.php

Using the Doctrine CLI

In order to be able to use the CLI tool of Doctrine, you need to set-up a cli-config.php file in your project directory. That file is generally quite short, and should look something like this for you:

<?php
$container = require 'config/container.php';

return new \Symfony\Component\Console\Helper\HelperSet([
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper(
        $container->get('doctrine.entity_manager.orm_default')
    ),
]);

After that, you can simply invoke php vendor/bin/doctrine. It gets a little trickier when you have multiple entity managers. Doctrine itself has no way to handle that itself, so a possible way would be to have two separate directories with two unique cli-config.php files. You then invoke the doctrine CLI from each respective directory. Since the CLI is looking for the config file in the current working directory, it will then always use the one from the directory you are currently in.

container-interop-doctrine's People

Contributors

andersmadsen avatar arjanvdbos avatar asgrim avatar byan avatar daniel-braga avatar dasprid avatar edigu avatar gabrielsch avatar geerteltink avatar orkin avatar pauci avatar stefanotorresi avatar svycka avatar tobias-trozowski avatar

Stargazers

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

Watchers

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

container-interop-doctrine's Issues

[Feature] Http Transaction Middleware

i intend to follow this up with a pull request.

i don't know if this should belong to this package, but would you be interested in a doctrine transaction middleware implementation ? it should be easy to do.

this is an example of a transaction middleware i have been using :

( i was inspired by the symfony/doctrine-bridge messenger middleware - https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/Messenger/DoctrineTransactionMiddleware.php )

use Doctrine\ORM\EntityManager;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Throwable;

class DoctrineTransactionMiddleware implements MiddlewareInterface
{
    /** @var EntityManager $entityManager */
    protected $entityManager;

    public function __construct(EntityManager $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    /**
     * @param ServerRequestInterface  $request
     * @param RequestHandlerInterface $handler
     *
     * @return ResponseInterface
     *
     * @throws Throwable
     * @throws \Doctrine\DBAL\ConnectionException
     */
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
    {
        $this->entityManager->getConnection()->beginTransaction();

        try {
            $response = $handler->handle($request);
            $this->entityManager->flush();
            $this->entityManager->getConnection()->commit();
        } catch (Throwable $e) {
            $this->entityManager->getConnection()->rollBack();
            throw $e;
        }

        return $response;
    }
}

Doctrine CLI error

Hi,

How can I fix this error?

`
$ ./vendor/bin/doctrine

Fatal error: Uncaught Doctrine\Common\Proxy\Exception\OutOfBoundsException: Missing "class" config key in \expressive-test\vendor\zendframework\zend-servicemanager\src\ServiceManager.php on line 754

Zend\ServiceManager\Exception\ServiceNotCreatedException: Service with name "doctrine.entity_manager.orm_default" could not be created. Reason: Missing "class" config key in \expressive-test\vendor\zendframework\zend-servicemanager\src\ServiceManager.php on line 754

Call Stack:
0.0008 347912 1. {main}() \expressive-test\vendor\doctrine\orm\bin\doctrine:0
0.0015 354960 2. include('\expressive-test\vendor\doctrine\orm\bin\doctrine.php') \expressive-test\vendor\doctrine\orm\bin\doctrine:4
0.0580 673304 3. require('\expressive-test\cli-config.php') \expressive-test\vendor\doctrine\orm\bin\doctrine.php:55
0.0794 971616 4. Zend\ServiceManager\ServiceManager->get() \expressive-test\cli-config.php:24
0.0794 971616 5. Zend\ServiceManager\ServiceManager->doCreate() \expressive-test\vendor\zendframework\zend-servicemanager\src\ServiceManager.php:195

PHP Fatal error: Uncaught Doctrine\Common\Proxy\Exception\OutOfBoundsException: Missing "class" config key in \expressive-test\vendor\dasprid\container-interop-doctrine\src\DriverFactory.php:41
`

Could you provide an example using AnnotationDriver ?

I having some kind of difficulties to have it run the simplest way possible straight out of "Getting Started with Doctrine" tutorial.

I'm getting a "Cannot instantiate abstract class Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver" error.

I'm using it with ZF-Expressive (ZendServiceManager) and my config is as follows

return [
    'dependencies' => [
        'factories' => [
            \Doctrine\ORM\EntityManager::class => \ContainerInteropDoctrine\EntityManagerFactory::class,
        ],
    ],
    'doctrine' => [
        'connection' => [
            'orm_default' => [
                'params' => [
                    'url' => 'mysql://root@localhost/database',
                ],
            ],
        ],
        'driver' => [
            'orm_default' => [
                'class' => \Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver::class,
                'paths' => [
                    __DIR__.'/../../module/application/src/Entity',
                    __DIR__.'/../../module/admin/src/Entity',
                ],
            ],
        ],
    ],

[CLI] [Semantical Error] The annotation "@Doctrine\ORM\Mapping\Entity" in class App\Entity\User does not exist, or could not be auto-loaded.

Hi,

I try to use the doctrine orm:validate-schema cli command and I got this error:

[Semantical Error] The annotation "@Doctrine\ORM\Mapping\Entity" in class App\Entity\User does not exist, or could not be auto-loaded.

My cli-config.php

// with or without I got the sam error
// require_once __DIR__ .'/vendor/autoload.php';

$container = require 'config/container.php';
$container->setAlias('Config', 'config');

return new \Symfony\Component\Console\Helper\HelperSet([
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper(
        $container->get('doctrine.entity_manager.orm_default')
    ),
    'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper(
        $container->get('doctrine.entity_manager.orm_default')->getConnection()
    )
]);

// alterntive

// return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet(
//    $container->get('doctrine.entity_manager.orm_default')
// );

My doctrine.local.php

return [
    'doctrine' => [
        'connection' => [
            'orm_default' => [
                'driver_class' => \Doctrine\DBAL\Driver\PDOPgSql\Driver::class,
                'params' => [
                    'driver' => 'pdo_pgsql',
                    'dbname' => getenv('DB_NAME'),
                    'host' => getenv("DB_HOST"),
                    'user' => getenv("DB_USERNAME"),
                    'password' => getenv("DB_PASSWORD"),
                    'charset' => 'UTF8'
                ],
            ],
        ],
        'driver' => [
            'orm_default' => [
                'class' => \Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain::class,
                'drivers' => [
                    'App\Entity' => 'entities',
                ],
            ],
            'entities' => [
                'class' => \Doctrine\ORM\Mapping\Driver\AnnotationDriver::class,
                'cache' => 'array',
                'paths' => __DIR__ . '/../../src/App/src/Entity',
            ],
        ],
    ],
];

Any idea to resolve this issue?

PS: I google it but I only found answers on symfony

How to configure ORM Mapping?

How to configure ORM Mapping?

I have configured doctrine in zend expressive following xtreamwayz' guide:

// ORM mapping by Annotation
AnnotationRegistry::registerFile('vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');
$driver = new AnnotationDriver(
    new AnnotationReader(),
    ['src/Domain']
);

How would I configure ORM mapping with container-interop-doctrine?
Thanks in advance,
LT.

install problems

Hi,

Tried to install this on a fresh ZE application and it fails with the following errors. Anyone experienced this? I'm not sure where the dependency conflicts are

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - doctrine/instantiator 1.0.1 requires php ~5.3 -> your PHP version (7.1.1) does not satisfy that requirement.
    - doctrine/instantiator 1.0.3 requires php ~5.3 -> your PHP version (7.1.1) does not satisfy that requirement.
    - doctrine/instantiator 1.0.2 requires php ~5.3 -> your PHP version (7.1.1) does not satisfy that requirement.
    - Conclusion: don't install doctrine/orm v2.5.0
    - Installation request for dasprid/container-interop-doctrine ^1.0 -> satisfiable by dasprid/container-interop-doctrine[1.0.0].
    - Conclusion: don't install doctrine/instantiator 1.1.0|install doctrine/orm v2.5.0
    - Conclusion: remove doctrine/instantiator 1.1.0|install doctrine/orm v2.5.0
    - dasprid/container-interop-doctrine 1.0.0 requires doctrine/orm ^2.5 -> satisfiable by doctrine/orm[v2.5.0, v2.5.1, v2.5.10, v2.5.2, v2.5.3, v2.5.4, v2.5.5, v2.5.6, v2.5.7, v2.5.8, v2.5.9].
    - doctrine/orm v2.5.9 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.8 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.7 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.6 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.5 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.4 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.3 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.2 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.10 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - doctrine/orm v2.5.1 requires doctrine/instantiator ~1.0.1 -> satisfiable by doctrine/instantiator[1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5].
    - Can only install one of: doctrine/instantiator[1.0.5, 1.1.0].
    - Can only install one of: doctrine/instantiator[1.0.4, 1.1.0].
    - Installation request for doctrine/instantiator (locked at 1.1.0) -> satisfiable by doctrine/instantiator[1.1.0].


Installation failed, reverting ./composer.json to its original content.

Type is not registered by container-interop-doctrine

๐Ÿชฒ Types defined in the configuration are not registered.

Example uses

  • zend-expressive + zend-servicemanager + container-interop-doctrine
  • ramsey/uuid-doctrine Type uuid

Using the Doctrine CLI

$ ./vendor/bin/doctrine orm:validate-schema

Mapping
-------
 [FAIL] The entity-class Api\Books\Entity\Book mapping is invalid:
 * The field 'Api\Books\Entity\Book#id' uses a non-existent type 'uuid'.

Database
--------
In DBALException.php line 283:
  Unknown column type "uuid" requested. Any Doctrine type that you use has to be registered with \Doctrine\DBAL\Types\Type::  
  addType(). You can get a list of all the known types with \Doctrine\DBAL\Types\Type::getTypesMap(). If this error occurs d  
  uring database introspection then you might have forgotten to register all database types for a Doctrine Type. Use Abstrac  
  tPlatform#registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type nam  
  e is empty you might have a problem with the cache or forgot some mapping information.

Configuration

// doctrine.global.php
<?php

declare(strict_types=1);

return [
    'doctrine' => [
        'configuration' => [
            'orm_default' => [
                'types' => [
                    \Ramsey\Uuid\Doctrine\UuidType::NAME => \Ramsey\Uuid\Doctrine\UuidType::class,
                ],
            ],
        ],
        'eventmanager' => [
            'orm_default' => [
                'subscribers' => [
                    'Gedmo\Tree\TreeListener',
                    'Gedmo\Timestampable\TimestampableListener',
                    'Gedmo\Sluggable\SluggableListener',
                    'Gedmo\Loggable\LoggableListener',
                    'Gedmo\Sortable\SortableListener',
                ],
            ],
        ],
    ],
];

Entity

<?php

declare(strict_types=1);

namespace Api\Books\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Ramsey\Uuid\UuidInterface;

/**
 * @ORM\Entity
 */
class Book
{
    /**
     * @var UuidInterface
     *
     * @ORM\Id
     * @ORM\Column(type="uuid", unique=true)
     * @ORM\GeneratedValue(strategy="CUSTOM")
     * @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
     */
    public $id;

    [...]

Temp solution ๐Ÿ’ฉ

Manually addType()

// cli-config.php
<?php

declare(strict_types=1);

$container = require 'container.php';

/**
 * @FIXME Type is not registered by container-interop-doctrine
 * //doctrine.global.php
 * ```
 * return [
 *     'doctrine' => [
 *         'configuration' => [
 *             'orm_default' => [
 *                 'types' => [
 *                     \Ramsey\Uuid\Doctrine\UuidType::NAME => \Ramsey\Uuid\Doctrine\UuidType::class,
 *                 ],
 *             ],
 *         ],
 *     ],
 * ];
 * ```
 */
\Doctrine\DBAL\Types\Type::addType(\Ramsey\Uuid\Doctrine\UuidType::NAME, \Ramsey\Uuid\Doctrine\UuidType::class);

return new \Symfony\Component\Console\Helper\HelperSet([
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper(
        $container->get('doctrine.entity_manager.orm_default')
    ),
]);

Idea - Migrations factory

Got asked after my talk about whether we support Doctrine Migrations, which I realise we implemented manually on other projects with a factory.

This is a placeholder to remind me to add that factory (optionally, of course) into here so others can benefit ๐Ÿ‘

Refactor ConnectionFactory

I'm not sure what other people think about but for me it just doesn't feels the right way to use DriverManager::getConnection to create the connection.

By using the static method to create the connection we create a unresolvable dependency.
And by creating such dependencies people seemed to be forced to write tests like ConnectionFactoryTest.

Basicially we have a integration test in testDefaultsThroughException.

So, what do you think about decouple this a bit more?

Doctrine Migrations CLI

I added doctrine-migrations to my Zend Expressive 2 application and created the following cli-config.php:

<?php
/** 
 * config/cli-config.php
 * For more details @see \DoctrineORMModule\Module
 *
 * Run next commands for Migrations work
 * $ composer require doctrine/doctrine-orm-module
 * $ composer require doctrine/migrations
 */

use Doctrine\ORM\Tools\Console\ConsoleRunner;
use Doctrine\ORM\EntityManager;

$container = require 'container.php';

/* @var $em \Doctrine\ORM\EntityManager */
$em = $container->get(EntityManager::class);
$configuration = new \Doctrine\DBAL\Migrations\Configuration\ArrayConfiguration($em->getConnection());

return new \Symfony\Component\Console\Helper\HelperSet([
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em),
    'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
    'configuration' => new \Doctrine\DBAL\Migrations\Tools\Console\Helper\ConfigurationHelper($em->getConnection(),, $configuration)
]);

When I run ./vendor/bin/doctrine-migrations migrations:generate it works fine, except that the generated file is created in the project's root folder.

I would like to set the migrations directory to /data/Migrations (as I have in another ZF2 application). In that ZF2 application, I have the following migrations_configuration section in doctrine configuration file:

return [
	'doctrine' => [
		'connection' => [
			'orm_default' => [
				// ...
			],
                ],
		
		// migrations configuration
		'migrations_configuration' => [
			'orm_default' => [
				'directory' => 'data/Migrations',
				'name'      => 'Doctrine Database Migrations',
				'namespace' => 'Migrations',
				'table'     => 'migrations',
				'column'    => 'version',
			],
		],
		
		'configuration' => [
			'orm_default' => [
				// ...
			],
		],
);

How can I configure Doctrine Migrations CLI in Zend Expressive 2 (using DASPRiD/container-interop-doctrine) so I can make use of migrations_configuration section in doctrine configurations?

[CLI] Unable to resolve service "Config" to a factory;

ZE 3 Dependencies

"php": "^7.1"
"dasprid/container-interop-doctrine": "^1.1",
"doctrine/doctrine-module": "^2.1"
"zendframework/zend-expressive": "^3.0.1"

I followed the CLI integration in the README but I got this exception when I run php vendor/bin/doctrine

PHP Fatal error:  Uncaught Zend\ServiceManager\Exception\ServiceNotFoundException: Unable to resolve service "Config" to a factory; are you certain you provided it during configuration? in /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php:687
Stack trace:
#0 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(763): Zend\ServiceManager\ServiceManager->getFactory('Config')
#1 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(200): Zend\ServiceManager\ServiceManager->doCreate('Config')
#2 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/doctrine/doctrine-module/src/DoctrineModule/ServiceFactory/AbstractDoctrineServiceFactory.php(82): Zend\ServiceManager\ServiceManager->get('Config')
#3 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/doctrine/doctrine-module/src/DoctrineModule/ServiceFactory/AbstractDoctrineServiceFactory. in /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php on line 687

Fatal error: Uncaught Zend\ServiceManager\Exception\ServiceNotFoundException: Unable to resolve service "Config" to a factory; are you certain you provided it during configuration? in /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php:687
Stack trace:
#0 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(763): Zend\ServiceManager\ServiceManager->getFactory('Config')
#1 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(200): Zend\ServiceManager\ServiceManager->doCreate('Config')
#2 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/doctrine/doctrine-module/src/DoctrineModule/ServiceFactory/AbstractDoctrineServiceFactory.php(82): Zend\ServiceManager\ServiceManager->get('Config')
#3 /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/doctrine/doctrine-module/src/DoctrineModule/ServiceFactory/AbstractDoctrineServiceFactory. in /Users/guillaume/Google Drive/UQTR/Stage/code/ebos/vendor/zendframework/zend-servicemanager/src/ServiceManager.php on line 687

And I need to add this line in cli-config.php

$container->setAlias('Config', 'config');

Maybe add it to the README or if you have a workaround I would like to know it.

Thanks for awesome work.

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.