@journeyapps/db
Advanced tools
Comparing version 0.0.0-dev.ae608c2.224c284 to 0.0.0-dev.c97cb24.aa0a033
@@ -11,2 +11,3 @@ import { DatabaseAdapter } from './DatabaseAdapter'; | ||
readonly type: ObjectType; | ||
static isQuery(value: any): boolean; | ||
constructor(adapter: DatabaseAdapter, type: ObjectType, expression?: Expression, ordering?: any[]); | ||
@@ -13,0 +14,0 @@ private _reload; |
@@ -24,3 +24,3 @@ import { Variable, Type } from '@journeyapps/parser-schema'; | ||
constructor(name: string, id: string); | ||
normalize(): OrExpression<AndExpression>; | ||
normalize(): any; | ||
evaluate(object: ObjectData): boolean; | ||
@@ -50,3 +50,3 @@ toString(): string; | ||
constructor(); | ||
normalize(): any; | ||
normalize(): OrExpression<AndExpression>; | ||
evaluate(object: ObjectData): boolean; | ||
@@ -53,0 +53,0 @@ toString(): string; |
@@ -9,12 +9,2 @@ "use strict"; | ||
class Attachment { | ||
static isAttachment(attachment) { | ||
if (attachment instanceof Attachment) { | ||
return true; | ||
} | ||
else if (typeof attachment.id == 'string' && | ||
typeof attachment.present == 'function') { | ||
return true; | ||
} | ||
return false; | ||
} | ||
constructor(attrs) { | ||
@@ -34,2 +24,12 @@ attrs = attrs || {}; | ||
} | ||
static isAttachment(attachment) { | ||
if (attachment instanceof Attachment) { | ||
return true; | ||
} | ||
else if (typeof attachment.id == 'string' && | ||
typeof attachment.present == 'function') { | ||
return true; | ||
} | ||
return false; | ||
} | ||
toString() { | ||
@@ -36,0 +36,0 @@ return this.id; |
@@ -11,5 +11,2 @@ "use strict"; | ||
class BaseAdapter { | ||
static logQuery(...args) { | ||
return logQuery.apply(null, args); | ||
} | ||
constructor() { | ||
@@ -21,2 +18,5 @@ this.sync = null; | ||
} | ||
static logQuery(...args) { | ||
return logQuery.apply(null, args); | ||
} | ||
description() { | ||
@@ -67,9 +67,3 @@ return 'Unknown'; | ||
var duration = endAt.getTime() - startAt.getTime(); | ||
logQuery('Retrieved ' + | ||
ids.length + | ||
' objects of type ' + | ||
type + | ||
' in ' + | ||
duration + | ||
'ms'); | ||
logQuery('Retrieved ' + ids.length + ' objects of type ' + type + ' in ' + duration + 'ms'); | ||
return results; | ||
@@ -76,0 +70,0 @@ }); |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
function validateAdapter(batchAdapter, object) { | ||
if (object._adapter === batchAdapter || | ||
object._adapter.name == batchAdapter.name) { | ||
if (object._adapter === batchAdapter || object._adapter.name == batchAdapter.name) { | ||
return; | ||
} | ||
throw new Error('Cannot add an object in ' + | ||
object._adapter.description() + | ||
' to a Batch in ' + | ||
batchAdapter.description()); | ||
throw new Error('Cannot add an object in ' + object._adapter.description() + ' to a Batch in ' + batchAdapter.description()); | ||
} | ||
@@ -174,4 +170,3 @@ class Batch { | ||
if (op.op == 'patch') { | ||
if (Object.keys(op.patch.attributes).length === 0 && | ||
Object.keys(op.patch.belongs_to).length === 0) { | ||
if (Object.keys(op.patch.attributes).length === 0 && Object.keys(op.patch.belongs_to).length === 0) { | ||
// No-op | ||
@@ -193,9 +188,3 @@ continue; | ||
errors.forEach(function (error) { | ||
message += | ||
'\n ' + | ||
error.object.type.name + | ||
' ' + | ||
error.object.id + | ||
': ' + | ||
error.error.detail; | ||
message += '\n ' + error.object.type.name + ' ' + error.object.id + ': ' + error.error.detail; | ||
}); | ||
@@ -202,0 +191,0 @@ this.message = message; |
@@ -41,3 +41,3 @@ "use strict"; | ||
const promise = this.adapter.get(this.type.name, id); | ||
return promise.then(data => { | ||
return promise.then((data) => { | ||
if (data == null) { | ||
@@ -44,0 +44,0 @@ if (this.adapter.logWarnings) { |
@@ -14,4 +14,3 @@ "use strict"; | ||
else { | ||
this.authorization = | ||
'Basic ' + base64.encode(options.username + ':' + options.password); | ||
this.authorization = 'Basic ' + base64.encode(options.username + ':' + options.password); | ||
} | ||
@@ -18,0 +17,0 @@ } |
@@ -15,15 +15,2 @@ "use strict"; | ||
class Database { | ||
/** | ||
* Convenience factory method for getting a Database Object | ||
*/ | ||
static async instance(options) { | ||
var credentials = new credentials_1.ApiCredentials(options); | ||
let api = new JourneyAPIAdapter_1.JourneyAPIAdapter(credentials, null); | ||
await api.loadDataModel(); | ||
// setup a database instance now that we have all the required components | ||
return new Database(api.schema, api); | ||
} | ||
static getTypedDatabase(schema, adapter) { | ||
return new Database(schema, adapter); | ||
} | ||
constructor(schema, adapter) { | ||
@@ -45,4 +32,17 @@ for (var name in schema.objects) { | ||
} | ||
/** | ||
* Convenience factory method for getting a Database Object | ||
*/ | ||
static async instance(options) { | ||
var credentials = new credentials_1.ApiCredentials(options); | ||
let api = new JourneyAPIAdapter_1.JourneyAPIAdapter(credentials, null); | ||
await api.loadDataModel(); | ||
// setup a database instance now that we have all the required components | ||
return new Database(api.schema, api); | ||
} | ||
static getTypedDatabase(schema, adapter) { | ||
return new Database(schema, adapter); | ||
} | ||
} | ||
exports.Database = Database; | ||
//# sourceMappingURL=Database.js.map |
@@ -11,11 +11,2 @@ "use strict"; | ||
class DatabaseObject { | ||
// id is optional. If not specified, a new one will be assigned automatically. | ||
/** @internal */ | ||
static build(adapter, type, id, data) { | ||
var obj = new DatabaseObject(adapter, type, id); | ||
if (data != null) { | ||
obj.resolve(data); | ||
} | ||
return obj; | ||
} | ||
constructor(adapter, type, id) { | ||
@@ -406,7 +397,3 @@ if (adapter == null || typeof adapter.getData != 'function') { | ||
// Technically we can set the value here. However, it will be inconsistent with the getter. | ||
throw new Error('Use `.' + | ||
name + | ||
'(value)` instead of `.' + | ||
name + | ||
' = value` to set a relationship.'); | ||
throw new Error('Use `.' + name + '(value)` instead of `.' + name + ' = value` to set a relationship.'); | ||
}, | ||
@@ -552,2 +539,11 @@ enumerable: false, | ||
} | ||
// id is optional. If not specified, a new one will be assigned automatically. | ||
/** @internal */ | ||
static build(adapter, type, id, data) { | ||
var obj = new DatabaseObject(adapter, type, id); | ||
if (data != null) { | ||
obj.resolve(data); | ||
} | ||
return obj; | ||
} | ||
// Aliases | ||
@@ -554,0 +550,0 @@ /** |
@@ -17,2 +17,10 @@ "use strict"; | ||
class JourneyAPIAdapter extends BaseAdapter_1.BaseAdapter { | ||
constructor(credentials, schema, options = {}) { | ||
super(); | ||
this.name = 'api'; | ||
this.batchLimit = BATCH_LIMIT; | ||
this.schema = schema; | ||
this.options = options; | ||
this.credentials = credentials; | ||
} | ||
static apiToInternalFormat(type, apiObj) { | ||
@@ -81,10 +89,2 @@ var dbObj = { | ||
} | ||
constructor(credentials, schema, options = {}) { | ||
super(); | ||
this.name = 'api'; | ||
this.batchLimit = BATCH_LIMIT; | ||
this.schema = schema; | ||
this.options = options; | ||
this.credentials = credentials; | ||
} | ||
description() { | ||
@@ -105,5 +105,5 @@ return 'JourneyAPI'; | ||
var url = this.credentials.api4Url() + 'objects/' + type + '/' + id + '.json'; | ||
return this.apiGet(url).then(result => { | ||
return this.apiGet(url).then((result) => { | ||
return JourneyAPIAdapter.apiToInternalFormat(this.schema.objects[type], result); | ||
}, error => { | ||
}, (error) => { | ||
if (error.type == 'OBJECT_NOT_FOUND') { | ||
@@ -119,4 +119,3 @@ return null; | ||
if (patch != null) { | ||
if (Object.keys(patch.attributes).length === 0 && | ||
Object.keys(patch.belongs_to).length === 0) { | ||
if (Object.keys(patch.attributes).length === 0 && Object.keys(patch.belongs_to).length === 0) { | ||
// No change - don't save anything | ||
@@ -208,5 +207,3 @@ return Promise.resolve(null); | ||
var error = response.operations[j].error; | ||
if (crud[j].op == 'delete' && | ||
error != null && | ||
error.type == 'OBJECT_NOT_FOUND') { | ||
if (crud[j].op == 'delete' && error != null && error.type == 'OBJECT_NOT_FOUND') { | ||
// For idempotency, we ignore these. | ||
@@ -286,6 +283,4 @@ error = null; | ||
url = this.credentials.api4Url() + 'objects/' + typeName + '.json'; | ||
var limitUrl = 'limit=' + | ||
(query.limitNumber && query.limitNumber > 0 ? query.limitNumber : ''); | ||
var skipUrl = 'skip=' + | ||
(query.skipNumber && query.skipNumber > 0 ? query.skipNumber : ''); | ||
var limitUrl = 'limit=' + (query.limitNumber && query.limitNumber > 0 ? query.limitNumber : ''); | ||
var skipUrl = 'skip=' + (query.skipNumber && query.skipNumber > 0 ? query.skipNumber : ''); | ||
var sortUrl = serializeSortCriteriaToUriEncoding(sortingCriteria(query.ordering), 'sort'); | ||
@@ -308,3 +303,3 @@ url += '?' + [limitUrl, skipUrl, sortUrl].join('&'); | ||
executeQueryGetMore(query, results, originalLimit) { | ||
return this.doApiQuery(query).then(data => { | ||
return this.doApiQuery(query).then((data) => { | ||
forEach(data.objects, function (obj) { | ||
@@ -339,8 +334,3 @@ results.push(JourneyAPIAdapter.apiToInternalFormat(query.type, obj)); | ||
return response.text().then(function (text) { | ||
var error = new Error('HTTP Error ' + | ||
response.status + | ||
': ' + | ||
response.statusText + | ||
'\n' + | ||
text); | ||
var error = new Error('HTTP Error ' + response.status + ': ' + response.statusText + '\n' + text); | ||
Object.defineProperty(error, 'body', { value: text }); | ||
@@ -347,0 +337,0 @@ Object.defineProperty(error, 'status', { value: response.status }); |
@@ -23,9 +23,3 @@ "use strict"; | ||
toString() { | ||
return ('(' + | ||
this.latitude + | ||
',' + | ||
this.longitude + | ||
' ~' + | ||
this.horizontal_accuracy + | ||
')'); | ||
return '(' + this.latitude + ',' + this.longitude + ' ~' + this.horizontal_accuracy + ')'; | ||
} | ||
@@ -32,0 +26,0 @@ toJSON() { |
@@ -147,5 +147,3 @@ "use strict"; | ||
else { | ||
if (format.length >= 3 && | ||
format[0] == '.' && | ||
format[format.length - 1] == 'f') { | ||
if (format.length >= 3 && format[0] == '.' && format[format.length - 1] == 'f') { | ||
var digits = parseInt(format.substring(1, format.length - 1), 10); | ||
@@ -152,0 +150,0 @@ if (digits >= 0 && digits < 20) { |
@@ -43,2 +43,15 @@ "use strict"; | ||
} | ||
static isQuery(value) { | ||
if (value == null) { | ||
return false; | ||
} | ||
if (value instanceof Query) { | ||
return true; | ||
} | ||
if (typeof value == 'object') { | ||
// This covers other implementations of the Query class | ||
return typeof value.where == 'function' && typeof value.toArray == 'function'; | ||
} | ||
return false; | ||
} | ||
/** @internal */ | ||
@@ -356,4 +369,3 @@ _clone(newType) { | ||
for (let display of columns) { | ||
if (display && | ||
typeof display.extractRelationshipStructure == 'function') { | ||
if (display && typeof display.extractRelationshipStructure == 'function') { | ||
deepMerge(relationships, display.extractRelationshipStructure(type)); | ||
@@ -366,4 +378,3 @@ } | ||
const display = columns[key]; | ||
if (display && | ||
typeof display.extractRelationshipStructure == 'function') { | ||
if (display && typeof display.extractRelationshipStructure == 'function') { | ||
deepMerge(relationships, display.extractRelationshipStructure(type)); | ||
@@ -370,0 +381,0 @@ } |
@@ -70,4 +70,3 @@ "use strict"; | ||
} | ||
else if (typeof attributeValue == 'string' && | ||
typeof this.value == 'string') { | ||
else if (typeof attributeValue == 'string' && typeof this.value == 'string') { | ||
if (attributeValue < this.value) { | ||
@@ -85,5 +84,3 @@ compareDiff = -1; | ||
// Compare seconds only | ||
compareDiff = | ||
discardMillis(attributeValue.getTime()) - | ||
discardMillis(this.value.getTime()); | ||
compareDiff = discardMillis(attributeValue.getTime()) - discardMillis(this.value.getTime()); | ||
} | ||
@@ -95,4 +92,3 @@ else if (attributeValue instanceof core_date_1.Day || this.value instanceof core_date_1.Day) { | ||
// Also works for JSON strings. | ||
compareDiff = | ||
new core_date_1.Day(attributeValue).valueOf() - new core_date_1.Day(this.value).valueOf(); | ||
compareDiff = new core_date_1.Day(attributeValue).valueOf() - new core_date_1.Day(this.value).valueOf(); | ||
} | ||
@@ -141,3 +137,3 @@ catch (err) { | ||
if (typeof attributeValue == 'string' && typeof this.value == 'string') { | ||
return (attributeValue.toLowerCase().indexOf(this.value.toLowerCase()) >= 0); | ||
return attributeValue.toLowerCase().indexOf(this.value.toLowerCase()) >= 0; | ||
} | ||
@@ -150,3 +146,3 @@ else { | ||
if (typeof attributeValue == 'string' && typeof this.value == 'string') { | ||
return (attributeValue.toLowerCase().indexOf(this.value.toLowerCase()) === 0); | ||
return attributeValue.toLowerCase().indexOf(this.value.toLowerCase()) === 0; | ||
} | ||
@@ -167,6 +163,3 @@ else { | ||
// Works for both relationships (user = ?) and relationship ids (user_id = ?) | ||
return [ | ||
this.attribute.relationship + '_id ' + this.operator + ' ?', | ||
this.value | ||
]; | ||
return [this.attribute.relationship + '_id ' + this.operator + ' ?', this.value]; | ||
} | ||
@@ -372,4 +365,3 @@ else { | ||
function isLetter(character) { | ||
return ((character >= 'a' && character <= 'z') || | ||
(character >= 'A' && character <= 'Z')); | ||
return (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z'); | ||
} | ||
@@ -395,8 +387,3 @@ function isDigit(character) { | ||
exception(message, start, end) { | ||
let error = new Error(message + | ||
'\n' + | ||
this.expression + | ||
'\n' + | ||
new Array(this.i + 1).join(' ') + | ||
'^'); | ||
let error = new Error(message + '\n' + this.expression + '\n' + new Array(this.i + 1).join(' ') + '^'); | ||
if (start == null) { | ||
@@ -454,4 +441,3 @@ start = this.i; | ||
this.checkBuffer(); | ||
if (this.expression[this.i] == '?' && | ||
(this.isWordSeparator(this.i + 1) || this.expression[this.i + 1] == ')')) { | ||
if (this.expression[this.i] == '?' && (this.isWordSeparator(this.i + 1) || this.expression[this.i + 1] == ')')) { | ||
this.i += 1; | ||
@@ -517,4 +503,3 @@ this.advance(); | ||
if (token == this.expression.substring(this.i, this.i + token.length)) { | ||
if (!isLetter(token[token.length - 1]) || | ||
this.isWordSeparator(this.i + token.length)) { | ||
if (!isLetter(token[token.length - 1]) || this.isWordSeparator(this.i + token.length)) { | ||
return true; | ||
@@ -590,7 +575,3 @@ } | ||
if (attribute == null) { | ||
throw this.tokenizer.exception("'" + | ||
attributeName + | ||
"' is not a valid field of '" + | ||
this.scopeType.name + | ||
"'", attributeStart, attributeEnd); | ||
throw this.tokenizer.exception("'" + attributeName + "' is not a valid field of '" + this.scopeType.name + "'", attributeStart, attributeEnd); | ||
} | ||
@@ -597,0 +578,0 @@ else if (attribute.type.isCollection) { |
@@ -29,5 +29,3 @@ "use strict"; | ||
} | ||
return this._lockNext(multi) | ||
.then(promiseFn) | ||
.finally(unlock); | ||
return this._lockNext(multi).then(promiseFn).finally(unlock); | ||
} | ||
@@ -34,0 +32,0 @@ /** |
@@ -5,3 +5,3 @@ "use strict"; | ||
function delay(ms, value) { | ||
return new Promise(resolve => setTimeout(() => resolve(value), ms)); | ||
return new Promise((resolve) => setTimeout(() => resolve(value), ms)); | ||
} | ||
@@ -25,7 +25,3 @@ // If a fetch request errors with a "socket hang up" or similar, retry it. | ||
if (retriesLeft > 0) { | ||
return handleNodeFetchError(error, exports.retryableFetch, [ | ||
url, | ||
options, | ||
retriesLeft - 1 | ||
]); | ||
return handleNodeFetchError(error, exports.retryableFetch, [url, options, retriesLeft - 1]); | ||
// TODO: Can we handle native/browser fetch errors? | ||
@@ -32,0 +28,0 @@ // FIXME: do we want to retry on request.timeout? |
@@ -35,3 +35,3 @@ "use strict"; | ||
} | ||
this.promise = this.promisedTransaction(tx => { | ||
this.promise = this.promisedTransaction((tx) => { | ||
tx.loggedSql('CREATE TABLE IF NOT EXISTS versions(name TEXT PRIMARY KEY, version INTEGER)', []); | ||
@@ -83,6 +83,3 @@ tx.loggedSql('SELECT * FROM versions WHERE name=?', ['db'], retrievedVersion); | ||
} | ||
return Promise.all([ | ||
clearDatabase('objects'), | ||
clearDatabase('local-objects') | ||
]); | ||
return Promise.all([clearDatabase('objects'), clearDatabase('local-objects')]); | ||
} | ||
@@ -95,3 +92,3 @@ description() { | ||
var ids = []; | ||
return this.promisedTransaction(tx => { | ||
return this.promisedTransaction((tx) => { | ||
for (var i = 0; i < crud.length; i++) { | ||
@@ -149,4 +146,3 @@ var operation = crud[i]; | ||
if (patch != null) { | ||
if (Object.keys(patch.attributes).length === 0 && | ||
Object.keys(patch.belongs_to).length === 0) { | ||
if (Object.keys(patch.attributes).length === 0 && Object.keys(patch.belongs_to).length === 0) { | ||
// No change - don't save anything | ||
@@ -163,3 +159,3 @@ return null; | ||
this.ensureOpen(); | ||
return this.promisedTransaction(tx => { | ||
return this.promisedTransaction((tx) => { | ||
this.transactionSaveData(tx, data, patch); | ||
@@ -208,5 +204,3 @@ }); | ||
var typeName = query.type.name; | ||
return this.simpleQuery('SELECT * FROM objects WHERE type=?', [ | ||
typeName | ||
]).then(rs => { | ||
return this.simpleQuery('SELECT * FROM objects WHERE type=?', [typeName]).then((rs) => { | ||
var all = []; | ||
@@ -285,9 +279,3 @@ for (var i = 0; i < rs.rows.length; i++) { | ||
var duration = endAt.getTime() - startAt.getTime(); | ||
logQuery('Retrieved ' + | ||
ids.length + | ||
' objects of type ' + | ||
type + | ||
' in ' + | ||
duration + | ||
'ms'); | ||
logQuery('Retrieved ' + ids.length + ' objects of type ' + type + ' in ' + duration + 'ms'); | ||
return results; | ||
@@ -362,3 +350,3 @@ }); | ||
var startAt = new Date(); | ||
return this.promisedTransaction(tx => { | ||
return this.promisedTransaction((tx) => { | ||
tx.executeSql(query, parameters, handleResults); | ||
@@ -370,3 +358,3 @@ }).then(function () { | ||
return resultset; | ||
}, err => { | ||
}, (err) => { | ||
this.logError(query, parameters, ' failed with ', err); | ||
@@ -377,3 +365,7 @@ return Promise.reject(err); | ||
transactionSaveData(tx, data, patch) { | ||
tx.loggedSql('INSERT OR REPLACE INTO objects(id, type, data) VALUES (?,?,?)', [data.id, data.type, JSON.stringify(data)]); | ||
tx.loggedSql('INSERT OR REPLACE INTO objects(id, type, data) VALUES (?,?,?)', [ | ||
data.id, | ||
data.type, | ||
JSON.stringify(data) | ||
]); | ||
} | ||
@@ -387,5 +379,5 @@ transactionDestroy(tx, type, id) { | ||
} | ||
exports.WebSQLAdapter = WebSQLAdapter; | ||
WebSQLAdapter.adapterName = 'WebSQLAdapter'; | ||
WebSQLAdapter.supportsDiagnostics = true; | ||
exports.WebSQLAdapter = WebSQLAdapter; | ||
function queryIn(count) { | ||
@@ -392,0 +384,0 @@ var q = ''; |
{ | ||
"name": "@journeyapps/db", | ||
"version": "0.0.0-dev.ae608c2.224c284", | ||
"version": "0.0.0-dev.c97cb24.aa0a033", | ||
"description": "Journey JS library", | ||
@@ -15,6 +15,6 @@ "main": "./dist/src/index.js", | ||
"dependencies": { | ||
"@journeyapps/core-date": "0.0.0-dev.ae608c2.224c284", | ||
"@journeyapps/core-xml": "0.0.0-dev.ae608c2.224c284", | ||
"@journeyapps/evaluator": "0.0.0-dev.ae608c2.224c284", | ||
"@journeyapps/parser-schema": "0.0.0-dev.ae608c2.224c284", | ||
"@journeyapps/core-date": "0.0.0-dev.c97cb24.aa0a033", | ||
"@journeyapps/core-xml": "0.0.0-dev.c97cb24.aa0a033", | ||
"@journeyapps/evaluator": "0.0.0-dev.c97cb24.aa0a033", | ||
"@journeyapps/parser-schema": "0.0.0-dev.c97cb24.aa0a033", | ||
"isomorphic-fetch": "^2.2.1", | ||
@@ -32,3 +32,3 @@ "moment": "^2.24.0", | ||
], | ||
"gitHead": "e1cedf0b9f9515cbca7436ed517e9bbdad9560b4" | ||
"gitHead": "8ae168bc0a165bf87ef94d74456b0498d6201741" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
288316
4520
+ Added@journeyapps/core-date@0.0.0-dev.c97cb24.aa0a033(transitive)
+ Added@journeyapps/core-xml@0.0.0-dev.c97cb24.aa0a033(transitive)
+ Added@journeyapps/evaluator@0.0.0-dev.c97cb24.aa0a033(transitive)
+ Added@journeyapps/parser-common@0.0.0-dev.c97cb24.aa0a033(transitive)
+ Added@journeyapps/parser-schema@0.0.0-dev.c97cb24.aa0a033(transitive)
- Removed@journeyapps/core-date@0.0.0-dev.ae608c2.224c284(transitive)
- Removed@journeyapps/core-xml@0.0.0-dev.ae608c2.224c284(transitive)
- Removed@journeyapps/evaluator@0.0.0-dev.ae608c2.224c284(transitive)
- Removed@journeyapps/parser-common@0.0.0-dev.ae608c2.224c284(transitive)
- Removed@journeyapps/parser-schema@0.0.0-dev.ae608c2.224c284(transitive)