0fftime 0fftime -4 years ago 141
TypeScript Question

Typescript Cannot write file would overwrite input file. Error when compiling Ionic 3 app

I've been trying to use a given .js api in an ionic 3 project. With some help I was able to get the api into to the project without any errors and am now able to use the functions it has. However the API uses

JQuery 2.1.0
and now when compiling the project I get the following error:
Cannot write file '.../src/assets/jquery-2.1.0.min.js' because it would overwrite input file.
I have no idea on how to fix this.. I've tried to import the jquery file as a module but that gives me some errors as well. Both the api.ts and jquery-2.1.0.min.js are in the
src/assets/
folder and then the api is imported in my
src/pages/home/home.ts
file.

This is the api.ts:

import * as $ from './jquery-2.1.0.min.js';

export class API {
ServerUrl = '';

Type = {
Day: 'day',
Night: 'night'
};

Days = {
Monday: 'Monday',
Tuesday: 'Tuesday',
Wednesday: 'Wednesday',
Thursday: 'Thursday',
Friday: 'Friday',
Saturday: 'Saturday',
Sunday: 'Sunday'
};

MinTemperature = parseFloat('5.0');
MaxTemperature = parseFloat('30.0');
MaxSwitches = 5;

Time;
CurrentDay;
DayTemperature;
NightTemperature;
CurrentTemperature;
TargetTemperature;
ProgramState;

Program:any = {};

constructor() {
this.Program[this.Days.Monday] = [];
this.Program[this.Days.Tuesday] = [];
this.Program[this.Days.Wednesday] = [];
this.Program[this.Days.Thursday] = [];
this.Program[this.Days.Friday] = [];
this.Program[this.Days.Saturday] = [];
this.Program[this.Days.Sunday] = [];
}

/* Retrieve day program
*/
getProgram(day) {
return this.Program[day];
}

/* Sorts the heating periods (the periods when the heating is on) and merges overlapping ones
*/
sortMergeProgram(day) {
let program = this.getProgram(day);
program.sort(function(a, b) {
return this.parseTime(a[0]) - this.parseTime(b[0])
});
for (let i = 0; i < program.length - 1; i++) {
if (this.parseTime(program[i][1]) >= this.parseTime(program[i + 1][0])) {
let start = (program[i][0]);
let end = (this.parseTime(program[i][1]) > this.parseTime(program[i + 1][1])) ? program[i][1] : program[i + 1][1];
program.splice(i, 2);
program.push([start, end]);
this.sortMergeProgram(day);
break;
}
}
}

/* Retrieves all data from the server except for weekProgram
*/
get(attribute_name, xml_tag) {
return this.requestData(
"/" + attribute_name,
function(data) {
return $(data).find(xml_tag).text();
}
);
}

/* Retrieves the week program
*/
getWeekProgram() {
return this.requestData(
'/weekProgram',
function(data) {
$(data).find('day').each(function() {
let day = (<any>$(this)).attr('name');
this.Program[day] = [];
$(this).find('switch').each(function() {
if ((<any>$(this)).attr('state') == 'on') {
if ((<any>$(this)).attr('type') == this.Type.Day) {
this.getProgram(day).push([$(this).text(), '00:00']);
} else {
this.getProgram(day)[this.getProgram(day).length - 1][1] = $(this).text();
}
}
})
});
return this.Program;
}
);
}

/* Uploads all data to the server except for currentTemperature and weekProgram
*/
put(attribute_name, xml_tag, value) {
this.uploadData("/" + attribute_name, "<" + xml_tag + ">" + value + "</" + xml_tag + ">");
}

requestData(address, func) {
let result;
(<any>$).ajax({
type: "get",
url: this.ServerUrl + address,
dataType: "xml",
async: false,
success: function(data) {
result = func(data);
}
});
return result;
}

/* Uploads the week program
*/
setWeekProgram() {
let doc = document.implementation.createDocument(null, null, null);
let program = doc.createElement('week_program');
program.setAttribute('state', this.ProgramState ? 'on' : 'off');
for (let key in this.Program) {
let day = doc.createElement('day');
day.setAttribute('name', key);

let daySwitches = [];
let nightSwitches = [];

let i, text, sw;
let periods = this.getProgram(key);
for (i = 0; i < periods.length; i++) {
daySwitches.push(periods[i][0]);
nightSwitches.push(periods[i][1]);
}

for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Day);

if (i < daySwitches.length) {
sw.setAttribute('state', 'on');
text = doc.createTextNode(daySwitches[i]);
} else {
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
}
sw.appendChild(text);
day.appendChild(sw);
}

for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Night);

if (i < nightSwitches.length) {
sw.setAttribute('state', 'on');
text = doc.createTextNode(nightSwitches[i]);
} else {
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
}
sw.appendChild(text);
day.appendChild(sw);
}
program.appendChild(day);
}
doc.appendChild(program);
this.uploadData('/weekProgram', (new XMLSerializer()).serializeToString(doc));
}

/* Creates the default week program
*/
setDefault() {
let doc = document.implementation.createDocument(null, null, null);
let program = doc.createElement('week_program');
program.setAttribute('state', this.ProgramState ? 'on' : 'off');
for (let key in this.Program) {
let day = doc.createElement('day');
day.setAttribute('name', key);

let daySwitches = [];
let nightSwitches = [];

let i, text, sw;

for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Night);
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
sw.appendChild(text);
day.appendChild(sw);
}

for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Day);
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
sw.appendChild(text);
day.appendChild(sw);
}

program.appendChild(day);
}
doc.appendChild(program);
this.uploadData('/weekProgram', (new XMLSerializer()).serializeToString(doc));
}

uploadData(address, xml) {
(<any>$).ajax({
type: "put",
url: this.ServerUrl + address,
contentType: 'application/xml',
data: xml,
async: false
});
}

parseTime(t) {
return parseFloat(t.substr(0, 2)) + parseFloat(t.substr(3, 2)) / 60;
}

/* Adds a heating period for a specific day
*/
addPeriod(day, start, end) {
let program = this.getWeekProgram()[day];
program.push([start, end]);
this.sortMergeProgram(day);
this.setWeekProgram();
}

/* Removes a heating period from a specific day.
idx is the idex of the period with values from 0 to 4
*/
removePeriod(day, idx) {
let program = this.getWeekProgram()[day];
let start = program[idx][0];
let end = program[idx][1];
program.splice(idx, 1);
this.setWeekProgram();
}

/* Checks whether the temperature is within the range [5.0,30.0]
*/
inTemperatureBoundaries(temp) {
temp = parseFloat(temp);
return (temp >= this.MinTemperature && temp <= this.MaxTemperature);
}
}


And this is the jquery-2.1.0.js that was provided (pastebin link since the file is too large, it is very large).

I have already edited my
tsconfig.json
to also have
"allowJs"= true,
in there.

Is there anyone who know how I could possibly fix this?

Thanks in advance!!

Answer Source

I managed to fix this issue by not using the jquery.js file but instead by importing jquery. Following this tutorial: https://x-team.com/blog/include-javascript-libraries-in-an-ionic-2-typescript-project/ but instead using the jquery-2.1.0 version from npm! After I just imported jquery in the following way: import * as $ from 'jquery'; and everything works fine!!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download