resolve conflicts

feature/appm-store/pbac
Gathika94 6 years ago
parent c8b983fb93
commit 329499a962

@ -47,7 +47,9 @@ public class RegistrationProfile {
this.applicationName = apiApplicationName; this.applicationName = apiApplicationName;
} }
public String[] getTags() { return tags; } public String[] getTags() {
return tags;
}
public void setTags(String[] tags) { public void setTags(String[] tags) {
this.tags = tags; this.tags = tags;

@ -21,8 +21,7 @@ package org.wso2.carbon.device.application.mgt.common;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "ApplicationRelease", description = "This class holds the details when releasing an Application to " + @ApiModel(value = "ApplicationRelease", description = "This class holds the details when releasing an Application to application store")
"application store")
public class ApplicationRelease { public class ApplicationRelease {
@ApiModelProperty(name = "id", @ApiModelProperty(name = "id",

@ -74,7 +74,8 @@ public class Configuration {
return lifecycleStates; return lifecycleStates;
} }
public void setLifecycleStates(List<LifecycleState> lifecycleStates) { public void setLifecycleStates(
List<LifecycleState> lifecycleStates) {
this.lifecycleStates = lifecycleStates; this.lifecycleStates = lifecycleStates;
} }
@ -86,6 +87,5 @@ public class Configuration {
public void setUiConfiguration(UIConfiguration uiConfiguration) { public void setUiConfiguration(UIConfiguration uiConfiguration) {
this.uiConfiguration = uiConfiguration; this.uiConfiguration = uiConfiguration;
} }
} }

@ -96,8 +96,10 @@ public class ApplicationManagerImpl implements ApplicationManager {
* The responsbility of this method is the creating an application. * The responsbility of this method is the creating an application.
* @param application Application that need to be created. * @param application Application that need to be created.
* @return {@link Application} * @return {@link Application}
* @throws RequestValidatingException if application creating request is invalid, returns {@link RequestValidatingException} * @throws RequestValidatingException if application creating request is invalid, returns
* @throws ApplicationManagementException Catch all other throwing exceptions and returns {@link ApplicationManagementException} * {@link RequestValidatingException}
* @throws ApplicationManagementException Catch all other throwing exceptions and returns
* {@link ApplicationManagementException}
*/ */
@Override @Override
public Application createApplication(Application application) public Application createApplication(Application application)
@ -261,13 +263,15 @@ public class ApplicationManagerImpl implements ApplicationManager {
String packageName = this.applicationReleaseDAO.getPackageName(applicationId, tenantId); String packageName = this.applicationReleaseDAO.getPackageName(applicationId, tenantId);
if (packageName != null && !packageName.equals(applicationRelease.getPackageName())) { if (packageName != null && !packageName.equals(applicationRelease.getPackageName())) {
throw new BadRequestException( throw new BadRequestException(
"Package name in the payload is different from the existing package name of other application releases."); "Package name in the payload is different from the existing package name of other application" +
" releases.");
} }
applicationRelease = this.applicationReleaseDAO applicationRelease = this.applicationReleaseDAO
.createRelease(applicationRelease, application.getId(), tenantId); .createRelease(applicationRelease, application.getId(), tenantId);
LifecycleState lifecycleState = getLifecycleStateInstant(AppLifecycleState.CREATED.toString(), LifecycleState lifecycleState = getLifecycleStateInstant(AppLifecycleState.CREATED.toString(),
AppLifecycleState.CREATED.toString()); AppLifecycleState.CREATED.toString());
this.lifecycleStateDAO.addLifecycleState(lifecycleState, applicationId, applicationRelease.getUuid(), tenantId); this.lifecycleStateDAO.addLifecycleState(lifecycleState, applicationId, applicationRelease.getUuid(),
tenantId);
ConnectionManagerUtil.commitDBTransaction(); ConnectionManagerUtil.commitDBTransaction();
return applicationRelease; return applicationRelease;
} catch (TransactionManagementException e) { } catch (TransactionManagementException e) {
@ -633,7 +637,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
// todo // todo
ConnectionManagerUtil.rollbackDBTransaction(); ConnectionManagerUtil.rollbackDBTransaction();
throw new ApplicationManagementException("Lifecycle State Validation failed. Application Id: " + throw new ApplicationManagementException("Lifecycle State Validation failed. Application Id: " +
applicationId + " Application release UUID: " + releaseUuid); } applicationId + " Application release UUID: " + releaseUuid);
}
} else { } else {
ConnectionManagerUtil.rollbackDBTransaction(); ConnectionManagerUtil.rollbackDBTransaction();
throw new ApplicationManagementException("Can't delete the application release, You have to move the " + throw new ApplicationManagementException("Can't delete the application release, You have to move the " +
@ -720,7 +725,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
+ " and application type " + application.getType() + ". Tenant ID is " + tenantId, e); + " and application type " + application.getType() + ". Tenant ID is " + tenantId, e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new RequestValidatingException( throw new RequestValidatingException(
"Error occured while getting database connection to get existing applications for application name: " "Error occured while getting database connection to get existing applications for application " +
"name: "
+ application.getName() + " and application type: " + application.getType() + application.getName() + " and application type: " + application.getType()
+ ". Tenant id is " + tenantId, e); + ". Tenant id is " + tenantId, e);
} finally { } finally {
@ -830,7 +836,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
} }
@Override @Override
public ApplicationRelease updateApplicationImageArtifact(int appId, String uuid, InputStream iconFileStream, InputStream public ApplicationRelease updateApplicationImageArtifact(int appId, String uuid, InputStream iconFileStream,
InputStream
bannerFileStream, List<InputStream> attachments) bannerFileStream, List<InputStream> attachments)
throws ApplicationManagementException, ResourceManagementException { throws ApplicationManagementException, ResourceManagementException {
ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager();
@ -858,7 +865,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
@Override @Override
public ApplicationRelease updateApplicationArtifact(int appId, String uuid, InputStream binaryFile) public ApplicationRelease updateApplicationArtifact(int appId, String uuid, InputStream binaryFile)
throws ApplicationManagementException, ResourceManagementException, RequestValidatingException, DeviceManagementException { throws ApplicationManagementException, ResourceManagementException, RequestValidatingException,
DeviceManagementException {
ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager();
ApplicationRelease applicationRelease; ApplicationRelease applicationRelease;
try { try {
@ -923,7 +931,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
} }
/** /**
* To validate a app release creating request and app updating request to make sure all the pre-conditions satisfied. * To validate a app release creating request and app updating request to make sure all the pre-conditions
* satisfied.
* *
* @param applicationRelease ApplicationRelease that need to be created. * @param applicationRelease ApplicationRelease that need to be created.
* @throws ApplicationManagementException Application Management Exception. * @throws ApplicationManagementException Application Management Exception.
@ -985,8 +994,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
state.setUpdatedBy(userName); state.setUpdatedBy(userName);
if (state.getCurrentState() != null && state.getPreviousState() != null) { if (state.getCurrentState() != null && state.getPreviousState() != null) {
if (lifecycleStateManager.isValidStateChange(state.getPreviousState(), state.getCurrentState(),userName, if (lifecycleStateManager.isValidStateChange(state.getPreviousState(), state.getCurrentState(),
tenantId)) { userName, tenantId)) {
//todo if current state of the adding lifecycle state is PUBLISHED, need to check whether is there //todo if current state of the adding lifecycle state is PUBLISHED, need to check whether is there
//todo any other application release in PUBLISHED state for the application( i.e for the appid) //todo any other application release in PUBLISHED state for the application( i.e for the appid)
this.lifecycleStateDAO.addLifecycleState(state, applicationId, releaseUuid, tenantId); this.lifecycleStateDAO.addLifecycleState(state, applicationId, releaseUuid, tenantId);

@ -1,21 +1,3 @@
/*
* Copyright (c) 2019, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. /* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
* *
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License, * Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
@ -85,8 +67,8 @@ public class LifecycleStateManager {
return lifecycleStates.get(currentLifecycleState.toUpperCase()).getProceedingStates(); return lifecycleStates.get(currentLifecycleState.toUpperCase()).getProceedingStates();
} }
public boolean isValidStateChange(String currentState, String nextState, String username, public boolean isValidStateChange(String currentState, String nextState, String username, int tenantId) throws
int tenantId) throws LifecycleManagementException { LifecycleManagementException {
UserRealm userRealm; UserRealm userRealm;
String permission = getPermissionForStateChange(nextState); String permission = getPermissionForStateChange(nextState);

22
node_modules/regjsgen/LICENSE generated vendored

@ -1,22 +0,0 @@
The MIT License (MIT)
Copyright 2014-2018 Benjamin Tan <https://bnjmnt4n.now.sh/>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

33
node_modules/regjsgen/README.md generated vendored

@ -1,33 +0,0 @@
# regjsgen [![Build status](https://travis-ci.org/bnjmnt4n/regjsgen.svg?branch=master)](https://travis-ci.org/bnjmnt4n/regjsgen) [![Code coverage status](https://codecov.io/gh/bnjmnt4n/regjsgen/branch/master/graph/badge.svg)](https://codecov.io/gh/bnjmnt4n/regjsgen)
Generate regular expressions from [regjsparser](https://github.com/jviereck/regjsparser)s AST.
## Installation
```bash
npm install --save regjsgen
```
## API
### `regjsgen.generate(ast)`
This function accepts an abstract syntax tree representing a regular expression, and returns the generated regular expression string.
```js
var regjsparser = require('regjsparser');
var regjsgen = require('regjsgen');
// Generate an AST with `regjsparser`.
var ast = regjsparser.parse(regex);
// Modify AST
// …
// Generate `RegExp` string with `regjsgen`.
regex = regjsgen.generate(ast);
```
## Support
Tested in Node.js 0.10, 0.12, 4, 6 and 8.

@ -1,95 +0,0 @@
{
"_args": [
[
"regjsgen",
"/media/gathika/MainDisk/entgra_repos/carbon-device-mgt"
]
],
"_from": "regjsgen@latest",
"_hasShrinkwrap": false,
"_id": "regjsgen@0.5.0",
"_inCache": true,
"_installable": true,
"_location": "/regjsgen",
"_nodeVersion": "8.9.3",
"_npmOperationalInternal": {
"host": "s3://npm-registry-packages",
"tmp": "tmp/regjsgen_0.5.0_1540608114803_0.0388782175432143"
},
"_npmUser": {
"email": "demoneaux@gmail.com",
"name": "d10"
},
"_npmVersion": "5.5.1",
"_phantomChildren": {},
"_requested": {
"name": "regjsgen",
"raw": "regjsgen",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
"_requiredBy": [
"/"
],
"_resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
"_shasum": "a7634dc08f89209c2049adda3525711fb97265dd",
"_shrinkwrap": null,
"_spec": "regjsgen",
"_where": "/media/gathika/MainDisk/entgra_repos/carbon-device-mgt",
"author": {
"name": "Benjamin Tan",
"url": "https://bnjmnt4n.now.sh/"
},
"bugs": {
"url": "https://github.com/bnjmnt4n/regjsgen/issues"
},
"dependencies": {},
"description": "Generate regular expressions from regjsparsers AST.",
"devDependencies": {
"codecov": "^3.1.0",
"istanbul": "~0.4.5",
"regjsparser": "~0.4.0",
"request": "^2.88.0"
},
"directories": {},
"dist": {
"fileCount": 4,
"integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
"npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb09BzCRA9TVsSAnZWagAAHL8P/2+qPfMU6ChUdXtesJcS\nb4J4OtV52K6iYdJky/TSI2udBPTtzyJ3JXIr5Q2RnBj3wIkDuhFGesCoZ7Ap\noUEm8jYnQXTV1PBt3Q1nTeUww0Wcj7/0T6PHVA1IuKHxt56yP5/h+C9eTbK+\nFabsdn86iXKZnUNggtiVAjE0JarqVfKZC9rpvrTdTFn9hx+rr02RPtXHHb1J\nHipRJsJ6zsLRyZ1ysIB3VZYrIya2SH1FjiddvVbLbB7QDnnlYKuzC7n4p4uB\nVcTWQMIBg3fkqjYIDvx765FABBqxaMxYdjiUsQK/mLz+uilKukbHWhKuGsAb\n/F47dJAUKxs6yXreiQsLNNhAUcWQbE7cDmNKfTI9sMSjtctogTqYWgJb0PVi\na0CbWNclNF7mFwxTsanjCFypZZSMgpTsxuJDf4UrjZvfsBYfqtH7HhpIVsZq\nBFBev4QpQkaK8SOm1R8QCFy1fiMqlEREU7goErBO6kQvQC9DiEq7h9pRwVnV\nhe2pr1OyMcsSkADI4EjvwrUgoirbZzpZ/5ir2LUyQ+QodIgPc6DhDEbldlI1\nmr0lFWHkcmFbo4TPcz/sDUS4SSVvrxiQ2J/XuH9s61YJltnwWhFFauRUdI22\nalBB6AE1zPw2kP580z7JLsEWyMPYELCKmcpXSRdq58NCMZXvrzbqjN/+6dBS\n1XD3\r\n=h56Q\r\n-----END PGP SIGNATURE-----\r\n",
"shasum": "a7634dc08f89209c2049adda3525711fb97265dd",
"tarball": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
"unpackedSize": 13630
},
"gitHead": "3e898bdd4577e5f6fc9ffc7c867bbe8661b28344",
"homepage": "https://github.com/bnjmnt4n/regjsgen",
"keywords": [
"ast",
"generate",
"regex",
"regexp",
"regular expressions"
],
"license": "MIT",
"main": "regjsgen.js",
"maintainers": [
{
"name": "d10",
"email": "demoneaux@gmail.com"
}
],
"name": "regjsgen",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+https://github.com/bnjmnt4n/regjsgen.git"
},
"scripts": {
"coverage": "istanbul cover --report html tests/tests.js",
"test": "node tests/tests.js",
"update-fixtures": "node tests/update-fixtures.js"
},
"version": "0.5.0"
}

401
node_modules/regjsgen/regjsgen.js generated vendored

@ -1,401 +0,0 @@
/*!
* regjsgen 0.5.0
* Copyright 2014-2018 Benjamin Tan <https://bnjmnt4n.now.sh/>
* Available under MIT license <https://github.com/bnjmnt4n/regjsgen/blob/master/LICENSE>
*/
;(function() {
'use strict';
// Used to determine if values are of the language type `Object`.
var objectTypes = {
'function': true,
'object': true
};
// Used as a reference to the global object.
var root = (objectTypes[typeof window] && window) || this;
// Detect free variable `exports`.
var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
// Detect free variable `module`.
var hasFreeModule = objectTypes[typeof module] && module && !module.nodeType;
// Detect free variable `global` from Node.js or Browserified code and use it as `root`.
var freeGlobal = freeExports && hasFreeModule && typeof global == 'object' && global;
if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {
root = freeGlobal;
}
// Used to check objects for own properties.
var hasOwnProperty = Object.prototype.hasOwnProperty;
/*--------------------------------------------------------------------------*/
// Generates a string based on the given code point.
// Based on https://mths.be/fromcodepoint by @mathias.
function fromCodePoint() {
var codePoint = Number(arguments[0]);
if (
!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
codePoint < 0 || // not a valid Unicode code point
codePoint > 0x10FFFF || // not a valid Unicode code point
Math.floor(codePoint) != codePoint // not an integer
) {
throw RangeError('Invalid code point: ' + codePoint);
}
if (codePoint <= 0xFFFF) {
// BMP code point
return String.fromCharCode(codePoint);
} else {
// Astral code point; split in surrogate halves
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
codePoint -= 0x10000;
var highSurrogate = (codePoint >> 10) + 0xD800;
var lowSurrogate = (codePoint % 0x400) + 0xDC00;
return String.fromCharCode(highSurrogate, lowSurrogate);
}
}
/*--------------------------------------------------------------------------*/
// Ensures that nodes have the correct types.
var assertTypeRegexMap = {};
function assertType(type, expected) {
if (expected.indexOf('|') == -1) {
if (type == expected) {
return;
}
throw Error('Invalid node type: ' + type + '; expected type: ' + expected);
}
expected = hasOwnProperty.call(assertTypeRegexMap, expected)
? assertTypeRegexMap[expected]
: (assertTypeRegexMap[expected] = RegExp('^(?:' + expected + ')$'));
if (expected.test(type)) {
return;
}
throw Error('Invalid node type: ' + type + '; expected types: ' + expected);
}
/*--------------------------------------------------------------------------*/
// Generates a regular expression string based on an AST.
function generate(node) {
var type = node.type;
if (hasOwnProperty.call(generators, type)) {
return generators[type](node);
}
throw Error('Invalid node type: ' + type);
}
/*--------------------------------------------------------------------------*/
function generateAlternative(node) {
assertType(node.type, 'alternative');
var terms = node.body,
i = -1,
length = terms.length,
result = '';
while (++i < length) {
result += generateTerm(terms[i]);
}
return result;
}
function generateAnchor(node) {
assertType(node.type, 'anchor');
switch (node.kind) {
case 'start':
return '^';
case 'end':
return '$';
case 'boundary':
return '\\b';
case 'not-boundary':
return '\\B';
default:
throw Error('Invalid assertion');
}
}
function generateAtom(node) {
assertType(node.type, 'anchor|characterClass|characterClassEscape|dot|group|reference|value');
return generate(node);
}
function generateCharacterClass(node) {
assertType(node.type, 'characterClass');
var classRanges = node.body,
i = -1,
length = classRanges.length,
result = '';
if (node.negative) {
result += '^';
}
while (++i < length) {
result += generateClassAtom(classRanges[i]);
}
return '[' + result + ']';
}
function generateCharacterClassEscape(node) {
assertType(node.type, 'characterClassEscape');
return '\\' + node.value;
}
function generateUnicodePropertyEscape(node) {
assertType(node.type, 'unicodePropertyEscape');
return '\\' + (node.negative ? 'P' : 'p') + '{' + node.value + '}';
}
function generateCharacterClassRange(node) {
assertType(node.type, 'characterClassRange');
var min = node.min,
max = node.max;
if (min.type == 'characterClassRange' || max.type == 'characterClassRange') {
throw Error('Invalid character class range');
}
return generateClassAtom(min) + '-' + generateClassAtom(max);
}
function generateClassAtom(node) {
assertType(node.type, 'anchor|characterClassEscape|characterClassRange|dot|value');
return generate(node);
}
function generateDisjunction(node) {
assertType(node.type, 'disjunction');
var body = node.body,
i = -1,
length = body.length,
result = '';
while (++i < length) {
if (i != 0) {
result += '|';
}
result += generate(body[i]);
}
return result;
}
function generateDot(node) {
assertType(node.type, 'dot');
return '.';
}
function generateGroup(node) {
assertType(node.type, 'group');
var result = '';
switch (node.behavior) {
case 'normal':
if (node.name) {
result += '?<' + generateIdentifier(node.name) + '>';
}
break;
case 'ignore':
result += '?:';
break;
case 'lookahead':
result += '?=';
break;
case 'negativeLookahead':
result += '?!';
break;
case 'lookbehind':
result += '?<=';
break;
case 'negativeLookbehind':
result += '?<!';
break;
default:
throw Error('Invalid behaviour: ' + node.behaviour);
}
var body = node.body,
i = -1,
length = body.length;
while (++i < length) {
result += generate(body[i]);
}
return '(' + result + ')';
}
function generateIdentifier(node) {
assertType(node.type, 'identifier');
return node.value;
}
function generateQuantifier(node) {
assertType(node.type, 'quantifier');
var quantifier = '',
min = node.min,
max = node.max;
if (max == null) {
if (min == 0) {
quantifier = '*';
} else if (min == 1) {
quantifier = '+';
} else {
quantifier = '{' + min + ',}';
}
} else if (min == max) {
quantifier = '{' + min + '}';
} else if (min == 0 && max == 1) {
quantifier = '?';
} else {
quantifier = '{' + min + ',' + max + '}';
}
if (!node.greedy) {
quantifier += '?';
}
return generateAtom(node.body[0]) + quantifier;
}
function generateReference(node) {
assertType(node.type, 'reference');
if (node.matchIndex) {
return '\\' + node.matchIndex;
}
if (node.name) {
return '\\k<' + generateIdentifier(node.name) + '>';
}
throw new Error('Unknown reference type');
}
function generateTerm(node) {
assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|unicodePropertyEscape|value');
return generate(node);
}
function generateValue(node) {
assertType(node.type, 'value');
var kind = node.kind,
codePoint = node.codePoint;
if (typeof codePoint != 'number') {
throw new Error('Invalid code point: ' + codePoint);
}
switch (kind) {
case 'controlLetter':
return '\\c' + fromCodePoint(codePoint + 64);
case 'hexadecimalEscape':
return '\\x' + ('00' + codePoint.toString(16).toUpperCase()).slice(-2);
case 'identifier':
return '\\' + fromCodePoint(codePoint);
case 'null':
return '\\' + codePoint;
case 'octal':
return '\\' + codePoint.toString(8);
case 'singleEscape':
switch (codePoint) {
case 0x0008:
return '\\b';
case 0x0009:
return '\\t';
case 0x000A:
return '\\n';
case 0x000B:
return '\\v';
case 0x000C:
return '\\f';
case 0x000D:
return '\\r';
default:
throw Error('Invalid code point: ' + codePoint);
}
case 'symbol':
return fromCodePoint(codePoint);
case 'unicodeEscape':
return '\\u' + ('0000' + codePoint.toString(16).toUpperCase()).slice(-4);
case 'unicodeCodePointEscape':
return '\\u{' + codePoint.toString(16).toUpperCase() + '}';
default:
throw Error('Unsupported node kind: ' + kind);
}
}
/*--------------------------------------------------------------------------*/
// Used to generate strings for each node type.
var generators = {
'alternative': generateAlternative,
'anchor': generateAnchor,
'characterClass': generateCharacterClass,
'characterClassEscape': generateCharacterClassEscape,
'characterClassRange': generateCharacterClassRange,
'unicodePropertyEscape': generateUnicodePropertyEscape,
'disjunction': generateDisjunction,
'dot': generateDot,
'group': generateGroup,
'quantifier': generateQuantifier,
'reference': generateReference,
'value': generateValue
};
/*--------------------------------------------------------------------------*/
// Export regjsgen.
var regjsgen = {
'generate': generate
};
// Some AMD build optimizers, like r.js, check for condition patterns like the following:
if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
// Define as an anonymous module so it can be aliased through path mapping.
define(function() {
return regjsgen;
});
root.regjsgen = regjsgen;
}
// Check for `exports` after `define` in case a build optimizer adds an `exports` object.
else if (freeExports && hasFreeModule) {
// Export for CommonJS support.
freeExports.generate = generate;
}
else {
// Export to the global object.
root.regjsgen = regjsgen;
}
}.call(this));
Loading…
Cancel
Save