Browse Source

Suppress relaxed schema and build it on the fly in php, refs #151

Jordi Boggiano 13 năm trước cách đây
mục cha
commit
7ceca9b789
3 tập tin đã thay đổi với 10 bổ sung195 xóa
  1. 0 190
      res/composer-schema-lax.json
  2. 0 1
      src/Composer/Compiler.php
  3. 10 4
      src/Composer/Json/JsonFile.php

+ 0 - 190
res/composer-schema-lax.json

@@ -1,190 +0,0 @@
-{
-    "name": "Package",
-    "type": "object",
-    "additionalProperties": true,
-    "properties": {
-        "name": {
-            "type": "string",
-            "description": "Package name, including 'vendor-name/' prefix."
-        },
-        "type": {
-            "description": "Package type, either 'library' for common packages, 'composer-installer' for custom installers, or a custom type defined by whatever project this package applies to.",
-            "type": "string"
-        },
-        "target-dir": {
-            "description": "Forces the package to be installed into the given subdirectory path. This is used for autoloading PSR-0 packages that do not contain their full path. Use forward slashes for cross-platform compatibility.",
-            "type": "string"
-        },
-        "description": {
-            "type": "string",
-            "description": "Short package description."
-        },
-        "keywords": {
-            "type": "array",
-            "items": {
-                "type": "string",
-                "description": "A tag/keyword that this package relates to."
-            }
-        },
-        "homepage": {
-            "type": "string",
-            "description": "Homepage URL for the project.",
-            "format": "uri"
-        },
-        "version": {
-            "type": "string",
-            "description": "Package version, see http://packagist.org/about for more info on valid schemes."
-        },
-        "time": {
-            "type": "string",
-            "description": "Package release date, in 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' format."
-        },
-        "license": {
-            "type": ["string", "array"],
-            "description": "License name. Or an array of license names."
-        },
-        "authors": {
-            "type": "array",
-            "description": "List of authors that contributed to the package. This is typically the main maintainers, not the full list.",
-            "items": {
-                "type": "object",
-                "additionalProperties": false,
-                "properties": {
-                    "name": {
-                        "type": "string",
-                        "description": "Full name of the author.",
-                        "required": true
-                    },
-                    "email": {
-                        "type": "string",
-                        "description": "Email address of the author.",
-                        "format": "email"
-                    },
-                    "homepage": {
-                        "type": "string",
-                        "description": "Homepage URL for the author.",
-                        "format": "uri"
-                    }
-                }
-            }
-        },
-        "require": {
-            "type": "object",
-            "description": "This is a hash of package name (keys) and version constraints (values) that are required to run this package.",
-            "additionalProperties": true
-        },
-        "replace": {
-            "type": "object",
-            "description": "This is a hash of package name (keys) and version constraints (values) that can be replaced by this package.",
-            "additionalProperties": true
-        },
-        "conflict": {
-            "type": "object",
-            "description": "This is a hash of package name (keys) and version constraints (values) that conflict with this package.",
-            "additionalProperties": true
-        },
-        "provide": {
-            "type": "object",
-            "description": "This is a hash of package name (keys) and version constraints (values) that this package provides in addition to this package's name.",
-            "additionalProperties": true
-        },
-        "recommend": {
-            "type": "object",
-            "description": "This is a hash of package name (keys) and version constraints (values) that this package recommends to be installed (typically this will be installed as well).",
-            "additionalProperties": true
-        },
-        "suggest": {
-            "type": "object",
-            "description": "This is a hash of package name (keys) and version constraints (values) that this package suggests work well with it (typically this will only be suggested to the user).",
-            "additionalProperties": true
-        },
-        "config": {
-            "type": ["object"],
-            "description": "Composer options.",
-            "properties": {
-                "vendor-dir": {
-                    "type": "string",
-                    "description": "The location where all packages are installed, defaults to \"vendor\"."
-                },
-                "bin-dir": {
-                    "type": "string",
-                    "description": "The location where all binaries are linked, defaults to \"vendor/bin\"."
-                }
-            }
-        },
-        "extra": {
-            "type": ["object", "array"],
-            "description": "Arbitrary extra data that can be used by custom installers, for example, package of type composer-installer must have a 'class' key defining the installer class name.",
-            "additionalProperties": true
-        },
-        "autoload": {
-            "type": "object",
-            "description": "Description of how the package can be autoloaded.",
-            "properties": {
-                "psr-0": {
-                    "type": "object",
-                    "description": "This is a hash of namespaces (keys) and the directories they can be found into (values) by the autoloader.",
-                    "additionalProperties": true
-                }
-            }
-        },
-        "repositories": {
-            "type": ["object", "array"],
-            "description": "A set of additional repositories where packages can be found.",
-            "additionalProperties": true
-        },
-        "bin": {
-            "type": ["array"],
-            "description": "A set of files that should be treated as binaries and symlinked into bin-dir (from config).",
-            "items": {
-                "type": "string"
-            }
-        },
-        "scripts": {
-            "type": ["object"],
-            "description": "Scripts listeners that will be executed before/after some events.",
-            "properties": {
-                "pre-install-cmd": {
-                    "type": ["array", "string"],
-                    "description": "Occurs before the install command is executed, contains one or more Class::method callables."
-                },
-                "post-install-cmd": {
-                    "type": ["array", "string"],
-                    "description": "Occurs after the install command is executed, contains one or more Class::method callables."
-                },
-                "pre-update-cmd": {
-                    "type": ["array", "string"],
-                    "description": "Occurs before the update command is executed, contains one or more Class::method callables."
-                },
-                "post-update-cmd": {
-                    "type": ["array", "string"],
-                    "description": "Occurs after the update command is executed, contains one or more Class::method callables."
-                },
-                "pre-package-install": {
-                    "type": ["array", "string"],
-                    "description": "Occurs before a package is installed, contains one or more Class::method callables."
-                },
-                "post-package-install": {
-                    "type": ["array", "string"],
-                    "description": "Occurs after a package is installed, contains one or more Class::method callables."
-                },
-                "pre-package-update": {
-                    "type": ["array", "string"],
-                    "description": "Occurs before a package is updated, contains one or more Class::method callables."
-                },
-                "post-package-update": {
-                    "type": ["array", "string"],
-                    "description": "Occurs after a package is updated, contains one or more Class::method callables."
-                },
-                "pre-package-uninstall": {
-                    "type": ["array", "string"],
-                    "description": "Occurs before a package has been uninstalled, contains one or more Class::method callables."
-                },
-                "post-package-uninstall": {
-                    "type": ["array", "string"],
-                    "description": "Occurs after a package has been uninstalled, contains one or more Class::method callables."
-                }
-            }
-        }
-    }
-}

+ 0 - 1
src/Composer/Compiler.php

@@ -65,7 +65,6 @@ class Compiler
         }
         $this->addFile($phar, new \SplFileInfo(__DIR__.'/Autoload/ClassLoader.php'), false);
         $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../res/composer-schema.json'), false);
-        $this->addFile($phar, new \SplFileInfo(__DIR__.'/../../res/composer-schema-lax.json'), false);
 
         $finder = new Finder();
         $finder->files()

+ 10 - 4
src/Composer/Json/JsonFile.php

@@ -127,13 +127,19 @@ class JsonFile
             self::validateSyntax($content);
         }
 
-        $schemaFile = __DIR__ . '/../../../res/composer-schema'.($schema === self::LAX_SCHEMA ? '-lax' : '').'.json';
-        $schema = json_decode(file_get_contents($schemaFile));
+        $schemaFile = __DIR__ . '/../../../res/composer-schema.json';
+        $schemaData = json_decode(file_get_contents($schemaFile));
+
+        if ($schema === self::LAX_SCHEMA) {
+            $schemaData->additionalProperties = true;
+            $schemaData->properties->name->required = false;
+            $schemaData->properties->description->required = false;
+        }
 
         $validator = new Validator();
-        $validator->check($data, $schema);
+        $validator->check($data, $schemaData);
 
-        // TODO add more specific checks for common errors if needed
+        // TODO add more validation like check version constraints and such, perhaps build that into the arrayloader?
 
         if (!$validator->isValid()) {
             $errors = array();