Delete model files

This commit is contained in:
Jim Laurie 2017-08-08 16:39:57 +02:00
parent 2458d9e1d8
commit 06e1c3519b
7 changed files with 18294 additions and 5 deletions

752
packages/strapi-admin/package-lock.json generated Normal file
View File

@ -0,0 +1,752 @@
{
"name": "strapi-admin",
"version": "3.0.0-alpha.4.8",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"brace-expansion": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"requires": {
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"fs-extra": {
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
"integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
"requires": {
"graceful-fs": "4.1.11",
"jsonfile": "2.4.0",
"klaw": "1.3.1",
"path-is-absolute": "1.0.1",
"rimraf": "2.6.1"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"jsonfile": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"requires": {
"graceful-fs": "4.1.11"
}
},
"klaw": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"requires": {
"graceful-fs": "4.1.11"
}
},
"lodash": {
"version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
"integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "1.1.8"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"rimraf": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
"integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
"requires": {
"glob": "7.1.2"
}
},
"strapi-utils": {
"version": "3.0.0-alpha.4.8",
"requires": {
"commander": "2.11.0",
"joi-json": "2.0.1",
"knex": "0.13.0",
"lodash": "4.17.4",
"winston": "2.3.1"
},
"dependencies": {
"ansi-regex": {
"version": "2.1.1",
"bundled": true
},
"ansi-styles": {
"version": "2.2.1",
"bundled": true
},
"arr-diff": {
"version": "2.0.0",
"bundled": true,
"requires": {
"arr-flatten": "1.1.0"
}
},
"arr-flatten": {
"version": "1.1.0",
"bundled": true
},
"array-unique": {
"version": "0.2.1",
"bundled": true
},
"async": {
"version": "1.0.0",
"bundled": true
},
"babel-runtime": {
"version": "6.25.0",
"bundled": true,
"requires": {
"core-js": "2.4.1",
"regenerator-runtime": "0.10.5"
}
},
"bluebird": {
"version": "3.5.0",
"bundled": true
},
"braces": {
"version": "1.8.5",
"bundled": true,
"requires": {
"expand-range": "1.8.2",
"preserve": "0.2.0",
"repeat-element": "1.1.2"
}
},
"chalk": {
"version": "1.1.3",
"bundled": true,
"requires": {
"ansi-styles": "2.2.1",
"escape-string-regexp": "1.0.5",
"has-ansi": "2.0.0",
"strip-ansi": "3.0.1",
"supports-color": "2.0.0"
}
},
"colors": {
"version": "1.0.3",
"bundled": true
},
"commander": {
"version": "2.11.0",
"bundled": true
},
"core-js": {
"version": "2.4.1",
"bundled": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true
},
"cycle": {
"version": "1.0.3",
"bundled": true
},
"debug": {
"version": "2.6.8",
"bundled": true,
"requires": {
"ms": "2.0.0"
}
},
"detect-file": {
"version": "0.1.0",
"bundled": true,
"requires": {
"fs-exists-sync": "0.1.0"
}
},
"escape-string-regexp": {
"version": "1.0.5",
"bundled": true
},
"expand-brackets": {
"version": "0.1.5",
"bundled": true,
"requires": {
"is-posix-bracket": "0.1.1"
}
},
"expand-range": {
"version": "1.8.2",
"bundled": true,
"requires": {
"fill-range": "2.2.3"
}
},
"expand-tilde": {
"version": "1.2.2",
"bundled": true,
"requires": {
"os-homedir": "1.0.2"
}
},
"extend": {
"version": "3.0.1",
"bundled": true
},
"extglob": {
"version": "0.3.2",
"bundled": true,
"requires": {
"is-extglob": "1.0.0"
}
},
"eyes": {
"version": "0.1.8",
"bundled": true
},
"filename-regex": {
"version": "2.0.1",
"bundled": true
},
"fill-range": {
"version": "2.2.3",
"bundled": true,
"requires": {
"is-number": "2.1.0",
"isobject": "2.1.0",
"randomatic": "1.1.7",
"repeat-element": "1.1.2",
"repeat-string": "1.6.1"
}
},
"findup-sync": {
"version": "0.4.3",
"bundled": true,
"requires": {
"detect-file": "0.1.0",
"is-glob": "2.0.1",
"micromatch": "2.3.11",
"resolve-dir": "0.1.1"
}
},
"flagged-respawn": {
"version": "0.3.2",
"bundled": true
},
"for-in": {
"version": "1.0.2",
"bundled": true
},
"for-own": {
"version": "0.1.5",
"bundled": true,
"requires": {
"for-in": "1.0.2"
}
},
"fs-exists-sync": {
"version": "0.1.0",
"bundled": true
},
"generic-pool": {
"version": "2.5.4",
"bundled": true
},
"glob-base": {
"version": "0.3.0",
"bundled": true,
"requires": {
"glob-parent": "2.0.0",
"is-glob": "2.0.1"
}
},
"glob-parent": {
"version": "2.0.0",
"bundled": true,
"requires": {
"is-glob": "2.0.1"
}
},
"global-modules": {
"version": "0.2.3",
"bundled": true,
"requires": {
"global-prefix": "0.1.5",
"is-windows": "0.2.0"
}
},
"global-prefix": {
"version": "0.1.5",
"bundled": true,
"requires": {
"homedir-polyfill": "1.0.1",
"ini": "1.3.4",
"is-windows": "0.2.0",
"which": "1.3.0"
}
},
"has-ansi": {
"version": "2.0.0",
"bundled": true,
"requires": {
"ansi-regex": "2.1.1"
}
},
"homedir-polyfill": {
"version": "1.0.1",
"bundled": true,
"requires": {
"parse-passwd": "1.0.0"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true
},
"ini": {
"version": "1.3.4",
"bundled": true
},
"interpret": {
"version": "0.6.6",
"bundled": true
},
"is-buffer": {
"version": "1.1.5",
"bundled": true
},
"is-dotfile": {
"version": "1.0.3",
"bundled": true
},
"is-equal-shallow": {
"version": "0.1.3",
"bundled": true,
"requires": {
"is-primitive": "2.0.0"
}
},
"is-extendable": {
"version": "0.1.1",
"bundled": true
},
"is-extglob": {
"version": "1.0.0",
"bundled": true
},
"is-glob": {
"version": "2.0.1",
"bundled": true,
"requires": {
"is-extglob": "1.0.0"
}
},
"is-number": {
"version": "2.1.0",
"bundled": true,
"requires": {
"kind-of": "3.2.2"
}
},
"is-posix-bracket": {
"version": "0.1.1",
"bundled": true
},
"is-primitive": {
"version": "2.0.0",
"bundled": true
},
"is-windows": {
"version": "0.2.0",
"bundled": true
},
"isarray": {
"version": "1.0.0",
"bundled": true
},
"isexe": {
"version": "2.0.0",
"bundled": true
},
"isobject": {
"version": "2.1.0",
"bundled": true,
"requires": {
"isarray": "1.0.0"
}
},
"isstream": {
"version": "0.1.2",
"bundled": true
},
"joi-json": {
"version": "2.0.1",
"bundled": true,
"requires": {
"vandium-utils": "1.1.1"
}
},
"kind-of": {
"version": "3.2.2",
"bundled": true,
"requires": {
"is-buffer": "1.1.5"
}
},
"knex": {
"version": "0.13.0",
"bundled": true,
"requires": {
"babel-runtime": "6.25.0",
"bluebird": "3.5.0",
"chalk": "1.1.3",
"commander": "2.11.0",
"debug": "2.6.8",
"generic-pool": "2.5.4",
"inherits": "2.0.3",
"interpret": "0.6.6",
"liftoff": "2.2.5",
"lodash": "4.17.4",
"minimist": "1.1.3",
"mkdirp": "0.5.1",
"pg-connection-string": "0.1.3",
"readable-stream": "1.1.14",
"safe-buffer": "5.1.1",
"tildify": "1.0.0",
"uuid": "3.1.0",
"v8flags": "2.1.1"
}
},
"liftoff": {
"version": "2.2.5",
"bundled": true,
"requires": {
"extend": "3.0.1",
"findup-sync": "0.4.3",
"flagged-respawn": "0.3.2",
"rechoir": "0.6.2",
"resolve": "1.4.0"
}
},
"lodash": {
"version": "4.17.4",
"bundled": true
},
"micromatch": {
"version": "2.3.11",
"bundled": true,
"requires": {
"arr-diff": "2.0.0",
"array-unique": "0.2.1",
"braces": "1.8.5",
"expand-brackets": "0.1.5",
"extglob": "0.3.2",
"filename-regex": "2.0.1",
"is-extglob": "1.0.0",
"is-glob": "2.0.1",
"kind-of": "3.2.2",
"normalize-path": "2.1.1",
"object.omit": "2.0.1",
"parse-glob": "3.0.4",
"regex-cache": "0.4.3"
}
},
"minimist": {
"version": "1.1.3",
"bundled": true
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"requires": {
"minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"bundled": true
}
}
},
"ms": {
"version": "2.0.0",
"bundled": true
},
"normalize-path": {
"version": "2.1.1",
"bundled": true,
"requires": {
"remove-trailing-separator": "1.0.2"
}
},
"object.omit": {
"version": "2.0.1",
"bundled": true,
"requires": {
"for-own": "0.1.5",
"is-extendable": "0.1.1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true
},
"parse-glob": {
"version": "3.0.4",
"bundled": true,
"requires": {
"glob-base": "0.3.0",
"is-dotfile": "1.0.3",
"is-extglob": "1.0.0",
"is-glob": "2.0.1"
}
},
"parse-passwd": {
"version": "1.0.0",
"bundled": true
},
"path-parse": {
"version": "1.0.5",
"bundled": true
},
"pg-connection-string": {
"version": "0.1.3",
"bundled": true
},
"preserve": {
"version": "0.2.0",
"bundled": true
},
"randomatic": {
"version": "1.1.7",
"bundled": true,
"requires": {
"is-number": "3.0.0",
"kind-of": "4.0.0"
},
"dependencies": {
"is-number": {
"version": "3.0.0",
"bundled": true,
"requires": {
"kind-of": "3.2.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"bundled": true,
"requires": {
"is-buffer": "1.1.5"
}
}
}
},
"kind-of": {
"version": "4.0.0",
"bundled": true,
"requires": {
"is-buffer": "1.1.5"
}
}
}
},
"readable-stream": {
"version": "1.1.14",
"bundled": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "0.0.1",
"string_decoder": "0.10.31"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"bundled": true
}
}
},
"rechoir": {
"version": "0.6.2",
"bundled": true,
"requires": {
"resolve": "1.4.0"
}
},
"regenerator-runtime": {
"version": "0.10.5",
"bundled": true
},
"regex-cache": {
"version": "0.4.3",
"bundled": true,
"requires": {
"is-equal-shallow": "0.1.3",
"is-primitive": "2.0.0"
}
},
"remove-trailing-separator": {
"version": "1.0.2",
"bundled": true
},
"repeat-element": {
"version": "1.1.2",
"bundled": true
},
"repeat-string": {
"version": "1.6.1",
"bundled": true
},
"resolve": {
"version": "1.4.0",
"bundled": true,
"requires": {
"path-parse": "1.0.5"
}
},
"resolve-dir": {
"version": "0.1.1",
"bundled": true,
"requires": {
"expand-tilde": "1.2.2",
"global-modules": "0.2.3"
}
},
"safe-buffer": {
"version": "5.1.1",
"bundled": true
},
"stack-trace": {
"version": "0.0.10",
"bundled": true
},
"string_decoder": {
"version": "0.10.31",
"bundled": true
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"requires": {
"ansi-regex": "2.1.1"
}
},
"supports-color": {
"version": "2.0.0",
"bundled": true
},
"tildify": {
"version": "1.0.0",
"bundled": true,
"requires": {
"user-home": "1.1.1"
}
},
"user-home": {
"version": "1.1.1",
"bundled": true
},
"uuid": {
"version": "3.1.0",
"bundled": true
},
"v8flags": {
"version": "2.1.1",
"bundled": true,
"requires": {
"user-home": "1.1.1"
}
},
"vandium-utils": {
"version": "1.1.1",
"bundled": true
},
"which": {
"version": "1.3.0",
"bundled": true,
"requires": {
"isexe": "2.0.0"
}
},
"winston": {
"version": "2.3.1",
"bundled": true,
"requires": {
"async": "1.0.0",
"colors": "1.0.3",
"cycle": "1.0.3",
"eyes": "0.1.8",
"isstream": "0.1.2",
"stack-trace": "0.0.10"
}
}
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
}
}

View File

@ -44,4 +44,4 @@
"npm": ">= 5.3.0"
},
"license": "MIT"
}
}

View File

@ -31,6 +31,14 @@
"config": {
"policies": []
}
},
{
"method": "DELETE",
"path": "/models/:model",
"handler": "ContentTypeBuilder.deleteModel",
"config": {
"policies": []
}
}
]
}

View File

@ -1,6 +1,7 @@
'use strict';
const fs = require('fs');
const path = require('path');
const _ = require('lodash');
module.exports = {
@ -57,15 +58,32 @@ module.exports = {
modelJSON.attributes = Service.formatAttributes(attributes);
strapi.reload.isWatching = false;
Service.clearRelations(model);
Service.createRelations(model, attributes);
strapi.reload.isWatching = false;
fs.writeFileSync(modelFilePath, JSON.stringify(modelJSON, null, 2), 'utf8');
ctx.send({ ok: true });
strapi.reload();
},
deleteModel: async ctx => {
const Service = strapi.plugins['content-type-builder'].services.contenttypebuilder;
const { model } = ctx.params;
if (!_.get(strapi.models, model)) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.model.unknow' }] }]);
strapi.reload.isWatching = false;
Service.clearRelations(model);
Service.removeModel(model);
ctx.send({ ok: true });
strapi.reload();
}
};

View File

@ -71,7 +71,7 @@ module.exports = {
getModelPath: model => {
let searchFilePath;
const searchFileName = `${_.get(strapi.models, `${model}.globalId`) || _.capitalize(model)}.settings.json`;
const searchFileName = `${_.get(strapi.models, `${model}.globalId`) || _.upperFirst(_.camelCase(model))}.settings.json`;
const apiPath = path.join(strapi.config.appPath, 'api');
const apis = fs.readdirSync(apiPath);
@ -190,5 +190,51 @@ module.exports = {
}
});
});
},
removeModel: model => {
const apiPath = path.join(strapi.config.appPath, 'api');
const deleteModelFile = (parentPath, fileName) => {
const filePath = path.join(parentPath, fileName);
if (_.startsWith(_.toLower(fileName), model)) {
fs.unlinkSync(filePath);
}
if (fileName === 'routes.json') {
const routesJSON = JSON.parse(fs.readFileSync(filePath, 'utf8'));
_.remove(routesJSON.routes, function(route) {
return _.startsWith(_.toLower(route.handler), model);
});
if (_.isEmpty(routesJSON.routes)) {
fs.unlinkSync(filePath);
} else {
fs.writeFileSync(filePath, JSON.stringify(routesJSON, null, 2), 'utf8');
}
}
}
const recurciveDeleteFiles = folderPath => {
const items = fs.readdirSync(folderPath);
_.forEach(items, item => {
const itemPath = path.join(folderPath, item);
if (fs.lstatSync(itemPath).isDirectory()) {
recurciveDeleteFiles(itemPath);
} else {
deleteModelFile(folderPath, item);
}
});
if (_.isEmpty(fs.readdirSync(folderPath))) {
fs.rmdirSync(folderPath);
}
}
recurciveDeleteFiles(apiPath);
}
};

File diff suppressed because it is too large Load Diff

View File

@ -65,4 +65,4 @@
"npm": ">= 3.0.0"
},
"license": "MIT"
}
}